OSDN Git Service

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