OSDN Git Service

2005-07-02 Zack Weinberg <zack@codesourcery.com>
[pf3gnuchains/gcc-fork.git] / gcc / cp / pt.c
1 /* Handle parameterized types (templates) for GNU C++.
2    Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3    2001, 2002, 2003, 2004, 2005  Free Software Foundation, Inc.
4    Written by Ken Raeburn (raeburn@cygnus.com) while at Watchmaker Computing.
5    Rewritten by Jason Merrill (jason@cygnus.com).
6
7 This file is part of GCC.
8
9 GCC is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2, or (at your option)
12 any later version.
13
14 GCC is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with GCC; see the file COPYING.  If not, write to
21 the Free Software Foundation, 51 Franklin Street, Fifth Floor,
22 Boston, MA 02110-1301, USA.  */
23
24 /* Known bugs or deficiencies include:
25
26      all methods must be provided in header files; can't use a source
27      file that contains only the method templates and "just win".  */
28
29 #include "config.h"
30 #include "system.h"
31 #include "coretypes.h"
32 #include "tm.h"
33 #include "obstack.h"
34 #include "tree.h"
35 #include "pointer-set.h"
36 #include "flags.h"
37 #include "c-common.h"
38 #include "cp-tree.h"
39 #include "cp-objcp-common.h"
40 #include "tree-inline.h"
41 #include "decl.h"
42 #include "output.h"
43 #include "except.h"
44 #include "toplev.h"
45 #include "rtl.h"
46 #include "timevar.h"
47 #include "tree-iterator.h"
48
49 /* The type of functions taking a tree, and some additional data, and
50    returning an int.  */
51 typedef int (*tree_fn_t) (tree, void*);
52
53 /* The PENDING_TEMPLATES is a TREE_LIST of templates whose
54    instantiations have been deferred, either because their definitions
55    were not yet available, or because we were putting off doing the work.
56    The TREE_PURPOSE of each entry is either a DECL (for a function or
57    static data member), or a TYPE (for a class) indicating what we are
58    hoping to instantiate.  The TREE_VALUE is not used.  */
59 static GTY(()) tree pending_templates;
60 static GTY(()) tree last_pending_template;
61
62 int processing_template_parmlist;
63 static int template_header_count;
64
65 static GTY(()) tree saved_trees;
66 static GTY(()) varray_type inline_parm_levels;
67 static size_t inline_parm_levels_used;
68
69 static GTY(()) tree current_tinst_level;
70
71 static GTY(()) tree saved_access_scope;
72
73 /* Live only within one (recursive) call to tsubst_expr.  We use
74    this to pass the statement expression node from the STMT_EXPR
75    to the EXPR_STMT that is its result.  */
76 static tree cur_stmt_expr;
77
78 /* A map from local variable declarations in the body of the template
79    presently being instantiated to the corresponding instantiated
80    local variables.  */
81 static htab_t local_specializations;
82
83 #define UNIFY_ALLOW_NONE 0
84 #define UNIFY_ALLOW_MORE_CV_QUAL 1
85 #define UNIFY_ALLOW_LESS_CV_QUAL 2
86 #define UNIFY_ALLOW_DERIVED 4
87 #define UNIFY_ALLOW_INTEGER 8
88 #define UNIFY_ALLOW_OUTER_LEVEL 16
89 #define UNIFY_ALLOW_OUTER_MORE_CV_QUAL 32
90 #define UNIFY_ALLOW_OUTER_LESS_CV_QUAL 64
91
92 static void push_access_scope (tree);
93 static void pop_access_scope (tree);
94 static int resolve_overloaded_unification (tree, tree, tree, tree,
95                                            unification_kind_t, int);
96 static int try_one_overload (tree, tree, tree, tree, tree,
97                              unification_kind_t, int, bool);
98 static int unify (tree, tree, tree, tree, int);
99 static void add_pending_template (tree);
100 static void reopen_tinst_level (tree);
101 static tree classtype_mangled_name (tree);
102 static char* mangle_class_name_for_template (const char *, tree, tree);
103 static tree tsubst_initializer_list (tree, tree);
104 static tree get_class_bindings (tree, tree, tree);
105 static tree coerce_template_parms (tree, tree, tree, tsubst_flags_t, int);
106 static void tsubst_enum (tree, tree, tree);
107 static tree add_to_template_args (tree, tree);
108 static tree add_outermost_template_args (tree, tree);
109 static bool check_instantiated_args (tree, tree, tsubst_flags_t);
110 static int maybe_adjust_types_for_deduction (unification_kind_t, tree*, tree*);
111 static int  type_unification_real (tree, tree, tree, tree,
112                                    int, unification_kind_t, int);
113 static void note_template_header (int);
114 static tree convert_nontype_argument_function (tree, tree);
115 static tree convert_nontype_argument (tree, tree);
116 static tree convert_template_argument (tree, tree, tree,
117                                        tsubst_flags_t, int, tree);
118 static int for_each_template_parm (tree, tree_fn_t, void*,
119                                    struct pointer_set_t*);
120 static tree build_template_parm_index (int, int, int, tree, tree);
121 static int inline_needs_template_parms (tree);
122 static void push_inline_template_parms_recursive (tree, int);
123 static tree retrieve_local_specialization (tree);
124 static void register_local_specialization (tree, tree);
125 static tree reduce_template_parm_level (tree, tree, int);
126 static int mark_template_parm (tree, void *);
127 static int template_parm_this_level_p (tree, void *);
128 static tree tsubst_friend_function (tree, tree);
129 static tree tsubst_friend_class (tree, tree);
130 static int can_complete_type_without_circularity (tree);
131 static tree get_bindings (tree, tree, tree, bool);
132 static int template_decl_level (tree);
133 static int check_cv_quals_for_unify (int, tree, tree);
134 static tree tsubst_template_arg (tree, tree, tsubst_flags_t, tree);
135 static tree tsubst_template_args (tree, tree, tsubst_flags_t, tree);
136 static tree tsubst_template_parms (tree, tree, tsubst_flags_t);
137 static void regenerate_decl_from_template (tree, tree);
138 static tree most_specialized (tree, tree, tree);
139 static tree most_specialized_class (tree, tree);
140 static int template_class_depth_real (tree, int);
141 static tree tsubst_aggr_type (tree, tree, tsubst_flags_t, tree, int);
142 static tree tsubst_arg_types (tree, tree, tsubst_flags_t, tree);
143 static tree tsubst_function_type (tree, tree, tsubst_flags_t, tree);
144 static void check_specialization_scope (void);
145 static tree process_partial_specialization (tree);
146 static void set_current_access_from_decl (tree);
147 static void check_default_tmpl_args (tree, tree, int, int);
148 static tree tsubst_call_declarator_parms (tree, tree, tsubst_flags_t, tree);
149 static tree get_template_base (tree, tree, tree, tree);
150 static int verify_class_unification (tree, tree, tree);
151 static tree try_class_unification (tree, tree, tree, tree);
152 static int coerce_template_template_parms (tree, tree, tsubst_flags_t,
153                                            tree, tree);
154 static tree determine_specialization (tree, tree, tree *, int, int);
155 static int template_args_equal (tree, tree);
156 static void tsubst_default_arguments (tree);
157 static tree for_each_template_parm_r (tree *, int *, void *);
158 static tree copy_default_args_to_explicit_spec_1 (tree, tree);
159 static void copy_default_args_to_explicit_spec (tree);
160 static int invalid_nontype_parm_type_p (tree, tsubst_flags_t);
161 static int eq_local_specializations (const void *, const void *);
162 static bool dependent_type_p_r (tree);
163 static tree tsubst (tree, tree, tsubst_flags_t, tree);
164 static tree tsubst_expr (tree, tree, tsubst_flags_t, tree);
165 static tree tsubst_copy (tree, tree, tsubst_flags_t, tree);
166
167 /* Make the current scope suitable for access checking when we are
168    processing T.  T can be FUNCTION_DECL for instantiated function
169    template, or VAR_DECL for static member variable (need by
170    instantiate_decl).  */
171
172 static void
173 push_access_scope (tree t)
174 {
175   gcc_assert (TREE_CODE (t) == FUNCTION_DECL
176               || TREE_CODE (t) == VAR_DECL);
177
178   if (DECL_FRIEND_CONTEXT (t))
179     push_nested_class (DECL_FRIEND_CONTEXT (t));
180   else if (DECL_CLASS_SCOPE_P (t))
181     push_nested_class (DECL_CONTEXT (t));
182   else
183     push_to_top_level ();
184
185   if (TREE_CODE (t) == FUNCTION_DECL)
186     {
187       saved_access_scope = tree_cons
188         (NULL_TREE, current_function_decl, saved_access_scope);
189       current_function_decl = t;
190     }
191 }
192
193 /* Restore the scope set up by push_access_scope.  T is the node we
194    are processing.  */
195
196 static void
197 pop_access_scope (tree t)
198 {
199   if (TREE_CODE (t) == FUNCTION_DECL)
200     {
201       current_function_decl = TREE_VALUE (saved_access_scope);
202       saved_access_scope = TREE_CHAIN (saved_access_scope);
203     }
204
205   if (DECL_FRIEND_CONTEXT (t) || DECL_CLASS_SCOPE_P (t))
206     pop_nested_class ();
207   else
208     pop_from_top_level ();
209 }
210
211 /* Do any processing required when DECL (a member template
212    declaration) is finished.  Returns the TEMPLATE_DECL corresponding
213    to DECL, unless it is a specialization, in which case the DECL
214    itself is returned.  */
215
216 tree
217 finish_member_template_decl (tree decl)
218 {
219   if (decl == error_mark_node)
220     return error_mark_node;
221
222   gcc_assert (DECL_P (decl));
223
224   if (TREE_CODE (decl) == TYPE_DECL)
225     {
226       tree type;
227
228       type = TREE_TYPE (decl);
229       if (IS_AGGR_TYPE (type)
230           && CLASSTYPE_TEMPLATE_INFO (type)
231           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
232         {
233           tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
234           check_member_template (tmpl);
235           return tmpl;
236         }
237       return NULL_TREE;
238     }
239   else if (TREE_CODE (decl) == FIELD_DECL)
240     error ("data member %qD cannot be a member template", decl);
241   else if (DECL_TEMPLATE_INFO (decl))
242     {
243       if (!DECL_TEMPLATE_SPECIALIZATION (decl))
244         {
245           check_member_template (DECL_TI_TEMPLATE (decl));
246           return DECL_TI_TEMPLATE (decl);
247         }
248       else
249         return decl;
250     }
251   else
252     error ("invalid member template declaration %qD", decl);
253
254   return error_mark_node;
255 }
256
257 /* Returns the template nesting level of the indicated class TYPE.
258
259    For example, in:
260      template <class T>
261      struct A
262      {
263        template <class U>
264        struct B {};
265      };
266
267    A<T>::B<U> has depth two, while A<T> has depth one.
268    Both A<T>::B<int> and A<int>::B<U> have depth one, if
269    COUNT_SPECIALIZATIONS is 0 or if they are instantiations, not
270    specializations.
271
272    This function is guaranteed to return 0 if passed NULL_TREE so
273    that, for example, `template_class_depth (current_class_type)' is
274    always safe.  */
275
276 static int
277 template_class_depth_real (tree type, int count_specializations)
278 {
279   int depth;
280
281   for (depth = 0;
282        type && TREE_CODE (type) != NAMESPACE_DECL;
283        type = (TREE_CODE (type) == FUNCTION_DECL)
284          ? CP_DECL_CONTEXT (type) : TYPE_CONTEXT (type))
285     {
286       if (TREE_CODE (type) != FUNCTION_DECL)
287         {
288           if (CLASSTYPE_TEMPLATE_INFO (type)
289               && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (type))
290               && ((count_specializations
291                    && CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
292                   || uses_template_parms (CLASSTYPE_TI_ARGS (type))))
293             ++depth;
294         }
295       else
296         {
297           if (DECL_TEMPLATE_INFO (type)
298               && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (type))
299               && ((count_specializations
300                    && DECL_TEMPLATE_SPECIALIZATION (type))
301                   || uses_template_parms (DECL_TI_ARGS (type))))
302             ++depth;
303         }
304     }
305
306   return depth;
307 }
308
309 /* Returns the template nesting level of the indicated class TYPE.
310    Like template_class_depth_real, but instantiations do not count in
311    the depth.  */
312
313 int
314 template_class_depth (tree type)
315 {
316   return template_class_depth_real (type, /*count_specializations=*/0);
317 }
318
319 /* Returns 1 if processing DECL as part of do_pending_inlines
320    needs us to push template parms.  */
321
322 static int
323 inline_needs_template_parms (tree decl)
324 {
325   if (! DECL_TEMPLATE_INFO (decl))
326     return 0;
327
328   return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (most_general_template (decl)))
329           > (processing_template_decl + DECL_TEMPLATE_SPECIALIZATION (decl)));
330 }
331
332 /* Subroutine of maybe_begin_member_template_processing.
333    Push the template parms in PARMS, starting from LEVELS steps into the
334    chain, and ending at the beginning, since template parms are listed
335    innermost first.  */
336
337 static void
338 push_inline_template_parms_recursive (tree parmlist, int levels)
339 {
340   tree parms = TREE_VALUE (parmlist);
341   int i;
342
343   if (levels > 1)
344     push_inline_template_parms_recursive (TREE_CHAIN (parmlist), levels - 1);
345
346   ++processing_template_decl;
347   current_template_parms
348     = tree_cons (size_int (processing_template_decl),
349                  parms, current_template_parms);
350   TEMPLATE_PARMS_FOR_INLINE (current_template_parms) = 1;
351
352   begin_scope (TREE_VEC_LENGTH (parms) ? sk_template_parms : sk_template_spec,
353                NULL);
354   for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
355     {
356       tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
357       gcc_assert (DECL_P (parm));
358
359       switch (TREE_CODE (parm))
360         {
361         case TYPE_DECL:
362         case TEMPLATE_DECL:
363           pushdecl (parm);
364           break;
365
366         case PARM_DECL:
367           {
368             /* Make a CONST_DECL as is done in process_template_parm.
369                It is ugly that we recreate this here; the original
370                version built in process_template_parm is no longer
371                available.  */
372             tree decl = build_decl (CONST_DECL, DECL_NAME (parm),
373                                     TREE_TYPE (parm));
374             DECL_ARTIFICIAL (decl) = 1;
375             TREE_CONSTANT (decl) = 1;
376             TREE_INVARIANT (decl) = 1;
377             TREE_READONLY (decl) = 1;
378             DECL_INITIAL (decl) = DECL_INITIAL (parm);
379             SET_DECL_TEMPLATE_PARM_P (decl);
380             pushdecl (decl);
381           }
382           break;
383
384         default:
385           gcc_unreachable ();
386         }
387     }
388 }
389
390 /* Restore the template parameter context for a member template or
391    a friend template defined in a class definition.  */
392
393 void
394 maybe_begin_member_template_processing (tree decl)
395 {
396   tree parms;
397   int levels = 0;
398
399   if (inline_needs_template_parms (decl))
400     {
401       parms = DECL_TEMPLATE_PARMS (most_general_template (decl));
402       levels = TMPL_PARMS_DEPTH (parms) - processing_template_decl;
403
404       if (DECL_TEMPLATE_SPECIALIZATION (decl))
405         {
406           --levels;
407           parms = TREE_CHAIN (parms);
408         }
409
410       push_inline_template_parms_recursive (parms, levels);
411     }
412
413   /* Remember how many levels of template parameters we pushed so that
414      we can pop them later.  */
415   if (!inline_parm_levels)
416     VARRAY_INT_INIT (inline_parm_levels, 4, "inline_parm_levels");
417   if (inline_parm_levels_used == inline_parm_levels->num_elements)
418     VARRAY_GROW (inline_parm_levels, 2 * inline_parm_levels_used);
419   VARRAY_INT (inline_parm_levels, inline_parm_levels_used) = levels;
420   ++inline_parm_levels_used;
421 }
422
423 /* Undo the effects of maybe_begin_member_template_processing.  */
424
425 void
426 maybe_end_member_template_processing (void)
427 {
428   int i;
429
430   if (!inline_parm_levels_used)
431     return;
432
433   --inline_parm_levels_used;
434   for (i = 0;
435        i < VARRAY_INT (inline_parm_levels, inline_parm_levels_used);
436        ++i)
437     {
438       --processing_template_decl;
439       current_template_parms = TREE_CHAIN (current_template_parms);
440       poplevel (0, 0, 0);
441     }
442 }
443
444 /* Return a new template argument vector which contains all of ARGS,
445    but has as its innermost set of arguments the EXTRA_ARGS.  */
446
447 static tree
448 add_to_template_args (tree args, tree extra_args)
449 {
450   tree new_args;
451   int extra_depth;
452   int i;
453   int j;
454
455   extra_depth = TMPL_ARGS_DEPTH (extra_args);
456   new_args = make_tree_vec (TMPL_ARGS_DEPTH (args) + extra_depth);
457
458   for (i = 1; i <= TMPL_ARGS_DEPTH (args); ++i)
459     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (args, i));
460
461   for (j = 1; j <= extra_depth; ++j, ++i)
462     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (extra_args, j));
463
464   return new_args;
465 }
466
467 /* Like add_to_template_args, but only the outermost ARGS are added to
468    the EXTRA_ARGS.  In particular, all but TMPL_ARGS_DEPTH
469    (EXTRA_ARGS) levels are added.  This function is used to combine
470    the template arguments from a partial instantiation with the
471    template arguments used to attain the full instantiation from the
472    partial instantiation.  */
473
474 static tree
475 add_outermost_template_args (tree args, tree extra_args)
476 {
477   tree new_args;
478
479   /* If there are more levels of EXTRA_ARGS than there are ARGS,
480      something very fishy is going on.  */
481   gcc_assert (TMPL_ARGS_DEPTH (args) >= TMPL_ARGS_DEPTH (extra_args));
482
483   /* If *all* the new arguments will be the EXTRA_ARGS, just return
484      them.  */
485   if (TMPL_ARGS_DEPTH (args) == TMPL_ARGS_DEPTH (extra_args))
486     return extra_args;
487
488   /* For the moment, we make ARGS look like it contains fewer levels.  */
489   TREE_VEC_LENGTH (args) -= TMPL_ARGS_DEPTH (extra_args);
490
491   new_args = add_to_template_args (args, extra_args);
492
493   /* Now, we restore ARGS to its full dimensions.  */
494   TREE_VEC_LENGTH (args) += TMPL_ARGS_DEPTH (extra_args);
495
496   return new_args;
497 }
498
499 /* Return the N levels of innermost template arguments from the ARGS.  */
500
501 tree
502 get_innermost_template_args (tree args, int n)
503 {
504   tree new_args;
505   int extra_levels;
506   int i;
507
508   gcc_assert (n >= 0);
509
510   /* If N is 1, just return the innermost set of template arguments.  */
511   if (n == 1)
512     return TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args));
513
514   /* If we're not removing anything, just return the arguments we were
515      given.  */
516   extra_levels = TMPL_ARGS_DEPTH (args) - n;
517   gcc_assert (extra_levels >= 0);
518   if (extra_levels == 0)
519     return args;
520
521   /* Make a new set of arguments, not containing the outer arguments.  */
522   new_args = make_tree_vec (n);
523   for (i = 1; i <= n; ++i)
524     SET_TMPL_ARGS_LEVEL (new_args, i,
525                          TMPL_ARGS_LEVEL (args, i + extra_levels));
526
527   return new_args;
528 }
529
530 /* We've got a template header coming up; push to a new level for storing
531    the parms.  */
532
533 void
534 begin_template_parm_list (void)
535 {
536   /* We use a non-tag-transparent scope here, which causes pushtag to
537      put tags in this scope, rather than in the enclosing class or
538      namespace scope.  This is the right thing, since we want
539      TEMPLATE_DECLS, and not TYPE_DECLS for template classes.  For a
540      global template class, push_template_decl handles putting the
541      TEMPLATE_DECL into top-level scope.  For a nested template class,
542      e.g.:
543
544        template <class T> struct S1 {
545          template <class T> struct S2 {};
546        };
547
548      pushtag contains special code to call pushdecl_with_scope on the
549      TEMPLATE_DECL for S2.  */
550   begin_scope (sk_template_parms, NULL);
551   ++processing_template_decl;
552   ++processing_template_parmlist;
553   note_template_header (0);
554 }
555
556 /* This routine is called when a specialization is declared.  If it is
557    invalid to declare a specialization here, an error is reported.  */
558
559 static void
560 check_specialization_scope (void)
561 {
562   tree scope = current_scope ();
563
564   /* [temp.expl.spec]
565
566      An explicit specialization shall be declared in the namespace of
567      which the template is a member, or, for member templates, in the
568      namespace of which the enclosing class or enclosing class
569      template is a member.  An explicit specialization of a member
570      function, member class or static data member of a class template
571      shall be declared in the namespace of which the class template
572      is a member.  */
573   if (scope && TREE_CODE (scope) != NAMESPACE_DECL)
574     error ("explicit specialization in non-namespace scope %qD", scope);
575
576   /* [temp.expl.spec]
577
578      In an explicit specialization declaration for a member of a class
579      template or a member template that appears in namespace scope,
580      the member template and some of its enclosing class templates may
581      remain unspecialized, except that the declaration shall not
582      explicitly specialize a class member template if its enclosing
583      class templates are not explicitly specialized as well.  */
584   if (current_template_parms)
585     error ("enclosing class templates are not explicitly specialized");
586 }
587
588 /* We've just seen template <>.  */
589
590 void
591 begin_specialization (void)
592 {
593   begin_scope (sk_template_spec, NULL);
594   note_template_header (1);
595   check_specialization_scope ();
596 }
597
598 /* Called at then end of processing a declaration preceded by
599    template<>.  */
600
601 void
602 end_specialization (void)
603 {
604   finish_scope ();
605   reset_specialization ();
606 }
607
608 /* Any template <>'s that we have seen thus far are not referring to a
609    function specialization.  */
610
611 void
612 reset_specialization (void)
613 {
614   processing_specialization = 0;
615   template_header_count = 0;
616 }
617
618 /* We've just seen a template header.  If SPECIALIZATION is nonzero,
619    it was of the form template <>.  */
620
621 static void
622 note_template_header (int specialization)
623 {
624   processing_specialization = specialization;
625   template_header_count++;
626 }
627
628 /* We're beginning an explicit instantiation.  */
629
630 void
631 begin_explicit_instantiation (void)
632 {
633   gcc_assert (!processing_explicit_instantiation);
634   processing_explicit_instantiation = true;
635 }
636
637
638 void
639 end_explicit_instantiation (void)
640 {
641   gcc_assert (processing_explicit_instantiation);
642   processing_explicit_instantiation = false;
643 }
644
645 /* 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       /* We've been given a return type to match, prepend it.  */
9171       parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
9172       args = tree_cons (NULL_TREE, return_type, args);
9173     }
9174
9175   /* We allow incomplete unification without an error message here
9176      because the standard doesn't seem to explicitly prohibit it.  Our
9177      callers must be ready to deal with unification failures in any
9178      event.  */
9179   result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
9180                                   targs, parms, args, /*subr=*/0,
9181                                   strict, /*allow_incomplete*/1);
9182
9183   if (result == 0)
9184     /* All is well so far.  Now, check:
9185
9186        [temp.deduct]
9187
9188        When all template arguments have been deduced, all uses of
9189        template parameters in nondeduced contexts are replaced with
9190        the corresponding deduced argument values.  If the
9191        substitution results in an invalid type, as described above,
9192        type deduction fails.  */
9193     if (tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE)
9194         == error_mark_node)
9195       return 1;
9196
9197   return result;
9198 }
9199
9200 /* Adjust types before performing type deduction, as described in
9201    [temp.deduct.call] and [temp.deduct.conv].  The rules in these two
9202    sections are symmetric.  PARM is the type of a function parameter
9203    or the return type of the conversion function.  ARG is the type of
9204    the argument passed to the call, or the type of the value
9205    initialized with the result of the conversion function.  */
9206
9207 static int
9208 maybe_adjust_types_for_deduction (unification_kind_t strict,
9209                                   tree* parm,
9210                                   tree* arg)
9211 {
9212   int result = 0;
9213
9214   switch (strict)
9215     {
9216     case DEDUCE_CALL:
9217       break;
9218
9219     case DEDUCE_CONV:
9220       {
9221         /* Swap PARM and ARG throughout the remainder of this
9222            function; the handling is precisely symmetric since PARM
9223            will initialize ARG rather than vice versa.  */
9224         tree* temp = parm;
9225         parm = arg;
9226         arg = temp;
9227         break;
9228       }
9229
9230     case DEDUCE_EXACT:
9231       /* There is nothing to do in this case.  */
9232       return 0;
9233
9234     default:
9235       gcc_unreachable ();
9236     }
9237
9238   if (TREE_CODE (*parm) != REFERENCE_TYPE)
9239     {
9240       /* [temp.deduct.call]
9241
9242          If P is not a reference type:
9243
9244          --If A is an array type, the pointer type produced by the
9245          array-to-pointer standard conversion (_conv.array_) is
9246          used in place of A for type deduction; otherwise,
9247
9248          --If A is a function type, the pointer type produced by
9249          the function-to-pointer standard conversion
9250          (_conv.func_) is used in place of A for type deduction;
9251          otherwise,
9252
9253          --If A is a cv-qualified type, the top level
9254          cv-qualifiers of A's type are ignored for type
9255          deduction.  */
9256       if (TREE_CODE (*arg) == ARRAY_TYPE)
9257         *arg = build_pointer_type (TREE_TYPE (*arg));
9258       else if (TREE_CODE (*arg) == FUNCTION_TYPE)
9259         *arg = build_pointer_type (*arg);
9260       else
9261         *arg = TYPE_MAIN_VARIANT (*arg);
9262     }
9263
9264   /* [temp.deduct.call]
9265
9266      If P is a cv-qualified type, the top level cv-qualifiers
9267      of P's type are ignored for type deduction.  If P is a
9268      reference type, the type referred to by P is used for
9269      type deduction.  */
9270   *parm = TYPE_MAIN_VARIANT (*parm);
9271   if (TREE_CODE (*parm) == REFERENCE_TYPE)
9272     {
9273       *parm = TREE_TYPE (*parm);
9274       result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
9275     }
9276
9277   /* DR 322. For conversion deduction, remove a reference type on parm
9278      too (which has been swapped into ARG).  */
9279   if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
9280     *arg = TREE_TYPE (*arg);
9281
9282   return result;
9283 }
9284
9285 /* Most parms like fn_type_unification.
9286
9287    If SUBR is 1, we're being called recursively (to unify the
9288    arguments of a function or method parameter of a function
9289    template).  */
9290
9291 static int
9292 type_unification_real (tree tparms,
9293                        tree targs,
9294                        tree xparms,
9295                        tree xargs,
9296                        int subr,
9297                        unification_kind_t strict,
9298                        int allow_incomplete)
9299 {
9300   tree parm, arg;
9301   int i;
9302   int ntparms = TREE_VEC_LENGTH (tparms);
9303   int sub_strict;
9304   int saw_undeduced = 0;
9305   tree parms, args;
9306
9307   gcc_assert (TREE_CODE (tparms) == TREE_VEC);
9308   gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
9309   gcc_assert (!xargs || TREE_CODE (xargs) == TREE_LIST);
9310   gcc_assert (ntparms > 0);
9311
9312   switch (strict)
9313     {
9314     case DEDUCE_CALL:
9315       sub_strict = (UNIFY_ALLOW_OUTER_LEVEL | UNIFY_ALLOW_MORE_CV_QUAL
9316                     | UNIFY_ALLOW_DERIVED);
9317       break;
9318
9319     case DEDUCE_CONV:
9320       sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
9321       break;
9322
9323     case DEDUCE_EXACT:
9324       sub_strict = UNIFY_ALLOW_NONE;
9325       break;
9326
9327     default:
9328       gcc_unreachable ();
9329     }
9330
9331  again:
9332   parms = xparms;
9333   args = xargs;
9334
9335   while (parms && parms != void_list_node
9336          && args && args != void_list_node)
9337     {
9338       parm = TREE_VALUE (parms);
9339       parms = TREE_CHAIN (parms);
9340       arg = TREE_VALUE (args);
9341       args = TREE_CHAIN (args);
9342
9343       if (arg == error_mark_node)
9344         return 1;
9345       if (arg == unknown_type_node)
9346         /* We can't deduce anything from this, but we might get all the
9347            template args from other function args.  */
9348         continue;
9349
9350       /* Conversions will be performed on a function argument that
9351          corresponds with a function parameter that contains only
9352          non-deducible template parameters and explicitly specified
9353          template parameters.  */
9354       if (!uses_template_parms (parm))
9355         {
9356           tree type;
9357
9358           if (!TYPE_P (arg))
9359             type = TREE_TYPE (arg);
9360           else
9361             type = arg;
9362
9363           if (same_type_p (parm, type))
9364             continue;
9365           if (strict != DEDUCE_EXACT
9366               && can_convert_arg (parm, type, TYPE_P (arg) ? NULL_TREE : arg))
9367             continue;
9368           
9369           return 1;
9370         }
9371
9372       if (!TYPE_P (arg))
9373         {
9374           gcc_assert (TREE_TYPE (arg) != NULL_TREE);
9375           if (type_unknown_p (arg))
9376             {
9377               /* [temp.deduct.type] A template-argument can be deduced from
9378                  a pointer to function or pointer to member function
9379                  argument if the set of overloaded functions does not
9380                  contain function templates and at most one of a set of
9381                  overloaded functions provides a unique match.  */
9382
9383               if (resolve_overloaded_unification
9384                   (tparms, targs, parm, arg, strict, sub_strict)
9385                   != 0)
9386                 return 1;
9387               continue;
9388             }
9389           arg = TREE_TYPE (arg);
9390           if (arg == error_mark_node)
9391             return 1;
9392         }
9393
9394       {
9395         int arg_strict = sub_strict;
9396
9397         if (!subr)
9398           arg_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg);
9399
9400         if (unify (tparms, targs, parm, arg, arg_strict))
9401           return 1;
9402       }
9403     }
9404
9405   /* Fail if we've reached the end of the parm list, and more args
9406      are present, and the parm list isn't variadic.  */
9407   if (args && args != void_list_node && parms == void_list_node)
9408     return 1;
9409   /* Fail if parms are left and they don't have default values.  */
9410   if (parms && parms != void_list_node
9411       && TREE_PURPOSE (parms) == NULL_TREE)
9412     return 1;
9413
9414   if (!subr)
9415     for (i = 0; i < ntparms; i++)
9416       if (!TREE_VEC_ELT (targs, i))
9417         {
9418           tree tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
9419
9420           /* If this is an undeduced nontype parameter that depends on
9421              a type parameter, try another pass; its type may have been
9422              deduced from a later argument than the one from which
9423              this parameter can be deduced.  */
9424           if (TREE_CODE (tparm) == PARM_DECL
9425               && uses_template_parms (TREE_TYPE (tparm))
9426               && !saw_undeduced++)
9427             goto again;
9428
9429           if (!allow_incomplete)
9430             error ("incomplete type unification");
9431           return 2;
9432         }
9433
9434   return 0;
9435 }
9436
9437 /* Subroutine of type_unification_real.  Args are like the variables at the
9438    call site.  ARG is an overloaded function (or template-id); we try
9439    deducing template args from each of the overloads, and if only one
9440    succeeds, we go with that.  Modifies TARGS and returns 0 on success.  */
9441
9442 static int
9443 resolve_overloaded_unification (tree tparms,
9444                                 tree targs,
9445                                 tree parm,
9446                                 tree arg,
9447                                 unification_kind_t strict,
9448                                 int sub_strict)
9449 {
9450   tree tempargs = copy_node (targs);
9451   int good = 0;
9452   bool addr_p;
9453
9454   if (TREE_CODE (arg) == ADDR_EXPR)
9455     {
9456       arg = TREE_OPERAND (arg, 0);
9457       addr_p = true;
9458     }
9459   else
9460     addr_p = false;
9461
9462   if (TREE_CODE (arg) == COMPONENT_REF)
9463     /* Handle `&x' where `x' is some static or non-static member
9464        function name.  */
9465     arg = TREE_OPERAND (arg, 1);
9466
9467   if (TREE_CODE (arg) == OFFSET_REF)
9468     arg = TREE_OPERAND (arg, 1);
9469
9470   /* Strip baselink information.  */
9471   if (BASELINK_P (arg))
9472     arg = BASELINK_FUNCTIONS (arg);
9473
9474   if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
9475     {
9476       /* If we got some explicit template args, we need to plug them into
9477          the affected templates before we try to unify, in case the
9478          explicit args will completely resolve the templates in question.  */
9479
9480       tree expl_subargs = TREE_OPERAND (arg, 1);
9481       arg = TREE_OPERAND (arg, 0);
9482
9483       for (; arg; arg = OVL_NEXT (arg))
9484         {
9485           tree fn = OVL_CURRENT (arg);
9486           tree subargs, elem;
9487
9488           if (TREE_CODE (fn) != TEMPLATE_DECL)
9489             continue;
9490
9491           subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
9492                                   expl_subargs, /*check_ret=*/false);
9493           if (subargs)
9494             {
9495               elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
9496               good += try_one_overload (tparms, targs, tempargs, parm,
9497                                         elem, strict, sub_strict, addr_p);
9498             }
9499         }
9500     }
9501   else
9502     {
9503       gcc_assert (TREE_CODE (arg) == OVERLOAD
9504                   || TREE_CODE (arg) == FUNCTION_DECL);
9505
9506       for (; arg; arg = OVL_NEXT (arg))
9507         good += try_one_overload (tparms, targs, tempargs, parm,
9508                                   TREE_TYPE (OVL_CURRENT (arg)),
9509                                   strict, sub_strict, addr_p);
9510     }
9511
9512   /* [temp.deduct.type] A template-argument can be deduced from a pointer
9513      to function or pointer to member function argument if the set of
9514      overloaded functions does not contain function templates and at most
9515      one of a set of overloaded functions provides a unique match.
9516
9517      So if we found multiple possibilities, we return success but don't
9518      deduce anything.  */
9519
9520   if (good == 1)
9521     {
9522       int i = TREE_VEC_LENGTH (targs);
9523       for (; i--; )
9524         if (TREE_VEC_ELT (tempargs, i))
9525           TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
9526     }
9527   if (good)
9528     return 0;
9529
9530   return 1;
9531 }
9532
9533 /* Subroutine of resolve_overloaded_unification; does deduction for a single
9534    overload.  Fills TARGS with any deduced arguments, or error_mark_node if
9535    different overloads deduce different arguments for a given parm.
9536    ADDR_P is true if the expression for which deduction is being
9537    performed was of the form "& fn" rather than simply "fn".
9538
9539    Returns 1 on success.  */
9540
9541 static int
9542 try_one_overload (tree tparms,
9543                   tree orig_targs,
9544                   tree targs,
9545                   tree parm,
9546                   tree arg,
9547                   unification_kind_t strict,
9548                   int sub_strict,
9549                   bool addr_p)
9550 {
9551   int nargs;
9552   tree tempargs;
9553   int i;
9554
9555   /* [temp.deduct.type] A template-argument can be deduced from a pointer
9556      to function or pointer to member function argument if the set of
9557      overloaded functions does not contain function templates and at most
9558      one of a set of overloaded functions provides a unique match.
9559
9560      So if this is a template, just return success.  */
9561
9562   if (uses_template_parms (arg))
9563     return 1;
9564
9565   if (TREE_CODE (arg) == METHOD_TYPE)
9566     arg = build_ptrmemfunc_type (build_pointer_type (arg));
9567   else if (addr_p)
9568     arg = build_pointer_type (arg);
9569
9570   sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg);
9571
9572   /* We don't copy orig_targs for this because if we have already deduced
9573      some template args from previous args, unify would complain when we
9574      try to deduce a template parameter for the same argument, even though
9575      there isn't really a conflict.  */
9576   nargs = TREE_VEC_LENGTH (targs);
9577   tempargs = make_tree_vec (nargs);
9578
9579   if (unify (tparms, tempargs, parm, arg, sub_strict) != 0)
9580     return 0;
9581
9582   /* First make sure we didn't deduce anything that conflicts with
9583      explicitly specified args.  */
9584   for (i = nargs; i--; )
9585     {
9586       tree elt = TREE_VEC_ELT (tempargs, i);
9587       tree oldelt = TREE_VEC_ELT (orig_targs, i);
9588
9589       if (!elt)
9590         /*NOP*/;
9591       else if (uses_template_parms (elt))
9592         /* Since we're unifying against ourselves, we will fill in
9593            template args used in the function parm list with our own
9594            template parms.  Discard them.  */
9595         TREE_VEC_ELT (tempargs, i) = NULL_TREE;
9596       else if (oldelt && !template_args_equal (oldelt, elt))
9597         return 0;
9598     }
9599
9600   for (i = nargs; i--; )
9601     {
9602       tree elt = TREE_VEC_ELT (tempargs, i);
9603
9604       if (elt)
9605         TREE_VEC_ELT (targs, i) = elt;
9606     }
9607
9608   return 1;
9609 }
9610
9611 /* Verify that nondeduce template argument agrees with the type
9612    obtained from argument deduction.  Return nonzero if the
9613    verification fails.
9614
9615    For example:
9616
9617      struct A { typedef int X; };
9618      template <class T, class U> struct C {};
9619      template <class T> struct C<T, typename T::X> {};
9620
9621    Then with the instantiation `C<A, int>', we can deduce that
9622    `T' is `A' but unify () does not check whether `typename T::X'
9623    is `int'.  This function ensure that they agree.
9624
9625    TARGS, PARMS are the same as the arguments of unify.
9626    ARGS contains template arguments from all levels.  */
9627
9628 static int
9629 verify_class_unification (tree targs, tree parms, tree args)
9630 {
9631   parms = tsubst (parms, add_outermost_template_args (args, targs),
9632                   tf_none, NULL_TREE);
9633   if (parms == error_mark_node)
9634     return 1;
9635
9636   return !comp_template_args (parms, INNERMOST_TEMPLATE_ARGS (args));
9637 }
9638
9639 /* PARM is a template class (perhaps with unbound template
9640    parameters).  ARG is a fully instantiated type.  If ARG can be
9641    bound to PARM, return ARG, otherwise return NULL_TREE.  TPARMS and
9642    TARGS are as for unify.  */
9643
9644 static tree
9645 try_class_unification (tree tparms, tree targs, tree parm, tree arg)
9646 {
9647   tree copy_of_targs;
9648
9649   if (!CLASSTYPE_TEMPLATE_INFO (arg)
9650       || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
9651           != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
9652     return NULL_TREE;
9653
9654   /* We need to make a new template argument vector for the call to
9655      unify.  If we used TARGS, we'd clutter it up with the result of
9656      the attempted unification, even if this class didn't work out.
9657      We also don't want to commit ourselves to all the unifications
9658      we've already done, since unification is supposed to be done on
9659      an argument-by-argument basis.  In other words, consider the
9660      following pathological case:
9661
9662        template <int I, int J, int K>
9663        struct S {};
9664
9665        template <int I, int J>
9666        struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
9667
9668        template <int I, int J, int K>
9669        void f(S<I, J, K>, S<I, I, I>);
9670
9671        void g() {
9672          S<0, 0, 0> s0;
9673          S<0, 1, 2> s2;
9674
9675          f(s0, s2);
9676        }
9677
9678      Now, by the time we consider the unification involving `s2', we
9679      already know that we must have `f<0, 0, 0>'.  But, even though
9680      `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
9681      because there are two ways to unify base classes of S<0, 1, 2>
9682      with S<I, I, I>.  If we kept the already deduced knowledge, we
9683      would reject the possibility I=1.  */
9684   copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
9685
9686   /* If unification failed, we're done.  */
9687   if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
9688              CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE))
9689     return NULL_TREE;
9690
9691   return arg;
9692 }
9693
9694 /* Given a template type PARM and a class type ARG, find the unique
9695    base type in ARG that is an instance of PARM.  We do not examine
9696    ARG itself; only its base-classes.  If there is not exactly one
9697    appropriate base class, return NULL_TREE.  PARM may be the type of
9698    a partial specialization, as well as a plain template type.  Used
9699    by unify.  */
9700
9701 static tree
9702 get_template_base (tree tparms, tree targs, tree parm, tree arg)
9703 {
9704   tree rval = NULL_TREE;
9705   tree binfo;
9706
9707   gcc_assert (IS_AGGR_TYPE_CODE (TREE_CODE (arg)));
9708
9709   binfo = TYPE_BINFO (complete_type (arg));
9710   if (!binfo)
9711     /* The type could not be completed.  */
9712     return NULL_TREE;
9713
9714   /* Walk in inheritance graph order.  The search order is not
9715      important, and this avoids multiple walks of virtual bases.  */
9716   for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
9717     {
9718       tree r = try_class_unification (tparms, targs, parm, BINFO_TYPE (binfo));
9719
9720       if (r)
9721         {
9722           /* If there is more than one satisfactory baseclass, then:
9723
9724                [temp.deduct.call]
9725
9726               If they yield more than one possible deduced A, the type
9727               deduction fails.
9728
9729              applies.  */
9730           if (rval && !same_type_p (r, rval))
9731             return NULL_TREE;
9732
9733           rval = r;
9734         }
9735     }
9736
9737   return rval;
9738 }
9739
9740 /* Returns the level of DECL, which declares a template parameter.  */
9741
9742 static int
9743 template_decl_level (tree decl)
9744 {
9745   switch (TREE_CODE (decl))
9746     {
9747     case TYPE_DECL:
9748     case TEMPLATE_DECL:
9749       return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
9750
9751     case PARM_DECL:
9752       return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
9753
9754     default:
9755       gcc_unreachable ();
9756     }
9757   return 0;
9758 }
9759
9760 /* Decide whether ARG can be unified with PARM, considering only the
9761    cv-qualifiers of each type, given STRICT as documented for unify.
9762    Returns nonzero iff the unification is OK on that basis.  */
9763
9764 static int
9765 check_cv_quals_for_unify (int strict, tree arg, tree parm)
9766 {
9767   int arg_quals = cp_type_quals (arg);
9768   int parm_quals = cp_type_quals (parm);
9769
9770   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
9771       && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
9772     {
9773       /*  Although a CVR qualifier is ignored when being applied to a
9774           substituted template parameter ([8.3.2]/1 for example), that
9775           does not apply during deduction [14.8.2.4]/1, (even though
9776           that is not explicitly mentioned, [14.8.2.4]/9 indicates
9777           this).  Except when we're allowing additional CV qualifiers
9778           at the outer level [14.8.2.1]/3,1st bullet.  */
9779       if ((TREE_CODE (arg) == REFERENCE_TYPE
9780            || TREE_CODE (arg) == FUNCTION_TYPE
9781            || TREE_CODE (arg) == METHOD_TYPE)
9782           && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
9783         return 0;
9784
9785       if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
9786           && (parm_quals & TYPE_QUAL_RESTRICT))
9787         return 0;
9788     }
9789
9790   if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
9791       && (arg_quals & parm_quals) != parm_quals)
9792     return 0;
9793
9794   if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
9795       && (parm_quals & arg_quals) != arg_quals)
9796     return 0;
9797
9798   return 1;
9799 }
9800
9801 /* Takes parameters as for type_unification.  Returns 0 if the
9802    type deduction succeeds, 1 otherwise.  The parameter STRICT is a
9803    bitwise or of the following flags:
9804
9805      UNIFY_ALLOW_NONE:
9806        Require an exact match between PARM and ARG.
9807      UNIFY_ALLOW_MORE_CV_QUAL:
9808        Allow the deduced ARG to be more cv-qualified (by qualification
9809        conversion) than ARG.
9810      UNIFY_ALLOW_LESS_CV_QUAL:
9811        Allow the deduced ARG to be less cv-qualified than ARG.
9812      UNIFY_ALLOW_DERIVED:
9813        Allow the deduced ARG to be a template base class of ARG,
9814        or a pointer to a template base class of the type pointed to by
9815        ARG.
9816      UNIFY_ALLOW_INTEGER:
9817        Allow any integral type to be deduced.  See the TEMPLATE_PARM_INDEX
9818        case for more information.
9819      UNIFY_ALLOW_OUTER_LEVEL:
9820        This is the outermost level of a deduction. Used to determine validity
9821        of qualification conversions. A valid qualification conversion must
9822        have const qualified pointers leading up to the inner type which
9823        requires additional CV quals, except at the outer level, where const
9824        is not required [conv.qual]. It would be normal to set this flag in
9825        addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
9826      UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
9827        This is the outermost level of a deduction, and PARM can be more CV
9828        qualified at this point.
9829      UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
9830        This is the outermost level of a deduction, and PARM can be less CV
9831        qualified at this point.  */
9832
9833 static int
9834 unify (tree tparms, tree targs, tree parm, tree arg, int strict)
9835 {
9836   int idx;
9837   tree targ;
9838   tree tparm;
9839   int strict_in = strict;
9840
9841   /* I don't think this will do the right thing with respect to types.
9842      But the only case I've seen it in so far has been array bounds, where
9843      signedness is the only information lost, and I think that will be
9844      okay.  */
9845   while (TREE_CODE (parm) == NOP_EXPR)
9846     parm = TREE_OPERAND (parm, 0);
9847
9848   if (arg == error_mark_node)
9849     return 1;
9850   if (arg == unknown_type_node)
9851     /* We can't deduce anything from this, but we might get all the
9852        template args from other function args.  */
9853     return 0;
9854
9855   /* If PARM uses template parameters, then we can't bail out here,
9856      even if ARG == PARM, since we won't record unifications for the
9857      template parameters.  We might need them if we're trying to
9858      figure out which of two things is more specialized.  */
9859   if (arg == parm && !uses_template_parms (parm))
9860     return 0;
9861
9862   /* Immediately reject some pairs that won't unify because of
9863      cv-qualification mismatches.  */
9864   if (TREE_CODE (arg) == TREE_CODE (parm)
9865       && TYPE_P (arg)
9866       /* It is the elements of the array which hold the cv quals of an array
9867          type, and the elements might be template type parms. We'll check
9868          when we recurse.  */
9869       && TREE_CODE (arg) != ARRAY_TYPE
9870       /* We check the cv-qualifiers when unifying with template type
9871          parameters below.  We want to allow ARG `const T' to unify with
9872          PARM `T' for example, when computing which of two templates
9873          is more specialized, for example.  */
9874       && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
9875       && !check_cv_quals_for_unify (strict_in, arg, parm))
9876     return 1;
9877
9878   if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
9879       && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
9880     strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
9881   strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
9882   strict &= ~UNIFY_ALLOW_DERIVED;
9883   strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
9884   strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
9885
9886   switch (TREE_CODE (parm))
9887     {
9888     case TYPENAME_TYPE:
9889     case SCOPE_REF:
9890     case UNBOUND_CLASS_TEMPLATE:
9891       /* In a type which contains a nested-name-specifier, template
9892          argument values cannot be deduced for template parameters used
9893          within the nested-name-specifier.  */
9894       return 0;
9895
9896     case TEMPLATE_TYPE_PARM:
9897     case TEMPLATE_TEMPLATE_PARM:
9898     case BOUND_TEMPLATE_TEMPLATE_PARM:
9899       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
9900
9901       if (TEMPLATE_TYPE_LEVEL (parm)
9902           != template_decl_level (tparm))
9903         /* The PARM is not one we're trying to unify.  Just check
9904            to see if it matches ARG.  */
9905         return (TREE_CODE (arg) == TREE_CODE (parm)
9906                 && same_type_p (parm, arg)) ? 0 : 1;
9907       idx = TEMPLATE_TYPE_IDX (parm);
9908       targ = TREE_VEC_ELT (targs, idx);
9909       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
9910
9911       /* Check for mixed types and values.  */
9912       if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
9913            && TREE_CODE (tparm) != TYPE_DECL)
9914           || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
9915               && TREE_CODE (tparm) != TEMPLATE_DECL))
9916         return 1;
9917
9918       if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
9919         {
9920           /* ARG must be constructed from a template class or a template
9921              template parameter.  */
9922           if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
9923               && (TREE_CODE (arg) != RECORD_TYPE || !CLASSTYPE_TEMPLATE_INFO (arg)))
9924             return 1;
9925
9926           {
9927             tree parmtmpl = TYPE_TI_TEMPLATE (parm);
9928             tree parmvec = TYPE_TI_ARGS (parm);
9929             tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
9930             tree argtmplvec
9931               = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_TI_TEMPLATE (arg));
9932             int i;
9933
9934             /* The parameter and argument roles have to be switched here
9935                in order to handle default arguments properly.  For example,
9936                template<template <class> class TT> void f(TT<int>)
9937                should be able to accept vector<int> which comes from
9938                template <class T, class Allocator = allocator>
9939                class vector.  */
9940
9941             if (coerce_template_parms (argtmplvec, parmvec, parmtmpl, 0, 1)
9942                 == error_mark_node)
9943               return 1;
9944
9945             /* Deduce arguments T, i from TT<T> or TT<i>.
9946                We check each element of PARMVEC and ARGVEC individually
9947                rather than the whole TREE_VEC since they can have
9948                different number of elements.  */
9949
9950             for (i = 0; i < TREE_VEC_LENGTH (parmvec); ++i)
9951               {
9952                 if (unify (tparms, targs,
9953                            TREE_VEC_ELT (parmvec, i),
9954                            TREE_VEC_ELT (argvec, i),
9955                            UNIFY_ALLOW_NONE))
9956                   return 1;
9957               }
9958           }
9959           arg = TYPE_TI_TEMPLATE (arg);
9960
9961           /* Fall through to deduce template name.  */
9962         }
9963
9964       if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
9965           || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
9966         {
9967           /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>.  */
9968
9969           /* Simple cases: Value already set, does match or doesn't.  */
9970           if (targ != NULL_TREE && template_args_equal (targ, arg))
9971             return 0;
9972           else if (targ)
9973             return 1;
9974         }
9975       else
9976         {
9977           /* If PARM is `const T' and ARG is only `int', we don't have
9978              a match unless we are allowing additional qualification.
9979              If ARG is `const int' and PARM is just `T' that's OK;
9980              that binds `const int' to `T'.  */
9981           if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
9982                                          arg, parm))
9983             return 1;
9984
9985           /* Consider the case where ARG is `const volatile int' and
9986              PARM is `const T'.  Then, T should be `volatile int'.  */
9987           arg = cp_build_qualified_type_real
9988             (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
9989           if (arg == error_mark_node)
9990             return 1;
9991
9992           /* Simple cases: Value already set, does match or doesn't.  */
9993           if (targ != NULL_TREE && same_type_p (targ, arg))
9994             return 0;
9995           else if (targ)
9996             return 1;
9997
9998           /* Make sure that ARG is not a variable-sized array.  (Note
9999              that were talking about variable-sized arrays (like
10000              `int[n]'), rather than arrays of unknown size (like
10001              `int[]').)  We'll get very confused by such a type since
10002              the bound of the array will not be computable in an
10003              instantiation.  Besides, such types are not allowed in
10004              ISO C++, so we can do as we please here.  */
10005           if (variably_modified_type_p (arg, NULL_TREE))
10006             return 1;
10007         }
10008
10009       TREE_VEC_ELT (targs, idx) = arg;
10010       return 0;
10011
10012     case TEMPLATE_PARM_INDEX:
10013       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
10014
10015       if (TEMPLATE_PARM_LEVEL (parm)
10016           != template_decl_level (tparm))
10017         /* The PARM is not one we're trying to unify.  Just check
10018            to see if it matches ARG.  */
10019         return !(TREE_CODE (arg) == TREE_CODE (parm)
10020                  && cp_tree_equal (parm, arg));
10021
10022       idx = TEMPLATE_PARM_IDX (parm);
10023       targ = TREE_VEC_ELT (targs, idx);
10024
10025       if (targ)
10026         return !cp_tree_equal (targ, arg);
10027
10028       /* [temp.deduct.type] If, in the declaration of a function template
10029          with a non-type template-parameter, the non-type
10030          template-parameter is used in an expression in the function
10031          parameter-list and, if the corresponding template-argument is
10032          deduced, the template-argument type shall match the type of the
10033          template-parameter exactly, except that a template-argument
10034          deduced from an array bound may be of any integral type.
10035          The non-type parameter might use already deduced type parameters.  */
10036       tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
10037       if (!TREE_TYPE (arg))
10038         /* Template-parameter dependent expression.  Just accept it for now.
10039            It will later be processed in convert_template_argument.  */
10040         ;
10041       else if (same_type_p (TREE_TYPE (arg), tparm))
10042         /* OK */;
10043       else if ((strict & UNIFY_ALLOW_INTEGER)
10044                && (TREE_CODE (tparm) == INTEGER_TYPE
10045                    || TREE_CODE (tparm) == BOOLEAN_TYPE))
10046         /* Convert the ARG to the type of PARM; the deduced non-type
10047            template argument must exactly match the types of the
10048            corresponding parameter.  */
10049         arg = fold (build_nop (TREE_TYPE (parm), arg));
10050       else if (uses_template_parms (tparm))
10051         /* We haven't deduced the type of this parameter yet.  Try again
10052            later.  */
10053         return 0;
10054       else
10055         return 1;
10056
10057       TREE_VEC_ELT (targs, idx) = arg;
10058       return 0;
10059
10060     case PTRMEM_CST:
10061      {
10062         /* A pointer-to-member constant can be unified only with
10063          another constant.  */
10064       if (TREE_CODE (arg) != PTRMEM_CST)
10065         return 1;
10066
10067       /* Just unify the class member. It would be useless (and possibly
10068          wrong, depending on the strict flags) to unify also
10069          PTRMEM_CST_CLASS, because we want to be sure that both parm and
10070          arg refer to the same variable, even if through different
10071          classes. For instance:
10072
10073          struct A { int x; };
10074          struct B : A { };
10075
10076          Unification of &A::x and &B::x must succeed.  */
10077       return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
10078                     PTRMEM_CST_MEMBER (arg), strict);
10079      }
10080
10081     case POINTER_TYPE:
10082       {
10083         if (TREE_CODE (arg) != POINTER_TYPE)
10084           return 1;
10085
10086         /* [temp.deduct.call]
10087
10088            A can be another pointer or pointer to member type that can
10089            be converted to the deduced A via a qualification
10090            conversion (_conv.qual_).
10091
10092            We pass down STRICT here rather than UNIFY_ALLOW_NONE.
10093            This will allow for additional cv-qualification of the
10094            pointed-to types if appropriate.  */
10095
10096         if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
10097           /* The derived-to-base conversion only persists through one
10098              level of pointers.  */
10099           strict |= (strict_in & UNIFY_ALLOW_DERIVED);
10100
10101         return unify (tparms, targs, TREE_TYPE (parm),
10102                       TREE_TYPE (arg), strict);
10103       }
10104
10105     case REFERENCE_TYPE:
10106       if (TREE_CODE (arg) != REFERENCE_TYPE)
10107         return 1;
10108       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
10109                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
10110
10111     case ARRAY_TYPE:
10112       if (TREE_CODE (arg) != ARRAY_TYPE)
10113         return 1;
10114       if ((TYPE_DOMAIN (parm) == NULL_TREE)
10115           != (TYPE_DOMAIN (arg) == NULL_TREE))
10116         return 1;
10117       if (TYPE_DOMAIN (parm) != NULL_TREE)
10118         {
10119           tree parm_max;
10120           tree arg_max;
10121
10122           parm_max = TYPE_MAX_VALUE (TYPE_DOMAIN (parm));
10123           arg_max = TYPE_MAX_VALUE (TYPE_DOMAIN (arg));
10124
10125           /* Our representation of array types uses "N - 1" as the
10126              TYPE_MAX_VALUE for an array with "N" elements, if "N" is
10127              not an integer constant.  */
10128           if (TREE_CODE (parm_max) == MINUS_EXPR)
10129             {
10130               arg_max = fold_build2 (PLUS_EXPR,
10131                                      integer_type_node,
10132                                      arg_max,
10133                                      TREE_OPERAND (parm_max, 1));
10134               parm_max = TREE_OPERAND (parm_max, 0);
10135             }
10136
10137           if (unify (tparms, targs, parm_max, arg_max, UNIFY_ALLOW_INTEGER))
10138             return 1;
10139         }
10140       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
10141                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
10142
10143     case REAL_TYPE:
10144     case COMPLEX_TYPE:
10145     case VECTOR_TYPE:
10146     case INTEGER_TYPE:
10147     case BOOLEAN_TYPE:
10148     case ENUMERAL_TYPE:
10149     case VOID_TYPE:
10150       if (TREE_CODE (arg) != TREE_CODE (parm))
10151         return 1;
10152
10153       /* We have already checked cv-qualification at the top of the
10154          function.  */
10155       if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
10156         return 1;
10157
10158       /* As far as unification is concerned, this wins.  Later checks
10159          will invalidate it if necessary.  */
10160       return 0;
10161
10162       /* Types INTEGER_CST and MINUS_EXPR can come from array bounds.  */
10163       /* Type INTEGER_CST can come from ordinary constant template args.  */
10164     case INTEGER_CST:
10165       while (TREE_CODE (arg) == NOP_EXPR)
10166         arg = TREE_OPERAND (arg, 0);
10167
10168       if (TREE_CODE (arg) != INTEGER_CST)
10169         return 1;
10170       return !tree_int_cst_equal (parm, arg);
10171
10172     case TREE_VEC:
10173       {
10174         int i;
10175         if (TREE_CODE (arg) != TREE_VEC)
10176           return 1;
10177         if (TREE_VEC_LENGTH (parm) != TREE_VEC_LENGTH (arg))
10178           return 1;
10179         for (i = 0; i < TREE_VEC_LENGTH (parm); ++i)
10180           if (unify (tparms, targs,
10181                      TREE_VEC_ELT (parm, i), TREE_VEC_ELT (arg, i),
10182                      UNIFY_ALLOW_NONE))
10183             return 1;
10184         return 0;
10185       }
10186
10187     case RECORD_TYPE:
10188     case UNION_TYPE:
10189       if (TREE_CODE (arg) != TREE_CODE (parm))
10190         return 1;
10191
10192       if (TYPE_PTRMEMFUNC_P (parm))
10193         {
10194           if (!TYPE_PTRMEMFUNC_P (arg))
10195             return 1;
10196
10197           return unify (tparms, targs,
10198                         TYPE_PTRMEMFUNC_FN_TYPE (parm),
10199                         TYPE_PTRMEMFUNC_FN_TYPE (arg),
10200                         strict);
10201         }
10202
10203       if (CLASSTYPE_TEMPLATE_INFO (parm))
10204         {
10205           tree t = NULL_TREE;
10206
10207           if (strict_in & UNIFY_ALLOW_DERIVED)
10208             {
10209               /* First, we try to unify the PARM and ARG directly.  */
10210               t = try_class_unification (tparms, targs,
10211                                          parm, arg);
10212
10213               if (!t)
10214                 {
10215                   /* Fallback to the special case allowed in
10216                      [temp.deduct.call]:
10217
10218                        If P is a class, and P has the form
10219                        template-id, then A can be a derived class of
10220                        the deduced A.  Likewise, if P is a pointer to
10221                        a class of the form template-id, A can be a
10222                        pointer to a derived class pointed to by the
10223                        deduced A.  */
10224                   t = get_template_base (tparms, targs, parm, arg);
10225
10226                   if (!t)
10227                     return 1;
10228                 }
10229             }
10230           else if (CLASSTYPE_TEMPLATE_INFO (arg)
10231                    && (CLASSTYPE_TI_TEMPLATE (parm)
10232                        == CLASSTYPE_TI_TEMPLATE (arg)))
10233             /* Perhaps PARM is something like S<U> and ARG is S<int>.
10234                Then, we should unify `int' and `U'.  */
10235             t = arg;
10236           else
10237             /* There's no chance of unification succeeding.  */
10238             return 1;
10239
10240           return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
10241                         CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE);
10242         }
10243       else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
10244         return 1;
10245       return 0;
10246
10247     case METHOD_TYPE:
10248     case FUNCTION_TYPE:
10249       if (TREE_CODE (arg) != TREE_CODE (parm))
10250         return 1;
10251
10252       if (unify (tparms, targs, TREE_TYPE (parm),
10253                  TREE_TYPE (arg), UNIFY_ALLOW_NONE))
10254         return 1;
10255       return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
10256                                     TYPE_ARG_TYPES (arg), 1,
10257                                     DEDUCE_EXACT, 0);
10258
10259     case OFFSET_TYPE:
10260       /* Unify a pointer to member with a pointer to member function, which
10261          deduces the type of the member as a function type. */
10262       if (TYPE_PTRMEMFUNC_P (arg))
10263         {
10264           tree method_type;
10265           tree fntype;
10266           cp_cv_quals cv_quals;
10267
10268           /* Check top-level cv qualifiers */
10269           if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
10270             return 1;
10271
10272           if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
10273                      TYPE_PTRMEMFUNC_OBJECT_TYPE (arg), UNIFY_ALLOW_NONE))
10274             return 1;
10275
10276           /* Determine the type of the function we are unifying against. */
10277           method_type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (arg));
10278           fntype =
10279             build_function_type (TREE_TYPE (method_type),
10280                                  TREE_CHAIN (TYPE_ARG_TYPES (method_type)));
10281
10282           /* Extract the cv-qualifiers of the member function from the
10283              implicit object parameter and place them on the function
10284              type to be restored later. */
10285           cv_quals =
10286             cp_type_quals(TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (method_type))));
10287           fntype = build_qualified_type (fntype, cv_quals);
10288           return unify (tparms, targs, TREE_TYPE (parm), fntype, strict);
10289         }
10290
10291       if (TREE_CODE (arg) != OFFSET_TYPE)
10292         return 1;
10293       if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
10294                  TYPE_OFFSET_BASETYPE (arg), UNIFY_ALLOW_NONE))
10295         return 1;
10296       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
10297                     strict);
10298
10299     case CONST_DECL:
10300       if (DECL_TEMPLATE_PARM_P (parm))
10301         return unify (tparms, targs, DECL_INITIAL (parm), arg, strict);
10302       if (arg != integral_constant_value (parm))
10303         return 1;
10304       return 0;
10305
10306     case FIELD_DECL:
10307     case TEMPLATE_DECL:
10308       /* Matched cases are handled by the ARG == PARM test above.  */
10309       return 1;
10310
10311     default:
10312       gcc_assert (EXPR_P (parm));
10313
10314       /* We must be looking at an expression.  This can happen with
10315          something like:
10316
10317            template <int I>
10318            void foo(S<I>, S<I + 2>);
10319
10320          This is a "nondeduced context":
10321
10322            [deduct.type]
10323
10324            The nondeduced contexts are:
10325
10326            --A type that is a template-id in which one or more of
10327              the template-arguments is an expression that references
10328              a template-parameter.
10329
10330          In these cases, we assume deduction succeeded, but don't
10331          actually infer any unifications.  */
10332
10333       if (!uses_template_parms (parm)
10334           && !template_args_equal (parm, arg))
10335         return 1;
10336       else
10337         return 0;
10338     }
10339 }
10340 \f
10341 /* Note that DECL can be defined in this translation unit, if
10342    required.  */
10343
10344 static void
10345 mark_definable (tree decl)
10346 {
10347   tree clone;
10348   DECL_NOT_REALLY_EXTERN (decl) = 1;
10349   FOR_EACH_CLONE (clone, decl)
10350     DECL_NOT_REALLY_EXTERN (clone) = 1;
10351 }
10352
10353 /* Called if RESULT is explicitly instantiated, or is a member of an
10354    explicitly instantiated class.  */
10355
10356 void
10357 mark_decl_instantiated (tree result, int extern_p)
10358 {
10359   SET_DECL_EXPLICIT_INSTANTIATION (result);
10360
10361   /* If this entity has already been written out, it's too late to
10362      make any modifications.  */
10363   if (TREE_ASM_WRITTEN (result))
10364     return;
10365
10366   if (TREE_CODE (result) != FUNCTION_DECL)
10367     /* The TREE_PUBLIC flag for function declarations will have been
10368        set correctly by tsubst.  */
10369     TREE_PUBLIC (result) = 1;
10370
10371   /* This might have been set by an earlier implicit instantiation.  */
10372   DECL_COMDAT (result) = 0;
10373
10374   if (extern_p)
10375     DECL_NOT_REALLY_EXTERN (result) = 0;
10376   else
10377     {
10378       mark_definable (result);
10379       /* Always make artificials weak.  */
10380       if (DECL_ARTIFICIAL (result) && flag_weak)
10381         comdat_linkage (result);
10382       /* For WIN32 we also want to put explicit instantiations in
10383          linkonce sections.  */
10384       else if (TREE_PUBLIC (result))
10385         maybe_make_one_only (result);
10386     }
10387
10388   /* If EXTERN_P, then this function will not be emitted -- unless
10389      followed by an explicit instantiation, at which point its linkage
10390      will be adjusted.  If !EXTERN_P, then this function will be
10391      emitted here.  In neither circumstance do we want
10392      import_export_decl to adjust the linkage.  */
10393   DECL_INTERFACE_KNOWN (result) = 1;
10394 }
10395
10396 /* Given two function templates PAT1 and PAT2, return:
10397
10398    1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
10399    -1 if PAT2 is more specialized than PAT1.
10400    0 if neither is more specialized.
10401
10402    LEN indicates the number of parameters we should consider
10403    (defaulted parameters should not be considered).
10404
10405    The 1998 std underspecified function template partial ordering, and
10406    DR214 addresses the issue.  We take pairs of arguments, one from
10407    each of the templates, and deduce them against each other.  One of
10408    the templates will be more specialized if all the *other*
10409    template's arguments deduce against its arguments and at least one
10410    of its arguments *does* *not* deduce against the other template's
10411    corresponding argument.  Deduction is done as for class templates.
10412    The arguments used in deduction have reference and top level cv
10413    qualifiers removed.  Iff both arguments were originally reference
10414    types *and* deduction succeeds in both directions, the template
10415    with the more cv-qualified argument wins for that pairing (if
10416    neither is more cv-qualified, they both are equal).  Unlike regular
10417    deduction, after all the arguments have been deduced in this way,
10418    we do *not* verify the deduced template argument values can be
10419    substituted into non-deduced contexts, nor do we have to verify
10420    that all template arguments have been deduced.  */
10421
10422 int
10423 more_specialized_fn (tree pat1, tree pat2, int len)
10424 {
10425   tree decl1 = DECL_TEMPLATE_RESULT (pat1);
10426   tree decl2 = DECL_TEMPLATE_RESULT (pat2);
10427   tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
10428   tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
10429   tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
10430   tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
10431   tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
10432   tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
10433   int better1 = 0;
10434   int better2 = 0;
10435
10436   /* If only one is a member function, they are unordered.  */
10437   if (DECL_FUNCTION_MEMBER_P (decl1) != DECL_FUNCTION_MEMBER_P (decl2))
10438     return 0;
10439
10440   /* Don't consider 'this' parameter.  */
10441   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
10442     args1 = TREE_CHAIN (args1);
10443   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
10444     args2 = TREE_CHAIN (args2);
10445
10446   /* If only one is a conversion operator, they are unordered.  */
10447   if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
10448     return 0;
10449
10450   /* Consider the return type for a conversion function */
10451   if (DECL_CONV_FN_P (decl1))
10452     {
10453       args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
10454       args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
10455       len++;
10456     }
10457
10458   processing_template_decl++;
10459
10460   while (len--)
10461     {
10462       tree arg1 = TREE_VALUE (args1);
10463       tree arg2 = TREE_VALUE (args2);
10464       int deduce1, deduce2;
10465       int quals1 = -1;
10466       int quals2 = -1;
10467
10468       if (TREE_CODE (arg1) == REFERENCE_TYPE)
10469         {
10470           arg1 = TREE_TYPE (arg1);
10471           quals1 = cp_type_quals (arg1);
10472         }
10473
10474       if (TREE_CODE (arg2) == REFERENCE_TYPE)
10475         {
10476           arg2 = TREE_TYPE (arg2);
10477           quals2 = cp_type_quals (arg2);
10478         }
10479
10480       if ((quals1 < 0) != (quals2 < 0))
10481         {
10482           /* Only of the args is a reference, see if we should apply
10483              array/function pointer decay to it.  This is not part of
10484              DR214, but is, IMHO, consistent with the deduction rules
10485              for the function call itself, and with our earlier
10486              implementation of the underspecified partial ordering
10487              rules.  (nathan).  */
10488           if (quals1 >= 0)
10489             {
10490               switch (TREE_CODE (arg1))
10491                 {
10492                 case ARRAY_TYPE:
10493                   arg1 = TREE_TYPE (arg1);
10494                   /* FALLTHROUGH. */
10495                 case FUNCTION_TYPE:
10496                   arg1 = build_pointer_type (arg1);
10497                   break;
10498
10499                 default:
10500                   break;
10501                 }
10502             }
10503           else
10504             {
10505               switch (TREE_CODE (arg2))
10506                 {
10507                 case ARRAY_TYPE:
10508                   arg2 = TREE_TYPE (arg2);
10509                   /* FALLTHROUGH. */
10510                 case FUNCTION_TYPE:
10511                   arg2 = build_pointer_type (arg2);
10512                   break;
10513
10514                 default:
10515                   break;
10516                 }
10517             }
10518         }
10519
10520       arg1 = TYPE_MAIN_VARIANT (arg1);
10521       arg2 = TYPE_MAIN_VARIANT (arg2);
10522
10523       deduce1 = !unify (tparms1, targs1, arg1, arg2, UNIFY_ALLOW_NONE);
10524       deduce2 = !unify (tparms2, targs2, arg2, arg1, UNIFY_ALLOW_NONE);
10525
10526       if (!deduce1)
10527         better2 = -1;
10528       if (!deduce2)
10529         better1 = -1;
10530       if (better1 < 0 && better2 < 0)
10531         /* We've failed to deduce something in either direction.
10532            These must be unordered.  */
10533         break;
10534
10535       if (deduce1 && deduce2 && quals1 >= 0 && quals2 >= 0)
10536         {
10537           /* Deduces in both directions, see if quals can
10538              disambiguate.  Pretend the worse one failed to deduce. */
10539           if ((quals1 & quals2) == quals2)
10540             deduce1 = 0;
10541           if ((quals1 & quals2) == quals1)
10542             deduce2 = 0;
10543         }
10544       if (deduce1 && !deduce2 && !better2)
10545         better2 = 1;
10546       if (deduce2 && !deduce1 && !better1)
10547         better1 = 1;
10548
10549       args1 = TREE_CHAIN (args1);
10550       args2 = TREE_CHAIN (args2);
10551     }
10552
10553   processing_template_decl--;
10554
10555   return (better1 > 0) - (better2 > 0);
10556 }
10557
10558 /* Given two class template specialization list nodes PAT1 and PAT2, return:
10559
10560    1 if PAT1 is more specialized than PAT2 as described in [temp.class.order].
10561    -1 if PAT2 is more specialized than PAT1.
10562    0 if neither is more specialized.
10563
10564    FULL_ARGS is the full set of template arguments that triggers this
10565    partial ordering.  */
10566
10567 int
10568 more_specialized_class (tree pat1, tree pat2, tree full_args)
10569 {
10570   tree targs;
10571   int winner = 0;
10572
10573   /* Just like what happens for functions, if we are ordering between
10574      different class template specializations, we may encounter dependent
10575      types in the arguments, and we need our dependency check functions
10576      to behave correctly.  */
10577   ++processing_template_decl;
10578   targs = get_class_bindings (TREE_VALUE (pat1), TREE_PURPOSE (pat1),
10579                               add_outermost_template_args (full_args, TREE_PURPOSE (pat2)));
10580   if (targs)
10581     --winner;
10582
10583   targs = get_class_bindings (TREE_VALUE (pat2), TREE_PURPOSE (pat2),
10584                               add_outermost_template_args (full_args, TREE_PURPOSE (pat1)));
10585   if (targs)
10586     ++winner;
10587   --processing_template_decl;
10588
10589   return winner;
10590 }
10591
10592 /* Return the template arguments that will produce the function signature
10593    DECL from the function template FN, with the explicit template
10594    arguments EXPLICIT_ARGS.  If CHECK_RETTYPE is true, the return type must
10595    also match.  Return NULL_TREE if no satisfactory arguments could be
10596    found.  */
10597
10598 static tree
10599 get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
10600 {
10601   int ntparms = DECL_NTPARMS (fn);
10602   tree targs = make_tree_vec (ntparms);
10603   tree decl_type;
10604   tree decl_arg_types;
10605
10606   /* Substitute the explicit template arguments into the type of DECL.
10607      The call to fn_type_unification will handle substitution into the
10608      FN.  */
10609   decl_type = TREE_TYPE (decl);
10610   if (explicit_args && uses_template_parms (decl_type))
10611     {
10612       tree tmpl;
10613       tree converted_args;
10614
10615       if (DECL_TEMPLATE_INFO (decl))
10616         tmpl = DECL_TI_TEMPLATE (decl);
10617       else
10618         /* We can get here for some invalid specializations.  */
10619         return NULL_TREE;
10620
10621       converted_args
10622         = (coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
10623                                   explicit_args, NULL_TREE,
10624                                   tf_none, /*require_all_arguments=*/0));
10625       if (converted_args == error_mark_node)
10626         return NULL_TREE;
10627
10628       decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE);
10629       if (decl_type == error_mark_node)
10630         return NULL_TREE;
10631     }
10632
10633   decl_arg_types = TYPE_ARG_TYPES (decl_type);
10634   /* Never do unification on the 'this' parameter.  */
10635   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
10636     decl_arg_types = TREE_CHAIN (decl_arg_types);
10637
10638   if (fn_type_unification (fn, explicit_args, targs,
10639                            decl_arg_types,
10640                            (check_rettype || DECL_CONV_FN_P (fn)
10641                             ? TREE_TYPE (decl_type) : NULL_TREE),
10642                            DEDUCE_EXACT))
10643     return NULL_TREE;
10644
10645   return targs;
10646 }
10647
10648 /* Return the innermost template arguments that, when applied to a
10649    template specialization whose innermost template parameters are
10650    TPARMS, and whose specialization arguments are PARMS, yield the
10651    ARGS.
10652
10653    For example, suppose we have:
10654
10655      template <class T, class U> struct S {};
10656      template <class T> struct S<T*, int> {};
10657
10658    Then, suppose we want to get `S<double*, int>'.  The TPARMS will be
10659    {T}, the PARMS will be {T*, int} and the ARGS will be {double*,
10660    int}.  The resulting vector will be {double}, indicating that `T'
10661    is bound to `double'.  */
10662
10663 static tree
10664 get_class_bindings (tree tparms, tree parms, tree args)
10665 {
10666   int i, ntparms = TREE_VEC_LENGTH (tparms);
10667   tree vec = make_tree_vec (ntparms);
10668
10669   if (unify (tparms, vec, parms, INNERMOST_TEMPLATE_ARGS (args),
10670              UNIFY_ALLOW_NONE))
10671     return NULL_TREE;
10672
10673   for (i =  0; i < ntparms; ++i)
10674     if (! TREE_VEC_ELT (vec, i))
10675       return NULL_TREE;
10676
10677   if (verify_class_unification (vec, parms, args))
10678     return NULL_TREE;
10679
10680   return vec;
10681 }
10682
10683 /* In INSTANTIATIONS is a list of <INSTANTIATION, TEMPLATE> pairs.
10684    Pick the most specialized template, and return the corresponding
10685    instantiation, or if there is no corresponding instantiation, the
10686    template itself.  If there is no most specialized template,
10687    error_mark_node is returned.  If there are no templates at all,
10688    NULL_TREE is returned.  */
10689
10690 tree
10691 most_specialized_instantiation (tree instantiations)
10692 {
10693   tree fn, champ;
10694
10695   if (!instantiations)
10696     return NULL_TREE;
10697
10698   ++processing_template_decl;
10699
10700   champ = instantiations;
10701   for (fn = TREE_CHAIN (instantiations); fn; fn = TREE_CHAIN (fn))
10702     {
10703       int fate = 0;
10704
10705       if (get_bindings (TREE_VALUE (champ),
10706                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
10707                         NULL_TREE, /*check_ret=*/false))
10708         fate--;
10709
10710       if (get_bindings (TREE_VALUE (fn),
10711                         DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
10712                         NULL_TREE, /*check_ret=*/false))
10713         fate++;
10714
10715       if (fate != 1)
10716         {
10717           if (!fate)
10718             /* Equally specialized, move to next function.  If there
10719                is no next function, nothing's most specialized.  */
10720             fn = TREE_CHAIN (fn);
10721           champ = fn;
10722         }
10723     }
10724
10725   if (champ)
10726     /* Now verify that champ is better than everything earlier in the
10727        instantiation list.  */
10728     for (fn = instantiations; fn != champ; fn = TREE_CHAIN (fn))
10729       if (get_bindings (TREE_VALUE (champ),
10730                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
10731                         NULL_TREE, /*check_ret=*/false)
10732           || !get_bindings (TREE_VALUE (fn),
10733                             DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
10734                             NULL_TREE, /*check_ret=*/false))
10735         {
10736           champ = NULL_TREE;
10737           break;
10738         }
10739
10740   processing_template_decl--;
10741
10742   if (!champ)
10743     return error_mark_node;
10744
10745   return TREE_PURPOSE (champ) ? TREE_PURPOSE (champ) : TREE_VALUE (champ);
10746 }
10747
10748 /* Return the most specialized of the list of templates in FNS that can
10749    produce an instantiation matching DECL, given the explicit template
10750    arguments EXPLICIT_ARGS.  */
10751
10752 static tree
10753 most_specialized (tree fns, tree decl, tree explicit_args)
10754 {
10755   tree candidates = NULL_TREE;
10756   tree fn, args;
10757
10758   for (fn = fns; fn; fn = TREE_CHAIN (fn))
10759     {
10760       tree candidate = TREE_VALUE (fn);
10761
10762       args = get_bindings (candidate, decl, explicit_args, /*check_ret=*/true);
10763       if (args)
10764         candidates = tree_cons (NULL_TREE, candidate, candidates);
10765     }
10766
10767   return most_specialized_instantiation (candidates);
10768 }
10769
10770 /* If DECL is a specialization of some template, return the most
10771    general such template.  Otherwise, returns NULL_TREE.
10772
10773    For example, given:
10774
10775      template <class T> struct S { template <class U> void f(U); };
10776
10777    if TMPL is `template <class U> void S<int>::f(U)' this will return
10778    the full template.  This function will not trace past partial
10779    specializations, however.  For example, given in addition:
10780
10781      template <class T> struct S<T*> { template <class U> void f(U); };
10782
10783    if TMPL is `template <class U> void S<int*>::f(U)' this will return
10784    `template <class T> template <class U> S<T*>::f(U)'.  */
10785
10786 tree
10787 most_general_template (tree decl)
10788 {
10789   /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
10790      an immediate specialization.  */
10791   if (TREE_CODE (decl) == FUNCTION_DECL)
10792     {
10793       if (DECL_TEMPLATE_INFO (decl)) {
10794         decl = DECL_TI_TEMPLATE (decl);
10795
10796         /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
10797            template friend.  */
10798         if (TREE_CODE (decl) != TEMPLATE_DECL)
10799           return NULL_TREE;
10800       } else
10801         return NULL_TREE;
10802     }
10803
10804   /* Look for more and more general templates.  */
10805   while (DECL_TEMPLATE_INFO (decl))
10806     {
10807       /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
10808          (See cp-tree.h for details.)  */
10809       if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
10810         break;
10811
10812       if (CLASS_TYPE_P (TREE_TYPE (decl))
10813           && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
10814         break;
10815
10816       /* Stop if we run into an explicitly specialized class template.  */
10817       if (!DECL_NAMESPACE_SCOPE_P (decl)
10818           && DECL_CONTEXT (decl)
10819           && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
10820         break;
10821
10822       decl = DECL_TI_TEMPLATE (decl);
10823     }
10824
10825   return decl;
10826 }
10827
10828 /* Return the most specialized of the class template specializations
10829    of TMPL which can produce an instantiation matching ARGS, or
10830    error_mark_node if the choice is ambiguous.  */
10831
10832 static tree
10833 most_specialized_class (tree tmpl, tree args)
10834 {
10835   tree list = NULL_TREE;
10836   tree t;
10837   tree champ;
10838   int fate;
10839
10840   tmpl = most_general_template (tmpl);
10841   for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
10842     {
10843       tree spec_args
10844         = get_class_bindings (TREE_VALUE (t), TREE_PURPOSE (t), args);
10845       if (spec_args)
10846         {
10847           list = tree_cons (TREE_PURPOSE (t), TREE_VALUE (t), list);
10848           TREE_TYPE (list) = TREE_TYPE (t);
10849         }
10850     }
10851
10852   if (! list)
10853     return NULL_TREE;
10854
10855   t = list;
10856   champ = t;
10857   t = TREE_CHAIN (t);
10858   for (; t; t = TREE_CHAIN (t))
10859     {
10860       fate = more_specialized_class (champ, t, args);
10861       if (fate == 1)
10862         ;
10863       else
10864         {
10865           if (fate == 0)
10866             {
10867               t = TREE_CHAIN (t);
10868               if (! t)
10869                 return error_mark_node;
10870             }
10871           champ = t;
10872         }
10873     }
10874
10875   for (t = list; t && t != champ; t = TREE_CHAIN (t))
10876     {
10877       fate = more_specialized_class (champ, t, args);
10878       if (fate != 1)
10879         return error_mark_node;
10880     }
10881
10882   return champ;
10883 }
10884
10885 /* Explicitly instantiate DECL.  */
10886
10887 void
10888 do_decl_instantiation (tree decl, tree storage)
10889 {
10890   tree result = NULL_TREE;
10891   int extern_p = 0;
10892
10893   if (!decl)
10894     /* An error occurred, for which grokdeclarator has already issued
10895        an appropriate message.  */
10896     return;
10897   else if (! DECL_LANG_SPECIFIC (decl))
10898     {
10899       error ("explicit instantiation of non-template %q#D", decl);
10900       return;
10901     }
10902   else if (TREE_CODE (decl) == VAR_DECL)
10903     {
10904       /* There is an asymmetry here in the way VAR_DECLs and
10905          FUNCTION_DECLs are handled by grokdeclarator.  In the case of
10906          the latter, the DECL we get back will be marked as a
10907          template instantiation, and the appropriate
10908          DECL_TEMPLATE_INFO will be set up.  This does not happen for
10909          VAR_DECLs so we do the lookup here.  Probably, grokdeclarator
10910          should handle VAR_DECLs as it currently handles
10911          FUNCTION_DECLs.  */
10912       result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
10913       if (!result || TREE_CODE (result) != VAR_DECL)
10914         {
10915           error ("no matching template for %qD found", decl);
10916           return;
10917         }
10918     }
10919   else if (TREE_CODE (decl) != FUNCTION_DECL)
10920     {
10921       error ("explicit instantiation of %q#D", decl);
10922       return;
10923     }
10924   else
10925     result = decl;
10926
10927   /* Check for various error cases.  Note that if the explicit
10928      instantiation is valid the RESULT will currently be marked as an
10929      *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
10930      until we get here.  */
10931
10932   if (DECL_TEMPLATE_SPECIALIZATION (result))
10933     {
10934       /* DR 259 [temp.spec].
10935
10936          Both an explicit instantiation and a declaration of an explicit
10937          specialization shall not appear in a program unless the explicit
10938          instantiation follows a declaration of the explicit specialization.
10939
10940          For a given set of template parameters, if an explicit
10941          instantiation of a template appears after a declaration of an
10942          explicit specialization for that template, the explicit
10943          instantiation has no effect.  */
10944       return;
10945     }
10946   else if (DECL_EXPLICIT_INSTANTIATION (result))
10947     {
10948       /* [temp.spec]
10949
10950          No program shall explicitly instantiate any template more
10951          than once.
10952
10953          We check DECL_NOT_REALLY_EXTERN so as not to complain when
10954          the first instantiation was `extern' and the second is not,
10955          and EXTERN_P for the opposite case.  */
10956       if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
10957         pedwarn ("duplicate explicit instantiation of %q#D", result);
10958       /* If an "extern" explicit instantiation follows an ordinary
10959          explicit instantiation, the template is instantiated.  */
10960       if (extern_p)
10961         return;
10962     }
10963   else if (!DECL_IMPLICIT_INSTANTIATION (result))
10964     {
10965       error ("no matching template for %qD found", result);
10966       return;
10967     }
10968   else if (!DECL_TEMPLATE_INFO (result))
10969     {
10970       pedwarn ("explicit instantiation of non-template %q#D", result);
10971       return;
10972     }
10973
10974   if (storage == NULL_TREE)
10975     ;
10976   else if (storage == ridpointers[(int) RID_EXTERN])
10977     {
10978       if (pedantic && !in_system_header)
10979         pedwarn ("ISO C++ forbids the use of %<extern%> on explicit "
10980                  "instantiations");
10981       extern_p = 1;
10982     }
10983   else
10984     error ("storage class %qD applied to template instantiation", storage);
10985
10986   mark_decl_instantiated (result, extern_p);
10987   if (! extern_p)
10988     instantiate_decl (result, /*defer_ok=*/1, /*undefined_ok=*/0);
10989 }
10990
10991 void
10992 mark_class_instantiated (tree t, int extern_p)
10993 {
10994   SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
10995   SET_CLASSTYPE_INTERFACE_KNOWN (t);
10996   CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
10997   TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
10998   if (! extern_p)
10999     {
11000       CLASSTYPE_DEBUG_REQUESTED (t) = 1;
11001       rest_of_type_compilation (t, 1);
11002     }
11003 }
11004
11005 /* Called from do_type_instantiation through binding_table_foreach to
11006    do recursive instantiation for the type bound in ENTRY.  */
11007 static void
11008 bt_instantiate_type_proc (binding_entry entry, void *data)
11009 {
11010   tree storage = *(tree *) data;
11011
11012   if (IS_AGGR_TYPE (entry->type)
11013       && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
11014     do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
11015 }
11016
11017 /* Called from do_type_instantiation to instantiate a member
11018    (a member function or a static member variable) of an
11019    explicitly instantiated class template.  */
11020 static void
11021 instantiate_class_member (tree decl, int extern_p)
11022 {
11023   mark_decl_instantiated (decl, extern_p);
11024   if (! extern_p)
11025     instantiate_decl (decl, /*defer_ok=*/1, /* undefined_ok=*/1);
11026 }
11027
11028 /* Perform an explicit instantiation of template class T.  STORAGE, if
11029    non-null, is the RID for extern, inline or static.  COMPLAIN is
11030    nonzero if this is called from the parser, zero if called recursively,
11031    since the standard is unclear (as detailed below).  */
11032
11033 void
11034 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
11035 {
11036   int extern_p = 0;
11037   int nomem_p = 0;
11038   int static_p = 0;
11039   int previous_instantiation_extern_p = 0;
11040
11041   if (TREE_CODE (t) == TYPE_DECL)
11042     t = TREE_TYPE (t);
11043
11044   if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
11045     {
11046       error ("explicit instantiation of non-template type %qT", t);
11047       return;
11048     }
11049
11050   complete_type (t);
11051
11052   if (!COMPLETE_TYPE_P (t))
11053     {
11054       if (complain & tf_error)
11055         error ("explicit instantiation of %q#T before definition of template",
11056                t);
11057       return;
11058     }
11059
11060   if (storage != NULL_TREE)
11061     {
11062       if (pedantic && !in_system_header)
11063         pedwarn("ISO C++ forbids the use of %qE on explicit instantiations",
11064                 storage);
11065
11066       if (storage == ridpointers[(int) RID_INLINE])
11067         nomem_p = 1;
11068       else if (storage == ridpointers[(int) RID_EXTERN])
11069         extern_p = 1;
11070       else if (storage == ridpointers[(int) RID_STATIC])
11071         static_p = 1;
11072       else
11073         {
11074           error ("storage class %qD applied to template instantiation",
11075                  storage);
11076           extern_p = 0;
11077         }
11078     }
11079
11080   if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
11081     {
11082       /* DR 259 [temp.spec].
11083
11084          Both an explicit instantiation and a declaration of an explicit
11085          specialization shall not appear in a program unless the explicit
11086          instantiation follows a declaration of the explicit specialization.
11087
11088          For a given set of template parameters, if an explicit
11089          instantiation of a template appears after a declaration of an
11090          explicit specialization for that template, the explicit
11091          instantiation has no effect.  */
11092       return;
11093     }
11094   else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
11095     {
11096       /* [temp.spec]
11097
11098          No program shall explicitly instantiate any template more
11099          than once.
11100
11101          If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
11102          instantiation was `extern'.  If EXTERN_P then the second is.
11103          These cases are OK.  */
11104       previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
11105
11106       if (!previous_instantiation_extern_p && !extern_p
11107           && (complain & tf_error))
11108         pedwarn ("duplicate explicit instantiation of %q#T", t);
11109
11110       /* If we've already instantiated the template, just return now.  */
11111       if (!CLASSTYPE_INTERFACE_ONLY (t))
11112         return;
11113     }
11114
11115   mark_class_instantiated (t, extern_p);
11116
11117   if (nomem_p)
11118     return;
11119
11120   {
11121     tree tmp;
11122
11123     /* In contrast to implicit instantiation, where only the
11124        declarations, and not the definitions, of members are
11125        instantiated, we have here:
11126
11127          [temp.explicit]
11128
11129          The explicit instantiation of a class template specialization
11130          implies the instantiation of all of its members not
11131          previously explicitly specialized in the translation unit
11132          containing the explicit instantiation.
11133
11134        Of course, we can't instantiate member template classes, since
11135        we don't have any arguments for them.  Note that the standard
11136        is unclear on whether the instantiation of the members are
11137        *explicit* instantiations or not.  However, the most natural
11138        interpretation is that it should be an explicit instantiation.  */
11139
11140     if (! static_p)
11141       for (tmp = TYPE_METHODS (t); tmp; tmp = TREE_CHAIN (tmp))
11142         if (TREE_CODE (tmp) == FUNCTION_DECL
11143             && DECL_TEMPLATE_INSTANTIATION (tmp))
11144           instantiate_class_member (tmp, extern_p);
11145
11146     for (tmp = TYPE_FIELDS (t); tmp; tmp = TREE_CHAIN (tmp))
11147       if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
11148         instantiate_class_member (tmp, extern_p);
11149
11150     if (CLASSTYPE_NESTED_UTDS (t))
11151       binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
11152                              bt_instantiate_type_proc, &storage);
11153   }
11154 }
11155
11156 /* Given a function DECL, which is a specialization of TMPL, modify
11157    DECL to be a re-instantiation of TMPL with the same template
11158    arguments.  TMPL should be the template into which tsubst'ing
11159    should occur for DECL, not the most general template.
11160
11161    One reason for doing this is a scenario like this:
11162
11163      template <class T>
11164      void f(const T&, int i);
11165
11166      void g() { f(3, 7); }
11167
11168      template <class T>
11169      void f(const T& t, const int i) { }
11170
11171    Note that when the template is first instantiated, with
11172    instantiate_template, the resulting DECL will have no name for the
11173    first parameter, and the wrong type for the second.  So, when we go
11174    to instantiate the DECL, we regenerate it.  */
11175
11176 static void
11177 regenerate_decl_from_template (tree decl, tree tmpl)
11178 {
11179   /* The arguments used to instantiate DECL, from the most general
11180      template.  */
11181   tree args;
11182   tree code_pattern;
11183
11184   args = DECL_TI_ARGS (decl);
11185   code_pattern = DECL_TEMPLATE_RESULT (tmpl);
11186
11187   /* Make sure that we can see identifiers, and compute access
11188      correctly.  */
11189   push_access_scope (decl);
11190
11191   if (TREE_CODE (decl) == FUNCTION_DECL)
11192     {
11193       tree decl_parm;
11194       tree pattern_parm;
11195       tree specs;
11196       int args_depth;
11197       int parms_depth;
11198
11199       args_depth = TMPL_ARGS_DEPTH (args);
11200       parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
11201       if (args_depth > parms_depth)
11202         args = get_innermost_template_args (args, parms_depth);
11203
11204       specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
11205                                               args, tf_error, NULL_TREE);
11206       if (specs)
11207         TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
11208                                                     specs);
11209
11210       /* Merge parameter declarations.  */
11211       decl_parm = skip_artificial_parms_for (decl,
11212                                              DECL_ARGUMENTS (decl));
11213       pattern_parm
11214         = skip_artificial_parms_for (code_pattern,
11215                                      DECL_ARGUMENTS (code_pattern));
11216       while (decl_parm)
11217         {
11218           tree parm_type;
11219           tree attributes;
11220
11221           if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
11222             DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
11223           parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
11224                               NULL_TREE);
11225           parm_type = type_decays_to (parm_type);
11226           if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
11227             TREE_TYPE (decl_parm) = parm_type;
11228           attributes = DECL_ATTRIBUTES (pattern_parm);
11229           if (DECL_ATTRIBUTES (decl_parm) != attributes)
11230             {
11231               DECL_ATTRIBUTES (decl_parm) = attributes;
11232               cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
11233             }
11234           decl_parm = TREE_CHAIN (decl_parm);
11235           pattern_parm = TREE_CHAIN (pattern_parm);
11236         }
11237
11238       /* Merge additional specifiers from the CODE_PATTERN.  */
11239       if (DECL_DECLARED_INLINE_P (code_pattern)
11240           && !DECL_DECLARED_INLINE_P (decl))
11241         DECL_DECLARED_INLINE_P (decl) = 1;
11242       if (DECL_INLINE (code_pattern) && !DECL_INLINE (decl))
11243         DECL_INLINE (decl) = 1;
11244     }
11245   else if (TREE_CODE (decl) == VAR_DECL)
11246     {
11247       if (!DECL_INITIALIZED_IN_CLASS_P (decl)
11248           && DECL_INITIAL (code_pattern))
11249         DECL_INITIAL (decl) =
11250           tsubst_expr (DECL_INITIAL (code_pattern), args,
11251                        tf_error, DECL_TI_TEMPLATE (decl));
11252     }
11253   else
11254     gcc_unreachable ();
11255
11256   pop_access_scope (decl);
11257 }
11258
11259 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
11260    substituted to get DECL.  */
11261
11262 tree
11263 template_for_substitution (tree decl)
11264 {
11265   tree tmpl = DECL_TI_TEMPLATE (decl);
11266
11267   /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
11268      for the instantiation.  This is not always the most general
11269      template.  Consider, for example:
11270
11271         template <class T>
11272         struct S { template <class U> void f();
11273                    template <> void f<int>(); };
11274
11275      and an instantiation of S<double>::f<int>.  We want TD to be the
11276      specialization S<T>::f<int>, not the more general S<T>::f<U>.  */
11277   while (/* An instantiation cannot have a definition, so we need a
11278             more general template.  */
11279          DECL_TEMPLATE_INSTANTIATION (tmpl)
11280            /* We must also deal with friend templates.  Given:
11281
11282                 template <class T> struct S {
11283                   template <class U> friend void f() {};
11284                 };
11285
11286               S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
11287               so far as the language is concerned, but that's still
11288               where we get the pattern for the instantiation from.  On
11289               other hand, if the definition comes outside the class, say:
11290
11291                 template <class T> struct S {
11292                   template <class U> friend void f();
11293                 };
11294                 template <class U> friend void f() {}
11295
11296               we don't need to look any further.  That's what the check for
11297               DECL_INITIAL is for.  */
11298           || (TREE_CODE (decl) == FUNCTION_DECL
11299               && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
11300               && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
11301     {
11302       /* The present template, TD, should not be a definition.  If it
11303          were a definition, we should be using it!  Note that we
11304          cannot restructure the loop to just keep going until we find
11305          a template with a definition, since that might go too far if
11306          a specialization was declared, but not defined.  */
11307       gcc_assert (TREE_CODE (decl) != VAR_DECL
11308                   || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl)));
11309
11310       /* Fetch the more general template.  */
11311       tmpl = DECL_TI_TEMPLATE (tmpl);
11312     }
11313
11314   return tmpl;
11315 }
11316
11317 /* Produce the definition of D, a _DECL generated from a template.  If
11318    DEFER_OK is nonzero, then we don't have to actually do the
11319    instantiation now; we just have to do it sometime.  Normally it is
11320    an error if this is an explicit instantiation but D is undefined.
11321    If UNDEFINED_OK is nonzero, then instead we treat it as an implicit
11322    instantiation.  UNDEFINED_OK is nonzero only if we are being used
11323    to instantiate the members of an explicitly instantiated class
11324    template.  */
11325
11326
11327 tree
11328 instantiate_decl (tree d, int defer_ok, int undefined_ok)
11329 {
11330   tree tmpl = DECL_TI_TEMPLATE (d);
11331   tree gen_args;
11332   tree args;
11333   tree td;
11334   tree code_pattern;
11335   tree spec;
11336   tree gen_tmpl;
11337   int pattern_defined;
11338   int need_push;
11339   location_t saved_loc = input_location;
11340
11341   /* This function should only be used to instantiate templates for
11342      functions and static member variables.  */
11343   gcc_assert (TREE_CODE (d) == FUNCTION_DECL
11344               || TREE_CODE (d) == VAR_DECL);
11345
11346   /* Variables are never deferred; if instantiation is required, they
11347      are instantiated right away.  That allows for better code in the
11348      case that an expression refers to the value of the variable --
11349      if the variable has a constant value the referring expression can
11350      take advantage of that fact.  */
11351   if (TREE_CODE (d) == VAR_DECL)
11352     defer_ok = 0;
11353
11354   /* Don't instantiate cloned functions.  Instead, instantiate the
11355      functions they cloned.  */
11356   if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
11357     d = DECL_CLONED_FUNCTION (d);
11358
11359   if (DECL_TEMPLATE_INSTANTIATED (d))
11360     /* D has already been instantiated.  It might seem reasonable to
11361        check whether or not D is an explicit instantiation, and, if so,
11362        stop here.  But when an explicit instantiation is deferred
11363        until the end of the compilation, DECL_EXPLICIT_INSTANTIATION
11364        is set, even though we still need to do the instantiation.  */
11365     return d;
11366
11367   /* If we already have a specialization of this declaration, then
11368      there's no reason to instantiate it.  Note that
11369      retrieve_specialization gives us both instantiations and
11370      specializations, so we must explicitly check
11371      DECL_TEMPLATE_SPECIALIZATION.  */
11372   gen_tmpl = most_general_template (tmpl);
11373   gen_args = DECL_TI_ARGS (d);
11374   spec = retrieve_specialization (gen_tmpl, gen_args,
11375                                   /*class_specializations_p=*/false);
11376   if (spec != NULL_TREE && DECL_TEMPLATE_SPECIALIZATION (spec))
11377     return spec;
11378
11379   /* This needs to happen before any tsubsting.  */
11380   if (! push_tinst_level (d))
11381     return d;
11382
11383   timevar_push (TV_PARSE);
11384
11385   /* We may be in the middle of deferred access check.  Disable it now.  */
11386   push_deferring_access_checks (dk_no_deferred);
11387
11388   /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
11389      for the instantiation.  */
11390   td = template_for_substitution (d);
11391   code_pattern = DECL_TEMPLATE_RESULT (td);
11392
11393   if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
11394       || DECL_TEMPLATE_SPECIALIZATION (td))
11395     /* In the case of a friend template whose definition is provided
11396        outside the class, we may have too many arguments.  Drop the
11397        ones we don't need.  The same is true for specializations.  */
11398     args = get_innermost_template_args
11399       (gen_args, TMPL_PARMS_DEPTH  (DECL_TEMPLATE_PARMS (td)));
11400   else
11401     args = gen_args;
11402
11403   if (TREE_CODE (d) == FUNCTION_DECL)
11404     pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE);
11405   else
11406     pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
11407   /* Unless an explicit instantiation directive has already determined
11408      the linkage of D, remember that a definition is available for
11409      this entity.  */
11410   if (pattern_defined
11411       && !DECL_INTERFACE_KNOWN (d)
11412       && !DECL_NOT_REALLY_EXTERN (d))
11413     mark_definable (d);
11414
11415   input_location = DECL_SOURCE_LOCATION (d);
11416
11417   if (! pattern_defined && DECL_EXPLICIT_INSTANTIATION (d) && undefined_ok)
11418     {
11419       DECL_NOT_REALLY_EXTERN (d) = 0;
11420       SET_DECL_IMPLICIT_INSTANTIATION (d);
11421     }
11422
11423   if (!defer_ok)
11424     {
11425       /* Recheck the substitutions to obtain any warning messages
11426          about ignoring cv qualifiers.  */
11427       tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
11428       tree type = TREE_TYPE (gen);
11429
11430       /* Make sure that we can see identifiers, and compute access
11431          correctly.  D is already the target FUNCTION_DECL with the
11432          right context.  */
11433       push_access_scope (d);
11434
11435       if (TREE_CODE (gen) == FUNCTION_DECL)
11436         {
11437           tsubst (DECL_ARGUMENTS (gen), gen_args, tf_error | tf_warning, d);
11438           tsubst (TYPE_RAISES_EXCEPTIONS (type), gen_args,
11439                   tf_error | tf_warning, d);
11440           /* Don't simply tsubst the function type, as that will give
11441              duplicate warnings about poor parameter qualifications.
11442              The function arguments are the same as the decl_arguments
11443              without the top level cv qualifiers.  */
11444           type = TREE_TYPE (type);
11445         }
11446       tsubst (type, gen_args, tf_error | tf_warning, d);
11447
11448       pop_access_scope (d);
11449     }
11450
11451   /* We should have set up DECL_INITIAL in instantiate_class_template
11452      for in-class definitions of static data members.  */
11453   gcc_assert (!(TREE_CODE (d) == VAR_DECL
11454                 && DECL_INITIALIZED_IN_CLASS_P (d)
11455                 && DECL_INITIAL (d) == NULL_TREE));
11456
11457   /* Do not instantiate templates that we know will be defined
11458      elsewhere.  */
11459   if (DECL_INTERFACE_KNOWN (d)
11460       && DECL_REALLY_EXTERN (d)
11461       && ! (TREE_CODE (d) == FUNCTION_DECL
11462             && DECL_INLINE (d)))
11463     goto out;
11464   /* Defer all other templates, unless we have been explicitly
11465      forbidden from doing so.  We restore the source position here
11466      because it's used by add_pending_template.  */
11467   else if (! pattern_defined || defer_ok)
11468     {
11469       input_location = saved_loc;
11470
11471       if (at_eof && !pattern_defined
11472           && DECL_EXPLICIT_INSTANTIATION (d))
11473         /* [temp.explicit]
11474
11475            The definition of a non-exported function template, a
11476            non-exported member function template, or a non-exported
11477            member function or static data member of a class template
11478            shall be present in every translation unit in which it is
11479            explicitly instantiated.  */
11480         pedwarn
11481           ("explicit instantiation of %qD but no definition available", d);
11482
11483       add_pending_template (d);
11484       goto out;
11485     }
11486   /* Tell the repository that D is available in this translation unit
11487      -- and see if it is supposed to be instantiated here.  */
11488   if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
11489     {
11490       /* In a PCH file, despite the fact that the repository hasn't
11491          requested instantiation in the PCH it is still possible that
11492          an instantiation will be required in a file that includes the
11493          PCH.  */
11494       if (pch_file)
11495         add_pending_template (d);
11496       /* Instantiate inline functions so that the inliner can do its
11497          job, even though we'll not be emitting a copy of this
11498          function.  */
11499       if (!(TREE_CODE (d) == FUNCTION_DECL
11500             && flag_inline_trees
11501             && DECL_DECLARED_INLINE_P (d)))
11502         goto out;
11503     }
11504
11505   need_push = !cfun || !global_bindings_p ();
11506   if (need_push)
11507     push_to_top_level ();
11508
11509   /* Mark D as instantiated so that recursive calls to
11510      instantiate_decl do not try to instantiate it again.  */
11511   DECL_TEMPLATE_INSTANTIATED (d) = 1;
11512
11513   /* Regenerate the declaration in case the template has been modified
11514      by a subsequent redeclaration.  */
11515   regenerate_decl_from_template (d, td);
11516
11517   /* We already set the file and line above.  Reset them now in case
11518      they changed as a result of calling regenerate_decl_from_template.  */
11519   input_location = DECL_SOURCE_LOCATION (d);
11520
11521   if (TREE_CODE (d) == VAR_DECL)
11522     {
11523       /* Clear out DECL_RTL; whatever was there before may not be right
11524          since we've reset the type of the declaration.  */
11525       SET_DECL_RTL (d, NULL_RTX);
11526       DECL_IN_AGGR_P (d) = 0;
11527
11528       /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
11529          initializer.  That function will defer actual emission until
11530          we have a chance to determine linkage.  */
11531       DECL_EXTERNAL (d) = 0;
11532
11533       /* Enter the scope of D so that access-checking works correctly.  */
11534       push_nested_class (DECL_CONTEXT (d));
11535       cp_finish_decl (d,
11536                       (!DECL_INITIALIZED_IN_CLASS_P (d)
11537                        ? DECL_INITIAL (d) : NULL_TREE),
11538                       NULL_TREE, 0);
11539       pop_nested_class ();
11540     }
11541   else if (TREE_CODE (d) == FUNCTION_DECL)
11542     {
11543       htab_t saved_local_specializations;
11544       tree subst_decl;
11545       tree tmpl_parm;
11546       tree spec_parm;
11547
11548       /* Save away the current list, in case we are instantiating one
11549          template from within the body of another.  */
11550       saved_local_specializations = local_specializations;
11551
11552       /* Set up the list of local specializations.  */
11553       local_specializations = htab_create (37,
11554                                            hash_local_specialization,
11555                                            eq_local_specializations,
11556                                            NULL);
11557
11558       /* Set up context.  */
11559       start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
11560
11561       /* Create substitution entries for the parameters.  */
11562       subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
11563       tmpl_parm = DECL_ARGUMENTS (subst_decl);
11564       spec_parm = DECL_ARGUMENTS (d);
11565       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
11566         {
11567           register_local_specialization (spec_parm, tmpl_parm);
11568           spec_parm = skip_artificial_parms_for (d, spec_parm);
11569           tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
11570         }
11571       while (tmpl_parm)
11572         {
11573           register_local_specialization (spec_parm, tmpl_parm);
11574           tmpl_parm = TREE_CHAIN (tmpl_parm);
11575           spec_parm = TREE_CHAIN (spec_parm);
11576         }
11577       gcc_assert (!spec_parm);
11578
11579       /* Substitute into the body of the function.  */
11580       tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
11581                    tf_error | tf_warning, tmpl);
11582
11583       /* We don't need the local specializations any more.  */
11584       htab_delete (local_specializations);
11585       local_specializations = saved_local_specializations;
11586
11587       /* Finish the function.  */
11588       d = finish_function (0);
11589       expand_or_defer_fn (d);
11590     }
11591
11592   /* We're not deferring instantiation any more.  */
11593   TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
11594
11595   if (need_push)
11596     pop_from_top_level ();
11597
11598 out:
11599   input_location = saved_loc;
11600   pop_deferring_access_checks ();
11601   pop_tinst_level ();
11602
11603   timevar_pop (TV_PARSE);
11604
11605   return d;
11606 }
11607
11608 /* Run through the list of templates that we wish we could
11609    instantiate, and instantiate any we can.  RETRIES is the
11610    number of times we retry pending template instantiation.  */
11611
11612 void
11613 instantiate_pending_templates (int retries)
11614 {
11615   tree *t;
11616   tree last = NULL_TREE;
11617   int reconsider;
11618   location_t saved_loc = input_location;
11619   int saved_in_system_header = in_system_header;
11620
11621   /* Instantiating templates may trigger vtable generation.  This in turn
11622      may require further template instantiations.  We place a limit here
11623      to avoid infinite loop.  */
11624   if (pending_templates && retries >= max_tinst_depth)
11625     {
11626       error ("template instantiation depth exceeds maximum of %d"
11627             " instantiating %q+D, possibly from virtual table generation"
11628             " (use -ftemplate-depth-NN to increase the maximum)",
11629             max_tinst_depth, TREE_VALUE (pending_templates));
11630       return;
11631     }
11632
11633   do
11634     {
11635       reconsider = 0;
11636
11637       t = &pending_templates;
11638       while (*t)
11639         {
11640           tree instantiation = TREE_VALUE (*t);
11641
11642           reopen_tinst_level (TREE_PURPOSE (*t));
11643
11644           if (TYPE_P (instantiation))
11645             {
11646               tree fn;
11647
11648               if (!COMPLETE_TYPE_P (instantiation))
11649                 {
11650                   instantiate_class_template (instantiation);
11651                   if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
11652                     for (fn = TYPE_METHODS (instantiation);
11653                          fn;
11654                          fn = TREE_CHAIN (fn))
11655                       if (! DECL_ARTIFICIAL (fn))
11656                         instantiate_decl (fn, /*defer_ok=*/0,
11657                                           /*undefined_ok=*/0);
11658                   if (COMPLETE_TYPE_P (instantiation))
11659                     reconsider = 1;
11660                 }
11661
11662               if (COMPLETE_TYPE_P (instantiation))
11663                 /* If INSTANTIATION has been instantiated, then we don't
11664                    need to consider it again in the future.  */
11665                 *t = TREE_CHAIN (*t);
11666               else
11667                 {
11668                   last = *t;
11669                   t = &TREE_CHAIN (*t);
11670                 }
11671             }
11672           else
11673             {
11674               if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
11675                   && !DECL_TEMPLATE_INSTANTIATED (instantiation))
11676                 {
11677                   instantiation = instantiate_decl (instantiation,
11678                                                     /*defer_ok=*/0,
11679                                                     /*undefined_ok=*/0);
11680                   if (DECL_TEMPLATE_INSTANTIATED (instantiation))
11681                     reconsider = 1;
11682                 }
11683
11684               if (DECL_TEMPLATE_SPECIALIZATION (instantiation)
11685                   || DECL_TEMPLATE_INSTANTIATED (instantiation))
11686                 /* If INSTANTIATION has been instantiated, then we don't
11687                    need to consider it again in the future.  */
11688                 *t = TREE_CHAIN (*t);
11689               else
11690                 {
11691                   last = *t;
11692                   t = &TREE_CHAIN (*t);
11693                 }
11694             }
11695           tinst_depth = 0;
11696           current_tinst_level = NULL_TREE;
11697         }
11698       last_pending_template = last;
11699     }
11700   while (reconsider);
11701
11702   input_location = saved_loc;
11703   in_system_header = saved_in_system_header;
11704 }
11705
11706 /* Substitute ARGVEC into T, which is a list of initializers for
11707    either base class or a non-static data member.  The TREE_PURPOSEs
11708    are DECLs, and the TREE_VALUEs are the initializer values.  Used by
11709    instantiate_decl.  */
11710
11711 static tree
11712 tsubst_initializer_list (tree t, tree argvec)
11713 {
11714   tree inits = NULL_TREE;
11715
11716   for (; t; t = TREE_CHAIN (t))
11717     {
11718       tree decl;
11719       tree init;
11720
11721       decl = tsubst_copy (TREE_PURPOSE (t), argvec, tf_error | tf_warning,
11722                           NULL_TREE);
11723       decl = expand_member_init (decl);
11724       if (decl && !DECL_P (decl))
11725         in_base_initializer = 1;
11726
11727       init = tsubst_expr (TREE_VALUE (t), argvec, tf_error | tf_warning,
11728                           NULL_TREE);
11729       in_base_initializer = 0;
11730
11731       if (decl)
11732         {
11733           init = build_tree_list (decl, init);
11734           TREE_CHAIN (init) = inits;
11735           inits = init;
11736         }
11737     }
11738   return inits;
11739 }
11740
11741 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL.  */
11742
11743 static void
11744 set_current_access_from_decl (tree decl)
11745 {
11746   if (TREE_PRIVATE (decl))
11747     current_access_specifier = access_private_node;
11748   else if (TREE_PROTECTED (decl))
11749     current_access_specifier = access_protected_node;
11750   else
11751     current_access_specifier = access_public_node;
11752 }
11753
11754 /* Instantiate an enumerated type.  TAG is the template type, NEWTAG
11755    is the instantiation (which should have been created with
11756    start_enum) and ARGS are the template arguments to use.  */
11757
11758 static void
11759 tsubst_enum (tree tag, tree newtag, tree args)
11760 {
11761   tree e;
11762
11763   for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
11764     {
11765       tree value;
11766       tree decl;
11767
11768       decl = TREE_VALUE (e);
11769       /* Note that in a template enum, the TREE_VALUE is the
11770          CONST_DECL, not the corresponding INTEGER_CST.  */
11771       value = tsubst_expr (DECL_INITIAL (decl),
11772                            args, tf_error | tf_warning,
11773                            NULL_TREE);
11774
11775       /* Give this enumeration constant the correct access.  */
11776       set_current_access_from_decl (decl);
11777
11778       /* Actually build the enumerator itself.  */
11779       build_enumerator (DECL_NAME (decl), value, newtag);
11780     }
11781
11782   finish_enum (newtag);
11783   DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
11784     = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
11785 }
11786
11787 /* DECL is a FUNCTION_DECL that is a template specialization.  Return
11788    its type -- but without substituting the innermost set of template
11789    arguments.  So, innermost set of template parameters will appear in
11790    the type.  */
11791
11792 tree
11793 get_mostly_instantiated_function_type (tree decl)
11794 {
11795   tree fn_type;
11796   tree tmpl;
11797   tree targs;
11798   tree tparms;
11799   int parm_depth;
11800
11801   tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
11802   targs = DECL_TI_ARGS (decl);
11803   tparms = DECL_TEMPLATE_PARMS (tmpl);
11804   parm_depth = TMPL_PARMS_DEPTH (tparms);
11805
11806   /* There should be as many levels of arguments as there are levels
11807      of parameters.  */
11808   gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
11809
11810   fn_type = TREE_TYPE (tmpl);
11811
11812   if (parm_depth == 1)
11813     /* No substitution is necessary.  */
11814     ;
11815   else
11816     {
11817       int i, save_access_control;
11818       tree partial_args;
11819
11820       /* Replace the innermost level of the TARGS with NULL_TREEs to
11821          let tsubst know not to substitute for those parameters.  */
11822       partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
11823       for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
11824         SET_TMPL_ARGS_LEVEL (partial_args, i,
11825                              TMPL_ARGS_LEVEL (targs, i));
11826       SET_TMPL_ARGS_LEVEL (partial_args,
11827                            TMPL_ARGS_DEPTH (targs),
11828                            make_tree_vec (DECL_NTPARMS (tmpl)));
11829
11830       /* Disable access control as this function is used only during
11831          name-mangling.  */
11832       save_access_control = flag_access_control;
11833       flag_access_control = 0;
11834
11835       ++processing_template_decl;
11836       /* Now, do the (partial) substitution to figure out the
11837          appropriate function type.  */
11838       fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
11839       --processing_template_decl;
11840
11841       /* Substitute into the template parameters to obtain the real
11842          innermost set of parameters.  This step is important if the
11843          innermost set of template parameters contains value
11844          parameters whose types depend on outer template parameters.  */
11845       TREE_VEC_LENGTH (partial_args)--;
11846       tparms = tsubst_template_parms (tparms, partial_args, tf_error);
11847
11848       flag_access_control = save_access_control;
11849     }
11850
11851   return fn_type;
11852 }
11853
11854 /* Return truthvalue if we're processing a template different from
11855    the last one involved in diagnostics.  */
11856 int
11857 problematic_instantiation_changed (void)
11858 {
11859   return last_template_error_tick != tinst_level_tick;
11860 }
11861
11862 /* Remember current template involved in diagnostics.  */
11863 void
11864 record_last_problematic_instantiation (void)
11865 {
11866   last_template_error_tick = tinst_level_tick;
11867 }
11868
11869 tree
11870 current_instantiation (void)
11871 {
11872   return current_tinst_level;
11873 }
11874
11875 /* [temp.param] Check that template non-type parm TYPE is of an allowable
11876    type. Return zero for ok, nonzero for disallowed. Issue error and
11877    warning messages under control of COMPLAIN.  */
11878
11879 static int
11880 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
11881 {
11882   if (INTEGRAL_TYPE_P (type))
11883     return 0;
11884   else if (POINTER_TYPE_P (type))
11885     return 0;
11886   else if (TYPE_PTR_TO_MEMBER_P (type))
11887     return 0;
11888   else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
11889     return 0;
11890   else if (TREE_CODE (type) == TYPENAME_TYPE)
11891     return 0;
11892
11893   if (complain & tf_error)
11894     error ("%q#T is not a valid type for a template constant parameter", type);
11895   return 1;
11896 }
11897
11898 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
11899    Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
11900
11901 static bool
11902 dependent_type_p_r (tree type)
11903 {
11904   tree scope;
11905
11906   /* [temp.dep.type]
11907
11908      A type is dependent if it is:
11909
11910      -- a template parameter. Template template parameters are types
11911         for us (since TYPE_P holds true for them) so we handle
11912         them here.  */
11913   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
11914       || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
11915     return true;
11916   /* -- a qualified-id with a nested-name-specifier which contains a
11917         class-name that names a dependent type or whose unqualified-id
11918         names a dependent type.  */
11919   if (TREE_CODE (type) == TYPENAME_TYPE)
11920     return true;
11921   /* -- a cv-qualified type where the cv-unqualified type is
11922         dependent.  */
11923   type = TYPE_MAIN_VARIANT (type);
11924   /* -- a compound type constructed from any dependent type.  */
11925   if (TYPE_PTR_TO_MEMBER_P (type))
11926     return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
11927             || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
11928                                            (type)));
11929   else if (TREE_CODE (type) == POINTER_TYPE
11930            || TREE_CODE (type) == REFERENCE_TYPE)
11931     return dependent_type_p (TREE_TYPE (type));
11932   else if (TREE_CODE (type) == FUNCTION_TYPE
11933            || TREE_CODE (type) == METHOD_TYPE)
11934     {
11935       tree arg_type;
11936
11937       if (dependent_type_p (TREE_TYPE (type)))
11938         return true;
11939       for (arg_type = TYPE_ARG_TYPES (type);
11940            arg_type;
11941            arg_type = TREE_CHAIN (arg_type))
11942         if (dependent_type_p (TREE_VALUE (arg_type)))
11943           return true;
11944       return false;
11945     }
11946   /* -- an array type constructed from any dependent type or whose
11947         size is specified by a constant expression that is
11948         value-dependent.  */
11949   if (TREE_CODE (type) == ARRAY_TYPE)
11950     {
11951       if (TYPE_DOMAIN (type)
11952           && ((value_dependent_expression_p
11953                (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
11954               || (type_dependent_expression_p
11955                   (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))))
11956         return true;
11957       return dependent_type_p (TREE_TYPE (type));
11958     }
11959
11960   /* -- a template-id in which either the template name is a template
11961      parameter ...  */
11962   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
11963     return true;
11964   /* ... or any of the template arguments is a dependent type or
11965         an expression that is type-dependent or value-dependent.  */
11966   else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
11967            && (any_dependent_template_arguments_p
11968                (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
11969     return true;
11970
11971   /* All TYPEOF_TYPEs are dependent; if the argument of the `typeof'
11972      expression is not type-dependent, then it should already been
11973      have resolved.  */
11974   if (TREE_CODE (type) == TYPEOF_TYPE)
11975     return true;
11976
11977   /* The standard does not specifically mention types that are local
11978      to template functions or local classes, but they should be
11979      considered dependent too.  For example:
11980
11981        template <int I> void f() {
11982          enum E { a = I };
11983          S<sizeof (E)> s;
11984        }
11985
11986      The size of `E' cannot be known until the value of `I' has been
11987      determined.  Therefore, `E' must be considered dependent.  */
11988   scope = TYPE_CONTEXT (type);
11989   if (scope && TYPE_P (scope))
11990     return dependent_type_p (scope);
11991   else if (scope && TREE_CODE (scope) == FUNCTION_DECL)
11992     return type_dependent_expression_p (scope);
11993
11994   /* Other types are non-dependent.  */
11995   return false;
11996 }
11997
11998 /* Returns TRUE if TYPE is dependent, in the sense of
11999    [temp.dep.type].  */
12000
12001 bool
12002 dependent_type_p (tree type)
12003 {
12004   /* If there are no template parameters in scope, then there can't be
12005      any dependent types.  */
12006   if (!processing_template_decl)
12007     return false;
12008
12009   /* If the type is NULL, we have not computed a type for the entity
12010      in question; in that case, the type is dependent.  */
12011   if (!type)
12012     return true;
12013
12014   /* Erroneous types can be considered non-dependent.  */
12015   if (type == error_mark_node)
12016     return false;
12017
12018   /* If we have not already computed the appropriate value for TYPE,
12019      do so now.  */
12020   if (!TYPE_DEPENDENT_P_VALID (type))
12021     {
12022       TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
12023       TYPE_DEPENDENT_P_VALID (type) = 1;
12024     }
12025
12026   return TYPE_DEPENDENT_P (type);
12027 }
12028
12029 /* Returns TRUE if EXPRESSION is dependent, according to CRITERION.  */
12030
12031 static bool
12032 dependent_scope_ref_p (tree expression, bool criterion (tree))
12033 {
12034   tree scope;
12035   tree name;
12036
12037   gcc_assert (TREE_CODE (expression) == SCOPE_REF);
12038
12039   if (!TYPE_P (TREE_OPERAND (expression, 0)))
12040     return true;
12041
12042   scope = TREE_OPERAND (expression, 0);
12043   name = TREE_OPERAND (expression, 1);
12044
12045   /* [temp.dep.expr]
12046
12047      An id-expression is type-dependent if it contains a
12048      nested-name-specifier that contains a class-name that names a
12049      dependent type.  */
12050   /* The suggested resolution to Core Issue 2 implies that if the
12051      qualifying type is the current class, then we must peek
12052      inside it.  */
12053   if (DECL_P (name)
12054       && currently_open_class (scope)
12055       && !criterion (name))
12056     return false;
12057   if (dependent_type_p (scope))
12058     return true;
12059
12060   return false;
12061 }
12062
12063 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
12064    [temp.dep.constexpr] */
12065
12066 bool
12067 value_dependent_expression_p (tree expression)
12068 {
12069   if (!processing_template_decl)
12070     return false;
12071
12072   /* A name declared with a dependent type.  */
12073   if (DECL_P (expression) && type_dependent_expression_p (expression))
12074     return true;
12075
12076   switch (TREE_CODE (expression))
12077     {
12078     case IDENTIFIER_NODE:
12079       /* A name that has not been looked up -- must be dependent.  */
12080       return true;
12081
12082     case TEMPLATE_PARM_INDEX:
12083       /* A non-type template parm.  */
12084       return true;
12085
12086     case CONST_DECL:
12087       /* A non-type template parm.  */
12088       if (DECL_TEMPLATE_PARM_P (expression))
12089         return true;
12090       return false;
12091
12092     case VAR_DECL:
12093        /* A constant with integral or enumeration type and is initialized
12094           with an expression that is value-dependent.  */
12095       if (DECL_INITIAL (expression)
12096           && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (expression))
12097           && value_dependent_expression_p (DECL_INITIAL (expression)))
12098         return true;
12099       return false;
12100
12101     case DYNAMIC_CAST_EXPR:
12102     case STATIC_CAST_EXPR:
12103     case CONST_CAST_EXPR:
12104     case REINTERPRET_CAST_EXPR:
12105     case CAST_EXPR:
12106       /* These expressions are value-dependent if the type to which
12107          the cast occurs is dependent or the expression being casted
12108          is value-dependent.  */
12109       {
12110         tree type = TREE_TYPE (expression);
12111
12112         if (dependent_type_p (type))
12113           return true;
12114
12115         /* A functional cast has a list of operands.  */
12116         expression = TREE_OPERAND (expression, 0);
12117         if (!expression)
12118           {
12119             /* If there are no operands, it must be an expression such
12120                as "int()". This should not happen for aggregate types
12121                because it would form non-constant expressions.  */
12122             gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type));
12123
12124             return false;
12125           }
12126
12127         if (TREE_CODE (expression) == TREE_LIST)
12128           {
12129             for (; expression; expression = TREE_CHAIN (expression))
12130               if (value_dependent_expression_p (TREE_VALUE (expression)))
12131                 return true;
12132             return false;
12133           }
12134
12135         return value_dependent_expression_p (expression);
12136       }
12137
12138     case SIZEOF_EXPR:
12139     case ALIGNOF_EXPR:
12140       /* A `sizeof' expression is value-dependent if the operand is
12141          type-dependent.  */
12142       expression = TREE_OPERAND (expression, 0);
12143       if (TYPE_P (expression))
12144         return dependent_type_p (expression);
12145       return type_dependent_expression_p (expression);
12146
12147     case SCOPE_REF:
12148       return dependent_scope_ref_p (expression, value_dependent_expression_p);
12149
12150     case COMPONENT_REF:
12151       return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
12152               || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
12153
12154     case CALL_EXPR:
12155       /* A CALL_EXPR is value-dependent if any argument is
12156          value-dependent.  Why do we have to handle CALL_EXPRs in this
12157          function at all?  First, some function calls, those for which
12158          value_dependent_expression_p is true, man appear in constant
12159          expressions.  Second, there appear to be bugs which result in
12160          other CALL_EXPRs reaching this point. */
12161       {
12162         tree function = TREE_OPERAND (expression, 0);
12163         tree args = TREE_OPERAND (expression, 1);
12164
12165         if (value_dependent_expression_p (function))
12166           return true;
12167
12168         if (! args)
12169           return false;
12170
12171         if (TREE_CODE (args) == TREE_LIST)
12172           {
12173             for (; args; args = TREE_CHAIN (args))
12174               if (value_dependent_expression_p (TREE_VALUE (args)))
12175                 return true;
12176             return false;
12177           }
12178
12179         return value_dependent_expression_p (args);
12180       }
12181
12182     default:
12183       /* A constant expression is value-dependent if any subexpression is
12184          value-dependent.  */
12185       switch (TREE_CODE_CLASS (TREE_CODE (expression)))
12186         {
12187         case tcc_reference:
12188         case tcc_unary:
12189           return (value_dependent_expression_p
12190                   (TREE_OPERAND (expression, 0)));
12191
12192         case tcc_comparison:
12193         case tcc_binary:
12194           return ((value_dependent_expression_p
12195                    (TREE_OPERAND (expression, 0)))
12196                   || (value_dependent_expression_p
12197                       (TREE_OPERAND (expression, 1))));
12198
12199         case tcc_expression:
12200           {
12201             int i;
12202             for (i = 0; i < TREE_CODE_LENGTH (TREE_CODE (expression)); ++i)
12203               /* In some cases, some of the operands may be missing.
12204                  (For example, in the case of PREDECREMENT_EXPR, the
12205                  amount to increment by may be missing.)  That doesn't
12206                  make the expression dependent.  */
12207               if (TREE_OPERAND (expression, i)
12208                   && (value_dependent_expression_p
12209                       (TREE_OPERAND (expression, i))))
12210                 return true;
12211             return false;
12212           }
12213
12214         default:
12215           break;
12216         }
12217     }
12218
12219   /* The expression is not value-dependent.  */
12220   return false;
12221 }
12222
12223 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
12224    [temp.dep.expr].  */
12225
12226 bool
12227 type_dependent_expression_p (tree expression)
12228 {
12229   if (!processing_template_decl)
12230     return false;
12231
12232   if (expression == error_mark_node)
12233     return false;
12234
12235   /* An unresolved name is always dependent.  */
12236   if (TREE_CODE (expression) == IDENTIFIER_NODE)
12237     return true;
12238
12239   /* Some expression forms are never type-dependent.  */
12240   if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
12241       || TREE_CODE (expression) == SIZEOF_EXPR
12242       || TREE_CODE (expression) == ALIGNOF_EXPR
12243       || TREE_CODE (expression) == TYPEID_EXPR
12244       || TREE_CODE (expression) == DELETE_EXPR
12245       || TREE_CODE (expression) == VEC_DELETE_EXPR
12246       || TREE_CODE (expression) == THROW_EXPR)
12247     return false;
12248
12249   /* The types of these expressions depends only on the type to which
12250      the cast occurs.  */
12251   if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
12252       || TREE_CODE (expression) == STATIC_CAST_EXPR
12253       || TREE_CODE (expression) == CONST_CAST_EXPR
12254       || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
12255       || TREE_CODE (expression) == CAST_EXPR)
12256     return dependent_type_p (TREE_TYPE (expression));
12257
12258   /* The types of these expressions depends only on the type created
12259      by the expression.  */
12260   if (TREE_CODE (expression) == NEW_EXPR
12261       || TREE_CODE (expression) == VEC_NEW_EXPR)
12262     {
12263       /* For NEW_EXPR tree nodes created inside a template, either
12264          the object type itself or a TREE_LIST may appear as the
12265          operand 1.  */
12266       tree type = TREE_OPERAND (expression, 1);
12267       if (TREE_CODE (type) == TREE_LIST)
12268         /* This is an array type.  We need to check array dimensions
12269            as well.  */
12270         return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
12271                || value_dependent_expression_p
12272                     (TREE_OPERAND (TREE_VALUE (type), 1));
12273       else
12274         return dependent_type_p (type);
12275     }
12276
12277   if (TREE_CODE (expression) == SCOPE_REF
12278       && dependent_scope_ref_p (expression,
12279                                 type_dependent_expression_p))
12280     return true;
12281
12282   if (TREE_CODE (expression) == FUNCTION_DECL
12283       && DECL_LANG_SPECIFIC (expression)
12284       && DECL_TEMPLATE_INFO (expression)
12285       && (any_dependent_template_arguments_p
12286           (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
12287     return true;
12288
12289   if (TREE_CODE (expression) == TEMPLATE_DECL
12290       && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
12291     return false;
12292
12293   if (TREE_TYPE (expression) == unknown_type_node)
12294     {
12295       if (TREE_CODE (expression) == ADDR_EXPR)
12296         return type_dependent_expression_p (TREE_OPERAND (expression, 0));
12297       if (TREE_CODE (expression) == COMPONENT_REF
12298           || TREE_CODE (expression) == OFFSET_REF)
12299         {
12300           if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
12301             return true;
12302           expression = TREE_OPERAND (expression, 1);
12303           if (TREE_CODE (expression) == IDENTIFIER_NODE)
12304             return false;
12305         }
12306       /* SCOPE_REF with non-null TREE_TYPE is always non-dependent.  */
12307       if (TREE_CODE (expression) == SCOPE_REF)
12308         return false;
12309
12310       if (TREE_CODE (expression) == BASELINK)
12311         expression = BASELINK_FUNCTIONS (expression);
12312
12313       if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
12314         {
12315           if (any_dependent_template_arguments_p
12316               (TREE_OPERAND (expression, 1)))
12317             return true;
12318           expression = TREE_OPERAND (expression, 0);
12319         }
12320       gcc_assert (TREE_CODE (expression) == OVERLOAD);
12321
12322       while (expression)
12323         {
12324           if (type_dependent_expression_p (OVL_CURRENT (expression)))
12325             return true;
12326           expression = OVL_NEXT (expression);
12327         }
12328       return false;
12329     }
12330
12331   return (dependent_type_p (TREE_TYPE (expression)));
12332 }
12333
12334 /* Returns TRUE if ARGS (a TREE_LIST of arguments to a function call)
12335    contains a type-dependent expression.  */
12336
12337 bool
12338 any_type_dependent_arguments_p (tree args)
12339 {
12340   while (args)
12341     {
12342       tree arg = TREE_VALUE (args);
12343
12344       if (type_dependent_expression_p (arg))
12345         return true;
12346       args = TREE_CHAIN (args);
12347     }
12348   return false;
12349 }
12350
12351 /* Returns TRUE if the ARG (a template argument) is dependent.  */
12352
12353 static bool
12354 dependent_template_arg_p (tree arg)
12355 {
12356   if (!processing_template_decl)
12357     return false;
12358
12359   if (TREE_CODE (arg) == TEMPLATE_DECL
12360       || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
12361     return dependent_template_p (arg);
12362   else if (TYPE_P (arg))
12363     return dependent_type_p (arg);
12364   else
12365     return (type_dependent_expression_p (arg)
12366             || value_dependent_expression_p (arg));
12367 }
12368
12369 /* Returns true if ARGS (a collection of template arguments) contains
12370    any dependent arguments.  */
12371
12372 bool
12373 any_dependent_template_arguments_p (tree args)
12374 {
12375   int i;
12376   int j;
12377
12378   if (!args)
12379     return false;
12380
12381   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
12382     {
12383       tree level = TMPL_ARGS_LEVEL (args, i + 1);
12384       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
12385         if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
12386           return true;
12387     }
12388
12389   return false;
12390 }
12391
12392 /* Returns TRUE if the template TMPL is dependent.  */
12393
12394 bool
12395 dependent_template_p (tree tmpl)
12396 {
12397   if (TREE_CODE (tmpl) == OVERLOAD)
12398     {
12399       while (tmpl)
12400         {
12401           if (dependent_template_p (OVL_FUNCTION (tmpl)))
12402             return true;
12403           tmpl = OVL_CHAIN (tmpl);
12404         }
12405       return false;
12406     }
12407
12408   /* Template template parameters are dependent.  */
12409   if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
12410       || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
12411     return true;
12412   /* So are names that have not been looked up.  */
12413   if (TREE_CODE (tmpl) == SCOPE_REF
12414       || TREE_CODE (tmpl) == IDENTIFIER_NODE)
12415     return true;
12416   /* So are member templates of dependent classes.  */
12417   if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
12418     return dependent_type_p (DECL_CONTEXT (tmpl));
12419   return false;
12420 }
12421
12422 /* Returns TRUE if the specialization TMPL<ARGS> is dependent.  */
12423
12424 bool
12425 dependent_template_id_p (tree tmpl, tree args)
12426 {
12427   return (dependent_template_p (tmpl)
12428           || any_dependent_template_arguments_p (args));
12429 }
12430
12431 /* TYPE is a TYPENAME_TYPE.  Returns the ordinary TYPE to which the
12432    TYPENAME_TYPE corresponds.  Returns ERROR_MARK_NODE if no such TYPE
12433    can be found.  Note that this function peers inside uninstantiated
12434    templates and therefore should be used only in extremely limited
12435    situations.  ONLY_CURRENT_P restricts this peering to the currently
12436    open classes hierarchy (which is required when comparing types).  */
12437
12438 tree
12439 resolve_typename_type (tree type, bool only_current_p)
12440 {
12441   tree scope;
12442   tree name;
12443   tree decl;
12444   int quals;
12445   tree pushed_scope;
12446
12447   gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
12448
12449   scope = TYPE_CONTEXT (type);
12450   name = TYPE_IDENTIFIER (type);
12451
12452   /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
12453      it first before we can figure out what NAME refers to.  */
12454   if (TREE_CODE (scope) == TYPENAME_TYPE)
12455     scope = resolve_typename_type (scope, only_current_p);
12456   /* If we don't know what SCOPE refers to, then we cannot resolve the
12457      TYPENAME_TYPE.  */
12458   if (scope == error_mark_node || TREE_CODE (scope) == TYPENAME_TYPE)
12459     return error_mark_node;
12460   /* If the SCOPE is a template type parameter, we have no way of
12461      resolving the name.  */
12462   if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
12463     return type;
12464   /* If the SCOPE is not the current instantiation, there's no reason
12465      to look inside it.  */
12466   if (only_current_p && !currently_open_class (scope))
12467     return error_mark_node;
12468   /* If SCOPE is a partial instantiation, it will not have a valid
12469      TYPE_FIELDS list, so use the original template.  */
12470   scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
12471   /* Enter the SCOPE so that name lookup will be resolved as if we
12472      were in the class definition.  In particular, SCOPE will no
12473      longer be considered a dependent type.  */
12474   pushed_scope = push_scope (scope);
12475   /* Look up the declaration.  */
12476   decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true);
12477   /* Obtain the set of qualifiers applied to the TYPE.  */
12478   quals = cp_type_quals (type);
12479   /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
12480      find a TEMPLATE_DECL.  Otherwise, we want to find a TYPE_DECL.  */
12481   if (!decl)
12482     type = error_mark_node;
12483   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
12484            && TREE_CODE (decl) == TYPE_DECL)
12485     type = TREE_TYPE (decl);
12486   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
12487            && DECL_CLASS_TEMPLATE_P (decl))
12488     {
12489       tree tmpl;
12490       tree args;
12491       /* Obtain the template and the arguments.  */
12492       tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
12493       args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
12494       /* Instantiate the template.  */
12495       type = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
12496                                     /*entering_scope=*/0, tf_error | tf_user);
12497     }
12498   else
12499     type = error_mark_node;
12500   /* Qualify the resulting type.  */
12501   if (type != error_mark_node && quals)
12502     type = cp_build_qualified_type (type, quals);
12503   /* Leave the SCOPE.  */
12504   if (pushed_scope)
12505     pop_scope (pushed_scope);
12506
12507   return type;
12508 }
12509
12510 /* EXPR is an expression which is not type-dependent.  Return a proxy
12511    for EXPR that can be used to compute the types of larger
12512    expressions containing EXPR.  */
12513
12514 tree
12515 build_non_dependent_expr (tree expr)
12516 {
12517   tree inner_expr;
12518
12519   /* Preserve null pointer constants so that the type of things like
12520      "p == 0" where "p" is a pointer can be determined.  */
12521   if (null_ptr_cst_p (expr))
12522     return expr;
12523   /* Preserve OVERLOADs; the functions must be available to resolve
12524      types.  */
12525   inner_expr = (TREE_CODE (expr) == ADDR_EXPR ?
12526                 TREE_OPERAND (expr, 0) : expr);
12527   if (is_overloaded_fn (inner_expr)
12528       || TREE_CODE (inner_expr) == OFFSET_REF)
12529     return expr;
12530   /* There is no need to return a proxy for a variable.  */
12531   if (TREE_CODE (expr) == VAR_DECL)
12532     return expr;
12533   /* Preserve string constants; conversions from string constants to
12534      "char *" are allowed, even though normally a "const char *"
12535      cannot be used to initialize a "char *".  */
12536   if (TREE_CODE (expr) == STRING_CST)
12537     return expr;
12538   /* Preserve arithmetic constants, as an optimization -- there is no
12539      reason to create a new node.  */
12540   if (TREE_CODE (expr) == INTEGER_CST || TREE_CODE (expr) == REAL_CST)
12541     return expr;
12542   /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
12543      There is at least one place where we want to know that a
12544      particular expression is a throw-expression: when checking a ?:
12545      expression, there are special rules if the second or third
12546      argument is a throw-expression.  */
12547   if (TREE_CODE (expr) == THROW_EXPR)
12548     return expr;
12549
12550   if (TREE_CODE (expr) == COND_EXPR)
12551     return build3 (COND_EXPR,
12552                    TREE_TYPE (expr),
12553                    TREE_OPERAND (expr, 0),
12554                    (TREE_OPERAND (expr, 1)
12555                     ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
12556                     : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
12557                    build_non_dependent_expr (TREE_OPERAND (expr, 2)));
12558   if (TREE_CODE (expr) == COMPOUND_EXPR
12559       && !COMPOUND_EXPR_OVERLOADED (expr))
12560     return build2 (COMPOUND_EXPR,
12561                    TREE_TYPE (expr),
12562                    TREE_OPERAND (expr, 0),
12563                    build_non_dependent_expr (TREE_OPERAND (expr, 1)));
12564
12565   /* Otherwise, build a NON_DEPENDENT_EXPR.
12566
12567      REFERENCE_TYPEs are not stripped for expressions in templates
12568      because doing so would play havoc with mangling.  Consider, for
12569      example:
12570
12571        template <typename T> void f<T& g>() { g(); }
12572
12573      In the body of "f", the expression for "g" will have
12574      REFERENCE_TYPE, even though the standard says that it should
12575      not.  The reason is that we must preserve the syntactic form of
12576      the expression so that mangling (say) "f<g>" inside the body of
12577      "f" works out correctly.  Therefore, the REFERENCE_TYPE is
12578      stripped here.  */
12579   return build1 (NON_DEPENDENT_EXPR, non_reference (TREE_TYPE (expr)), expr);
12580 }
12581
12582 /* ARGS is a TREE_LIST of expressions as arguments to a function call.
12583    Return a new TREE_LIST with the various arguments replaced with
12584    equivalent non-dependent expressions.  */
12585
12586 tree
12587 build_non_dependent_args (tree args)
12588 {
12589   tree a;
12590   tree new_args;
12591
12592   new_args = NULL_TREE;
12593   for (a = args; a; a = TREE_CHAIN (a))
12594     new_args = tree_cons (NULL_TREE,
12595                           build_non_dependent_expr (TREE_VALUE (a)),
12596                           new_args);
12597   return nreverse (new_args);
12598 }
12599
12600 #include "gt-cp-pt.h"