OSDN Git Service

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