OSDN Git Service

2006-09-04 Paolo Carlini <pcarlini@suse.de>
[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 if (TREE_CODE (member) == BIT_NOT_EXPR
9204                  && !TYPE_P (TREE_OPERAND (member, 0)))
9205           {
9206             tree id = TREE_OPERAND (member, 0);
9207             id = make_typename_type (object_type, id, typename_type, complain);
9208             gcc_assert (TREE_CODE (id) != TYPENAME_TYPE);
9209             member = build_nt (BIT_NOT_EXPR, id);
9210           }
9211         else
9212           member = tsubst_copy (member, args, complain, in_decl);
9213         if (member == error_mark_node)
9214           return error_mark_node;
9215
9216         if (object_type && !CLASS_TYPE_P (object_type))
9217           {
9218             if (TREE_CODE (member) == BIT_NOT_EXPR)
9219               return finish_pseudo_destructor_expr (object,
9220                                                     NULL_TREE,
9221                                                     object_type);
9222             else if (TREE_CODE (member) == SCOPE_REF
9223                      && (TREE_CODE (TREE_OPERAND (member, 1)) == BIT_NOT_EXPR))
9224               return finish_pseudo_destructor_expr (object,
9225                                                     object,
9226                                                     object_type);
9227           }
9228         else if (TREE_CODE (member) == SCOPE_REF
9229                  && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
9230           {
9231             tree tmpl;
9232             tree args;
9233
9234             /* Lookup the template functions now that we know what the
9235                scope is.  */
9236             tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
9237             args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
9238             member = lookup_qualified_name (TREE_OPERAND (member, 0), tmpl,
9239                                             /*is_type_p=*/false,
9240                                             /*complain=*/false);
9241             if (BASELINK_P (member))
9242               {
9243                 BASELINK_FUNCTIONS (member)
9244                   = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
9245                               args);
9246                 member = (adjust_result_of_qualified_name_lookup
9247                           (member, BINFO_TYPE (BASELINK_BINFO (member)),
9248                            object_type));
9249               }
9250             else
9251               {
9252                 qualified_name_lookup_error (object_type, tmpl, member);
9253                 return error_mark_node;
9254               }
9255           }
9256         else if (TREE_CODE (member) == SCOPE_REF
9257                  && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
9258                  && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
9259           {
9260             if (complain & tf_error)
9261               {
9262                 if (TYPE_P (TREE_OPERAND (member, 0)))
9263                   error ("%qT is not a class or namespace",
9264                          TREE_OPERAND (member, 0));
9265                 else
9266                   error ("%qD is not a class or namespace",
9267                          TREE_OPERAND (member, 0));
9268               }
9269             return error_mark_node;
9270           }
9271         else if (TREE_CODE (member) == FIELD_DECL)
9272           return finish_non_static_data_member (member, object, NULL_TREE);
9273
9274         return finish_class_member_access_expr (object, member,
9275                                                 /*template_p=*/false);
9276       }
9277
9278     case THROW_EXPR:
9279       return build_throw
9280         (RECUR (TREE_OPERAND (t, 0)));
9281
9282     case CONSTRUCTOR:
9283       {
9284         VEC(constructor_elt,gc) *n;
9285         constructor_elt *ce;
9286         unsigned HOST_WIDE_INT idx;
9287         tree r;
9288         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9289         bool process_index_p;
9290
9291         if (type == error_mark_node)
9292           return error_mark_node;
9293
9294         /* digest_init will do the wrong thing if we let it.  */
9295         if (type && TYPE_PTRMEMFUNC_P (type))
9296           return t;
9297
9298         /* We do not want to process the index of aggregate
9299            initializers as they are identifier nodes which will be
9300            looked up by digest_init.  */
9301         process_index_p = !(type && IS_AGGR_TYPE (type));
9302
9303         n = VEC_copy (constructor_elt, gc, CONSTRUCTOR_ELTS (t));
9304         for (idx = 0; VEC_iterate (constructor_elt, n, idx, ce); idx++)
9305           {
9306             if (ce->index && process_index_p)
9307               ce->index = RECUR (ce->index);
9308             ce->value = RECUR (ce->value);
9309           }
9310
9311         r = build_constructor (NULL_TREE, n);
9312         TREE_HAS_CONSTRUCTOR (r) = TREE_HAS_CONSTRUCTOR (t);
9313
9314         if (type)
9315           return digest_init (type, r);
9316         return r;
9317       }
9318
9319     case TYPEID_EXPR:
9320       {
9321         tree operand_0 = RECUR (TREE_OPERAND (t, 0));
9322         if (TYPE_P (operand_0))
9323           return get_typeid (operand_0);
9324         return build_typeid (operand_0);
9325       }
9326
9327     case VAR_DECL:
9328       if (!args)
9329         return t;
9330       /* Fall through */
9331
9332     case PARM_DECL:
9333       {
9334         tree r = tsubst_copy (t, args, complain, in_decl);
9335
9336         if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
9337           /* If the original type was a reference, we'll be wrapped in
9338              the appropriate INDIRECT_REF.  */
9339           r = convert_from_reference (r);
9340         return r;
9341       }
9342
9343     case VA_ARG_EXPR:
9344       return build_x_va_arg (RECUR (TREE_OPERAND (t, 0)),
9345                              tsubst_copy (TREE_TYPE (t), args, complain,
9346                                           in_decl));
9347
9348     case OFFSETOF_EXPR:
9349       return finish_offsetof (RECUR (TREE_OPERAND (t, 0)));
9350
9351     case STMT_EXPR:
9352       {
9353         tree old_stmt_expr = cur_stmt_expr;
9354         tree stmt_expr = begin_stmt_expr ();
9355
9356         cur_stmt_expr = stmt_expr;
9357         tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl,
9358                      integral_constant_expression_p);
9359         stmt_expr = finish_stmt_expr (stmt_expr, false);
9360         cur_stmt_expr = old_stmt_expr;
9361
9362         return stmt_expr;
9363       }
9364
9365     case CONST_DECL:
9366       t = tsubst_copy (t, args, complain, in_decl);
9367       /* As in finish_id_expression, we resolve enumeration constants
9368          to their underlying values.  */
9369       if (TREE_CODE (t) == CONST_DECL)
9370         {
9371           used_types_insert (TREE_TYPE (t));
9372           return DECL_INITIAL (t);
9373         }
9374       return t;
9375
9376     default:
9377       /* Handle Objective-C++ constructs, if appropriate.  */
9378       {
9379         tree subst
9380           = objcp_tsubst_copy_and_build (t, args, complain,
9381                                          in_decl, /*function_p=*/false);
9382         if (subst)
9383           return subst;
9384       }
9385       return tsubst_copy (t, args, complain, in_decl);
9386     }
9387
9388 #undef RECUR
9389 }
9390
9391 /* Verify that the instantiated ARGS are valid. For type arguments,
9392    make sure that the type's linkage is ok. For non-type arguments,
9393    make sure they are constants if they are integral or enumerations.
9394    Emit an error under control of COMPLAIN, and return TRUE on error.  */
9395
9396 static bool
9397 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
9398 {
9399   int ix, len = DECL_NTPARMS (tmpl);
9400   bool result = false;
9401
9402   for (ix = 0; ix != len; ix++)
9403     {
9404       tree t = TREE_VEC_ELT (args, ix);
9405
9406       if (TYPE_P (t))
9407         {
9408           /* [basic.link]: A name with no linkage (notably, the name
9409              of a class or enumeration declared in a local scope)
9410              shall not be used to declare an entity with linkage.
9411              This implies that names with no linkage cannot be used as
9412              template arguments.  */
9413           tree nt = no_linkage_check (t, /*relaxed_p=*/false);
9414
9415           if (nt)
9416             {
9417               /* DR 488 makes use of a type with no linkage cause
9418                  type deduction to fail.  */
9419               if (complain & tf_error)
9420                 {
9421                   if (TYPE_ANONYMOUS_P (nt))
9422                     error ("%qT is/uses anonymous type", t);
9423                   else
9424                     error ("template argument for %qD uses local type %qT",
9425                            tmpl, t);
9426                 }
9427               result = true;
9428             }
9429           /* In order to avoid all sorts of complications, we do not
9430              allow variably-modified types as template arguments.  */
9431           else if (variably_modified_type_p (t, NULL_TREE))
9432             {
9433               if (complain & tf_error)
9434                 error ("%qT is a variably modified type", t);
9435               result = true;
9436             }
9437         }
9438       /* A non-type argument of integral or enumerated type must be a
9439          constant.  */
9440       else if (TREE_TYPE (t)
9441                && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
9442                && !TREE_CONSTANT (t))
9443         {
9444           if (complain & tf_error)
9445             error ("integral expression %qE is not constant", t);
9446           result = true;
9447         }
9448     }
9449   if (result && (complain & tf_error))
9450     error ("  trying to instantiate %qD", tmpl);
9451   return result;
9452 }
9453
9454 /* Instantiate the indicated variable or function template TMPL with
9455    the template arguments in TARG_PTR.  */
9456
9457 tree
9458 instantiate_template (tree tmpl, tree targ_ptr, tsubst_flags_t complain)
9459 {
9460   tree fndecl;
9461   tree gen_tmpl;
9462   tree spec;
9463   HOST_WIDE_INT saved_processing_template_decl;
9464
9465   if (tmpl == error_mark_node)
9466     return error_mark_node;
9467
9468   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
9469
9470   /* If this function is a clone, handle it specially.  */
9471   if (DECL_CLONED_FUNCTION_P (tmpl))
9472     {
9473       tree spec;
9474       tree clone;
9475
9476       spec = instantiate_template (DECL_CLONED_FUNCTION (tmpl), targ_ptr,
9477                                    complain);
9478       if (spec == error_mark_node)
9479         return error_mark_node;
9480
9481       /* Look for the clone.  */
9482       FOR_EACH_CLONE (clone, spec)
9483         if (DECL_NAME (clone) == DECL_NAME (tmpl))
9484           return clone;
9485       /* We should always have found the clone by now.  */
9486       gcc_unreachable ();
9487       return NULL_TREE;
9488     }
9489
9490   /* Check to see if we already have this specialization.  */
9491   spec = retrieve_specialization (tmpl, targ_ptr,
9492                                   /*class_specializations_p=*/false);
9493   if (spec != NULL_TREE)
9494     return spec;
9495
9496   gen_tmpl = most_general_template (tmpl);
9497   if (tmpl != gen_tmpl)
9498     {
9499       /* The TMPL is a partial instantiation.  To get a full set of
9500          arguments we must add the arguments used to perform the
9501          partial instantiation.  */
9502       targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
9503                                               targ_ptr);
9504
9505       /* Check to see if we already have this specialization.  */
9506       spec = retrieve_specialization (gen_tmpl, targ_ptr,
9507                                       /*class_specializations_p=*/false);
9508       if (spec != NULL_TREE)
9509         return spec;
9510     }
9511
9512   if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
9513                                complain))
9514     return error_mark_node;
9515
9516   /* We are building a FUNCTION_DECL, during which the access of its
9517      parameters and return types have to be checked.  However this
9518      FUNCTION_DECL which is the desired context for access checking
9519      is not built yet.  We solve this chicken-and-egg problem by
9520      deferring all checks until we have the FUNCTION_DECL.  */
9521   push_deferring_access_checks (dk_deferred);
9522
9523   /* Although PROCESSING_TEMPLATE_DECL may be true at this point
9524      (because, for example, we have encountered a non-dependent
9525      function call in the body of a template function and must now
9526      determine which of several overloaded functions will be called),
9527      within the instantiation itself we are not processing a
9528      template.  */  
9529   saved_processing_template_decl = processing_template_decl;
9530   processing_template_decl = 0;
9531   /* Substitute template parameters to obtain the specialization.  */
9532   fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
9533                    targ_ptr, complain, gen_tmpl);
9534   processing_template_decl = saved_processing_template_decl;
9535   if (fndecl == error_mark_node)
9536     return error_mark_node;
9537
9538   /* Now we know the specialization, compute access previously
9539      deferred.  */
9540   push_access_scope (fndecl);
9541   perform_deferred_access_checks ();
9542   pop_access_scope (fndecl);
9543   pop_deferring_access_checks ();
9544
9545   /* The DECL_TI_TEMPLATE should always be the immediate parent
9546      template, not the most general template.  */
9547   DECL_TI_TEMPLATE (fndecl) = tmpl;
9548
9549   /* If we've just instantiated the main entry point for a function,
9550      instantiate all the alternate entry points as well.  We do this
9551      by cloning the instantiation of the main entry point, not by
9552      instantiating the template clones.  */
9553   if (TREE_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (TREE_CHAIN (gen_tmpl)))
9554     clone_function_decl (fndecl, /*update_method_vec_p=*/0);
9555
9556   return fndecl;
9557 }
9558
9559 /* The FN is a TEMPLATE_DECL for a function.  The ARGS are the
9560    arguments that are being used when calling it.  TARGS is a vector
9561    into which the deduced template arguments are placed.
9562
9563    Return zero for success, 2 for an incomplete match that doesn't resolve
9564    all the types, and 1 for complete failure.  An error message will be
9565    printed only for an incomplete match.
9566
9567    If FN is a conversion operator, or we are trying to produce a specific
9568    specialization, RETURN_TYPE is the return type desired.
9569
9570    The EXPLICIT_TARGS are explicit template arguments provided via a
9571    template-id.
9572
9573    The parameter STRICT is one of:
9574
9575    DEDUCE_CALL:
9576      We are deducing arguments for a function call, as in
9577      [temp.deduct.call].
9578
9579    DEDUCE_CONV:
9580      We are deducing arguments for a conversion function, as in
9581      [temp.deduct.conv].
9582
9583    DEDUCE_EXACT:
9584      We are deducing arguments when doing an explicit instantiation
9585      as in [temp.explicit], when determining an explicit specialization
9586      as in [temp.expl.spec], or when taking the address of a function
9587      template, as in [temp.deduct.funcaddr].  */
9588
9589 int
9590 fn_type_unification (tree fn,
9591                      tree explicit_targs,
9592                      tree targs,
9593                      tree args,
9594                      tree return_type,
9595                      unification_kind_t strict,
9596                      int flags)
9597 {
9598   tree parms;
9599   tree fntype;
9600   int result;
9601
9602   gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
9603
9604   fntype = TREE_TYPE (fn);
9605   if (explicit_targs)
9606     {
9607       /* [temp.deduct]
9608
9609          The specified template arguments must match the template
9610          parameters in kind (i.e., type, nontype, template), and there
9611          must not be more arguments than there are parameters;
9612          otherwise type deduction fails.
9613
9614          Nontype arguments must match the types of the corresponding
9615          nontype template parameters, or must be convertible to the
9616          types of the corresponding nontype parameters as specified in
9617          _temp.arg.nontype_, otherwise type deduction fails.
9618
9619          All references in the function type of the function template
9620          to the corresponding template parameters are replaced by the
9621          specified template argument values.  If a substitution in a
9622          template parameter or in the function type of the function
9623          template results in an invalid type, type deduction fails.  */
9624       int i;
9625       tree converted_args;
9626       bool incomplete;
9627
9628       if (explicit_targs == error_mark_node)
9629         return 1;
9630
9631       converted_args
9632         = (coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (fn),
9633                                   explicit_targs, NULL_TREE, tf_none,
9634                                   /*require_all_args=*/false,
9635                                   /*use_default_args=*/false));
9636       if (converted_args == error_mark_node)
9637         return 1;
9638
9639       /* Substitute the explicit args into the function type.  This is
9640          necessary so that, for instance, explicitly declared function
9641          arguments can match null pointed constants.  If we were given
9642          an incomplete set of explicit args, we must not do semantic
9643          processing during substitution as we could create partial
9644          instantiations.  */
9645       incomplete = NUM_TMPL_ARGS (explicit_targs) != NUM_TMPL_ARGS (targs);
9646       processing_template_decl += incomplete;
9647       fntype = tsubst (fntype, converted_args, tf_none, NULL_TREE);
9648       processing_template_decl -= incomplete;
9649
9650       if (fntype == error_mark_node)
9651         return 1;
9652
9653       /* Place the explicitly specified arguments in TARGS.  */
9654       for (i = NUM_TMPL_ARGS (converted_args); i--;)
9655         TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
9656     }
9657
9658   parms = TYPE_ARG_TYPES (fntype);
9659   /* Never do unification on the 'this' parameter.  */
9660   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
9661     parms = TREE_CHAIN (parms);
9662
9663   if (return_type)
9664     {
9665       parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
9666       args = tree_cons (NULL_TREE, return_type, args);
9667     }
9668
9669   /* We allow incomplete unification without an error message here
9670      because the standard doesn't seem to explicitly prohibit it.  Our
9671      callers must be ready to deal with unification failures in any
9672      event.  */
9673   result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
9674                                   targs, parms, args, /*subr=*/0,
9675                                   strict, flags);
9676
9677   if (result == 0)
9678     /* All is well so far.  Now, check:
9679
9680        [temp.deduct]
9681
9682        When all template arguments have been deduced, all uses of
9683        template parameters in nondeduced contexts are replaced with
9684        the corresponding deduced argument values.  If the
9685        substitution results in an invalid type, as described above,
9686        type deduction fails.  */
9687     if (tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE)
9688         == error_mark_node)
9689       return 1;
9690
9691   return result;
9692 }
9693
9694 /* Adjust types before performing type deduction, as described in
9695    [temp.deduct.call] and [temp.deduct.conv].  The rules in these two
9696    sections are symmetric.  PARM is the type of a function parameter
9697    or the return type of the conversion function.  ARG is the type of
9698    the argument passed to the call, or the type of the value
9699    initialized with the result of the conversion function.  */
9700
9701 static int
9702 maybe_adjust_types_for_deduction (unification_kind_t strict,
9703                                   tree* parm,
9704                                   tree* arg)
9705 {
9706   int result = 0;
9707
9708   switch (strict)
9709     {
9710     case DEDUCE_CALL:
9711       break;
9712
9713     case DEDUCE_CONV:
9714       {
9715         /* Swap PARM and ARG throughout the remainder of this
9716            function; the handling is precisely symmetric since PARM
9717            will initialize ARG rather than vice versa.  */
9718         tree* temp = parm;
9719         parm = arg;
9720         arg = temp;
9721         break;
9722       }
9723
9724     case DEDUCE_EXACT:
9725       /* There is nothing to do in this case.  */
9726       return 0;
9727
9728     default:
9729       gcc_unreachable ();
9730     }
9731
9732   if (TREE_CODE (*parm) != REFERENCE_TYPE)
9733     {
9734       /* [temp.deduct.call]
9735
9736          If P is not a reference type:
9737
9738          --If A is an array type, the pointer type produced by the
9739          array-to-pointer standard conversion (_conv.array_) is
9740          used in place of A for type deduction; otherwise,
9741
9742          --If A is a function type, the pointer type produced by
9743          the function-to-pointer standard conversion
9744          (_conv.func_) is used in place of A for type deduction;
9745          otherwise,
9746
9747          --If A is a cv-qualified type, the top level
9748          cv-qualifiers of A's type are ignored for type
9749          deduction.  */
9750       if (TREE_CODE (*arg) == ARRAY_TYPE)
9751         *arg = build_pointer_type (TREE_TYPE (*arg));
9752       else if (TREE_CODE (*arg) == FUNCTION_TYPE)
9753         *arg = build_pointer_type (*arg);
9754       else
9755         *arg = TYPE_MAIN_VARIANT (*arg);
9756     }
9757
9758   /* [temp.deduct.call]
9759
9760      If P is a cv-qualified type, the top level cv-qualifiers
9761      of P's type are ignored for type deduction.  If P is a
9762      reference type, the type referred to by P is used for
9763      type deduction.  */
9764   *parm = TYPE_MAIN_VARIANT (*parm);
9765   if (TREE_CODE (*parm) == REFERENCE_TYPE)
9766     {
9767       *parm = TREE_TYPE (*parm);
9768       result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
9769     }
9770
9771   /* DR 322. For conversion deduction, remove a reference type on parm
9772      too (which has been swapped into ARG).  */
9773   if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
9774     *arg = TREE_TYPE (*arg);
9775
9776   return result;
9777 }
9778
9779 /* Most parms like fn_type_unification.
9780
9781    If SUBR is 1, we're being called recursively (to unify the
9782    arguments of a function or method parameter of a function
9783    template). */
9784
9785 static int
9786 type_unification_real (tree tparms,
9787                        tree targs,
9788                        tree xparms,
9789                        tree xargs,
9790                        int subr,
9791                        unification_kind_t strict,
9792                        int flags)
9793 {
9794   tree parm, arg;
9795   int i;
9796   int ntparms = TREE_VEC_LENGTH (tparms);
9797   int sub_strict;
9798   int saw_undeduced = 0;
9799   tree parms, args;
9800
9801   gcc_assert (TREE_CODE (tparms) == TREE_VEC);
9802   gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
9803   gcc_assert (!xargs || TREE_CODE (xargs) == TREE_LIST);
9804   gcc_assert (ntparms > 0);
9805
9806   switch (strict)
9807     {
9808     case DEDUCE_CALL:
9809       sub_strict = (UNIFY_ALLOW_OUTER_LEVEL | UNIFY_ALLOW_MORE_CV_QUAL
9810                     | UNIFY_ALLOW_DERIVED);
9811       break;
9812
9813     case DEDUCE_CONV:
9814       sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
9815       break;
9816
9817     case DEDUCE_EXACT:
9818       sub_strict = UNIFY_ALLOW_NONE;
9819       break;
9820
9821     default:
9822       gcc_unreachable ();
9823     }
9824
9825  again:
9826   parms = xparms;
9827   args = xargs;
9828
9829   while (parms && parms != void_list_node
9830          && args && args != void_list_node)
9831     {
9832       parm = TREE_VALUE (parms);
9833       parms = TREE_CHAIN (parms);
9834       arg = TREE_VALUE (args);
9835       args = TREE_CHAIN (args);
9836
9837       if (arg == error_mark_node)
9838         return 1;
9839       if (arg == unknown_type_node)
9840         /* We can't deduce anything from this, but we might get all the
9841            template args from other function args.  */
9842         continue;
9843
9844       /* Conversions will be performed on a function argument that
9845          corresponds with a function parameter that contains only
9846          non-deducible template parameters and explicitly specified
9847          template parameters.  */
9848       if (!uses_template_parms (parm))
9849         {
9850           tree type;
9851
9852           if (!TYPE_P (arg))
9853             type = TREE_TYPE (arg);
9854           else
9855             type = arg;
9856
9857           if (same_type_p (parm, type))
9858             continue;
9859           if (strict != DEDUCE_EXACT
9860               && can_convert_arg (parm, type, TYPE_P (arg) ? NULL_TREE : arg,
9861                                   flags))
9862             continue;
9863
9864           return 1;
9865         }
9866
9867       if (!TYPE_P (arg))
9868         {
9869           gcc_assert (TREE_TYPE (arg) != NULL_TREE);
9870           if (type_unknown_p (arg))
9871             {
9872               /* [temp.deduct.type] A template-argument can be deduced from
9873                  a pointer to function or pointer to member function
9874                  argument if the set of overloaded functions does not
9875                  contain function templates and at most one of a set of
9876                  overloaded functions provides a unique match.  */
9877
9878               if (resolve_overloaded_unification
9879                   (tparms, targs, parm, arg, strict, sub_strict)
9880                   != 0)
9881                 return 1;
9882               continue;
9883             }
9884           arg = TREE_TYPE (arg);
9885           if (arg == error_mark_node)
9886             return 1;
9887         }
9888
9889       {
9890         int arg_strict = sub_strict;
9891
9892         if (!subr)
9893           arg_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg);
9894
9895         if (unify (tparms, targs, parm, arg, arg_strict))
9896           return 1;
9897       }
9898     }
9899
9900   /* Fail if we've reached the end of the parm list, and more args
9901      are present, and the parm list isn't variadic.  */
9902   if (args && args != void_list_node && parms == void_list_node)
9903     return 1;
9904   /* Fail if parms are left and they don't have default values.  */
9905   if (parms && parms != void_list_node
9906       && TREE_PURPOSE (parms) == NULL_TREE)
9907     return 1;
9908
9909   if (!subr)
9910     for (i = 0; i < ntparms; i++)
9911       if (!TREE_VEC_ELT (targs, i))
9912         {
9913           tree tparm;
9914
9915           if (TREE_VEC_ELT (tparms, i) == error_mark_node)
9916             continue;
9917
9918           tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
9919
9920           /* If this is an undeduced nontype parameter that depends on
9921              a type parameter, try another pass; its type may have been
9922              deduced from a later argument than the one from which
9923              this parameter can be deduced.  */
9924           if (TREE_CODE (tparm) == PARM_DECL
9925               && uses_template_parms (TREE_TYPE (tparm))
9926               && !saw_undeduced++)
9927             goto again;
9928
9929           return 2;
9930         }
9931
9932   return 0;
9933 }
9934
9935 /* Subroutine of type_unification_real.  Args are like the variables at the
9936    call site.  ARG is an overloaded function (or template-id); we try
9937    deducing template args from each of the overloads, and if only one
9938    succeeds, we go with that.  Modifies TARGS and returns 0 on success.  */
9939
9940 static int
9941 resolve_overloaded_unification (tree tparms,
9942                                 tree targs,
9943                                 tree parm,
9944                                 tree arg,
9945                                 unification_kind_t strict,
9946                                 int sub_strict)
9947 {
9948   tree tempargs = copy_node (targs);
9949   int good = 0;
9950   bool addr_p;
9951
9952   if (TREE_CODE (arg) == ADDR_EXPR)
9953     {
9954       arg = TREE_OPERAND (arg, 0);
9955       addr_p = true;
9956     }
9957   else
9958     addr_p = false;
9959
9960   if (TREE_CODE (arg) == COMPONENT_REF)
9961     /* Handle `&x' where `x' is some static or non-static member
9962        function name.  */
9963     arg = TREE_OPERAND (arg, 1);
9964
9965   if (TREE_CODE (arg) == OFFSET_REF)
9966     arg = TREE_OPERAND (arg, 1);
9967
9968   /* Strip baselink information.  */
9969   if (BASELINK_P (arg))
9970     arg = BASELINK_FUNCTIONS (arg);
9971
9972   if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
9973     {
9974       /* If we got some explicit template args, we need to plug them into
9975          the affected templates before we try to unify, in case the
9976          explicit args will completely resolve the templates in question.  */
9977
9978       tree expl_subargs = TREE_OPERAND (arg, 1);
9979       arg = TREE_OPERAND (arg, 0);
9980
9981       for (; arg; arg = OVL_NEXT (arg))
9982         {
9983           tree fn = OVL_CURRENT (arg);
9984           tree subargs, elem;
9985
9986           if (TREE_CODE (fn) != TEMPLATE_DECL)
9987             continue;
9988
9989           subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
9990                                   expl_subargs, /*check_ret=*/false);
9991           if (subargs)
9992             {
9993               elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
9994               good += try_one_overload (tparms, targs, tempargs, parm,
9995                                         elem, strict, sub_strict, addr_p);
9996             }
9997         }
9998     }
9999   else
10000     {
10001       gcc_assert (TREE_CODE (arg) == OVERLOAD
10002                   || TREE_CODE (arg) == FUNCTION_DECL);
10003
10004       for (; arg; arg = OVL_NEXT (arg))
10005         good += try_one_overload (tparms, targs, tempargs, parm,
10006                                   TREE_TYPE (OVL_CURRENT (arg)),
10007                                   strict, sub_strict, addr_p);
10008     }
10009
10010   /* [temp.deduct.type] A template-argument can be deduced from a pointer
10011      to function or pointer to member function argument if the set of
10012      overloaded functions does not contain function templates and at most
10013      one of a set of overloaded functions provides a unique match.
10014
10015      So if we found multiple possibilities, we return success but don't
10016      deduce anything.  */
10017
10018   if (good == 1)
10019     {
10020       int i = TREE_VEC_LENGTH (targs);
10021       for (; i--; )
10022         if (TREE_VEC_ELT (tempargs, i))
10023           TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
10024     }
10025   if (good)
10026     return 0;
10027
10028   return 1;
10029 }
10030
10031 /* Subroutine of resolve_overloaded_unification; does deduction for a single
10032    overload.  Fills TARGS with any deduced arguments, or error_mark_node if
10033    different overloads deduce different arguments for a given parm.
10034    ADDR_P is true if the expression for which deduction is being
10035    performed was of the form "& fn" rather than simply "fn".
10036
10037    Returns 1 on success.  */
10038
10039 static int
10040 try_one_overload (tree tparms,
10041                   tree orig_targs,
10042                   tree targs,
10043                   tree parm,
10044                   tree arg,
10045                   unification_kind_t strict,
10046                   int sub_strict,
10047                   bool addr_p)
10048 {
10049   int nargs;
10050   tree tempargs;
10051   int i;
10052
10053   /* [temp.deduct.type] A template-argument can be deduced from a pointer
10054      to function or pointer to member function argument if the set of
10055      overloaded functions does not contain function templates and at most
10056      one of a set of overloaded functions provides a unique match.
10057
10058      So if this is a template, just return success.  */
10059
10060   if (uses_template_parms (arg))
10061     return 1;
10062
10063   if (TREE_CODE (arg) == METHOD_TYPE)
10064     arg = build_ptrmemfunc_type (build_pointer_type (arg));
10065   else if (addr_p)
10066     arg = build_pointer_type (arg);
10067
10068   sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg);
10069
10070   /* We don't copy orig_targs for this because if we have already deduced
10071      some template args from previous args, unify would complain when we
10072      try to deduce a template parameter for the same argument, even though
10073      there isn't really a conflict.  */
10074   nargs = TREE_VEC_LENGTH (targs);
10075   tempargs = make_tree_vec (nargs);
10076
10077   if (unify (tparms, tempargs, parm, arg, sub_strict) != 0)
10078     return 0;
10079
10080   /* First make sure we didn't deduce anything that conflicts with
10081      explicitly specified args.  */
10082   for (i = nargs; i--; )
10083     {
10084       tree elt = TREE_VEC_ELT (tempargs, i);
10085       tree oldelt = TREE_VEC_ELT (orig_targs, i);
10086
10087       if (!elt)
10088         /*NOP*/;
10089       else if (uses_template_parms (elt))
10090         /* Since we're unifying against ourselves, we will fill in
10091            template args used in the function parm list with our own
10092            template parms.  Discard them.  */
10093         TREE_VEC_ELT (tempargs, i) = NULL_TREE;
10094       else if (oldelt && !template_args_equal (oldelt, elt))
10095         return 0;
10096     }
10097
10098   for (i = nargs; i--; )
10099     {
10100       tree elt = TREE_VEC_ELT (tempargs, i);
10101
10102       if (elt)
10103         TREE_VEC_ELT (targs, i) = elt;
10104     }
10105
10106   return 1;
10107 }
10108
10109 /* PARM is a template class (perhaps with unbound template
10110    parameters).  ARG is a fully instantiated type.  If ARG can be
10111    bound to PARM, return ARG, otherwise return NULL_TREE.  TPARMS and
10112    TARGS are as for unify.  */
10113
10114 static tree
10115 try_class_unification (tree tparms, tree targs, tree parm, tree arg)
10116 {
10117   tree copy_of_targs;
10118
10119   if (!CLASSTYPE_TEMPLATE_INFO (arg)
10120       || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
10121           != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
10122     return NULL_TREE;
10123
10124   /* We need to make a new template argument vector for the call to
10125      unify.  If we used TARGS, we'd clutter it up with the result of
10126      the attempted unification, even if this class didn't work out.
10127      We also don't want to commit ourselves to all the unifications
10128      we've already done, since unification is supposed to be done on
10129      an argument-by-argument basis.  In other words, consider the
10130      following pathological case:
10131
10132        template <int I, int J, int K>
10133        struct S {};
10134
10135        template <int I, int J>
10136        struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
10137
10138        template <int I, int J, int K>
10139        void f(S<I, J, K>, S<I, I, I>);
10140
10141        void g() {
10142          S<0, 0, 0> s0;
10143          S<0, 1, 2> s2;
10144
10145          f(s0, s2);
10146        }
10147
10148      Now, by the time we consider the unification involving `s2', we
10149      already know that we must have `f<0, 0, 0>'.  But, even though
10150      `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
10151      because there are two ways to unify base classes of S<0, 1, 2>
10152      with S<I, I, I>.  If we kept the already deduced knowledge, we
10153      would reject the possibility I=1.  */
10154   copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
10155
10156   /* If unification failed, we're done.  */
10157   if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
10158              CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE))
10159     return NULL_TREE;
10160
10161   return arg;
10162 }
10163
10164 /* Given a template type PARM and a class type ARG, find the unique
10165    base type in ARG that is an instance of PARM.  We do not examine
10166    ARG itself; only its base-classes.  If there is not exactly one
10167    appropriate base class, return NULL_TREE.  PARM may be the type of
10168    a partial specialization, as well as a plain template type.  Used
10169    by unify.  */
10170
10171 static tree
10172 get_template_base (tree tparms, tree targs, tree parm, tree arg)
10173 {
10174   tree rval = NULL_TREE;
10175   tree binfo;
10176
10177   gcc_assert (IS_AGGR_TYPE_CODE (TREE_CODE (arg)));
10178
10179   binfo = TYPE_BINFO (complete_type (arg));
10180   if (!binfo)
10181     /* The type could not be completed.  */
10182     return NULL_TREE;
10183
10184   /* Walk in inheritance graph order.  The search order is not
10185      important, and this avoids multiple walks of virtual bases.  */
10186   for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
10187     {
10188       tree r = try_class_unification (tparms, targs, parm, BINFO_TYPE (binfo));
10189
10190       if (r)
10191         {
10192           /* If there is more than one satisfactory baseclass, then:
10193
10194                [temp.deduct.call]
10195
10196               If they yield more than one possible deduced A, the type
10197               deduction fails.
10198
10199              applies.  */
10200           if (rval && !same_type_p (r, rval))
10201             return NULL_TREE;
10202
10203           rval = r;
10204         }
10205     }
10206
10207   return rval;
10208 }
10209
10210 /* Returns the level of DECL, which declares a template parameter.  */
10211
10212 static int
10213 template_decl_level (tree decl)
10214 {
10215   switch (TREE_CODE (decl))
10216     {
10217     case TYPE_DECL:
10218     case TEMPLATE_DECL:
10219       return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
10220
10221     case PARM_DECL:
10222       return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
10223
10224     default:
10225       gcc_unreachable ();
10226     }
10227   return 0;
10228 }
10229
10230 /* Decide whether ARG can be unified with PARM, considering only the
10231    cv-qualifiers of each type, given STRICT as documented for unify.
10232    Returns nonzero iff the unification is OK on that basis.  */
10233
10234 static int
10235 check_cv_quals_for_unify (int strict, tree arg, tree parm)
10236 {
10237   int arg_quals = cp_type_quals (arg);
10238   int parm_quals = cp_type_quals (parm);
10239
10240   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
10241       && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
10242     {
10243       /*  Although a CVR qualifier is ignored when being applied to a
10244           substituted template parameter ([8.3.2]/1 for example), that
10245           does not apply during deduction [14.8.2.4]/1, (even though
10246           that is not explicitly mentioned, [14.8.2.4]/9 indicates
10247           this).  Except when we're allowing additional CV qualifiers
10248           at the outer level [14.8.2.1]/3,1st bullet.  */
10249       if ((TREE_CODE (arg) == REFERENCE_TYPE
10250            || TREE_CODE (arg) == FUNCTION_TYPE
10251            || TREE_CODE (arg) == METHOD_TYPE)
10252           && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
10253         return 0;
10254
10255       if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
10256           && (parm_quals & TYPE_QUAL_RESTRICT))
10257         return 0;
10258     }
10259
10260   if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
10261       && (arg_quals & parm_quals) != parm_quals)
10262     return 0;
10263
10264   if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
10265       && (parm_quals & arg_quals) != arg_quals)
10266     return 0;
10267
10268   return 1;
10269 }
10270
10271 /* Deduce the value of template parameters.  TPARMS is the (innermost)
10272    set of template parameters to a template.  TARGS is the bindings
10273    for those template parameters, as determined thus far; TARGS may
10274    include template arguments for outer levels of template parameters
10275    as well.  PARM is a parameter to a template function, or a
10276    subcomponent of that parameter; ARG is the corresponding argument.
10277    This function attempts to match PARM with ARG in a manner
10278    consistent with the existing assignments in TARGS.  If more values
10279    are deduced, then TARGS is updated.
10280
10281    Returns 0 if the type deduction succeeds, 1 otherwise.  The
10282    parameter STRICT is a bitwise or of the following flags:
10283
10284      UNIFY_ALLOW_NONE:
10285        Require an exact match between PARM and ARG.
10286      UNIFY_ALLOW_MORE_CV_QUAL:
10287        Allow the deduced ARG to be more cv-qualified (by qualification
10288        conversion) than ARG.
10289      UNIFY_ALLOW_LESS_CV_QUAL:
10290        Allow the deduced ARG to be less cv-qualified than ARG.
10291      UNIFY_ALLOW_DERIVED:
10292        Allow the deduced ARG to be a template base class of ARG,
10293        or a pointer to a template base class of the type pointed to by
10294        ARG.
10295      UNIFY_ALLOW_INTEGER:
10296        Allow any integral type to be deduced.  See the TEMPLATE_PARM_INDEX
10297        case for more information.
10298      UNIFY_ALLOW_OUTER_LEVEL:
10299        This is the outermost level of a deduction. Used to determine validity
10300        of qualification conversions. A valid qualification conversion must
10301        have const qualified pointers leading up to the inner type which
10302        requires additional CV quals, except at the outer level, where const
10303        is not required [conv.qual]. It would be normal to set this flag in
10304        addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
10305      UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
10306        This is the outermost level of a deduction, and PARM can be more CV
10307        qualified at this point.
10308      UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
10309        This is the outermost level of a deduction, and PARM can be less CV
10310        qualified at this point.  */
10311
10312 static int
10313 unify (tree tparms, tree targs, tree parm, tree arg, int strict)
10314 {
10315   int idx;
10316   tree targ;
10317   tree tparm;
10318   int strict_in = strict;
10319
10320   /* I don't think this will do the right thing with respect to types.
10321      But the only case I've seen it in so far has been array bounds, where
10322      signedness is the only information lost, and I think that will be
10323      okay.  */
10324   while (TREE_CODE (parm) == NOP_EXPR)
10325     parm = TREE_OPERAND (parm, 0);
10326
10327   if (arg == error_mark_node)
10328     return 1;
10329   if (arg == unknown_type_node)
10330     /* We can't deduce anything from this, but we might get all the
10331        template args from other function args.  */
10332     return 0;
10333
10334   /* If PARM uses template parameters, then we can't bail out here,
10335      even if ARG == PARM, since we won't record unifications for the
10336      template parameters.  We might need them if we're trying to
10337      figure out which of two things is more specialized.  */
10338   if (arg == parm && !uses_template_parms (parm))
10339     return 0;
10340
10341   /* Immediately reject some pairs that won't unify because of
10342      cv-qualification mismatches.  */
10343   if (TREE_CODE (arg) == TREE_CODE (parm)
10344       && TYPE_P (arg)
10345       /* It is the elements of the array which hold the cv quals of an array
10346          type, and the elements might be template type parms. We'll check
10347          when we recurse.  */
10348       && TREE_CODE (arg) != ARRAY_TYPE
10349       /* We check the cv-qualifiers when unifying with template type
10350          parameters below.  We want to allow ARG `const T' to unify with
10351          PARM `T' for example, when computing which of two templates
10352          is more specialized, for example.  */
10353       && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
10354       && !check_cv_quals_for_unify (strict_in, arg, parm))
10355     return 1;
10356
10357   if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
10358       && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
10359     strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
10360   strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
10361   strict &= ~UNIFY_ALLOW_DERIVED;
10362   strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
10363   strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
10364
10365   switch (TREE_CODE (parm))
10366     {
10367     case TYPENAME_TYPE:
10368     case SCOPE_REF:
10369     case UNBOUND_CLASS_TEMPLATE:
10370       /* In a type which contains a nested-name-specifier, template
10371          argument values cannot be deduced for template parameters used
10372          within the nested-name-specifier.  */
10373       return 0;
10374
10375     case TEMPLATE_TYPE_PARM:
10376     case TEMPLATE_TEMPLATE_PARM:
10377     case BOUND_TEMPLATE_TEMPLATE_PARM:
10378       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
10379
10380       if (TEMPLATE_TYPE_LEVEL (parm)
10381           != template_decl_level (tparm))
10382         /* The PARM is not one we're trying to unify.  Just check
10383            to see if it matches ARG.  */
10384         return (TREE_CODE (arg) == TREE_CODE (parm)
10385                 && same_type_p (parm, arg)) ? 0 : 1;
10386       idx = TEMPLATE_TYPE_IDX (parm);
10387       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
10388       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
10389
10390       /* Check for mixed types and values.  */
10391       if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
10392            && TREE_CODE (tparm) != TYPE_DECL)
10393           || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
10394               && TREE_CODE (tparm) != TEMPLATE_DECL))
10395         return 1;
10396
10397       if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
10398         {
10399           /* ARG must be constructed from a template class or a template
10400              template parameter.  */
10401           if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
10402               && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
10403             return 1;
10404
10405           {
10406             tree parmvec = TYPE_TI_ARGS (parm);
10407             tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
10408             tree argtmplvec
10409               = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_TI_TEMPLATE (arg));
10410             int i;
10411
10412             /* The resolution to DR150 makes clear that default
10413                arguments for an N-argument may not be used to bind T
10414                to a template template parameter with fewer than N
10415                parameters.  It is not safe to permit the binding of
10416                default arguments as an extension, as that may change
10417                the meaning of a conforming program.  Consider:
10418
10419                   struct Dense { static const unsigned int dim = 1; };
10420
10421                   template <template <typename> class View,
10422                             typename Block>
10423                   void operator+(float, View<Block> const&);
10424
10425                   template <typename Block,
10426                             unsigned int Dim = Block::dim>
10427                   struct Lvalue_proxy { operator float() const; };
10428
10429                   void
10430                   test_1d (void) {
10431                     Lvalue_proxy<Dense> p;
10432                     float b;
10433                     b + p;
10434                   }
10435
10436               Here, if Lvalue_proxy is permitted to bind to View, then
10437               the global operator+ will be used; if they are not, the
10438               Lvalue_proxy will be converted to float.  */
10439             if (coerce_template_parms (argtmplvec, parmvec,
10440                                        TYPE_TI_TEMPLATE (parm),
10441                                        tf_none,
10442                                        /*require_all_args=*/true,
10443                                        /*use_default_args=*/false)
10444                 == error_mark_node)
10445               return 1;
10446
10447             /* Deduce arguments T, i from TT<T> or TT<i>.
10448                We check each element of PARMVEC and ARGVEC individually
10449                rather than the whole TREE_VEC since they can have
10450                different number of elements.  */
10451
10452             for (i = 0; i < TREE_VEC_LENGTH (parmvec); ++i)
10453               {
10454                 if (unify (tparms, targs,
10455                            TREE_VEC_ELT (parmvec, i),
10456                            TREE_VEC_ELT (argvec, i),
10457                            UNIFY_ALLOW_NONE))
10458                   return 1;
10459               }
10460           }
10461           arg = TYPE_TI_TEMPLATE (arg);
10462
10463           /* Fall through to deduce template name.  */
10464         }
10465
10466       if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
10467           || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
10468         {
10469           /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>.  */
10470
10471           /* Simple cases: Value already set, does match or doesn't.  */
10472           if (targ != NULL_TREE && template_args_equal (targ, arg))
10473             return 0;
10474           else if (targ)
10475             return 1;
10476         }
10477       else
10478         {
10479           /* If PARM is `const T' and ARG is only `int', we don't have
10480              a match unless we are allowing additional qualification.
10481              If ARG is `const int' and PARM is just `T' that's OK;
10482              that binds `const int' to `T'.  */
10483           if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
10484                                          arg, parm))
10485             return 1;
10486
10487           /* Consider the case where ARG is `const volatile int' and
10488              PARM is `const T'.  Then, T should be `volatile int'.  */
10489           arg = cp_build_qualified_type_real
10490             (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
10491           if (arg == error_mark_node)
10492             return 1;
10493
10494           /* Simple cases: Value already set, does match or doesn't.  */
10495           if (targ != NULL_TREE && same_type_p (targ, arg))
10496             return 0;
10497           else if (targ)
10498             return 1;
10499
10500           /* Make sure that ARG is not a variable-sized array.  (Note
10501              that were talking about variable-sized arrays (like
10502              `int[n]'), rather than arrays of unknown size (like
10503              `int[]').)  We'll get very confused by such a type since
10504              the bound of the array will not be computable in an
10505              instantiation.  Besides, such types are not allowed in
10506              ISO C++, so we can do as we please here.  */
10507           if (variably_modified_type_p (arg, NULL_TREE))
10508             return 1;
10509         }
10510
10511       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
10512       return 0;
10513
10514     case TEMPLATE_PARM_INDEX:
10515       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
10516       if (tparm == error_mark_node)
10517         return 1;
10518
10519       if (TEMPLATE_PARM_LEVEL (parm)
10520           != template_decl_level (tparm))
10521         /* The PARM is not one we're trying to unify.  Just check
10522            to see if it matches ARG.  */
10523         return !(TREE_CODE (arg) == TREE_CODE (parm)
10524                  && cp_tree_equal (parm, arg));
10525
10526       idx = TEMPLATE_PARM_IDX (parm);
10527       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
10528
10529       if (targ)
10530         return !cp_tree_equal (targ, arg);
10531
10532       /* [temp.deduct.type] If, in the declaration of a function template
10533          with a non-type template-parameter, the non-type
10534          template-parameter is used in an expression in the function
10535          parameter-list and, if the corresponding template-argument is
10536          deduced, the template-argument type shall match the type of the
10537          template-parameter exactly, except that a template-argument
10538          deduced from an array bound may be of any integral type.
10539          The non-type parameter might use already deduced type parameters.  */
10540       tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
10541       if (!TREE_TYPE (arg))
10542         /* Template-parameter dependent expression.  Just accept it for now.
10543            It will later be processed in convert_template_argument.  */
10544         ;
10545       else if (same_type_p (TREE_TYPE (arg), tparm))
10546         /* OK */;
10547       else if ((strict & UNIFY_ALLOW_INTEGER)
10548                && (TREE_CODE (tparm) == INTEGER_TYPE
10549                    || TREE_CODE (tparm) == BOOLEAN_TYPE))
10550         /* Convert the ARG to the type of PARM; the deduced non-type
10551            template argument must exactly match the types of the
10552            corresponding parameter.  */
10553         arg = fold (build_nop (TREE_TYPE (parm), arg));
10554       else if (uses_template_parms (tparm))
10555         /* We haven't deduced the type of this parameter yet.  Try again
10556            later.  */
10557         return 0;
10558       else
10559         return 1;
10560
10561       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
10562       return 0;
10563
10564     case PTRMEM_CST:
10565      {
10566         /* A pointer-to-member constant can be unified only with
10567          another constant.  */
10568       if (TREE_CODE (arg) != PTRMEM_CST)
10569         return 1;
10570
10571       /* Just unify the class member. It would be useless (and possibly
10572          wrong, depending on the strict flags) to unify also
10573          PTRMEM_CST_CLASS, because we want to be sure that both parm and
10574          arg refer to the same variable, even if through different
10575          classes. For instance:
10576
10577          struct A { int x; };
10578          struct B : A { };
10579
10580          Unification of &A::x and &B::x must succeed.  */
10581       return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
10582                     PTRMEM_CST_MEMBER (arg), strict);
10583      }
10584
10585     case POINTER_TYPE:
10586       {
10587         if (TREE_CODE (arg) != POINTER_TYPE)
10588           return 1;
10589
10590         /* [temp.deduct.call]
10591
10592            A can be another pointer or pointer to member type that can
10593            be converted to the deduced A via a qualification
10594            conversion (_conv.qual_).
10595
10596            We pass down STRICT here rather than UNIFY_ALLOW_NONE.
10597            This will allow for additional cv-qualification of the
10598            pointed-to types if appropriate.  */
10599
10600         if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
10601           /* The derived-to-base conversion only persists through one
10602              level of pointers.  */
10603           strict |= (strict_in & UNIFY_ALLOW_DERIVED);
10604
10605         return unify (tparms, targs, TREE_TYPE (parm),
10606                       TREE_TYPE (arg), strict);
10607       }
10608
10609     case REFERENCE_TYPE:
10610       if (TREE_CODE (arg) != REFERENCE_TYPE)
10611         return 1;
10612       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
10613                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
10614
10615     case ARRAY_TYPE:
10616       if (TREE_CODE (arg) != ARRAY_TYPE)
10617         return 1;
10618       if ((TYPE_DOMAIN (parm) == NULL_TREE)
10619           != (TYPE_DOMAIN (arg) == NULL_TREE))
10620         return 1;
10621       if (TYPE_DOMAIN (parm) != NULL_TREE)
10622         {
10623           tree parm_max;
10624           tree arg_max;
10625
10626           parm_max = TYPE_MAX_VALUE (TYPE_DOMAIN (parm));
10627           arg_max = TYPE_MAX_VALUE (TYPE_DOMAIN (arg));
10628
10629           /* Our representation of array types uses "N - 1" as the
10630              TYPE_MAX_VALUE for an array with "N" elements, if "N" is
10631              not an integer constant.  */
10632           if (TREE_CODE (parm_max) == MINUS_EXPR)
10633             {
10634               arg_max = fold_build2 (PLUS_EXPR,
10635                                      integer_type_node,
10636                                      arg_max,
10637                                      TREE_OPERAND (parm_max, 1));
10638               parm_max = TREE_OPERAND (parm_max, 0);
10639             }
10640
10641           if (unify (tparms, targs, parm_max, arg_max, UNIFY_ALLOW_INTEGER))
10642             return 1;
10643         }
10644       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
10645                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
10646
10647     case REAL_TYPE:
10648     case COMPLEX_TYPE:
10649     case VECTOR_TYPE:
10650     case INTEGER_TYPE:
10651     case BOOLEAN_TYPE:
10652     case ENUMERAL_TYPE:
10653     case VOID_TYPE:
10654       if (TREE_CODE (arg) != TREE_CODE (parm))
10655         return 1;
10656
10657       /* We have already checked cv-qualification at the top of the
10658          function.  */
10659       if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
10660         return 1;
10661
10662       /* As far as unification is concerned, this wins.  Later checks
10663          will invalidate it if necessary.  */
10664       return 0;
10665
10666       /* Types INTEGER_CST and MINUS_EXPR can come from array bounds.  */
10667       /* Type INTEGER_CST can come from ordinary constant template args.  */
10668     case INTEGER_CST:
10669       while (TREE_CODE (arg) == NOP_EXPR)
10670         arg = TREE_OPERAND (arg, 0);
10671
10672       if (TREE_CODE (arg) != INTEGER_CST)
10673         return 1;
10674       return !tree_int_cst_equal (parm, arg);
10675
10676     case TREE_VEC:
10677       {
10678         int i;
10679         if (TREE_CODE (arg) != TREE_VEC)
10680           return 1;
10681         if (TREE_VEC_LENGTH (parm) != TREE_VEC_LENGTH (arg))
10682           return 1;
10683         for (i = 0; i < TREE_VEC_LENGTH (parm); ++i)
10684           if (unify (tparms, targs,
10685                      TREE_VEC_ELT (parm, i), TREE_VEC_ELT (arg, i),
10686                      UNIFY_ALLOW_NONE))
10687             return 1;
10688         return 0;
10689       }
10690
10691     case RECORD_TYPE:
10692     case UNION_TYPE:
10693       if (TREE_CODE (arg) != TREE_CODE (parm))
10694         return 1;
10695
10696       if (TYPE_PTRMEMFUNC_P (parm))
10697         {
10698           if (!TYPE_PTRMEMFUNC_P (arg))
10699             return 1;
10700
10701           return unify (tparms, targs,
10702                         TYPE_PTRMEMFUNC_FN_TYPE (parm),
10703                         TYPE_PTRMEMFUNC_FN_TYPE (arg),
10704                         strict);
10705         }
10706
10707       if (CLASSTYPE_TEMPLATE_INFO (parm))
10708         {
10709           tree t = NULL_TREE;
10710
10711           if (strict_in & UNIFY_ALLOW_DERIVED)
10712             {
10713               /* First, we try to unify the PARM and ARG directly.  */
10714               t = try_class_unification (tparms, targs,
10715                                          parm, arg);
10716
10717               if (!t)
10718                 {
10719                   /* Fallback to the special case allowed in
10720                      [temp.deduct.call]:
10721
10722                        If P is a class, and P has the form
10723                        template-id, then A can be a derived class of
10724                        the deduced A.  Likewise, if P is a pointer to
10725                        a class of the form template-id, A can be a
10726                        pointer to a derived class pointed to by the
10727                        deduced A.  */
10728                   t = get_template_base (tparms, targs, parm, arg);
10729
10730                   if (!t)
10731                     return 1;
10732                 }
10733             }
10734           else if (CLASSTYPE_TEMPLATE_INFO (arg)
10735                    && (CLASSTYPE_TI_TEMPLATE (parm)
10736                        == CLASSTYPE_TI_TEMPLATE (arg)))
10737             /* Perhaps PARM is something like S<U> and ARG is S<int>.
10738                Then, we should unify `int' and `U'.  */
10739             t = arg;
10740           else
10741             /* There's no chance of unification succeeding.  */
10742             return 1;
10743
10744           return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
10745                         CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE);
10746         }
10747       else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
10748         return 1;
10749       return 0;
10750
10751     case METHOD_TYPE:
10752     case FUNCTION_TYPE:
10753       if (TREE_CODE (arg) != TREE_CODE (parm))
10754         return 1;
10755
10756       /* CV qualifications for methods can never be deduced, they must
10757          match exactly.  We need to check them explicitly here,
10758          because type_unification_real treats them as any other
10759          cvqualified parameter.  */
10760       if (TREE_CODE (parm) == METHOD_TYPE
10761           && (!check_cv_quals_for_unify
10762               (UNIFY_ALLOW_NONE,
10763                TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (arg))),
10764                TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (parm))))))
10765         return 1;
10766
10767       if (unify (tparms, targs, TREE_TYPE (parm),
10768                  TREE_TYPE (arg), UNIFY_ALLOW_NONE))
10769         return 1;
10770       return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
10771                                     TYPE_ARG_TYPES (arg), 1, DEDUCE_EXACT,
10772                                     LOOKUP_NORMAL);
10773
10774     case OFFSET_TYPE:
10775       /* Unify a pointer to member with a pointer to member function, which
10776          deduces the type of the member as a function type. */
10777       if (TYPE_PTRMEMFUNC_P (arg))
10778         {
10779           tree method_type;
10780           tree fntype;
10781           cp_cv_quals cv_quals;
10782
10783           /* Check top-level cv qualifiers */
10784           if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
10785             return 1;
10786
10787           if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
10788                      TYPE_PTRMEMFUNC_OBJECT_TYPE (arg), UNIFY_ALLOW_NONE))
10789             return 1;
10790
10791           /* Determine the type of the function we are unifying against. */
10792           method_type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (arg));
10793           fntype =
10794             build_function_type (TREE_TYPE (method_type),
10795                                  TREE_CHAIN (TYPE_ARG_TYPES (method_type)));
10796
10797           /* Extract the cv-qualifiers of the member function from the
10798              implicit object parameter and place them on the function
10799              type to be restored later. */
10800           cv_quals =
10801             cp_type_quals(TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (method_type))));
10802           fntype = build_qualified_type (fntype, cv_quals);
10803           return unify (tparms, targs, TREE_TYPE (parm), fntype, strict);
10804         }
10805
10806       if (TREE_CODE (arg) != OFFSET_TYPE)
10807         return 1;
10808       if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
10809                  TYPE_OFFSET_BASETYPE (arg), UNIFY_ALLOW_NONE))
10810         return 1;
10811       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
10812                     strict);
10813
10814     case CONST_DECL:
10815       if (DECL_TEMPLATE_PARM_P (parm))
10816         return unify (tparms, targs, DECL_INITIAL (parm), arg, strict);
10817       if (arg != integral_constant_value (parm))
10818         return 1;
10819       return 0;
10820
10821     case FIELD_DECL:
10822     case TEMPLATE_DECL:
10823       /* Matched cases are handled by the ARG == PARM test above.  */
10824       return 1;
10825
10826     default:
10827       gcc_assert (EXPR_P (parm));
10828
10829       /* We must be looking at an expression.  This can happen with
10830          something like:
10831
10832            template <int I>
10833            void foo(S<I>, S<I + 2>);
10834
10835          This is a "nondeduced context":
10836
10837            [deduct.type]
10838
10839            The nondeduced contexts are:
10840
10841            --A type that is a template-id in which one or more of
10842              the template-arguments is an expression that references
10843              a template-parameter.
10844
10845          In these cases, we assume deduction succeeded, but don't
10846          actually infer any unifications.  */
10847
10848       if (!uses_template_parms (parm)
10849           && !template_args_equal (parm, arg))
10850         return 1;
10851       else
10852         return 0;
10853     }
10854 }
10855 \f
10856 /* Note that DECL can be defined in this translation unit, if
10857    required.  */
10858
10859 static void
10860 mark_definable (tree decl)
10861 {
10862   tree clone;
10863   DECL_NOT_REALLY_EXTERN (decl) = 1;
10864   FOR_EACH_CLONE (clone, decl)
10865     DECL_NOT_REALLY_EXTERN (clone) = 1;
10866 }
10867
10868 /* Called if RESULT is explicitly instantiated, or is a member of an
10869    explicitly instantiated class.  */
10870
10871 void
10872 mark_decl_instantiated (tree result, int extern_p)
10873 {
10874   SET_DECL_EXPLICIT_INSTANTIATION (result);
10875
10876   /* If this entity has already been written out, it's too late to
10877      make any modifications.  */
10878   if (TREE_ASM_WRITTEN (result))
10879     return;
10880
10881   if (TREE_CODE (result) != FUNCTION_DECL)
10882     /* The TREE_PUBLIC flag for function declarations will have been
10883        set correctly by tsubst.  */
10884     TREE_PUBLIC (result) = 1;
10885
10886   /* This might have been set by an earlier implicit instantiation.  */
10887   DECL_COMDAT (result) = 0;
10888
10889   if (extern_p)
10890     DECL_NOT_REALLY_EXTERN (result) = 0;
10891   else
10892     {
10893       mark_definable (result);
10894       /* Always make artificials weak.  */
10895       if (DECL_ARTIFICIAL (result) && flag_weak)
10896         comdat_linkage (result);
10897       /* For WIN32 we also want to put explicit instantiations in
10898          linkonce sections.  */
10899       else if (TREE_PUBLIC (result))
10900         maybe_make_one_only (result);
10901     }
10902
10903   /* If EXTERN_P, then this function will not be emitted -- unless
10904      followed by an explicit instantiation, at which point its linkage
10905      will be adjusted.  If !EXTERN_P, then this function will be
10906      emitted here.  In neither circumstance do we want
10907      import_export_decl to adjust the linkage.  */
10908   DECL_INTERFACE_KNOWN (result) = 1;
10909 }
10910
10911 /* Given two function templates PAT1 and PAT2, return:
10912
10913    1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
10914    -1 if PAT2 is more specialized than PAT1.
10915    0 if neither is more specialized.
10916
10917    LEN indicates the number of parameters we should consider
10918    (defaulted parameters should not be considered).
10919
10920    The 1998 std underspecified function template partial ordering, and
10921    DR214 addresses the issue.  We take pairs of arguments, one from
10922    each of the templates, and deduce them against each other.  One of
10923    the templates will be more specialized if all the *other*
10924    template's arguments deduce against its arguments and at least one
10925    of its arguments *does* *not* deduce against the other template's
10926    corresponding argument.  Deduction is done as for class templates.
10927    The arguments used in deduction have reference and top level cv
10928    qualifiers removed.  Iff both arguments were originally reference
10929    types *and* deduction succeeds in both directions, the template
10930    with the more cv-qualified argument wins for that pairing (if
10931    neither is more cv-qualified, they both are equal).  Unlike regular
10932    deduction, after all the arguments have been deduced in this way,
10933    we do *not* verify the deduced template argument values can be
10934    substituted into non-deduced contexts, nor do we have to verify
10935    that all template arguments have been deduced.  */
10936
10937 int
10938 more_specialized_fn (tree pat1, tree pat2, int len)
10939 {
10940   tree decl1 = DECL_TEMPLATE_RESULT (pat1);
10941   tree decl2 = DECL_TEMPLATE_RESULT (pat2);
10942   tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
10943   tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
10944   tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
10945   tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
10946   tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
10947   tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
10948   int better1 = 0;
10949   int better2 = 0;
10950
10951   /* Remove the this parameter from non-static member functions.  If
10952      one is a non-static member function and the other is not a static
10953      member function, remove the first parameter from that function
10954      also.  This situation occurs for operator functions where we
10955      locate both a member function (with this pointer) and non-member
10956      operator (with explicit first operand).  */
10957   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
10958     {
10959       len--; /* LEN is the number of significant arguments for DECL1 */
10960       args1 = TREE_CHAIN (args1);
10961       if (!DECL_STATIC_FUNCTION_P (decl2))
10962         args2 = TREE_CHAIN (args2);
10963     }
10964   else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
10965     {
10966       args2 = TREE_CHAIN (args2);
10967       if (!DECL_STATIC_FUNCTION_P (decl1))
10968         {
10969           len--;
10970           args1 = TREE_CHAIN (args1);
10971         }
10972     }
10973
10974   /* If only one is a conversion operator, they are unordered.  */
10975   if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
10976     return 0;
10977
10978   /* Consider the return type for a conversion function */
10979   if (DECL_CONV_FN_P (decl1))
10980     {
10981       args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
10982       args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
10983       len++;
10984     }
10985
10986   processing_template_decl++;
10987
10988   while (len--)
10989     {
10990       tree arg1 = TREE_VALUE (args1);
10991       tree arg2 = TREE_VALUE (args2);
10992       int deduce1, deduce2;
10993       int quals1 = -1;
10994       int quals2 = -1;
10995
10996       if (TREE_CODE (arg1) == REFERENCE_TYPE)
10997         {
10998           arg1 = TREE_TYPE (arg1);
10999           quals1 = cp_type_quals (arg1);
11000         }
11001
11002       if (TREE_CODE (arg2) == REFERENCE_TYPE)
11003         {
11004           arg2 = TREE_TYPE (arg2);
11005           quals2 = cp_type_quals (arg2);
11006         }
11007
11008       if ((quals1 < 0) != (quals2 < 0))
11009         {
11010           /* Only of the args is a reference, see if we should apply
11011              array/function pointer decay to it.  This is not part of
11012              DR214, but is, IMHO, consistent with the deduction rules
11013              for the function call itself, and with our earlier
11014              implementation of the underspecified partial ordering
11015              rules.  (nathan).  */
11016           if (quals1 >= 0)
11017             {
11018               switch (TREE_CODE (arg1))
11019                 {
11020                 case ARRAY_TYPE:
11021                   arg1 = TREE_TYPE (arg1);
11022                   /* FALLTHROUGH. */
11023                 case FUNCTION_TYPE:
11024                   arg1 = build_pointer_type (arg1);
11025                   break;
11026
11027                 default:
11028                   break;
11029                 }
11030             }
11031           else
11032             {
11033               switch (TREE_CODE (arg2))
11034                 {
11035                 case ARRAY_TYPE:
11036                   arg2 = TREE_TYPE (arg2);
11037                   /* FALLTHROUGH. */
11038                 case FUNCTION_TYPE:
11039                   arg2 = build_pointer_type (arg2);
11040                   break;
11041
11042                 default:
11043                   break;
11044                 }
11045             }
11046         }
11047
11048       arg1 = TYPE_MAIN_VARIANT (arg1);
11049       arg2 = TYPE_MAIN_VARIANT (arg2);
11050
11051       deduce1 = !unify (tparms1, targs1, arg1, arg2, UNIFY_ALLOW_NONE);
11052       deduce2 = !unify (tparms2, targs2, arg2, arg1, UNIFY_ALLOW_NONE);
11053
11054       if (!deduce1)
11055         better2 = -1;
11056       if (!deduce2)
11057         better1 = -1;
11058       if (better1 < 0 && better2 < 0)
11059         /* We've failed to deduce something in either direction.
11060            These must be unordered.  */
11061         break;
11062
11063       if (deduce1 && deduce2 && quals1 >= 0 && quals2 >= 0)
11064         {
11065           /* Deduces in both directions, see if quals can
11066              disambiguate.  Pretend the worse one failed to deduce. */
11067           if ((quals1 & quals2) == quals2)
11068             deduce1 = 0;
11069           if ((quals1 & quals2) == quals1)
11070             deduce2 = 0;
11071         }
11072       if (deduce1 && !deduce2 && !better2)
11073         better2 = 1;
11074       if (deduce2 && !deduce1 && !better1)
11075         better1 = 1;
11076
11077       args1 = TREE_CHAIN (args1);
11078       args2 = TREE_CHAIN (args2);
11079     }
11080
11081   processing_template_decl--;
11082
11083   return (better1 > 0) - (better2 > 0);
11084 }
11085
11086 /* Determine which of two partial specializations is more specialized.
11087
11088    PAT1 is a TREE_LIST whose TREE_TYPE is the _TYPE node corresponding
11089    to the first partial specialization.  The TREE_VALUE is the
11090    innermost set of template parameters for the partial
11091    specialization.  PAT2 is similar, but for the second template.
11092
11093    Return 1 if the first partial specialization is more specialized;
11094    -1 if the second is more specialized; 0 if neither is more
11095    specialized.
11096
11097    See [temp.class.order] for information about determining which of
11098    two templates is more specialized.  */
11099
11100 static int
11101 more_specialized_class (tree pat1, tree pat2)
11102 {
11103   tree targs;
11104   tree tmpl1, tmpl2;
11105   int winner = 0;
11106
11107   tmpl1 = TREE_TYPE (pat1);
11108   tmpl2 = TREE_TYPE (pat2);
11109
11110   /* Just like what happens for functions, if we are ordering between
11111      different class template specializations, we may encounter dependent
11112      types in the arguments, and we need our dependency check functions
11113      to behave correctly.  */
11114   ++processing_template_decl;
11115   targs = get_class_bindings (TREE_VALUE (pat1),
11116                               CLASSTYPE_TI_ARGS (tmpl1),
11117                               CLASSTYPE_TI_ARGS (tmpl2));
11118   if (targs)
11119     --winner;
11120
11121   targs = get_class_bindings (TREE_VALUE (pat2),
11122                               CLASSTYPE_TI_ARGS (tmpl2),
11123                               CLASSTYPE_TI_ARGS (tmpl1));
11124   if (targs)
11125     ++winner;
11126   --processing_template_decl;
11127
11128   return winner;
11129 }
11130
11131 /* Return the template arguments that will produce the function signature
11132    DECL from the function template FN, with the explicit template
11133    arguments EXPLICIT_ARGS.  If CHECK_RETTYPE is true, the return type must
11134    also match.  Return NULL_TREE if no satisfactory arguments could be
11135    found.  */
11136
11137 static tree
11138 get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
11139 {
11140   int ntparms = DECL_NTPARMS (fn);
11141   tree targs = make_tree_vec (ntparms);
11142   tree decl_type;
11143   tree decl_arg_types;
11144
11145   /* Substitute the explicit template arguments into the type of DECL.
11146      The call to fn_type_unification will handle substitution into the
11147      FN.  */
11148   decl_type = TREE_TYPE (decl);
11149   if (explicit_args && uses_template_parms (decl_type))
11150     {
11151       tree tmpl;
11152       tree converted_args;
11153
11154       if (DECL_TEMPLATE_INFO (decl))
11155         tmpl = DECL_TI_TEMPLATE (decl);
11156       else
11157         /* We can get here for some invalid specializations.  */
11158         return NULL_TREE;
11159
11160       converted_args
11161         = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
11162                                  explicit_args, NULL_TREE,
11163                                  tf_none,
11164                                  /*require_all_args=*/false,
11165                                  /*use_default_args=*/false);
11166       if (converted_args == error_mark_node)
11167         return NULL_TREE;
11168
11169       decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE);
11170       if (decl_type == error_mark_node)
11171         return NULL_TREE;
11172     }
11173
11174   decl_arg_types = TYPE_ARG_TYPES (decl_type);
11175   /* Never do unification on the 'this' parameter.  */
11176   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
11177     decl_arg_types = TREE_CHAIN (decl_arg_types);
11178
11179   if (fn_type_unification (fn, explicit_args, targs,
11180                            decl_arg_types,
11181                            (check_rettype || DECL_CONV_FN_P (fn)
11182                             ? TREE_TYPE (decl_type) : NULL_TREE),
11183                            DEDUCE_EXACT, LOOKUP_NORMAL))
11184     return NULL_TREE;
11185
11186   return targs;
11187 }
11188
11189 /* Return the innermost template arguments that, when applied to a
11190    template specialization whose innermost template parameters are
11191    TPARMS, and whose specialization arguments are PARMS, yield the
11192    ARGS.
11193
11194    For example, suppose we have:
11195
11196      template <class T, class U> struct S {};
11197      template <class T> struct S<T*, int> {};
11198
11199    Then, suppose we want to get `S<double*, int>'.  The TPARMS will be
11200    {T}, the SPEC_ARGS will be {T*, int} and the ARGS will be {double*,
11201    int}.  The resulting vector will be {double}, indicating that `T'
11202    is bound to `double'.  */
11203
11204 static tree
11205 get_class_bindings (tree tparms, tree spec_args, tree args)
11206 {
11207   int i, ntparms = TREE_VEC_LENGTH (tparms);
11208   tree deduced_args;
11209   tree innermost_deduced_args;
11210
11211   innermost_deduced_args = make_tree_vec (ntparms);
11212   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
11213     {
11214       deduced_args = copy_node (args);
11215       SET_TMPL_ARGS_LEVEL (deduced_args,
11216                            TMPL_ARGS_DEPTH (deduced_args),
11217                            innermost_deduced_args);
11218     }
11219   else
11220     deduced_args = innermost_deduced_args;
11221
11222   if (unify (tparms, deduced_args,
11223              INNERMOST_TEMPLATE_ARGS (spec_args),
11224              INNERMOST_TEMPLATE_ARGS (args),
11225              UNIFY_ALLOW_NONE))
11226     return NULL_TREE;
11227
11228   for (i =  0; i < ntparms; ++i)
11229     if (! TREE_VEC_ELT (innermost_deduced_args, i))
11230       return NULL_TREE;
11231
11232   /* Verify that nondeduced template arguments agree with the type
11233      obtained from argument deduction.
11234
11235      For example:
11236
11237        struct A { typedef int X; };
11238        template <class T, class U> struct C {};
11239        template <class T> struct C<T, typename T::X> {};
11240
11241      Then with the instantiation `C<A, int>', we can deduce that
11242      `T' is `A' but unify () does not check whether `typename T::X'
11243      is `int'.  */
11244   spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
11245   if (spec_args == error_mark_node
11246       /* We only need to check the innermost arguments; the other
11247          arguments will always agree.  */
11248       || !comp_template_args (INNERMOST_TEMPLATE_ARGS (spec_args),
11249                               INNERMOST_TEMPLATE_ARGS (args)))
11250     return NULL_TREE;
11251
11252   return deduced_args;
11253 }
11254
11255 /* TEMPLATES is a TREE_LIST.  Each TREE_VALUE is a TEMPLATE_DECL.
11256    Return the TREE_LIST node with the most specialized template, if
11257    any.  If there is no most specialized template, the error_mark_node
11258    is returned.
11259
11260    Note that this function does not look at, or modify, the
11261    TREE_PURPOSE or TREE_TYPE of any of the nodes.  Since the node
11262    returned is one of the elements of INSTANTIATIONS, callers may
11263    store information in the TREE_PURPOSE or TREE_TYPE of the nodes,
11264    and retrieve it from the value returned.  */
11265
11266 tree
11267 most_specialized_instantiation (tree templates)
11268 {
11269   tree fn, champ;
11270
11271   ++processing_template_decl;
11272
11273   champ = templates;
11274   for (fn = TREE_CHAIN (templates); fn; fn = TREE_CHAIN (fn))
11275     {
11276       int fate = 0;
11277
11278       if (get_bindings (TREE_VALUE (champ),
11279                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
11280                         NULL_TREE, /*check_ret=*/false))
11281         fate--;
11282
11283       if (get_bindings (TREE_VALUE (fn),
11284                         DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
11285                         NULL_TREE, /*check_ret=*/false))
11286         fate++;
11287
11288       if (fate == -1)
11289         champ = fn;
11290       else if (!fate)
11291         {
11292           /* Equally specialized, move to next function.  If there
11293              is no next function, nothing's most specialized.  */
11294           fn = TREE_CHAIN (fn);
11295           champ = fn;
11296           if (!fn)
11297             break;
11298         }
11299     }
11300
11301   if (champ)
11302     /* Now verify that champ is better than everything earlier in the
11303        instantiation list.  */
11304     for (fn = templates; fn != champ; fn = TREE_CHAIN (fn))
11305       if (get_bindings (TREE_VALUE (champ),
11306                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
11307                         NULL_TREE, /*check_ret=*/false)
11308           || !get_bindings (TREE_VALUE (fn),
11309                             DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
11310                             NULL_TREE, /*check_ret=*/false))
11311         {
11312           champ = NULL_TREE;
11313           break;
11314         }
11315
11316   processing_template_decl--;
11317
11318   if (!champ)
11319     return error_mark_node;
11320
11321   return champ;
11322 }
11323
11324 /* If DECL is a specialization of some template, return the most
11325    general such template.  Otherwise, returns NULL_TREE.
11326
11327    For example, given:
11328
11329      template <class T> struct S { template <class U> void f(U); };
11330
11331    if TMPL is `template <class U> void S<int>::f(U)' this will return
11332    the full template.  This function will not trace past partial
11333    specializations, however.  For example, given in addition:
11334
11335      template <class T> struct S<T*> { template <class U> void f(U); };
11336
11337    if TMPL is `template <class U> void S<int*>::f(U)' this will return
11338    `template <class T> template <class U> S<T*>::f(U)'.  */
11339
11340 tree
11341 most_general_template (tree decl)
11342 {
11343   /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
11344      an immediate specialization.  */
11345   if (TREE_CODE (decl) == FUNCTION_DECL)
11346     {
11347       if (DECL_TEMPLATE_INFO (decl)) {
11348         decl = DECL_TI_TEMPLATE (decl);
11349
11350         /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
11351            template friend.  */
11352         if (TREE_CODE (decl) != TEMPLATE_DECL)
11353           return NULL_TREE;
11354       } else
11355         return NULL_TREE;
11356     }
11357
11358   /* Look for more and more general templates.  */
11359   while (DECL_TEMPLATE_INFO (decl))
11360     {
11361       /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
11362          (See cp-tree.h for details.)  */
11363       if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
11364         break;
11365
11366       if (CLASS_TYPE_P (TREE_TYPE (decl))
11367           && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
11368         break;
11369
11370       /* Stop if we run into an explicitly specialized class template.  */
11371       if (!DECL_NAMESPACE_SCOPE_P (decl)
11372           && DECL_CONTEXT (decl)
11373           && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
11374         break;
11375
11376       decl = DECL_TI_TEMPLATE (decl);
11377     }
11378
11379   return decl;
11380 }
11381
11382 /* Return the most specialized of the class template partial
11383    specializations of TMPL which can produce TYPE, a specialization of
11384    TMPL.  The value returned is actually a TREE_LIST; the TREE_TYPE is
11385    a _TYPE node corresponding to the partial specialization, while the
11386    TREE_PURPOSE is the set of template arguments that must be
11387    substituted into the TREE_TYPE in order to generate TYPE.
11388
11389    If the choice of partial specialization is ambiguous, a diagnostic
11390    is issued, and the error_mark_node is returned.  If there are no
11391    partial specializations of TMPL matching TYPE, then NULL_TREE is
11392    returned.  */
11393
11394 static tree
11395 most_specialized_class (tree type, tree tmpl)
11396 {
11397   tree list = NULL_TREE;
11398   tree t;
11399   tree champ;
11400   int fate;
11401   bool ambiguous_p;
11402   tree args;
11403
11404   tmpl = most_general_template (tmpl);
11405   args = CLASSTYPE_TI_ARGS (type);
11406   for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
11407     {
11408       tree partial_spec_args;
11409       tree spec_args;
11410
11411       partial_spec_args = CLASSTYPE_TI_ARGS (TREE_TYPE (t));
11412       spec_args = get_class_bindings (TREE_VALUE (t),
11413                                       partial_spec_args,
11414                                       args);
11415       if (spec_args)
11416         {
11417           list = tree_cons (spec_args, TREE_VALUE (t), list);
11418           TREE_TYPE (list) = TREE_TYPE (t);
11419         }
11420     }
11421
11422   if (! list)
11423     return NULL_TREE;
11424
11425   ambiguous_p = false;
11426   t = list;
11427   champ = t;
11428   t = TREE_CHAIN (t);
11429   for (; t; t = TREE_CHAIN (t))
11430     {
11431       fate = more_specialized_class (champ, t);
11432       if (fate == 1)
11433         ;
11434       else
11435         {
11436           if (fate == 0)
11437             {
11438               t = TREE_CHAIN (t);
11439               if (! t)
11440                 {
11441                   ambiguous_p = true;
11442                   break;
11443                 }
11444             }
11445           champ = t;
11446         }
11447     }
11448
11449   if (!ambiguous_p)
11450     for (t = list; t && t != champ; t = TREE_CHAIN (t))
11451       {
11452         fate = more_specialized_class (champ, t);
11453         if (fate != 1)
11454           {
11455             ambiguous_p = true;
11456             break;
11457           }
11458       }
11459
11460   if (ambiguous_p)
11461     {
11462       const char *str = "candidates are:";
11463       error ("ambiguous class template instantiation for %q#T", type);
11464       for (t = list; t; t = TREE_CHAIN (t))
11465         {
11466           error ("%s %+#T", str, TREE_TYPE (t));
11467           str = "               ";
11468         }
11469       return error_mark_node;
11470     }
11471
11472   return champ;
11473 }
11474
11475 /* Explicitly instantiate DECL.  */
11476
11477 void
11478 do_decl_instantiation (tree decl, tree storage)
11479 {
11480   tree result = NULL_TREE;
11481   int extern_p = 0;
11482
11483   if (!decl || decl == error_mark_node)
11484     /* An error occurred, for which grokdeclarator has already issued
11485        an appropriate message.  */
11486     return;
11487   else if (! DECL_LANG_SPECIFIC (decl))
11488     {
11489       error ("explicit instantiation of non-template %q#D", decl);
11490       return;
11491     }
11492   else if (TREE_CODE (decl) == VAR_DECL)
11493     {
11494       /* There is an asymmetry here in the way VAR_DECLs and
11495          FUNCTION_DECLs are handled by grokdeclarator.  In the case of
11496          the latter, the DECL we get back will be marked as a
11497          template instantiation, and the appropriate
11498          DECL_TEMPLATE_INFO will be set up.  This does not happen for
11499          VAR_DECLs so we do the lookup here.  Probably, grokdeclarator
11500          should handle VAR_DECLs as it currently handles
11501          FUNCTION_DECLs.  */
11502       result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
11503       if (!result || TREE_CODE (result) != VAR_DECL)
11504         {
11505           error ("no matching template for %qD found", decl);
11506           return;
11507         }
11508     }
11509   else if (TREE_CODE (decl) != FUNCTION_DECL)
11510     {
11511       error ("explicit instantiation of %q#D", decl);
11512       return;
11513     }
11514   else
11515     result = decl;
11516
11517   /* Check for various error cases.  Note that if the explicit
11518      instantiation is valid the RESULT will currently be marked as an
11519      *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
11520      until we get here.  */
11521
11522   if (DECL_TEMPLATE_SPECIALIZATION (result))
11523     {
11524       /* DR 259 [temp.spec].
11525
11526          Both an explicit instantiation and a declaration of an explicit
11527          specialization shall not appear in a program unless the explicit
11528          instantiation follows a declaration of the explicit specialization.
11529
11530          For a given set of template parameters, if an explicit
11531          instantiation of a template appears after a declaration of an
11532          explicit specialization for that template, the explicit
11533          instantiation has no effect.  */
11534       return;
11535     }
11536   else if (DECL_EXPLICIT_INSTANTIATION (result))
11537     {
11538       /* [temp.spec]
11539
11540          No program shall explicitly instantiate any template more
11541          than once.
11542
11543          We check DECL_NOT_REALLY_EXTERN so as not to complain when
11544          the first instantiation was `extern' and the second is not,
11545          and EXTERN_P for the opposite case.  */
11546       if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
11547         pedwarn ("duplicate explicit instantiation of %q#D", result);
11548       /* If an "extern" explicit instantiation follows an ordinary
11549          explicit instantiation, the template is instantiated.  */
11550       if (extern_p)
11551         return;
11552     }
11553   else if (!DECL_IMPLICIT_INSTANTIATION (result))
11554     {
11555       error ("no matching template for %qD found", result);
11556       return;
11557     }
11558   else if (!DECL_TEMPLATE_INFO (result))
11559     {
11560       pedwarn ("explicit instantiation of non-template %q#D", result);
11561       return;
11562     }
11563
11564   if (storage == NULL_TREE)
11565     ;
11566   else if (storage == ridpointers[(int) RID_EXTERN])
11567     {
11568       if (pedantic && !in_system_header)
11569         pedwarn ("ISO C++ forbids the use of %<extern%> on explicit "
11570                  "instantiations");
11571       extern_p = 1;
11572     }
11573   else
11574     error ("storage class %qD applied to template instantiation", storage);
11575
11576   check_explicit_instantiation_namespace (result);
11577   mark_decl_instantiated (result, extern_p);
11578   if (! extern_p)
11579     instantiate_decl (result, /*defer_ok=*/1,
11580                       /*expl_inst_class_mem_p=*/false);
11581 }
11582
11583 static void
11584 mark_class_instantiated (tree t, int extern_p)
11585 {
11586   SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
11587   SET_CLASSTYPE_INTERFACE_KNOWN (t);
11588   CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
11589   TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
11590   if (! extern_p)
11591     {
11592       CLASSTYPE_DEBUG_REQUESTED (t) = 1;
11593       rest_of_type_compilation (t, 1);
11594     }
11595 }
11596
11597 /* Called from do_type_instantiation through binding_table_foreach to
11598    do recursive instantiation for the type bound in ENTRY.  */
11599 static void
11600 bt_instantiate_type_proc (binding_entry entry, void *data)
11601 {
11602   tree storage = *(tree *) data;
11603
11604   if (IS_AGGR_TYPE (entry->type)
11605       && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
11606     do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
11607 }
11608
11609 /* Called from do_type_instantiation to instantiate a member
11610    (a member function or a static member variable) of an
11611    explicitly instantiated class template.  */
11612 static void
11613 instantiate_class_member (tree decl, int extern_p)
11614 {
11615   mark_decl_instantiated (decl, extern_p);
11616   if (! extern_p)
11617     instantiate_decl (decl, /*defer_ok=*/1,
11618                       /*expl_inst_class_mem_p=*/true);
11619 }
11620
11621 /* Perform an explicit instantiation of template class T.  STORAGE, if
11622    non-null, is the RID for extern, inline or static.  COMPLAIN is
11623    nonzero if this is called from the parser, zero if called recursively,
11624    since the standard is unclear (as detailed below).  */
11625
11626 void
11627 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
11628 {
11629   int extern_p = 0;
11630   int nomem_p = 0;
11631   int static_p = 0;
11632   int previous_instantiation_extern_p = 0;
11633
11634   if (TREE_CODE (t) == TYPE_DECL)
11635     t = TREE_TYPE (t);
11636
11637   if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
11638     {
11639       error ("explicit instantiation of non-template type %qT", t);
11640       return;
11641     }
11642
11643   complete_type (t);
11644
11645   if (!COMPLETE_TYPE_P (t))
11646     {
11647       if (complain & tf_error)
11648         error ("explicit instantiation of %q#T before definition of template",
11649                t);
11650       return;
11651     }
11652
11653   if (storage != NULL_TREE)
11654     {
11655       if (pedantic && !in_system_header)
11656         pedwarn("ISO C++ forbids the use of %qE on explicit instantiations",
11657                 storage);
11658
11659       if (storage == ridpointers[(int) RID_INLINE])
11660         nomem_p = 1;
11661       else if (storage == ridpointers[(int) RID_EXTERN])
11662         extern_p = 1;
11663       else if (storage == ridpointers[(int) RID_STATIC])
11664         static_p = 1;
11665       else
11666         {
11667           error ("storage class %qD applied to template instantiation",
11668                  storage);
11669           extern_p = 0;
11670         }
11671     }
11672
11673   if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
11674     {
11675       /* DR 259 [temp.spec].
11676
11677          Both an explicit instantiation and a declaration of an explicit
11678          specialization shall not appear in a program unless the explicit
11679          instantiation follows a declaration of the explicit specialization.
11680
11681          For a given set of template parameters, if an explicit
11682          instantiation of a template appears after a declaration of an
11683          explicit specialization for that template, the explicit
11684          instantiation has no effect.  */
11685       return;
11686     }
11687   else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
11688     {
11689       /* [temp.spec]
11690
11691          No program shall explicitly instantiate any template more
11692          than once.
11693
11694          If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
11695          instantiation was `extern'.  If EXTERN_P then the second is.
11696          These cases are OK.  */
11697       previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
11698
11699       if (!previous_instantiation_extern_p && !extern_p
11700           && (complain & tf_error))
11701         pedwarn ("duplicate explicit instantiation of %q#T", t);
11702
11703       /* If we've already instantiated the template, just return now.  */
11704       if (!CLASSTYPE_INTERFACE_ONLY (t))
11705         return;
11706     }
11707
11708   check_explicit_instantiation_namespace (TYPE_NAME (t));
11709   mark_class_instantiated (t, extern_p);
11710
11711   if (nomem_p)
11712     return;
11713
11714   {
11715     tree tmp;
11716
11717     /* In contrast to implicit instantiation, where only the
11718        declarations, and not the definitions, of members are
11719        instantiated, we have here:
11720
11721          [temp.explicit]
11722
11723          The explicit instantiation of a class template specialization
11724          implies the instantiation of all of its members not
11725          previously explicitly specialized in the translation unit
11726          containing the explicit instantiation.
11727
11728        Of course, we can't instantiate member template classes, since
11729        we don't have any arguments for them.  Note that the standard
11730        is unclear on whether the instantiation of the members are
11731        *explicit* instantiations or not.  However, the most natural
11732        interpretation is that it should be an explicit instantiation.  */
11733
11734     if (! static_p)
11735       for (tmp = TYPE_METHODS (t); tmp; tmp = TREE_CHAIN (tmp))
11736         if (TREE_CODE (tmp) == FUNCTION_DECL
11737             && DECL_TEMPLATE_INSTANTIATION (tmp))
11738           instantiate_class_member (tmp, extern_p);
11739
11740     for (tmp = TYPE_FIELDS (t); tmp; tmp = TREE_CHAIN (tmp))
11741       if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
11742         instantiate_class_member (tmp, extern_p);
11743
11744     if (CLASSTYPE_NESTED_UTDS (t))
11745       binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
11746                              bt_instantiate_type_proc, &storage);
11747   }
11748 }
11749
11750 /* Given a function DECL, which is a specialization of TMPL, modify
11751    DECL to be a re-instantiation of TMPL with the same template
11752    arguments.  TMPL should be the template into which tsubst'ing
11753    should occur for DECL, not the most general template.
11754
11755    One reason for doing this is a scenario like this:
11756
11757      template <class T>
11758      void f(const T&, int i);
11759
11760      void g() { f(3, 7); }
11761
11762      template <class T>
11763      void f(const T& t, const int i) { }
11764
11765    Note that when the template is first instantiated, with
11766    instantiate_template, the resulting DECL will have no name for the
11767    first parameter, and the wrong type for the second.  So, when we go
11768    to instantiate the DECL, we regenerate it.  */
11769
11770 static void
11771 regenerate_decl_from_template (tree decl, tree tmpl)
11772 {
11773   /* The arguments used to instantiate DECL, from the most general
11774      template.  */
11775   tree args;
11776   tree code_pattern;
11777
11778   args = DECL_TI_ARGS (decl);
11779   code_pattern = DECL_TEMPLATE_RESULT (tmpl);
11780
11781   /* Make sure that we can see identifiers, and compute access
11782      correctly.  */
11783   push_access_scope (decl);
11784
11785   if (TREE_CODE (decl) == FUNCTION_DECL)
11786     {
11787       tree decl_parm;
11788       tree pattern_parm;
11789       tree specs;
11790       int args_depth;
11791       int parms_depth;
11792
11793       args_depth = TMPL_ARGS_DEPTH (args);
11794       parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
11795       if (args_depth > parms_depth)
11796         args = get_innermost_template_args (args, parms_depth);
11797
11798       specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
11799                                               args, tf_error, NULL_TREE);
11800       if (specs)
11801         TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
11802                                                     specs);
11803
11804       /* Merge parameter declarations.  */
11805       decl_parm = skip_artificial_parms_for (decl,
11806                                              DECL_ARGUMENTS (decl));
11807       pattern_parm
11808         = skip_artificial_parms_for (code_pattern,
11809                                      DECL_ARGUMENTS (code_pattern));
11810       while (decl_parm)
11811         {
11812           tree parm_type;
11813           tree attributes;
11814
11815           if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
11816             DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
11817           parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
11818                               NULL_TREE);
11819           parm_type = type_decays_to (parm_type);
11820           if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
11821             TREE_TYPE (decl_parm) = parm_type;
11822           attributes = DECL_ATTRIBUTES (pattern_parm);
11823           if (DECL_ATTRIBUTES (decl_parm) != attributes)
11824             {
11825               DECL_ATTRIBUTES (decl_parm) = attributes;
11826               cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
11827             }
11828           decl_parm = TREE_CHAIN (decl_parm);
11829           pattern_parm = TREE_CHAIN (pattern_parm);
11830         }
11831
11832       /* Merge additional specifiers from the CODE_PATTERN.  */
11833       if (DECL_DECLARED_INLINE_P (code_pattern)
11834           && !DECL_DECLARED_INLINE_P (decl))
11835         DECL_DECLARED_INLINE_P (decl) = 1;
11836       if (DECL_INLINE (code_pattern) && !DECL_INLINE (decl))
11837         DECL_INLINE (decl) = 1;
11838     }
11839   else if (TREE_CODE (decl) == VAR_DECL)
11840     DECL_INITIAL (decl) =
11841       tsubst_expr (DECL_INITIAL (code_pattern), args,
11842                    tf_error, DECL_TI_TEMPLATE (decl),
11843                    /*integral_constant_expression_p=*/false);
11844   else
11845     gcc_unreachable ();
11846
11847   pop_access_scope (decl);
11848 }
11849
11850 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
11851    substituted to get DECL.  */
11852
11853 tree
11854 template_for_substitution (tree decl)
11855 {
11856   tree tmpl = DECL_TI_TEMPLATE (decl);
11857
11858   /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
11859      for the instantiation.  This is not always the most general
11860      template.  Consider, for example:
11861
11862         template <class T>
11863         struct S { template <class U> void f();
11864                    template <> void f<int>(); };
11865
11866      and an instantiation of S<double>::f<int>.  We want TD to be the
11867      specialization S<T>::f<int>, not the more general S<T>::f<U>.  */
11868   while (/* An instantiation cannot have a definition, so we need a
11869             more general template.  */
11870          DECL_TEMPLATE_INSTANTIATION (tmpl)
11871            /* We must also deal with friend templates.  Given:
11872
11873                 template <class T> struct S {
11874                   template <class U> friend void f() {};
11875                 };
11876
11877               S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
11878               so far as the language is concerned, but that's still
11879               where we get the pattern for the instantiation from.  On
11880               other hand, if the definition comes outside the class, say:
11881
11882                 template <class T> struct S {
11883                   template <class U> friend void f();
11884                 };
11885                 template <class U> friend void f() {}
11886
11887               we don't need to look any further.  That's what the check for
11888               DECL_INITIAL is for.  */
11889           || (TREE_CODE (decl) == FUNCTION_DECL
11890               && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
11891               && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
11892     {
11893       /* The present template, TD, should not be a definition.  If it
11894          were a definition, we should be using it!  Note that we
11895          cannot restructure the loop to just keep going until we find
11896          a template with a definition, since that might go too far if
11897          a specialization was declared, but not defined.  */
11898       gcc_assert (TREE_CODE (decl) != VAR_DECL
11899                   || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl)));
11900
11901       /* Fetch the more general template.  */
11902       tmpl = DECL_TI_TEMPLATE (tmpl);
11903     }
11904
11905   return tmpl;
11906 }
11907
11908 /* Produce the definition of D, a _DECL generated from a template.  If
11909    DEFER_OK is nonzero, then we don't have to actually do the
11910    instantiation now; we just have to do it sometime.  Normally it is
11911    an error if this is an explicit instantiation but D is undefined.
11912    EXPL_INST_CLASS_MEM_P is true iff D is a member of an
11913    explicitly instantiated class template.  */
11914
11915 tree
11916 instantiate_decl (tree d, int defer_ok,
11917                   bool expl_inst_class_mem_p)
11918 {
11919   tree tmpl = DECL_TI_TEMPLATE (d);
11920   tree gen_args;
11921   tree args;
11922   tree td;
11923   tree code_pattern;
11924   tree spec;
11925   tree gen_tmpl;
11926   bool pattern_defined;
11927   int need_push;
11928   location_t saved_loc = input_location;
11929   bool external_p;
11930
11931   /* This function should only be used to instantiate templates for
11932      functions and static member variables.  */
11933   gcc_assert (TREE_CODE (d) == FUNCTION_DECL
11934               || TREE_CODE (d) == VAR_DECL);
11935
11936   /* Variables are never deferred; if instantiation is required, they
11937      are instantiated right away.  That allows for better code in the
11938      case that an expression refers to the value of the variable --
11939      if the variable has a constant value the referring expression can
11940      take advantage of that fact.  */
11941   if (TREE_CODE (d) == VAR_DECL)
11942     defer_ok = 0;
11943
11944   /* Don't instantiate cloned functions.  Instead, instantiate the
11945      functions they cloned.  */
11946   if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
11947     d = DECL_CLONED_FUNCTION (d);
11948
11949   if (DECL_TEMPLATE_INSTANTIATED (d))
11950     /* D has already been instantiated.  It might seem reasonable to
11951        check whether or not D is an explicit instantiation, and, if so,
11952        stop here.  But when an explicit instantiation is deferred
11953        until the end of the compilation, DECL_EXPLICIT_INSTANTIATION
11954        is set, even though we still need to do the instantiation.  */
11955     return d;
11956
11957   /* If we already have a specialization of this declaration, then
11958      there's no reason to instantiate it.  Note that
11959      retrieve_specialization gives us both instantiations and
11960      specializations, so we must explicitly check
11961      DECL_TEMPLATE_SPECIALIZATION.  */
11962   gen_tmpl = most_general_template (tmpl);
11963   gen_args = DECL_TI_ARGS (d);
11964   spec = retrieve_specialization (gen_tmpl, gen_args,
11965                                   /*class_specializations_p=*/false);
11966   if (spec != NULL_TREE && DECL_TEMPLATE_SPECIALIZATION (spec))
11967     return spec;
11968
11969   /* This needs to happen before any tsubsting.  */
11970   if (! push_tinst_level (d))
11971     return d;
11972
11973   timevar_push (TV_PARSE);
11974
11975   /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
11976      for the instantiation.  */
11977   td = template_for_substitution (d);
11978   code_pattern = DECL_TEMPLATE_RESULT (td);
11979
11980   /* We should never be trying to instantiate a member of a class
11981      template or partial specialization.  */
11982   gcc_assert (d != code_pattern);
11983
11984   if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
11985       || DECL_TEMPLATE_SPECIALIZATION (td))
11986     /* In the case of a friend template whose definition is provided
11987        outside the class, we may have too many arguments.  Drop the
11988        ones we don't need.  The same is true for specializations.  */
11989     args = get_innermost_template_args
11990       (gen_args, TMPL_PARMS_DEPTH  (DECL_TEMPLATE_PARMS (td)));
11991   else
11992     args = gen_args;
11993
11994   if (TREE_CODE (d) == FUNCTION_DECL)
11995     pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE);
11996   else
11997     pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
11998
11999   /* We may be in the middle of deferred access check.  Disable it now.  */
12000   push_deferring_access_checks (dk_no_deferred);
12001
12002   /* Unless an explicit instantiation directive has already determined
12003      the linkage of D, remember that a definition is available for
12004      this entity.  */
12005   if (pattern_defined
12006       && !DECL_INTERFACE_KNOWN (d)
12007       && !DECL_NOT_REALLY_EXTERN (d))
12008     mark_definable (d);
12009
12010   input_location = DECL_SOURCE_LOCATION (d);
12011
12012   /* If D is a member of an explicitly instantiated class template,
12013      and no definition is available, treat it like an implicit
12014      instantiation.  */
12015   if (!pattern_defined && expl_inst_class_mem_p
12016       && DECL_EXPLICIT_INSTANTIATION (d))
12017     {
12018       DECL_NOT_REALLY_EXTERN (d) = 0;
12019       DECL_INTERFACE_KNOWN (d) = 0;
12020       SET_DECL_IMPLICIT_INSTANTIATION (d);
12021     }
12022
12023   if (!defer_ok)
12024     {
12025       /* Recheck the substitutions to obtain any warning messages
12026          about ignoring cv qualifiers.  */
12027       tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
12028       tree type = TREE_TYPE (gen);
12029
12030       /* Make sure that we can see identifiers, and compute access
12031          correctly.  D is already the target FUNCTION_DECL with the
12032          right context.  */
12033       push_access_scope (d);
12034
12035       if (TREE_CODE (gen) == FUNCTION_DECL)
12036         {
12037           tsubst (DECL_ARGUMENTS (gen), gen_args, tf_warning_or_error, d);
12038           tsubst (TYPE_RAISES_EXCEPTIONS (type), gen_args,
12039                   tf_warning_or_error, d);
12040           /* Don't simply tsubst the function type, as that will give
12041              duplicate warnings about poor parameter qualifications.
12042              The function arguments are the same as the decl_arguments
12043              without the top level cv qualifiers.  */
12044           type = TREE_TYPE (type);
12045         }
12046       tsubst (type, gen_args, tf_warning_or_error, d);
12047
12048       pop_access_scope (d);
12049     }
12050
12051   /* Check to see whether we know that this template will be
12052      instantiated in some other file, as with "extern template"
12053      extension.  */
12054   external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
12055   /* In general, we do not instantiate such templates...  */
12056   if (external_p
12057       /* ... but we instantiate inline functions so that we can inline
12058          them and ... */
12059       && ! (TREE_CODE (d) == FUNCTION_DECL && DECL_INLINE (d))
12060       /* ... we instantiate static data members whose values are
12061          needed in integral constant expressions.  */
12062       && ! (TREE_CODE (d) == VAR_DECL
12063             && DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (d)))
12064     goto out;
12065   /* Defer all other templates, unless we have been explicitly
12066      forbidden from doing so.  */
12067   if (/* If there is no definition, we cannot instantiate the
12068          template.  */
12069       ! pattern_defined
12070       /* If it's OK to postpone instantiation, do so.  */
12071       || defer_ok
12072       /* If this is a static data member that will be defined
12073          elsewhere, we don't want to instantiate the entire data
12074          member, but we do want to instantiate the initializer so that
12075          we can substitute that elsewhere.  */
12076       || (external_p && TREE_CODE (d) == VAR_DECL))
12077     {
12078       /* The definition of the static data member is now required so
12079          we must substitute the initializer.  */
12080       if (TREE_CODE (d) == VAR_DECL
12081           && !DECL_INITIAL (d)
12082           && DECL_INITIAL (code_pattern))
12083         {
12084           tree ns;
12085           tree init;
12086
12087           ns = decl_namespace_context (d);
12088           push_nested_namespace (ns);
12089           push_nested_class (DECL_CONTEXT (d));
12090           init = tsubst_expr (DECL_INITIAL (code_pattern),
12091                               args,
12092                               tf_warning_or_error, NULL_TREE,
12093                               /*integral_constant_expression_p=*/false);
12094           cp_finish_decl (d, init, /*init_const_expr_p=*/false,
12095                           /*asmspec_tree=*/NULL_TREE,
12096                           LOOKUP_ONLYCONVERTING);
12097           pop_nested_class ();
12098           pop_nested_namespace (ns);
12099         }
12100
12101       /* We restore the source position here because it's used by
12102          add_pending_template.  */
12103       input_location = saved_loc;
12104
12105       if (at_eof && !pattern_defined
12106           && DECL_EXPLICIT_INSTANTIATION (d))
12107         /* [temp.explicit]
12108
12109            The definition of a non-exported function template, a
12110            non-exported member function template, or a non-exported
12111            member function or static data member of a class template
12112            shall be present in every translation unit in which it is
12113            explicitly instantiated.  */
12114         pedwarn
12115           ("explicit instantiation of %qD but no definition available", d);
12116
12117       /* ??? Historically, we have instantiated inline functions, even
12118          when marked as "extern template".  */
12119       if (!(external_p && TREE_CODE (d) == VAR_DECL))
12120         add_pending_template (d);
12121       goto out;
12122     }
12123   /* Tell the repository that D is available in this translation unit
12124      -- and see if it is supposed to be instantiated here.  */
12125   if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
12126     {
12127       /* In a PCH file, despite the fact that the repository hasn't
12128          requested instantiation in the PCH it is still possible that
12129          an instantiation will be required in a file that includes the
12130          PCH.  */
12131       if (pch_file)
12132         add_pending_template (d);
12133       /* Instantiate inline functions so that the inliner can do its
12134          job, even though we'll not be emitting a copy of this
12135          function.  */
12136       if (!(TREE_CODE (d) == FUNCTION_DECL
12137             && flag_inline_trees
12138             && DECL_DECLARED_INLINE_P (d)))
12139         goto out;
12140     }
12141
12142   need_push = !cfun || !global_bindings_p ();
12143   if (need_push)
12144     push_to_top_level ();
12145
12146   /* Mark D as instantiated so that recursive calls to
12147      instantiate_decl do not try to instantiate it again.  */
12148   DECL_TEMPLATE_INSTANTIATED (d) = 1;
12149
12150   /* Regenerate the declaration in case the template has been modified
12151      by a subsequent redeclaration.  */
12152   regenerate_decl_from_template (d, td);
12153
12154   /* We already set the file and line above.  Reset them now in case
12155      they changed as a result of calling regenerate_decl_from_template.  */
12156   input_location = DECL_SOURCE_LOCATION (d);
12157
12158   if (TREE_CODE (d) == VAR_DECL)
12159     {
12160       tree init;
12161
12162       /* Clear out DECL_RTL; whatever was there before may not be right
12163          since we've reset the type of the declaration.  */
12164       SET_DECL_RTL (d, NULL_RTX);
12165       DECL_IN_AGGR_P (d) = 0;
12166
12167       /* The initializer is placed in DECL_INITIAL by
12168          regenerate_decl_from_template.  Pull it out so that
12169          finish_decl can process it.  */
12170       init = DECL_INITIAL (d);
12171       DECL_INITIAL (d) = NULL_TREE;
12172       DECL_INITIALIZED_P (d) = 0;
12173
12174       /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
12175          initializer.  That function will defer actual emission until
12176          we have a chance to determine linkage.  */
12177       DECL_EXTERNAL (d) = 0;
12178
12179       /* Enter the scope of D so that access-checking works correctly.  */
12180       push_nested_class (DECL_CONTEXT (d));
12181       finish_decl (d, init, NULL_TREE);
12182       pop_nested_class ();
12183     }
12184   else if (TREE_CODE (d) == FUNCTION_DECL)
12185     {
12186       htab_t saved_local_specializations;
12187       tree subst_decl;
12188       tree tmpl_parm;
12189       tree spec_parm;
12190
12191       /* Save away the current list, in case we are instantiating one
12192          template from within the body of another.  */
12193       saved_local_specializations = local_specializations;
12194
12195       /* Set up the list of local specializations.  */
12196       local_specializations = htab_create (37,
12197                                            hash_local_specialization,
12198                                            eq_local_specializations,
12199                                            NULL);
12200
12201       /* Set up context.  */
12202       start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
12203
12204       /* Create substitution entries for the parameters.  */
12205       subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
12206       tmpl_parm = DECL_ARGUMENTS (subst_decl);
12207       spec_parm = DECL_ARGUMENTS (d);
12208       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
12209         {
12210           register_local_specialization (spec_parm, tmpl_parm);
12211           spec_parm = skip_artificial_parms_for (d, spec_parm);
12212           tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
12213         }
12214       while (tmpl_parm)
12215         {
12216           register_local_specialization (spec_parm, tmpl_parm);
12217           tmpl_parm = TREE_CHAIN (tmpl_parm);
12218           spec_parm = TREE_CHAIN (spec_parm);
12219         }
12220       gcc_assert (!spec_parm);
12221
12222       /* Substitute into the body of the function.  */
12223       tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
12224                    tf_warning_or_error, tmpl,
12225                    /*integral_constant_expression_p=*/false);
12226
12227       /* We don't need the local specializations any more.  */
12228       htab_delete (local_specializations);
12229       local_specializations = saved_local_specializations;
12230
12231       /* Finish the function.  */
12232       d = finish_function (0);
12233       expand_or_defer_fn (d);
12234     }
12235
12236   /* We're not deferring instantiation any more.  */
12237   TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
12238
12239   if (need_push)
12240     pop_from_top_level ();
12241
12242 out:
12243   input_location = saved_loc;
12244   pop_deferring_access_checks ();
12245   pop_tinst_level ();
12246
12247   timevar_pop (TV_PARSE);
12248
12249   return d;
12250 }
12251
12252 /* Run through the list of templates that we wish we could
12253    instantiate, and instantiate any we can.  RETRIES is the
12254    number of times we retry pending template instantiation.  */
12255
12256 void
12257 instantiate_pending_templates (int retries)
12258 {
12259   tree *t;
12260   tree last = NULL_TREE;
12261   int reconsider;
12262   location_t saved_loc = input_location;
12263   int saved_in_system_header = in_system_header;
12264
12265   /* Instantiating templates may trigger vtable generation.  This in turn
12266      may require further template instantiations.  We place a limit here
12267      to avoid infinite loop.  */
12268   if (pending_templates && retries >= max_tinst_depth)
12269     {
12270       tree decl = TREE_VALUE (pending_templates);
12271
12272       error ("template instantiation depth exceeds maximum of %d"
12273              " instantiating %q+D, possibly from virtual table generation"
12274              " (use -ftemplate-depth-NN to increase the maximum)",
12275              max_tinst_depth, decl);
12276       if (TREE_CODE (decl) == FUNCTION_DECL)
12277         /* Pretend that we defined it.  */
12278         DECL_INITIAL (decl) = error_mark_node;
12279       return;
12280     }
12281
12282   do
12283     {
12284       reconsider = 0;
12285
12286       t = &pending_templates;
12287       while (*t)
12288         {
12289           tree instantiation = TREE_VALUE (*t);
12290
12291           reopen_tinst_level (TREE_PURPOSE (*t));
12292
12293           if (TYPE_P (instantiation))
12294             {
12295               tree fn;
12296
12297               if (!COMPLETE_TYPE_P (instantiation))
12298                 {
12299                   instantiate_class_template (instantiation);
12300                   if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
12301                     for (fn = TYPE_METHODS (instantiation);
12302                          fn;
12303                          fn = TREE_CHAIN (fn))
12304                       if (! DECL_ARTIFICIAL (fn))
12305                         instantiate_decl (fn,
12306                                           /*defer_ok=*/0,
12307                                           /*expl_inst_class_mem_p=*/false);
12308                   if (COMPLETE_TYPE_P (instantiation))
12309                     reconsider = 1;
12310                 }
12311
12312               if (COMPLETE_TYPE_P (instantiation))
12313                 /* If INSTANTIATION has been instantiated, then we don't
12314                    need to consider it again in the future.  */
12315                 *t = TREE_CHAIN (*t);
12316               else
12317                 {
12318                   last = *t;
12319                   t = &TREE_CHAIN (*t);
12320                 }
12321             }
12322           else
12323             {
12324               if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
12325                   && !DECL_TEMPLATE_INSTANTIATED (instantiation))
12326                 {
12327                   instantiation
12328                     = instantiate_decl (instantiation,
12329                                         /*defer_ok=*/0,
12330                                         /*expl_inst_class_mem_p=*/false);
12331                   if (DECL_TEMPLATE_INSTANTIATED (instantiation))
12332                     reconsider = 1;
12333                 }
12334
12335               if (DECL_TEMPLATE_SPECIALIZATION (instantiation)
12336                   || DECL_TEMPLATE_INSTANTIATED (instantiation))
12337                 /* If INSTANTIATION has been instantiated, then we don't
12338                    need to consider it again in the future.  */
12339                 *t = TREE_CHAIN (*t);
12340               else
12341                 {
12342                   last = *t;
12343                   t = &TREE_CHAIN (*t);
12344                 }
12345             }
12346           tinst_depth = 0;
12347           current_tinst_level = NULL_TREE;
12348         }
12349       last_pending_template = last;
12350     }
12351   while (reconsider);
12352
12353   input_location = saved_loc;
12354   in_system_header = saved_in_system_header;
12355 }
12356
12357 /* Substitute ARGVEC into T, which is a list of initializers for
12358    either base class or a non-static data member.  The TREE_PURPOSEs
12359    are DECLs, and the TREE_VALUEs are the initializer values.  Used by
12360    instantiate_decl.  */
12361
12362 static tree
12363 tsubst_initializer_list (tree t, tree argvec)
12364 {
12365   tree inits = NULL_TREE;
12366
12367   for (; t; t = TREE_CHAIN (t))
12368     {
12369       tree decl;
12370       tree init;
12371
12372       decl = tsubst_copy (TREE_PURPOSE (t), argvec, tf_warning_or_error,
12373                           NULL_TREE);
12374       decl = expand_member_init (decl);
12375       if (decl && !DECL_P (decl))
12376         in_base_initializer = 1;
12377
12378       init = tsubst_expr (TREE_VALUE (t), argvec, tf_warning_or_error,
12379                           NULL_TREE, 
12380                           /*integral_constant_expression_p=*/false);
12381       in_base_initializer = 0;
12382
12383       if (decl)
12384         {
12385           init = build_tree_list (decl, init);
12386           TREE_CHAIN (init) = inits;
12387           inits = init;
12388         }
12389     }
12390   return inits;
12391 }
12392
12393 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL.  */
12394
12395 static void
12396 set_current_access_from_decl (tree decl)
12397 {
12398   if (TREE_PRIVATE (decl))
12399     current_access_specifier = access_private_node;
12400   else if (TREE_PROTECTED (decl))
12401     current_access_specifier = access_protected_node;
12402   else
12403     current_access_specifier = access_public_node;
12404 }
12405
12406 /* Instantiate an enumerated type.  TAG is the template type, NEWTAG
12407    is the instantiation (which should have been created with
12408    start_enum) and ARGS are the template arguments to use.  */
12409
12410 static void
12411 tsubst_enum (tree tag, tree newtag, tree args)
12412 {
12413   tree e;
12414
12415   for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
12416     {
12417       tree value;
12418       tree decl;
12419
12420       decl = TREE_VALUE (e);
12421       /* Note that in a template enum, the TREE_VALUE is the
12422          CONST_DECL, not the corresponding INTEGER_CST.  */
12423       value = tsubst_expr (DECL_INITIAL (decl),
12424                            args, tf_warning_or_error, NULL_TREE,
12425                            /*integral_constant_expression_p=*/true);
12426
12427       /* Give this enumeration constant the correct access.  */
12428       set_current_access_from_decl (decl);
12429
12430       /* Actually build the enumerator itself.  */
12431       build_enumerator (DECL_NAME (decl), value, newtag);
12432     }
12433
12434   finish_enum (newtag);
12435   DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
12436     = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
12437 }
12438
12439 /* DECL is a FUNCTION_DECL that is a template specialization.  Return
12440    its type -- but without substituting the innermost set of template
12441    arguments.  So, innermost set of template parameters will appear in
12442    the type.  */
12443
12444 tree
12445 get_mostly_instantiated_function_type (tree decl)
12446 {
12447   tree fn_type;
12448   tree tmpl;
12449   tree targs;
12450   tree tparms;
12451   int parm_depth;
12452
12453   tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
12454   targs = DECL_TI_ARGS (decl);
12455   tparms = DECL_TEMPLATE_PARMS (tmpl);
12456   parm_depth = TMPL_PARMS_DEPTH (tparms);
12457
12458   /* There should be as many levels of arguments as there are levels
12459      of parameters.  */
12460   gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
12461
12462   fn_type = TREE_TYPE (tmpl);
12463
12464   if (parm_depth == 1)
12465     /* No substitution is necessary.  */
12466     ;
12467   else
12468     {
12469       int i, save_access_control;
12470       tree partial_args;
12471
12472       /* Replace the innermost level of the TARGS with NULL_TREEs to
12473          let tsubst know not to substitute for those parameters.  */
12474       partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
12475       for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
12476         SET_TMPL_ARGS_LEVEL (partial_args, i,
12477                              TMPL_ARGS_LEVEL (targs, i));
12478       SET_TMPL_ARGS_LEVEL (partial_args,
12479                            TMPL_ARGS_DEPTH (targs),
12480                            make_tree_vec (DECL_NTPARMS (tmpl)));
12481
12482       /* Disable access control as this function is used only during
12483          name-mangling.  */
12484       save_access_control = flag_access_control;
12485       flag_access_control = 0;
12486
12487       ++processing_template_decl;
12488       /* Now, do the (partial) substitution to figure out the
12489          appropriate function type.  */
12490       fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
12491       --processing_template_decl;
12492
12493       /* Substitute into the template parameters to obtain the real
12494          innermost set of parameters.  This step is important if the
12495          innermost set of template parameters contains value
12496          parameters whose types depend on outer template parameters.  */
12497       TREE_VEC_LENGTH (partial_args)--;
12498       tparms = tsubst_template_parms (tparms, partial_args, tf_error);
12499
12500       flag_access_control = save_access_control;
12501     }
12502
12503   return fn_type;
12504 }
12505
12506 /* Return truthvalue if we're processing a template different from
12507    the last one involved in diagnostics.  */
12508 int
12509 problematic_instantiation_changed (void)
12510 {
12511   return last_template_error_tick != tinst_level_tick;
12512 }
12513
12514 /* Remember current template involved in diagnostics.  */
12515 void
12516 record_last_problematic_instantiation (void)
12517 {
12518   last_template_error_tick = tinst_level_tick;
12519 }
12520
12521 tree
12522 current_instantiation (void)
12523 {
12524   return current_tinst_level;
12525 }
12526
12527 /* [temp.param] Check that template non-type parm TYPE is of an allowable
12528    type. Return zero for ok, nonzero for disallowed. Issue error and
12529    warning messages under control of COMPLAIN.  */
12530
12531 static int
12532 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
12533 {
12534   if (INTEGRAL_TYPE_P (type))
12535     return 0;
12536   else if (POINTER_TYPE_P (type))
12537     return 0;
12538   else if (TYPE_PTR_TO_MEMBER_P (type))
12539     return 0;
12540   else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
12541     return 0;
12542   else if (TREE_CODE (type) == TYPENAME_TYPE)
12543     return 0;
12544
12545   if (complain & tf_error)
12546     error ("%q#T is not a valid type for a template constant parameter", type);
12547   return 1;
12548 }
12549
12550 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
12551    Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
12552
12553 static bool
12554 dependent_type_p_r (tree type)
12555 {
12556   tree scope;
12557
12558   /* [temp.dep.type]
12559
12560      A type is dependent if it is:
12561
12562      -- a template parameter. Template template parameters are types
12563         for us (since TYPE_P holds true for them) so we handle
12564         them here.  */
12565   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
12566       || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
12567     return true;
12568   /* -- a qualified-id with a nested-name-specifier which contains a
12569         class-name that names a dependent type or whose unqualified-id
12570         names a dependent type.  */
12571   if (TREE_CODE (type) == TYPENAME_TYPE)
12572     return true;
12573   /* -- a cv-qualified type where the cv-unqualified type is
12574         dependent.  */
12575   type = TYPE_MAIN_VARIANT (type);
12576   /* -- a compound type constructed from any dependent type.  */
12577   if (TYPE_PTR_TO_MEMBER_P (type))
12578     return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
12579             || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
12580                                            (type)));
12581   else if (TREE_CODE (type) == POINTER_TYPE
12582            || TREE_CODE (type) == REFERENCE_TYPE)
12583     return dependent_type_p (TREE_TYPE (type));
12584   else if (TREE_CODE (type) == FUNCTION_TYPE
12585            || TREE_CODE (type) == METHOD_TYPE)
12586     {
12587       tree arg_type;
12588
12589       if (dependent_type_p (TREE_TYPE (type)))
12590         return true;
12591       for (arg_type = TYPE_ARG_TYPES (type);
12592            arg_type;
12593            arg_type = TREE_CHAIN (arg_type))
12594         if (dependent_type_p (TREE_VALUE (arg_type)))
12595           return true;
12596       return false;
12597     }
12598   /* -- an array type constructed from any dependent type or whose
12599         size is specified by a constant expression that is
12600         value-dependent.  */
12601   if (TREE_CODE (type) == ARRAY_TYPE)
12602     {
12603       if (TYPE_DOMAIN (type)
12604           && ((value_dependent_expression_p
12605                (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
12606               || (type_dependent_expression_p
12607                   (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))))
12608         return true;
12609       return dependent_type_p (TREE_TYPE (type));
12610     }
12611
12612   /* -- a template-id in which either the template name is a template
12613      parameter ...  */
12614   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
12615     return true;
12616   /* ... or any of the template arguments is a dependent type or
12617         an expression that is type-dependent or value-dependent.  */
12618   else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
12619            && (any_dependent_template_arguments_p
12620                (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
12621     return true;
12622
12623   /* All TYPEOF_TYPEs are dependent; if the argument of the `typeof'
12624      expression is not type-dependent, then it should already been
12625      have resolved.  */
12626   if (TREE_CODE (type) == TYPEOF_TYPE)
12627     return true;
12628
12629   /* The standard does not specifically mention types that are local
12630      to template functions or local classes, but they should be
12631      considered dependent too.  For example:
12632
12633        template <int I> void f() {
12634          enum E { a = I };
12635          S<sizeof (E)> s;
12636        }
12637
12638      The size of `E' cannot be known until the value of `I' has been
12639      determined.  Therefore, `E' must be considered dependent.  */
12640   scope = TYPE_CONTEXT (type);
12641   if (scope && TYPE_P (scope))
12642     return dependent_type_p (scope);
12643   else if (scope && TREE_CODE (scope) == FUNCTION_DECL)
12644     return type_dependent_expression_p (scope);
12645
12646   /* Other types are non-dependent.  */
12647   return false;
12648 }
12649
12650 /* Returns TRUE if TYPE is dependent, in the sense of
12651    [temp.dep.type].  */
12652
12653 bool
12654 dependent_type_p (tree type)
12655 {
12656   /* If there are no template parameters in scope, then there can't be
12657      any dependent types.  */
12658   if (!processing_template_decl)
12659     {
12660       /* If we are not processing a template, then nobody should be
12661          providing us with a dependent type.  */
12662       gcc_assert (type);
12663       gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM);
12664       return false;
12665     }
12666
12667   /* If the type is NULL, we have not computed a type for the entity
12668      in question; in that case, the type is dependent.  */
12669   if (!type)
12670     return true;
12671
12672   /* Erroneous types can be considered non-dependent.  */
12673   if (type == error_mark_node)
12674     return false;
12675
12676   /* If we have not already computed the appropriate value for TYPE,
12677      do so now.  */
12678   if (!TYPE_DEPENDENT_P_VALID (type))
12679     {
12680       TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
12681       TYPE_DEPENDENT_P_VALID (type) = 1;
12682     }
12683
12684   return TYPE_DEPENDENT_P (type);
12685 }
12686
12687 /* Returns TRUE if EXPRESSION is dependent, according to CRITERION.  */
12688
12689 static bool
12690 dependent_scope_ref_p (tree expression, bool criterion (tree))
12691 {
12692   tree scope;
12693   tree name;
12694
12695   gcc_assert (TREE_CODE (expression) == SCOPE_REF);
12696
12697   if (!TYPE_P (TREE_OPERAND (expression, 0)))
12698     return true;
12699
12700   scope = TREE_OPERAND (expression, 0);
12701   name = TREE_OPERAND (expression, 1);
12702
12703   /* [temp.dep.expr]
12704
12705      An id-expression is type-dependent if it contains a
12706      nested-name-specifier that contains a class-name that names a
12707      dependent type.  */
12708   /* The suggested resolution to Core Issue 2 implies that if the
12709      qualifying type is the current class, then we must peek
12710      inside it.  */
12711   if (DECL_P (name)
12712       && currently_open_class (scope)
12713       && !criterion (name))
12714     return false;
12715   if (dependent_type_p (scope))
12716     return true;
12717
12718   return false;
12719 }
12720
12721 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
12722    [temp.dep.constexpr].  EXPRESSION is already known to be a constant
12723    expression.  */
12724
12725 bool
12726 value_dependent_expression_p (tree expression)
12727 {
12728   if (!processing_template_decl)
12729     return false;
12730
12731   /* A name declared with a dependent type.  */
12732   if (DECL_P (expression) && type_dependent_expression_p (expression))
12733     return true;
12734
12735   switch (TREE_CODE (expression))
12736     {
12737     case IDENTIFIER_NODE:
12738       /* A name that has not been looked up -- must be dependent.  */
12739       return true;
12740
12741     case TEMPLATE_PARM_INDEX:
12742       /* A non-type template parm.  */
12743       return true;
12744
12745     case CONST_DECL:
12746       /* A non-type template parm.  */
12747       if (DECL_TEMPLATE_PARM_P (expression))
12748         return true;
12749       return false;
12750
12751     case VAR_DECL:
12752        /* A constant with integral or enumeration type and is initialized
12753           with an expression that is value-dependent.  */
12754       if (DECL_INITIAL (expression)
12755           && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (expression))
12756           && value_dependent_expression_p (DECL_INITIAL (expression)))
12757         return true;
12758       return false;
12759
12760     case DYNAMIC_CAST_EXPR:
12761     case STATIC_CAST_EXPR:
12762     case CONST_CAST_EXPR:
12763     case REINTERPRET_CAST_EXPR:
12764     case CAST_EXPR:
12765       /* These expressions are value-dependent if the type to which
12766          the cast occurs is dependent or the expression being casted
12767          is value-dependent.  */
12768       {
12769         tree type = TREE_TYPE (expression);
12770
12771         if (dependent_type_p (type))
12772           return true;
12773
12774         /* A functional cast has a list of operands.  */
12775         expression = TREE_OPERAND (expression, 0);
12776         if (!expression)
12777           {
12778             /* If there are no operands, it must be an expression such
12779                as "int()". This should not happen for aggregate types
12780                because it would form non-constant expressions.  */
12781             gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type));
12782
12783             return false;
12784           }
12785
12786         if (TREE_CODE (expression) == TREE_LIST)
12787           {
12788             for (; expression; expression = TREE_CHAIN (expression))
12789               if (value_dependent_expression_p (TREE_VALUE (expression)))
12790                 return true;
12791             return false;
12792           }
12793
12794         return value_dependent_expression_p (expression);
12795       }
12796
12797     case SIZEOF_EXPR:
12798     case ALIGNOF_EXPR:
12799       /* A `sizeof' expression is value-dependent if the operand is
12800          type-dependent.  */
12801       expression = TREE_OPERAND (expression, 0);
12802       if (TYPE_P (expression))
12803         return dependent_type_p (expression);
12804       return type_dependent_expression_p (expression);
12805
12806     case SCOPE_REF:
12807       return dependent_scope_ref_p (expression, value_dependent_expression_p);
12808
12809     case COMPONENT_REF:
12810       return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
12811               || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
12812
12813     case CALL_EXPR:
12814       /* A CALL_EXPR may appear in a constant expression if it is a
12815          call to a builtin function, e.g., __builtin_constant_p.  All
12816          such calls are value-dependent.  */
12817       return true;
12818
12819     default:
12820       /* A constant expression is value-dependent if any subexpression is
12821          value-dependent.  */
12822       switch (TREE_CODE_CLASS (TREE_CODE (expression)))
12823         {
12824         case tcc_reference:
12825         case tcc_unary:
12826           return (value_dependent_expression_p
12827                   (TREE_OPERAND (expression, 0)));
12828
12829         case tcc_comparison:
12830         case tcc_binary:
12831           return ((value_dependent_expression_p
12832                    (TREE_OPERAND (expression, 0)))
12833                   || (value_dependent_expression_p
12834                       (TREE_OPERAND (expression, 1))));
12835
12836         case tcc_expression:
12837           {
12838             int i;
12839             for (i = 0; i < TREE_CODE_LENGTH (TREE_CODE (expression)); ++i)
12840               /* In some cases, some of the operands may be missing.
12841                  (For example, in the case of PREDECREMENT_EXPR, the
12842                  amount to increment by may be missing.)  That doesn't
12843                  make the expression dependent.  */
12844               if (TREE_OPERAND (expression, i)
12845                   && (value_dependent_expression_p
12846                       (TREE_OPERAND (expression, i))))
12847                 return true;
12848             return false;
12849           }
12850
12851         default:
12852           break;
12853         }
12854     }
12855
12856   /* The expression is not value-dependent.  */
12857   return false;
12858 }
12859
12860 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
12861    [temp.dep.expr].  */
12862
12863 bool
12864 type_dependent_expression_p (tree expression)
12865 {
12866   if (!processing_template_decl)
12867     return false;
12868
12869   if (expression == error_mark_node)
12870     return false;
12871
12872   /* An unresolved name is always dependent.  */
12873   if (TREE_CODE (expression) == IDENTIFIER_NODE)
12874     return true;
12875
12876   /* Some expression forms are never type-dependent.  */
12877   if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
12878       || TREE_CODE (expression) == SIZEOF_EXPR
12879       || TREE_CODE (expression) == ALIGNOF_EXPR
12880       || TREE_CODE (expression) == TYPEID_EXPR
12881       || TREE_CODE (expression) == DELETE_EXPR
12882       || TREE_CODE (expression) == VEC_DELETE_EXPR
12883       || TREE_CODE (expression) == THROW_EXPR)
12884     return false;
12885
12886   /* The types of these expressions depends only on the type to which
12887      the cast occurs.  */
12888   if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
12889       || TREE_CODE (expression) == STATIC_CAST_EXPR
12890       || TREE_CODE (expression) == CONST_CAST_EXPR
12891       || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
12892       || TREE_CODE (expression) == CAST_EXPR)
12893     return dependent_type_p (TREE_TYPE (expression));
12894
12895   /* The types of these expressions depends only on the type created
12896      by the expression.  */
12897   if (TREE_CODE (expression) == NEW_EXPR
12898       || TREE_CODE (expression) == VEC_NEW_EXPR)
12899     {
12900       /* For NEW_EXPR tree nodes created inside a template, either
12901          the object type itself or a TREE_LIST may appear as the
12902          operand 1.  */
12903       tree type = TREE_OPERAND (expression, 1);
12904       if (TREE_CODE (type) == TREE_LIST)
12905         /* This is an array type.  We need to check array dimensions
12906            as well.  */
12907         return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
12908                || value_dependent_expression_p
12909                     (TREE_OPERAND (TREE_VALUE (type), 1));
12910       else
12911         return dependent_type_p (type);
12912     }
12913
12914   if (TREE_CODE (expression) == SCOPE_REF
12915       && dependent_scope_ref_p (expression,
12916                                 type_dependent_expression_p))
12917     return true;
12918
12919   if (TREE_CODE (expression) == FUNCTION_DECL
12920       && DECL_LANG_SPECIFIC (expression)
12921       && DECL_TEMPLATE_INFO (expression)
12922       && (any_dependent_template_arguments_p
12923           (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
12924     return true;
12925
12926   if (TREE_CODE (expression) == TEMPLATE_DECL
12927       && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
12928     return false;
12929
12930   if (TREE_TYPE (expression) == unknown_type_node)
12931     {
12932       if (TREE_CODE (expression) == ADDR_EXPR)
12933         return type_dependent_expression_p (TREE_OPERAND (expression, 0));
12934       if (TREE_CODE (expression) == COMPONENT_REF
12935           || TREE_CODE (expression) == OFFSET_REF)
12936         {
12937           if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
12938             return true;
12939           expression = TREE_OPERAND (expression, 1);
12940           if (TREE_CODE (expression) == IDENTIFIER_NODE)
12941             return false;
12942         }
12943       /* SCOPE_REF with non-null TREE_TYPE is always non-dependent.  */
12944       if (TREE_CODE (expression) == SCOPE_REF)
12945         return false;
12946
12947       if (TREE_CODE (expression) == BASELINK)
12948         expression = BASELINK_FUNCTIONS (expression);
12949
12950       if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
12951         {
12952           if (any_dependent_template_arguments_p
12953               (TREE_OPERAND (expression, 1)))
12954             return true;
12955           expression = TREE_OPERAND (expression, 0);
12956         }
12957       gcc_assert (TREE_CODE (expression) == OVERLOAD
12958                   || TREE_CODE (expression) == FUNCTION_DECL);
12959
12960       while (expression)
12961         {
12962           if (type_dependent_expression_p (OVL_CURRENT (expression)))
12963             return true;
12964           expression = OVL_NEXT (expression);
12965         }
12966       return false;
12967     }
12968
12969   gcc_assert (TREE_CODE (expression) != TYPE_DECL);
12970
12971   return (dependent_type_p (TREE_TYPE (expression)));
12972 }
12973
12974 /* Returns TRUE if ARGS (a TREE_LIST of arguments to a function call)
12975    contains a type-dependent expression.  */
12976
12977 bool
12978 any_type_dependent_arguments_p (tree args)
12979 {
12980   while (args)
12981     {
12982       tree arg = TREE_VALUE (args);
12983
12984       if (type_dependent_expression_p (arg))
12985         return true;
12986       args = TREE_CHAIN (args);
12987     }
12988   return false;
12989 }
12990
12991 /* Returns TRUE if the ARG (a template argument) is dependent.  */
12992
12993 static bool
12994 dependent_template_arg_p (tree arg)
12995 {
12996   if (!processing_template_decl)
12997     return false;
12998
12999   if (TREE_CODE (arg) == TEMPLATE_DECL
13000       || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
13001     return dependent_template_p (arg);
13002   else if (TYPE_P (arg))
13003     return dependent_type_p (arg);
13004   else
13005     return (type_dependent_expression_p (arg)
13006             || value_dependent_expression_p (arg));
13007 }
13008
13009 /* Returns true if ARGS (a collection of template arguments) contains
13010    any dependent arguments.  */
13011
13012 bool
13013 any_dependent_template_arguments_p (tree args)
13014 {
13015   int i;
13016   int j;
13017
13018   if (!args)
13019     return false;
13020   if (args == error_mark_node)
13021     return true;
13022
13023   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
13024     {
13025       tree level = TMPL_ARGS_LEVEL (args, i + 1);
13026       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
13027         if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
13028           return true;
13029     }
13030
13031   return false;
13032 }
13033
13034 /* Returns TRUE if the template TMPL is dependent.  */
13035
13036 bool
13037 dependent_template_p (tree tmpl)
13038 {
13039   if (TREE_CODE (tmpl) == OVERLOAD)
13040     {
13041       while (tmpl)
13042         {
13043           if (dependent_template_p (OVL_FUNCTION (tmpl)))
13044             return true;
13045           tmpl = OVL_CHAIN (tmpl);
13046         }
13047       return false;
13048     }
13049
13050   /* Template template parameters are dependent.  */
13051   if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
13052       || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
13053     return true;
13054   /* So are names that have not been looked up.  */
13055   if (TREE_CODE (tmpl) == SCOPE_REF
13056       || TREE_CODE (tmpl) == IDENTIFIER_NODE)
13057     return true;
13058   /* So are member templates of dependent classes.  */
13059   if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
13060     return dependent_type_p (DECL_CONTEXT (tmpl));
13061   return false;
13062 }
13063
13064 /* Returns TRUE if the specialization TMPL<ARGS> is dependent.  */
13065
13066 bool
13067 dependent_template_id_p (tree tmpl, tree args)
13068 {
13069   return (dependent_template_p (tmpl)
13070           || any_dependent_template_arguments_p (args));
13071 }
13072
13073 /* TYPE is a TYPENAME_TYPE.  Returns the ordinary TYPE to which the
13074    TYPENAME_TYPE corresponds.  Returns ERROR_MARK_NODE if no such TYPE
13075    can be found.  Note that this function peers inside uninstantiated
13076    templates and therefore should be used only in extremely limited
13077    situations.  ONLY_CURRENT_P restricts this peering to the currently
13078    open classes hierarchy (which is required when comparing types).  */
13079
13080 tree
13081 resolve_typename_type (tree type, bool only_current_p)
13082 {
13083   tree scope;
13084   tree name;
13085   tree decl;
13086   int quals;
13087   tree pushed_scope;
13088
13089   gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
13090
13091   scope = TYPE_CONTEXT (type);
13092   name = TYPE_IDENTIFIER (type);
13093
13094   /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
13095      it first before we can figure out what NAME refers to.  */
13096   if (TREE_CODE (scope) == TYPENAME_TYPE)
13097     scope = resolve_typename_type (scope, only_current_p);
13098   /* If we don't know what SCOPE refers to, then we cannot resolve the
13099      TYPENAME_TYPE.  */
13100   if (scope == error_mark_node || TREE_CODE (scope) == TYPENAME_TYPE)
13101     return error_mark_node;
13102   /* If the SCOPE is a template type parameter, we have no way of
13103      resolving the name.  */
13104   if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
13105     return type;
13106   /* If the SCOPE is not the current instantiation, there's no reason
13107      to look inside it.  */
13108   if (only_current_p && !currently_open_class (scope))
13109     return error_mark_node;
13110   /* If SCOPE is a partial instantiation, it will not have a valid
13111      TYPE_FIELDS list, so use the original template.  */
13112   scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
13113   /* Enter the SCOPE so that name lookup will be resolved as if we
13114      were in the class definition.  In particular, SCOPE will no
13115      longer be considered a dependent type.  */
13116   pushed_scope = push_scope (scope);
13117   /* Look up the declaration.  */
13118   decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true);
13119   /* Obtain the set of qualifiers applied to the TYPE.  */
13120   quals = cp_type_quals (type);
13121   /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
13122      find a TEMPLATE_DECL.  Otherwise, we want to find a TYPE_DECL.  */
13123   if (!decl)
13124     type = error_mark_node;
13125   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
13126            && TREE_CODE (decl) == TYPE_DECL)
13127     type = TREE_TYPE (decl);
13128   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
13129            && DECL_CLASS_TEMPLATE_P (decl))
13130     {
13131       tree tmpl;
13132       tree args;
13133       /* Obtain the template and the arguments.  */
13134       tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
13135       args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
13136       /* Instantiate the template.  */
13137       type = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
13138                                     /*entering_scope=*/0, tf_error | tf_user);
13139     }
13140   else
13141     type = error_mark_node;
13142   /* Qualify the resulting type.  */
13143   if (type != error_mark_node && quals)
13144     type = cp_build_qualified_type (type, quals);
13145   /* Leave the SCOPE.  */
13146   if (pushed_scope)
13147     pop_scope (pushed_scope);
13148
13149   return type;
13150 }
13151
13152 /* EXPR is an expression which is not type-dependent.  Return a proxy
13153    for EXPR that can be used to compute the types of larger
13154    expressions containing EXPR.  */
13155
13156 tree
13157 build_non_dependent_expr (tree expr)
13158 {
13159   tree inner_expr;
13160
13161   /* Preserve null pointer constants so that the type of things like
13162      "p == 0" where "p" is a pointer can be determined.  */
13163   if (null_ptr_cst_p (expr))
13164     return expr;
13165   /* Preserve OVERLOADs; the functions must be available to resolve
13166      types.  */
13167   inner_expr = expr;
13168   if (TREE_CODE (inner_expr) == ADDR_EXPR)
13169     inner_expr = TREE_OPERAND (inner_expr, 0);
13170   if (TREE_CODE (inner_expr) == COMPONENT_REF)
13171     inner_expr = TREE_OPERAND (inner_expr, 1);
13172   if (is_overloaded_fn (inner_expr)
13173       || TREE_CODE (inner_expr) == OFFSET_REF)
13174     return expr;
13175   /* There is no need to return a proxy for a variable.  */
13176   if (TREE_CODE (expr) == VAR_DECL)
13177     return expr;
13178   /* Preserve string constants; conversions from string constants to
13179      "char *" are allowed, even though normally a "const char *"
13180      cannot be used to initialize a "char *".  */
13181   if (TREE_CODE (expr) == STRING_CST)
13182     return expr;
13183   /* Preserve arithmetic constants, as an optimization -- there is no
13184      reason to create a new node.  */
13185   if (TREE_CODE (expr) == INTEGER_CST || TREE_CODE (expr) == REAL_CST)
13186     return expr;
13187   /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
13188      There is at least one place where we want to know that a
13189      particular expression is a throw-expression: when checking a ?:
13190      expression, there are special rules if the second or third
13191      argument is a throw-expression.  */
13192   if (TREE_CODE (expr) == THROW_EXPR)
13193     return expr;
13194
13195   if (TREE_CODE (expr) == COND_EXPR)
13196     return build3 (COND_EXPR,
13197                    TREE_TYPE (expr),
13198                    TREE_OPERAND (expr, 0),
13199                    (TREE_OPERAND (expr, 1)
13200                     ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
13201                     : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
13202                    build_non_dependent_expr (TREE_OPERAND (expr, 2)));
13203   if (TREE_CODE (expr) == COMPOUND_EXPR
13204       && !COMPOUND_EXPR_OVERLOADED (expr))
13205     return build2 (COMPOUND_EXPR,
13206                    TREE_TYPE (expr),
13207                    TREE_OPERAND (expr, 0),
13208                    build_non_dependent_expr (TREE_OPERAND (expr, 1)));
13209
13210   /* If the type is unknown, it can't really be non-dependent */
13211   gcc_assert (TREE_TYPE (expr) != unknown_type_node);
13212
13213   /* Otherwise, build a NON_DEPENDENT_EXPR.
13214
13215      REFERENCE_TYPEs are not stripped for expressions in templates
13216      because doing so would play havoc with mangling.  Consider, for
13217      example:
13218
13219        template <typename T> void f<T& g>() { g(); }
13220
13221      In the body of "f", the expression for "g" will have
13222      REFERENCE_TYPE, even though the standard says that it should
13223      not.  The reason is that we must preserve the syntactic form of
13224      the expression so that mangling (say) "f<g>" inside the body of
13225      "f" works out correctly.  Therefore, the REFERENCE_TYPE is
13226      stripped here.  */
13227   return build1 (NON_DEPENDENT_EXPR, non_reference (TREE_TYPE (expr)), expr);
13228 }
13229
13230 /* ARGS is a TREE_LIST of expressions as arguments to a function call.
13231    Return a new TREE_LIST with the various arguments replaced with
13232    equivalent non-dependent expressions.  */
13233
13234 tree
13235 build_non_dependent_args (tree args)
13236 {
13237   tree a;
13238   tree new_args;
13239
13240   new_args = NULL_TREE;
13241   for (a = args; a; a = TREE_CHAIN (a))
13242     new_args = tree_cons (NULL_TREE,
13243                           build_non_dependent_expr (TREE_VALUE (a)),
13244                           new_args);
13245   return nreverse (new_args);
13246 }
13247
13248 #include "gt-cp-pt.h"