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