OSDN Git Service

PR c++/30897
[pf3gnuchains/gcc-fork.git] / gcc / cp / pt.c
1 /* Handle parameterized types (templates) for GNU C++.
2    Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3    2001, 2002, 2003, 2004, 2005, 2007  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 3, 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 COPYING3.  If not see
21 <http://www.gnu.org/licenses/>.  */
22
23 /* Known bugs or deficiencies include:
24
25      all methods must be provided in header files; can't use a source
26      file that contains only the method templates and "just win".  */
27
28 #include "config.h"
29 #include "system.h"
30 #include "coretypes.h"
31 #include "tm.h"
32 #include "obstack.h"
33 #include "tree.h"
34 #include "pointer-set.h"
35 #include "flags.h"
36 #include "c-common.h"
37 #include "cp-tree.h"
38 #include "cp-objcp-common.h"
39 #include "tree-inline.h"
40 #include "decl.h"
41 #include "output.h"
42 #include "except.h"
43 #include "toplev.h"
44 #include "rtl.h"
45 #include "timevar.h"
46 #include "tree-iterator.h"
47 #include "vecprim.h"
48
49 /* The type of functions taking a tree, and some additional data, and
50    returning an int.  */
51 typedef int (*tree_fn_t) (tree, void*);
52
53 /* The PENDING_TEMPLATES is a TREE_LIST of templates whose
54    instantiations have been deferred, either because their definitions
55    were not yet available, or because we were putting off doing the work.  */
56 struct pending_template GTY (()) {
57   struct pending_template *next;
58   struct tinst_level *tinst;
59 };
60
61 static GTY(()) struct pending_template *pending_templates;
62 static GTY(()) struct pending_template *last_pending_template;
63
64 int processing_template_parmlist;
65 static int template_header_count;
66
67 static GTY(()) tree saved_trees;
68 static VEC(int,heap) *inline_parm_levels;
69
70 static GTY(()) struct tinst_level *current_tinst_level;
71
72 static GTY(()) tree saved_access_scope;
73
74 /* Live only within one (recursive) call to tsubst_expr.  We use
75    this to pass the statement expression node from the STMT_EXPR
76    to the EXPR_STMT that is its result.  */
77 static tree cur_stmt_expr;
78
79 /* A map from local variable declarations in the body of the template
80    presently being instantiated to the corresponding instantiated
81    local variables.  */
82 static htab_t local_specializations;
83
84 /* Contains canonical template parameter types. The vector is indexed by
85    the TEMPLATE_TYPE_IDX of the template parameter. Each element is a
86    TREE_LIST, whose TREE_VALUEs contain the canonical template
87    parameters of various types and levels.  */
88 static GTY(()) VEC(tree,gc) *canonical_template_parms;
89
90 #define UNIFY_ALLOW_NONE 0
91 #define UNIFY_ALLOW_MORE_CV_QUAL 1
92 #define UNIFY_ALLOW_LESS_CV_QUAL 2
93 #define UNIFY_ALLOW_DERIVED 4
94 #define UNIFY_ALLOW_INTEGER 8
95 #define UNIFY_ALLOW_OUTER_LEVEL 16
96 #define UNIFY_ALLOW_OUTER_MORE_CV_QUAL 32
97 #define UNIFY_ALLOW_OUTER_LESS_CV_QUAL 64
98
99 static void push_access_scope (tree);
100 static void pop_access_scope (tree);
101 static bool resolve_overloaded_unification (tree, tree, tree, tree,
102                                             unification_kind_t, int);
103 static int try_one_overload (tree, tree, tree, tree, tree,
104                              unification_kind_t, int, bool);
105 static int unify (tree, tree, tree, tree, int);
106 static void add_pending_template (tree);
107 static int push_tinst_level (tree);
108 static void pop_tinst_level (void);
109 static tree reopen_tinst_level (struct tinst_level *);
110 static tree tsubst_initializer_list (tree, tree);
111 static tree get_class_bindings (tree, tree, tree);
112 static tree coerce_template_parms (tree, tree, tree, tsubst_flags_t,
113                                    bool, bool);
114 static void tsubst_enum (tree, tree, tree);
115 static tree add_to_template_args (tree, tree);
116 static tree add_outermost_template_args (tree, tree);
117 static bool check_instantiated_args (tree, tree, tsubst_flags_t);
118 static int maybe_adjust_types_for_deduction (unification_kind_t, tree*, tree*,
119                                              tree);
120 static int  type_unification_real (tree, tree, tree, tree,
121                                    int, unification_kind_t, int);
122 static void note_template_header (int);
123 static tree convert_nontype_argument_function (tree, tree);
124 static tree convert_nontype_argument (tree, tree);
125 static tree convert_template_argument (tree, tree, tree,
126                                        tsubst_flags_t, int, tree);
127 static int for_each_template_parm (tree, tree_fn_t, void*,
128                                    struct pointer_set_t*);
129 static tree expand_template_argument_pack (tree);
130 static tree build_template_parm_index (int, int, int, tree, tree);
131 static bool inline_needs_template_parms (tree);
132 static void push_inline_template_parms_recursive (tree, int);
133 static tree retrieve_local_specialization (tree);
134 static void register_local_specialization (tree, tree);
135 static tree reduce_template_parm_level (tree, tree, int, tree, tsubst_flags_t);
136 static int mark_template_parm (tree, void *);
137 static int template_parm_this_level_p (tree, void *);
138 static tree tsubst_friend_function (tree, tree);
139 static tree tsubst_friend_class (tree, tree);
140 static int can_complete_type_without_circularity (tree);
141 static tree get_bindings (tree, tree, tree, bool);
142 static int template_decl_level (tree);
143 static int check_cv_quals_for_unify (int, tree, tree);
144 static void template_parm_level_and_index (tree, int*, int*);
145 static int unify_pack_expansion (tree, tree, tree, tree, int, bool, bool);
146 static tree tsubst_template_arg (tree, tree, tsubst_flags_t, tree);
147 static tree tsubst_template_args (tree, tree, tsubst_flags_t, tree);
148 static tree tsubst_template_parms (tree, tree, tsubst_flags_t);
149 static void regenerate_decl_from_template (tree, tree);
150 static tree most_specialized_class (tree, tree);
151 static tree tsubst_aggr_type (tree, tree, tsubst_flags_t, tree, int);
152 static tree tsubst_arg_types (tree, tree, tsubst_flags_t, tree);
153 static tree tsubst_function_type (tree, tree, tsubst_flags_t, tree);
154 static bool check_specialization_scope (void);
155 static tree process_partial_specialization (tree);
156 static void set_current_access_from_decl (tree);
157 static tree get_template_base (tree, tree, tree, tree);
158 static tree try_class_unification (tree, tree, tree, tree);
159 static int coerce_template_template_parms (tree, tree, tsubst_flags_t,
160                                            tree, tree);
161 static int template_args_equal (tree, tree);
162 static void tsubst_default_arguments (tree);
163 static tree for_each_template_parm_r (tree *, int *, void *);
164 static tree copy_default_args_to_explicit_spec_1 (tree, tree);
165 static void copy_default_args_to_explicit_spec (tree);
166 static int invalid_nontype_parm_type_p (tree, tsubst_flags_t);
167 static int eq_local_specializations (const void *, const void *);
168 static bool dependent_template_arg_p (tree);
169 static bool any_template_arguments_need_structural_equality_p (tree);
170 static bool dependent_type_p_r (tree);
171 static tree tsubst (tree, tree, tsubst_flags_t, tree);
172 static tree tsubst_expr (tree, tree, tsubst_flags_t, tree, bool);
173 static tree tsubst_copy (tree, tree, tsubst_flags_t, tree);
174 static tree tsubst_pack_expansion (tree, tree, tsubst_flags_t, tree);
175
176 /* Make the current scope suitable for access checking when we are
177    processing T.  T can be FUNCTION_DECL for instantiated function
178    template, or VAR_DECL for static member variable (need by
179    instantiate_decl).  */
180
181 static void
182 push_access_scope (tree t)
183 {
184   gcc_assert (TREE_CODE (t) == FUNCTION_DECL
185               || TREE_CODE (t) == VAR_DECL);
186
187   if (DECL_FRIEND_CONTEXT (t))
188     push_nested_class (DECL_FRIEND_CONTEXT (t));
189   else if (DECL_CLASS_SCOPE_P (t))
190     push_nested_class (DECL_CONTEXT (t));
191   else
192     push_to_top_level ();
193
194   if (TREE_CODE (t) == FUNCTION_DECL)
195     {
196       saved_access_scope = tree_cons
197         (NULL_TREE, current_function_decl, saved_access_scope);
198       current_function_decl = t;
199     }
200 }
201
202 /* Restore the scope set up by push_access_scope.  T is the node we
203    are processing.  */
204
205 static void
206 pop_access_scope (tree t)
207 {
208   if (TREE_CODE (t) == FUNCTION_DECL)
209     {
210       current_function_decl = TREE_VALUE (saved_access_scope);
211       saved_access_scope = TREE_CHAIN (saved_access_scope);
212     }
213
214   if (DECL_FRIEND_CONTEXT (t) || DECL_CLASS_SCOPE_P (t))
215     pop_nested_class ();
216   else
217     pop_from_top_level ();
218 }
219
220 /* Do any processing required when DECL (a member template
221    declaration) is finished.  Returns the TEMPLATE_DECL corresponding
222    to DECL, unless it is a specialization, in which case the DECL
223    itself is returned.  */
224
225 tree
226 finish_member_template_decl (tree decl)
227 {
228   if (decl == error_mark_node)
229     return error_mark_node;
230
231   gcc_assert (DECL_P (decl));
232
233   if (TREE_CODE (decl) == TYPE_DECL)
234     {
235       tree type;
236
237       type = TREE_TYPE (decl);
238       if (IS_AGGR_TYPE (type)
239           && CLASSTYPE_TEMPLATE_INFO (type)
240           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
241         {
242           tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
243           check_member_template (tmpl);
244           return tmpl;
245         }
246       return NULL_TREE;
247     }
248   else if (TREE_CODE (decl) == FIELD_DECL)
249     error ("data member %qD cannot be a member template", decl);
250   else if (DECL_TEMPLATE_INFO (decl))
251     {
252       if (!DECL_TEMPLATE_SPECIALIZATION (decl))
253         {
254           check_member_template (DECL_TI_TEMPLATE (decl));
255           return DECL_TI_TEMPLATE (decl);
256         }
257       else
258         return decl;
259     }
260   else
261     error ("invalid member template declaration %qD", decl);
262
263   return error_mark_node;
264 }
265
266 /* Return the template info node corresponding to T, whatever T is.  */
267
268 tree
269 get_template_info (tree t)
270 {
271   tree tinfo = NULL_TREE;
272
273   if (DECL_P (t) && DECL_LANG_SPECIFIC (t))
274     tinfo = DECL_TEMPLATE_INFO (t);
275
276   if (!tinfo && TREE_CODE (t) == TYPE_DECL)
277     t = TREE_TYPE (t);
278
279   if (TAGGED_TYPE_P (t))
280     tinfo = TYPE_TEMPLATE_INFO (t);
281
282   return tinfo;
283 }
284
285 /* Returns the template nesting level of the indicated class TYPE.
286
287    For example, in:
288      template <class T>
289      struct A
290      {
291        template <class U>
292        struct B {};
293      };
294
295    A<T>::B<U> has depth two, while A<T> has depth one.
296    Both A<T>::B<int> and A<int>::B<U> have depth one, if
297    they are instantiations, not specializations.
298
299    This function is guaranteed to return 0 if passed NULL_TREE so
300    that, for example, `template_class_depth (current_class_type)' is
301    always safe.  */
302
303 int
304 template_class_depth (tree type)
305 {
306   int depth;
307
308   for (depth = 0;
309        type && TREE_CODE (type) != NAMESPACE_DECL;
310        type = (TREE_CODE (type) == FUNCTION_DECL)
311          ? CP_DECL_CONTEXT (type) : TYPE_CONTEXT (type))
312     {
313       tree tinfo = get_template_info (type);
314
315       if (tinfo && PRIMARY_TEMPLATE_P (TI_TEMPLATE (tinfo))
316           && uses_template_parms (INNERMOST_TEMPLATE_ARGS (TI_ARGS (tinfo))))
317         ++depth;
318     }
319
320   return depth;
321 }
322
323 /* Subroutine of maybe_begin_member_template_processing.
324    Returns true if processing DECL needs us to push template parms.  */
325
326 static bool
327 inline_needs_template_parms (tree decl)
328 {
329   if (! DECL_TEMPLATE_INFO (decl))
330     return false;
331
332   return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (most_general_template (decl)))
333           > (processing_template_decl + DECL_TEMPLATE_SPECIALIZATION (decl)));
334 }
335
336 /* Subroutine of maybe_begin_member_template_processing.
337    Push the template parms in PARMS, starting from LEVELS steps into the
338    chain, and ending at the beginning, since template parms are listed
339    innermost first.  */
340
341 static void
342 push_inline_template_parms_recursive (tree parmlist, int levels)
343 {
344   tree parms = TREE_VALUE (parmlist);
345   int i;
346
347   if (levels > 1)
348     push_inline_template_parms_recursive (TREE_CHAIN (parmlist), levels - 1);
349
350   ++processing_template_decl;
351   current_template_parms
352     = tree_cons (size_int (processing_template_decl),
353                  parms, current_template_parms);
354   TEMPLATE_PARMS_FOR_INLINE (current_template_parms) = 1;
355
356   begin_scope (TREE_VEC_LENGTH (parms) ? sk_template_parms : sk_template_spec,
357                NULL);
358   for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
359     {
360       tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
361
362       if (parm == error_mark_node)
363         continue;
364
365       gcc_assert (DECL_P (parm));
366
367       switch (TREE_CODE (parm))
368         {
369         case TYPE_DECL:
370         case TEMPLATE_DECL:
371           pushdecl (parm);
372           break;
373
374         case PARM_DECL:
375           {
376             /* Make a CONST_DECL as is done in process_template_parm.
377                It is ugly that we recreate this here; the original
378                version built in process_template_parm is no longer
379                available.  */
380             tree decl = build_decl (CONST_DECL, DECL_NAME (parm),
381                                     TREE_TYPE (parm));
382             DECL_ARTIFICIAL (decl) = 1;
383             TREE_CONSTANT (decl) = 1;
384             TREE_INVARIANT (decl) = 1;
385             TREE_READONLY (decl) = 1;
386             DECL_INITIAL (decl) = DECL_INITIAL (parm);
387             SET_DECL_TEMPLATE_PARM_P (decl);
388             pushdecl (decl);
389           }
390           break;
391
392         default:
393           gcc_unreachable ();
394         }
395     }
396 }
397
398 /* Restore the template parameter context for a member template or
399    a friend template defined in a class definition.  */
400
401 void
402 maybe_begin_member_template_processing (tree decl)
403 {
404   tree parms;
405   int levels = 0;
406
407   if (inline_needs_template_parms (decl))
408     {
409       parms = DECL_TEMPLATE_PARMS (most_general_template (decl));
410       levels = TMPL_PARMS_DEPTH (parms) - processing_template_decl;
411
412       if (DECL_TEMPLATE_SPECIALIZATION (decl))
413         {
414           --levels;
415           parms = TREE_CHAIN (parms);
416         }
417
418       push_inline_template_parms_recursive (parms, levels);
419     }
420
421   /* Remember how many levels of template parameters we pushed so that
422      we can pop them later.  */
423   VEC_safe_push (int, heap, inline_parm_levels, levels);
424 }
425
426 /* Undo the effects of maybe_begin_member_template_processing.  */
427
428 void
429 maybe_end_member_template_processing (void)
430 {
431   int i;
432   int last;
433
434   if (VEC_length (int, inline_parm_levels) == 0)
435     return;
436
437   last = VEC_pop (int, inline_parm_levels);
438   for (i = 0; i < last; ++i)
439     {
440       --processing_template_decl;
441       current_template_parms = TREE_CHAIN (current_template_parms);
442       poplevel (0, 0, 0);
443     }
444 }
445
446 /* Return a new template argument vector which contains all of ARGS,
447    but has as its innermost set of arguments the EXTRA_ARGS.  */
448
449 static tree
450 add_to_template_args (tree args, tree extra_args)
451 {
452   tree new_args;
453   int extra_depth;
454   int i;
455   int j;
456
457   extra_depth = TMPL_ARGS_DEPTH (extra_args);
458   new_args = make_tree_vec (TMPL_ARGS_DEPTH (args) + extra_depth);
459
460   for (i = 1; i <= TMPL_ARGS_DEPTH (args); ++i)
461     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (args, i));
462
463   for (j = 1; j <= extra_depth; ++j, ++i)
464     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (extra_args, j));
465
466   return new_args;
467 }
468
469 /* Like add_to_template_args, but only the outermost ARGS are added to
470    the EXTRA_ARGS.  In particular, all but TMPL_ARGS_DEPTH
471    (EXTRA_ARGS) levels are added.  This function is used to combine
472    the template arguments from a partial instantiation with the
473    template arguments used to attain the full instantiation from the
474    partial instantiation.  */
475
476 static tree
477 add_outermost_template_args (tree args, tree extra_args)
478 {
479   tree new_args;
480
481   /* If there are more levels of EXTRA_ARGS than there are ARGS,
482      something very fishy is going on.  */
483   gcc_assert (TMPL_ARGS_DEPTH (args) >= TMPL_ARGS_DEPTH (extra_args));
484
485   /* If *all* the new arguments will be the EXTRA_ARGS, just return
486      them.  */
487   if (TMPL_ARGS_DEPTH (args) == TMPL_ARGS_DEPTH (extra_args))
488     return extra_args;
489
490   /* For the moment, we make ARGS look like it contains fewer levels.  */
491   TREE_VEC_LENGTH (args) -= TMPL_ARGS_DEPTH (extra_args);
492
493   new_args = add_to_template_args (args, extra_args);
494
495   /* Now, we restore ARGS to its full dimensions.  */
496   TREE_VEC_LENGTH (args) += TMPL_ARGS_DEPTH (extra_args);
497
498   return new_args;
499 }
500
501 /* Return the N levels of innermost template arguments from the ARGS.  */
502
503 tree
504 get_innermost_template_args (tree args, int n)
505 {
506   tree new_args;
507   int extra_levels;
508   int i;
509
510   gcc_assert (n >= 0);
511
512   /* If N is 1, just return the innermost set of template arguments.  */
513   if (n == 1)
514     return TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args));
515
516   /* If we're not removing anything, just return the arguments we were
517      given.  */
518   extra_levels = TMPL_ARGS_DEPTH (args) - n;
519   gcc_assert (extra_levels >= 0);
520   if (extra_levels == 0)
521     return args;
522
523   /* Make a new set of arguments, not containing the outer arguments.  */
524   new_args = make_tree_vec (n);
525   for (i = 1; i <= n; ++i)
526     SET_TMPL_ARGS_LEVEL (new_args, i,
527                          TMPL_ARGS_LEVEL (args, i + extra_levels));
528
529   return new_args;
530 }
531
532 /* The inverse of get_innermost_template_args: Return all but the innermost
533    EXTRA_LEVELS levels of template arguments from the ARGS.  */
534
535 static tree
536 strip_innermost_template_args (tree args, int extra_levels)
537 {
538   tree new_args;
539   int n = TMPL_ARGS_DEPTH (args) - extra_levels;
540   int i;
541
542   gcc_assert (n >= 0);
543
544   /* If N is 1, just return the outermost set of template arguments.  */
545   if (n == 1)
546     return TMPL_ARGS_LEVEL (args, 1);
547
548   /* If we're not removing anything, just return the arguments we were
549      given.  */
550   gcc_assert (extra_levels >= 0);
551   if (extra_levels == 0)
552     return args;
553
554   /* Make a new set of arguments, not containing the inner arguments.  */
555   new_args = make_tree_vec (n);
556   for (i = 1; i <= n; ++i)
557     SET_TMPL_ARGS_LEVEL (new_args, i,
558                          TMPL_ARGS_LEVEL (args, i));
559
560   return new_args;
561 }
562
563 /* We've got a template header coming up; push to a new level for storing
564    the parms.  */
565
566 void
567 begin_template_parm_list (void)
568 {
569   /* We use a non-tag-transparent scope here, which causes pushtag to
570      put tags in this scope, rather than in the enclosing class or
571      namespace scope.  This is the right thing, since we want
572      TEMPLATE_DECLS, and not TYPE_DECLS for template classes.  For a
573      global template class, push_template_decl handles putting the
574      TEMPLATE_DECL into top-level scope.  For a nested template class,
575      e.g.:
576
577        template <class T> struct S1 {
578          template <class T> struct S2 {};
579        };
580
581      pushtag contains special code to call pushdecl_with_scope on the
582      TEMPLATE_DECL for S2.  */
583   begin_scope (sk_template_parms, NULL);
584   ++processing_template_decl;
585   ++processing_template_parmlist;
586   note_template_header (0);
587 }
588
589 /* This routine is called when a specialization is declared.  If it is
590    invalid to declare a specialization here, an error is reported and
591    false is returned, otherwise this routine will return true.  */
592
593 static bool
594 check_specialization_scope (void)
595 {
596   tree scope = current_scope ();
597
598   /* [temp.expl.spec]
599
600      An explicit specialization shall be declared in the namespace of
601      which the template is a member, or, for member templates, in the
602      namespace of which the enclosing class or enclosing class
603      template is a member.  An explicit specialization of a member
604      function, member class or static data member of a class template
605      shall be declared in the namespace of which the class template
606      is a member.  */
607   if (scope && TREE_CODE (scope) != NAMESPACE_DECL)
608     {
609       error ("explicit specialization in non-namespace scope %qD", scope);
610       return false;
611     }
612
613   /* [temp.expl.spec]
614
615      In an explicit specialization declaration for a member of a class
616      template or a member template that appears in namespace scope,
617      the member template and some of its enclosing class templates may
618      remain unspecialized, except that the declaration shall not
619      explicitly specialize a class member template if its enclosing
620      class templates are not explicitly specialized as well.  */
621   if (current_template_parms)
622     {
623       error ("enclosing class templates are not explicitly specialized");
624       return false;
625     }
626
627   return true;
628 }
629
630 /* We've just seen template <>.  */
631
632 bool
633 begin_specialization (void)
634 {
635   begin_scope (sk_template_spec, NULL);
636   note_template_header (1);
637   return check_specialization_scope ();
638 }
639
640 /* Called at then end of processing a declaration preceded by
641    template<>.  */
642
643 void
644 end_specialization (void)
645 {
646   finish_scope ();
647   reset_specialization ();
648 }
649
650 /* Any template <>'s that we have seen thus far are not referring to a
651    function specialization.  */
652
653 void
654 reset_specialization (void)
655 {
656   processing_specialization = 0;
657   template_header_count = 0;
658 }
659
660 /* We've just seen a template header.  If SPECIALIZATION is nonzero,
661    it was of the form template <>.  */
662
663 static void
664 note_template_header (int specialization)
665 {
666   processing_specialization = specialization;
667   template_header_count++;
668 }
669
670 /* We're beginning an explicit instantiation.  */
671
672 void
673 begin_explicit_instantiation (void)
674 {
675   gcc_assert (!processing_explicit_instantiation);
676   processing_explicit_instantiation = true;
677 }
678
679
680 void
681 end_explicit_instantiation (void)
682 {
683   gcc_assert (processing_explicit_instantiation);
684   processing_explicit_instantiation = false;
685 }
686
687 /* An explicit specialization or partial specialization TMPL is being
688    declared.  Check that the namespace in which the specialization is
689    occurring is permissible.  Returns false iff it is invalid to
690    specialize TMPL in the current namespace.  */
691
692 static bool
693 check_specialization_namespace (tree tmpl)
694 {
695   tree tpl_ns = decl_namespace_context (tmpl);
696
697   /* [tmpl.expl.spec]
698
699      An explicit specialization shall be declared in the namespace of
700      which the template is a member, or, for member templates, in the
701      namespace of which the enclosing class or enclosing class
702      template is a member.  An explicit specialization of a member
703      function, member class or static data member of a class template
704      shall be declared in the namespace of which the class template is
705      a member.  */
706   if (is_associated_namespace (current_namespace, tpl_ns))
707     /* Same or super-using namespace.  */
708     return true;
709   else
710     {
711       pedwarn ("specialization of %qD in different namespace", tmpl);
712       pedwarn ("  from definition of %q+#D", tmpl);
713       return false;
714     }
715 }
716
717 /* SPEC is an explicit instantiation.  Check that it is valid to
718    perform this explicit instantiation in the current namespace.  */
719
720 static void
721 check_explicit_instantiation_namespace (tree spec)
722 {
723   tree ns;
724
725   /* DR 275: An explicit instantiation shall appear in an enclosing
726      namespace of its template.  */
727   ns = decl_namespace_context (spec);
728   if (!is_ancestor (current_namespace, ns))
729     pedwarn ("explicit instantiation of %qD in namespace %qD "
730              "(which does not enclose namespace %qD)",
731              spec, current_namespace, ns);
732 }
733
734 /* The TYPE is being declared.  If it is a template type, that means it
735    is a partial specialization.  Do appropriate error-checking.  */
736
737 tree
738 maybe_process_partial_specialization (tree type)
739 {
740   tree context;
741
742   if (type == error_mark_node)
743     return error_mark_node;
744
745   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
746     {
747       error ("name of class shadows template template parameter %qD",
748              TYPE_NAME (type));
749       return error_mark_node;
750     }
751
752   context = TYPE_CONTEXT (type);
753
754   if (CLASS_TYPE_P (type) && CLASSTYPE_USE_TEMPLATE (type))
755     {
756       /* This is for ordinary explicit specialization and partial
757          specialization of a template class such as:
758
759            template <> class C<int>;
760
761          or:
762
763            template <class T> class C<T*>;
764
765          Make sure that `C<int>' and `C<T*>' are implicit instantiations.  */
766
767       if (CLASSTYPE_IMPLICIT_INSTANTIATION (type)
768           && !COMPLETE_TYPE_P (type))
769         {
770           check_specialization_namespace (CLASSTYPE_TI_TEMPLATE (type));
771           SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
772           if (processing_template_decl)
773             push_template_decl (TYPE_MAIN_DECL (type));
774         }
775       else if (CLASSTYPE_TEMPLATE_INSTANTIATION (type))
776         error ("specialization of %qT after instantiation", type);
777     }
778   else if (CLASS_TYPE_P (type)
779            && !CLASSTYPE_USE_TEMPLATE (type)
780            && CLASSTYPE_TEMPLATE_INFO (type)
781            && context && CLASS_TYPE_P (context)
782            && CLASSTYPE_TEMPLATE_INFO (context))
783     {
784       /* This is for an explicit specialization of member class
785          template according to [temp.expl.spec/18]:
786
787            template <> template <class U> class C<int>::D;
788
789          The context `C<int>' must be an implicit instantiation.
790          Otherwise this is just a member class template declared
791          earlier like:
792
793            template <> class C<int> { template <class U> class D; };
794            template <> template <class U> class C<int>::D;
795
796          In the first case, `C<int>::D' is a specialization of `C<T>::D'
797          while in the second case, `C<int>::D' is a primary template
798          and `C<T>::D' may not exist.  */
799
800       if (CLASSTYPE_IMPLICIT_INSTANTIATION (context)
801           && !COMPLETE_TYPE_P (type))
802         {
803           tree t;
804
805           if (current_namespace
806               != decl_namespace_context (CLASSTYPE_TI_TEMPLATE (type)))
807             {
808               pedwarn ("specializing %q#T in different namespace", type);
809               pedwarn ("  from definition of %q+#D",
810                        CLASSTYPE_TI_TEMPLATE (type));
811             }
812
813           /* Check for invalid specialization after instantiation:
814
815                template <> template <> class C<int>::D<int>;
816                template <> template <class U> class C<int>::D;  */
817
818           for (t = DECL_TEMPLATE_INSTANTIATIONS
819                  (most_general_template (CLASSTYPE_TI_TEMPLATE (type)));
820                t; t = TREE_CHAIN (t))
821             if (TREE_VALUE (t) != type
822                 && TYPE_CONTEXT (TREE_VALUE (t)) == context)
823               error ("specialization %qT after instantiation %qT",
824                      type, TREE_VALUE (t));
825
826           /* Mark TYPE as a specialization.  And as a result, we only
827              have one level of template argument for the innermost
828              class template.  */
829           SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
830           CLASSTYPE_TI_ARGS (type)
831             = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type));
832         }
833     }
834   else if (processing_specialization)
835     {
836       error ("explicit specialization of non-template %qT", type);
837       return error_mark_node;
838     }
839
840   return type;
841 }
842
843 /* Returns nonzero if we can optimize the retrieval of specializations
844    for TMPL, a TEMPLATE_DECL.  In particular, for such a template, we
845    do not use DECL_TEMPLATE_SPECIALIZATIONS at all.  */
846
847 static inline bool
848 optimize_specialization_lookup_p (tree tmpl)
849 {
850   return (DECL_FUNCTION_TEMPLATE_P (tmpl)
851           && DECL_CLASS_SCOPE_P (tmpl)
852           /* DECL_CLASS_SCOPE_P holds of T::f even if T is a template
853              parameter.  */
854           && CLASS_TYPE_P (DECL_CONTEXT (tmpl))
855           /* The optimized lookup depends on the fact that the
856              template arguments for the member function template apply
857              purely to the containing class, which is not true if the
858              containing class is an explicit or partial
859              specialization.  */
860           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (tmpl))
861           && !DECL_MEMBER_TEMPLATE_P (tmpl)
862           && !DECL_CONV_FN_P (tmpl)
863           /* It is possible to have a template that is not a member
864              template and is not a member of a template class:
865
866              template <typename T>
867              struct S { friend A::f(); };
868
869              Here, the friend function is a template, but the context does
870              not have template information.  The optimized lookup relies
871              on having ARGS be the template arguments for both the class
872              and the function template.  */
873           && !DECL_FRIEND_P (DECL_TEMPLATE_RESULT (tmpl)));
874 }
875
876 /* Retrieve the specialization (in the sense of [temp.spec] - a
877    specialization is either an instantiation or an explicit
878    specialization) of TMPL for the given template ARGS.  If there is
879    no such specialization, return NULL_TREE.  The ARGS are a vector of
880    arguments, or a vector of vectors of arguments, in the case of
881    templates with more than one level of parameters.
882
883    If TMPL is a type template and CLASS_SPECIALIZATIONS_P is true,
884    then we search for a partial specialization matching ARGS.  This
885    parameter is ignored if TMPL is not a class template.  */
886
887 static tree
888 retrieve_specialization (tree tmpl, tree args,
889                          bool class_specializations_p)
890 {
891   if (args == error_mark_node)
892     return NULL_TREE;
893
894   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
895
896   /* There should be as many levels of arguments as there are
897      levels of parameters.  */
898   gcc_assert (TMPL_ARGS_DEPTH (args)
899               == TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl)));
900
901   if (optimize_specialization_lookup_p (tmpl))
902     {
903       tree class_template;
904       tree class_specialization;
905       VEC(tree,gc) *methods;
906       tree fns;
907       int idx;
908
909       /* The template arguments actually apply to the containing
910          class.  Find the class specialization with those
911          arguments.  */
912       class_template = CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (tmpl));
913       class_specialization
914         = retrieve_specialization (class_template, args,
915                                    /*class_specializations_p=*/false);
916       if (!class_specialization)
917         return NULL_TREE;
918       /* Now, find the appropriate entry in the CLASSTYPE_METHOD_VEC
919          for the specialization.  */
920       idx = class_method_index_for_fn (class_specialization, tmpl);
921       if (idx == -1)
922         return NULL_TREE;
923       /* Iterate through the methods with the indicated name, looking
924          for the one that has an instance of TMPL.  */
925       methods = CLASSTYPE_METHOD_VEC (class_specialization);
926       for (fns = VEC_index (tree, methods, idx); fns; fns = OVL_NEXT (fns))
927         {
928           tree fn = OVL_CURRENT (fns);
929           if (DECL_TEMPLATE_INFO (fn) && DECL_TI_TEMPLATE (fn) == tmpl)
930             return fn;
931         }
932       return NULL_TREE;
933     }
934   else
935     {
936       tree *sp;
937       tree *head;
938
939       /* Class templates store their instantiations on the
940          DECL_TEMPLATE_INSTANTIATIONS list; other templates use the
941          DECL_TEMPLATE_SPECIALIZATIONS list.  */
942       if (!class_specializations_p
943           && TREE_CODE (DECL_TEMPLATE_RESULT (tmpl)) == TYPE_DECL
944           && TAGGED_TYPE_P (TREE_TYPE (tmpl)))
945         sp = &DECL_TEMPLATE_INSTANTIATIONS (tmpl);
946       else
947         sp = &DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
948       head = sp;
949       /* Iterate through the list until we find a matching template.  */
950       while (*sp != NULL_TREE)
951         {
952           tree spec = *sp;
953
954           if (comp_template_args (TREE_PURPOSE (spec), args))
955             {
956               /* Use the move-to-front heuristic to speed up future
957                  searches.  */
958               if (spec != *head)
959                 {
960                   *sp = TREE_CHAIN (*sp);
961                   TREE_CHAIN (spec) = *head;
962                   *head = spec;
963                 }
964               return TREE_VALUE (spec);
965             }
966           sp = &TREE_CHAIN (spec);
967         }
968     }
969
970   return NULL_TREE;
971 }
972
973 /* Like retrieve_specialization, but for local declarations.  */
974
975 static tree
976 retrieve_local_specialization (tree tmpl)
977 {
978   tree spec = (tree) htab_find_with_hash (local_specializations, tmpl,
979                                           htab_hash_pointer (tmpl));
980   return spec ? TREE_PURPOSE (spec) : NULL_TREE;
981 }
982
983 /* Returns nonzero iff DECL is a specialization of TMPL.  */
984
985 int
986 is_specialization_of (tree decl, tree tmpl)
987 {
988   tree t;
989
990   if (TREE_CODE (decl) == FUNCTION_DECL)
991     {
992       for (t = decl;
993            t != NULL_TREE;
994            t = DECL_TEMPLATE_INFO (t) ? DECL_TI_TEMPLATE (t) : NULL_TREE)
995         if (t == tmpl)
996           return 1;
997     }
998   else
999     {
1000       gcc_assert (TREE_CODE (decl) == TYPE_DECL);
1001
1002       for (t = TREE_TYPE (decl);
1003            t != NULL_TREE;
1004            t = CLASSTYPE_USE_TEMPLATE (t)
1005              ? TREE_TYPE (CLASSTYPE_TI_TEMPLATE (t)) : NULL_TREE)
1006         if (same_type_ignoring_top_level_qualifiers_p (t, TREE_TYPE (tmpl)))
1007           return 1;
1008     }
1009
1010   return 0;
1011 }
1012
1013 /* Returns nonzero iff DECL is a specialization of friend declaration
1014    FRIEND according to [temp.friend].  */
1015
1016 bool
1017 is_specialization_of_friend (tree decl, tree friend)
1018 {
1019   bool need_template = true;
1020   int template_depth;
1021
1022   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
1023               || TREE_CODE (decl) == TYPE_DECL);
1024
1025   /* For [temp.friend/6] when FRIEND is an ordinary member function
1026      of a template class, we want to check if DECL is a specialization
1027      if this.  */
1028   if (TREE_CODE (friend) == FUNCTION_DECL
1029       && DECL_TEMPLATE_INFO (friend)
1030       && !DECL_USE_TEMPLATE (friend))
1031     {
1032       /* We want a TEMPLATE_DECL for `is_specialization_of'.  */
1033       friend = DECL_TI_TEMPLATE (friend);
1034       need_template = false;
1035     }
1036   else if (TREE_CODE (friend) == TEMPLATE_DECL
1037            && !PRIMARY_TEMPLATE_P (friend))
1038     need_template = false;
1039
1040   /* There is nothing to do if this is not a template friend.  */
1041   if (TREE_CODE (friend) != TEMPLATE_DECL)
1042     return false;
1043
1044   if (is_specialization_of (decl, friend))
1045     return true;
1046
1047   /* [temp.friend/6]
1048      A member of a class template may be declared to be a friend of a
1049      non-template class.  In this case, the corresponding member of
1050      every specialization of the class template is a friend of the
1051      class granting friendship.
1052
1053      For example, given a template friend declaration
1054
1055        template <class T> friend void A<T>::f();
1056
1057      the member function below is considered a friend
1058
1059        template <> struct A<int> {
1060          void f();
1061        };
1062
1063      For this type of template friend, TEMPLATE_DEPTH below will be
1064      nonzero.  To determine if DECL is a friend of FRIEND, we first
1065      check if the enclosing class is a specialization of another.  */
1066
1067   template_depth = template_class_depth (DECL_CONTEXT (friend));
1068   if (template_depth
1069       && DECL_CLASS_SCOPE_P (decl)
1070       && is_specialization_of (TYPE_NAME (DECL_CONTEXT (decl)),
1071                                CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (friend))))
1072     {
1073       /* Next, we check the members themselves.  In order to handle
1074          a few tricky cases, such as when FRIEND's are
1075
1076            template <class T> friend void A<T>::g(T t);
1077            template <class T> template <T t> friend void A<T>::h();
1078
1079          and DECL's are
1080
1081            void A<int>::g(int);
1082            template <int> void A<int>::h();
1083
1084          we need to figure out ARGS, the template arguments from
1085          the context of DECL.  This is required for template substitution
1086          of `T' in the function parameter of `g' and template parameter
1087          of `h' in the above examples.  Here ARGS corresponds to `int'.  */
1088
1089       tree context = DECL_CONTEXT (decl);
1090       tree args = NULL_TREE;
1091       int current_depth = 0;
1092
1093       while (current_depth < template_depth)
1094         {
1095           if (CLASSTYPE_TEMPLATE_INFO (context))
1096             {
1097               if (current_depth == 0)
1098                 args = TYPE_TI_ARGS (context);
1099               else
1100                 args = add_to_template_args (TYPE_TI_ARGS (context), args);
1101               current_depth++;
1102             }
1103           context = TYPE_CONTEXT (context);
1104         }
1105
1106       if (TREE_CODE (decl) == FUNCTION_DECL)
1107         {
1108           bool is_template;
1109           tree friend_type;
1110           tree decl_type;
1111           tree friend_args_type;
1112           tree decl_args_type;
1113
1114           /* Make sure that both DECL and FRIEND are templates or
1115              non-templates.  */
1116           is_template = DECL_TEMPLATE_INFO (decl)
1117                         && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl));
1118           if (need_template ^ is_template)
1119             return false;
1120           else if (is_template)
1121             {
1122               /* If both are templates, check template parameter list.  */
1123               tree friend_parms
1124                 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend),
1125                                          args, tf_none);
1126               if (!comp_template_parms
1127                      (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (decl)),
1128                       friend_parms))
1129                 return false;
1130
1131               decl_type = TREE_TYPE (DECL_TI_TEMPLATE (decl));
1132             }
1133           else
1134             decl_type = TREE_TYPE (decl);
1135
1136           friend_type = tsubst_function_type (TREE_TYPE (friend), args,
1137                                               tf_none, NULL_TREE);
1138           if (friend_type == error_mark_node)
1139             return false;
1140
1141           /* Check if return types match.  */
1142           if (!same_type_p (TREE_TYPE (decl_type), TREE_TYPE (friend_type)))
1143             return false;
1144
1145           /* Check if function parameter types match, ignoring the
1146              `this' parameter.  */
1147           friend_args_type = TYPE_ARG_TYPES (friend_type);
1148           decl_args_type = TYPE_ARG_TYPES (decl_type);
1149           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (friend))
1150             friend_args_type = TREE_CHAIN (friend_args_type);
1151           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1152             decl_args_type = TREE_CHAIN (decl_args_type);
1153
1154           return compparms (decl_args_type, friend_args_type);
1155         }
1156       else
1157         {
1158           /* DECL is a TYPE_DECL */
1159           bool is_template;
1160           tree decl_type = TREE_TYPE (decl);
1161
1162           /* Make sure that both DECL and FRIEND are templates or
1163              non-templates.  */
1164           is_template
1165             = CLASSTYPE_TEMPLATE_INFO (decl_type)
1166               && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (decl_type));
1167
1168           if (need_template ^ is_template)
1169             return false;
1170           else if (is_template)
1171             {
1172               tree friend_parms;
1173               /* If both are templates, check the name of the two
1174                  TEMPLATE_DECL's first because is_friend didn't.  */
1175               if (DECL_NAME (CLASSTYPE_TI_TEMPLATE (decl_type))
1176                   != DECL_NAME (friend))
1177                 return false;
1178
1179               /* Now check template parameter list.  */
1180               friend_parms
1181                 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend),
1182                                          args, tf_none);
1183               return comp_template_parms
1184                 (DECL_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (decl_type)),
1185                  friend_parms);
1186             }
1187           else
1188             return (DECL_NAME (decl)
1189                     == DECL_NAME (friend));
1190         }
1191     }
1192   return false;
1193 }
1194
1195 /* Register the specialization SPEC as a specialization of TMPL with
1196    the indicated ARGS.  IS_FRIEND indicates whether the specialization
1197    is actually just a friend declaration.  Returns SPEC, or an
1198    equivalent prior declaration, if available.  */
1199
1200 static tree
1201 register_specialization (tree spec, tree tmpl, tree args, bool is_friend)
1202 {
1203   tree fn;
1204
1205   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
1206
1207   if (TREE_CODE (spec) == FUNCTION_DECL
1208       && uses_template_parms (DECL_TI_ARGS (spec)))
1209     /* This is the FUNCTION_DECL for a partial instantiation.  Don't
1210        register it; we want the corresponding TEMPLATE_DECL instead.
1211        We use `uses_template_parms (DECL_TI_ARGS (spec))' rather than
1212        the more obvious `uses_template_parms (spec)' to avoid problems
1213        with default function arguments.  In particular, given
1214        something like this:
1215
1216           template <class T> void f(T t1, T t = T())
1217
1218        the default argument expression is not substituted for in an
1219        instantiation unless and until it is actually needed.  */
1220     return spec;
1221
1222   fn = retrieve_specialization (tmpl, args,
1223                                 /*class_specializations_p=*/false);
1224   /* We can sometimes try to re-register a specialization that we've
1225      already got.  In particular, regenerate_decl_from_template calls
1226      duplicate_decls which will update the specialization list.  But,
1227      we'll still get called again here anyhow.  It's more convenient
1228      to simply allow this than to try to prevent it.  */
1229   if (fn == spec)
1230     return spec;
1231   else if (fn && DECL_TEMPLATE_SPECIALIZATION (spec))
1232     {
1233       if (DECL_TEMPLATE_INSTANTIATION (fn))
1234         {
1235           if (TREE_USED (fn)
1236               || DECL_EXPLICIT_INSTANTIATION (fn))
1237             {
1238               error ("specialization of %qD after instantiation",
1239                      fn);
1240               return error_mark_node;
1241             }
1242           else
1243             {
1244               tree clone;
1245               /* This situation should occur only if the first
1246                  specialization is an implicit instantiation, the
1247                  second is an explicit specialization, and the
1248                  implicit instantiation has not yet been used.  That
1249                  situation can occur if we have implicitly
1250                  instantiated a member function and then specialized
1251                  it later.
1252
1253                  We can also wind up here if a friend declaration that
1254                  looked like an instantiation turns out to be a
1255                  specialization:
1256
1257                    template <class T> void foo(T);
1258                    class S { friend void foo<>(int) };
1259                    template <> void foo(int);
1260
1261                  We transform the existing DECL in place so that any
1262                  pointers to it become pointers to the updated
1263                  declaration.
1264
1265                  If there was a definition for the template, but not
1266                  for the specialization, we want this to look as if
1267                  there were no definition, and vice versa.  */
1268               DECL_INITIAL (fn) = NULL_TREE;
1269               duplicate_decls (spec, fn, is_friend);
1270               /* The call to duplicate_decls will have applied
1271                  [temp.expl.spec]:
1272
1273                    An explicit specialization of a function template
1274                    is inline only if it is explicitly declared to be,
1275                    and independently of whether its function template
1276                    is.
1277
1278                 to the primary function; now copy the inline bits to
1279                 the various clones.  */
1280               FOR_EACH_CLONE (clone, fn)
1281                 {
1282                   DECL_DECLARED_INLINE_P (clone)
1283                     = DECL_DECLARED_INLINE_P (fn);
1284                   DECL_INLINE (clone)
1285                     = DECL_INLINE (fn);
1286                 }
1287               check_specialization_namespace (fn);
1288
1289               return fn;
1290             }
1291         }
1292       else if (DECL_TEMPLATE_SPECIALIZATION (fn))
1293         {
1294           if (!duplicate_decls (spec, fn, is_friend) && DECL_INITIAL (spec))
1295             /* Dup decl failed, but this is a new definition. Set the
1296                line number so any errors match this new
1297                definition.  */
1298             DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (spec);
1299
1300           return fn;
1301         }
1302     }
1303
1304   /* A specialization must be declared in the same namespace as the
1305      template it is specializing.  */
1306   if (DECL_TEMPLATE_SPECIALIZATION (spec)
1307       && !check_specialization_namespace (tmpl))
1308     DECL_CONTEXT (spec) = FROB_CONTEXT (decl_namespace_context (tmpl));
1309
1310   if (!optimize_specialization_lookup_p (tmpl))
1311     DECL_TEMPLATE_SPECIALIZATIONS (tmpl)
1312       = tree_cons (args, spec, DECL_TEMPLATE_SPECIALIZATIONS (tmpl));
1313
1314   return spec;
1315 }
1316
1317 /* Unregister the specialization SPEC as a specialization of TMPL.
1318    Replace it with NEW_SPEC, if NEW_SPEC is non-NULL.  Returns true
1319    if the SPEC was listed as a specialization of TMPL.  */
1320
1321 bool
1322 reregister_specialization (tree spec, tree tmpl, tree new_spec)
1323 {
1324   tree* s;
1325
1326   for (s = &DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
1327        *s != NULL_TREE;
1328        s = &TREE_CHAIN (*s))
1329     if (TREE_VALUE (*s) == spec)
1330       {
1331         if (!new_spec)
1332           *s = TREE_CHAIN (*s);
1333         else
1334           TREE_VALUE (*s) = new_spec;
1335         return 1;
1336       }
1337
1338   return 0;
1339 }
1340
1341 /* Compare an entry in the local specializations hash table P1 (which
1342    is really a pointer to a TREE_LIST) with P2 (which is really a
1343    DECL).  */
1344
1345 static int
1346 eq_local_specializations (const void *p1, const void *p2)
1347 {
1348   return TREE_VALUE ((const_tree) p1) == (const_tree) p2;
1349 }
1350
1351 /* Hash P1, an entry in the local specializations table.  */
1352
1353 static hashval_t
1354 hash_local_specialization (const void* p1)
1355 {
1356   return htab_hash_pointer (TREE_VALUE ((const_tree) p1));
1357 }
1358
1359 /* Like register_specialization, but for local declarations.  We are
1360    registering SPEC, an instantiation of TMPL.  */
1361
1362 static void
1363 register_local_specialization (tree spec, tree tmpl)
1364 {
1365   void **slot;
1366
1367   slot = htab_find_slot_with_hash (local_specializations, tmpl,
1368                                    htab_hash_pointer (tmpl), INSERT);
1369   *slot = build_tree_list (spec, tmpl);
1370 }
1371
1372 /* TYPE is a class type.  Returns true if TYPE is an explicitly
1373    specialized class.  */
1374
1375 bool
1376 explicit_class_specialization_p (tree type)
1377 {
1378   if (!CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
1379     return false;
1380   return !uses_template_parms (CLASSTYPE_TI_ARGS (type));
1381 }
1382
1383 /* Print the list of candidate FNS in an error message.  */
1384
1385 void
1386 print_candidates (tree fns)
1387 {
1388   tree fn;
1389
1390   const char *str = "candidates are:";
1391
1392   for (fn = fns; fn != NULL_TREE; fn = TREE_CHAIN (fn))
1393     {
1394       tree f;
1395
1396       for (f = TREE_VALUE (fn); f; f = OVL_NEXT (f))
1397         error ("%s %+#D", str, OVL_CURRENT (f));
1398       str = "               ";
1399     }
1400 }
1401
1402 /* Returns the template (one of the functions given by TEMPLATE_ID)
1403    which can be specialized to match the indicated DECL with the
1404    explicit template args given in TEMPLATE_ID.  The DECL may be
1405    NULL_TREE if none is available.  In that case, the functions in
1406    TEMPLATE_ID are non-members.
1407
1408    If NEED_MEMBER_TEMPLATE is nonzero the function is known to be a
1409    specialization of a member template.
1410
1411    The TEMPLATE_COUNT is the number of references to qualifying
1412    template classes that appeared in the name of the function. See
1413    check_explicit_specialization for a more accurate description.
1414
1415    TSK indicates what kind of template declaration (if any) is being
1416    declared.  TSK_TEMPLATE indicates that the declaration given by
1417    DECL, though a FUNCTION_DECL, has template parameters, and is
1418    therefore a template function.
1419
1420    The template args (those explicitly specified and those deduced)
1421    are output in a newly created vector *TARGS_OUT.
1422
1423    If it is impossible to determine the result, an error message is
1424    issued.  The error_mark_node is returned to indicate failure.  */
1425
1426 static tree
1427 determine_specialization (tree template_id,
1428                           tree decl,
1429                           tree* targs_out,
1430                           int need_member_template,
1431                           int template_count,
1432                           tmpl_spec_kind tsk)
1433 {
1434   tree fns;
1435   tree targs;
1436   tree explicit_targs;
1437   tree candidates = NULL_TREE;
1438   /* A TREE_LIST of templates of which DECL may be a specialization.
1439      The TREE_VALUE of each node is a TEMPLATE_DECL.  The
1440      corresponding TREE_PURPOSE is the set of template arguments that,
1441      when used to instantiate the template, would produce a function
1442      with the signature of DECL.  */
1443   tree templates = NULL_TREE;
1444   int header_count;
1445   struct cp_binding_level *b;
1446
1447   *targs_out = NULL_TREE;
1448
1449   if (template_id == error_mark_node || decl == error_mark_node)
1450     return error_mark_node;
1451
1452   fns = TREE_OPERAND (template_id, 0);
1453   explicit_targs = TREE_OPERAND (template_id, 1);
1454
1455   if (fns == error_mark_node)
1456     return error_mark_node;
1457
1458   /* Check for baselinks.  */
1459   if (BASELINK_P (fns))
1460     fns = BASELINK_FUNCTIONS (fns);
1461
1462   if (!is_overloaded_fn (fns))
1463     {
1464       error ("%qD is not a function template", fns);
1465       return error_mark_node;
1466     }
1467
1468   /* Count the number of template headers specified for this
1469      specialization.  */
1470   header_count = 0;
1471   for (b = current_binding_level;
1472        b->kind == sk_template_parms;
1473        b = b->level_chain)
1474     ++header_count;
1475
1476   for (; fns; fns = OVL_NEXT (fns))
1477     {
1478       tree fn = OVL_CURRENT (fns);
1479
1480       if (TREE_CODE (fn) == TEMPLATE_DECL)
1481         {
1482           tree decl_arg_types;
1483           tree fn_arg_types;
1484
1485           /* In case of explicit specialization, we need to check if
1486              the number of template headers appearing in the specialization
1487              is correct. This is usually done in check_explicit_specialization,
1488              but the check done there cannot be exhaustive when specializing
1489              member functions. Consider the following code:
1490
1491              template <> void A<int>::f(int);
1492              template <> template <> void A<int>::f(int);
1493
1494              Assuming that A<int> is not itself an explicit specialization
1495              already, the first line specializes "f" which is a non-template
1496              member function, whilst the second line specializes "f" which
1497              is a template member function. So both lines are syntactically
1498              correct, and check_explicit_specialization does not reject
1499              them.
1500
1501              Here, we can do better, as we are matching the specialization
1502              against the declarations. We count the number of template
1503              headers, and we check if they match TEMPLATE_COUNT + 1
1504              (TEMPLATE_COUNT is the number of qualifying template classes,
1505              plus there must be another header for the member template
1506              itself).
1507
1508              Notice that if header_count is zero, this is not a
1509              specialization but rather a template instantiation, so there
1510              is no check we can perform here.  */
1511           if (header_count && header_count != template_count + 1)
1512             continue;
1513
1514           /* Check that the number of template arguments at the
1515              innermost level for DECL is the same as for FN.  */
1516           if (current_binding_level->kind == sk_template_parms
1517               && !current_binding_level->explicit_spec_p
1518               && (TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (fn))
1519                   != TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS
1520                                       (current_template_parms))))
1521             continue;
1522
1523           /* DECL might be a specialization of FN.  */
1524           decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1525           fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
1526
1527           /* For a non-static member function, we need to make sure
1528              that the const qualification is the same.  Since
1529              get_bindings does not try to merge the "this" parameter,
1530              we must do the comparison explicitly.  */
1531           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1532               && !same_type_p (TREE_VALUE (fn_arg_types),
1533                                TREE_VALUE (decl_arg_types)))
1534             continue;
1535
1536           /* Skip the "this" parameter and, for constructors of
1537              classes with virtual bases, the VTT parameter.  A
1538              full specialization of a constructor will have a VTT
1539              parameter, but a template never will.  */ 
1540           decl_arg_types 
1541             = skip_artificial_parms_for (decl, decl_arg_types);
1542           fn_arg_types 
1543             = skip_artificial_parms_for (fn, fn_arg_types);
1544
1545           /* Check that the number of function parameters matches.
1546              For example,
1547                template <class T> void f(int i = 0);
1548                template <> void f<int>();
1549              The specialization f<int> is invalid but is not caught
1550              by get_bindings below.  */
1551           if (list_length (fn_arg_types) != list_length (decl_arg_types))
1552             continue;
1553
1554           /* Function templates cannot be specializations; there are
1555              no partial specializations of functions.  Therefore, if
1556              the type of DECL does not match FN, there is no
1557              match.  */
1558           if (tsk == tsk_template)
1559             {
1560               if (compparms (fn_arg_types, decl_arg_types))
1561                 candidates = tree_cons (NULL_TREE, fn, candidates);
1562               continue;
1563             }
1564
1565           /* See whether this function might be a specialization of this
1566              template.  */
1567           targs = get_bindings (fn, decl, explicit_targs, /*check_ret=*/true);
1568
1569           if (!targs)
1570             /* We cannot deduce template arguments that when used to
1571                specialize TMPL will produce DECL.  */
1572             continue;
1573
1574           /* Save this template, and the arguments deduced.  */
1575           templates = tree_cons (targs, fn, templates);
1576         }
1577       else if (need_member_template)
1578         /* FN is an ordinary member function, and we need a
1579            specialization of a member template.  */
1580         ;
1581       else if (TREE_CODE (fn) != FUNCTION_DECL)
1582         /* We can get IDENTIFIER_NODEs here in certain erroneous
1583            cases.  */
1584         ;
1585       else if (!DECL_FUNCTION_MEMBER_P (fn))
1586         /* This is just an ordinary non-member function.  Nothing can
1587            be a specialization of that.  */
1588         ;
1589       else if (DECL_ARTIFICIAL (fn))
1590         /* Cannot specialize functions that are created implicitly.  */
1591         ;
1592       else
1593         {
1594           tree decl_arg_types;
1595
1596           /* This is an ordinary member function.  However, since
1597              we're here, we can assume it's enclosing class is a
1598              template class.  For example,
1599
1600                template <typename T> struct S { void f(); };
1601                template <> void S<int>::f() {}
1602
1603              Here, S<int>::f is a non-template, but S<int> is a
1604              template class.  If FN has the same type as DECL, we
1605              might be in business.  */
1606
1607           if (!DECL_TEMPLATE_INFO (fn))
1608             /* Its enclosing class is an explicit specialization
1609                of a template class.  This is not a candidate.  */
1610             continue;
1611
1612           if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
1613                             TREE_TYPE (TREE_TYPE (fn))))
1614             /* The return types differ.  */
1615             continue;
1616
1617           /* Adjust the type of DECL in case FN is a static member.  */
1618           decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1619           if (DECL_STATIC_FUNCTION_P (fn)
1620               && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1621             decl_arg_types = TREE_CHAIN (decl_arg_types);
1622
1623           if (compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
1624                          decl_arg_types))
1625             /* They match!  */
1626             candidates = tree_cons (NULL_TREE, fn, candidates);
1627         }
1628     }
1629
1630   if (templates && TREE_CHAIN (templates))
1631     {
1632       /* We have:
1633
1634            [temp.expl.spec]
1635
1636            It is possible for a specialization with a given function
1637            signature to be instantiated from more than one function
1638            template.  In such cases, explicit specification of the
1639            template arguments must be used to uniquely identify the
1640            function template specialization being specialized.
1641
1642          Note that here, there's no suggestion that we're supposed to
1643          determine which of the candidate templates is most
1644          specialized.  However, we, also have:
1645
1646            [temp.func.order]
1647
1648            Partial ordering of overloaded function template
1649            declarations is used in the following contexts to select
1650            the function template to which a function template
1651            specialization refers:
1652
1653            -- when an explicit specialization refers to a function
1654               template.
1655
1656          So, we do use the partial ordering rules, at least for now.
1657          This extension can only serve to make invalid programs valid,
1658          so it's safe.  And, there is strong anecdotal evidence that
1659          the committee intended the partial ordering rules to apply;
1660          the EDG front end has that behavior, and John Spicer claims
1661          that the committee simply forgot to delete the wording in
1662          [temp.expl.spec].  */
1663       tree tmpl = most_specialized_instantiation (templates);
1664       if (tmpl != error_mark_node)
1665         {
1666           templates = tmpl;
1667           TREE_CHAIN (templates) = NULL_TREE;
1668         }
1669     }
1670
1671   if (templates == NULL_TREE && candidates == NULL_TREE)
1672     {
1673       error ("template-id %qD for %q+D does not match any template "
1674              "declaration", template_id, decl);
1675       return error_mark_node;
1676     }
1677   else if ((templates && TREE_CHAIN (templates))
1678            || (candidates && TREE_CHAIN (candidates))
1679            || (templates && candidates))
1680     {
1681       error ("ambiguous template specialization %qD for %q+D",
1682              template_id, decl);
1683       chainon (candidates, templates);
1684       print_candidates (candidates);
1685       return error_mark_node;
1686     }
1687
1688   /* We have one, and exactly one, match.  */
1689   if (candidates)
1690     {
1691       tree fn = TREE_VALUE (candidates);
1692       /* DECL is a re-declaration of a template function.  */
1693       if (TREE_CODE (fn) == TEMPLATE_DECL)
1694         return fn;
1695       /* It was a specialization of an ordinary member function in a
1696          template class.  */
1697       *targs_out = copy_node (DECL_TI_ARGS (fn));
1698       return DECL_TI_TEMPLATE (fn);
1699     }
1700
1701   /* It was a specialization of a template.  */
1702   targs = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (TREE_VALUE (templates)));
1703   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (targs))
1704     {
1705       *targs_out = copy_node (targs);
1706       SET_TMPL_ARGS_LEVEL (*targs_out,
1707                            TMPL_ARGS_DEPTH (*targs_out),
1708                            TREE_PURPOSE (templates));
1709     }
1710   else
1711     *targs_out = TREE_PURPOSE (templates);
1712   return TREE_VALUE (templates);
1713 }
1714
1715 /* Returns a chain of parameter types, exactly like the SPEC_TYPES,
1716    but with the default argument values filled in from those in the
1717    TMPL_TYPES.  */
1718
1719 static tree
1720 copy_default_args_to_explicit_spec_1 (tree spec_types,
1721                                       tree tmpl_types)
1722 {
1723   tree new_spec_types;
1724
1725   if (!spec_types)
1726     return NULL_TREE;
1727
1728   if (spec_types == void_list_node)
1729     return void_list_node;
1730
1731   /* Substitute into the rest of the list.  */
1732   new_spec_types =
1733     copy_default_args_to_explicit_spec_1 (TREE_CHAIN (spec_types),
1734                                           TREE_CHAIN (tmpl_types));
1735
1736   /* Add the default argument for this parameter.  */
1737   return hash_tree_cons (TREE_PURPOSE (tmpl_types),
1738                          TREE_VALUE (spec_types),
1739                          new_spec_types);
1740 }
1741
1742 /* DECL is an explicit specialization.  Replicate default arguments
1743    from the template it specializes.  (That way, code like:
1744
1745      template <class T> void f(T = 3);
1746      template <> void f(double);
1747      void g () { f (); }
1748
1749    works, as required.)  An alternative approach would be to look up
1750    the correct default arguments at the call-site, but this approach
1751    is consistent with how implicit instantiations are handled.  */
1752
1753 static void
1754 copy_default_args_to_explicit_spec (tree decl)
1755 {
1756   tree tmpl;
1757   tree spec_types;
1758   tree tmpl_types;
1759   tree new_spec_types;
1760   tree old_type;
1761   tree new_type;
1762   tree t;
1763   tree object_type = NULL_TREE;
1764   tree in_charge = NULL_TREE;
1765   tree vtt = NULL_TREE;
1766
1767   /* See if there's anything we need to do.  */
1768   tmpl = DECL_TI_TEMPLATE (decl);
1769   tmpl_types = TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (tmpl)));
1770   for (t = tmpl_types; t; t = TREE_CHAIN (t))
1771     if (TREE_PURPOSE (t))
1772       break;
1773   if (!t)
1774     return;
1775
1776   old_type = TREE_TYPE (decl);
1777   spec_types = TYPE_ARG_TYPES (old_type);
1778
1779   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1780     {
1781       /* Remove the this pointer, but remember the object's type for
1782          CV quals.  */
1783       object_type = TREE_TYPE (TREE_VALUE (spec_types));
1784       spec_types = TREE_CHAIN (spec_types);
1785       tmpl_types = TREE_CHAIN (tmpl_types);
1786
1787       if (DECL_HAS_IN_CHARGE_PARM_P (decl))
1788         {
1789           /* DECL may contain more parameters than TMPL due to the extra
1790              in-charge parameter in constructors and destructors.  */
1791           in_charge = spec_types;
1792           spec_types = TREE_CHAIN (spec_types);
1793         }
1794       if (DECL_HAS_VTT_PARM_P (decl))
1795         {
1796           vtt = spec_types;
1797           spec_types = TREE_CHAIN (spec_types);
1798         }
1799     }
1800
1801   /* Compute the merged default arguments.  */
1802   new_spec_types =
1803     copy_default_args_to_explicit_spec_1 (spec_types, tmpl_types);
1804
1805   /* Compute the new FUNCTION_TYPE.  */
1806   if (object_type)
1807     {
1808       if (vtt)
1809         new_spec_types = hash_tree_cons (TREE_PURPOSE (vtt),
1810                                          TREE_VALUE (vtt),
1811                                          new_spec_types);
1812
1813       if (in_charge)
1814         /* Put the in-charge parameter back.  */
1815         new_spec_types = hash_tree_cons (TREE_PURPOSE (in_charge),
1816                                          TREE_VALUE (in_charge),
1817                                          new_spec_types);
1818
1819       new_type = build_method_type_directly (object_type,
1820                                              TREE_TYPE (old_type),
1821                                              new_spec_types);
1822     }
1823   else
1824     new_type = build_function_type (TREE_TYPE (old_type),
1825                                     new_spec_types);
1826   new_type = cp_build_type_attribute_variant (new_type,
1827                                               TYPE_ATTRIBUTES (old_type));
1828   new_type = build_exception_variant (new_type,
1829                                       TYPE_RAISES_EXCEPTIONS (old_type));
1830   TREE_TYPE (decl) = new_type;
1831 }
1832
1833 /* Check to see if the function just declared, as indicated in
1834    DECLARATOR, and in DECL, is a specialization of a function
1835    template.  We may also discover that the declaration is an explicit
1836    instantiation at this point.
1837
1838    Returns DECL, or an equivalent declaration that should be used
1839    instead if all goes well.  Issues an error message if something is
1840    amiss.  Returns error_mark_node if the error is not easily
1841    recoverable.
1842
1843    FLAGS is a bitmask consisting of the following flags:
1844
1845    2: The function has a definition.
1846    4: The function is a friend.
1847
1848    The TEMPLATE_COUNT is the number of references to qualifying
1849    template classes that appeared in the name of the function.  For
1850    example, in
1851
1852      template <class T> struct S { void f(); };
1853      void S<int>::f();
1854
1855    the TEMPLATE_COUNT would be 1.  However, explicitly specialized
1856    classes are not counted in the TEMPLATE_COUNT, so that in
1857
1858      template <class T> struct S {};
1859      template <> struct S<int> { void f(); }
1860      template <> void S<int>::f();
1861
1862    the TEMPLATE_COUNT would be 0.  (Note that this declaration is
1863    invalid; there should be no template <>.)
1864
1865    If the function is a specialization, it is marked as such via
1866    DECL_TEMPLATE_SPECIALIZATION.  Furthermore, its DECL_TEMPLATE_INFO
1867    is set up correctly, and it is added to the list of specializations
1868    for that template.  */
1869
1870 tree
1871 check_explicit_specialization (tree declarator,
1872                                tree decl,
1873                                int template_count,
1874                                int flags)
1875 {
1876   int have_def = flags & 2;
1877   int is_friend = flags & 4;
1878   int specialization = 0;
1879   int explicit_instantiation = 0;
1880   int member_specialization = 0;
1881   tree ctype = DECL_CLASS_CONTEXT (decl);
1882   tree dname = DECL_NAME (decl);
1883   tmpl_spec_kind tsk;
1884
1885   if (is_friend)
1886     {
1887       if (!processing_specialization)
1888         tsk = tsk_none;
1889       else
1890         tsk = tsk_excessive_parms;
1891     }
1892   else
1893     tsk = current_tmpl_spec_kind (template_count);
1894
1895   switch (tsk)
1896     {
1897     case tsk_none:
1898       if (processing_specialization)
1899         {
1900           specialization = 1;
1901           SET_DECL_TEMPLATE_SPECIALIZATION (decl);
1902         }
1903       else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
1904         {
1905           if (is_friend)
1906             /* This could be something like:
1907
1908                template <class T> void f(T);
1909                class S { friend void f<>(int); }  */
1910             specialization = 1;
1911           else
1912             {
1913               /* This case handles bogus declarations like template <>
1914                  template <class T> void f<int>(); */
1915
1916               error ("template-id %qD in declaration of primary template",
1917                      declarator);
1918               return decl;
1919             }
1920         }
1921       break;
1922
1923     case tsk_invalid_member_spec:
1924       /* The error has already been reported in
1925          check_specialization_scope.  */
1926       return error_mark_node;
1927
1928     case tsk_invalid_expl_inst:
1929       error ("template parameter list used in explicit instantiation");
1930
1931       /* Fall through.  */
1932
1933     case tsk_expl_inst:
1934       if (have_def)
1935         error ("definition provided for explicit instantiation");
1936
1937       explicit_instantiation = 1;
1938       break;
1939
1940     case tsk_excessive_parms:
1941     case tsk_insufficient_parms:
1942       if (tsk == tsk_excessive_parms)
1943         error ("too many template parameter lists in declaration of %qD",
1944                decl);
1945       else if (template_header_count)
1946         error("too few template parameter lists in declaration of %qD", decl);
1947       else
1948         error("explicit specialization of %qD must be introduced by "
1949               "%<template <>%>", decl);
1950
1951       /* Fall through.  */
1952     case tsk_expl_spec:
1953       SET_DECL_TEMPLATE_SPECIALIZATION (decl);
1954       if (ctype)
1955         member_specialization = 1;
1956       else
1957         specialization = 1;
1958       break;
1959
1960     case tsk_template:
1961       if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
1962         {
1963           /* This case handles bogus declarations like template <>
1964              template <class T> void f<int>(); */
1965
1966           if (uses_template_parms (declarator))
1967             error ("function template partial specialization %qD "
1968                    "is not allowed", declarator);
1969           else
1970             error ("template-id %qD in declaration of primary template",
1971                    declarator);
1972           return decl;
1973         }
1974
1975       if (ctype && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype))
1976         /* This is a specialization of a member template, without
1977            specialization the containing class.  Something like:
1978
1979              template <class T> struct S {
1980                template <class U> void f (U);
1981              };
1982              template <> template <class U> void S<int>::f(U) {}
1983
1984            That's a specialization -- but of the entire template.  */
1985         specialization = 1;
1986       break;
1987
1988     default:
1989       gcc_unreachable ();
1990     }
1991
1992   if (specialization || member_specialization)
1993     {
1994       tree t = TYPE_ARG_TYPES (TREE_TYPE (decl));
1995       for (; t; t = TREE_CHAIN (t))
1996         if (TREE_PURPOSE (t))
1997           {
1998             pedwarn
1999               ("default argument specified in explicit specialization");
2000             break;
2001           }
2002     }
2003
2004   if (specialization || member_specialization || explicit_instantiation)
2005     {
2006       tree tmpl = NULL_TREE;
2007       tree targs = NULL_TREE;
2008
2009       /* Make sure that the declarator is a TEMPLATE_ID_EXPR.  */
2010       if (TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
2011         {
2012           tree fns;
2013
2014           gcc_assert (TREE_CODE (declarator) == IDENTIFIER_NODE);
2015           if (ctype)
2016             fns = dname;
2017           else
2018             {
2019               /* If there is no class context, the explicit instantiation
2020                  must be at namespace scope.  */
2021               gcc_assert (DECL_NAMESPACE_SCOPE_P (decl));
2022
2023               /* Find the namespace binding, using the declaration
2024                  context.  */
2025               fns = lookup_qualified_name (CP_DECL_CONTEXT (decl), dname,
2026                                            false, true);
2027               if (fns == error_mark_node || !is_overloaded_fn (fns))
2028                 {
2029                   error ("%qD is not a template function", dname);
2030                   fns = error_mark_node;
2031                 }
2032               else
2033                 {
2034                   tree fn = OVL_CURRENT (fns);
2035                   if (!is_associated_namespace (CP_DECL_CONTEXT (decl),
2036                                                 CP_DECL_CONTEXT (fn)))
2037                     error ("%qD is not declared in %qD",
2038                            decl, current_namespace);
2039                 }
2040             }
2041
2042           declarator = lookup_template_function (fns, NULL_TREE);
2043         }
2044
2045       if (declarator == error_mark_node)
2046         return error_mark_node;
2047
2048       if (ctype != NULL_TREE && TYPE_BEING_DEFINED (ctype))
2049         {
2050           if (!explicit_instantiation)
2051             /* A specialization in class scope.  This is invalid,
2052                but the error will already have been flagged by
2053                check_specialization_scope.  */
2054             return error_mark_node;
2055           else
2056             {
2057               /* It's not valid to write an explicit instantiation in
2058                  class scope, e.g.:
2059
2060                    class C { template void f(); }
2061
2062                    This case is caught by the parser.  However, on
2063                    something like:
2064
2065                    template class C { void f(); };
2066
2067                    (which is invalid) we can get here.  The error will be
2068                    issued later.  */
2069               ;
2070             }
2071
2072           return decl;
2073         }
2074       else if (ctype != NULL_TREE
2075                && (TREE_CODE (TREE_OPERAND (declarator, 0)) ==
2076                    IDENTIFIER_NODE))
2077         {
2078           /* Find the list of functions in ctype that have the same
2079              name as the declared function.  */
2080           tree name = TREE_OPERAND (declarator, 0);
2081           tree fns = NULL_TREE;
2082           int idx;
2083
2084           if (constructor_name_p (name, ctype))
2085             {
2086               int is_constructor = DECL_CONSTRUCTOR_P (decl);
2087
2088               if (is_constructor ? !TYPE_HAS_CONSTRUCTOR (ctype)
2089                   : !CLASSTYPE_DESTRUCTORS (ctype))
2090                 {
2091                   /* From [temp.expl.spec]:
2092
2093                      If such an explicit specialization for the member
2094                      of a class template names an implicitly-declared
2095                      special member function (clause _special_), the
2096                      program is ill-formed.
2097
2098                      Similar language is found in [temp.explicit].  */
2099                   error ("specialization of implicitly-declared special member function");
2100                   return error_mark_node;
2101                 }
2102
2103               name = is_constructor ? ctor_identifier : dtor_identifier;
2104             }
2105
2106           if (!DECL_CONV_FN_P (decl))
2107             {
2108               idx = lookup_fnfields_1 (ctype, name);
2109               if (idx >= 0)
2110                 fns = VEC_index (tree, CLASSTYPE_METHOD_VEC (ctype), idx);
2111             }
2112           else
2113             {
2114               VEC(tree,gc) *methods;
2115               tree ovl;
2116
2117               /* For a type-conversion operator, we cannot do a
2118                  name-based lookup.  We might be looking for `operator
2119                  int' which will be a specialization of `operator T'.
2120                  So, we find *all* the conversion operators, and then
2121                  select from them.  */
2122               fns = NULL_TREE;
2123
2124               methods = CLASSTYPE_METHOD_VEC (ctype);
2125               if (methods)
2126                 for (idx = CLASSTYPE_FIRST_CONVERSION_SLOT;
2127                      VEC_iterate (tree, methods, idx, ovl);
2128                      ++idx)
2129                   {
2130                     if (!DECL_CONV_FN_P (OVL_CURRENT (ovl)))
2131                       /* There are no more conversion functions.  */
2132                       break;
2133
2134                     /* Glue all these conversion functions together
2135                        with those we already have.  */
2136                     for (; ovl; ovl = OVL_NEXT (ovl))
2137                       fns = ovl_cons (OVL_CURRENT (ovl), fns);
2138                   }
2139             }
2140
2141           if (fns == NULL_TREE)
2142             {
2143               error ("no member function %qD declared in %qT", name, ctype);
2144               return error_mark_node;
2145             }
2146           else
2147             TREE_OPERAND (declarator, 0) = fns;
2148         }
2149
2150       /* Figure out what exactly is being specialized at this point.
2151          Note that for an explicit instantiation, even one for a
2152          member function, we cannot tell apriori whether the
2153          instantiation is for a member template, or just a member
2154          function of a template class.  Even if a member template is
2155          being instantiated, the member template arguments may be
2156          elided if they can be deduced from the rest of the
2157          declaration.  */
2158       tmpl = determine_specialization (declarator, decl,
2159                                        &targs,
2160                                        member_specialization,
2161                                        template_count,
2162                                        tsk);
2163
2164       if (!tmpl || tmpl == error_mark_node)
2165         /* We couldn't figure out what this declaration was
2166            specializing.  */
2167         return error_mark_node;
2168       else
2169         {
2170           tree gen_tmpl = most_general_template (tmpl);
2171
2172           if (explicit_instantiation)
2173             {
2174               /* We don't set DECL_EXPLICIT_INSTANTIATION here; that
2175                  is done by do_decl_instantiation later.  */
2176
2177               int arg_depth = TMPL_ARGS_DEPTH (targs);
2178               int parm_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
2179
2180               if (arg_depth > parm_depth)
2181                 {
2182                   /* If TMPL is not the most general template (for
2183                      example, if TMPL is a friend template that is
2184                      injected into namespace scope), then there will
2185                      be too many levels of TARGS.  Remove some of them
2186                      here.  */
2187                   int i;
2188                   tree new_targs;
2189
2190                   new_targs = make_tree_vec (parm_depth);
2191                   for (i = arg_depth - parm_depth; i < arg_depth; ++i)
2192                     TREE_VEC_ELT (new_targs, i - (arg_depth - parm_depth))
2193                       = TREE_VEC_ELT (targs, i);
2194                   targs = new_targs;
2195                 }
2196
2197               return instantiate_template (tmpl, targs, tf_error);
2198             }
2199
2200           /* If we thought that the DECL was a member function, but it
2201              turns out to be specializing a static member function,
2202              make DECL a static member function as well.  */
2203           if (DECL_STATIC_FUNCTION_P (tmpl)
2204               && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2205             revert_static_member_fn (decl);
2206
2207           /* If this is a specialization of a member template of a
2208              template class, we want to return the TEMPLATE_DECL, not
2209              the specialization of it.  */
2210           if (tsk == tsk_template)
2211             {
2212               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
2213               DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl)) = NULL_TREE;
2214               if (have_def)
2215                 {
2216                   DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
2217                   DECL_SOURCE_LOCATION (DECL_TEMPLATE_RESULT (tmpl))
2218                     = DECL_SOURCE_LOCATION (decl);
2219                   /* We want to use the argument list specified in the
2220                      definition, not in the original declaration.  */
2221                   DECL_ARGUMENTS (DECL_TEMPLATE_RESULT (tmpl))
2222                     = DECL_ARGUMENTS (decl);
2223                 }
2224               return tmpl;
2225             }
2226
2227           /* Set up the DECL_TEMPLATE_INFO for DECL.  */
2228           DECL_TEMPLATE_INFO (decl) = tree_cons (tmpl, targs, NULL_TREE);
2229
2230           /* Inherit default function arguments from the template
2231              DECL is specializing.  */
2232           copy_default_args_to_explicit_spec (decl);
2233
2234           /* This specialization has the same protection as the
2235              template it specializes.  */
2236           TREE_PRIVATE (decl) = TREE_PRIVATE (gen_tmpl);
2237           TREE_PROTECTED (decl) = TREE_PROTECTED (gen_tmpl);
2238
2239           /* 7.1.1-1 [dcl.stc]
2240
2241              A storage-class-specifier shall not be specified in an
2242              explicit specialization...
2243
2244              The parser rejects these, so unless action is taken here,
2245              explicit function specializations will always appear with
2246              global linkage.
2247
2248              The action recommended by the C++ CWG in response to C++
2249              defect report 605 is to make the storage class and linkage
2250              of the explicit specialization match the templated function:
2251
2252              http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#605
2253            */
2254           if (tsk == tsk_expl_spec && DECL_FUNCTION_TEMPLATE_P (gen_tmpl))
2255             {
2256               tree tmpl_func = DECL_TEMPLATE_RESULT (gen_tmpl);
2257               gcc_assert (TREE_CODE (tmpl_func) == FUNCTION_DECL);
2258
2259               /* This specialization has the same linkage and visibility as
2260                  the function template it specializes.  */
2261               TREE_PUBLIC (decl) = TREE_PUBLIC (tmpl_func);
2262               if (! TREE_PUBLIC (decl))
2263                 {
2264                   DECL_INTERFACE_KNOWN (decl) = 1;
2265                   DECL_NOT_REALLY_EXTERN (decl) = 1;
2266                 }
2267               DECL_THIS_STATIC (decl) = DECL_THIS_STATIC (tmpl_func);
2268               if (DECL_VISIBILITY_SPECIFIED (tmpl_func))
2269                 {
2270                   DECL_VISIBILITY_SPECIFIED (decl) = 1;
2271                   DECL_VISIBILITY (decl) = DECL_VISIBILITY (tmpl_func);
2272                 }
2273             }
2274
2275           /* If DECL is a friend declaration, declared using an
2276              unqualified name, the namespace associated with DECL may
2277              have been set incorrectly.  For example, in:
2278
2279                template <typename T> void f(T);
2280                namespace N {
2281                  struct S { friend void f<int>(int); }
2282                }
2283
2284              we will have set the DECL_CONTEXT for the friend
2285              declaration to N, rather than to the global namespace.  */
2286           if (DECL_NAMESPACE_SCOPE_P (decl))
2287             DECL_CONTEXT (decl) = DECL_CONTEXT (tmpl);
2288
2289           if (is_friend && !have_def)
2290             /* This is not really a declaration of a specialization.
2291                It's just the name of an instantiation.  But, it's not
2292                a request for an instantiation, either.  */
2293             SET_DECL_IMPLICIT_INSTANTIATION (decl);
2294           else if (DECL_CONSTRUCTOR_P (decl) || DECL_DESTRUCTOR_P (decl))
2295             /* This is indeed a specialization.  In case of constructors
2296                and destructors, we need in-charge and not-in-charge
2297                versions in V3 ABI.  */
2298             clone_function_decl (decl, /*update_method_vec_p=*/0);
2299
2300           /* Register this specialization so that we can find it
2301              again.  */
2302           decl = register_specialization (decl, gen_tmpl, targs, is_friend);
2303         }
2304     }
2305
2306   return decl;
2307 }
2308
2309 /* Returns 1 iff PARMS1 and PARMS2 are identical sets of template
2310    parameters.  These are represented in the same format used for
2311    DECL_TEMPLATE_PARMS.  */
2312
2313 int
2314 comp_template_parms (const_tree parms1, const_tree parms2)
2315 {
2316   const_tree p1;
2317   const_tree p2;
2318
2319   if (parms1 == parms2)
2320     return 1;
2321
2322   for (p1 = parms1, p2 = parms2;
2323        p1 != NULL_TREE && p2 != NULL_TREE;
2324        p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2))
2325     {
2326       tree t1 = TREE_VALUE (p1);
2327       tree t2 = TREE_VALUE (p2);
2328       int i;
2329
2330       gcc_assert (TREE_CODE (t1) == TREE_VEC);
2331       gcc_assert (TREE_CODE (t2) == TREE_VEC);
2332
2333       if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
2334         return 0;
2335
2336       for (i = 0; i < TREE_VEC_LENGTH (t2); ++i)
2337         {
2338           tree parm1 = TREE_VALUE (TREE_VEC_ELT (t1, i));
2339           tree parm2 = TREE_VALUE (TREE_VEC_ELT (t2, i));
2340
2341           /* If either of the template parameters are invalid, assume
2342              they match for the sake of error recovery. */
2343           if (parm1 == error_mark_node || parm2 == error_mark_node)
2344             return 1;
2345
2346           if (TREE_CODE (parm1) != TREE_CODE (parm2))
2347             return 0;
2348
2349           if (TREE_CODE (parm1) == TEMPLATE_TYPE_PARM
2350               && (TEMPLATE_TYPE_PARAMETER_PACK (parm1)
2351                   == TEMPLATE_TYPE_PARAMETER_PACK (parm2)))
2352             continue;
2353           else if (!same_type_p (TREE_TYPE (parm1), TREE_TYPE (parm2)))
2354             return 0;
2355         }
2356     }
2357
2358   if ((p1 != NULL_TREE) != (p2 != NULL_TREE))
2359     /* One set of parameters has more parameters lists than the
2360        other.  */
2361     return 0;
2362
2363   return 1;
2364 }
2365
2366 /* Determine whether PARM is a parameter pack.  */
2367 bool 
2368 template_parameter_pack_p (const_tree parm)
2369 {
2370   /* Determine if we have a non-type template parameter pack.  */
2371   if (TREE_CODE (parm) == PARM_DECL)
2372     return (DECL_TEMPLATE_PARM_P (parm) 
2373             && TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)));
2374
2375   /* If this is a list of template parameters, we could get a
2376      TYPE_DECL or a TEMPLATE_DECL.  */ 
2377   if (TREE_CODE (parm) == TYPE_DECL || TREE_CODE (parm) == TEMPLATE_DECL)
2378     parm = TREE_TYPE (parm);
2379
2380   return ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
2381            || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM)
2382           && TEMPLATE_TYPE_PARAMETER_PACK (parm));
2383 }
2384
2385 /* Determine whether ARGS describes a variadic template args list,
2386    i.e., one that is terminated by a template argument pack.  */
2387 static bool 
2388 template_args_variadic_p (tree args)
2389 {
2390   int nargs;
2391   tree last_parm;
2392
2393   if (args == NULL_TREE)
2394     return false;
2395
2396   args = INNERMOST_TEMPLATE_ARGS (args);
2397   nargs = TREE_VEC_LENGTH (args);
2398
2399   if (nargs == 0)
2400     return false;
2401
2402   last_parm = TREE_VEC_ELT (args, nargs - 1);
2403
2404   return ARGUMENT_PACK_P (last_parm);
2405 }
2406
2407 /* Generate a new name for the parameter pack name NAME (an
2408    IDENTIFIER_NODE) that incorporates its */
2409 static tree
2410 make_ith_pack_parameter_name (tree name, int i)
2411 {
2412   /* Munge the name to include the parameter index.  */
2413   char numbuf[128];
2414   char* newname;
2415   
2416   sprintf(numbuf, "%i", i);
2417   newname = (char*)alloca (IDENTIFIER_LENGTH (name) + strlen(numbuf) + 2);
2418   sprintf(newname, "%s#%i", IDENTIFIER_POINTER (name), i);
2419   return get_identifier (newname);
2420 }
2421
2422 /* Structure used to track the progress of find_parameter_pack_r.  */
2423 struct find_parameter_pack_data 
2424 {
2425   tree* parameter_packs;
2426   struct pointer_set_t *visited;
2427 };
2428
2429 /* Identifies all of the argument packs that occur in a template
2430    argument and appends them to the TREE_LIST inside DATA, which is a
2431    find_parameter_pack_data structure. This is a subroutine of
2432    make_pack_expansion and uses_parameter_packs.  */
2433 static tree
2434 find_parameter_packs_r (tree *tp, int *walk_subtrees, void* data)
2435 {
2436   tree t = *tp;
2437   struct find_parameter_pack_data* ppd = 
2438     (struct find_parameter_pack_data*)data;
2439
2440   if (TYPE_P (t))
2441     {
2442       tree context = TYPE_CONTEXT (t);
2443       cp_walk_tree (&context, &find_parameter_packs_r, ppd, ppd->visited);
2444     }
2445
2446   /* This switch statement will return immediately if we don't find a
2447      parameter pack.  */
2448   switch (TREE_CODE (t)) 
2449     {
2450     case TEMPLATE_PARM_INDEX:
2451       if (TEMPLATE_PARM_PARAMETER_PACK (t))
2452         break;
2453       return NULL_TREE;
2454
2455     case BOUND_TEMPLATE_TEMPLATE_PARM:
2456       /* Check the template arguments.  */
2457       cp_walk_tree (&TYPE_TI_ARGS (t), &find_parameter_packs_r, ppd, 
2458                     ppd->visited);
2459
2460       /* Dig out the underlying TEMPLATE_TEMPLATE_PARM.  */
2461       t = TYPE_TI_TEMPLATE (t);
2462       if (DECL_P (t) && TREE_TYPE (t))
2463         t = TREE_TYPE (t);
2464       *walk_subtrees = 0;
2465       
2466       /* Fall through.  */
2467
2468     case TEMPLATE_TYPE_PARM:
2469     case TEMPLATE_TEMPLATE_PARM:
2470       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
2471         break;
2472       return NULL_TREE;
2473
2474     case PARM_DECL:
2475       if (FUNCTION_PARAMETER_PACK_P (t))
2476         {
2477           /* We don't want to walk into the type of a PARM_DECL,
2478              because we don't want to see the type parameter pack.*/
2479           *walk_subtrees = 0;
2480           break;
2481         }
2482       return NULL_TREE;
2483
2484     case RECORD_TYPE:
2485       if (TYPE_PTRMEMFUNC_P (t))
2486         return NULL_TREE;
2487       /* Fall through.  */
2488
2489     case UNION_TYPE:
2490     case ENUMERAL_TYPE:
2491       if (TYPE_TEMPLATE_INFO (t))
2492         {
2493           tree args = TREE_VALUE (TYPE_TEMPLATE_INFO (t));
2494           cp_walk_tree (&args, &find_parameter_packs_r, ppd, ppd->visited);
2495         }
2496
2497       *walk_subtrees = 0;
2498       return NULL_TREE;
2499
2500     case TEMPLATE_DECL:
2501       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
2502           && TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (t)))
2503         break;
2504       
2505       *walk_subtrees = 0;
2506       return NULL_TREE;
2507  
2508     case TYPENAME_TYPE:
2509       cp_walk_tree (&TYPENAME_TYPE_FULLNAME (t), &find_parameter_packs_r,
2510                    ppd, ppd->visited);
2511       *walk_subtrees = 0;
2512       return NULL_TREE;
2513
2514       
2515     case TYPE_PACK_EXPANSION:
2516     case EXPR_PACK_EXPANSION:
2517       *walk_subtrees = 0;
2518       return NULL_TREE;
2519
2520     case INTEGER_TYPE:
2521       cp_walk_tree (&TYPE_MAX_VALUE (t), &find_parameter_packs_r, 
2522                     ppd, ppd->visited);
2523       *walk_subtrees = 0;
2524       return NULL_TREE;
2525
2526     default:
2527       return NULL_TREE;
2528     }
2529   
2530   /* Add this parameter pack to the list.  */
2531   *ppd->parameter_packs = tree_cons (NULL_TREE, t, *ppd->parameter_packs);
2532
2533   return NULL_TREE;
2534 }
2535
2536 /* Determines if the expression or type T uses any parameter packs.  */
2537 bool
2538 uses_parameter_packs (tree t)
2539 {
2540   tree parameter_packs = NULL_TREE;
2541   struct find_parameter_pack_data ppd;
2542   ppd.parameter_packs = &parameter_packs;
2543   ppd.visited = pointer_set_create ();
2544   cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
2545   pointer_set_destroy (ppd.visited);
2546   return parameter_packs != NULL_TREE;
2547 }
2548
2549 /* Turn ARG, which may be an expression, type, or a TREE_LIST
2550    representation a base-class initializer into a parameter pack
2551    expansion. If all goes well, the resulting node will be an
2552    EXPR_PACK_EXPANSION, TYPE_PACK_EXPANSION, or TREE_LIST,
2553    respectively.  */
2554 tree 
2555 make_pack_expansion (tree arg)
2556 {
2557   tree result;
2558   tree parameter_packs = NULL_TREE;
2559   bool for_types = false;
2560   struct find_parameter_pack_data ppd;
2561
2562   if (!arg || arg == error_mark_node)
2563     return arg;
2564
2565   if (TREE_CODE (arg) == TREE_LIST)
2566     {
2567       /* The only time we will see a TREE_LIST here is for a base
2568          class initializer.  In this case, the TREE_PURPOSE will be a
2569          _TYPE node (representing the base class expansion we're
2570          initializing) and the TREE_VALUE will be a TREE_LIST
2571          containing the initialization arguments. 
2572
2573          The resulting expansion looks somewhat different from most
2574          expansions. Rather than returning just one _EXPANSION, we
2575          return a TREE_LIST whose TREE_PURPOSE is a
2576          TYPE_PACK_EXPANSION containing the bases that will be
2577          initialized.  The TREE_VALUE will be identical to the
2578          original TREE_VALUE, which is a list of arguments that will
2579          be passed to each base.  We do not introduce any new pack
2580          expansion nodes into the TREE_VALUE (although it is possible
2581          that some already exist), because the TREE_PURPOSE and
2582          TREE_VALUE all need to be expanded together with the same
2583          _EXPANSION node.  Note that the TYPE_PACK_EXPANSION in the
2584          resulting TREE_PURPOSE will mention the parameter packs in
2585          both the bases and the arguments to the bases.  */
2586       tree purpose;
2587       tree value;
2588       tree parameter_packs = NULL_TREE;
2589
2590       /* Determine which parameter packs will be used by the base
2591          class expansion.  */
2592       ppd.visited = pointer_set_create ();
2593       ppd.parameter_packs = &parameter_packs;
2594       cp_walk_tree (&TREE_PURPOSE (arg), &find_parameter_packs_r, 
2595                     &ppd, ppd.visited);
2596
2597       if (parameter_packs == NULL_TREE)
2598         {
2599           error ("base initializer expansion %<%T%> contains no parameter packs", arg);
2600           pointer_set_destroy (ppd.visited);
2601           return error_mark_node;
2602         }
2603
2604       if (TREE_VALUE (arg) != void_type_node)
2605         {
2606           /* Collect the sets of parameter packs used in each of the
2607              initialization arguments.  */
2608           for (value = TREE_VALUE (arg); value; value = TREE_CHAIN (value))
2609             {
2610               /* Determine which parameter packs will be expanded in this
2611                  argument.  */
2612               cp_walk_tree (&TREE_VALUE (value), &find_parameter_packs_r, 
2613                             &ppd, ppd.visited);
2614             }
2615         }
2616
2617       pointer_set_destroy (ppd.visited);
2618
2619       /* Create the pack expansion type for the base type.  */
2620       purpose = make_node (TYPE_PACK_EXPANSION);
2621       SET_PACK_EXPANSION_PATTERN (purpose, TREE_PURPOSE (arg));
2622       PACK_EXPANSION_PARAMETER_PACKS (purpose) = parameter_packs;
2623
2624       /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
2625          they will rarely be compared to anything.  */
2626       SET_TYPE_STRUCTURAL_EQUALITY (purpose);
2627
2628       return tree_cons (purpose, TREE_VALUE (arg), NULL_TREE);
2629     }
2630
2631   if (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL)
2632     for_types = true;
2633
2634   /* Build the PACK_EXPANSION_* node.  */
2635   result = make_node (for_types ? TYPE_PACK_EXPANSION : EXPR_PACK_EXPANSION);
2636   SET_PACK_EXPANSION_PATTERN (result, arg);
2637   if (TREE_CODE (result) == EXPR_PACK_EXPANSION)
2638     {
2639       /* Propagate type and const-expression information.  */
2640       TREE_TYPE (result) = TREE_TYPE (arg);
2641       TREE_CONSTANT (result) = TREE_CONSTANT (arg);
2642     }
2643   else
2644     /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
2645        they will rarely be compared to anything.  */
2646     SET_TYPE_STRUCTURAL_EQUALITY (result);
2647
2648   /* Determine which parameter packs will be expanded.  */
2649   ppd.parameter_packs = &parameter_packs;
2650   ppd.visited = pointer_set_create ();
2651   cp_walk_tree (&arg, &find_parameter_packs_r, &ppd, ppd.visited);
2652   pointer_set_destroy (ppd.visited);
2653
2654   /* Make sure we found some parameter packs.  */
2655   if (parameter_packs == NULL_TREE)
2656     {
2657       if (TYPE_P (arg))
2658         error ("expansion pattern %<%T%> contains no argument packs", arg);
2659       else
2660         error ("expansion pattern %<%E%> contains no argument packs", arg);
2661       return error_mark_node;
2662     }
2663   PACK_EXPANSION_PARAMETER_PACKS (result) = parameter_packs;
2664
2665   return result;
2666 }
2667
2668 /* Checks T for any "bare" parameter packs, which have not yet been
2669    expanded, and issues an error if any are found. This operation can
2670    only be done on full expressions or types (e.g., an expression
2671    statement, "if" condition, etc.), because we could have expressions like:
2672
2673      foo(f(g(h(args)))...)
2674
2675    where "args" is a parameter pack. check_for_bare_parameter_packs
2676    should not be called for the subexpressions args, h(args),
2677    g(h(args)), or f(g(h(args))), because we would produce erroneous
2678    error messages. 
2679
2680    Returns TRUE if there were no bare parameter packs, returns FALSE
2681    (and emits an error) if there were bare parameter packs.*/
2682 bool 
2683 check_for_bare_parameter_packs (tree t)
2684 {
2685   tree parameter_packs = NULL_TREE;
2686   struct find_parameter_pack_data ppd;
2687
2688   if (!processing_template_decl || !t || t == error_mark_node)
2689     return true;
2690
2691   if (TREE_CODE (t) == TYPE_DECL)
2692     t = TREE_TYPE (t);
2693
2694   ppd.parameter_packs = &parameter_packs;
2695   ppd.visited = pointer_set_create ();
2696   cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
2697   pointer_set_destroy (ppd.visited);
2698
2699   if (parameter_packs) 
2700     {
2701       error ("parameter packs not expanded with `...':");
2702       while (parameter_packs)
2703         {
2704           tree pack = TREE_VALUE (parameter_packs);
2705           tree name = NULL_TREE;
2706
2707           if (TREE_CODE (pack) == TEMPLATE_TYPE_PARM
2708               || TREE_CODE (pack) == TEMPLATE_TEMPLATE_PARM)
2709             name = TYPE_NAME (pack);
2710           else if (TREE_CODE (pack) == TEMPLATE_PARM_INDEX)
2711             name = DECL_NAME (TEMPLATE_PARM_DECL (pack));
2712           else
2713             name = DECL_NAME (pack);
2714           inform ("        %qD", name);
2715
2716           parameter_packs = TREE_CHAIN (parameter_packs);
2717         }
2718
2719       return false;
2720     }
2721
2722   return true;
2723 }
2724
2725 /* Expand any parameter packs that occur in the template arguments in
2726    ARGS.  */
2727 tree
2728 expand_template_argument_pack (tree args)
2729 {
2730   tree result_args = NULL_TREE;
2731   int in_arg, out_arg = 0, nargs = args ? TREE_VEC_LENGTH (args) : 0;
2732   int num_result_args = -1;
2733
2734   /* First, determine if we need to expand anything, and the number of
2735      slots we'll need.  */
2736   for (in_arg = 0; in_arg < nargs; ++in_arg)
2737     {
2738       tree arg = TREE_VEC_ELT (args, in_arg);
2739       if (ARGUMENT_PACK_P (arg))
2740         {
2741           int num_packed = TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg));
2742           if (num_result_args < 0)
2743             num_result_args = in_arg + num_packed;
2744           else
2745             num_result_args += num_packed;
2746         }
2747       else
2748         {
2749           if (num_result_args >= 0)
2750             num_result_args++;
2751         }
2752     }
2753
2754   /* If no expansion is necessary, we're done.  */
2755   if (num_result_args < 0)
2756     return args;
2757
2758   /* Expand arguments.  */
2759   result_args = make_tree_vec (num_result_args);
2760   for (in_arg = 0; in_arg < nargs; ++in_arg)
2761     {
2762       tree arg = TREE_VEC_ELT (args, in_arg);
2763       if (ARGUMENT_PACK_P (arg))
2764         {
2765           tree packed = ARGUMENT_PACK_ARGS (arg);
2766           int i, num_packed = TREE_VEC_LENGTH (packed);
2767           for (i = 0; i < num_packed; ++i, ++out_arg)
2768             TREE_VEC_ELT (result_args, out_arg) = TREE_VEC_ELT(packed, i);
2769         }
2770       else
2771         {
2772           TREE_VEC_ELT (result_args, out_arg) = arg;
2773           ++out_arg;
2774         }
2775     }
2776
2777   return result_args;
2778 }
2779
2780 /* Complain if DECL shadows a template parameter.
2781
2782    [temp.local]: A template-parameter shall not be redeclared within its
2783    scope (including nested scopes).  */
2784
2785 void
2786 check_template_shadow (tree decl)
2787 {
2788   tree olddecl;
2789
2790   /* If we're not in a template, we can't possibly shadow a template
2791      parameter.  */
2792   if (!current_template_parms)
2793     return;
2794
2795   /* Figure out what we're shadowing.  */
2796   if (TREE_CODE (decl) == OVERLOAD)
2797     decl = OVL_CURRENT (decl);
2798   olddecl = innermost_non_namespace_value (DECL_NAME (decl));
2799
2800   /* If there's no previous binding for this name, we're not shadowing
2801      anything, let alone a template parameter.  */
2802   if (!olddecl)
2803     return;
2804
2805   /* If we're not shadowing a template parameter, we're done.  Note
2806      that OLDDECL might be an OVERLOAD (or perhaps even an
2807      ERROR_MARK), so we can't just blithely assume it to be a _DECL
2808      node.  */
2809   if (!DECL_P (olddecl) || !DECL_TEMPLATE_PARM_P (olddecl))
2810     return;
2811
2812   /* We check for decl != olddecl to avoid bogus errors for using a
2813      name inside a class.  We check TPFI to avoid duplicate errors for
2814      inline member templates.  */
2815   if (decl == olddecl
2816       || TEMPLATE_PARMS_FOR_INLINE (current_template_parms))
2817     return;
2818
2819   error ("declaration of %q+#D", decl);
2820   error (" shadows template parm %q+#D", olddecl);
2821 }
2822
2823 /* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
2824    ORIG_LEVEL, DECL, and TYPE.  */
2825
2826 static tree
2827 build_template_parm_index (int index,
2828                            int level,
2829                            int orig_level,
2830                            tree decl,
2831                            tree type)
2832 {
2833   tree t = make_node (TEMPLATE_PARM_INDEX);
2834   TEMPLATE_PARM_IDX (t) = index;
2835   TEMPLATE_PARM_LEVEL (t) = level;
2836   TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
2837   TEMPLATE_PARM_DECL (t) = decl;
2838   TREE_TYPE (t) = type;
2839   TREE_CONSTANT (t) = TREE_CONSTANT (decl);
2840   TREE_INVARIANT (t) = TREE_INVARIANT (decl);
2841   TREE_READONLY (t) = TREE_READONLY (decl);
2842
2843   return t;
2844 }
2845
2846 /* Find the canonical type parameter for the given template type
2847    parameter.  Returns the canonical type parameter, which may be TYPE
2848    if no such parameter existed.  */
2849 static tree
2850 canonical_type_parameter (tree type)
2851 {
2852   tree list;
2853   int idx = TEMPLATE_TYPE_IDX (type);
2854   if (!canonical_template_parms)
2855     canonical_template_parms = VEC_alloc (tree, gc, idx+1);
2856
2857   while (VEC_length (tree, canonical_template_parms) <= (unsigned)idx)
2858     VEC_safe_push (tree, gc, canonical_template_parms, NULL_TREE);
2859
2860   list = VEC_index (tree, canonical_template_parms, idx);
2861   while (list && !comptypes (type, TREE_VALUE (list), COMPARE_STRUCTURAL))
2862     list = TREE_CHAIN (list);
2863
2864   if (list)
2865     return TREE_VALUE (list);
2866   else
2867     {
2868       VEC_replace(tree, canonical_template_parms, idx,
2869                   tree_cons (NULL_TREE, type, 
2870                              VEC_index (tree, canonical_template_parms, idx)));
2871       return type;
2872     }
2873 }
2874
2875 /* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
2876    TEMPLATE_PARM_LEVEL has been decreased by LEVELS.  If such a
2877    TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
2878    new one is created.  */
2879
2880 static tree
2881 reduce_template_parm_level (tree index, tree type, int levels, tree args,
2882                             tsubst_flags_t complain)
2883 {
2884   if (TEMPLATE_PARM_DESCENDANTS (index) == NULL_TREE
2885       || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
2886           != TEMPLATE_PARM_LEVEL (index) - levels))
2887     {
2888       tree orig_decl = TEMPLATE_PARM_DECL (index);
2889       tree decl, t;
2890
2891       decl = build_decl (TREE_CODE (orig_decl), DECL_NAME (orig_decl), type);
2892       TREE_CONSTANT (decl) = TREE_CONSTANT (orig_decl);
2893       TREE_INVARIANT (decl) = TREE_INVARIANT (orig_decl);
2894       TREE_READONLY (decl) = TREE_READONLY (orig_decl);
2895       DECL_ARTIFICIAL (decl) = 1;
2896       SET_DECL_TEMPLATE_PARM_P (decl);
2897
2898       t = build_template_parm_index (TEMPLATE_PARM_IDX (index),
2899                                      TEMPLATE_PARM_LEVEL (index) - levels,
2900                                      TEMPLATE_PARM_ORIG_LEVEL (index),
2901                                      decl, type);
2902       TEMPLATE_PARM_DESCENDANTS (index) = t;
2903       TEMPLATE_PARM_PARAMETER_PACK (t) 
2904         = TEMPLATE_PARM_PARAMETER_PACK (index);
2905
2906         /* Template template parameters need this.  */
2907       if (TREE_CODE (decl) == TEMPLATE_DECL)
2908         DECL_TEMPLATE_PARMS (decl) = tsubst_template_parms
2909           (DECL_TEMPLATE_PARMS (TEMPLATE_PARM_DECL (index)),
2910            args, complain);
2911     }
2912
2913   return TEMPLATE_PARM_DESCENDANTS (index);
2914 }
2915
2916 /* Process information from new template parameter PARM and append it to the
2917    LIST being built.  This new parameter is a non-type parameter iff
2918    IS_NON_TYPE is true. This new parameter is a parameter
2919    pack iff IS_PARAMETER_PACK is true.  */
2920
2921 tree
2922 process_template_parm (tree list, tree parm, bool is_non_type, 
2923                        bool is_parameter_pack)
2924 {
2925   tree decl = 0;
2926   tree defval;
2927   tree err_parm_list;
2928   int idx = 0;
2929
2930   gcc_assert (TREE_CODE (parm) == TREE_LIST);
2931   defval = TREE_PURPOSE (parm);
2932
2933   if (list)
2934     {
2935       tree p = tree_last (list);
2936
2937       if (p && TREE_VALUE (p) != error_mark_node)
2938         {
2939           p = TREE_VALUE (p);
2940           if (TREE_CODE (p) == TYPE_DECL || TREE_CODE (p) == TEMPLATE_DECL)
2941             idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
2942           else
2943             idx = TEMPLATE_PARM_IDX (DECL_INITIAL (p));
2944         }
2945
2946       ++idx;
2947     }
2948   else
2949     idx = 0;
2950
2951   if (is_non_type)
2952     {
2953       parm = TREE_VALUE (parm);
2954
2955       SET_DECL_TEMPLATE_PARM_P (parm);
2956
2957       if (TREE_TYPE (parm) == error_mark_node)
2958         {
2959           err_parm_list = build_tree_list (defval, parm);
2960           TREE_VALUE (err_parm_list) = error_mark_node;
2961            return chainon (list, err_parm_list);
2962         }
2963       else
2964       {
2965         /* [temp.param]
2966
2967            The top-level cv-qualifiers on the template-parameter are
2968            ignored when determining its type.  */
2969         TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
2970         if (invalid_nontype_parm_type_p (TREE_TYPE (parm), 1))
2971           {
2972             err_parm_list = build_tree_list (defval, parm);
2973             TREE_VALUE (err_parm_list) = error_mark_node;
2974              return chainon (list, err_parm_list);
2975           }
2976
2977         if (uses_parameter_packs (TREE_TYPE (parm)) && !is_parameter_pack)
2978           {
2979             /* This template parameter is not a parameter pack, but it
2980                should be. Complain about "bare" parameter packs.  */
2981             check_for_bare_parameter_packs (TREE_TYPE (parm));
2982             
2983             /* Recover by calling this a parameter pack.  */
2984             is_parameter_pack = true;
2985           }
2986       }
2987
2988       /* A template parameter is not modifiable.  */
2989       TREE_CONSTANT (parm) = 1;
2990       TREE_INVARIANT (parm) = 1;
2991       TREE_READONLY (parm) = 1;
2992       decl = build_decl (CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
2993       TREE_CONSTANT (decl) = 1;
2994       TREE_INVARIANT (decl) = 1;
2995       TREE_READONLY (decl) = 1;
2996       DECL_INITIAL (parm) = DECL_INITIAL (decl)
2997         = build_template_parm_index (idx, processing_template_decl,
2998                                      processing_template_decl,
2999                                      decl, TREE_TYPE (parm));
3000
3001       TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)) 
3002         = is_parameter_pack;
3003     }
3004   else
3005     {
3006       tree t;
3007       parm = TREE_VALUE (TREE_VALUE (parm));
3008
3009       if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
3010         {
3011           t = make_aggr_type (TEMPLATE_TEMPLATE_PARM);
3012           /* This is for distinguishing between real templates and template
3013              template parameters */
3014           TREE_TYPE (parm) = t;
3015           TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
3016           decl = parm;
3017         }
3018       else
3019         {
3020           t = make_aggr_type (TEMPLATE_TYPE_PARM);
3021           /* parm is either IDENTIFIER_NODE or NULL_TREE.  */
3022           decl = build_decl (TYPE_DECL, parm, t);
3023         }
3024
3025       TYPE_NAME (t) = decl;
3026       TYPE_STUB_DECL (t) = decl;
3027       parm = decl;
3028       TEMPLATE_TYPE_PARM_INDEX (t)
3029         = build_template_parm_index (idx, processing_template_decl,
3030                                      processing_template_decl,
3031                                      decl, TREE_TYPE (parm));
3032       TEMPLATE_TYPE_PARAMETER_PACK (t) = is_parameter_pack;
3033       TYPE_CANONICAL (t) = canonical_type_parameter (t);
3034     }
3035   DECL_ARTIFICIAL (decl) = 1;
3036   SET_DECL_TEMPLATE_PARM_P (decl);
3037   pushdecl (decl);
3038   parm = build_tree_list (defval, parm);
3039   return chainon (list, parm);
3040 }
3041
3042 /* The end of a template parameter list has been reached.  Process the
3043    tree list into a parameter vector, converting each parameter into a more
3044    useful form.  Type parameters are saved as IDENTIFIER_NODEs, and others
3045    as PARM_DECLs.  */
3046
3047 tree
3048 end_template_parm_list (tree parms)
3049 {
3050   int nparms;
3051   tree parm, next;
3052   tree saved_parmlist = make_tree_vec (list_length (parms));
3053
3054   current_template_parms
3055     = tree_cons (size_int (processing_template_decl),
3056                  saved_parmlist, current_template_parms);
3057
3058   for (parm = parms, nparms = 0; parm; parm = next, nparms++)
3059     {
3060       next = TREE_CHAIN (parm);
3061       TREE_VEC_ELT (saved_parmlist, nparms) = parm;
3062       TREE_CHAIN (parm) = NULL_TREE;
3063     }
3064
3065   --processing_template_parmlist;
3066
3067   return saved_parmlist;
3068 }
3069
3070 /* end_template_decl is called after a template declaration is seen.  */
3071
3072 void
3073 end_template_decl (void)
3074 {
3075   reset_specialization ();
3076
3077   if (! processing_template_decl)
3078     return;
3079
3080   /* This matches the pushlevel in begin_template_parm_list.  */
3081   finish_scope ();
3082
3083   --processing_template_decl;
3084   current_template_parms = TREE_CHAIN (current_template_parms);
3085 }
3086
3087 /* Within the declaration of a template, return all levels of template
3088    parameters that apply.  The template parameters are represented as
3089    a TREE_VEC, in the form documented in cp-tree.h for template
3090    arguments.  */
3091
3092 static tree
3093 current_template_args (void)
3094 {
3095   tree header;
3096   tree args = NULL_TREE;
3097   int length = TMPL_PARMS_DEPTH (current_template_parms);
3098   int l = length;
3099
3100   /* If there is only one level of template parameters, we do not
3101      create a TREE_VEC of TREE_VECs.  Instead, we return a single
3102      TREE_VEC containing the arguments.  */
3103   if (length > 1)
3104     args = make_tree_vec (length);
3105
3106   for (header = current_template_parms; header; header = TREE_CHAIN (header))
3107     {
3108       tree a = copy_node (TREE_VALUE (header));
3109       int i;
3110
3111       TREE_TYPE (a) = NULL_TREE;
3112       for (i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
3113         {
3114           tree t = TREE_VEC_ELT (a, i);
3115
3116           /* T will be a list if we are called from within a
3117              begin/end_template_parm_list pair, but a vector directly
3118              if within a begin/end_member_template_processing pair.  */
3119           if (TREE_CODE (t) == TREE_LIST)
3120             {
3121               t = TREE_VALUE (t);
3122
3123               if (t != error_mark_node)
3124                 {
3125                   if (TREE_CODE (t) == TYPE_DECL
3126                       || TREE_CODE (t) == TEMPLATE_DECL)
3127                     {
3128                       t = TREE_TYPE (t);
3129                       
3130                       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
3131                         {
3132                           /* Turn this argument into a TYPE_ARGUMENT_PACK
3133                              with a single element, which expands T.  */
3134                           tree vec = make_tree_vec (1);
3135                           TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3136                           
3137                           t = make_node (TYPE_ARGUMENT_PACK);
3138                           SET_ARGUMENT_PACK_ARGS (t, vec);
3139                         }
3140                     }
3141                   else
3142                     {
3143                       t = DECL_INITIAL (t);
3144                       
3145                       if (TEMPLATE_PARM_PARAMETER_PACK (t))
3146                         {
3147                           /* Turn this argument into a NONTYPE_ARGUMENT_PACK
3148                              with a single element, which expands T.  */
3149                           tree vec = make_tree_vec (1);
3150                           tree type = TREE_TYPE (TEMPLATE_PARM_DECL (t));
3151                           TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3152                           
3153                           t  = make_node (NONTYPE_ARGUMENT_PACK);
3154                           SET_ARGUMENT_PACK_ARGS (t, vec);
3155                           TREE_TYPE (t) = type;
3156                         }
3157                     }
3158                   TREE_VEC_ELT (a, i) = t;
3159                 }
3160             }
3161         }
3162
3163       if (length > 1)
3164         TREE_VEC_ELT (args, --l) = a;
3165       else
3166         args = a;
3167     }
3168
3169   return args;
3170 }
3171
3172 /* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
3173    template PARMS.  If MEMBER_TEMPLATE_P is true, the new template is
3174    a member template.  Used by push_template_decl below.  */
3175
3176 static tree
3177 build_template_decl (tree decl, tree parms, bool member_template_p)
3178 {
3179   tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
3180   DECL_TEMPLATE_PARMS (tmpl) = parms;
3181   DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
3182   DECL_MEMBER_TEMPLATE_P (tmpl) = member_template_p;
3183   if (DECL_LANG_SPECIFIC (decl))
3184     {
3185       DECL_STATIC_FUNCTION_P (tmpl) = DECL_STATIC_FUNCTION_P (decl);
3186       DECL_CONSTRUCTOR_P (tmpl) = DECL_CONSTRUCTOR_P (decl);
3187       DECL_DESTRUCTOR_P (tmpl) = DECL_DESTRUCTOR_P (decl);
3188       DECL_NONCONVERTING_P (tmpl) = DECL_NONCONVERTING_P (decl);
3189       DECL_ASSIGNMENT_OPERATOR_P (tmpl) = DECL_ASSIGNMENT_OPERATOR_P (decl);
3190       if (DECL_OVERLOADED_OPERATOR_P (decl))
3191         SET_OVERLOADED_OPERATOR_CODE (tmpl,
3192                                       DECL_OVERLOADED_OPERATOR_P (decl));
3193     }
3194
3195   return tmpl;
3196 }
3197
3198 struct template_parm_data
3199 {
3200   /* The level of the template parameters we are currently
3201      processing.  */
3202   int level;
3203
3204   /* The index of the specialization argument we are currently
3205      processing.  */
3206   int current_arg;
3207
3208   /* An array whose size is the number of template parameters.  The
3209      elements are nonzero if the parameter has been used in any one
3210      of the arguments processed so far.  */
3211   int* parms;
3212
3213   /* An array whose size is the number of template arguments.  The
3214      elements are nonzero if the argument makes use of template
3215      parameters of this level.  */
3216   int* arg_uses_template_parms;
3217 };
3218
3219 /* Subroutine of push_template_decl used to see if each template
3220    parameter in a partial specialization is used in the explicit
3221    argument list.  If T is of the LEVEL given in DATA (which is
3222    treated as a template_parm_data*), then DATA->PARMS is marked
3223    appropriately.  */
3224
3225 static int
3226 mark_template_parm (tree t, void* data)
3227 {
3228   int level;
3229   int idx;
3230   struct template_parm_data* tpd = (struct template_parm_data*) data;
3231
3232   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
3233     {
3234       level = TEMPLATE_PARM_LEVEL (t);
3235       idx = TEMPLATE_PARM_IDX (t);
3236     }
3237   else
3238     {
3239       level = TEMPLATE_TYPE_LEVEL (t);
3240       idx = TEMPLATE_TYPE_IDX (t);
3241     }
3242
3243   if (level == tpd->level)
3244     {
3245       tpd->parms[idx] = 1;
3246       tpd->arg_uses_template_parms[tpd->current_arg] = 1;
3247     }
3248
3249   /* Return zero so that for_each_template_parm will continue the
3250      traversal of the tree; we want to mark *every* template parm.  */
3251   return 0;
3252 }
3253
3254 /* Process the partial specialization DECL.  */
3255
3256 static tree
3257 process_partial_specialization (tree decl)
3258 {
3259   tree type = TREE_TYPE (decl);
3260   tree maintmpl = CLASSTYPE_TI_TEMPLATE (type);
3261   tree specargs = CLASSTYPE_TI_ARGS (type);
3262   tree inner_args = INNERMOST_TEMPLATE_ARGS (specargs);
3263   tree inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
3264   tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
3265   int nargs = TREE_VEC_LENGTH (inner_args);
3266   int ntparms = TREE_VEC_LENGTH (inner_parms);
3267   int  i;
3268   int did_error_intro = 0;
3269   struct template_parm_data tpd;
3270   struct template_parm_data tpd2;
3271
3272   /* We check that each of the template parameters given in the
3273      partial specialization is used in the argument list to the
3274      specialization.  For example:
3275
3276        template <class T> struct S;
3277        template <class T> struct S<T*>;
3278
3279      The second declaration is OK because `T*' uses the template
3280      parameter T, whereas
3281
3282        template <class T> struct S<int>;
3283
3284      is no good.  Even trickier is:
3285
3286        template <class T>
3287        struct S1
3288        {
3289           template <class U>
3290           struct S2;
3291           template <class U>
3292           struct S2<T>;
3293        };
3294
3295      The S2<T> declaration is actually invalid; it is a
3296      full-specialization.  Of course,
3297
3298           template <class U>
3299           struct S2<T (*)(U)>;
3300
3301      or some such would have been OK.  */
3302   tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
3303   tpd.parms = (int *) alloca (sizeof (int) * ntparms);
3304   memset (tpd.parms, 0, sizeof (int) * ntparms);
3305
3306   tpd.arg_uses_template_parms = (int *) alloca (sizeof (int) * nargs);
3307   memset (tpd.arg_uses_template_parms, 0, sizeof (int) * nargs);
3308   for (i = 0; i < nargs; ++i)
3309     {
3310       tpd.current_arg = i;
3311       for_each_template_parm (TREE_VEC_ELT (inner_args, i),
3312                               &mark_template_parm,
3313                               &tpd,
3314                               NULL);
3315     }
3316   for (i = 0; i < ntparms; ++i)
3317     if (tpd.parms[i] == 0)
3318       {
3319         /* One of the template parms was not used in the
3320            specialization.  */
3321         if (!did_error_intro)
3322           {
3323             error ("template parameters not used in partial specialization:");
3324             did_error_intro = 1;
3325           }
3326
3327         error ("        %qD", TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
3328       }
3329
3330   /* [temp.class.spec]
3331
3332      The argument list of the specialization shall not be identical to
3333      the implicit argument list of the primary template.  */
3334   if (comp_template_args
3335       (inner_args,
3336        INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE
3337                                                    (maintmpl)))))
3338     error ("partial specialization %qT does not specialize any template arguments", type);
3339
3340   /* [temp.class.spec]
3341
3342      A partially specialized non-type argument expression shall not
3343      involve template parameters of the partial specialization except
3344      when the argument expression is a simple identifier.
3345
3346      The type of a template parameter corresponding to a specialized
3347      non-type argument shall not be dependent on a parameter of the
3348      specialization. 
3349
3350      Also, we verify that pack expansions only occur at the
3351      end of the argument list.  */
3352   gcc_assert (nargs == DECL_NTPARMS (maintmpl));
3353   tpd2.parms = 0;
3354   for (i = 0; i < nargs; ++i)
3355     {
3356       tree parm = TREE_VALUE (TREE_VEC_ELT (main_inner_parms, i));
3357       tree arg = TREE_VEC_ELT (inner_args, i);
3358       tree packed_args = NULL_TREE;
3359       int j, len = 1;
3360
3361       if (ARGUMENT_PACK_P (arg))
3362         {
3363           /* Extract the arguments from the argument pack. We'll be
3364              iterating over these in the following loop.  */
3365           packed_args = ARGUMENT_PACK_ARGS (arg);
3366           len = TREE_VEC_LENGTH (packed_args);
3367         }
3368
3369       for (j = 0; j < len; j++)
3370         {
3371           if (packed_args)
3372             /* Get the Jth argument in the parameter pack.  */
3373             arg = TREE_VEC_ELT (packed_args, j);
3374
3375           if (PACK_EXPANSION_P (arg))
3376             {
3377               /* Pack expansions must come at the end of the
3378                  argument list.  */
3379               if ((packed_args && j < len - 1)
3380                   || (!packed_args && i < nargs - 1))
3381                 {
3382                   if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
3383                     error ("parameter pack argument %qE must be at the end of the template argument list", arg);
3384                   else
3385                     error ("parameter pack argument %qT must be at the end of the template argument list", arg);                   
3386                 }
3387             }
3388
3389           if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
3390             /* We only care about the pattern.  */
3391             arg = PACK_EXPANSION_PATTERN (arg);
3392
3393           if (/* These first two lines are the `non-type' bit.  */
3394               !TYPE_P (arg)
3395               && TREE_CODE (arg) != TEMPLATE_DECL
3396               /* This next line is the `argument expression is not just a
3397                  simple identifier' condition and also the `specialized
3398                  non-type argument' bit.  */
3399               && TREE_CODE (arg) != TEMPLATE_PARM_INDEX)
3400             {
3401               if ((!packed_args && tpd.arg_uses_template_parms[i])
3402                   || (packed_args && uses_template_parms (arg)))
3403                 error ("template argument %qE involves template parameter(s)",
3404                        arg);
3405               else 
3406                 {
3407                   /* Look at the corresponding template parameter,
3408                      marking which template parameters its type depends
3409                      upon.  */
3410                   tree type = TREE_TYPE (parm);
3411
3412                   if (!tpd2.parms)
3413                     {
3414                       /* We haven't yet initialized TPD2.  Do so now.  */
3415                       tpd2.arg_uses_template_parms 
3416                         = (int *) alloca (sizeof (int) * nargs);
3417                       /* The number of parameters here is the number in the
3418                          main template, which, as checked in the assertion
3419                          above, is NARGS.  */
3420                       tpd2.parms = (int *) alloca (sizeof (int) * nargs);
3421                       tpd2.level = 
3422                         TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
3423                     }
3424
3425                   /* Mark the template parameters.  But this time, we're
3426                      looking for the template parameters of the main
3427                      template, not in the specialization.  */
3428                   tpd2.current_arg = i;
3429                   tpd2.arg_uses_template_parms[i] = 0;
3430                   memset (tpd2.parms, 0, sizeof (int) * nargs);
3431                   for_each_template_parm (type,
3432                                           &mark_template_parm,
3433                                           &tpd2,
3434                                           NULL);
3435
3436                   if (tpd2.arg_uses_template_parms [i])
3437                     {
3438                       /* The type depended on some template parameters.
3439                          If they are fully specialized in the
3440                          specialization, that's OK.  */
3441                       int j;
3442                       for (j = 0; j < nargs; ++j)
3443                         if (tpd2.parms[j] != 0
3444                             && tpd.arg_uses_template_parms [j])
3445                           {
3446                             error ("type %qT of template argument %qE depends "
3447                                    "on template parameter(s)", 
3448                                    type,
3449                                    arg);
3450                             break;
3451                           }
3452                     }
3453                 }
3454             }
3455         }
3456     }
3457
3458   if (retrieve_specialization (maintmpl, specargs,
3459                                /*class_specializations_p=*/true))
3460     /* We've already got this specialization.  */
3461     return decl;
3462
3463   DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
3464     = tree_cons (specargs, inner_parms,
3465                  DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
3466   TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
3467   return decl;
3468 }
3469
3470 /* Check that a template declaration's use of default arguments is not
3471    invalid.  Here, PARMS are the template parameters.  IS_PRIMARY is
3472    nonzero if DECL is the thing declared by a primary template.
3473    IS_PARTIAL is nonzero if DECL is a partial specialization.
3474    
3475
3476    IS_FRIEND_DECL is nonzero if DECL is a friend function template
3477    declaration (but not a definition); 1 indicates a declaration, 2
3478    indicates a redeclaration. When IS_FRIEND_DECL=2, no errors are
3479    emitted for extraneous default arguments.
3480
3481    Returns TRUE if there were no errors found, FALSE otherwise. */
3482
3483 bool
3484 check_default_tmpl_args (tree decl, tree parms, int is_primary, 
3485                          int is_partial, int is_friend_decl)
3486 {
3487   const char *msg;
3488   int last_level_to_check;
3489   tree parm_level;
3490   bool no_errors = true;
3491
3492   /* [temp.param]
3493
3494      A default template-argument shall not be specified in a
3495      function template declaration or a function template definition, nor
3496      in the template-parameter-list of the definition of a member of a
3497      class template.  */
3498
3499   if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
3500     /* You can't have a function template declaration in a local
3501        scope, nor you can you define a member of a class template in a
3502        local scope.  */
3503     return true;
3504
3505   if (current_class_type
3506       && !TYPE_BEING_DEFINED (current_class_type)
3507       && DECL_LANG_SPECIFIC (decl)
3508       /* If this is either a friend defined in the scope of the class
3509          or a member function.  */
3510       && (DECL_FUNCTION_MEMBER_P (decl)
3511           ? same_type_p (DECL_CONTEXT (decl), current_class_type)
3512           : DECL_FRIEND_CONTEXT (decl)
3513           ? same_type_p (DECL_FRIEND_CONTEXT (decl), current_class_type)
3514           : false)
3515       /* And, if it was a member function, it really was defined in
3516          the scope of the class.  */
3517       && (!DECL_FUNCTION_MEMBER_P (decl)
3518           || DECL_INITIALIZED_IN_CLASS_P (decl)))
3519     /* We already checked these parameters when the template was
3520        declared, so there's no need to do it again now.  This function
3521        was defined in class scope, but we're processing it's body now
3522        that the class is complete.  */
3523     return true;
3524
3525   /* Core issue 226 (C++0x only): the following only applies to class
3526      templates.  */
3527   if ((cxx_dialect == cxx98) || TREE_CODE (decl) != FUNCTION_DECL)
3528     {
3529       /* [temp.param]
3530
3531          If a template-parameter has a default template-argument, all
3532          subsequent template-parameters shall have a default
3533          template-argument supplied.  */
3534       for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
3535         {
3536           tree inner_parms = TREE_VALUE (parm_level);
3537           int ntparms = TREE_VEC_LENGTH (inner_parms);
3538           int seen_def_arg_p = 0;
3539           int i;
3540
3541           for (i = 0; i < ntparms; ++i)
3542             {
3543               tree parm = TREE_VEC_ELT (inner_parms, i);
3544
3545               if (parm == error_mark_node)
3546                 continue;
3547
3548               if (TREE_PURPOSE (parm))
3549                 seen_def_arg_p = 1;
3550               else if (seen_def_arg_p)
3551                 {
3552                   error ("no default argument for %qD", TREE_VALUE (parm));
3553                   /* For better subsequent error-recovery, we indicate that
3554                      there should have been a default argument.  */
3555                   TREE_PURPOSE (parm) = error_mark_node;
3556                   no_errors = false;
3557                 }
3558             }
3559         }
3560     }
3561
3562   if (((cxx_dialect == cxx98) && TREE_CODE (decl) != TYPE_DECL)
3563       || is_partial 
3564       || !is_primary
3565       || is_friend_decl)
3566     /* For an ordinary class template, default template arguments are
3567        allowed at the innermost level, e.g.:
3568          template <class T = int>
3569          struct S {};
3570        but, in a partial specialization, they're not allowed even
3571        there, as we have in [temp.class.spec]:
3572
3573          The template parameter list of a specialization shall not
3574          contain default template argument values.
3575
3576        So, for a partial specialization, or for a function template
3577        (in C++98/C++03), we look at all of them.  */
3578     ;
3579   else
3580     /* But, for a primary class template that is not a partial
3581        specialization we look at all template parameters except the
3582        innermost ones.  */
3583     parms = TREE_CHAIN (parms);
3584
3585   /* Figure out what error message to issue.  */
3586   if (is_friend_decl == 2)
3587     msg = "default template arguments may not be used in function template friend re-declaration";
3588   else if (is_friend_decl)
3589     msg = "default template arguments may not be used in function template friend declarations";
3590   else if (TREE_CODE (decl) == FUNCTION_DECL && (cxx_dialect == cxx98))
3591     msg = "default template arguments may not be used in function templates";
3592   else if (is_partial)
3593     msg = "default template arguments may not be used in partial specializations";
3594   else
3595     msg = "default argument for template parameter for class enclosing %qD";
3596
3597   if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
3598     /* If we're inside a class definition, there's no need to
3599        examine the parameters to the class itself.  On the one
3600        hand, they will be checked when the class is defined, and,
3601        on the other, default arguments are valid in things like:
3602          template <class T = double>
3603          struct S { template <class U> void f(U); };
3604        Here the default argument for `S' has no bearing on the
3605        declaration of `f'.  */
3606     last_level_to_check = template_class_depth (current_class_type) + 1;
3607   else
3608     /* Check everything.  */
3609     last_level_to_check = 0;
3610
3611   for (parm_level = parms;
3612        parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check;
3613        parm_level = TREE_CHAIN (parm_level))
3614     {
3615       tree inner_parms = TREE_VALUE (parm_level);
3616       int i;
3617       int ntparms;
3618
3619       ntparms = TREE_VEC_LENGTH (inner_parms);
3620       for (i = 0; i < ntparms; ++i)
3621         {
3622           if (TREE_VEC_ELT (inner_parms, i) == error_mark_node)
3623             continue;
3624
3625           if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
3626             {
3627               if (msg)
3628                 {
3629                   no_errors = false;
3630                   if (is_friend_decl == 2)
3631                     return no_errors;
3632
3633                   error (msg, decl);
3634                   msg = 0;
3635                 }
3636
3637               /* Clear out the default argument so that we are not
3638                  confused later.  */
3639               TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
3640             }
3641         }
3642
3643       /* At this point, if we're still interested in issuing messages,
3644          they must apply to classes surrounding the object declared.  */
3645       if (msg)
3646         msg = "default argument for template parameter for class enclosing %qD";
3647     }
3648
3649   return no_errors;
3650 }
3651
3652 /* Worker for push_template_decl_real, called via
3653    for_each_template_parm.  DATA is really an int, indicating the
3654    level of the parameters we are interested in.  If T is a template
3655    parameter of that level, return nonzero.  */
3656
3657 static int
3658 template_parm_this_level_p (tree t, void* data)
3659 {
3660   int this_level = *(int *)data;
3661   int level;
3662
3663   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
3664     level = TEMPLATE_PARM_LEVEL (t);
3665   else
3666     level = TEMPLATE_TYPE_LEVEL (t);
3667   return level == this_level;
3668 }
3669
3670 /* Creates a TEMPLATE_DECL for the indicated DECL using the template
3671    parameters given by current_template_args, or reuses a
3672    previously existing one, if appropriate.  Returns the DECL, or an
3673    equivalent one, if it is replaced via a call to duplicate_decls.
3674
3675    If IS_FRIEND is true, DECL is a friend declaration.  */
3676
3677 tree
3678 push_template_decl_real (tree decl, bool is_friend)
3679 {
3680   tree tmpl;
3681   tree args;
3682   tree info;
3683   tree ctx;
3684   int primary;
3685   int is_partial;
3686   int new_template_p = 0;
3687   /* True if the template is a member template, in the sense of
3688      [temp.mem].  */
3689   bool member_template_p = false;
3690
3691   if (decl == error_mark_node)
3692     return decl;
3693
3694   /* See if this is a partial specialization.  */
3695   is_partial = (DECL_IMPLICIT_TYPEDEF_P (decl)
3696                 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
3697                 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)));
3698
3699   if (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl))
3700     is_friend = true;
3701
3702   if (is_friend)
3703     /* For a friend, we want the context of the friend function, not
3704        the type of which it is a friend.  */
3705     ctx = DECL_CONTEXT (decl);
3706   else if (CP_DECL_CONTEXT (decl)
3707            && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
3708     /* In the case of a virtual function, we want the class in which
3709        it is defined.  */
3710     ctx = CP_DECL_CONTEXT (decl);
3711   else
3712     /* Otherwise, if we're currently defining some class, the DECL
3713        is assumed to be a member of the class.  */
3714     ctx = current_scope ();
3715
3716   if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
3717     ctx = NULL_TREE;
3718
3719   if (!DECL_CONTEXT (decl))
3720     DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
3721
3722   /* See if this is a primary template.  */
3723   if (is_friend && ctx)
3724     /* A friend template that specifies a class context, i.e.
3725          template <typename T> friend void A<T>::f();
3726        is not primary.  */
3727     primary = 0;
3728   else
3729     primary = template_parm_scope_p ();
3730
3731   if (primary)
3732     {
3733       if (DECL_CLASS_SCOPE_P (decl))
3734         member_template_p = true;
3735       if (TREE_CODE (decl) == TYPE_DECL
3736           && ANON_AGGRNAME_P (DECL_NAME (decl)))
3737         error ("template class without a name");
3738       else if (TREE_CODE (decl) == FUNCTION_DECL)
3739         {
3740           if (DECL_DESTRUCTOR_P (decl))
3741             {
3742               /* [temp.mem]
3743
3744                  A destructor shall not be a member template.  */
3745               error ("destructor %qD declared as member template", decl);
3746               return error_mark_node;
3747             }
3748           if (NEW_DELETE_OPNAME_P (DECL_NAME (decl))
3749               && (!TYPE_ARG_TYPES (TREE_TYPE (decl))
3750                   || TYPE_ARG_TYPES (TREE_TYPE (decl)) == void_list_node
3751                   || !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
3752                   || (TREE_CHAIN (TYPE_ARG_TYPES ((TREE_TYPE (decl))))
3753                       == void_list_node)))
3754             {
3755               /* [basic.stc.dynamic.allocation]
3756
3757                  An allocation function can be a function
3758                  template. ... Template allocation functions shall
3759                  have two or more parameters.  */
3760               error ("invalid template declaration of %qD", decl);
3761               return error_mark_node;
3762             }
3763         }
3764       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
3765                && CLASS_TYPE_P (TREE_TYPE (decl)))
3766         /* OK */;
3767       else
3768         {
3769           error ("template declaration of %q#D", decl);
3770           return error_mark_node;
3771         }
3772     }
3773
3774   /* Check to see that the rules regarding the use of default
3775      arguments are not being violated.  */
3776   check_default_tmpl_args (decl, current_template_parms,
3777                            primary, is_partial, /*is_friend_decl=*/0);
3778
3779   /* Ensure that there are no parameter packs in the type of this
3780      declaration that have not been expanded.  */
3781   if (TREE_CODE (decl) == FUNCTION_DECL)
3782     {
3783       /* Check each of the arguments individually to see if there are
3784          any bare parameter packs.  */
3785       tree type = TREE_TYPE (decl);
3786       tree arg = DECL_ARGUMENTS (decl);
3787       tree argtype = TYPE_ARG_TYPES (type);
3788
3789       while (arg && argtype)
3790         {
3791           if (!FUNCTION_PARAMETER_PACK_P (arg)
3792               && !check_for_bare_parameter_packs (TREE_TYPE (arg)))
3793             {
3794             /* This is a PARM_DECL that contains unexpanded parameter
3795                packs. We have already complained about this in the
3796                check_for_bare_parameter_packs call, so just replace
3797                these types with ERROR_MARK_NODE.  */
3798               TREE_TYPE (arg) = error_mark_node;
3799               TREE_VALUE (argtype) = error_mark_node;
3800             }
3801
3802           arg = TREE_CHAIN (arg);
3803           argtype = TREE_CHAIN (argtype);
3804         }
3805
3806       /* Check for bare parameter packs in the return type and the
3807          exception specifiers.  */
3808       check_for_bare_parameter_packs (TREE_TYPE (type));
3809       check_for_bare_parameter_packs (TYPE_RAISES_EXCEPTIONS (type));
3810     }
3811   else
3812     check_for_bare_parameter_packs (TREE_TYPE (decl));
3813
3814   if (is_partial)
3815     return process_partial_specialization (decl);
3816
3817   /* A primary class template can only have one parameter pack, at the
3818      end of the template parameter list.  */
3819   if (primary && TREE_CODE (decl) == TYPE_DECL)
3820     {
3821       tree inner_parms 
3822         = INNERMOST_TEMPLATE_PARMS (current_template_parms);
3823       int i, len = TREE_VEC_LENGTH (inner_parms);
3824       for (i = 0; i < len - 1; i++)
3825         {
3826           tree parm = TREE_VALUE (TREE_VEC_ELT (inner_parms, i));
3827
3828           if (template_parameter_pack_p (parm))
3829             {
3830               if (TREE_CODE (parm) == PARM_DECL)
3831                 error ("parameter pack %qE must be at the end of the"
3832                        " template parameter list", parm);
3833               else
3834                 error ("parameter pack %qT must be at the end of the"
3835                        " template parameter list", TREE_TYPE (parm));
3836             }
3837         }
3838     }
3839
3840   args = current_template_args ();
3841
3842   if (!ctx
3843       || TREE_CODE (ctx) == FUNCTION_DECL
3844       || (CLASS_TYPE_P (ctx) && TYPE_BEING_DEFINED (ctx))
3845       || (is_friend && !DECL_TEMPLATE_INFO (decl)))
3846     {
3847       if (DECL_LANG_SPECIFIC (decl)
3848           && DECL_TEMPLATE_INFO (decl)
3849           && DECL_TI_TEMPLATE (decl))
3850         tmpl = DECL_TI_TEMPLATE (decl);
3851       /* If DECL is a TYPE_DECL for a class-template, then there won't
3852          be DECL_LANG_SPECIFIC.  The information equivalent to
3853          DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead.  */
3854       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
3855                && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
3856                && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
3857         {
3858           /* Since a template declaration already existed for this
3859              class-type, we must be redeclaring it here.  Make sure
3860              that the redeclaration is valid.  */
3861           redeclare_class_template (TREE_TYPE (decl),
3862                                     current_template_parms);
3863           /* We don't need to create a new TEMPLATE_DECL; just use the
3864              one we already had.  */
3865           tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
3866         }
3867       else
3868         {
3869           tmpl = build_template_decl (decl, current_template_parms,
3870                                       member_template_p);
3871           new_template_p = 1;
3872
3873           if (DECL_LANG_SPECIFIC (decl)
3874               && DECL_TEMPLATE_SPECIALIZATION (decl))
3875             {
3876               /* A specialization of a member template of a template
3877                  class.  */
3878               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
3879               DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
3880               DECL_TEMPLATE_INFO (decl) = NULL_TREE;
3881             }
3882         }
3883     }
3884   else
3885     {
3886       tree a, t, current, parms;
3887       int i;
3888       tree tinfo = get_template_info (decl);
3889
3890       if (!tinfo)
3891         {
3892           error ("template definition of non-template %q#D", decl);
3893           return decl;
3894         }
3895
3896       tmpl = TI_TEMPLATE (tinfo);
3897
3898       if (DECL_FUNCTION_TEMPLATE_P (tmpl)
3899           && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
3900           && DECL_TEMPLATE_SPECIALIZATION (decl)
3901           && DECL_MEMBER_TEMPLATE_P (tmpl))
3902         {
3903           tree new_tmpl;
3904
3905           /* The declaration is a specialization of a member
3906              template, declared outside the class.  Therefore, the
3907              innermost template arguments will be NULL, so we
3908              replace them with the arguments determined by the
3909              earlier call to check_explicit_specialization.  */
3910           args = DECL_TI_ARGS (decl);
3911
3912           new_tmpl
3913             = build_template_decl (decl, current_template_parms,
3914                                    member_template_p);
3915           DECL_TEMPLATE_RESULT (new_tmpl) = decl;
3916           TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
3917           DECL_TI_TEMPLATE (decl) = new_tmpl;
3918           SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
3919           DECL_TEMPLATE_INFO (new_tmpl)
3920             = tree_cons (tmpl, args, NULL_TREE);
3921
3922           register_specialization (new_tmpl,
3923                                    most_general_template (tmpl),
3924                                    args,
3925                                    is_friend);
3926           return decl;
3927         }
3928
3929       /* Make sure the template headers we got make sense.  */
3930
3931       parms = DECL_TEMPLATE_PARMS (tmpl);
3932       i = TMPL_PARMS_DEPTH (parms);
3933       if (TMPL_ARGS_DEPTH (args) != i)
3934         {
3935           error ("expected %d levels of template parms for %q#D, got %d",
3936                  i, decl, TMPL_ARGS_DEPTH (args));
3937         }
3938       else
3939         for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
3940           {
3941             a = TMPL_ARGS_LEVEL (args, i);
3942             t = INNERMOST_TEMPLATE_PARMS (parms);
3943
3944             if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
3945               {
3946                 if (current == decl)
3947                   error ("got %d template parameters for %q#D",
3948                          TREE_VEC_LENGTH (a), decl);
3949                 else
3950                   error ("got %d template parameters for %q#T",
3951                          TREE_VEC_LENGTH (a), current);
3952                 error ("  but %d required", TREE_VEC_LENGTH (t));
3953                 return error_mark_node;
3954               }
3955
3956             if (current == decl)
3957               current = ctx;
3958             else
3959               current = (TYPE_P (current)
3960                          ? TYPE_CONTEXT (current)
3961                          : DECL_CONTEXT (current));
3962           }
3963
3964       /* Check that the parms are used in the appropriate qualifying scopes
3965          in the declarator.  */
3966       if (!comp_template_args
3967           (TI_ARGS (tinfo),
3968            TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (tmpl)))))
3969         {
3970           error ("\
3971 template arguments to %qD do not match original template %qD",
3972                  decl, DECL_TEMPLATE_RESULT (tmpl));
3973           if (!uses_template_parms (TI_ARGS (tinfo)))
3974             inform ("use template<> for an explicit specialization");
3975           /* Avoid crash in import_export_decl.  */
3976           DECL_INTERFACE_KNOWN (decl) = 1;
3977           return error_mark_node;
3978         }
3979     }
3980
3981   DECL_TEMPLATE_RESULT (tmpl) = decl;
3982   TREE_TYPE (tmpl) = TREE_TYPE (decl);
3983
3984   /* Push template declarations for global functions and types.  Note
3985      that we do not try to push a global template friend declared in a
3986      template class; such a thing may well depend on the template
3987      parameters of the class.  */
3988   if (new_template_p && !ctx
3989       && !(is_friend && template_class_depth (current_class_type) > 0))
3990     {
3991       tmpl = pushdecl_namespace_level (tmpl, is_friend);
3992       if (tmpl == error_mark_node)
3993         return error_mark_node;
3994
3995       /* Hide template friend classes that haven't been declared yet.  */
3996       if (is_friend && TREE_CODE (decl) == TYPE_DECL)
3997         {
3998           DECL_ANTICIPATED (tmpl) = 1;
3999           DECL_FRIEND_P (tmpl) = 1;
4000         }
4001     }
4002
4003   if (primary)
4004     {
4005       tree parms = DECL_TEMPLATE_PARMS (tmpl);
4006       int i;
4007
4008       DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
4009       if (DECL_CONV_FN_P (tmpl))
4010         {
4011           int depth = TMPL_PARMS_DEPTH (parms);
4012
4013           /* It is a conversion operator. See if the type converted to
4014              depends on innermost template operands.  */
4015
4016           if (uses_template_parms_level (TREE_TYPE (TREE_TYPE (tmpl)),
4017                                          depth))
4018             DECL_TEMPLATE_CONV_FN_P (tmpl) = 1;
4019         }
4020
4021       /* Give template template parms a DECL_CONTEXT of the template
4022          for which they are a parameter.  */
4023       parms = INNERMOST_TEMPLATE_PARMS (parms);
4024       for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
4025         {
4026           tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
4027           if (TREE_CODE (parm) == TEMPLATE_DECL)
4028             DECL_CONTEXT (parm) = tmpl;
4029         }
4030     }
4031
4032   /* The DECL_TI_ARGS of DECL contains full set of arguments referring
4033      back to its most general template.  If TMPL is a specialization,
4034      ARGS may only have the innermost set of arguments.  Add the missing
4035      argument levels if necessary.  */
4036   if (DECL_TEMPLATE_INFO (tmpl))
4037     args = add_outermost_template_args (DECL_TI_ARGS (tmpl), args);
4038
4039   info = tree_cons (tmpl, args, NULL_TREE);
4040
4041   if (DECL_IMPLICIT_TYPEDEF_P (decl))
4042     SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
4043   else if (DECL_LANG_SPECIFIC (decl))
4044     DECL_TEMPLATE_INFO (decl) = info;
4045
4046   return DECL_TEMPLATE_RESULT (tmpl);
4047 }
4048
4049 tree
4050 push_template_decl (tree decl)
4051 {
4052   return push_template_decl_real (decl, false);
4053 }
4054
4055 /* Called when a class template TYPE is redeclared with the indicated
4056    template PARMS, e.g.:
4057
4058      template <class T> struct S;
4059      template <class T> struct S {};  */
4060
4061 bool
4062 redeclare_class_template (tree type, tree parms)
4063 {
4064   tree tmpl;
4065   tree tmpl_parms;
4066   int i;
4067
4068   if (!TYPE_TEMPLATE_INFO (type))
4069     {
4070       error ("%qT is not a template type", type);
4071       return false;
4072     }
4073
4074   tmpl = TYPE_TI_TEMPLATE (type);
4075   if (!PRIMARY_TEMPLATE_P (tmpl))
4076     /* The type is nested in some template class.  Nothing to worry
4077        about here; there are no new template parameters for the nested
4078        type.  */
4079     return true;
4080
4081   if (!parms)
4082     {
4083       error ("template specifiers not specified in declaration of %qD",
4084              tmpl);
4085       return false;
4086     }
4087
4088   parms = INNERMOST_TEMPLATE_PARMS (parms);
4089   tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
4090
4091   if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
4092     {
4093       error ("previous declaration %q+D", tmpl);
4094       error ("used %d template parameter(s) instead of %d",
4095              TREE_VEC_LENGTH (tmpl_parms),
4096              TREE_VEC_LENGTH (parms));
4097       return false;
4098     }
4099
4100   for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
4101     {
4102       tree tmpl_parm;
4103       tree parm;
4104       tree tmpl_default;
4105       tree parm_default;
4106
4107       if (TREE_VEC_ELT (tmpl_parms, i) == error_mark_node
4108           || TREE_VEC_ELT (parms, i) == error_mark_node)
4109         continue;
4110
4111       tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
4112       parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
4113       tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
4114       parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
4115
4116       /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
4117          TEMPLATE_DECL.  */
4118       if (tmpl_parm != error_mark_node
4119            && (TREE_CODE (tmpl_parm) != TREE_CODE (parm)
4120            || (TREE_CODE (tmpl_parm) != TYPE_DECL
4121                && !same_type_p (TREE_TYPE (tmpl_parm), TREE_TYPE (parm)))))
4122         {
4123           error ("template parameter %q+#D", tmpl_parm);
4124           error ("redeclared here as %q#D", parm);
4125           return false;
4126         }
4127
4128       if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
4129         {
4130           /* We have in [temp.param]:
4131
4132              A template-parameter may not be given default arguments
4133              by two different declarations in the same scope.  */
4134           error ("redefinition of default argument for %q#D", parm);
4135           error ("%J  original definition appeared here", tmpl_parm);
4136           return false;
4137         }
4138
4139       if (parm_default != NULL_TREE)
4140         /* Update the previous template parameters (which are the ones
4141            that will really count) with the new default value.  */
4142         TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
4143       else if (tmpl_default != NULL_TREE)
4144         /* Update the new parameters, too; they'll be used as the
4145            parameters for any members.  */
4146         TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
4147     }
4148
4149     return true;
4150 }
4151
4152 /* Simplify EXPR if it is a non-dependent expression.  Returns the
4153    (possibly simplified) expression.  */
4154
4155 tree
4156 fold_non_dependent_expr (tree expr)
4157 {
4158   if (expr == NULL_TREE)
4159     return NULL_TREE;
4160
4161   /* If we're in a template, but EXPR isn't value dependent, simplify
4162      it.  We're supposed to treat:
4163
4164        template <typename T> void f(T[1 + 1]);
4165        template <typename T> void f(T[2]);
4166
4167      as two declarations of the same function, for example.  */
4168   if (processing_template_decl
4169       && !type_dependent_expression_p (expr)
4170       && !value_dependent_expression_p (expr))
4171     {
4172       HOST_WIDE_INT saved_processing_template_decl;
4173
4174       saved_processing_template_decl = processing_template_decl;
4175       processing_template_decl = 0;
4176       expr = tsubst_copy_and_build (expr,
4177                                     /*args=*/NULL_TREE,
4178                                     tf_error,
4179                                     /*in_decl=*/NULL_TREE,
4180                                     /*function_p=*/false,
4181                                     /*integral_constant_expression_p=*/true);
4182       processing_template_decl = saved_processing_template_decl;
4183     }
4184   return expr;
4185 }
4186
4187 /* EXPR is an expression which is used in a constant-expression context.
4188    For instance, it could be a VAR_DECL with a constant initializer.
4189    Extract the innest constant expression.
4190
4191    This is basically a more powerful version of
4192    integral_constant_value, which can be used also in templates where
4193    initializers can maintain a syntactic rather than semantic form
4194    (even if they are non-dependent, for access-checking purposes).  */
4195
4196 static tree
4197 fold_decl_constant_value (tree expr)
4198 {
4199   tree const_expr = expr;
4200   do
4201     {
4202       expr = fold_non_dependent_expr (const_expr);
4203       const_expr = integral_constant_value (expr);
4204     }
4205   while (expr != const_expr);
4206
4207   return expr;
4208 }
4209
4210 /* Subroutine of convert_nontype_argument. Converts EXPR to TYPE, which
4211    must be a function or a pointer-to-function type, as specified
4212    in [temp.arg.nontype]: disambiguate EXPR if it is an overload set,
4213    and check that the resulting function has external linkage.  */
4214
4215 static tree
4216 convert_nontype_argument_function (tree type, tree expr)
4217 {
4218   tree fns = expr;
4219   tree fn, fn_no_ptr;
4220
4221   fn = instantiate_type (type, fns, tf_none);
4222   if (fn == error_mark_node)
4223     return error_mark_node;
4224
4225   fn_no_ptr = fn;
4226   if (TREE_CODE (fn_no_ptr) == ADDR_EXPR)
4227     fn_no_ptr = TREE_OPERAND (fn_no_ptr, 0);
4228   if (TREE_CODE (fn_no_ptr) == BASELINK)
4229     fn_no_ptr = BASELINK_FUNCTIONS (fn_no_ptr);
4230  
4231   /* [temp.arg.nontype]/1
4232
4233      A template-argument for a non-type, non-template template-parameter
4234      shall be one of:
4235      [...]
4236      -- the address of an object or function with external linkage.  */
4237   if (!DECL_EXTERNAL_LINKAGE_P (fn_no_ptr))
4238     {
4239       error ("%qE is not a valid template argument for type %qT "
4240              "because function %qD has not external linkage",
4241              expr, type, fn_no_ptr);
4242       return NULL_TREE;
4243     }
4244
4245   return fn;
4246 }
4247
4248 /* Attempt to convert the non-type template parameter EXPR to the
4249    indicated TYPE.  If the conversion is successful, return the
4250    converted value.  If the conversion is unsuccessful, return
4251    NULL_TREE if we issued an error message, or error_mark_node if we
4252    did not.  We issue error messages for out-and-out bad template
4253    parameters, but not simply because the conversion failed, since we
4254    might be just trying to do argument deduction.  Both TYPE and EXPR
4255    must be non-dependent.
4256
4257    The conversion follows the special rules described in
4258    [temp.arg.nontype], and it is much more strict than an implicit
4259    conversion.
4260
4261    This function is called twice for each template argument (see
4262    lookup_template_class for a more accurate description of this
4263    problem). This means that we need to handle expressions which
4264    are not valid in a C++ source, but can be created from the
4265    first call (for instance, casts to perform conversions). These
4266    hacks can go away after we fix the double coercion problem.  */
4267
4268 static tree
4269 convert_nontype_argument (tree type, tree expr)
4270 {
4271   tree expr_type;
4272
4273   /* Detect immediately string literals as invalid non-type argument.
4274      This special-case is not needed for correctness (we would easily
4275      catch this later), but only to provide better diagnostic for this
4276      common user mistake. As suggested by DR 100, we do not mention
4277      linkage issues in the diagnostic as this is not the point.  */
4278   if (TREE_CODE (expr) == STRING_CST)
4279     {
4280       error ("%qE is not a valid template argument for type %qT "
4281              "because string literals can never be used in this context",
4282              expr, type);
4283       return NULL_TREE;
4284     }
4285
4286   /* If we are in a template, EXPR may be non-dependent, but still
4287      have a syntactic, rather than semantic, form.  For example, EXPR
4288      might be a SCOPE_REF, rather than the VAR_DECL to which the
4289      SCOPE_REF refers.  Preserving the qualifying scope is necessary
4290      so that access checking can be performed when the template is
4291      instantiated -- but here we need the resolved form so that we can
4292      convert the argument.  */
4293   expr = fold_non_dependent_expr (expr);
4294   if (error_operand_p (expr))
4295     return error_mark_node;
4296   expr_type = TREE_TYPE (expr);
4297
4298   /* HACK: Due to double coercion, we can get a
4299      NOP_EXPR<REFERENCE_TYPE>(ADDR_EXPR<POINTER_TYPE> (arg)) here,
4300      which is the tree that we built on the first call (see
4301      below when coercing to reference to object or to reference to
4302      function). We just strip everything and get to the arg.
4303      See g++.old-deja/g++.oliva/template4.C and g++.dg/template/nontype9.C
4304      for examples.  */
4305   if (TREE_CODE (expr) == NOP_EXPR)
4306     {
4307       if (TYPE_REF_OBJ_P (type) || TYPE_REFFN_P (type))
4308         {
4309           /* ??? Maybe we could use convert_from_reference here, but we
4310              would need to relax its constraints because the NOP_EXPR
4311              could actually change the type to something more cv-qualified,
4312              and this is not folded by convert_from_reference.  */
4313           tree addr = TREE_OPERAND (expr, 0);
4314           gcc_assert (TREE_CODE (expr_type) == REFERENCE_TYPE);
4315           gcc_assert (TREE_CODE (addr) == ADDR_EXPR);
4316           gcc_assert (TREE_CODE (TREE_TYPE (addr)) == POINTER_TYPE);
4317           gcc_assert (same_type_ignoring_top_level_qualifiers_p
4318                       (TREE_TYPE (expr_type),
4319                        TREE_TYPE (TREE_TYPE (addr))));
4320
4321           expr = TREE_OPERAND (addr, 0);
4322           expr_type = TREE_TYPE (expr);
4323         }
4324
4325       /* We could also generate a NOP_EXPR(ADDR_EXPR()) when the
4326          parameter is a pointer to object, through decay and
4327          qualification conversion. Let's strip everything.  */
4328       else if (TYPE_PTROBV_P (type))
4329         {
4330           STRIP_NOPS (expr);
4331           gcc_assert (TREE_CODE (expr) == ADDR_EXPR);
4332           gcc_assert (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE);
4333           /* Skip the ADDR_EXPR only if it is part of the decay for
4334              an array. Otherwise, it is part of the original argument
4335              in the source code.  */
4336           if (TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == ARRAY_TYPE)
4337             expr = TREE_OPERAND (expr, 0);
4338           expr_type = TREE_TYPE (expr);
4339         }
4340     }
4341
4342   /* [temp.arg.nontype]/5, bullet 1
4343
4344      For a non-type template-parameter of integral or enumeration type,
4345      integral promotions (_conv.prom_) and integral conversions
4346      (_conv.integral_) are applied.  */
4347   if (INTEGRAL_TYPE_P (type))
4348     {
4349       if (!INTEGRAL_TYPE_P (expr_type))
4350         return error_mark_node;
4351
4352       expr = fold_decl_constant_value (expr);
4353       /* Notice that there are constant expressions like '4 % 0' which
4354          do not fold into integer constants.  */
4355       if (TREE_CODE (expr) != INTEGER_CST)
4356         {
4357           error ("%qE is not a valid template argument for type %qT "
4358                  "because it is a non-constant expression", expr, type);
4359           return NULL_TREE;
4360         }
4361
4362       /* At this point, an implicit conversion does what we want,
4363          because we already know that the expression is of integral
4364          type.  */
4365       expr = ocp_convert (type, expr, CONV_IMPLICIT, LOOKUP_PROTECT);
4366       if (expr == error_mark_node)
4367         return error_mark_node;
4368
4369       /* Conversion was allowed: fold it to a bare integer constant.  */
4370       expr = fold (expr);
4371     }
4372   /* [temp.arg.nontype]/5, bullet 2
4373
4374      For a non-type template-parameter of type pointer to object,
4375      qualification conversions (_conv.qual_) and the array-to-pointer
4376      conversion (_conv.array_) are applied.  */
4377   else if (TYPE_PTROBV_P (type))
4378     {
4379       /* [temp.arg.nontype]/1  (TC1 version, DR 49):
4380
4381          A template-argument for a non-type, non-template template-parameter
4382          shall be one of: [...]
4383
4384          -- the name of a non-type template-parameter;
4385          -- the address of an object or function with external linkage, [...]
4386             expressed as "& id-expression" where the & is optional if the name
4387             refers to a function or array, or if the corresponding
4388             template-parameter is a reference.
4389
4390         Here, we do not care about functions, as they are invalid anyway
4391         for a parameter of type pointer-to-object.  */
4392
4393       if (DECL_P (expr) && DECL_TEMPLATE_PARM_P (expr))
4394         /* Non-type template parameters are OK.  */
4395         ;
4396       else if (TREE_CODE (expr) != ADDR_EXPR
4397                && TREE_CODE (expr_type) != ARRAY_TYPE)
4398         {
4399           if (TREE_CODE (expr) == VAR_DECL)
4400             {
4401               error ("%qD is not a valid template argument "
4402                      "because %qD is a variable, not the address of "
4403                      "a variable",
4404                      expr, expr);
4405               return NULL_TREE;
4406             }
4407           /* Other values, like integer constants, might be valid
4408              non-type arguments of some other type.  */
4409           return error_mark_node;
4410         }
4411       else
4412         {
4413           tree decl;
4414
4415           decl = ((TREE_CODE (expr) == ADDR_EXPR)
4416                   ? TREE_OPERAND (expr, 0) : expr);
4417           if (TREE_CODE (decl) != VAR_DECL)
4418             {
4419               error ("%qE is not a valid template argument of type %qT "
4420                      "because %qE is not a variable",
4421                      expr, type, decl);
4422               return NULL_TREE;
4423             }
4424           else if (!DECL_EXTERNAL_LINKAGE_P (decl))
4425             {
4426               error ("%qE is not a valid template argument of type %qT "
4427                      "because %qD does not have external linkage",
4428                      expr, type, decl);
4429               return NULL_TREE;
4430             }
4431         }
4432
4433       expr = decay_conversion (expr);
4434       if (expr == error_mark_node)
4435         return error_mark_node;
4436
4437       expr = perform_qualification_conversions (type, expr);
4438       if (expr == error_mark_node)
4439         return error_mark_node;
4440     }
4441   /* [temp.arg.nontype]/5, bullet 3
4442
4443      For a non-type template-parameter of type reference to object, no
4444      conversions apply. The type referred to by the reference may be more
4445      cv-qualified than the (otherwise identical) type of the
4446      template-argument. The template-parameter is bound directly to the
4447      template-argument, which must be an lvalue.  */
4448   else if (TYPE_REF_OBJ_P (type))
4449     {
4450       if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type),
4451                                                       expr_type))
4452         return error_mark_node;
4453
4454       if (!at_least_as_qualified_p (TREE_TYPE (type), expr_type))
4455         {
4456           error ("%qE is not a valid template argument for type %qT "
4457                  "because of conflicts in cv-qualification", expr, type);
4458           return NULL_TREE;
4459         }
4460
4461       if (!real_lvalue_p (expr))
4462         {
4463           error ("%qE is not a valid template argument for type %qT "
4464                  "because it is not an lvalue", expr, type);
4465           return NULL_TREE;
4466         }
4467
4468       /* [temp.arg.nontype]/1
4469
4470          A template-argument for a non-type, non-template template-parameter
4471          shall be one of: [...]
4472
4473          -- the address of an object or function with external linkage.  */
4474       if (!DECL_EXTERNAL_LINKAGE_P (expr))
4475         {
4476           error ("%qE is not a valid template argument for type %qT "
4477                  "because object %qD has not external linkage",
4478                  expr, type, expr);
4479           return NULL_TREE;
4480         }
4481
4482       expr = build_nop (type, build_address (expr));
4483     }
4484   /* [temp.arg.nontype]/5, bullet 4
4485
4486      For a non-type template-parameter of type pointer to function, only
4487      the function-to-pointer conversion (_conv.func_) is applied. If the
4488      template-argument represents a set of overloaded functions (or a
4489      pointer to such), the matching function is selected from the set
4490      (_over.over_).  */
4491   else if (TYPE_PTRFN_P (type))
4492     {
4493       /* If the argument is a template-id, we might not have enough
4494          context information to decay the pointer.  */
4495       if (!type_unknown_p (expr_type))
4496         {
4497           expr = decay_conversion (expr);
4498           if (expr == error_mark_node)
4499             return error_mark_node;
4500         }
4501
4502       expr = convert_nontype_argument_function (type, expr);
4503       if (!expr || expr == error_mark_node)
4504         return expr;
4505     }
4506   /* [temp.arg.nontype]/5, bullet 5
4507
4508      For a non-type template-parameter of type reference to function, no
4509      conversions apply. If the template-argument represents a set of
4510      overloaded functions, the matching function is selected from the set
4511      (_over.over_).  */
4512   else if (TYPE_REFFN_P (type))
4513     {
4514       if (TREE_CODE (expr) == ADDR_EXPR)
4515         {
4516           error ("%qE is not a valid template argument for type %qT "
4517                  "because it is a pointer", expr, type);
4518           inform ("try using %qE instead", TREE_OPERAND (expr, 0));
4519           return NULL_TREE;
4520         }
4521
4522       expr = convert_nontype_argument_function (TREE_TYPE (type), expr);
4523       if (!expr || expr == error_mark_node)
4524         return expr;
4525
4526       expr = build_nop (type, build_address (expr));
4527     }
4528   /* [temp.arg.nontype]/5, bullet 6
4529
4530      For a non-type template-parameter of type pointer to member function,
4531      no conversions apply. If the template-argument represents a set of
4532      overloaded member functions, the matching member function is selected
4533      from the set (_over.over_).  */
4534   else if (TYPE_PTRMEMFUNC_P (type))
4535     {
4536       expr = instantiate_type (type, expr, tf_none);
4537       if (expr == error_mark_node)
4538         return error_mark_node;
4539
4540       /* There is no way to disable standard conversions in
4541          resolve_address_of_overloaded_function (called by
4542          instantiate_type). It is possible that the call succeeded by
4543          converting &B::I to &D::I (where B is a base of D), so we need
4544          to reject this conversion here.
4545
4546          Actually, even if there was a way to disable standard conversions,
4547          it would still be better to reject them here so that we can
4548          provide a superior diagnostic.  */
4549       if (!same_type_p (TREE_TYPE (expr), type))
4550         {
4551           /* Make sure we are just one standard conversion off.  */
4552           gcc_assert (can_convert (type, TREE_TYPE (expr)));
4553           error ("%qE is not a valid template argument for type %qT "
4554                  "because it is of type %qT", expr, type,
4555                  TREE_TYPE (expr));
4556           inform ("standard conversions are not allowed in this context");
4557           return NULL_TREE;
4558         }
4559     }
4560   /* [temp.arg.nontype]/5, bullet 7
4561
4562      For a non-type template-parameter of type pointer to data member,
4563      qualification conversions (_conv.qual_) are applied.  */
4564   else if (TYPE_PTRMEM_P (type))
4565     {
4566       expr = perform_qualification_conversions (type, expr);
4567       if (expr == error_mark_node)
4568         return expr;
4569     }
4570   /* A template non-type parameter must be one of the above.  */
4571   else
4572     gcc_unreachable ();
4573
4574   /* Sanity check: did we actually convert the argument to the
4575      right type?  */
4576   gcc_assert (same_type_p (type, TREE_TYPE (expr)));
4577   return expr;
4578 }
4579
4580
4581 /* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
4582    template template parameters.  Both PARM_PARMS and ARG_PARMS are
4583    vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
4584    or PARM_DECL.
4585
4586    Consider the example:
4587      template <class T> class A;
4588      template<template <class U> class TT> class B;
4589
4590    For B<A>, PARM_PARMS are the parameters to TT, while ARG_PARMS are
4591    the parameters to A, and OUTER_ARGS contains A.  */
4592
4593 static int
4594 coerce_template_template_parms (tree parm_parms,
4595                                 tree arg_parms,
4596                                 tsubst_flags_t complain,
4597                                 tree in_decl,
4598                                 tree outer_args)
4599 {
4600   int nparms, nargs, i;
4601   tree parm, arg;
4602
4603   gcc_assert (TREE_CODE (parm_parms) == TREE_VEC);
4604   gcc_assert (TREE_CODE (arg_parms) == TREE_VEC);
4605
4606   nparms = TREE_VEC_LENGTH (parm_parms);
4607   nargs = TREE_VEC_LENGTH (arg_parms);
4608
4609   if (nargs != nparms)
4610     return 0;
4611
4612   for (i = 0; i < nparms; ++i)
4613     {
4614       if (TREE_VEC_ELT (parm_parms, i) == error_mark_node
4615           || TREE_VEC_ELT (arg_parms, i) == error_mark_node)
4616         continue;
4617
4618       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
4619       arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
4620
4621       if (arg == NULL_TREE || arg == error_mark_node
4622           || parm == NULL_TREE || parm == error_mark_node)
4623         return 0;
4624
4625       if (TREE_CODE (arg) != TREE_CODE (parm))
4626         return 0;
4627
4628       switch (TREE_CODE (parm))
4629         {
4630         case TEMPLATE_DECL:
4631           /* We encounter instantiations of templates like
4632                template <template <template <class> class> class TT>
4633                class C;  */
4634           {
4635             tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
4636             tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
4637
4638             if (!coerce_template_template_parms
4639                 (parmparm, argparm, complain, in_decl, outer_args))
4640               return 0;
4641           }
4642           /* Fall through.  */
4643
4644         case TYPE_DECL:
4645           if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm))
4646               != TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (arg)))
4647             /* One is a parameter pack, the other is not.  */
4648             return 0;
4649           break;
4650
4651         case PARM_DECL:
4652           /* The tsubst call is used to handle cases such as
4653
4654                template <int> class C {};
4655                template <class T, template <T> class TT> class D {};
4656                D<int, C> d;
4657
4658              i.e. the parameter list of TT depends on earlier parameters.  */
4659           if (!dependent_type_p (TREE_TYPE (arg))
4660               && !same_type_p
4661                     (tsubst (TREE_TYPE (parm), outer_args, complain, in_decl),
4662                              TREE_TYPE (arg)))
4663             return 0;
4664
4665           if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm))
4666               != TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (arg)))
4667             /* One is a parameter pack, the other is not.  */
4668             return 0;
4669           break;
4670
4671         default:
4672           gcc_unreachable ();
4673         }
4674     }
4675   return 1;
4676 }
4677
4678 /* Convert the indicated template ARG as necessary to match the
4679    indicated template PARM.  Returns the converted ARG, or
4680    error_mark_node if the conversion was unsuccessful.  Error and
4681    warning messages are issued under control of COMPLAIN.  This
4682    conversion is for the Ith parameter in the parameter list.  ARGS is
4683    the full set of template arguments deduced so far.  */
4684
4685 static tree
4686 convert_template_argument (tree parm,
4687                            tree arg,
4688                            tree args,
4689                            tsubst_flags_t complain,
4690                            int i,
4691                            tree in_decl)
4692 {
4693   tree orig_arg;
4694   tree val;
4695   int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
4696
4697   if (TREE_CODE (arg) == TREE_LIST
4698       && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
4699     {
4700       /* The template argument was the name of some
4701          member function.  That's usually
4702          invalid, but static members are OK.  In any
4703          case, grab the underlying fields/functions
4704          and issue an error later if required.  */
4705       orig_arg = TREE_VALUE (arg);
4706       TREE_TYPE (arg) = unknown_type_node;
4707     }
4708
4709   orig_arg = arg;
4710
4711   requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
4712   requires_type = (TREE_CODE (parm) == TYPE_DECL
4713                    || requires_tmpl_type);
4714
4715   /* When determining whether an argument pack expansion is a template,
4716      look at the pattern.  */
4717   if (TREE_CODE (arg) == TYPE_PACK_EXPANSION)
4718     arg = PACK_EXPANSION_PATTERN (arg);
4719
4720   is_tmpl_type = 
4721     ((TREE_CODE (arg) == TEMPLATE_DECL
4722       && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
4723      || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
4724      || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
4725
4726   if (is_tmpl_type
4727       && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
4728           || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
4729     arg = TYPE_STUB_DECL (arg);
4730
4731   is_type = TYPE_P (arg) || is_tmpl_type;
4732
4733   if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
4734       && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
4735     {
4736       pedwarn ("to refer to a type member of a template parameter, "
4737                "use %<typename %E%>", orig_arg);
4738
4739       orig_arg = make_typename_type (TREE_OPERAND (arg, 0),
4740                                      TREE_OPERAND (arg, 1),
4741                                      typename_type,
4742                                      complain & tf_error);
4743       arg = orig_arg;
4744       is_type = 1;
4745     }
4746   if (is_type != requires_type)
4747     {
4748       if (in_decl)
4749         {
4750           if (complain & tf_error)
4751             {
4752               error ("type/value mismatch at argument %d in template "
4753                      "parameter list for %qD",
4754                      i + 1, in_decl);
4755               if (is_type)
4756                 error ("  expected a constant of type %qT, got %qT",
4757                        TREE_TYPE (parm),
4758                        (is_tmpl_type ? DECL_NAME (arg) : orig_arg));
4759               else if (requires_tmpl_type)
4760                 error ("  expected a class template, got %qE", orig_arg);
4761               else
4762                 error ("  expected a type, got %qE", orig_arg);
4763             }
4764         }
4765       return error_mark_node;
4766     }
4767   if (is_tmpl_type ^ requires_tmpl_type)
4768     {
4769       if (in_decl && (complain & tf_error))
4770         {
4771           error ("type/value mismatch at argument %d in template "
4772                  "parameter list for %qD",
4773                  i + 1, in_decl);
4774           if (is_tmpl_type)
4775             error ("  expected a type, got %qT", DECL_NAME (arg));
4776           else
4777             error ("  expected a class template, got %qT", orig_arg);
4778         }
4779       return error_mark_node;
4780     }
4781
4782   if (is_type)
4783     {
4784       if (requires_tmpl_type)
4785         {
4786           if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
4787             /* The number of argument required is not known yet.
4788                Just accept it for now.  */
4789             val = TREE_TYPE (arg);
4790           else
4791             {
4792               tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
4793               tree argparm;
4794
4795               argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
4796
4797               if (coerce_template_template_parms (parmparm, argparm,
4798                                                   complain, in_decl,
4799                                                   args))
4800                 {
4801                   val = orig_arg;
4802
4803                   /* TEMPLATE_TEMPLATE_PARM node is preferred over
4804                      TEMPLATE_DECL.  */
4805                   if (val != error_mark_node)
4806                     {
4807                       if (DECL_TEMPLATE_TEMPLATE_PARM_P (val))
4808                         val = TREE_TYPE (val);
4809                       else if (TREE_CODE (val) == TYPE_PACK_EXPANSION
4810                                && DECL_TEMPLATE_TEMPLATE_PARM_P (arg))
4811                         {
4812                           val = TREE_TYPE (arg);
4813                           val = make_pack_expansion (val);
4814                         }
4815                     }
4816                 }
4817               else
4818                 {
4819                   if (in_decl && (complain & tf_error))
4820                     {
4821                       error ("type/value mismatch at argument %d in "
4822                              "template parameter list for %qD",
4823                              i + 1, in_decl);
4824                       error ("  expected a template of type %qD, got %qD",
4825                              parm, orig_arg);
4826                     }
4827
4828                   val = error_mark_node;
4829                 }
4830             }
4831         }
4832       else
4833         val = orig_arg;
4834       /* We only form one instance of each template specialization.
4835          Therefore, if we use a non-canonical variant (i.e., a
4836          typedef), any future messages referring to the type will use
4837          the typedef, which is confusing if those future uses do not
4838          themselves also use the typedef.  */
4839       if (TYPE_P (val))
4840         val = canonical_type_variant (val);
4841     }
4842   else
4843     {
4844       tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
4845
4846       if (invalid_nontype_parm_type_p (t, complain))
4847         return error_mark_node;
4848
4849       if (!uses_template_parms (orig_arg) && !uses_template_parms (t))
4850         /* We used to call digest_init here.  However, digest_init
4851            will report errors, which we don't want when complain
4852            is zero.  More importantly, digest_init will try too
4853            hard to convert things: for example, `0' should not be
4854            converted to pointer type at this point according to
4855            the standard.  Accepting this is not merely an
4856            extension, since deciding whether or not these
4857            conversions can occur is part of determining which
4858            function template to call, or whether a given explicit
4859            argument specification is valid.  */
4860         val = convert_nontype_argument (t, orig_arg);
4861       else
4862         val = orig_arg;
4863
4864       if (val == NULL_TREE)
4865         val = error_mark_node;
4866       else if (val == error_mark_node && (complain & tf_error))
4867         error ("could not convert template argument %qE to %qT",  orig_arg, t);
4868     }
4869
4870   return val;
4871 }
4872
4873 /* Coerces the remaining template arguments in INNER_ARGS (from
4874    ARG_IDX to the end) into the parameter pack at PARM_IDX in PARMS.
4875    Returns the coerced argument pack. PARM_IDX is the position of this
4876    parameter in the template parameter list. ARGS is the original
4877    template argument list.  */
4878 static tree
4879 coerce_template_parameter_pack (tree parms,
4880                                 int parm_idx,
4881                                 tree args,
4882                                 tree inner_args,
4883                                 int arg_idx,
4884                                 tree new_args,
4885                                 int* lost,
4886                                 tree in_decl,
4887                                 tsubst_flags_t complain)
4888 {
4889   tree parm = TREE_VEC_ELT (parms, parm_idx);
4890   int nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
4891   tree packed_args;
4892   tree argument_pack;
4893   tree packed_types = NULL_TREE;
4894
4895   if (arg_idx > nargs)
4896     arg_idx = nargs;
4897
4898   packed_args = make_tree_vec (nargs - arg_idx);
4899
4900   if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL
4901       && uses_parameter_packs (TREE_TYPE (TREE_VALUE (parm))))
4902     {
4903       /* When the template parameter is a non-type template
4904          parameter pack whose type uses parameter packs, we need
4905          to look at each of the template arguments
4906          separately. Build a vector of the types for these
4907          non-type template parameters in PACKED_TYPES.  */
4908       tree expansion 
4909         = make_pack_expansion (TREE_TYPE (TREE_VALUE (parm)));
4910       packed_types = tsubst_pack_expansion (expansion, args,
4911                                             complain, in_decl);
4912
4913       if (packed_types == error_mark_node)
4914         return error_mark_node;
4915
4916       /* Check that we have the right number of arguments.  */
4917       if (arg_idx < nargs
4918           && !PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx))
4919           && nargs - arg_idx != TREE_VEC_LENGTH (packed_types))
4920         {
4921           int needed_parms 
4922             = TREE_VEC_LENGTH (parms) - 1 + TREE_VEC_LENGTH (packed_types);
4923           error ("wrong number of template arguments (%d, should be %d)",
4924                  nargs, needed_parms);
4925           return error_mark_node;
4926         }
4927
4928       /* If we aren't able to check the actual arguments now
4929          (because they haven't been expanded yet), we can at least
4930          verify that all of the types used for the non-type
4931          template parameter pack are, in fact, valid for non-type
4932          template parameters.  */
4933       if (arg_idx < nargs 
4934           && PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx)))
4935         {
4936           int j, len = TREE_VEC_LENGTH (packed_types);
4937           for (j = 0; j < len; ++j)
4938             {
4939               tree t = TREE_VEC_ELT (packed_types, j);
4940               if (invalid_nontype_parm_type_p (t, complain))
4941                 return error_mark_node;
4942             }
4943         }
4944     }
4945
4946   /* Convert the remaining arguments, which will be a part of the
4947      parameter pack "parm".  */
4948   for (; arg_idx < nargs; ++arg_idx)
4949     {
4950       tree arg = TREE_VEC_ELT (inner_args, arg_idx);
4951       tree actual_parm = TREE_VALUE (parm);
4952
4953       if (packed_types && !PACK_EXPANSION_P (arg))
4954         {
4955           /* When we have a vector of types (corresponding to the
4956              non-type template parameter pack that uses parameter
4957              packs in its type, as mention above), and the
4958              argument is not an expansion (which expands to a
4959              currently unknown number of arguments), clone the
4960              parm and give it the next type in PACKED_TYPES.  */
4961           actual_parm = copy_node (actual_parm);
4962           TREE_TYPE (actual_parm) = 
4963             TREE_VEC_ELT (packed_types, arg_idx - parm_idx);
4964         }
4965
4966       if (arg != error_mark_node)
4967         arg = convert_template_argument (actual_parm, 
4968                                          arg, new_args, complain, parm_idx,
4969                                          in_decl);
4970       if (arg == error_mark_node)
4971         (*lost)++;
4972       TREE_VEC_ELT (packed_args, arg_idx - parm_idx) = arg; 
4973     }
4974
4975   if (TREE_CODE (TREE_VALUE (parm)) == TYPE_DECL
4976       || TREE_CODE (TREE_VALUE (parm)) == TEMPLATE_DECL)
4977     argument_pack = make_node (TYPE_ARGUMENT_PACK);
4978   else
4979     {
4980       argument_pack = make_node (NONTYPE_ARGUMENT_PACK);
4981       TREE_TYPE (argument_pack) 
4982         = tsubst (TREE_TYPE (TREE_VALUE (parm)), args, complain, in_decl);
4983       TREE_CONSTANT (argument_pack) = 1;
4984     }
4985
4986   SET_ARGUMENT_PACK_ARGS (argument_pack, packed_args);
4987   return argument_pack;
4988 }
4989
4990 /* Convert all template arguments to their appropriate types, and
4991    return a vector containing the innermost resulting template
4992    arguments.  If any error occurs, return error_mark_node. Error and
4993    warning messages are issued under control of COMPLAIN.
4994
4995    If REQUIRE_ALL_ARGS is false, argument deduction will be performed
4996    for arguments not specified in ARGS.  Otherwise, if
4997    USE_DEFAULT_ARGS is true, default arguments will be used to fill in
4998    unspecified arguments.  If REQUIRE_ALL_ARGS is true, but
4999    USE_DEFAULT_ARGS is false, then all arguments must be specified in
5000    ARGS.  */
5001
5002 static tree
5003 coerce_template_parms (tree parms,
5004                        tree args,
5005                        tree in_decl,
5006                        tsubst_flags_t complain,
5007                        bool require_all_args,
5008                        bool use_default_args)
5009 {
5010   int nparms, nargs, parm_idx, arg_idx, lost = 0;
5011   tree inner_args;
5012   tree new_args;
5013   tree new_inner_args;
5014   bool saved_skip_evaluation;
5015
5016   /* When used as a boolean value, indicates whether this is a
5017      variadic template parameter list. Since it's an int, we can also
5018      subtract it from nparms to get the number of non-variadic
5019      parameters.  */
5020   int variadic_p = 0;
5021
5022   inner_args 
5023     = expand_template_argument_pack (INNERMOST_TEMPLATE_ARGS (args));
5024
5025   nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
5026   nparms = TREE_VEC_LENGTH (parms);
5027
5028   /* Determine if there are any parameter packs.  */
5029   for (parm_idx = 0; parm_idx < nparms; ++parm_idx)
5030     {
5031       tree tparm = TREE_VALUE (TREE_VEC_ELT (parms, parm_idx));
5032       if (template_parameter_pack_p (tparm))
5033         {
5034           variadic_p = 1;
5035           break;
5036         }
5037     }
5038
5039   if ((nargs > nparms - variadic_p && !variadic_p)
5040       || (nargs < nparms - variadic_p
5041           && require_all_args
5042           && (!use_default_args
5043               || (TREE_VEC_ELT (parms, nargs) != error_mark_node
5044                   && !TREE_PURPOSE (TREE_VEC_ELT (parms, nargs))))))
5045     {
5046       if (complain & tf_error)
5047         {
5048           const char *or_more = "";
5049           if (variadic_p)
5050             {
5051               or_more = " or more";
5052               --nparms;
5053             }
5054
5055           error ("wrong number of template arguments (%d, should be %d%s)",
5056                  nargs, nparms, or_more);
5057
5058           if (in_decl)
5059             error ("provided for %q+D", in_decl);
5060         }
5061
5062       return error_mark_node;
5063     }
5064
5065   /* We need to evaluate the template arguments, even though this
5066      template-id may be nested within a "sizeof".  */
5067   saved_skip_evaluation = skip_evaluation;
5068   skip_evaluation = false;
5069   new_inner_args = make_tree_vec (nparms);
5070   new_args = add_outermost_template_args (args, new_inner_args);
5071   for (parm_idx = 0, arg_idx = 0; parm_idx < nparms; parm_idx++, arg_idx++)
5072     {
5073       tree arg;
5074       tree parm;
5075
5076       /* Get the Ith template parameter.  */
5077       parm = TREE_VEC_ELT (parms, parm_idx);
5078  
5079       if (parm == error_mark_node)
5080       {
5081         TREE_VEC_ELT (new_inner_args, arg_idx) = error_mark_node;
5082         continue;
5083       }
5084
5085       /* Calculate the next argument.  */
5086       if (template_parameter_pack_p (TREE_VALUE (parm)))
5087         {
5088           /* All remaining arguments will be placed in the
5089              template parameter pack PARM.  */
5090           arg = coerce_template_parameter_pack (parms, parm_idx, args, 
5091                                                 inner_args, arg_idx,
5092                                                 new_args, &lost,
5093                                                 in_decl, complain);
5094           
5095           /* Store this argument.  */
5096           if (arg == error_mark_node)
5097             lost++;
5098           TREE_VEC_ELT (new_inner_args, parm_idx) = arg;
5099
5100           /* We are done with all of the arguments.  */
5101           arg_idx = nargs;
5102
5103           continue;
5104         }
5105       else if (arg_idx < nargs)
5106         {
5107           arg = TREE_VEC_ELT (inner_args, arg_idx);
5108
5109           if (arg && PACK_EXPANSION_P (arg))
5110             {
5111               /* If ARG is a pack expansion, but PARM is not a
5112                  template parameter pack (if it were, we would have
5113                  handled it above), we're trying to expand into a
5114                  fixed-length argument list.  */
5115               if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
5116                 error ("cannot expand %<%E%> into a fixed-length "
5117                        "argument list", arg);
5118               else
5119                 error ("cannot expand %<%T%> into a fixed-length "
5120                        "argument list", arg);
5121               return error_mark_node;
5122             }
5123         }
5124       else if (require_all_args)
5125         /* There must be a default arg in this case.  */
5126         arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
5127                                    complain, in_decl);
5128       else
5129         break;
5130
5131       if (arg == error_mark_node)
5132         {
5133           if (complain & tf_error)
5134             error ("template argument %d is invalid", arg_idx + 1);
5135         }
5136       else if (!arg)
5137         /* This only occurs if there was an error in the template
5138            parameter list itself (which we would already have
5139            reported) that we are trying to recover from, e.g., a class
5140            template with a parameter list such as
5141            template<typename..., typename>.  */
5142         return error_mark_node;
5143       else
5144         arg = convert_template_argument (TREE_VALUE (parm),
5145                                          arg, new_args, complain, 
5146                                          parm_idx, in_decl);
5147
5148       if (arg == error_mark_node)
5149         lost++;
5150       TREE_VEC_ELT (new_inner_args, arg_idx) = arg;
5151     }
5152   skip_evaluation = saved_skip_evaluation;
5153
5154   if (lost)
5155     return error_mark_node;
5156
5157   return new_inner_args;
5158 }
5159
5160 /* Returns 1 if template args OT and NT are equivalent.  */
5161
5162 static int
5163 template_args_equal (tree ot, tree nt)
5164 {
5165   if (nt == ot)
5166     return 1;
5167
5168   if (TREE_CODE (nt) == TREE_VEC)
5169     /* For member templates */
5170     return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
5171   else if (PACK_EXPANSION_P (ot))
5172     return PACK_EXPANSION_P (nt) 
5173       && template_args_equal (PACK_EXPANSION_PATTERN (ot),
5174                               PACK_EXPANSION_PATTERN (nt));
5175   else if (TYPE_P (nt))
5176     return TYPE_P (ot) && same_type_p (ot, nt);
5177   else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
5178     return 0;
5179   else
5180     return cp_tree_equal (ot, nt);
5181 }
5182
5183 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
5184    of template arguments.  Returns 0 otherwise.  */
5185
5186 int
5187 comp_template_args (tree oldargs, tree newargs)
5188 {
5189   int i;
5190
5191   oldargs = expand_template_argument_pack (oldargs);
5192   newargs = expand_template_argument_pack (newargs);
5193
5194   if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
5195     return 0;
5196
5197   for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
5198     {
5199       tree nt = TREE_VEC_ELT (newargs, i);
5200       tree ot = TREE_VEC_ELT (oldargs, i);
5201
5202       if (! template_args_equal (ot, nt))
5203         return 0;
5204     }
5205   return 1;
5206 }
5207
5208 static void
5209 add_pending_template (tree d)
5210 {
5211   tree ti = (TYPE_P (d)
5212              ? CLASSTYPE_TEMPLATE_INFO (d)
5213              : DECL_TEMPLATE_INFO (d));
5214   struct pending_template *pt;
5215   int level;
5216
5217   if (TI_PENDING_TEMPLATE_FLAG (ti))
5218     return;
5219
5220   /* We are called both from instantiate_decl, where we've already had a
5221      tinst_level pushed, and instantiate_template, where we haven't.
5222      Compensate.  */
5223   level = !current_tinst_level || current_tinst_level->decl != d;
5224
5225   if (level)
5226     push_tinst_level (d);
5227
5228   pt = GGC_NEW (struct pending_template);
5229   pt->next = NULL;
5230   pt->tinst = current_tinst_level;
5231   if (last_pending_template)
5232     last_pending_template->next = pt;
5233   else
5234     pending_templates = pt;
5235
5236   last_pending_template = pt;
5237
5238   TI_PENDING_TEMPLATE_FLAG (ti) = 1;
5239
5240   if (level)
5241     pop_tinst_level ();
5242 }
5243
5244
5245 /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
5246    ARGLIST.  Valid choices for FNS are given in the cp-tree.def
5247    documentation for TEMPLATE_ID_EXPR.  */
5248
5249 tree
5250 lookup_template_function (tree fns, tree arglist)
5251 {
5252   tree type;
5253
5254   if (fns == error_mark_node || arglist == error_mark_node)
5255     return error_mark_node;
5256
5257   gcc_assert (!arglist || TREE_CODE (arglist) == TREE_VEC);
5258   gcc_assert (fns && (is_overloaded_fn (fns)
5259                       || TREE_CODE (fns) == IDENTIFIER_NODE));
5260
5261   if (BASELINK_P (fns))
5262     {
5263       BASELINK_FUNCTIONS (fns) = build2 (TEMPLATE_ID_EXPR,
5264                                          unknown_type_node,
5265                                          BASELINK_FUNCTIONS (fns),
5266                                          arglist);
5267       return fns;
5268     }
5269
5270   type = TREE_TYPE (fns);
5271   if (TREE_CODE (fns) == OVERLOAD || !type)
5272     type = unknown_type_node;
5273
5274   return build2 (TEMPLATE_ID_EXPR, type, fns, arglist);
5275 }
5276
5277 /* Within the scope of a template class S<T>, the name S gets bound
5278    (in build_self_reference) to a TYPE_DECL for the class, not a
5279    TEMPLATE_DECL.  If DECL is a TYPE_DECL for current_class_type,
5280    or one of its enclosing classes, and that type is a template,
5281    return the associated TEMPLATE_DECL.  Otherwise, the original
5282    DECL is returned.  */
5283
5284 tree
5285 maybe_get_template_decl_from_type_decl (tree decl)
5286 {
5287   return (decl != NULL_TREE
5288           && TREE_CODE (decl) == TYPE_DECL
5289           && DECL_ARTIFICIAL (decl)
5290           && CLASS_TYPE_P (TREE_TYPE (decl))
5291           && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
5292     ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
5293 }
5294
5295 /* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of
5296    parameters, find the desired type.
5297
5298    D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
5299
5300    IN_DECL, if non-NULL, is the template declaration we are trying to
5301    instantiate.
5302
5303    If ENTERING_SCOPE is nonzero, we are about to enter the scope of
5304    the class we are looking up.
5305
5306    Issue error and warning messages under control of COMPLAIN.
5307
5308    If the template class is really a local class in a template
5309    function, then the FUNCTION_CONTEXT is the function in which it is
5310    being instantiated.
5311
5312    ??? Note that this function is currently called *twice* for each
5313    template-id: the first time from the parser, while creating the
5314    incomplete type (finish_template_type), and the second type during the
5315    real instantiation (instantiate_template_class). This is surely something
5316    that we want to avoid. It also causes some problems with argument
5317    coercion (see convert_nontype_argument for more information on this).  */
5318
5319 tree
5320 lookup_template_class (tree d1,
5321                        tree arglist,
5322                        tree in_decl,
5323                        tree context,
5324                        int entering_scope,
5325                        tsubst_flags_t complain)
5326 {
5327   tree template = NULL_TREE, parmlist;
5328   tree t;
5329
5330   timevar_push (TV_NAME_LOOKUP);
5331
5332   if (TREE_CODE (d1) == IDENTIFIER_NODE)
5333     {
5334       tree value = innermost_non_namespace_value (d1);
5335       if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
5336         template = value;
5337       else
5338         {
5339           if (context)
5340             push_decl_namespace (context);
5341           template = lookup_name (d1);
5342           template = maybe_get_template_decl_from_type_decl (template);
5343           if (context)
5344             pop_decl_namespace ();
5345         }
5346       if (template)
5347         context = DECL_CONTEXT (template);
5348     }
5349   else if (TREE_CODE (d1) == TYPE_DECL && IS_AGGR_TYPE (TREE_TYPE (d1)))
5350     {
5351       tree type = TREE_TYPE (d1);
5352
5353       /* If we are declaring a constructor, say A<T>::A<T>, we will get
5354          an implicit typename for the second A.  Deal with it.  */
5355       if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
5356         type = TREE_TYPE (type);
5357
5358       if (CLASSTYPE_TEMPLATE_INFO (type))
5359         {
5360           template = CLASSTYPE_TI_TEMPLATE (type);
5361           d1 = DECL_NAME (template);
5362         }
5363     }
5364   else if (TREE_CODE (d1) == ENUMERAL_TYPE
5365            || (TYPE_P (d1) && IS_AGGR_TYPE (d1)))
5366     {
5367       template = TYPE_TI_TEMPLATE (d1);
5368       d1 = DECL_NAME (template);
5369     }
5370   else if (TREE_CODE (d1) == TEMPLATE_DECL
5371            && TREE_CODE (DECL_TEMPLATE_RESULT (d1)) == TYPE_DECL)
5372     {
5373       template = d1;
5374       d1 = DECL_NAME (template);
5375       context = DECL_CONTEXT (template);
5376     }
5377
5378   /* Issue an error message if we didn't find a template.  */
5379   if (! template)
5380     {
5381       if (complain & tf_error)
5382         error ("%qT is not a template", d1);
5383       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5384     }
5385
5386   if (TREE_CODE (template) != TEMPLATE_DECL
5387          /* Make sure it's a user visible template, if it was named by
5388             the user.  */
5389       || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (template)
5390           && !PRIMARY_TEMPLATE_P (template)))
5391     {
5392       if (complain & tf_error)
5393         {
5394           error ("non-template type %qT used as a template", d1);
5395           if (in_decl)
5396             error ("for template declaration %q+D", in_decl);
5397         }
5398       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5399     }
5400
5401   complain &= ~tf_user;
5402
5403   if (DECL_TEMPLATE_TEMPLATE_PARM_P (template))
5404     {
5405       /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
5406          template arguments */
5407
5408       tree parm;
5409       tree arglist2;
5410       tree outer;
5411
5412       parmlist = DECL_INNERMOST_TEMPLATE_PARMS (template);
5413
5414       /* Consider an example where a template template parameter declared as
5415
5416            template <class T, class U = std::allocator<T> > class TT
5417
5418          The template parameter level of T and U are one level larger than
5419          of TT.  To proper process the default argument of U, say when an
5420          instantiation `TT<int>' is seen, we need to build the full
5421          arguments containing {int} as the innermost level.  Outer levels,
5422          available when not appearing as default template argument, can be
5423          obtained from the arguments of the enclosing template.
5424
5425          Suppose that TT is later substituted with std::vector.  The above
5426          instantiation is `TT<int, std::allocator<T> >' with TT at
5427          level 1, and T at level 2, while the template arguments at level 1
5428          becomes {std::vector} and the inner level 2 is {int}.  */
5429
5430       outer = DECL_CONTEXT (template);
5431       if (outer)
5432         outer = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (outer)));
5433       else if (current_template_parms)
5434         /* This is an argument of the current template, so we haven't set
5435            DECL_CONTEXT yet.  */
5436         outer = current_template_args ();
5437
5438       if (outer)
5439         arglist = add_to_template_args (outer, arglist);
5440
5441       arglist2 = coerce_template_parms (parmlist, arglist, template,
5442                                         complain,
5443                                         /*require_all_args=*/true,
5444                                         /*use_default_args=*/true);
5445       if (arglist2 == error_mark_node
5446           || (!uses_template_parms (arglist2)
5447               && check_instantiated_args (template, arglist2, complain)))
5448         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5449
5450       parm = bind_template_template_parm (TREE_TYPE (template), arglist2);
5451       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, parm);
5452     }
5453   else
5454     {
5455       tree template_type = TREE_TYPE (template);
5456       tree gen_tmpl;
5457       tree type_decl;
5458       tree found = NULL_TREE;
5459       int arg_depth;
5460       int parm_depth;
5461       int is_partial_instantiation;
5462
5463       gen_tmpl = most_general_template (template);
5464       parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
5465       parm_depth = TMPL_PARMS_DEPTH (parmlist);
5466       arg_depth = TMPL_ARGS_DEPTH (arglist);
5467
5468       if (arg_depth == 1 && parm_depth > 1)
5469         {
5470           /* We've been given an incomplete set of template arguments.
5471              For example, given:
5472
5473                template <class T> struct S1 {
5474                  template <class U> struct S2 {};
5475                  template <class U> struct S2<U*> {};
5476                 };
5477
5478              we will be called with an ARGLIST of `U*', but the
5479              TEMPLATE will be `template <class T> template
5480              <class U> struct S1<T>::S2'.  We must fill in the missing
5481              arguments.  */
5482           arglist
5483             = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (template)),
5484                                            arglist);
5485           arg_depth = TMPL_ARGS_DEPTH (arglist);
5486         }
5487
5488       /* Now we should have enough arguments.  */
5489       gcc_assert (parm_depth == arg_depth);
5490
5491       /* From here on, we're only interested in the most general
5492          template.  */
5493       template = gen_tmpl;
5494
5495       /* Calculate the BOUND_ARGS.  These will be the args that are
5496          actually tsubst'd into the definition to create the
5497          instantiation.  */
5498       if (parm_depth > 1)
5499         {
5500           /* We have multiple levels of arguments to coerce, at once.  */
5501           int i;
5502           int saved_depth = TMPL_ARGS_DEPTH (arglist);
5503
5504           tree bound_args = make_tree_vec (parm_depth);
5505
5506           for (i = saved_depth,
5507                  t = DECL_TEMPLATE_PARMS (template);
5508                i > 0 && t != NULL_TREE;
5509                --i, t = TREE_CHAIN (t))
5510             {
5511               tree a = coerce_template_parms (TREE_VALUE (t),
5512                                               arglist, template,
5513                                               complain,
5514                                               /*require_all_args=*/true,
5515                                               /*use_default_args=*/true);
5516
5517               /* Don't process further if one of the levels fails.  */
5518               if (a == error_mark_node)
5519                 {
5520                   /* Restore the ARGLIST to its full size.  */
5521                   TREE_VEC_LENGTH (arglist) = saved_depth;
5522                   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5523                 }
5524
5525               SET_TMPL_ARGS_LEVEL (bound_args, i, a);
5526
5527               /* We temporarily reduce the length of the ARGLIST so
5528                  that coerce_template_parms will see only the arguments
5529                  corresponding to the template parameters it is
5530                  examining.  */
5531               TREE_VEC_LENGTH (arglist)--;
5532             }
5533
5534           /* Restore the ARGLIST to its full size.  */
5535           TREE_VEC_LENGTH (arglist) = saved_depth;
5536
5537           arglist = bound_args;
5538         }
5539       else
5540         arglist
5541           = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
5542                                    INNERMOST_TEMPLATE_ARGS (arglist),
5543                                    template,
5544                                    complain,
5545                                    /*require_all_args=*/true,
5546                                    /*use_default_args=*/true);
5547
5548       if (arglist == error_mark_node)
5549         /* We were unable to bind the arguments.  */
5550         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5551
5552       /* In the scope of a template class, explicit references to the
5553          template class refer to the type of the template, not any
5554          instantiation of it.  For example, in:
5555
5556            template <class T> class C { void f(C<T>); }
5557
5558          the `C<T>' is just the same as `C'.  Outside of the
5559          class, however, such a reference is an instantiation.  */
5560       if (comp_template_args (TYPE_TI_ARGS (template_type),
5561                               arglist))
5562         {
5563           found = template_type;
5564
5565           if (!entering_scope && PRIMARY_TEMPLATE_P (template))
5566             {
5567               tree ctx;
5568
5569               for (ctx = current_class_type;
5570                    ctx && TREE_CODE (ctx) != NAMESPACE_DECL;
5571                    ctx = (TYPE_P (ctx)
5572                           ? TYPE_CONTEXT (ctx)
5573                           : DECL_CONTEXT (ctx)))
5574                 if (TYPE_P (ctx) && same_type_p (ctx, template_type))
5575                   goto found_ctx;
5576
5577               /* We're not in the scope of the class, so the
5578                  TEMPLATE_TYPE is not the type we want after all.  */
5579               found = NULL_TREE;
5580             found_ctx:;
5581             }
5582         }
5583       if (found)
5584         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
5585
5586       /* If we already have this specialization, return it.  */
5587       found = retrieve_specialization (template, arglist,
5588                                        /*class_specializations_p=*/false);
5589       if (found)
5590         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
5591
5592       /* This type is a "partial instantiation" if any of the template
5593          arguments still involve template parameters.  Note that we set
5594          IS_PARTIAL_INSTANTIATION for partial specializations as
5595          well.  */
5596       is_partial_instantiation = uses_template_parms (arglist);
5597
5598       /* If the deduced arguments are invalid, then the binding
5599          failed.  */
5600       if (!is_partial_instantiation
5601           && check_instantiated_args (template,
5602                                       INNERMOST_TEMPLATE_ARGS (arglist),
5603                                       complain))
5604         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5605
5606       if (!is_partial_instantiation
5607           && !PRIMARY_TEMPLATE_P (template)
5608           && TREE_CODE (CP_DECL_CONTEXT (template)) == NAMESPACE_DECL)
5609         {
5610           found = xref_tag_from_type (TREE_TYPE (template),
5611                                       DECL_NAME (template),
5612                                       /*tag_scope=*/ts_global);
5613           POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
5614         }
5615
5616       context = tsubst (DECL_CONTEXT (template), arglist,
5617                         complain, in_decl);
5618       if (!context)
5619         context = global_namespace;
5620
5621       /* Create the type.  */
5622       if (TREE_CODE (template_type) == ENUMERAL_TYPE)
5623         {
5624           if (!is_partial_instantiation)
5625             {
5626               set_current_access_from_decl (TYPE_NAME (template_type));
5627               t = start_enum (TYPE_IDENTIFIER (template_type));
5628             }
5629           else
5630             /* We don't want to call start_enum for this type, since
5631                the values for the enumeration constants may involve
5632                template parameters.  And, no one should be interested
5633                in the enumeration constants for such a type.  */
5634             t = make_node (ENUMERAL_TYPE);
5635         }
5636       else
5637         {
5638           t = make_aggr_type (TREE_CODE (template_type));
5639           CLASSTYPE_DECLARED_CLASS (t)
5640             = CLASSTYPE_DECLARED_CLASS (template_type);
5641           SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
5642           TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
5643
5644           /* A local class.  Make sure the decl gets registered properly.  */
5645           if (context == current_function_decl)
5646             pushtag (DECL_NAME (template), t, /*tag_scope=*/ts_current);
5647
5648           if (comp_template_args (CLASSTYPE_TI_ARGS (template_type), arglist))
5649             /* This instantiation is another name for the primary
5650                template type. Set the TYPE_CANONICAL field
5651                appropriately. */
5652             TYPE_CANONICAL (t) = template_type;
5653           else if (any_template_arguments_need_structural_equality_p (arglist))
5654             /* Some of the template arguments require structural
5655                equality testing, so this template class requires
5656                structural equality testing. */
5657             SET_TYPE_STRUCTURAL_EQUALITY (t);
5658         }
5659
5660       /* If we called start_enum or pushtag above, this information
5661          will already be set up.  */
5662       if (!TYPE_NAME (t))
5663         {
5664           TYPE_CONTEXT (t) = FROB_CONTEXT (context);
5665
5666           type_decl = create_implicit_typedef (DECL_NAME (template), t);
5667           DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
5668           TYPE_STUB_DECL (t) = type_decl;
5669           DECL_SOURCE_LOCATION (type_decl)
5670             = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
5671         }
5672       else
5673         type_decl = TYPE_NAME (t);
5674
5675       TREE_PRIVATE (type_decl)
5676         = TREE_PRIVATE (TYPE_STUB_DECL (template_type));
5677       TREE_PROTECTED (type_decl)
5678         = TREE_PROTECTED (TYPE_STUB_DECL (template_type));
5679       DECL_IN_SYSTEM_HEADER (type_decl)
5680         = DECL_IN_SYSTEM_HEADER (template);
5681       if (CLASSTYPE_VISIBILITY_SPECIFIED (template_type))
5682         {
5683           DECL_VISIBILITY_SPECIFIED (type_decl) = 1;
5684           DECL_VISIBILITY (type_decl) = CLASSTYPE_VISIBILITY (template_type);
5685         }
5686
5687       /* Set up the template information.  We have to figure out which
5688          template is the immediate parent if this is a full
5689          instantiation.  */
5690       if (parm_depth == 1 || is_partial_instantiation
5691           || !PRIMARY_TEMPLATE_P (template))
5692         /* This case is easy; there are no member templates involved.  */
5693         found = template;
5694       else
5695         {
5696           /* This is a full instantiation of a member template.  Look
5697              for a partial instantiation of which this is an instance.  */
5698
5699           for (found = DECL_TEMPLATE_INSTANTIATIONS (template);
5700                found; found = TREE_CHAIN (found))
5701             {
5702               int success;
5703               tree tmpl = CLASSTYPE_TI_TEMPLATE (TREE_VALUE (found));
5704
5705               /* We only want partial instantiations, here, not
5706                  specializations or full instantiations.  */
5707               if (CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_VALUE (found))
5708                   || !uses_template_parms (TREE_VALUE (found)))
5709                 continue;
5710
5711               /* Temporarily reduce by one the number of levels in the
5712                  ARGLIST and in FOUND so as to avoid comparing the
5713                  last set of arguments.  */
5714               TREE_VEC_LENGTH (arglist)--;
5715               TREE_VEC_LENGTH (TREE_PURPOSE (found)) --;
5716
5717               /* See if the arguments match.  If they do, then TMPL is
5718                  the partial instantiation we want.  */
5719               success = comp_template_args (TREE_PURPOSE (found), arglist);
5720
5721               /* Restore the argument vectors to their full size.  */
5722               TREE_VEC_LENGTH (arglist)++;
5723               TREE_VEC_LENGTH (TREE_PURPOSE (found))++;
5724
5725               if (success)
5726                 {
5727                   found = tmpl;
5728                   break;
5729                 }
5730             }
5731
5732           if (!found)
5733             {
5734               /* There was no partial instantiation. This happens
5735                  where C<T> is a member template of A<T> and it's used
5736                  in something like
5737
5738                   template <typename T> struct B { A<T>::C<int> m; };
5739                   B<float>;
5740
5741                  Create the partial instantiation.
5742                */
5743               TREE_VEC_LENGTH (arglist)--;
5744               found = tsubst (template, arglist, complain, NULL_TREE);
5745               TREE_VEC_LENGTH (arglist)++;
5746             }
5747         }
5748
5749       SET_TYPE_TEMPLATE_INFO (t, tree_cons (found, arglist, NULL_TREE));
5750       DECL_TEMPLATE_INSTANTIATIONS (template)
5751         = tree_cons (arglist, t,
5752                      DECL_TEMPLATE_INSTANTIATIONS (template));
5753
5754       if (TREE_CODE (t) == ENUMERAL_TYPE
5755           && !is_partial_instantiation)
5756         /* Now that the type has been registered on the instantiations
5757            list, we set up the enumerators.  Because the enumeration
5758            constants may involve the enumeration type itself, we make
5759            sure to register the type first, and then create the
5760            constants.  That way, doing tsubst_expr for the enumeration
5761            constants won't result in recursive calls here; we'll find
5762            the instantiation and exit above.  */
5763         tsubst_enum (template_type, t, arglist);
5764
5765       if (is_partial_instantiation)
5766         /* If the type makes use of template parameters, the
5767            code that generates debugging information will crash.  */
5768         DECL_IGNORED_P (TYPE_STUB_DECL (t)) = 1;
5769
5770       /* Possibly limit visibility based on template args.  */
5771       TREE_PUBLIC (type_decl) = 1;
5772       determine_visibility (type_decl);
5773
5774       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
5775     }
5776   timevar_pop (TV_NAME_LOOKUP);
5777 }
5778 \f
5779 struct pair_fn_data
5780 {
5781   tree_fn_t fn;
5782   void *data;
5783   struct pointer_set_t *visited;
5784 };
5785
5786 /* Called from for_each_template_parm via walk_tree.  */
5787
5788 static tree
5789 for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
5790 {
5791   tree t = *tp;
5792   struct pair_fn_data *pfd = (struct pair_fn_data *) d;
5793   tree_fn_t fn = pfd->fn;
5794   void *data = pfd->data;
5795
5796   if (TYPE_P (t)
5797       && for_each_template_parm (TYPE_CONTEXT (t), fn, data, pfd->visited))
5798     return error_mark_node;
5799
5800   switch (TREE_CODE (t))
5801     {
5802     case RECORD_TYPE:
5803       if (TYPE_PTRMEMFUNC_P (t))
5804         break;
5805       /* Fall through.  */
5806
5807     case UNION_TYPE:
5808     case ENUMERAL_TYPE:
5809       if (!TYPE_TEMPLATE_INFO (t))
5810         *walk_subtrees = 0;
5811       else if (for_each_template_parm (TREE_VALUE (TYPE_TEMPLATE_INFO (t)),
5812                                        fn, data, pfd->visited))
5813         return error_mark_node;
5814       break;
5815
5816     case INTEGER_TYPE:
5817       if (for_each_template_parm (TYPE_MIN_VALUE (t),
5818                                   fn, data, pfd->visited)
5819           || for_each_template_parm (TYPE_MAX_VALUE (t),
5820                                      fn, data, pfd->visited))
5821         return error_mark_node;
5822       break;
5823
5824     case METHOD_TYPE:
5825       /* Since we're not going to walk subtrees, we have to do this
5826          explicitly here.  */
5827       if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data,
5828                                   pfd->visited))
5829         return error_mark_node;
5830       /* Fall through.  */
5831
5832     case FUNCTION_TYPE:
5833       /* Check the return type.  */
5834       if (for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited))
5835         return error_mark_node;
5836
5837       /* Check the parameter types.  Since default arguments are not
5838          instantiated until they are needed, the TYPE_ARG_TYPES may
5839          contain expressions that involve template parameters.  But,
5840          no-one should be looking at them yet.  And, once they're
5841          instantiated, they don't contain template parameters, so
5842          there's no point in looking at them then, either.  */
5843       {
5844         tree parm;
5845
5846         for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
5847           if (for_each_template_parm (TREE_VALUE (parm), fn, data,
5848                                       pfd->visited))
5849             return error_mark_node;
5850
5851         /* Since we've already handled the TYPE_ARG_TYPES, we don't
5852            want walk_tree walking into them itself.  */
5853         *walk_subtrees = 0;
5854       }
5855       break;
5856
5857     case TYPEOF_TYPE:
5858       if (for_each_template_parm (TYPE_FIELDS (t), fn, data,
5859                                   pfd->visited))
5860         return error_mark_node;
5861       break;
5862
5863     case FUNCTION_DECL:
5864     case VAR_DECL:
5865       if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
5866           && for_each_template_parm (DECL_TI_ARGS (t), fn, data,
5867                                      pfd->visited))
5868         return error_mark_node;
5869       /* Fall through.  */
5870
5871     case PARM_DECL:
5872     case CONST_DECL:
5873       if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t)
5874           && for_each_template_parm (DECL_INITIAL (t), fn, data,
5875                                      pfd->visited))
5876         return error_mark_node;
5877       if (DECL_CONTEXT (t)
5878           && for_each_template_parm (DECL_CONTEXT (t), fn, data,
5879                                      pfd->visited))
5880         return error_mark_node;
5881       break;
5882
5883     case BOUND_TEMPLATE_TEMPLATE_PARM:
5884       /* Record template parameters such as `T' inside `TT<T>'.  */
5885       if (for_each_template_parm (TYPE_TI_ARGS (t), fn, data, pfd->visited))
5886         return error_mark_node;
5887       /* Fall through.  */
5888
5889     case TEMPLATE_TEMPLATE_PARM:
5890     case TEMPLATE_TYPE_PARM:
5891     case TEMPLATE_PARM_INDEX:
5892       if (fn && (*fn)(t, data))
5893         return error_mark_node;
5894       else if (!fn)
5895         return error_mark_node;
5896       break;
5897
5898     case TEMPLATE_DECL:
5899       /* A template template parameter is encountered.  */
5900       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
5901           && for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited))
5902         return error_mark_node;
5903
5904       /* Already substituted template template parameter */
5905       *walk_subtrees = 0;
5906       break;
5907
5908     case TYPENAME_TYPE:
5909       if (!fn
5910           || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn,
5911                                      data, pfd->visited))
5912         return error_mark_node;
5913       break;
5914
5915     case CONSTRUCTOR:
5916       if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
5917           && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
5918                                      (TREE_TYPE (t)), fn, data,
5919                                      pfd->visited))
5920         return error_mark_node;
5921       break;
5922
5923     case INDIRECT_REF:
5924     case COMPONENT_REF:
5925       /* If there's no type, then this thing must be some expression
5926          involving template parameters.  */
5927       if (!fn && !TREE_TYPE (t))
5928         return error_mark_node;
5929       break;
5930
5931     case MODOP_EXPR:
5932     case CAST_EXPR:
5933     case REINTERPRET_CAST_EXPR:
5934     case CONST_CAST_EXPR:
5935     case STATIC_CAST_EXPR:
5936     case DYNAMIC_CAST_EXPR:
5937     case ARROW_EXPR:
5938     case DOTSTAR_EXPR:
5939     case TYPEID_EXPR:
5940     case PSEUDO_DTOR_EXPR:
5941       if (!fn)
5942         return error_mark_node;
5943       break;
5944
5945     default:
5946       break;
5947     }
5948
5949   /* We didn't find any template parameters we liked.  */
5950   return NULL_TREE;
5951 }
5952
5953 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
5954    BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
5955    call FN with the parameter and the DATA.
5956    If FN returns nonzero, the iteration is terminated, and
5957    for_each_template_parm returns 1.  Otherwise, the iteration
5958    continues.  If FN never returns a nonzero value, the value
5959    returned by for_each_template_parm is 0.  If FN is NULL, it is
5960    considered to be the function which always returns 1.  */
5961
5962 static int
5963 for_each_template_parm (tree t, tree_fn_t fn, void* data,
5964                         struct pointer_set_t *visited)
5965 {
5966   struct pair_fn_data pfd;
5967   int result;
5968
5969   /* Set up.  */
5970   pfd.fn = fn;
5971   pfd.data = data;
5972
5973   /* Walk the tree.  (Conceptually, we would like to walk without
5974      duplicates, but for_each_template_parm_r recursively calls
5975      for_each_template_parm, so we would need to reorganize a fair
5976      bit to use walk_tree_without_duplicates, so we keep our own
5977      visited list.)  */
5978   if (visited)
5979     pfd.visited = visited;
5980   else
5981     pfd.visited = pointer_set_create ();
5982   result = cp_walk_tree (&t,
5983                          for_each_template_parm_r,
5984                          &pfd,
5985                          pfd.visited) != NULL_TREE;
5986
5987   /* Clean up.  */
5988   if (!visited)
5989     {
5990       pointer_set_destroy (pfd.visited);
5991       pfd.visited = 0;
5992     }
5993
5994   return result;
5995 }
5996
5997 /* Returns true if T depends on any template parameter.  */
5998
5999 int
6000 uses_template_parms (tree t)
6001 {
6002   bool dependent_p;
6003   int saved_processing_template_decl;
6004
6005   saved_processing_template_decl = processing_template_decl;
6006   if (!saved_processing_template_decl)
6007     processing_template_decl = 1;
6008   if (TYPE_P (t))
6009     dependent_p = dependent_type_p (t);
6010   else if (TREE_CODE (t) == TREE_VEC)
6011     dependent_p = any_dependent_template_arguments_p (t);
6012   else if (TREE_CODE (t) == TREE_LIST)
6013     dependent_p = (uses_template_parms (TREE_VALUE (t))
6014                    || uses_template_parms (TREE_CHAIN (t)));
6015   else if (TREE_CODE (t) == TYPE_DECL)
6016     dependent_p = dependent_type_p (TREE_TYPE (t));
6017   else if (DECL_P (t)
6018            || EXPR_P (t)
6019            || TREE_CODE (t) == TEMPLATE_PARM_INDEX
6020            || TREE_CODE (t) == OVERLOAD
6021            || TREE_CODE (t) == BASELINK
6022            || TREE_CODE (t) == IDENTIFIER_NODE
6023            || TREE_CODE (t) == TRAIT_EXPR
6024            || CONSTANT_CLASS_P (t))
6025     dependent_p = (type_dependent_expression_p (t)
6026                    || value_dependent_expression_p (t));
6027   else
6028     {
6029       gcc_assert (t == error_mark_node);
6030       dependent_p = false;
6031     }
6032
6033   processing_template_decl = saved_processing_template_decl;
6034
6035   return dependent_p;
6036 }
6037
6038 /* Returns true if T depends on any template parameter with level LEVEL.  */
6039
6040 int
6041 uses_template_parms_level (tree t, int level)
6042 {
6043   return for_each_template_parm (t, template_parm_this_level_p, &level, NULL);
6044 }
6045
6046 static int tinst_depth;
6047 extern int max_tinst_depth;
6048 #ifdef GATHER_STATISTICS
6049 int depth_reached;
6050 #endif
6051 static int tinst_level_tick;
6052 static int last_template_error_tick;
6053
6054 /* We're starting to instantiate D; record the template instantiation context
6055    for diagnostics and to restore it later.  */
6056
6057 static int
6058 push_tinst_level (tree d)
6059 {
6060   struct tinst_level *new;
6061
6062   if (tinst_depth >= max_tinst_depth)
6063     {
6064       /* If the instantiation in question still has unbound template parms,
6065          we don't really care if we can't instantiate it, so just return.
6066          This happens with base instantiation for implicit `typename'.  */
6067       if (uses_template_parms (d))
6068         return 0;
6069
6070       last_template_error_tick = tinst_level_tick;
6071       error ("template instantiation depth exceeds maximum of %d (use "
6072              "-ftemplate-depth-NN to increase the maximum) instantiating %qD",
6073              max_tinst_depth, d);
6074
6075       print_instantiation_context ();
6076
6077       return 0;
6078     }
6079
6080   new = GGC_NEW (struct tinst_level);
6081   new->decl = d;
6082   new->locus = input_location;
6083   new->in_system_header_p = in_system_header;
6084   new->next = current_tinst_level;
6085   current_tinst_level = new;
6086
6087   ++tinst_depth;
6088 #ifdef GATHER_STATISTICS
6089   if (tinst_depth > depth_reached)
6090     depth_reached = tinst_depth;
6091 #endif
6092
6093   ++tinst_level_tick;
6094   return 1;
6095 }
6096
6097 /* We're done instantiating this template; return to the instantiation
6098    context.  */
6099
6100 static void
6101 pop_tinst_level (void)
6102 {
6103   /* Restore the filename and line number stashed away when we started
6104      this instantiation.  */
6105   input_location = current_tinst_level->locus;
6106   in_system_header = current_tinst_level->in_system_header_p;
6107   current_tinst_level = current_tinst_level->next;
6108   --tinst_depth;
6109   ++tinst_level_tick;
6110 }
6111
6112 /* We're instantiating a deferred template; restore the template
6113    instantiation context in which the instantiation was requested, which
6114    is one step out from LEVEL.  Return the corresponding DECL or TYPE.  */
6115
6116 static tree
6117 reopen_tinst_level (struct tinst_level *level)
6118 {
6119   struct tinst_level *t;
6120
6121   tinst_depth = 0;
6122   for (t = level; t; t = t->next)
6123     ++tinst_depth;
6124
6125   current_tinst_level = level;
6126   pop_tinst_level ();
6127   return level->decl;
6128 }
6129
6130 /* Returns the TINST_LEVEL which gives the original instantiation
6131    context.  */
6132
6133 struct tinst_level *
6134 outermost_tinst_level (void)
6135 {
6136   struct tinst_level *level = current_tinst_level;
6137   if (level)
6138     while (level->next)
6139       level = level->next;
6140   return level;
6141 }
6142
6143 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL.  ARGS is the
6144    vector of template arguments, as for tsubst.
6145
6146    Returns an appropriate tsubst'd friend declaration.  */
6147
6148 static tree
6149 tsubst_friend_function (tree decl, tree args)
6150 {
6151   tree new_friend;
6152
6153   if (TREE_CODE (decl) == FUNCTION_DECL
6154       && DECL_TEMPLATE_INSTANTIATION (decl)
6155       && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
6156     /* This was a friend declared with an explicit template
6157        argument list, e.g.:
6158
6159        friend void f<>(T);
6160
6161        to indicate that f was a template instantiation, not a new
6162        function declaration.  Now, we have to figure out what
6163        instantiation of what template.  */
6164     {
6165       tree template_id, arglist, fns;
6166       tree new_args;
6167       tree tmpl;
6168       tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
6169
6170       /* Friend functions are looked up in the containing namespace scope.
6171          We must enter that scope, to avoid finding member functions of the
6172          current cless with same name.  */
6173       push_nested_namespace (ns);
6174       fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
6175                          tf_warning_or_error, NULL_TREE,
6176                          /*integral_constant_expression_p=*/false);
6177       pop_nested_namespace (ns);
6178       arglist = tsubst (DECL_TI_ARGS (decl), args,
6179                         tf_warning_or_error, NULL_TREE);
6180       template_id = lookup_template_function (fns, arglist);
6181
6182       new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
6183       tmpl = determine_specialization (template_id, new_friend,
6184                                        &new_args,
6185                                        /*need_member_template=*/0,
6186                                        TREE_VEC_LENGTH (args),
6187                                        tsk_none);
6188       return instantiate_template (tmpl, new_args, tf_error);
6189     }
6190
6191   new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
6192
6193   /* The NEW_FRIEND will look like an instantiation, to the
6194      compiler, but is not an instantiation from the point of view of
6195      the language.  For example, we might have had:
6196
6197      template <class T> struct S {
6198        template <class U> friend void f(T, U);
6199      };
6200
6201      Then, in S<int>, template <class U> void f(int, U) is not an
6202      instantiation of anything.  */
6203   if (new_friend == error_mark_node)
6204     return error_mark_node;
6205
6206   DECL_USE_TEMPLATE (new_friend) = 0;
6207   if (TREE_CODE (decl) == TEMPLATE_DECL)
6208     {
6209       DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
6210       DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
6211         = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
6212     }
6213
6214   /* The mangled name for the NEW_FRIEND is incorrect.  The function
6215      is not a template instantiation and should not be mangled like
6216      one.  Therefore, we forget the mangling here; we'll recompute it
6217      later if we need it.  */
6218   if (TREE_CODE (new_friend) != TEMPLATE_DECL)
6219     {
6220       SET_DECL_RTL (new_friend, NULL_RTX);
6221       SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
6222     }
6223
6224   if (DECL_NAMESPACE_SCOPE_P (new_friend))
6225     {
6226       tree old_decl;
6227       tree new_friend_template_info;
6228       tree new_friend_result_template_info;
6229       tree ns;
6230       int  new_friend_is_defn;
6231
6232       /* We must save some information from NEW_FRIEND before calling
6233          duplicate decls since that function will free NEW_FRIEND if
6234          possible.  */
6235       new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
6236       new_friend_is_defn =
6237             (DECL_INITIAL (DECL_TEMPLATE_RESULT
6238                            (template_for_substitution (new_friend)))
6239              != NULL_TREE);
6240       if (TREE_CODE (new_friend) == TEMPLATE_DECL)
6241         {
6242           /* This declaration is a `primary' template.  */
6243           DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
6244
6245           new_friend_result_template_info
6246             = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
6247         }
6248       else
6249         new_friend_result_template_info = NULL_TREE;
6250
6251       /* Make the init_value nonzero so pushdecl knows this is a defn.  */
6252       if (new_friend_is_defn)
6253         DECL_INITIAL (new_friend) = error_mark_node;
6254
6255       /* Inside pushdecl_namespace_level, we will push into the
6256          current namespace. However, the friend function should go
6257          into the namespace of the template.  */
6258       ns = decl_namespace_context (new_friend);
6259       push_nested_namespace (ns);
6260       old_decl = pushdecl_namespace_level (new_friend, /*is_friend=*/true);
6261       pop_nested_namespace (ns);
6262
6263       if (old_decl == error_mark_node)
6264         return error_mark_node;
6265
6266       if (old_decl != new_friend)
6267         {
6268           /* This new friend declaration matched an existing
6269              declaration.  For example, given:
6270
6271                template <class T> void f(T);
6272                template <class U> class C {
6273                  template <class T> friend void f(T) {}
6274                };
6275
6276              the friend declaration actually provides the definition
6277              of `f', once C has been instantiated for some type.  So,
6278              old_decl will be the out-of-class template declaration,
6279              while new_friend is the in-class definition.
6280
6281              But, if `f' was called before this point, the
6282              instantiation of `f' will have DECL_TI_ARGS corresponding
6283              to `T' but not to `U', references to which might appear
6284              in the definition of `f'.  Previously, the most general
6285              template for an instantiation of `f' was the out-of-class
6286              version; now it is the in-class version.  Therefore, we
6287              run through all specialization of `f', adding to their
6288              DECL_TI_ARGS appropriately.  In particular, they need a
6289              new set of outer arguments, corresponding to the
6290              arguments for this class instantiation.
6291
6292              The same situation can arise with something like this:
6293
6294                friend void f(int);
6295                template <class T> class C {
6296                  friend void f(T) {}
6297                };
6298
6299              when `C<int>' is instantiated.  Now, `f(int)' is defined
6300              in the class.  */
6301
6302           if (!new_friend_is_defn)
6303             /* On the other hand, if the in-class declaration does
6304                *not* provide a definition, then we don't want to alter
6305                existing definitions.  We can just leave everything
6306                alone.  */
6307             ;
6308           else
6309             {
6310               /* Overwrite whatever template info was there before, if
6311                  any, with the new template information pertaining to
6312                  the declaration.  */
6313               DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
6314
6315               if (TREE_CODE (old_decl) != TEMPLATE_DECL)
6316                 reregister_specialization (new_friend,
6317                                            most_general_template (old_decl),
6318                                            old_decl);
6319               else
6320                 {
6321                   tree t;
6322                   tree new_friend_args;
6323
6324                   DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
6325                     = new_friend_result_template_info;
6326
6327                   new_friend_args = TI_ARGS (new_friend_template_info);
6328                   for (t = DECL_TEMPLATE_SPECIALIZATIONS (old_decl);
6329                        t != NULL_TREE;
6330                        t = TREE_CHAIN (t))
6331                     {
6332                       tree spec = TREE_VALUE (t);
6333
6334                       DECL_TI_ARGS (spec)
6335                         = add_outermost_template_args (new_friend_args,
6336                                                        DECL_TI_ARGS (spec));
6337                     }
6338
6339                   /* Now, since specializations are always supposed to
6340                      hang off of the most general template, we must move
6341                      them.  */
6342                   t = most_general_template (old_decl);
6343                   if (t != old_decl)
6344                     {
6345                       DECL_TEMPLATE_SPECIALIZATIONS (t)
6346                         = chainon (DECL_TEMPLATE_SPECIALIZATIONS (t),
6347                                    DECL_TEMPLATE_SPECIALIZATIONS (old_decl));
6348                       DECL_TEMPLATE_SPECIALIZATIONS (old_decl) = NULL_TREE;
6349                     }
6350                 }
6351             }
6352
6353           /* The information from NEW_FRIEND has been merged into OLD_DECL
6354              by duplicate_decls.  */
6355           new_friend = old_decl;
6356         }
6357     }
6358   else
6359     {
6360       tree context = DECL_CONTEXT (new_friend);
6361       bool dependent_p;
6362
6363       /* In the code
6364            template <class T> class C {
6365              template <class U> friend void C1<U>::f (); // case 1
6366              friend void C2<T>::f ();                    // case 2
6367            };
6368          we only need to make sure CONTEXT is a complete type for
6369          case 2.  To distinguish between the two cases, we note that
6370          CONTEXT of case 1 remains dependent type after tsubst while
6371          this isn't true for case 2.  */
6372       ++processing_template_decl;
6373       dependent_p = dependent_type_p (context);
6374       --processing_template_decl;
6375
6376       if (!dependent_p
6377           && !complete_type_or_else (context, NULL_TREE))
6378         return error_mark_node;
6379
6380       if (COMPLETE_TYPE_P (context))
6381         {
6382           /* Check to see that the declaration is really present, and,
6383              possibly obtain an improved declaration.  */
6384           tree fn = check_classfn (context,
6385                                    new_friend, NULL_TREE);
6386
6387           if (fn)
6388             new_friend = fn;
6389         }
6390     }
6391
6392   return new_friend;
6393 }
6394
6395 /* FRIEND_TMPL is a friend TEMPLATE_DECL.  ARGS is the vector of
6396    template arguments, as for tsubst.
6397
6398    Returns an appropriate tsubst'd friend type or error_mark_node on
6399    failure.  */
6400
6401 static tree
6402 tsubst_friend_class (tree friend_tmpl, tree args)
6403 {
6404   tree friend_type;
6405   tree tmpl;
6406   tree context;
6407
6408   context = DECL_CONTEXT (friend_tmpl);
6409
6410   if (context)
6411     {
6412       if (TREE_CODE (context) == NAMESPACE_DECL)
6413         push_nested_namespace (context);
6414       else
6415         push_nested_class (tsubst (context, args, tf_none, NULL_TREE));
6416     }
6417
6418   /* Look for a class template declaration.  We look for hidden names
6419      because two friend declarations of the same template are the
6420      same.  For example, in:
6421
6422        struct A { 
6423          template <typename> friend class F;
6424        };
6425        template <typename> struct B { 
6426          template <typename> friend class F;
6427        };
6428
6429      both F templates are the same.  */
6430   tmpl = lookup_name_real (DECL_NAME (friend_tmpl), 0, 0,
6431                            /*block_p=*/true, 0, 
6432                            LOOKUP_COMPLAIN | LOOKUP_HIDDEN);
6433
6434   /* But, if we don't find one, it might be because we're in a
6435      situation like this:
6436
6437        template <class T>
6438        struct S {
6439          template <class U>
6440          friend struct S;
6441        };
6442
6443      Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
6444      for `S<int>', not the TEMPLATE_DECL.  */
6445   if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
6446     {
6447       tmpl = lookup_name_prefer_type (DECL_NAME (friend_tmpl), 1);
6448       tmpl = maybe_get_template_decl_from_type_decl (tmpl);
6449     }
6450
6451   if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
6452     {
6453       /* The friend template has already been declared.  Just
6454          check to see that the declarations match, and install any new
6455          default parameters.  We must tsubst the default parameters,
6456          of course.  We only need the innermost template parameters
6457          because that is all that redeclare_class_template will look
6458          at.  */
6459       if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
6460           > TMPL_ARGS_DEPTH (args))
6461         {
6462           tree parms;
6463           parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
6464                                          args, tf_warning_or_error);
6465           redeclare_class_template (TREE_TYPE (tmpl), parms);
6466         }
6467
6468       friend_type = TREE_TYPE (tmpl);
6469     }
6470   else
6471     {
6472       /* The friend template has not already been declared.  In this
6473          case, the instantiation of the template class will cause the
6474          injection of this template into the global scope.  */
6475       tmpl = tsubst (friend_tmpl, args, tf_warning_or_error, NULL_TREE);
6476       if (tmpl == error_mark_node)
6477         return error_mark_node;
6478
6479       /* The new TMPL is not an instantiation of anything, so we
6480          forget its origins.  We don't reset CLASSTYPE_TI_TEMPLATE for
6481          the new type because that is supposed to be the corresponding
6482          template decl, i.e., TMPL.  */
6483       DECL_USE_TEMPLATE (tmpl) = 0;
6484       DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
6485       CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
6486       CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
6487         = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
6488
6489       /* Inject this template into the global scope.  */
6490       friend_type = TREE_TYPE (pushdecl_top_level_maybe_friend (tmpl, true));
6491     }
6492
6493   if (context)
6494     {
6495       if (TREE_CODE (context) == NAMESPACE_DECL)
6496         pop_nested_namespace (context);
6497       else
6498         pop_nested_class ();
6499     }
6500
6501   return friend_type;
6502 }
6503
6504 /* Returns zero if TYPE cannot be completed later due to circularity.
6505    Otherwise returns one.  */
6506
6507 static int
6508 can_complete_type_without_circularity (tree type)
6509 {
6510   if (type == NULL_TREE || type == error_mark_node)
6511     return 0;
6512   else if (COMPLETE_TYPE_P (type))
6513     return 1;
6514   else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
6515     return can_complete_type_without_circularity (TREE_TYPE (type));
6516   else if (CLASS_TYPE_P (type)
6517            && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
6518     return 0;
6519   else
6520     return 1;
6521 }
6522
6523 /* Apply any attributes which had to be deferred until instantiation
6524    time.  DECL_P, ATTRIBUTES and ATTR_FLAGS are as cplus_decl_attributes;
6525    ARGS, COMPLAIN, IN_DECL are as tsubst.  */
6526
6527 static void
6528 apply_late_template_attributes (tree *decl_p, tree attributes, int attr_flags,
6529                                 tree args, tsubst_flags_t complain, tree in_decl)
6530 {
6531   tree last_dep = NULL_TREE;
6532   tree t;
6533   tree *p;
6534
6535   for (t = attributes; t; t = TREE_CHAIN (t))
6536     if (ATTR_IS_DEPENDENT (t))
6537       {
6538         last_dep = t;
6539         attributes = copy_list (attributes);
6540         break;
6541       }
6542
6543   if (DECL_P (*decl_p))
6544     p = &DECL_ATTRIBUTES (*decl_p);
6545   else
6546     p = &TYPE_ATTRIBUTES (*decl_p);
6547
6548   if (last_dep)
6549     {
6550       tree late_attrs = NULL_TREE;
6551       tree *q = &late_attrs;
6552
6553       for (*p = attributes; *p; )
6554         {
6555           t = *p;
6556           if (ATTR_IS_DEPENDENT (t))
6557             {
6558               *p = TREE_CHAIN (t);
6559               TREE_CHAIN (t) = NULL_TREE;
6560               TREE_VALUE (t)
6561                 = tsubst_expr (TREE_VALUE (t), args, complain, in_decl,
6562                                /*integral_constant_expression_p=*/false);
6563               *q = t;
6564               q = &TREE_CHAIN (t);
6565             }
6566           else
6567             p = &TREE_CHAIN (t);
6568         }
6569
6570       cplus_decl_attributes (decl_p, late_attrs, attr_flags);
6571     }
6572 }
6573
6574 tree
6575 instantiate_class_template (tree type)
6576 {
6577   tree template, args, pattern, t, member;
6578   tree typedecl;
6579   tree pbinfo;
6580   tree base_list;
6581
6582   if (type == error_mark_node)
6583     return error_mark_node;
6584
6585   if (TYPE_BEING_DEFINED (type)
6586       || COMPLETE_TYPE_P (type)
6587       || dependent_type_p (type))
6588     return type;
6589
6590   /* Figure out which template is being instantiated.  */
6591   template = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
6592   gcc_assert (TREE_CODE (template) == TEMPLATE_DECL);
6593
6594   /* Determine what specialization of the original template to
6595      instantiate.  */
6596   t = most_specialized_class (type, template);
6597   if (t == error_mark_node)
6598     {
6599       TYPE_BEING_DEFINED (type) = 1;
6600       return error_mark_node;
6601     }
6602   else if (t)
6603     {
6604       /* This TYPE is actually an instantiation of a partial
6605          specialization.  We replace the innermost set of ARGS with
6606          the arguments appropriate for substitution.  For example,
6607          given:
6608
6609            template <class T> struct S {};
6610            template <class T> struct S<T*> {};
6611
6612          and supposing that we are instantiating S<int*>, ARGS will
6613          presently be {int*} -- but we need {int}.  */
6614       pattern = TREE_TYPE (t);
6615       args = TREE_PURPOSE (t);
6616     }
6617   else
6618     {
6619       pattern = TREE_TYPE (template);
6620       args = CLASSTYPE_TI_ARGS (type);
6621     }
6622
6623   /* If the template we're instantiating is incomplete, then clearly
6624      there's nothing we can do.  */
6625   if (!COMPLETE_TYPE_P (pattern))
6626     return type;
6627
6628   /* If we've recursively instantiated too many templates, stop.  */
6629   if (! push_tinst_level (type))
6630     return type;
6631
6632   /* Now we're really doing the instantiation.  Mark the type as in
6633      the process of being defined.  */
6634   TYPE_BEING_DEFINED (type) = 1;
6635
6636   /* We may be in the middle of deferred access check.  Disable
6637      it now.  */
6638   push_deferring_access_checks (dk_no_deferred);
6639
6640   push_to_top_level ();
6641
6642   SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
6643
6644   /* Set the input location to the template definition. This is needed
6645      if tsubsting causes an error.  */
6646   typedecl = TYPE_MAIN_DECL (type);
6647   input_location = DECL_SOURCE_LOCATION (typedecl);
6648   in_system_header = DECL_IN_SYSTEM_HEADER (typedecl);
6649
6650   TYPE_HAS_CONSTRUCTOR (type) = TYPE_HAS_CONSTRUCTOR (pattern);
6651   TYPE_HAS_NEW_OPERATOR (type) = TYPE_HAS_NEW_OPERATOR (pattern);
6652   TYPE_HAS_ARRAY_NEW_OPERATOR (type) = TYPE_HAS_ARRAY_NEW_OPERATOR (pattern);
6653   TYPE_GETS_DELETE (type) = TYPE_GETS_DELETE (pattern);
6654   TYPE_HAS_ASSIGN_REF (type) = TYPE_HAS_ASSIGN_REF (pattern);
6655   TYPE_HAS_CONST_ASSIGN_REF (type) = TYPE_HAS_CONST_ASSIGN_REF (pattern);
6656   TYPE_HAS_INIT_REF (type) = TYPE_HAS_INIT_REF (pattern);
6657   TYPE_HAS_CONST_INIT_REF (type) = TYPE_HAS_CONST_INIT_REF (pattern);
6658   TYPE_HAS_DEFAULT_CONSTRUCTOR (type) = TYPE_HAS_DEFAULT_CONSTRUCTOR (pattern);
6659   TYPE_HAS_CONVERSION (type) = TYPE_HAS_CONVERSION (pattern);
6660   TYPE_PACKED (type) = TYPE_PACKED (pattern);
6661   TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
6662   TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
6663   TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
6664   if (ANON_AGGR_TYPE_P (pattern))
6665     SET_ANON_AGGR_TYPE_P (type);
6666   if (CLASSTYPE_VISIBILITY_SPECIFIED (pattern))
6667     {
6668       CLASSTYPE_VISIBILITY_SPECIFIED (type) = 1;
6669       CLASSTYPE_VISIBILITY (type) = CLASSTYPE_VISIBILITY (pattern);
6670     }
6671
6672   pbinfo = TYPE_BINFO (pattern);
6673
6674   /* We should never instantiate a nested class before its enclosing
6675      class; we need to look up the nested class by name before we can
6676      instantiate it, and that lookup should instantiate the enclosing
6677      class.  */
6678   gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
6679               || COMPLETE_TYPE_P (TYPE_CONTEXT (type))
6680               || TYPE_BEING_DEFINED (TYPE_CONTEXT (type)));
6681
6682   base_list = NULL_TREE;
6683   if (BINFO_N_BASE_BINFOS (pbinfo))
6684     {
6685       tree pbase_binfo;
6686       tree context = TYPE_CONTEXT (type);
6687       tree pushed_scope;
6688       int i;
6689
6690       /* We must enter the scope containing the type, as that is where
6691          the accessibility of types named in dependent bases are
6692          looked up from.  */
6693       pushed_scope = push_scope (context ? context : global_namespace);
6694
6695       /* Substitute into each of the bases to determine the actual
6696          basetypes.  */
6697       for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
6698         {
6699           tree base;
6700           tree access = BINFO_BASE_ACCESS (pbinfo, i);
6701           tree expanded_bases = NULL_TREE;
6702           int idx, len = 1;
6703
6704           if (PACK_EXPANSION_P (BINFO_TYPE (pbase_binfo)))
6705             {
6706               expanded_bases = 
6707                 tsubst_pack_expansion (BINFO_TYPE (pbase_binfo),
6708                                        args, tf_error, NULL_TREE);
6709               if (expanded_bases == error_mark_node)
6710                 continue;
6711
6712               len = TREE_VEC_LENGTH (expanded_bases);
6713             }
6714
6715           for (idx = 0; idx < len; idx++)
6716             {
6717               if (expanded_bases)
6718                 /* Extract the already-expanded base class.  */
6719                 base = TREE_VEC_ELT (expanded_bases, idx);
6720               else
6721                 /* Substitute to figure out the base class.  */
6722                 base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error, 
6723                                NULL_TREE);
6724
6725               if (base == error_mark_node)
6726                 continue;
6727
6728               base_list = tree_cons (access, base, base_list);
6729               if (BINFO_VIRTUAL_P (pbase_binfo))
6730                 TREE_TYPE (base_list) = integer_type_node;
6731             }
6732         }
6733
6734       /* The list is now in reverse order; correct that.  */
6735       base_list = nreverse (base_list);
6736
6737       if (pushed_scope)
6738         pop_scope (pushed_scope);
6739     }
6740   /* Now call xref_basetypes to set up all the base-class
6741      information.  */
6742   xref_basetypes (type, base_list);
6743
6744   apply_late_template_attributes (&type, TYPE_ATTRIBUTES (pattern),
6745                                   (int) ATTR_FLAG_TYPE_IN_PLACE,
6746                                   args, tf_error, NULL_TREE);
6747
6748   /* Now that our base classes are set up, enter the scope of the
6749      class, so that name lookups into base classes, etc. will work
6750      correctly.  This is precisely analogous to what we do in
6751      begin_class_definition when defining an ordinary non-template
6752      class, except we also need to push the enclosing classes.  */
6753   push_nested_class (type);
6754
6755   /* Now members are processed in the order of declaration.  */
6756   for (member = CLASSTYPE_DECL_LIST (pattern);
6757        member; member = TREE_CHAIN (member))
6758     {
6759       tree t = TREE_VALUE (member);
6760
6761       if (TREE_PURPOSE (member))
6762         {
6763           if (TYPE_P (t))
6764             {
6765               /* Build new CLASSTYPE_NESTED_UTDS.  */
6766
6767               tree newtag;
6768               bool class_template_p;
6769
6770               class_template_p = (TREE_CODE (t) != ENUMERAL_TYPE
6771                                   && TYPE_LANG_SPECIFIC (t)
6772                                   && CLASSTYPE_IS_TEMPLATE (t));
6773               /* If the member is a class template, then -- even after
6774                  substitution -- there may be dependent types in the
6775                  template argument list for the class.  We increment
6776                  PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
6777                  that function will assume that no types are dependent
6778                  when outside of a template.  */
6779               if (class_template_p)
6780                 ++processing_template_decl;
6781               newtag = tsubst (t, args, tf_error, NULL_TREE);
6782               if (class_template_p)
6783                 --processing_template_decl;
6784               if (newtag == error_mark_node)
6785                 continue;
6786
6787               if (TREE_CODE (newtag) != ENUMERAL_TYPE)
6788                 {
6789                   tree name = TYPE_IDENTIFIER (t);
6790
6791                   if (class_template_p)
6792                     /* Unfortunately, lookup_template_class sets
6793                        CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
6794                        instantiation (i.e., for the type of a member
6795                        template class nested within a template class.)
6796                        This behavior is required for
6797                        maybe_process_partial_specialization to work
6798                        correctly, but is not accurate in this case;
6799                        the TAG is not an instantiation of anything.
6800                        (The corresponding TEMPLATE_DECL is an
6801                        instantiation, but the TYPE is not.) */
6802                     CLASSTYPE_USE_TEMPLATE (newtag) = 0;
6803
6804                   /* Now, we call pushtag to put this NEWTAG into the scope of
6805                      TYPE.  We first set up the IDENTIFIER_TYPE_VALUE to avoid
6806                      pushtag calling push_template_decl.  We don't have to do
6807                      this for enums because it will already have been done in
6808                      tsubst_enum.  */
6809                   if (name)
6810                     SET_IDENTIFIER_TYPE_VALUE (name, newtag);
6811                   pushtag (name, newtag, /*tag_scope=*/ts_current);
6812                 }
6813             }
6814           else if (TREE_CODE (t) == FUNCTION_DECL
6815                    || DECL_FUNCTION_TEMPLATE_P (t))
6816             {
6817               /* Build new TYPE_METHODS.  */
6818               tree r;
6819
6820               if (TREE_CODE (t) == TEMPLATE_DECL)
6821                 ++processing_template_decl;
6822               r = tsubst (t, args, tf_error, NULL_TREE);
6823               if (TREE_CODE (t) == TEMPLATE_DECL)
6824                 --processing_template_decl;
6825               set_current_access_from_decl (r);
6826               finish_member_declaration (r);
6827             }
6828           else
6829             {
6830               /* Build new TYPE_FIELDS.  */
6831               if (TREE_CODE (t) == STATIC_ASSERT)
6832                 {
6833                   tree condition = 
6834                     tsubst_expr (STATIC_ASSERT_CONDITION (t), args, 
6835                                  tf_warning_or_error, NULL_TREE,
6836                                  /*integral_constant_expression_p=*/true);
6837                   finish_static_assert (condition,
6838                                         STATIC_ASSERT_MESSAGE (t), 
6839                                         STATIC_ASSERT_SOURCE_LOCATION (t),
6840                                         /*member_p=*/true);
6841                 }
6842               else if (TREE_CODE (t) != CONST_DECL)
6843                 {
6844                   tree r;
6845
6846                   /* The the file and line for this declaration, to
6847                      assist in error message reporting.  Since we
6848                      called push_tinst_level above, we don't need to
6849                      restore these.  */
6850                   input_location = DECL_SOURCE_LOCATION (t);
6851
6852                   if (TREE_CODE (t) == TEMPLATE_DECL)
6853                     ++processing_template_decl;
6854                   r = tsubst (t, args, tf_warning_or_error, NULL_TREE);
6855                   if (TREE_CODE (t) == TEMPLATE_DECL)
6856                     --processing_template_decl;
6857                   if (TREE_CODE (r) == VAR_DECL)
6858                     {
6859                       /* In [temp.inst]:
6860
6861                            [t]he initialization (and any associated
6862                            side-effects) of a static data member does
6863                            not occur unless the static data member is
6864                            itself used in a way that requires the
6865                            definition of the static data member to
6866                            exist.
6867
6868                          Therefore, we do not substitute into the
6869                          initialized for the static data member here.  */
6870                       finish_static_data_member_decl
6871                         (r,
6872                          /*init=*/NULL_TREE,
6873                          /*init_const_expr_p=*/false,
6874                          /*asmspec_tree=*/NULL_TREE,
6875                          /*flags=*/0);
6876                       if (DECL_INITIALIZED_IN_CLASS_P (r))
6877                         check_static_variable_definition (r, TREE_TYPE (r));
6878                     }
6879                   else if (TREE_CODE (r) == FIELD_DECL)
6880                     {
6881                       /* Determine whether R has a valid type and can be
6882                          completed later.  If R is invalid, then it is
6883                          replaced by error_mark_node so that it will not be
6884                          added to TYPE_FIELDS.  */
6885                       tree rtype = TREE_TYPE (r);
6886                       if (can_complete_type_without_circularity (rtype))
6887                         complete_type (rtype);
6888
6889                       if (!COMPLETE_TYPE_P (rtype))
6890                         {
6891                           cxx_incomplete_type_error (r, rtype);
6892                           r = error_mark_node;
6893                         }
6894                     }
6895
6896                   /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
6897                      such a thing will already have been added to the field
6898                      list by tsubst_enum in finish_member_declaration in the
6899                      CLASSTYPE_NESTED_UTDS case above.  */
6900                   if (!(TREE_CODE (r) == TYPE_DECL
6901                         && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
6902                         && DECL_ARTIFICIAL (r)))
6903                     {
6904                       set_current_access_from_decl (r);
6905                       finish_member_declaration (r);
6906                     }
6907                 }
6908             }
6909         }
6910       else
6911         {
6912           if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t))
6913             {
6914               /* Build new CLASSTYPE_FRIEND_CLASSES.  */
6915
6916               tree friend_type = t;
6917               bool adjust_processing_template_decl = false;
6918
6919               if (TREE_CODE (friend_type) == TEMPLATE_DECL)
6920                 {
6921                   /* template <class T> friend class C;  */
6922                   friend_type = tsubst_friend_class (friend_type, args);
6923                   adjust_processing_template_decl = true;
6924                 }
6925               else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
6926                 {
6927                   /* template <class T> friend class C::D;  */
6928                   friend_type = tsubst (friend_type, args,
6929                                         tf_warning_or_error, NULL_TREE);
6930                   if (TREE_CODE (friend_type) == TEMPLATE_DECL)
6931                     friend_type = TREE_TYPE (friend_type);
6932                   adjust_processing_template_decl = true;
6933                 }
6934               else if (TREE_CODE (friend_type) == TYPENAME_TYPE)
6935                 {
6936                   /* This could be either
6937
6938                        friend class T::C;
6939
6940                      when dependent_type_p is false or
6941
6942                        template <class U> friend class T::C;
6943
6944                      otherwise.  */
6945                   friend_type = tsubst (friend_type, args,
6946                                         tf_warning_or_error, NULL_TREE);
6947                   /* Bump processing_template_decl for correct
6948                      dependent_type_p calculation.  */
6949                   ++processing_template_decl;
6950                   if (dependent_type_p (friend_type))
6951                     adjust_processing_template_decl = true;
6952                   --processing_template_decl;
6953                 }
6954               else if (!CLASSTYPE_USE_TEMPLATE (friend_type)
6955                        && hidden_name_p (TYPE_NAME (friend_type)))
6956                 {
6957                   /* friend class C;
6958
6959                      where C hasn't been declared yet.  Let's lookup name
6960                      from namespace scope directly, bypassing any name that
6961                      come from dependent base class.  */
6962                   tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
6963
6964                   /* The call to xref_tag_from_type does injection for friend
6965                      classes.  */
6966                   push_nested_namespace (ns);
6967                   friend_type =
6968                     xref_tag_from_type (friend_type, NULL_TREE,
6969                                         /*tag_scope=*/ts_current);
6970                   pop_nested_namespace (ns);
6971                 }
6972               else if (uses_template_parms (friend_type))
6973                 /* friend class C<T>;  */
6974                 friend_type = tsubst (friend_type, args,
6975                                       tf_warning_or_error, NULL_TREE);
6976               /* Otherwise it's
6977
6978                    friend class C;
6979
6980                  where C is already declared or
6981
6982                    friend class C<int>;
6983
6984                  We don't have to do anything in these cases.  */
6985
6986               if (adjust_processing_template_decl)
6987                 /* Trick make_friend_class into realizing that the friend
6988                    we're adding is a template, not an ordinary class.  It's
6989                    important that we use make_friend_class since it will
6990                    perform some error-checking and output cross-reference
6991                    information.  */
6992                 ++processing_template_decl;
6993
6994               if (friend_type != error_mark_node)
6995                 make_friend_class (type, friend_type, /*complain=*/false);
6996
6997               if (adjust_processing_template_decl)
6998                 --processing_template_decl;
6999             }
7000           else
7001             {
7002               /* Build new DECL_FRIENDLIST.  */
7003               tree r;
7004
7005               /* The the file and line for this declaration, to
7006                  assist in error message reporting.  Since we
7007                  called push_tinst_level above, we don't need to
7008                  restore these.  */
7009               input_location = DECL_SOURCE_LOCATION (t);
7010
7011               if (TREE_CODE (t) == TEMPLATE_DECL)
7012                 {
7013                   ++processing_template_decl;
7014                   push_deferring_access_checks (dk_no_check);
7015                 }
7016
7017               r = tsubst_friend_function (t, args);
7018               add_friend (type, r, /*complain=*/false);
7019               if (TREE_CODE (t) == TEMPLATE_DECL)
7020                 {
7021                   pop_deferring_access_checks ();
7022                   --processing_template_decl;
7023                 }
7024             }
7025         }
7026     }
7027
7028   /* Set the file and line number information to whatever is given for
7029      the class itself.  This puts error messages involving generated
7030      implicit functions at a predictable point, and the same point
7031      that would be used for non-template classes.  */
7032   input_location = DECL_SOURCE_LOCATION (typedecl);
7033
7034   unreverse_member_declarations (type);
7035   finish_struct_1 (type);
7036   TYPE_BEING_DEFINED (type) = 0;
7037
7038   /* Now that the class is complete, instantiate default arguments for
7039      any member functions.  We don't do this earlier because the
7040      default arguments may reference members of the class.  */
7041   if (!PRIMARY_TEMPLATE_P (template))
7042     for (t = TYPE_METHODS (type); t; t = TREE_CHAIN (t))
7043       if (TREE_CODE (t) == FUNCTION_DECL
7044           /* Implicitly generated member functions will not have template
7045              information; they are not instantiations, but instead are
7046              created "fresh" for each instantiation.  */
7047           && DECL_TEMPLATE_INFO (t))
7048         tsubst_default_arguments (t);
7049
7050   pop_nested_class ();
7051   pop_from_top_level ();
7052   pop_deferring_access_checks ();
7053   pop_tinst_level ();
7054
7055   /* The vtable for a template class can be emitted in any translation
7056      unit in which the class is instantiated.  When there is no key
7057      method, however, finish_struct_1 will already have added TYPE to
7058      the keyed_classes list.  */
7059   if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
7060     keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
7061
7062   return type;
7063 }
7064
7065 static tree
7066 tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
7067 {
7068   tree r;
7069
7070   if (!t)
7071     r = t;
7072   else if (TYPE_P (t))
7073     r = tsubst (t, args, complain, in_decl);
7074   else
7075     {
7076       r = tsubst_expr (t, args, complain, in_decl,
7077                        /*integral_constant_expression_p=*/true);
7078       r = fold_non_dependent_expr (r);
7079     }
7080   return r;
7081 }
7082
7083 /* Substitute ARGS into T, which is an pack expansion
7084    (i.e. TYPE_PACK_EXPANSION or EXPR_PACK_EXPANSION). Returns a
7085    TREE_VEC with the substituted arguments, a PACK_EXPANSION_* node
7086    (if only a partial substitution could be performed) or
7087    ERROR_MARK_NODE if there was an error.  */
7088 tree
7089 tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
7090                        tree in_decl)
7091 {
7092   tree pattern;
7093   tree pack, packs = NULL_TREE, unsubstituted_packs = NULL_TREE;
7094   tree first_arg_pack; int i, len = -1;
7095   tree result;
7096   int incomplete = 0;
7097
7098   gcc_assert (PACK_EXPANSION_P (t));
7099   pattern = PACK_EXPANSION_PATTERN (t);
7100
7101   /* Determine the argument packs that will instantiate the parameter
7102      packs used in the expansion expression. While we're at it,
7103      compute the number of arguments to be expanded and make sure it
7104      is consistent.  */
7105   for (pack = PACK_EXPANSION_PARAMETER_PACKS (t); pack; 
7106        pack = TREE_CHAIN (pack))
7107     {
7108       tree parm_pack = TREE_VALUE (pack);
7109       tree arg_pack = NULL_TREE;
7110       tree orig_arg = NULL_TREE;
7111
7112       if (TREE_CODE (parm_pack) == PARM_DECL)
7113         {
7114           if (local_specializations)
7115             arg_pack = retrieve_local_specialization (parm_pack);
7116         }
7117       else
7118         {
7119           int level, idx, levels;
7120           template_parm_level_and_index (parm_pack, &level, &idx);
7121
7122           levels = TMPL_ARGS_DEPTH (args);
7123           if (level <= levels)
7124             arg_pack = TMPL_ARG (args, level, idx);
7125         }
7126
7127       orig_arg = arg_pack;
7128       if (arg_pack && TREE_CODE (arg_pack) == ARGUMENT_PACK_SELECT)
7129         arg_pack = ARGUMENT_PACK_SELECT_FROM_PACK (arg_pack);
7130       
7131       if (arg_pack && !ARGUMENT_PACK_P (arg_pack))
7132         /* This can only happen if we forget to expand an argument
7133            pack somewhere else. Just return an error, silently.  */
7134         {
7135           result = make_tree_vec (1);
7136           TREE_VEC_ELT (result, 0) = error_mark_node;
7137           return result;
7138         }
7139
7140       if (arg_pack
7141           && TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack)) == 1
7142           && PACK_EXPANSION_P (TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0)))
7143         {
7144           tree expansion = TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0);
7145           tree pattern = PACK_EXPANSION_PATTERN (expansion);
7146           if ((TYPE_P (pattern) && same_type_p (pattern, parm_pack))
7147               || (!TYPE_P (pattern) && cp_tree_equal (parm_pack, pattern)))
7148             /* The argument pack that the parameter maps to is just an
7149                expansion of the parameter itself, such as one would
7150                find in the implicit typedef of a class inside the
7151                class itself.  Consider this parameter "unsubstituted",
7152                so that we will maintain the outer pack expansion.  */
7153             arg_pack = NULL_TREE;
7154         }
7155           
7156       if (arg_pack)
7157         {
7158           int my_len = 
7159             TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack));
7160
7161           /* It's all-or-nothing with incomplete argument packs.  */
7162           if (incomplete && !ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
7163             return error_mark_node;
7164           
7165           if (ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
7166             incomplete = 1;
7167
7168           if (len < 0)
7169             {
7170               len = my_len;
7171               first_arg_pack = arg_pack;
7172             }
7173           else if (len != my_len)
7174             {
7175               if (TREE_CODE (t) == TYPE_PACK_EXPANSION)
7176                 error ("mismatched argument pack lengths while expanding "
7177                        "%<%T%>",
7178                        pattern);
7179               else
7180                 error ("mismatched argument pack lengths while expanding "
7181                        "%<%E%>",
7182                        pattern);
7183               return error_mark_node;
7184             }
7185
7186           /* Keep track of the parameter packs and their corresponding
7187              argument packs.  */
7188           packs = tree_cons (parm_pack, arg_pack, packs);
7189           TREE_TYPE (packs) = orig_arg;
7190         }
7191       else
7192         /* We can't substitute for this parameter pack.  */
7193         unsubstituted_packs = tree_cons (TREE_PURPOSE (pack),
7194                                          TREE_VALUE (pack),
7195                                          unsubstituted_packs);
7196     }
7197
7198   /* We cannot expand this expansion expression, because we don't have
7199      all of the argument packs we need. Substitute into the pattern
7200      and return a PACK_EXPANSION_*. The caller will need to deal with
7201      that.  */
7202   if (unsubstituted_packs)
7203     return make_pack_expansion (tsubst (pattern, args, complain, 
7204                                         in_decl));
7205
7206   /* We could not find any argument packs that work.  */
7207   if (len < 0)
7208     return error_mark_node;
7209
7210   /* For each argument in each argument pack, substitute into the
7211      pattern.  */
7212   result = make_tree_vec (len + incomplete);
7213   for (i = 0; i < len + incomplete; ++i)
7214     {
7215       /* For parameter pack, change the substitution of the parameter
7216          pack to the ith argument in its argument pack, then expand
7217          the pattern.  */
7218       for (pack = packs; pack; pack = TREE_CHAIN (pack))
7219         {
7220           tree parm = TREE_PURPOSE (pack);
7221
7222           if (TREE_CODE (parm) == PARM_DECL)
7223             {
7224               /* Select the Ith argument from the pack.  */
7225               tree arg = make_node (ARGUMENT_PACK_SELECT);
7226               ARGUMENT_PACK_SELECT_FROM_PACK (arg) = TREE_VALUE (pack);
7227               ARGUMENT_PACK_SELECT_INDEX (arg) = i;
7228               mark_used (parm);
7229               register_local_specialization (arg, parm);
7230             }
7231           else
7232             {
7233               tree value = parm;
7234               int idx, level;
7235               template_parm_level_and_index (parm, &level, &idx);
7236               
7237               if (i < len) 
7238                 {
7239                   /* Select the Ith argument from the pack. */
7240                   value = make_node (ARGUMENT_PACK_SELECT);
7241                   ARGUMENT_PACK_SELECT_FROM_PACK (value) = TREE_VALUE (pack);
7242                   ARGUMENT_PACK_SELECT_INDEX (value) = i;
7243                 }
7244
7245               /* Update the corresponding argument.  */
7246               TMPL_ARG (args, level, idx) = value;
7247             }
7248         }
7249
7250       /* Substitute into the PATTERN with the altered arguments.  */
7251       if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
7252         TREE_VEC_ELT (result, i) = 
7253           tsubst_expr (pattern, args, complain, in_decl,
7254                        /*integral_constant_expression_p=*/false);
7255       else
7256         TREE_VEC_ELT (result, i) = tsubst (pattern, args, complain, in_decl);
7257
7258       if (i == len)
7259         /* When we have incomplete argument packs, the last "expanded"
7260            result is itself a pack expansion, which allows us
7261            to deduce more arguments.  */
7262         TREE_VEC_ELT (result, i) = 
7263           make_pack_expansion (TREE_VEC_ELT (result, i));
7264
7265       if (TREE_VEC_ELT (result, i) == error_mark_node)
7266         {
7267           result = error_mark_node;
7268           break;
7269         }
7270     }
7271   
7272   /* Update ARGS to restore the substitution from parameter packs to
7273      their argument packs.  */
7274   for (pack = packs; pack; pack = TREE_CHAIN (pack))
7275     {
7276       tree parm = TREE_PURPOSE (pack);
7277
7278       if (TREE_CODE (parm) == PARM_DECL)
7279         register_local_specialization (TREE_TYPE (pack), parm);
7280       else
7281         {
7282           int idx, level;
7283           template_parm_level_and_index (parm, &level, &idx);
7284           
7285           /* Update the corresponding argument.  */
7286           if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
7287             TREE_VEC_ELT (TREE_VEC_ELT (args, level -1 ), idx) =
7288               TREE_TYPE (pack);
7289           else
7290             TREE_VEC_ELT (args, idx) = TREE_TYPE (pack);
7291         }
7292     }
7293
7294   return result;
7295 }
7296
7297 /* Substitute ARGS into the vector or list of template arguments T.  */
7298
7299 static tree
7300 tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
7301 {
7302   tree orig_t = t;
7303   int len = TREE_VEC_LENGTH (t);
7304   int need_new = 0, i, expanded_len_adjust = 0, out;
7305   tree *elts = (tree *) alloca (len * sizeof (tree));
7306
7307   for (i = 0; i < len; i++)
7308     {
7309       tree orig_arg = TREE_VEC_ELT (t, i);
7310       tree new_arg;
7311
7312       if (TREE_CODE (orig_arg) == TREE_VEC)
7313         new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
7314       else if (PACK_EXPANSION_P (orig_arg))
7315         {
7316           /* Substitute into an expansion expression.  */
7317           new_arg = tsubst_pack_expansion (orig_arg, args, complain, in_decl);
7318
7319           if (TREE_CODE (new_arg) == TREE_VEC)
7320             /* Add to the expanded length adjustment the number of
7321                expanded arguments. We subtract one from this
7322                measurement, because the argument pack expression
7323                itself is already counted as 1 in
7324                LEN. EXPANDED_LEN_ADJUST can actually be negative, if
7325                the argument pack is empty.  */
7326             expanded_len_adjust += TREE_VEC_LENGTH (new_arg) - 1;
7327         }
7328       else if (ARGUMENT_PACK_P (orig_arg))
7329         {
7330           /* Substitute into each of the arguments.  */
7331           new_arg = make_node (TREE_CODE (orig_arg));
7332           
7333           SET_ARGUMENT_PACK_ARGS (
7334             new_arg,
7335             tsubst_template_args (ARGUMENT_PACK_ARGS (orig_arg),
7336                                   args, complain, in_decl));
7337
7338           if (ARGUMENT_PACK_ARGS (new_arg) == error_mark_node)
7339             new_arg = error_mark_node;
7340
7341           if (TREE_CODE (new_arg) == NONTYPE_ARGUMENT_PACK) {
7342             TREE_TYPE (new_arg) = tsubst (TREE_TYPE (orig_arg), args,
7343                                           complain, in_decl);
7344             TREE_CONSTANT (new_arg) = TREE_CONSTANT (orig_arg);
7345
7346             if (TREE_TYPE (new_arg) == error_mark_node)
7347               new_arg = error_mark_node;
7348           }
7349         }
7350       else
7351         new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
7352
7353       if (new_arg == error_mark_node)
7354         return error_mark_node;
7355
7356       elts[i] = new_arg;
7357       if (new_arg != orig_arg)
7358         need_new = 1;
7359     }
7360
7361   if (!need_new)
7362     return t;
7363
7364   /* Make space for the expanded arguments coming from template
7365      argument packs.  */
7366   t = make_tree_vec (len + expanded_len_adjust);
7367   for (i = 0, out = 0; i < len; i++)
7368     {
7369       if ((PACK_EXPANSION_P (TREE_VEC_ELT (orig_t, i))
7370            || ARGUMENT_PACK_P (TREE_VEC_ELT (orig_t, i)))
7371           && TREE_CODE (elts[i]) == TREE_VEC)
7372         {
7373           int idx;
7374
7375           /* Now expand the template argument pack "in place".  */
7376           for (idx = 0; idx < TREE_VEC_LENGTH (elts[i]); idx++, out++)
7377             TREE_VEC_ELT (t, out) = TREE_VEC_ELT (elts[i], idx);
7378         }
7379       else
7380         {
7381           TREE_VEC_ELT (t, out) = elts[i];
7382           out++;
7383         }
7384     }
7385
7386   return t;
7387 }
7388
7389 /* Return the result of substituting ARGS into the template parameters
7390    given by PARMS.  If there are m levels of ARGS and m + n levels of
7391    PARMS, then the result will contain n levels of PARMS.  For
7392    example, if PARMS is `template <class T> template <class U>
7393    template <T*, U, class V>' and ARGS is {{int}, {double}} then the
7394    result will be `template <int*, double, class V>'.  */
7395
7396 static tree
7397 tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
7398 {
7399   tree r = NULL_TREE;
7400   tree* new_parms;
7401
7402   /* When substituting into a template, we must set
7403      PROCESSING_TEMPLATE_DECL as the template parameters may be
7404      dependent if they are based on one-another, and the dependency
7405      predicates are short-circuit outside of templates.  */
7406   ++processing_template_decl;
7407
7408   for (new_parms = &r;
7409        TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
7410        new_parms = &(TREE_CHAIN (*new_parms)),
7411          parms = TREE_CHAIN (parms))
7412     {
7413       tree new_vec =
7414         make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
7415       int i;
7416
7417       for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
7418         {
7419           tree tuple;
7420           tree default_value;
7421           tree parm_decl;
7422
7423           if (parms == error_mark_node)
7424             continue;
7425
7426           tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
7427
7428           if (tuple == error_mark_node)
7429             continue;
7430
7431           default_value = TREE_PURPOSE (tuple);
7432           parm_decl = TREE_VALUE (tuple);
7433
7434           parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
7435           if (TREE_CODE (parm_decl) == PARM_DECL
7436               && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl), complain))
7437             parm_decl = error_mark_node;
7438           default_value = tsubst_template_arg (default_value, args,
7439                                                complain, NULL_TREE);
7440
7441           tuple = build_tree_list (default_value, parm_decl);
7442           TREE_VEC_ELT (new_vec, i) = tuple;
7443         }
7444
7445       *new_parms =
7446         tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
7447                              - TMPL_ARGS_DEPTH (args)),
7448                    new_vec, NULL_TREE);
7449     }
7450
7451   --processing_template_decl;
7452
7453   return r;
7454 }
7455
7456 /* Substitute the ARGS into the indicated aggregate (or enumeration)
7457    type T.  If T is not an aggregate or enumeration type, it is
7458    handled as if by tsubst.  IN_DECL is as for tsubst.  If
7459    ENTERING_SCOPE is nonzero, T is the context for a template which
7460    we are presently tsubst'ing.  Return the substituted value.  */
7461
7462 static tree
7463 tsubst_aggr_type (tree t,
7464                   tree args,
7465                   tsubst_flags_t complain,
7466                   tree in_decl,
7467                   int entering_scope)
7468 {
7469   if (t == NULL_TREE)
7470     return NULL_TREE;
7471
7472   switch (TREE_CODE (t))
7473     {
7474     case RECORD_TYPE:
7475       if (TYPE_PTRMEMFUNC_P (t))
7476         return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
7477
7478       /* Else fall through.  */
7479     case ENUMERAL_TYPE:
7480     case UNION_TYPE:
7481       if (TYPE_TEMPLATE_INFO (t))
7482         {
7483           tree argvec;
7484           tree context;
7485           tree r;
7486           bool saved_skip_evaluation;
7487
7488           /* In "sizeof(X<I>)" we need to evaluate "I".  */
7489           saved_skip_evaluation = skip_evaluation;
7490           skip_evaluation = false;
7491
7492           /* First, determine the context for the type we are looking
7493              up.  */
7494           context = TYPE_CONTEXT (t);
7495           if (context)
7496             context = tsubst_aggr_type (context, args, complain,
7497                                         in_decl, /*entering_scope=*/1);
7498
7499           /* Then, figure out what arguments are appropriate for the
7500              type we are trying to find.  For example, given:
7501
7502                template <class T> struct S;
7503                template <class T, class U> void f(T, U) { S<U> su; }
7504
7505              and supposing that we are instantiating f<int, double>,
7506              then our ARGS will be {int, double}, but, when looking up
7507              S we only want {double}.  */
7508           argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
7509                                          complain, in_decl);
7510           if (argvec == error_mark_node)
7511             r = error_mark_node;
7512           else
7513             {
7514               r = lookup_template_class (t, argvec, in_decl, context,
7515                                          entering_scope, complain);
7516               r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
7517             }
7518
7519           skip_evaluation = saved_skip_evaluation;
7520
7521           return r;
7522         }
7523       else
7524         /* This is not a template type, so there's nothing to do.  */
7525         return t;
7526
7527     default:
7528       return tsubst (t, args, complain, in_decl);
7529     }
7530 }
7531
7532 /* Substitute into the default argument ARG (a default argument for
7533    FN), which has the indicated TYPE.  */
7534
7535 tree
7536 tsubst_default_argument (tree fn, tree type, tree arg)
7537 {
7538   tree saved_class_ptr = NULL_TREE;
7539   tree saved_class_ref = NULL_TREE;
7540
7541   /* This default argument came from a template.  Instantiate the
7542      default argument here, not in tsubst.  In the case of
7543      something like:
7544
7545        template <class T>
7546        struct S {
7547          static T t();
7548          void f(T = t());
7549        };
7550
7551      we must be careful to do name lookup in the scope of S<T>,
7552      rather than in the current class.  */
7553   push_access_scope (fn);
7554   /* The "this" pointer is not valid in a default argument.  */
7555   if (cfun)
7556     {
7557       saved_class_ptr = current_class_ptr;
7558       cp_function_chain->x_current_class_ptr = NULL_TREE;
7559       saved_class_ref = current_class_ref;
7560       cp_function_chain->x_current_class_ref = NULL_TREE;
7561     }
7562
7563   push_deferring_access_checks(dk_no_deferred);
7564   /* The default argument expression may cause implicitly defined
7565      member functions to be synthesized, which will result in garbage
7566      collection.  We must treat this situation as if we were within
7567      the body of function so as to avoid collecting live data on the
7568      stack.  */
7569   ++function_depth;
7570   arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
7571                      tf_warning_or_error, NULL_TREE,
7572                      /*integral_constant_expression_p=*/false);
7573   --function_depth;
7574   pop_deferring_access_checks();
7575
7576   /* Restore the "this" pointer.  */
7577   if (cfun)
7578     {
7579       cp_function_chain->x_current_class_ptr = saved_class_ptr;
7580       cp_function_chain->x_current_class_ref = saved_class_ref;
7581     }
7582
7583   pop_access_scope (fn);
7584
7585   /* Make sure the default argument is reasonable.  */
7586   arg = check_default_argument (type, arg);
7587
7588   return arg;
7589 }
7590
7591 /* Substitute into all the default arguments for FN.  */
7592
7593 static void
7594 tsubst_default_arguments (tree fn)
7595 {
7596   tree arg;
7597   tree tmpl_args;
7598
7599   tmpl_args = DECL_TI_ARGS (fn);
7600
7601   /* If this function is not yet instantiated, we certainly don't need
7602      its default arguments.  */
7603   if (uses_template_parms (tmpl_args))
7604     return;
7605
7606   for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
7607        arg;
7608        arg = TREE_CHAIN (arg))
7609     if (TREE_PURPOSE (arg))
7610       TREE_PURPOSE (arg) = tsubst_default_argument (fn,
7611                                                     TREE_VALUE (arg),
7612                                                     TREE_PURPOSE (arg));
7613 }
7614
7615 /* Substitute the ARGS into the T, which is a _DECL.  Return the
7616    result of the substitution.  Issue error and warning messages under
7617    control of COMPLAIN.  */
7618
7619 static tree
7620 tsubst_decl (tree t, tree args, tsubst_flags_t complain)
7621 {
7622   location_t saved_loc;
7623   tree r = NULL_TREE;
7624   tree in_decl = t;
7625
7626   /* Set the filename and linenumber to improve error-reporting.  */
7627   saved_loc = input_location;
7628   input_location = DECL_SOURCE_LOCATION (t);
7629
7630   switch (TREE_CODE (t))
7631     {
7632     case TEMPLATE_DECL:
7633       {
7634         /* We can get here when processing a member function template,
7635            member class template, and template template parameter of
7636            a template class.  */
7637         tree decl = DECL_TEMPLATE_RESULT (t);
7638         tree spec;
7639         tree tmpl_args;
7640         tree full_args;
7641
7642         if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
7643           {
7644             /* Template template parameter is treated here.  */
7645             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7646             if (new_type == error_mark_node)
7647               return error_mark_node;
7648
7649             r = copy_decl (t);
7650             TREE_CHAIN (r) = NULL_TREE;
7651             TREE_TYPE (r) = new_type;
7652             DECL_TEMPLATE_RESULT (r)
7653               = build_decl (TYPE_DECL, DECL_NAME (decl), new_type);
7654             DECL_TEMPLATE_PARMS (r)
7655               = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
7656                                        complain);
7657             TYPE_NAME (new_type) = r;
7658             break;
7659           }
7660
7661         /* We might already have an instance of this template.
7662            The ARGS are for the surrounding class type, so the
7663            full args contain the tsubst'd args for the context,
7664            plus the innermost args from the template decl.  */
7665         tmpl_args = DECL_CLASS_TEMPLATE_P (t)
7666           ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
7667           : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
7668         /* Because this is a template, the arguments will still be
7669            dependent, even after substitution.  If
7670            PROCESSING_TEMPLATE_DECL is not set, the dependency
7671            predicates will short-circuit.  */
7672         ++processing_template_decl;
7673         full_args = tsubst_template_args (tmpl_args, args,
7674                                           complain, in_decl);
7675         --processing_template_decl;
7676         if (full_args == error_mark_node)
7677           return error_mark_node;
7678
7679         /* tsubst_template_args doesn't copy the vector if
7680            nothing changed.  But, *something* should have
7681            changed.  */
7682         gcc_assert (full_args != tmpl_args);
7683
7684         spec = retrieve_specialization (t, full_args,
7685                                         /*class_specializations_p=*/true);
7686         if (spec != NULL_TREE)
7687           {
7688             r = spec;
7689             break;
7690           }
7691
7692         /* Make a new template decl.  It will be similar to the
7693            original, but will record the current template arguments.
7694            We also create a new function declaration, which is just
7695            like the old one, but points to this new template, rather
7696            than the old one.  */
7697         r = copy_decl (t);
7698         gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
7699         TREE_CHAIN (r) = NULL_TREE;
7700
7701         DECL_TEMPLATE_INFO (r) = build_tree_list (t, args);
7702
7703         if (TREE_CODE (decl) == TYPE_DECL)
7704           {
7705             tree new_type;
7706             ++processing_template_decl;
7707             new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7708             --processing_template_decl;
7709             if (new_type == error_mark_node)
7710               return error_mark_node;
7711
7712             TREE_TYPE (r) = new_type;
7713             CLASSTYPE_TI_TEMPLATE (new_type) = r;
7714             DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
7715             DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
7716             DECL_CONTEXT (r) = TYPE_CONTEXT (new_type);
7717           }
7718         else
7719           {
7720             tree new_decl;
7721             ++processing_template_decl;
7722             new_decl = tsubst (decl, args, complain, in_decl);
7723             --processing_template_decl;
7724             if (new_decl == error_mark_node)
7725               return error_mark_node;
7726
7727             DECL_TEMPLATE_RESULT (r) = new_decl;
7728             DECL_TI_TEMPLATE (new_decl) = r;
7729             TREE_TYPE (r) = TREE_TYPE (new_decl);
7730             DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
7731             DECL_CONTEXT (r) = DECL_CONTEXT (new_decl);
7732           }
7733
7734         SET_DECL_IMPLICIT_INSTANTIATION (r);
7735         DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
7736         DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
7737
7738         /* The template parameters for this new template are all the
7739            template parameters for the old template, except the
7740            outermost level of parameters.  */
7741         DECL_TEMPLATE_PARMS (r)
7742           = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
7743                                    complain);
7744
7745         if (PRIMARY_TEMPLATE_P (t))
7746           DECL_PRIMARY_TEMPLATE (r) = r;
7747
7748         if (TREE_CODE (decl) != TYPE_DECL)
7749           /* Record this non-type partial instantiation.  */
7750           register_specialization (r, t,
7751                                    DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)),
7752                                    false);
7753       }
7754       break;
7755
7756     case FUNCTION_DECL:
7757       {
7758         tree ctx;
7759         tree argvec = NULL_TREE;
7760         tree *friends;
7761         tree gen_tmpl;
7762         tree type;
7763         int member;
7764         int args_depth;
7765         int parms_depth;
7766
7767         /* Nobody should be tsubst'ing into non-template functions.  */
7768         gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
7769
7770         if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
7771           {
7772             tree spec;
7773             bool dependent_p;
7774
7775             /* If T is not dependent, just return it.  We have to
7776                increment PROCESSING_TEMPLATE_DECL because
7777                value_dependent_expression_p assumes that nothing is
7778                dependent when PROCESSING_TEMPLATE_DECL is zero.  */
7779             ++processing_template_decl;
7780             dependent_p = value_dependent_expression_p (t);
7781             --processing_template_decl;
7782             if (!dependent_p)
7783               return t;
7784
7785             /* Calculate the most general template of which R is a
7786                specialization, and the complete set of arguments used to
7787                specialize R.  */
7788             gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
7789             argvec = tsubst_template_args (DECL_TI_ARGS
7790                                            (DECL_TEMPLATE_RESULT (gen_tmpl)),
7791                                            args, complain, in_decl);
7792
7793             /* Check to see if we already have this specialization.  */
7794             spec = retrieve_specialization (gen_tmpl, argvec,
7795                                             /*class_specializations_p=*/false);
7796
7797             if (spec)
7798               {
7799                 r = spec;
7800                 break;
7801               }
7802
7803             /* We can see more levels of arguments than parameters if
7804                there was a specialization of a member template, like
7805                this:
7806
7807                  template <class T> struct S { template <class U> void f(); }
7808                  template <> template <class U> void S<int>::f(U);
7809
7810                Here, we'll be substituting into the specialization,
7811                because that's where we can find the code we actually
7812                want to generate, but we'll have enough arguments for
7813                the most general template.
7814
7815                We also deal with the peculiar case:
7816
7817                  template <class T> struct S {
7818                    template <class U> friend void f();
7819                  };
7820                  template <class U> void f() {}
7821                  template S<int>;
7822                  template void f<double>();
7823
7824                Here, the ARGS for the instantiation of will be {int,
7825                double}.  But, we only need as many ARGS as there are
7826                levels of template parameters in CODE_PATTERN.  We are
7827                careful not to get fooled into reducing the ARGS in
7828                situations like:
7829
7830                  template <class T> struct S { template <class U> void f(U); }
7831                  template <class T> template <> void S<T>::f(int) {}
7832
7833                which we can spot because the pattern will be a
7834                specialization in this case.  */
7835             args_depth = TMPL_ARGS_DEPTH (args);
7836             parms_depth =
7837               TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
7838             if (args_depth > parms_depth
7839                 && !DECL_TEMPLATE_SPECIALIZATION (t))
7840               args = get_innermost_template_args (args, parms_depth);
7841           }
7842         else
7843           {
7844             /* This special case arises when we have something like this:
7845
7846                  template <class T> struct S {
7847                    friend void f<int>(int, double);
7848                  };
7849
7850                Here, the DECL_TI_TEMPLATE for the friend declaration
7851                will be an IDENTIFIER_NODE.  We are being called from
7852                tsubst_friend_function, and we want only to create a
7853                new decl (R) with appropriate types so that we can call
7854                determine_specialization.  */
7855             gen_tmpl = NULL_TREE;
7856           }
7857
7858         if (DECL_CLASS_SCOPE_P (t))
7859           {
7860             if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
7861               member = 2;
7862             else
7863               member = 1;
7864             ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
7865                                     complain, t, /*entering_scope=*/1);
7866           }
7867         else
7868           {
7869             member = 0;
7870             ctx = DECL_CONTEXT (t);
7871           }
7872         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7873         if (type == error_mark_node)
7874           return error_mark_node;
7875
7876         /* We do NOT check for matching decls pushed separately at this
7877            point, as they may not represent instantiations of this
7878            template, and in any case are considered separate under the
7879            discrete model.  */
7880         r = copy_decl (t);
7881         DECL_USE_TEMPLATE (r) = 0;
7882         TREE_TYPE (r) = type;
7883         /* Clear out the mangled name and RTL for the instantiation.  */
7884         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
7885         SET_DECL_RTL (r, NULL_RTX);
7886         DECL_INITIAL (r) = NULL_TREE;
7887         DECL_CONTEXT (r) = ctx;
7888
7889         if (member && DECL_CONV_FN_P (r))
7890           /* Type-conversion operator.  Reconstruct the name, in
7891              case it's the name of one of the template's parameters.  */
7892           DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
7893
7894         DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
7895                                      complain, t);
7896         DECL_RESULT (r) = NULL_TREE;
7897
7898         TREE_STATIC (r) = 0;
7899         TREE_PUBLIC (r) = TREE_PUBLIC (t);
7900         DECL_EXTERNAL (r) = 1;
7901         /* If this is an instantiation of a function with internal
7902            linkage, we already know what object file linkage will be
7903            assigned to the instantiation.  */
7904         DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
7905         DECL_DEFER_OUTPUT (r) = 0;
7906         TREE_CHAIN (r) = NULL_TREE;
7907         DECL_PENDING_INLINE_INFO (r) = 0;
7908         DECL_PENDING_INLINE_P (r) = 0;
7909         DECL_SAVED_TREE (r) = NULL_TREE;
7910         TREE_USED (r) = 0;
7911         if (DECL_CLONED_FUNCTION (r))
7912           {
7913             DECL_CLONED_FUNCTION (r) = tsubst (DECL_CLONED_FUNCTION (t),
7914                                                args, complain, t);
7915             TREE_CHAIN (r) = TREE_CHAIN (DECL_CLONED_FUNCTION (r));
7916             TREE_CHAIN (DECL_CLONED_FUNCTION (r)) = r;
7917           }
7918
7919         /* Set up the DECL_TEMPLATE_INFO for R.  There's no need to do
7920            this in the special friend case mentioned above where
7921            GEN_TMPL is NULL.  */
7922         if (gen_tmpl)
7923           {
7924             DECL_TEMPLATE_INFO (r)
7925               = tree_cons (gen_tmpl, argvec, NULL_TREE);
7926             SET_DECL_IMPLICIT_INSTANTIATION (r);
7927             register_specialization (r, gen_tmpl, argvec, false);
7928
7929             /* We're not supposed to instantiate default arguments
7930                until they are called, for a template.  But, for a
7931                declaration like:
7932
7933                  template <class T> void f ()
7934                  { extern void g(int i = T()); }
7935
7936                we should do the substitution when the template is
7937                instantiated.  We handle the member function case in
7938                instantiate_class_template since the default arguments
7939                might refer to other members of the class.  */
7940             if (!member
7941                 && !PRIMARY_TEMPLATE_P (gen_tmpl)
7942                 && !uses_template_parms (argvec))
7943               tsubst_default_arguments (r);
7944           }
7945         else
7946           DECL_TEMPLATE_INFO (r) = NULL_TREE;
7947
7948         /* Copy the list of befriending classes.  */
7949         for (friends = &DECL_BEFRIENDING_CLASSES (r);
7950              *friends;
7951              friends = &TREE_CHAIN (*friends))
7952           {
7953             *friends = copy_node (*friends);
7954             TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
7955                                             args, complain,
7956                                             in_decl);
7957           }
7958
7959         if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
7960           {
7961             maybe_retrofit_in_chrg (r);
7962             if (DECL_CONSTRUCTOR_P (r))
7963               grok_ctor_properties (ctx, r);
7964             /* If this is an instantiation of a member template, clone it.
7965                If it isn't, that'll be handled by
7966                clone_constructors_and_destructors.  */
7967             if (PRIMARY_TEMPLATE_P (gen_tmpl))
7968               clone_function_decl (r, /*update_method_vec_p=*/0);
7969           }
7970         else if (IDENTIFIER_OPNAME_P (DECL_NAME (r))
7971                  && !grok_op_properties (r, (complain & tf_error) != 0))
7972           return error_mark_node;
7973
7974         if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
7975           SET_DECL_FRIEND_CONTEXT (r,
7976                                    tsubst (DECL_FRIEND_CONTEXT (t),
7977                                             args, complain, in_decl));
7978
7979         /* Possibly limit visibility based on template args.  */
7980         DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
7981         if (DECL_VISIBILITY_SPECIFIED (t))
7982           {
7983             DECL_VISIBILITY_SPECIFIED (r) = 0;
7984             DECL_ATTRIBUTES (r)
7985               = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
7986           }
7987         determine_visibility (r);
7988
7989         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
7990                                         args, complain, in_decl);
7991       }
7992       break;
7993
7994     case PARM_DECL:
7995       {
7996         tree type = NULL_TREE;
7997         int i, len = 1;
7998         tree expanded_types = NULL_TREE;
7999         tree prev_r = NULL_TREE;
8000         tree first_r = NULL_TREE;
8001
8002         if (FUNCTION_PARAMETER_PACK_P (t))
8003           {
8004             /* If there is a local specialization that isn't a
8005                parameter pack, it means that we're doing a "simple"
8006                substitution from inside tsubst_pack_expansion. Just
8007                return the local specialization (which will be a single
8008                parm).  */
8009             tree spec = NULL_TREE;
8010             if (local_specializations)
8011               spec = retrieve_local_specialization (t);
8012             if (spec 
8013                 && TREE_CODE (spec) == PARM_DECL
8014                 && TREE_CODE (TREE_TYPE (spec)) != TYPE_PACK_EXPANSION)
8015               return spec;
8016
8017             /* Expand the TYPE_PACK_EXPANSION that provides the types for
8018                the parameters in this function parameter pack.  */
8019             expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
8020                                                     complain, in_decl);
8021             if (TREE_CODE (expanded_types) == TREE_VEC)
8022               {
8023                 len = TREE_VEC_LENGTH (expanded_types);
8024
8025                 /* Zero-length parameter packs are boring. Just substitute
8026                    into the chain.  */
8027                 if (len == 0)
8028                   return tsubst (TREE_CHAIN (t), args, complain, 
8029                                  TREE_CHAIN (t));
8030               }
8031             else
8032               {
8033                 /* All we did was update the type. Make a note of that.  */
8034                 type = expanded_types;
8035                 expanded_types = NULL_TREE;
8036               }
8037           }
8038
8039         /* Loop through all of the parameter's we'll build. When T is
8040            a function parameter pack, LEN is the number of expanded
8041            types in EXPANDED_TYPES; otherwise, LEN is 1.  */
8042         r = NULL_TREE;
8043         for (i = 0; i < len; ++i)
8044           {
8045             prev_r = r;
8046             r = copy_node (t);
8047             if (DECL_TEMPLATE_PARM_P (t))
8048               SET_DECL_TEMPLATE_PARM_P (r);
8049
8050             if (expanded_types)
8051               /* We're on the Ith parameter of the function parameter
8052                  pack.  */
8053               {
8054                 /* Get the Ith type.  */
8055                 type = TREE_VEC_ELT (expanded_types, i);
8056
8057                 if (DECL_NAME (r))
8058                   /* Rename the parameter to include the index.  */
8059                   DECL_NAME (r) =
8060                     make_ith_pack_parameter_name (DECL_NAME (r), i);
8061               }
8062             else if (!type)
8063               /* We're dealing with a normal parameter.  */
8064               type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8065
8066             type = type_decays_to (type);
8067             TREE_TYPE (r) = type;
8068             cp_apply_type_quals_to_decl (cp_type_quals (type), r);
8069
8070             if (DECL_INITIAL (r))
8071               {
8072                 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
8073                   DECL_INITIAL (r) = TREE_TYPE (r);
8074                 else
8075                   DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
8076                                              complain, in_decl);
8077               }
8078
8079             DECL_CONTEXT (r) = NULL_TREE;
8080
8081             if (!DECL_TEMPLATE_PARM_P (r))
8082               DECL_ARG_TYPE (r) = type_passed_as (type);
8083
8084             apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
8085                                             args, complain, in_decl);
8086
8087             /* Keep track of the first new parameter we
8088                generate. That's what will be returned to the
8089                caller.  */
8090             if (!first_r)
8091               first_r = r;
8092
8093             /* Build a proper chain of parameters when substituting
8094                into a function parameter pack.  */
8095             if (prev_r)
8096               TREE_CHAIN (prev_r) = r;
8097           }
8098
8099         if (TREE_CHAIN (t))
8100           TREE_CHAIN (r) = tsubst (TREE_CHAIN (t), args,
8101                                    complain, TREE_CHAIN (t));
8102
8103         /* FIRST_R contains the start of the chain we've built.  */
8104         r = first_r;
8105       }
8106       break;
8107
8108     case FIELD_DECL:
8109       {
8110         tree type;
8111
8112         r = copy_decl (t);
8113         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8114         if (type == error_mark_node)
8115           return error_mark_node;
8116         TREE_TYPE (r) = type;
8117         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
8118
8119         /* DECL_INITIAL gives the number of bits in a bit-field.  */
8120         DECL_INITIAL (r)
8121           = tsubst_expr (DECL_INITIAL (t), args,
8122                          complain, in_decl,
8123                          /*integral_constant_expression_p=*/true);
8124         /* We don't have to set DECL_CONTEXT here; it is set by
8125            finish_member_declaration.  */
8126         TREE_CHAIN (r) = NULL_TREE;
8127         if (VOID_TYPE_P (type))
8128           error ("instantiation of %q+D as type %qT", r, type);
8129
8130         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
8131                                         args, complain, in_decl);
8132       }
8133       break;
8134
8135     case USING_DECL:
8136       /* We reach here only for member using decls.  */
8137       if (DECL_DEPENDENT_P (t))
8138         {
8139           r = do_class_using_decl
8140             (tsubst_copy (USING_DECL_SCOPE (t), args, complain, in_decl),
8141              tsubst_copy (DECL_NAME (t), args, complain, in_decl));
8142           if (!r)
8143             r = error_mark_node;
8144         }
8145       else
8146         {
8147           r = copy_node (t);
8148           TREE_CHAIN (r) = NULL_TREE;
8149         }
8150       break;
8151
8152     case TYPE_DECL:
8153     case VAR_DECL:
8154       {
8155         tree argvec = NULL_TREE;
8156         tree gen_tmpl = NULL_TREE;
8157         tree spec;
8158         tree tmpl = NULL_TREE;
8159         tree ctx;
8160         tree type = NULL_TREE;
8161         bool local_p;
8162
8163         if (TREE_CODE (t) == TYPE_DECL
8164             && t == TYPE_MAIN_DECL (TREE_TYPE (t)))
8165           {
8166             /* If this is the canonical decl, we don't have to
8167                mess with instantiations, and often we can't (for
8168                typename, template type parms and such).  Note that
8169                TYPE_NAME is not correct for the above test if
8170                we've copied the type for a typedef.  */
8171             type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8172             if (type == error_mark_node)
8173               return error_mark_node;
8174             r = TYPE_NAME (type);
8175             break;
8176           }
8177
8178         /* Check to see if we already have the specialization we
8179            need.  */
8180         spec = NULL_TREE;
8181         if (DECL_CLASS_SCOPE_P (t) || DECL_NAMESPACE_SCOPE_P (t))
8182           {
8183             /* T is a static data member or namespace-scope entity.
8184                We have to substitute into namespace-scope variables
8185                (even though such entities are never templates) because
8186                of cases like:
8187                
8188                  template <class T> void f() { extern T t; }
8189
8190                where the entity referenced is not known until
8191                instantiation time.  */
8192             local_p = false;
8193             ctx = DECL_CONTEXT (t);
8194             if (DECL_CLASS_SCOPE_P (t))
8195               {
8196                 ctx = tsubst_aggr_type (ctx, args,
8197                                         complain,
8198                                         in_decl, /*entering_scope=*/1);
8199                 /* If CTX is unchanged, then T is in fact the
8200                    specialization we want.  That situation occurs when
8201                    referencing a static data member within in its own
8202                    class.  We can use pointer equality, rather than
8203                    same_type_p, because DECL_CONTEXT is always
8204                    canonical.  */
8205                 if (ctx == DECL_CONTEXT (t))
8206                   spec = t;
8207               }
8208
8209             if (!spec)
8210               {
8211                 tmpl = DECL_TI_TEMPLATE (t);
8212                 gen_tmpl = most_general_template (tmpl);
8213                 argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
8214                 spec = (retrieve_specialization 
8215                         (gen_tmpl, argvec,
8216                          /*class_specializations_p=*/false));
8217               }
8218           }
8219         else
8220           {
8221             /* A local variable.  */
8222             local_p = true;
8223             /* Subsequent calls to pushdecl will fill this in.  */
8224             ctx = NULL_TREE;
8225             spec = retrieve_local_specialization (t);
8226           }
8227         /* If we already have the specialization we need, there is
8228            nothing more to do.  */ 
8229         if (spec)
8230           {
8231             r = spec;
8232             break;
8233           }
8234
8235         /* Create a new node for the specialization we need.  */
8236         r = copy_decl (t);
8237         if (type == NULL_TREE)
8238           type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8239         if (TREE_CODE (r) == VAR_DECL)
8240           {
8241             /* Even if the original location is out of scope, the
8242                newly substituted one is not.  */
8243             DECL_DEAD_FOR_LOCAL (r) = 0;
8244             DECL_INITIALIZED_P (r) = 0;
8245             DECL_TEMPLATE_INSTANTIATED (r) = 0;
8246             if (type == error_mark_node)
8247               return error_mark_node;
8248             if (TREE_CODE (type) == FUNCTION_TYPE)
8249               {
8250                 /* It may seem that this case cannot occur, since:
8251
8252                      typedef void f();
8253                      void g() { f x; }
8254
8255                    declares a function, not a variable.  However:
8256       
8257                      typedef void f();
8258                      template <typename T> void g() { T t; }
8259                      template void g<f>();
8260
8261                    is an attempt to declare a variable with function
8262                    type.  */
8263                 error ("variable %qD has function type",
8264                        /* R is not yet sufficiently initialized, so we
8265                           just use its name.  */
8266                        DECL_NAME (r));
8267                 return error_mark_node;
8268               }
8269             type = complete_type (type);
8270             DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r)
8271               = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (t);
8272             type = check_var_type (DECL_NAME (r), type);
8273
8274             if (DECL_HAS_VALUE_EXPR_P (t))
8275               {
8276                 tree ve = DECL_VALUE_EXPR (t);
8277                 ve = tsubst_expr (ve, args, complain, in_decl,
8278                                   /*constant_expression_p=*/false);
8279                 SET_DECL_VALUE_EXPR (r, ve);
8280               }
8281           }
8282         else if (DECL_SELF_REFERENCE_P (t))
8283           SET_DECL_SELF_REFERENCE_P (r);
8284         TREE_TYPE (r) = type;
8285         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
8286         DECL_CONTEXT (r) = ctx;
8287         /* Clear out the mangled name and RTL for the instantiation.  */
8288         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
8289         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
8290           SET_DECL_RTL (r, NULL_RTX);
8291         /* The initializer must not be expanded until it is required;
8292            see [temp.inst].  */
8293         DECL_INITIAL (r) = NULL_TREE;
8294         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
8295           SET_DECL_RTL (r, NULL_RTX);
8296         DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
8297         if (TREE_CODE (r) == VAR_DECL)
8298           {
8299             /* Possibly limit visibility based on template args.  */
8300             DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
8301             if (DECL_VISIBILITY_SPECIFIED (t))
8302               {
8303                 DECL_VISIBILITY_SPECIFIED (r) = 0;
8304                 DECL_ATTRIBUTES (r)
8305                   = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
8306               }
8307             determine_visibility (r);
8308           }
8309         /* Preserve a typedef that names a type.  */
8310         else if (TREE_CODE (r) == TYPE_DECL
8311                  && DECL_ORIGINAL_TYPE (t)
8312                  && type != error_mark_node)
8313           {
8314             DECL_ORIGINAL_TYPE (r) = tsubst (DECL_ORIGINAL_TYPE (t),
8315                                              args, complain, in_decl);
8316             TREE_TYPE (r) = type = build_variant_type_copy (type);
8317             TYPE_NAME (type) = r;
8318           }
8319
8320         if (!local_p)
8321           {
8322             /* A static data member declaration is always marked
8323                external when it is declared in-class, even if an
8324                initializer is present.  We mimic the non-template
8325                processing here.  */
8326             DECL_EXTERNAL (r) = 1;
8327
8328             register_specialization (r, gen_tmpl, argvec, false);
8329             DECL_TEMPLATE_INFO (r) = tree_cons (tmpl, argvec, NULL_TREE);
8330             SET_DECL_IMPLICIT_INSTANTIATION (r);
8331           }
8332         else
8333           register_local_specialization (r, t);
8334
8335         TREE_CHAIN (r) = NULL_TREE;
8336
8337         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r),
8338                                         (int) ATTR_FLAG_TYPE_IN_PLACE,
8339                                         args, complain, in_decl);
8340         layout_decl (r, 0);
8341       }
8342       break;
8343
8344     default:
8345       gcc_unreachable ();
8346     }
8347
8348   /* Restore the file and line information.  */
8349   input_location = saved_loc;
8350
8351   return r;
8352 }
8353
8354 /* Substitute into the ARG_TYPES of a function type.  */
8355
8356 static tree
8357 tsubst_arg_types (tree arg_types,
8358                   tree args,
8359                   tsubst_flags_t complain,
8360                   tree in_decl)
8361 {
8362   tree remaining_arg_types;
8363   tree type = NULL_TREE;
8364   int i = 1;
8365   tree expanded_args = NULL_TREE;
8366   tree default_arg;
8367
8368   if (!arg_types || arg_types == void_list_node)
8369     return arg_types;
8370
8371   remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
8372                                           args, complain, in_decl);
8373   if (remaining_arg_types == error_mark_node)
8374     return error_mark_node;
8375
8376   if (PACK_EXPANSION_P (TREE_VALUE (arg_types)))
8377     {
8378       /* For a pack expansion, perform substitution on the
8379          entire expression. Later on, we'll handle the arguments
8380          one-by-one.  */
8381       expanded_args = tsubst_pack_expansion (TREE_VALUE (arg_types),
8382                                             args, complain, in_decl);
8383
8384       if (TREE_CODE (expanded_args) == TREE_VEC)
8385         /* So that we'll spin through the parameters, one by one.  */
8386         i = TREE_VEC_LENGTH (expanded_args);
8387       else
8388         {
8389           /* We only partially substituted into the parameter
8390              pack. Our type is TYPE_PACK_EXPANSION.  */
8391           type = expanded_args;
8392           expanded_args = NULL_TREE;
8393         }
8394     }
8395
8396   while (i > 0) {
8397     --i;
8398     
8399     if (expanded_args)
8400       type = TREE_VEC_ELT (expanded_args, i);
8401     else if (!type)
8402       type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
8403
8404     if (type == error_mark_node)
8405       return error_mark_node;
8406     if (VOID_TYPE_P (type))
8407       {
8408         if (complain & tf_error)
8409           {
8410             error ("invalid parameter type %qT", type);
8411             if (in_decl)
8412               error ("in declaration %q+D", in_decl);
8413           }
8414         return error_mark_node;
8415     }
8416     
8417     /* Do array-to-pointer, function-to-pointer conversion, and ignore
8418        top-level qualifiers as required.  */
8419     type = TYPE_MAIN_VARIANT (type_decays_to (type));
8420
8421     /* We do not substitute into default arguments here.  The standard
8422        mandates that they be instantiated only when needed, which is
8423        done in build_over_call.  */
8424     default_arg = TREE_PURPOSE (arg_types);
8425
8426     if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
8427       {
8428         /* We've instantiated a template before its default arguments
8429            have been parsed.  This can happen for a nested template
8430            class, and is not an error unless we require the default
8431            argument in a call of this function.  */
8432         remaining_arg_types = 
8433           tree_cons (default_arg, type, remaining_arg_types);
8434         VEC_safe_push (tree, gc, DEFARG_INSTANTIATIONS (default_arg), 
8435                        remaining_arg_types);
8436       }
8437     else
8438       remaining_arg_types = 
8439         hash_tree_cons (default_arg, type, remaining_arg_types);
8440   }
8441         
8442   return remaining_arg_types;
8443 }
8444
8445 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE.  This routine does
8446    *not* handle the exception-specification for FNTYPE, because the
8447    initial substitution of explicitly provided template parameters
8448    during argument deduction forbids substitution into the
8449    exception-specification:
8450
8451      [temp.deduct]
8452
8453      All references in the function type of the function template to  the
8454      corresponding template parameters are replaced by the specified tem-
8455      plate argument values.  If a substitution in a template parameter or
8456      in  the function type of the function template results in an invalid
8457      type, type deduction fails.  [Note: The equivalent  substitution  in
8458      exception specifications is done only when the function is instanti-
8459      ated, at which point a program is  ill-formed  if  the  substitution
8460      results in an invalid type.]  */
8461
8462 static tree
8463 tsubst_function_type (tree t,
8464                       tree args,
8465                       tsubst_flags_t complain,
8466                       tree in_decl)
8467 {
8468   tree return_type;
8469   tree arg_types;
8470   tree fntype;
8471
8472   /* The TYPE_CONTEXT is not used for function/method types.  */
8473   gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
8474
8475   /* Substitute the return type.  */
8476   return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8477   if (return_type == error_mark_node)
8478     return error_mark_node;
8479   /* The standard does not presently indicate that creation of a
8480      function type with an invalid return type is a deduction failure.
8481      However, that is clearly analogous to creating an array of "void"
8482      or a reference to a reference.  This is core issue #486.  */
8483   if (TREE_CODE (return_type) == ARRAY_TYPE
8484       || TREE_CODE (return_type) == FUNCTION_TYPE)
8485     {
8486       if (complain & tf_error)
8487         {
8488           if (TREE_CODE (return_type) == ARRAY_TYPE)
8489             error ("function returning an array");
8490           else
8491             error ("function returning a function");
8492         }
8493       return error_mark_node;
8494     }
8495
8496   /* Substitute the argument types.  */
8497   arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
8498                                 complain, in_decl);
8499   if (arg_types == error_mark_node)
8500     return error_mark_node;
8501
8502   if (TYPE_QUALS (return_type) != TYPE_UNQUALIFIED
8503       && in_decl != NULL_TREE
8504       && !TREE_NO_WARNING (in_decl)
8505       && (SCALAR_TYPE_P (return_type) || VOID_TYPE_P (return_type)))
8506     warning (OPT_Wreturn_type,
8507             "type qualifiers ignored on function return type");
8508
8509   /* Construct a new type node and return it.  */
8510   if (TREE_CODE (t) == FUNCTION_TYPE)
8511     fntype = build_function_type (return_type, arg_types);
8512   else
8513     {
8514       tree r = TREE_TYPE (TREE_VALUE (arg_types));
8515       if (! IS_AGGR_TYPE (r))
8516         {
8517           /* [temp.deduct]
8518
8519              Type deduction may fail for any of the following
8520              reasons:
8521
8522              -- Attempting to create "pointer to member of T" when T
8523              is not a class type.  */
8524           if (complain & tf_error)
8525             error ("creating pointer to member function of non-class type %qT",
8526                       r);
8527           return error_mark_node;
8528         }
8529
8530       fntype = build_method_type_directly (r, return_type,
8531                                            TREE_CHAIN (arg_types));
8532     }
8533   fntype = cp_build_qualified_type_real (fntype, TYPE_QUALS (t), complain);
8534   fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
8535
8536   return fntype;
8537 }
8538
8539 /* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE.  Substitute the template
8540    ARGS into that specification, and return the substituted
8541    specification.  If there is no specification, return NULL_TREE.  */
8542
8543 static tree
8544 tsubst_exception_specification (tree fntype,
8545                                 tree args,
8546                                 tsubst_flags_t complain,
8547                                 tree in_decl)
8548 {
8549   tree specs;
8550   tree new_specs;
8551
8552   specs = TYPE_RAISES_EXCEPTIONS (fntype);
8553   new_specs = NULL_TREE;
8554   if (specs)
8555     {
8556       if (! TREE_VALUE (specs))
8557         new_specs = specs;
8558       else
8559         while (specs)
8560           {
8561             tree spec;
8562             int i, len = 1;
8563             tree expanded_specs = NULL_TREE;
8564
8565             if (PACK_EXPANSION_P (TREE_VALUE (specs)))
8566               {
8567                 /* Expand the pack expansion type.  */
8568                 expanded_specs = tsubst_pack_expansion (TREE_VALUE (specs),
8569                                                        args, complain,
8570                                                        in_decl);
8571                 len = TREE_VEC_LENGTH (expanded_specs);
8572               }
8573
8574             for (i = 0; i < len; ++i)
8575               {
8576                 if (expanded_specs)
8577                   spec = TREE_VEC_ELT (expanded_specs, i);
8578                 else
8579                   spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
8580                 if (spec == error_mark_node)
8581                   return spec;
8582                 new_specs = add_exception_specifier (new_specs, spec, 
8583                                                      complain);
8584               }
8585
8586             specs = TREE_CHAIN (specs);
8587           }
8588     }
8589   return new_specs;
8590 }
8591
8592 /* Take the tree structure T and replace template parameters used
8593    therein with the argument vector ARGS.  IN_DECL is an associated
8594    decl for diagnostics.  If an error occurs, returns ERROR_MARK_NODE.
8595    Issue error and warning messages under control of COMPLAIN.  Note
8596    that we must be relatively non-tolerant of extensions here, in
8597    order to preserve conformance; if we allow substitutions that
8598    should not be allowed, we may allow argument deductions that should
8599    not succeed, and therefore report ambiguous overload situations
8600    where there are none.  In theory, we could allow the substitution,
8601    but indicate that it should have failed, and allow our caller to
8602    make sure that the right thing happens, but we don't try to do this
8603    yet.
8604
8605    This function is used for dealing with types, decls and the like;
8606    for expressions, use tsubst_expr or tsubst_copy.  */
8607
8608 static tree
8609 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
8610 {
8611   tree type, r;
8612
8613   if (t == NULL_TREE || t == error_mark_node
8614       || t == integer_type_node
8615       || t == void_type_node
8616       || t == char_type_node
8617       || t == unknown_type_node
8618       || TREE_CODE (t) == NAMESPACE_DECL)
8619     return t;
8620
8621   if (DECL_P (t))
8622     return tsubst_decl (t, args, complain);
8623
8624   if (TREE_CODE (t) == IDENTIFIER_NODE)
8625     type = IDENTIFIER_TYPE_VALUE (t);
8626   else
8627     type = TREE_TYPE (t);
8628
8629   gcc_assert (type != unknown_type_node);
8630
8631   /* Reuse typedefs.  We need to do this to handle dependent attributes,
8632      such as attribute aligned.  */
8633   if (TYPE_P (t)
8634       && TYPE_NAME (t)
8635       && TYPE_NAME (t) != TYPE_MAIN_DECL (t))
8636     {
8637       tree decl = TYPE_NAME (t);
8638       
8639       if (DECL_CLASS_SCOPE_P (decl)
8640           && CLASSTYPE_TEMPLATE_INFO (DECL_CONTEXT (decl)))
8641         {
8642           tree tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
8643           tree gen_args = tsubst (DECL_TI_ARGS (decl), args, complain, in_decl);
8644           r = retrieve_specialization (tmpl, gen_args, false);
8645         }
8646       else if (DECL_FUNCTION_SCOPE_P (decl))
8647         r = retrieve_local_specialization (decl);
8648       else
8649         r = NULL_TREE;
8650         
8651       if (r)
8652         {
8653           r = TREE_TYPE (r);
8654           r = cp_build_qualified_type_real
8655             (r, cp_type_quals (t) | cp_type_quals (r),
8656              complain | tf_ignore_bad_quals);
8657           return r;
8658         }
8659       /* Else we must be instantiating the typedef, so fall through.  */
8660     }
8661
8662   if (type
8663       && TREE_CODE (t) != TYPENAME_TYPE
8664       && TREE_CODE (t) != IDENTIFIER_NODE
8665       && TREE_CODE (t) != FUNCTION_TYPE
8666       && TREE_CODE (t) != METHOD_TYPE)
8667     type = tsubst (type, args, complain, in_decl);
8668   if (type == error_mark_node)
8669     return error_mark_node;
8670
8671   switch (TREE_CODE (t))
8672     {
8673     case RECORD_TYPE:
8674     case UNION_TYPE:
8675     case ENUMERAL_TYPE:
8676       return tsubst_aggr_type (t, args, complain, in_decl,
8677                                /*entering_scope=*/0);
8678
8679     case ERROR_MARK:
8680     case IDENTIFIER_NODE:
8681     case VOID_TYPE:
8682     case REAL_TYPE:
8683     case COMPLEX_TYPE:
8684     case VECTOR_TYPE:
8685     case BOOLEAN_TYPE:
8686     case INTEGER_CST:
8687     case REAL_CST:
8688     case STRING_CST:
8689       return t;
8690
8691     case INTEGER_TYPE:
8692       if (t == integer_type_node)
8693         return t;
8694
8695       if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
8696           && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
8697         return t;
8698
8699       {
8700         tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
8701
8702         max = tsubst_expr (omax, args, complain, in_decl,
8703                            /*integral_constant_expression_p=*/false);
8704         max = fold_decl_constant_value (max);
8705
8706         if (TREE_CODE (max) != INTEGER_CST 
8707             && TREE_CODE (max) != TEMPLATE_PARM_INDEX
8708             && !at_function_scope_p ())
8709           {
8710             if (complain & tf_error)
8711               error ("array bound is not an integer constant");
8712             return error_mark_node;
8713           }
8714
8715         /* [temp.deduct]
8716
8717            Type deduction may fail for any of the following
8718            reasons:
8719
8720              Attempting to create an array with a size that is
8721              zero or negative.  */
8722         if (integer_zerop (max) && !(complain & tf_error))
8723           /* We must fail if performing argument deduction (as
8724              indicated by the state of complain), so that
8725              another substitution can be found.  */
8726           return error_mark_node;
8727         else if (TREE_CODE (max) == INTEGER_CST
8728                  && INT_CST_LT (max, integer_zero_node))
8729           {
8730             if (complain & tf_error)
8731               error ("creating array with negative size (%qE)", max);
8732
8733             return error_mark_node;
8734           }
8735
8736         return compute_array_index_type (NULL_TREE, max);
8737       }
8738
8739     case TEMPLATE_TYPE_PARM:
8740     case TEMPLATE_TEMPLATE_PARM:
8741     case BOUND_TEMPLATE_TEMPLATE_PARM:
8742     case TEMPLATE_PARM_INDEX:
8743       {
8744         int idx;
8745         int level;
8746         int levels;
8747         tree arg = NULL_TREE;
8748
8749         r = NULL_TREE;
8750
8751         gcc_assert (TREE_VEC_LENGTH (args) > 0);
8752         template_parm_level_and_index (t, &level, &idx); 
8753
8754         levels = TMPL_ARGS_DEPTH (args);
8755         if (level <= levels)
8756           {
8757             arg = TMPL_ARG (args, level, idx);
8758
8759             if (arg && TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
8760               /* See through ARGUMENT_PACK_SELECT arguments. */
8761               arg = ARGUMENT_PACK_SELECT_ARG (arg);
8762           }
8763
8764         if (arg == error_mark_node)
8765           return error_mark_node;
8766         else if (arg != NULL_TREE)
8767           {
8768             if (ARGUMENT_PACK_P (arg))
8769               /* If ARG is an argument pack, we don't actually want to
8770                  perform a substitution here, because substitutions
8771                  for argument packs are only done
8772                  element-by-element. We can get to this point when
8773                  substituting the type of a non-type template
8774                  parameter pack, when that type actually contains
8775                  template parameter packs from an outer template, e.g.,
8776
8777                  template<typename... Types> struct A {
8778                    template<Types... Values> struct B { };
8779                  };  */
8780               return t;
8781
8782             if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
8783               {
8784                 int quals;
8785                 gcc_assert (TYPE_P (arg));
8786
8787                 /* cv-quals from the template are discarded when
8788                    substituting in a function or reference type.  */
8789                 if (TREE_CODE (arg) == FUNCTION_TYPE
8790                     || TREE_CODE (arg) == METHOD_TYPE
8791                     || TREE_CODE (arg) == REFERENCE_TYPE)
8792                   quals = cp_type_quals (arg);
8793                 else
8794                   quals = cp_type_quals (arg) | cp_type_quals (t);
8795                   
8796                 return cp_build_qualified_type_real
8797                   (arg, quals, complain | tf_ignore_bad_quals);
8798               }
8799             else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
8800               {
8801                 /* We are processing a type constructed from a
8802                    template template parameter.  */
8803                 tree argvec = tsubst (TYPE_TI_ARGS (t),
8804                                       args, complain, in_decl);
8805                 if (argvec == error_mark_node)
8806                   return error_mark_node;
8807
8808                 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
8809                    are resolving nested-types in the signature of a
8810                    member function templates.  Otherwise ARG is a
8811                    TEMPLATE_DECL and is the real template to be
8812                    instantiated.  */
8813                 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
8814                   arg = TYPE_NAME (arg);
8815
8816                 r = lookup_template_class (arg,
8817                                            argvec, in_decl,
8818                                            DECL_CONTEXT (arg),
8819                                             /*entering_scope=*/0,
8820                                            complain);
8821                 return cp_build_qualified_type_real
8822                   (r, TYPE_QUALS (t), complain);
8823               }
8824             else
8825               /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX.  */
8826               return arg;
8827           }
8828
8829         if (level == 1)
8830           /* This can happen during the attempted tsubst'ing in
8831              unify.  This means that we don't yet have any information
8832              about the template parameter in question.  */
8833           return t;
8834
8835         /* If we get here, we must have been looking at a parm for a
8836            more deeply nested template.  Make a new version of this
8837            template parameter, but with a lower level.  */
8838         switch (TREE_CODE (t))
8839           {
8840           case TEMPLATE_TYPE_PARM:
8841           case TEMPLATE_TEMPLATE_PARM:
8842           case BOUND_TEMPLATE_TEMPLATE_PARM:
8843             if (cp_type_quals (t))
8844               {
8845                 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
8846                 r = cp_build_qualified_type_real
8847                   (r, cp_type_quals (t),
8848                    complain | (TREE_CODE (t) == TEMPLATE_TYPE_PARM
8849                                ? tf_ignore_bad_quals : 0));
8850               }
8851             else
8852               {
8853                 r = copy_type (t);
8854                 TEMPLATE_TYPE_PARM_INDEX (r)
8855                   = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
8856                                                 r, levels, args, complain);
8857                 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
8858                 TYPE_MAIN_VARIANT (r) = r;
8859                 TYPE_POINTER_TO (r) = NULL_TREE;
8860                 TYPE_REFERENCE_TO (r) = NULL_TREE;
8861
8862                 if (TREE_CODE (r) == TEMPLATE_TEMPLATE_PARM)
8863                   /* We have reduced the level of the template
8864                      template parameter, but not the levels of its
8865                      template parameters, so canonical_type_parameter
8866                      will not be able to find the canonical template
8867                      template parameter for this level. Thus, we
8868                      require structural equality checking to compare
8869                      TEMPLATE_TEMPLATE_PARMs. */
8870                   SET_TYPE_STRUCTURAL_EQUALITY (r);
8871                 else if (TYPE_STRUCTURAL_EQUALITY_P (t))
8872                   SET_TYPE_STRUCTURAL_EQUALITY (r);
8873                 else
8874                   TYPE_CANONICAL (r) = canonical_type_parameter (r);
8875
8876                 if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
8877                   {
8878                     tree argvec = tsubst (TYPE_TI_ARGS (t), args,
8879                                           complain, in_decl);
8880                     if (argvec == error_mark_node)
8881                       return error_mark_node;
8882
8883                     TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
8884                       = tree_cons (TYPE_TI_TEMPLATE (t), argvec, NULL_TREE);
8885                   }
8886               }
8887             break;
8888
8889           case TEMPLATE_PARM_INDEX:
8890             r = reduce_template_parm_level (t, type, levels, args, complain);
8891             break;
8892
8893           default:
8894             gcc_unreachable ();
8895           }
8896
8897         return r;
8898       }
8899
8900     case TREE_LIST:
8901       {
8902         tree purpose, value, chain;
8903
8904         if (t == void_list_node)
8905           return t;
8906
8907         purpose = TREE_PURPOSE (t);
8908         if (purpose)
8909           {
8910             purpose = tsubst (purpose, args, complain, in_decl);
8911             if (purpose == error_mark_node)
8912               return error_mark_node;
8913           }
8914         value = TREE_VALUE (t);
8915         if (value)
8916           {
8917             value = tsubst (value, args, complain, in_decl);
8918             if (value == error_mark_node)
8919               return error_mark_node;
8920           }
8921         chain = TREE_CHAIN (t);
8922         if (chain && chain != void_type_node)
8923           {
8924             chain = tsubst (chain, args, complain, in_decl);
8925             if (chain == error_mark_node)
8926               return error_mark_node;
8927           }
8928         if (purpose == TREE_PURPOSE (t)
8929             && value == TREE_VALUE (t)
8930             && chain == TREE_CHAIN (t))
8931           return t;
8932         return hash_tree_cons (purpose, value, chain);
8933       }
8934
8935     case TREE_BINFO:
8936       /* We should never be tsubsting a binfo.  */
8937       gcc_unreachable ();
8938
8939     case TREE_VEC:
8940       /* A vector of template arguments.  */
8941       gcc_assert (!type);
8942       return tsubst_template_args (t, args, complain, in_decl);
8943
8944     case POINTER_TYPE:
8945     case REFERENCE_TYPE:
8946       {
8947         enum tree_code code;
8948
8949         if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
8950           return t;
8951
8952         code = TREE_CODE (t);
8953
8954
8955         /* [temp.deduct]
8956
8957            Type deduction may fail for any of the following
8958            reasons:
8959
8960            -- Attempting to create a pointer to reference type.
8961            -- Attempting to create a reference to a reference type or
8962               a reference to void.
8963
8964           Core issue 106 says that creating a reference to a reference
8965           during instantiation is no longer a cause for failure. We
8966           only enforce this check in strict C++98 mode.  */
8967         if ((TREE_CODE (type) == REFERENCE_TYPE
8968              && (((cxx_dialect == cxx98) && flag_iso) || code != REFERENCE_TYPE))
8969             || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
8970           {
8971             static location_t last_loc;
8972
8973             /* We keep track of the last time we issued this error
8974                message to avoid spewing a ton of messages during a
8975                single bad template instantiation.  */
8976             if (complain & tf_error
8977 #ifdef USE_MAPPED_LOCATION
8978                 && last_loc != input_location
8979 #else
8980                 && (last_loc.line != input_line
8981                     || last_loc.file != input_filename)
8982 #endif
8983                   )
8984               {
8985                 if (TREE_CODE (type) == VOID_TYPE)
8986                   error ("forming reference to void");
8987                 else
8988                   error ("forming %s to reference type %qT",
8989                          (code == POINTER_TYPE) ? "pointer" : "reference",
8990                          type);
8991                 last_loc = input_location;
8992               }
8993
8994             return error_mark_node;
8995           }
8996         else if (code == POINTER_TYPE)
8997           {
8998             r = build_pointer_type (type);
8999             if (TREE_CODE (type) == METHOD_TYPE)
9000               r = build_ptrmemfunc_type (r);
9001           }
9002         else if (TREE_CODE (type) == REFERENCE_TYPE)
9003           /* In C++0x, during template argument substitution, when there is an
9004              attempt to create a reference to a reference type, reference
9005              collapsing is applied as described in [14.3.1/4 temp.arg.type]:
9006
9007              "If a template-argument for a template-parameter T names a type
9008              that is a reference to a type A, an attempt to create the type
9009              'lvalue reference to cv T' creates the type 'lvalue reference to
9010              A,' while an attempt to create the type type rvalue reference to
9011              cv T' creates the type T"
9012           */
9013           r = cp_build_reference_type
9014               (TREE_TYPE (type),
9015                TYPE_REF_IS_RVALUE (t) && TYPE_REF_IS_RVALUE (type));
9016         else
9017           r = cp_build_reference_type (type, TYPE_REF_IS_RVALUE (t));
9018         r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
9019
9020         if (r != error_mark_node)
9021           /* Will this ever be needed for TYPE_..._TO values?  */
9022           layout_type (r);
9023
9024         return r;
9025       }
9026     case OFFSET_TYPE:
9027       {
9028         r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
9029         if (r == error_mark_node || !IS_AGGR_TYPE (r))
9030           {
9031             /* [temp.deduct]
9032
9033                Type deduction may fail for any of the following
9034                reasons:
9035
9036                -- Attempting to create "pointer to member of T" when T
9037                   is not a class type.  */
9038             if (complain & tf_error)
9039               error ("creating pointer to member of non-class type %qT", r);
9040             return error_mark_node;
9041           }
9042         if (TREE_CODE (type) == REFERENCE_TYPE)
9043           {
9044             if (complain & tf_error)
9045               error ("creating pointer to member reference type %qT", type);
9046             return error_mark_node;
9047           }
9048         if (TREE_CODE (type) == VOID_TYPE)
9049           {
9050             if (complain & tf_error)
9051               error ("creating pointer to member of type void");
9052             return error_mark_node;
9053           }
9054         gcc_assert (TREE_CODE (type) != METHOD_TYPE);
9055         if (TREE_CODE (type) == FUNCTION_TYPE)
9056           {
9057             /* The type of the implicit object parameter gets its
9058                cv-qualifiers from the FUNCTION_TYPE. */
9059             tree method_type;
9060             tree this_type = cp_build_qualified_type (TYPE_MAIN_VARIANT (r),
9061                                                       cp_type_quals (type));
9062             tree memptr;
9063             method_type = build_method_type_directly (this_type,
9064                                                       TREE_TYPE (type),
9065                                                       TYPE_ARG_TYPES (type));
9066             memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
9067             return cp_build_qualified_type_real (memptr, cp_type_quals (t),
9068                                                  complain);
9069           }
9070         else
9071           return cp_build_qualified_type_real (build_ptrmem_type (r, type),
9072                                                TYPE_QUALS (t),
9073                                                complain);
9074       }
9075     case FUNCTION_TYPE:
9076     case METHOD_TYPE:
9077       {
9078         tree fntype;
9079         tree specs;
9080         fntype = tsubst_function_type (t, args, complain, in_decl);
9081         if (fntype == error_mark_node)
9082           return error_mark_node;
9083
9084         /* Substitute the exception specification.  */
9085         specs = tsubst_exception_specification (t, args, complain,
9086                                                 in_decl);
9087         if (specs == error_mark_node)
9088           return error_mark_node;
9089         if (specs)
9090           fntype = build_exception_variant (fntype, specs);
9091         return fntype;
9092       }
9093     case ARRAY_TYPE:
9094       {
9095         tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
9096         if (domain == error_mark_node)
9097           return error_mark_node;
9098
9099         /* As an optimization, we avoid regenerating the array type if
9100            it will obviously be the same as T.  */
9101         if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
9102           return t;
9103
9104         /* These checks should match the ones in grokdeclarator.
9105
9106            [temp.deduct]
9107
9108            The deduction may fail for any of the following reasons:
9109
9110            -- Attempting to create an array with an element type that
9111               is void, a function type, or a reference type, or [DR337]
9112               an abstract class type.  */
9113         if (TREE_CODE (type) == VOID_TYPE
9114             || TREE_CODE (type) == FUNCTION_TYPE
9115             || TREE_CODE (type) == REFERENCE_TYPE)
9116           {
9117             if (complain & tf_error)
9118               error ("creating array of %qT", type);
9119             return error_mark_node;
9120           }
9121         if (CLASS_TYPE_P (type) && CLASSTYPE_PURE_VIRTUALS (type))
9122           {
9123             if (complain & tf_error)
9124               error ("creating array of %qT, which is an abstract class type",
9125                      type);
9126             return error_mark_node;
9127           }
9128
9129         r = build_cplus_array_type (type, domain);
9130
9131         if (TYPE_USER_ALIGN (t))
9132           {
9133             TYPE_ALIGN (r) = TYPE_ALIGN (t);
9134             TYPE_USER_ALIGN (r) = 1;
9135           }
9136
9137         return r;
9138       }
9139
9140     case PLUS_EXPR:
9141     case MINUS_EXPR:
9142       {
9143         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9144         tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
9145
9146         if (e1 == error_mark_node || e2 == error_mark_node)
9147           return error_mark_node;
9148
9149         return fold_build2 (TREE_CODE (t), TREE_TYPE (t), e1, e2);
9150       }
9151
9152     case NEGATE_EXPR:
9153     case NOP_EXPR:
9154       {
9155         tree e = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9156         if (e == error_mark_node)
9157           return error_mark_node;
9158
9159         return fold_build1 (TREE_CODE (t), TREE_TYPE (t), e);
9160       }
9161
9162     case TYPENAME_TYPE:
9163       {
9164         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
9165                                      in_decl, /*entering_scope=*/1);
9166         tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
9167                               complain, in_decl);
9168
9169         if (ctx == error_mark_node || f == error_mark_node)
9170           return error_mark_node;
9171
9172         if (!IS_AGGR_TYPE (ctx))
9173           {
9174             if (complain & tf_error)
9175               error ("%qT is not a class, struct, or union type", ctx);
9176             return error_mark_node;
9177           }
9178         else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
9179           {
9180             /* Normally, make_typename_type does not require that the CTX
9181                have complete type in order to allow things like:
9182
9183                  template <class T> struct S { typename S<T>::X Y; };
9184
9185                But, such constructs have already been resolved by this
9186                point, so here CTX really should have complete type, unless
9187                it's a partial instantiation.  */
9188             ctx = complete_type (ctx);
9189             if (!COMPLETE_TYPE_P (ctx))
9190               {
9191                 if (complain & tf_error)
9192                   cxx_incomplete_type_error (NULL_TREE, ctx);
9193                 return error_mark_node;
9194               }
9195           }
9196
9197         f = make_typename_type (ctx, f, typename_type,
9198                                 (complain & tf_error) | tf_keep_type_decl);
9199         if (f == error_mark_node)
9200           return f;
9201         if (TREE_CODE (f) == TYPE_DECL)
9202           {
9203             complain |= tf_ignore_bad_quals;
9204             f = TREE_TYPE (f);
9205           }
9206
9207         if (TREE_CODE (f) != TYPENAME_TYPE)
9208           {
9209             if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
9210               error ("%qT resolves to %qT, which is not an enumeration type",
9211                      t, f);
9212             else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
9213               error ("%qT resolves to %qT, which is is not a class type",
9214                      t, f);
9215           }
9216
9217         return cp_build_qualified_type_real
9218           (f, cp_type_quals (f) | cp_type_quals (t), complain);
9219       }
9220
9221     case UNBOUND_CLASS_TEMPLATE:
9222       {
9223         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
9224                                      in_decl, /*entering_scope=*/1);
9225         tree name = TYPE_IDENTIFIER (t);
9226         tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
9227
9228         if (ctx == error_mark_node || name == error_mark_node)
9229           return error_mark_node;
9230
9231         if (parm_list)
9232           parm_list = tsubst_template_parms (parm_list, args, complain);
9233         return make_unbound_class_template (ctx, name, parm_list, complain);
9234       }
9235
9236     case INDIRECT_REF:
9237     case ADDR_EXPR:
9238     case CALL_EXPR:
9239       gcc_unreachable ();
9240
9241     case ARRAY_REF:
9242       {
9243         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9244         tree e2 = tsubst_expr (TREE_OPERAND (t, 1), args, complain, in_decl,
9245                                /*integral_constant_expression_p=*/false);
9246         if (e1 == error_mark_node || e2 == error_mark_node)
9247           return error_mark_node;
9248
9249         return build_nt (ARRAY_REF, e1, e2, NULL_TREE, NULL_TREE);
9250       }
9251
9252     case SCOPE_REF:
9253       {
9254         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9255         tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
9256         if (e1 == error_mark_node || e2 == error_mark_node)
9257           return error_mark_node;
9258
9259         return build_qualified_name (/*type=*/NULL_TREE,
9260                                      e1, e2, QUALIFIED_NAME_IS_TEMPLATE (t));
9261       }
9262
9263     case TYPEOF_TYPE:
9264       {
9265         tree type;
9266
9267         type = finish_typeof (tsubst_expr 
9268                               (TYPEOF_TYPE_EXPR (t), args,
9269                                complain, in_decl,
9270                                /*integral_constant_expression_p=*/false));
9271         return cp_build_qualified_type_real (type,
9272                                              cp_type_quals (t)
9273                                              | cp_type_quals (type),
9274                                              complain);
9275       }
9276
9277     case DECLTYPE_TYPE:
9278       {
9279         tree type;
9280
9281         type = 
9282           finish_decltype_type (tsubst_expr 
9283                                 (DECLTYPE_TYPE_EXPR (t), args,
9284                                  complain, in_decl,
9285                                  /*integral_constant_expression_p=*/false),
9286                                 DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t));
9287         return cp_build_qualified_type_real (type,
9288                                              cp_type_quals (t)
9289                                              | cp_type_quals (type),
9290                                              complain);
9291       }
9292
9293     case TYPE_ARGUMENT_PACK:
9294     case NONTYPE_ARGUMENT_PACK:
9295       {
9296         tree r = make_node (TREE_CODE (t));
9297         tree packed_out = 
9298           tsubst_template_args (ARGUMENT_PACK_ARGS (t), 
9299                                 args,
9300                                 complain,
9301                                 in_decl);
9302         SET_ARGUMENT_PACK_ARGS (r, packed_out);
9303
9304         /* For template nontype argument packs, also substitute into
9305            the type.  */
9306         if (TREE_CODE (t) == NONTYPE_ARGUMENT_PACK)
9307           TREE_TYPE (r) = tsubst (TREE_TYPE (t), args, complain, in_decl);
9308
9309         return r;
9310       }
9311       break;
9312
9313     default:
9314       sorry ("use of %qs in template",
9315              tree_code_name [(int) TREE_CODE (t)]);
9316       return error_mark_node;
9317     }
9318 }
9319
9320 /* Like tsubst_expr for a BASELINK.  OBJECT_TYPE, if non-NULL, is the
9321    type of the expression on the left-hand side of the "." or "->"
9322    operator.  */
9323
9324 static tree
9325 tsubst_baselink (tree baselink, tree object_type,
9326                  tree args, tsubst_flags_t complain, tree in_decl)
9327 {
9328     tree name;
9329     tree qualifying_scope;
9330     tree fns;
9331     tree optype;
9332     tree template_args = 0;
9333     bool template_id_p = false;
9334
9335     /* A baselink indicates a function from a base class.  Both the
9336        BASELINK_ACCESS_BINFO and the base class referenced may
9337        indicate bases of the template class, rather than the
9338        instantiated class.  In addition, lookups that were not
9339        ambiguous before may be ambiguous now.  Therefore, we perform
9340        the lookup again.  */
9341     qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
9342     qualifying_scope = tsubst (qualifying_scope, args,
9343                                complain, in_decl);
9344     fns = BASELINK_FUNCTIONS (baselink);
9345     optype = BASELINK_OPTYPE (baselink);
9346     if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
9347       {
9348         template_id_p = true;
9349         template_args = TREE_OPERAND (fns, 1);
9350         fns = TREE_OPERAND (fns, 0);
9351         if (template_args)
9352           template_args = tsubst_template_args (template_args, args,
9353                                                 complain, in_decl);
9354       }
9355     name = DECL_NAME (get_first_fn (fns));
9356     baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
9357
9358     /* If lookup found a single function, mark it as used at this
9359        point.  (If it lookup found multiple functions the one selected
9360        later by overload resolution will be marked as used at that
9361        point.)  */
9362     if (BASELINK_P (baselink))
9363       fns = BASELINK_FUNCTIONS (baselink);
9364     if (!template_id_p && !really_overloaded_fn (fns))
9365       mark_used (OVL_CURRENT (fns));
9366
9367     /* Add back the template arguments, if present.  */
9368     if (BASELINK_P (baselink) && template_id_p)
9369       BASELINK_FUNCTIONS (baselink)
9370         = build_nt (TEMPLATE_ID_EXPR,
9371                     BASELINK_FUNCTIONS (baselink),
9372                     template_args);
9373     /* Update the conversion operator type.  */
9374     BASELINK_OPTYPE (baselink) 
9375       = tsubst (optype, args, complain, in_decl);
9376
9377     if (!object_type)
9378       object_type = current_class_type;
9379     return adjust_result_of_qualified_name_lookup (baselink,
9380                                                    qualifying_scope,
9381                                                    object_type);
9382 }
9383
9384 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID.  DONE is
9385    true if the qualified-id will be a postfix-expression in-and-of
9386    itself; false if more of the postfix-expression follows the
9387    QUALIFIED_ID.  ADDRESS_P is true if the qualified-id is the operand
9388    of "&".  */
9389
9390 static tree
9391 tsubst_qualified_id (tree qualified_id, tree args,
9392                      tsubst_flags_t complain, tree in_decl,
9393                      bool done, bool address_p)
9394 {
9395   tree expr;
9396   tree scope;
9397   tree name;
9398   bool is_template;
9399   tree template_args;
9400
9401   gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
9402
9403   /* Figure out what name to look up.  */
9404   name = TREE_OPERAND (qualified_id, 1);
9405   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
9406     {
9407       is_template = true;
9408       template_args = TREE_OPERAND (name, 1);
9409       if (template_args)
9410         template_args = tsubst_template_args (template_args, args,
9411                                               complain, in_decl);
9412       name = TREE_OPERAND (name, 0);
9413     }
9414   else
9415     {
9416       is_template = false;
9417       template_args = NULL_TREE;
9418     }
9419
9420   /* Substitute into the qualifying scope.  When there are no ARGS, we
9421      are just trying to simplify a non-dependent expression.  In that
9422      case the qualifying scope may be dependent, and, in any case,
9423      substituting will not help.  */
9424   scope = TREE_OPERAND (qualified_id, 0);
9425   if (args)
9426     {
9427       scope = tsubst (scope, args, complain, in_decl);
9428       expr = tsubst_copy (name, args, complain, in_decl);
9429     }
9430   else
9431     expr = name;
9432
9433   if (dependent_type_p (scope))
9434     return build_qualified_name (/*type=*/NULL_TREE,
9435                                  scope, expr,
9436                                  QUALIFIED_NAME_IS_TEMPLATE (qualified_id));
9437
9438   if (!BASELINK_P (name) && !DECL_P (expr))
9439     {
9440       if (TREE_CODE (expr) == BIT_NOT_EXPR)
9441         /* If this were actually a destructor call, it would have been
9442            parsed as such by the parser.  */
9443         expr = error_mark_node;
9444       else
9445         expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
9446       if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
9447                      ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
9448         {
9449           if (complain & tf_error)
9450             {
9451               error ("dependent-name %qE is parsed as a non-type, but "
9452                      "instantiation yields a type", qualified_id);
9453               inform ("say %<typename %E%> if a type is meant", qualified_id);
9454             }
9455           return error_mark_node;
9456         }
9457     }
9458
9459   if (DECL_P (expr))
9460     {
9461       check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
9462                                            scope);
9463       /* Remember that there was a reference to this entity.  */
9464       mark_used (expr);
9465     }
9466
9467   if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
9468     {
9469       if (complain & tf_error)
9470         qualified_name_lookup_error (scope,
9471                                      TREE_OPERAND (qualified_id, 1),
9472                                      expr);
9473       return error_mark_node;
9474     }
9475
9476   if (is_template)
9477     expr = lookup_template_function (expr, template_args);
9478
9479   if (expr == error_mark_node && complain & tf_error)
9480     qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
9481                                  expr);
9482   else if (TYPE_P (scope))
9483     {
9484       expr = (adjust_result_of_qualified_name_lookup
9485               (expr, scope, current_class_type));
9486       expr = (finish_qualified_id_expr
9487               (scope, expr, done, address_p,
9488                QUALIFIED_NAME_IS_TEMPLATE (qualified_id),
9489                /*template_arg_p=*/false));
9490     }
9491
9492   /* Expressions do not generally have reference type.  */
9493   if (TREE_CODE (expr) != SCOPE_REF
9494       /* However, if we're about to form a pointer-to-member, we just
9495          want the referenced member referenced.  */
9496       && TREE_CODE (expr) != OFFSET_REF)
9497     expr = convert_from_reference (expr);
9498
9499   return expr;
9500 }
9501
9502 /* Like tsubst, but deals with expressions.  This function just replaces
9503    template parms; to finish processing the resultant expression, use
9504    tsubst_expr.  */
9505
9506 static tree
9507 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
9508 {
9509   enum tree_code code;
9510   tree r;
9511
9512   if (t == NULL_TREE || t == error_mark_node)
9513     return t;
9514
9515   code = TREE_CODE (t);
9516
9517   switch (code)
9518     {
9519     case PARM_DECL:
9520       r = retrieve_local_specialization (t);
9521       gcc_assert (r != NULL);
9522       if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
9523         r = ARGUMENT_PACK_SELECT_ARG (r);
9524       mark_used (r);
9525       return r;
9526
9527     case CONST_DECL:
9528       {
9529         tree enum_type;
9530         tree v;
9531
9532         if (DECL_TEMPLATE_PARM_P (t))
9533           return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
9534         /* There is no need to substitute into namespace-scope
9535            enumerators.  */
9536         if (DECL_NAMESPACE_SCOPE_P (t))
9537           return t;
9538         /* If ARGS is NULL, then T is known to be non-dependent.  */
9539         if (args == NULL_TREE)
9540           return integral_constant_value (t);
9541
9542         /* Unfortunately, we cannot just call lookup_name here.
9543            Consider:
9544
9545              template <int I> int f() {
9546              enum E { a = I };
9547              struct S { void g() { E e = a; } };
9548              };
9549
9550            When we instantiate f<7>::S::g(), say, lookup_name is not
9551            clever enough to find f<7>::a.  */
9552         enum_type
9553           = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl,
9554                               /*entering_scope=*/0);
9555
9556         for (v = TYPE_VALUES (enum_type);
9557              v != NULL_TREE;
9558              v = TREE_CHAIN (v))
9559           if (TREE_PURPOSE (v) == DECL_NAME (t))
9560             return TREE_VALUE (v);
9561
9562           /* We didn't find the name.  That should never happen; if
9563              name-lookup found it during preliminary parsing, we
9564              should find it again here during instantiation.  */
9565         gcc_unreachable ();
9566       }
9567       return t;
9568
9569     case FIELD_DECL:
9570       if (DECL_CONTEXT (t))
9571         {
9572           tree ctx;
9573
9574           ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
9575                                   /*entering_scope=*/1);
9576           if (ctx != DECL_CONTEXT (t))
9577             {
9578               tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
9579               if (!r)
9580                 {
9581                   if (complain & tf_error)
9582                     error ("using invalid field %qD", t);
9583                   return error_mark_node;
9584                 }
9585               return r;
9586             }
9587         }
9588
9589       return t;
9590
9591     case VAR_DECL:
9592     case FUNCTION_DECL:
9593       if ((DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
9594           || local_variable_p (t))
9595         t = tsubst (t, args, complain, in_decl);
9596       mark_used (t);
9597       return t;
9598
9599     case BASELINK:
9600       return tsubst_baselink (t, current_class_type, args, complain, in_decl);
9601
9602     case TEMPLATE_DECL:
9603       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
9604         return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
9605                        args, complain, in_decl);
9606       else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
9607         return tsubst (t, args, complain, in_decl);
9608       else if (DECL_CLASS_SCOPE_P (t)
9609                && uses_template_parms (DECL_CONTEXT (t)))
9610         {
9611           /* Template template argument like the following example need
9612              special treatment:
9613
9614                template <template <class> class TT> struct C {};
9615                template <class T> struct D {
9616                  template <class U> struct E {};
9617                  C<E> c;                                // #1
9618                };
9619                D<int> d;                                // #2
9620
9621              We are processing the template argument `E' in #1 for
9622              the template instantiation #2.  Originally, `E' is a
9623              TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT.  Now we
9624              have to substitute this with one having context `D<int>'.  */
9625
9626           tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
9627           return lookup_field (context, DECL_NAME(t), 0, false);
9628         }
9629       else
9630         /* Ordinary template template argument.  */
9631         return t;
9632
9633     case CAST_EXPR:
9634     case REINTERPRET_CAST_EXPR:
9635     case CONST_CAST_EXPR:
9636     case STATIC_CAST_EXPR:
9637     case DYNAMIC_CAST_EXPR:
9638     case NOP_EXPR:
9639       return build1
9640         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
9641          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
9642
9643     case SIZEOF_EXPR:
9644       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
9645         {
9646           /* We only want to compute the number of arguments.  */
9647           tree expanded = tsubst_pack_expansion (TREE_OPERAND (t, 0), args,
9648                                                 complain, in_decl);
9649           if (expanded == error_mark_node)
9650             return error_mark_node;
9651           return build_int_cst (size_type_node, TREE_VEC_LENGTH (expanded));
9652         }
9653       /* Fall through */
9654
9655     case INDIRECT_REF:
9656     case NEGATE_EXPR:
9657     case TRUTH_NOT_EXPR:
9658     case BIT_NOT_EXPR:
9659     case ADDR_EXPR:
9660     case UNARY_PLUS_EXPR:      /* Unary + */
9661     case ALIGNOF_EXPR:
9662     case ARROW_EXPR:
9663     case THROW_EXPR:
9664     case TYPEID_EXPR:
9665     case REALPART_EXPR:
9666     case IMAGPART_EXPR:
9667       return build1
9668         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
9669          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
9670
9671     case COMPONENT_REF:
9672       {
9673         tree object;
9674         tree name;
9675
9676         object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
9677         name = TREE_OPERAND (t, 1);
9678         if (TREE_CODE (name) == BIT_NOT_EXPR)
9679           {
9680             name = tsubst_copy (TREE_OPERAND (name, 0), args,
9681                                 complain, in_decl);
9682             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
9683           }
9684         else if (TREE_CODE (name) == SCOPE_REF
9685                  && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
9686           {
9687             tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
9688                                      complain, in_decl);
9689             name = TREE_OPERAND (name, 1);
9690             name = tsubst_copy (TREE_OPERAND (name, 0), args,
9691                                 complain, in_decl);
9692             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
9693             name = build_qualified_name (/*type=*/NULL_TREE,
9694                                          base, name,
9695                                          /*template_p=*/false);
9696           }
9697         else if (TREE_CODE (name) == BASELINK)
9698           name = tsubst_baselink (name,
9699                                   non_reference (TREE_TYPE (object)),
9700                                   args, complain,
9701                                   in_decl);
9702         else
9703           name = tsubst_copy (name, args, complain, in_decl);
9704         return build_nt (COMPONENT_REF, object, name, NULL_TREE);
9705       }
9706
9707     case PLUS_EXPR:
9708     case MINUS_EXPR:
9709     case MULT_EXPR:
9710     case TRUNC_DIV_EXPR:
9711     case CEIL_DIV_EXPR:
9712     case FLOOR_DIV_EXPR:
9713     case ROUND_DIV_EXPR:
9714     case EXACT_DIV_EXPR:
9715     case BIT_AND_EXPR:
9716     case BIT_IOR_EXPR:
9717     case BIT_XOR_EXPR:
9718     case TRUNC_MOD_EXPR:
9719     case FLOOR_MOD_EXPR:
9720     case TRUTH_ANDIF_EXPR:
9721     case TRUTH_ORIF_EXPR:
9722     case TRUTH_AND_EXPR:
9723     case TRUTH_OR_EXPR:
9724     case RSHIFT_EXPR:
9725     case LSHIFT_EXPR:
9726     case RROTATE_EXPR:
9727     case LROTATE_EXPR:
9728     case EQ_EXPR:
9729     case NE_EXPR:
9730     case MAX_EXPR:
9731     case MIN_EXPR:
9732     case LE_EXPR:
9733     case GE_EXPR:
9734     case LT_EXPR:
9735     case GT_EXPR:
9736     case COMPOUND_EXPR:
9737     case DOTSTAR_EXPR:
9738     case MEMBER_REF:
9739     case PREDECREMENT_EXPR:
9740     case PREINCREMENT_EXPR:
9741     case POSTDECREMENT_EXPR:
9742     case POSTINCREMENT_EXPR:
9743       return build_nt
9744         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9745          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
9746
9747     case SCOPE_REF:
9748       return build_qualified_name (/*type=*/NULL_TREE,
9749                                    tsubst_copy (TREE_OPERAND (t, 0),
9750                                                 args, complain, in_decl),
9751                                    tsubst_copy (TREE_OPERAND (t, 1),
9752                                                 args, complain, in_decl),
9753                                    QUALIFIED_NAME_IS_TEMPLATE (t));
9754
9755     case ARRAY_REF:
9756       return build_nt
9757         (ARRAY_REF,
9758          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9759          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
9760          NULL_TREE, NULL_TREE);
9761
9762     case CALL_EXPR:
9763       {
9764         int n = VL_EXP_OPERAND_LENGTH (t);
9765         tree result = build_vl_exp (CALL_EXPR, n);
9766         int i;
9767         for (i = 0; i < n; i++)
9768           TREE_OPERAND (t, i) = tsubst_copy (TREE_OPERAND (t, i), args,
9769                                              complain, in_decl);
9770         return result;
9771       }
9772
9773     case COND_EXPR:
9774     case MODOP_EXPR:
9775     case PSEUDO_DTOR_EXPR:
9776       {
9777         r = build_nt
9778           (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9779            tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
9780            tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
9781         TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
9782         return r;
9783       }
9784
9785     case NEW_EXPR:
9786       {
9787         r = build_nt
9788         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9789          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
9790          tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
9791         NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
9792         return r;
9793       }
9794
9795     case DELETE_EXPR:
9796       {
9797         r = build_nt
9798         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9799          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
9800         DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
9801         DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
9802         return r;
9803       }
9804
9805     case TEMPLATE_ID_EXPR:
9806       {
9807         /* Substituted template arguments */
9808         tree fn = TREE_OPERAND (t, 0);
9809         tree targs = TREE_OPERAND (t, 1);
9810
9811         fn = tsubst_copy (fn, args, complain, in_decl);
9812         if (targs)
9813           targs = tsubst_template_args (targs, args, complain, in_decl);
9814
9815         return lookup_template_function (fn, targs);
9816       }
9817
9818     case TREE_LIST:
9819       {
9820         tree purpose, value, chain;
9821
9822         if (t == void_list_node)
9823           return t;
9824
9825         purpose = TREE_PURPOSE (t);
9826         if (purpose)
9827           purpose = tsubst_copy (purpose, args, complain, in_decl);
9828         value = TREE_VALUE (t);
9829         if (value)
9830           value = tsubst_copy (value, args, complain, in_decl);
9831         chain = TREE_CHAIN (t);
9832         if (chain && chain != void_type_node)
9833           chain = tsubst_copy (chain, args, complain, in_decl);
9834         if (purpose == TREE_PURPOSE (t)
9835             && value == TREE_VALUE (t)
9836             && chain == TREE_CHAIN (t))
9837           return t;
9838         return tree_cons (purpose, value, chain);
9839       }
9840
9841     case RECORD_TYPE:
9842     case UNION_TYPE:
9843     case ENUMERAL_TYPE:
9844     case INTEGER_TYPE:
9845     case TEMPLATE_TYPE_PARM:
9846     case TEMPLATE_TEMPLATE_PARM:
9847     case BOUND_TEMPLATE_TEMPLATE_PARM:
9848     case TEMPLATE_PARM_INDEX:
9849     case POINTER_TYPE:
9850     case REFERENCE_TYPE:
9851     case OFFSET_TYPE:
9852     case FUNCTION_TYPE:
9853     case METHOD_TYPE:
9854     case ARRAY_TYPE:
9855     case TYPENAME_TYPE:
9856     case UNBOUND_CLASS_TEMPLATE:
9857     case TYPEOF_TYPE:
9858     case DECLTYPE_TYPE:
9859     case TYPE_DECL:
9860       return tsubst (t, args, complain, in_decl);
9861
9862     case IDENTIFIER_NODE:
9863       if (IDENTIFIER_TYPENAME_P (t))
9864         {
9865           tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9866           return mangle_conv_op_name_for_type (new_type);
9867         }
9868       else
9869         return t;
9870
9871     case CONSTRUCTOR:
9872       /* This is handled by tsubst_copy_and_build.  */
9873       gcc_unreachable ();
9874
9875     case VA_ARG_EXPR:
9876       return build_x_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
9877                                           in_decl),
9878                              tsubst (TREE_TYPE (t), args, complain, in_decl));
9879
9880     case CLEANUP_POINT_EXPR:
9881       /* We shouldn't have built any of these during initial template
9882          generation.  Instead, they should be built during instantiation
9883          in response to the saved STMT_IS_FULL_EXPR_P setting.  */
9884       gcc_unreachable ();
9885
9886     case OFFSET_REF:
9887       mark_used (TREE_OPERAND (t, 1));
9888       return t;
9889
9890     case EXPR_PACK_EXPANSION:
9891       error ("invalid use of pack expansion expression");
9892       return error_mark_node;
9893
9894     case NONTYPE_ARGUMENT_PACK:
9895       error ("use %<...%> to expand argument pack");
9896       return error_mark_node;
9897
9898     default:
9899       return t;
9900     }
9901 }
9902
9903 /* Like tsubst_copy, but specifically for OpenMP clauses.  */
9904
9905 static tree
9906 tsubst_omp_clauses (tree clauses, tree args, tsubst_flags_t complain,
9907                     tree in_decl)
9908 {
9909   tree new_clauses = NULL, nc, oc;
9910
9911   for (oc = clauses; oc ; oc = OMP_CLAUSE_CHAIN (oc))
9912     {
9913       nc = copy_node (oc);
9914       OMP_CLAUSE_CHAIN (nc) = new_clauses;
9915       new_clauses = nc;
9916
9917       switch (OMP_CLAUSE_CODE (nc))
9918         {
9919         case OMP_CLAUSE_PRIVATE:
9920         case OMP_CLAUSE_SHARED:
9921         case OMP_CLAUSE_FIRSTPRIVATE:
9922         case OMP_CLAUSE_LASTPRIVATE:
9923         case OMP_CLAUSE_REDUCTION:
9924         case OMP_CLAUSE_COPYIN:
9925         case OMP_CLAUSE_COPYPRIVATE:
9926         case OMP_CLAUSE_IF:
9927         case OMP_CLAUSE_NUM_THREADS:
9928         case OMP_CLAUSE_SCHEDULE:
9929           OMP_CLAUSE_OPERAND (nc, 0)
9930             = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain, 
9931                            in_decl, /*integral_constant_expression_p=*/false);
9932           break;
9933         case OMP_CLAUSE_NOWAIT:
9934         case OMP_CLAUSE_ORDERED:
9935         case OMP_CLAUSE_DEFAULT:
9936           break;
9937         default:
9938           gcc_unreachable ();
9939         }
9940     }
9941
9942   return finish_omp_clauses (nreverse (new_clauses));
9943 }
9944
9945 /* Like tsubst_copy_and_build, but unshare TREE_LIST nodes.  */
9946
9947 static tree
9948 tsubst_copy_asm_operands (tree t, tree args, tsubst_flags_t complain,
9949                           tree in_decl)
9950 {
9951 #define RECUR(t) tsubst_copy_asm_operands (t, args, complain, in_decl)
9952
9953   tree purpose, value, chain;
9954
9955   if (t == NULL)
9956     return t;
9957
9958   if (TREE_CODE (t) != TREE_LIST)
9959     return tsubst_copy_and_build (t, args, complain, in_decl,
9960                                   /*function_p=*/false,
9961                                   /*integral_constant_expression_p=*/false);
9962
9963   if (t == void_list_node)
9964     return t;
9965
9966   purpose = TREE_PURPOSE (t);
9967   if (purpose)
9968     purpose = RECUR (purpose);
9969   value = TREE_VALUE (t);
9970   if (value)
9971     value = RECUR (value);
9972   chain = TREE_CHAIN (t);
9973   if (chain && chain != void_type_node)
9974     chain = RECUR (chain);
9975   return tree_cons (purpose, value, chain);
9976 #undef RECUR
9977 }
9978
9979 /* Like tsubst_copy for expressions, etc. but also does semantic
9980    processing.  */
9981
9982 static tree
9983 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
9984              bool integral_constant_expression_p)
9985 {
9986 #define RECUR(NODE)                             \
9987   tsubst_expr ((NODE), args, complain, in_decl, \
9988                integral_constant_expression_p)
9989
9990   tree stmt, tmp;
9991
9992   if (t == NULL_TREE || t == error_mark_node)
9993     return t;
9994
9995   if (EXPR_HAS_LOCATION (t))
9996     input_location = EXPR_LOCATION (t);
9997   if (STATEMENT_CODE_P (TREE_CODE (t)))
9998     current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
9999
10000   switch (TREE_CODE (t))
10001     {
10002     case STATEMENT_LIST:
10003       {
10004         tree_stmt_iterator i;
10005         for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
10006           RECUR (tsi_stmt (i));
10007         break;
10008       }
10009
10010     case CTOR_INITIALIZER:
10011       finish_mem_initializers (tsubst_initializer_list
10012                                (TREE_OPERAND (t, 0), args));
10013       break;
10014
10015     case RETURN_EXPR:
10016       finish_return_stmt (RECUR (TREE_OPERAND (t, 0)));
10017       break;
10018
10019     case EXPR_STMT:
10020       tmp = RECUR (EXPR_STMT_EXPR (t));
10021       if (EXPR_STMT_STMT_EXPR_RESULT (t))
10022         finish_stmt_expr_expr (tmp, cur_stmt_expr);
10023       else
10024         finish_expr_stmt (tmp);
10025       break;
10026
10027     case USING_STMT:
10028       do_using_directive (RECUR (USING_STMT_NAMESPACE (t)));
10029       break;
10030
10031     case DECL_EXPR:
10032       {
10033         tree decl;
10034         tree init;
10035
10036         decl = DECL_EXPR_DECL (t);
10037         if (TREE_CODE (decl) == LABEL_DECL)
10038           finish_label_decl (DECL_NAME (decl));
10039         else if (TREE_CODE (decl) == USING_DECL)
10040           {
10041             tree scope = USING_DECL_SCOPE (decl);
10042             tree name = DECL_NAME (decl);
10043             tree decl;
10044
10045             scope = RECUR (scope);
10046             decl = lookup_qualified_name (scope, name,
10047                                           /*is_type_p=*/false,
10048                                           /*complain=*/false);
10049             if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
10050               qualified_name_lookup_error (scope, name, decl);
10051             else
10052               do_local_using_decl (decl, scope, name);
10053           }
10054         else
10055           {
10056             init = DECL_INITIAL (decl);
10057             decl = tsubst (decl, args, complain, in_decl);
10058             if (decl != error_mark_node)
10059               {
10060                 /* By marking the declaration as instantiated, we avoid
10061                    trying to instantiate it.  Since instantiate_decl can't
10062                    handle local variables, and since we've already done
10063                    all that needs to be done, that's the right thing to
10064                    do.  */
10065                 if (TREE_CODE (decl) == VAR_DECL)
10066                   DECL_TEMPLATE_INSTANTIATED (decl) = 1;
10067                 if (TREE_CODE (decl) == VAR_DECL
10068                     && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
10069                   /* Anonymous aggregates are a special case.  */
10070                   finish_anon_union (decl);
10071                 else
10072                   {
10073                     maybe_push_decl (decl);
10074                     if (TREE_CODE (decl) == VAR_DECL
10075                         && DECL_PRETTY_FUNCTION_P (decl))
10076                       {
10077                         /* For __PRETTY_FUNCTION__ we have to adjust the
10078                            initializer.  */
10079                         const char *const name
10080                           = cxx_printable_name (current_function_decl, 2);
10081                         init = cp_fname_init (name, &TREE_TYPE (decl));
10082                       }
10083                     else
10084                       {
10085                         tree t = RECUR (init);
10086
10087                         if (init && !t)
10088                           /* If we had an initializer but it
10089                              instantiated to nothing,
10090                              value-initialize the object.  This will
10091                              only occur when the initializer was a
10092                              pack expansion where the parameter packs
10093                              used in that expansion were of length
10094                              zero.  */
10095                           init = build_default_init (TREE_TYPE (decl),
10096                                                      NULL_TREE);
10097                         else
10098                           init = t;
10099                       }
10100
10101                     finish_decl (decl, init, NULL_TREE);
10102                   }
10103               }
10104           }
10105
10106         /* A DECL_EXPR can also be used as an expression, in the condition
10107            clause of an if/for/while construct.  */
10108         return decl;
10109       }
10110
10111     case FOR_STMT:
10112       stmt = begin_for_stmt ();
10113                           RECUR (FOR_INIT_STMT (t));
10114       finish_for_init_stmt (stmt);
10115       tmp = RECUR (FOR_COND (t));
10116       finish_for_cond (tmp, stmt);
10117       tmp = RECUR (FOR_EXPR (t));
10118       finish_for_expr (tmp, stmt);
10119       RECUR (FOR_BODY (t));
10120       finish_for_stmt (stmt);
10121       break;
10122
10123     case WHILE_STMT:
10124       stmt = begin_while_stmt ();
10125       tmp = RECUR (WHILE_COND (t));
10126       finish_while_stmt_cond (tmp, stmt);
10127       RECUR (WHILE_BODY (t));
10128       finish_while_stmt (stmt);
10129       break;
10130
10131     case DO_STMT:
10132       stmt = begin_do_stmt ();
10133       RECUR (DO_BODY (t));
10134       finish_do_body (stmt);
10135       tmp = RECUR (DO_COND (t));
10136       finish_do_stmt (tmp, stmt);
10137       break;
10138
10139     case IF_STMT:
10140       stmt = begin_if_stmt ();
10141       tmp = RECUR (IF_COND (t));
10142       finish_if_stmt_cond (tmp, stmt);
10143       RECUR (THEN_CLAUSE (t));
10144       finish_then_clause (stmt);
10145
10146       if (ELSE_CLAUSE (t))
10147         {
10148           begin_else_clause (stmt);
10149           RECUR (ELSE_CLAUSE (t));
10150           finish_else_clause (stmt);
10151         }
10152
10153       finish_if_stmt (stmt);
10154       break;
10155
10156     case BIND_EXPR:
10157       if (BIND_EXPR_BODY_BLOCK (t))
10158         stmt = begin_function_body ();
10159       else
10160         stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
10161                                     ? BCS_TRY_BLOCK : 0);
10162
10163       RECUR (BIND_EXPR_BODY (t));
10164
10165       if (BIND_EXPR_BODY_BLOCK (t))
10166         finish_function_body (stmt);
10167       else
10168         finish_compound_stmt (stmt);
10169       break;
10170
10171     case BREAK_STMT:
10172       finish_break_stmt ();
10173       break;
10174
10175     case CONTINUE_STMT:
10176       finish_continue_stmt ();
10177       break;
10178
10179     case SWITCH_STMT:
10180       stmt = begin_switch_stmt ();
10181       tmp = RECUR (SWITCH_STMT_COND (t));
10182       finish_switch_cond (tmp, stmt);
10183       RECUR (SWITCH_STMT_BODY (t));
10184       finish_switch_stmt (stmt);
10185       break;
10186
10187     case CASE_LABEL_EXPR:
10188       finish_case_label (RECUR (CASE_LOW (t)),
10189                          RECUR (CASE_HIGH (t)));
10190       break;
10191
10192     case LABEL_EXPR:
10193       finish_label_stmt (DECL_NAME (LABEL_EXPR_LABEL (t)));
10194       break;
10195
10196     case GOTO_EXPR:
10197       tmp = GOTO_DESTINATION (t);
10198       if (TREE_CODE (tmp) != LABEL_DECL)
10199         /* Computed goto's must be tsubst'd into.  On the other hand,
10200            non-computed gotos must not be; the identifier in question
10201            will have no binding.  */
10202         tmp = RECUR (tmp);
10203       else
10204         tmp = DECL_NAME (tmp);
10205       finish_goto_stmt (tmp);
10206       break;
10207
10208     case ASM_EXPR:
10209       tmp = finish_asm_stmt
10210         (ASM_VOLATILE_P (t),
10211          RECUR (ASM_STRING (t)),
10212          tsubst_copy_asm_operands (ASM_OUTPUTS (t), args, complain, in_decl),
10213          tsubst_copy_asm_operands (ASM_INPUTS (t), args, complain, in_decl),
10214          tsubst_copy_asm_operands (ASM_CLOBBERS (t), args, complain, in_decl));
10215       {
10216         tree asm_expr = tmp;
10217         if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
10218           asm_expr = TREE_OPERAND (asm_expr, 0);
10219         ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
10220       }
10221       break;
10222
10223     case TRY_BLOCK:
10224       if (CLEANUP_P (t))
10225         {
10226           stmt = begin_try_block ();
10227           RECUR (TRY_STMTS (t));
10228           finish_cleanup_try_block (stmt);
10229           finish_cleanup (RECUR (TRY_HANDLERS (t)), stmt);
10230         }
10231       else
10232         {
10233           tree compound_stmt = NULL_TREE;
10234
10235           if (FN_TRY_BLOCK_P (t))
10236             stmt = begin_function_try_block (&compound_stmt);
10237           else
10238             stmt = begin_try_block ();
10239
10240           RECUR (TRY_STMTS (t));
10241
10242           if (FN_TRY_BLOCK_P (t))
10243             finish_function_try_block (stmt);
10244           else
10245             finish_try_block (stmt);
10246
10247           RECUR (TRY_HANDLERS (t));
10248           if (FN_TRY_BLOCK_P (t))
10249             finish_function_handler_sequence (stmt, compound_stmt);
10250           else
10251             finish_handler_sequence (stmt);
10252         }
10253       break;
10254
10255     case HANDLER:
10256       {
10257         tree decl = HANDLER_PARMS (t);
10258
10259         if (decl)
10260           {
10261             decl = tsubst (decl, args, complain, in_decl);
10262             /* Prevent instantiate_decl from trying to instantiate
10263                this variable.  We've already done all that needs to be
10264                done.  */
10265             if (decl != error_mark_node)
10266               DECL_TEMPLATE_INSTANTIATED (decl) = 1;
10267           }
10268         stmt = begin_handler ();
10269         finish_handler_parms (decl, stmt);
10270         RECUR (HANDLER_BODY (t));
10271         finish_handler (stmt);
10272       }
10273       break;
10274
10275     case TAG_DEFN:
10276       tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
10277       break;
10278
10279     case STATIC_ASSERT:
10280       {
10281         tree condition = 
10282           tsubst_expr (STATIC_ASSERT_CONDITION (t), 
10283                        args,
10284                        complain, in_decl,
10285                        /*integral_constant_expression_p=*/true);
10286         finish_static_assert (condition,
10287                               STATIC_ASSERT_MESSAGE (t),
10288                               STATIC_ASSERT_SOURCE_LOCATION (t),
10289                               /*member_p=*/false);
10290       }
10291       break;
10292
10293     case OMP_PARALLEL:
10294       tmp = tsubst_omp_clauses (OMP_PARALLEL_CLAUSES (t),
10295                                 args, complain, in_decl);
10296       stmt = begin_omp_parallel ();
10297       RECUR (OMP_PARALLEL_BODY (t));
10298       OMP_PARALLEL_COMBINED (finish_omp_parallel (tmp, stmt))
10299         = OMP_PARALLEL_COMBINED (t);
10300       break;
10301
10302     case OMP_FOR:
10303       {
10304         tree clauses, decl, init, cond, incr, body, pre_body;
10305
10306         clauses = tsubst_omp_clauses (OMP_FOR_CLAUSES (t),
10307                                       args, complain, in_decl);
10308         init = OMP_FOR_INIT (t);
10309         gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
10310         decl = RECUR (TREE_OPERAND (init, 0));
10311         init = RECUR (TREE_OPERAND (init, 1));
10312         cond = RECUR (OMP_FOR_COND (t));
10313         incr = RECUR (OMP_FOR_INCR (t));
10314
10315         stmt = begin_omp_structured_block ();
10316
10317         pre_body = push_stmt_list ();
10318         RECUR (OMP_FOR_PRE_BODY (t));
10319         pre_body = pop_stmt_list (pre_body);
10320
10321         body = push_stmt_list ();
10322         RECUR (OMP_FOR_BODY (t));
10323         body = pop_stmt_list (body);
10324
10325         t = finish_omp_for (EXPR_LOCATION (t), decl, init, cond, incr, body,
10326                             pre_body);
10327         if (t)
10328           OMP_FOR_CLAUSES (t) = clauses;
10329
10330         add_stmt (finish_omp_structured_block (stmt));
10331       }
10332       break;
10333
10334     case OMP_SECTIONS:
10335     case OMP_SINGLE:
10336       tmp = tsubst_omp_clauses (OMP_CLAUSES (t), args, complain, in_decl);
10337       stmt = push_stmt_list ();
10338       RECUR (OMP_BODY (t));
10339       stmt = pop_stmt_list (stmt);
10340
10341       t = copy_node (t);
10342       OMP_BODY (t) = stmt;
10343       OMP_CLAUSES (t) = tmp;
10344       add_stmt (t);
10345       break;
10346
10347     case OMP_SECTION:
10348     case OMP_CRITICAL:
10349     case OMP_MASTER:
10350     case OMP_ORDERED:
10351       stmt = push_stmt_list ();
10352       RECUR (OMP_BODY (t));
10353       stmt = pop_stmt_list (stmt);
10354
10355       t = copy_node (t);
10356       OMP_BODY (t) = stmt;
10357       add_stmt (t);
10358       break;
10359
10360     case OMP_ATOMIC:
10361       if (OMP_ATOMIC_DEPENDENT_P (t))
10362         {
10363           tree op1 = TREE_OPERAND (t, 1);
10364           tree lhs = RECUR (TREE_OPERAND (op1, 0));
10365           tree rhs = RECUR (TREE_OPERAND (op1, 1));
10366           finish_omp_atomic (TREE_CODE (op1), lhs, rhs);
10367         }
10368       break;
10369
10370     case EXPR_PACK_EXPANSION:
10371       error ("invalid use of pack expansion expression");
10372       return error_mark_node;
10373
10374     case NONTYPE_ARGUMENT_PACK:
10375       error ("use %<...%> to expand argument pack");
10376       return error_mark_node;
10377
10378     default:
10379       gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
10380
10381       return tsubst_copy_and_build (t, args, complain, in_decl,
10382                                     /*function_p=*/false,
10383                                     integral_constant_expression_p);
10384     }
10385
10386   return NULL_TREE;
10387 #undef RECUR
10388 }
10389
10390 /* T is a postfix-expression that is not being used in a function
10391    call.  Return the substituted version of T.  */
10392
10393 static tree
10394 tsubst_non_call_postfix_expression (tree t, tree args,
10395                                     tsubst_flags_t complain,
10396                                     tree in_decl)
10397 {
10398   if (TREE_CODE (t) == SCOPE_REF)
10399     t = tsubst_qualified_id (t, args, complain, in_decl,
10400                              /*done=*/false, /*address_p=*/false);
10401   else
10402     t = tsubst_copy_and_build (t, args, complain, in_decl,
10403                                /*function_p=*/false,
10404                                /*integral_constant_expression_p=*/false);
10405
10406   return t;
10407 }
10408
10409 /* Like tsubst but deals with expressions and performs semantic
10410    analysis.  FUNCTION_P is true if T is the "F" in "F (ARGS)".  */
10411
10412 tree
10413 tsubst_copy_and_build (tree t,
10414                        tree args,
10415                        tsubst_flags_t complain,
10416                        tree in_decl,
10417                        bool function_p,
10418                        bool integral_constant_expression_p)
10419 {
10420 #define RECUR(NODE)                                             \
10421   tsubst_copy_and_build (NODE, args, complain, in_decl,         \
10422                          /*function_p=*/false,                  \
10423                          integral_constant_expression_p)
10424
10425   tree op1;
10426
10427   if (t == NULL_TREE || t == error_mark_node)
10428     return t;
10429
10430   switch (TREE_CODE (t))
10431     {
10432     case USING_DECL:
10433       t = DECL_NAME (t);
10434       /* Fall through.  */
10435     case IDENTIFIER_NODE:
10436       {
10437         tree decl;
10438         cp_id_kind idk;
10439         bool non_integral_constant_expression_p;
10440         const char *error_msg;
10441
10442         if (IDENTIFIER_TYPENAME_P (t))
10443           {
10444             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10445             t = mangle_conv_op_name_for_type (new_type);
10446           }
10447
10448         /* Look up the name.  */
10449         decl = lookup_name (t);
10450
10451         /* By convention, expressions use ERROR_MARK_NODE to indicate
10452            failure, not NULL_TREE.  */
10453         if (decl == NULL_TREE)
10454           decl = error_mark_node;
10455
10456         decl = finish_id_expression (t, decl, NULL_TREE,
10457                                      &idk,
10458                                      integral_constant_expression_p,
10459                                      /*allow_non_integral_constant_expression_p=*/false,
10460                                      &non_integral_constant_expression_p,
10461                                      /*template_p=*/false,
10462                                      /*done=*/true,
10463                                      /*address_p=*/false,
10464                                      /*template_arg_p=*/false,
10465                                      &error_msg);
10466         if (error_msg)
10467           error (error_msg);
10468         if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
10469           decl = unqualified_name_lookup_error (decl);
10470         return decl;
10471       }
10472
10473     case TEMPLATE_ID_EXPR:
10474       {
10475         tree object;
10476         tree template = RECUR (TREE_OPERAND (t, 0));
10477         tree targs = TREE_OPERAND (t, 1);
10478
10479         if (targs)
10480           targs = tsubst_template_args (targs, args, complain, in_decl);
10481
10482         if (TREE_CODE (template) == COMPONENT_REF)
10483           {
10484             object = TREE_OPERAND (template, 0);
10485             template = TREE_OPERAND (template, 1);
10486           }
10487         else
10488           object = NULL_TREE;
10489         template = lookup_template_function (template, targs);
10490
10491         if (object)
10492           return build3 (COMPONENT_REF, TREE_TYPE (template),
10493                          object, template, NULL_TREE);
10494         else
10495           return baselink_for_fns (template);
10496       }
10497
10498     case INDIRECT_REF:
10499       {
10500         tree r = RECUR (TREE_OPERAND (t, 0));
10501
10502         if (REFERENCE_REF_P (t))
10503           {
10504             /* A type conversion to reference type will be enclosed in
10505                such an indirect ref, but the substitution of the cast
10506                will have also added such an indirect ref.  */
10507             if (TREE_CODE (TREE_TYPE (r)) == REFERENCE_TYPE)
10508               r = convert_from_reference (r);
10509           }
10510         else
10511           r = build_x_indirect_ref (r, "unary *");
10512         return r;
10513       }
10514
10515     case NOP_EXPR:
10516       return build_nop
10517         (tsubst (TREE_TYPE (t), args, complain, in_decl),
10518          RECUR (TREE_OPERAND (t, 0)));
10519
10520     case CAST_EXPR:
10521     case REINTERPRET_CAST_EXPR:
10522     case CONST_CAST_EXPR:
10523     case DYNAMIC_CAST_EXPR:
10524     case STATIC_CAST_EXPR:
10525       {
10526         tree type;
10527         tree op;
10528
10529         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10530         if (integral_constant_expression_p
10531             && !cast_valid_in_integral_constant_expression_p (type))
10532           {
10533             error ("a cast to a type other than an integral or "
10534                    "enumeration type cannot appear in a constant-expression");
10535             return error_mark_node; 
10536           }
10537
10538         op = RECUR (TREE_OPERAND (t, 0));
10539
10540         switch (TREE_CODE (t))
10541           {
10542           case CAST_EXPR:
10543             return build_functional_cast (type, op);
10544           case REINTERPRET_CAST_EXPR:
10545             return build_reinterpret_cast (type, op);
10546           case CONST_CAST_EXPR:
10547             return build_const_cast (type, op);
10548           case DYNAMIC_CAST_EXPR:
10549             return build_dynamic_cast (type, op);
10550           case STATIC_CAST_EXPR:
10551             return build_static_cast (type, op);
10552           default:
10553             gcc_unreachable ();
10554           }
10555       }
10556
10557     case POSTDECREMENT_EXPR:
10558     case POSTINCREMENT_EXPR:
10559       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
10560                                                 args, complain, in_decl);
10561       return build_x_unary_op (TREE_CODE (t), op1);
10562
10563     case PREDECREMENT_EXPR:
10564     case PREINCREMENT_EXPR:
10565     case NEGATE_EXPR:
10566     case BIT_NOT_EXPR:
10567     case ABS_EXPR:
10568     case TRUTH_NOT_EXPR:
10569     case UNARY_PLUS_EXPR:  /* Unary + */
10570     case REALPART_EXPR:
10571     case IMAGPART_EXPR:
10572       return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)));
10573
10574     case ADDR_EXPR:
10575       op1 = TREE_OPERAND (t, 0);
10576       if (TREE_CODE (op1) == SCOPE_REF)
10577         op1 = tsubst_qualified_id (op1, args, complain, in_decl,
10578                                    /*done=*/true, /*address_p=*/true);
10579       else
10580         op1 = tsubst_non_call_postfix_expression (op1, args, complain,
10581                                                   in_decl);
10582       if (TREE_CODE (op1) == LABEL_DECL)
10583         return finish_label_address_expr (DECL_NAME (op1));
10584       return build_x_unary_op (ADDR_EXPR, op1);
10585
10586     case PLUS_EXPR:
10587     case MINUS_EXPR:
10588     case MULT_EXPR:
10589     case TRUNC_DIV_EXPR:
10590     case CEIL_DIV_EXPR:
10591     case FLOOR_DIV_EXPR:
10592     case ROUND_DIV_EXPR:
10593     case EXACT_DIV_EXPR:
10594     case BIT_AND_EXPR:
10595     case BIT_IOR_EXPR:
10596     case BIT_XOR_EXPR:
10597     case TRUNC_MOD_EXPR:
10598     case FLOOR_MOD_EXPR:
10599     case TRUTH_ANDIF_EXPR:
10600     case TRUTH_ORIF_EXPR:
10601     case TRUTH_AND_EXPR:
10602     case TRUTH_OR_EXPR:
10603     case RSHIFT_EXPR:
10604     case LSHIFT_EXPR:
10605     case RROTATE_EXPR:
10606     case LROTATE_EXPR:
10607     case EQ_EXPR:
10608     case NE_EXPR:
10609     case MAX_EXPR:
10610     case MIN_EXPR:
10611     case LE_EXPR:
10612     case GE_EXPR:
10613     case LT_EXPR:
10614     case GT_EXPR:
10615     case MEMBER_REF:
10616     case DOTSTAR_EXPR:
10617       return build_x_binary_op
10618         (TREE_CODE (t),
10619          RECUR (TREE_OPERAND (t, 0)),
10620          (TREE_NO_WARNING (TREE_OPERAND (t, 0))
10621           ? ERROR_MARK
10622           : TREE_CODE (TREE_OPERAND (t, 0))),
10623          RECUR (TREE_OPERAND (t, 1)),
10624          (TREE_NO_WARNING (TREE_OPERAND (t, 1))
10625           ? ERROR_MARK
10626           : TREE_CODE (TREE_OPERAND (t, 1))),
10627          /*overloaded_p=*/NULL);
10628
10629     case SCOPE_REF:
10630       return tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
10631                                   /*address_p=*/false);
10632     case ARRAY_REF:
10633       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
10634                                                 args, complain, in_decl);
10635       return build_x_binary_op (ARRAY_REF, op1,
10636                                 (TREE_NO_WARNING (TREE_OPERAND (t, 0))
10637                                  ? ERROR_MARK
10638                                  : TREE_CODE (TREE_OPERAND (t, 0))),
10639                                 RECUR (TREE_OPERAND (t, 1)),
10640                                 (TREE_NO_WARNING (TREE_OPERAND (t, 1))
10641                                  ? ERROR_MARK
10642                                  : TREE_CODE (TREE_OPERAND (t, 1))),
10643                                 /*overloaded_p=*/NULL);
10644
10645     case SIZEOF_EXPR:
10646       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
10647         {
10648           /* We only want to compute the number of arguments.  */
10649           tree expanded = tsubst_pack_expansion (TREE_OPERAND (t, 0), args,
10650                                                 complain, in_decl);
10651           if (expanded == error_mark_node)
10652             return error_mark_node;
10653           return build_int_cst (size_type_node, TREE_VEC_LENGTH (expanded));
10654         }
10655       /* Fall through */
10656       
10657     case ALIGNOF_EXPR:
10658       op1 = TREE_OPERAND (t, 0);
10659       if (!args)
10660         {
10661           /* When there are no ARGS, we are trying to evaluate a
10662              non-dependent expression from the parser.  Trying to do
10663              the substitutions may not work.  */
10664           if (!TYPE_P (op1))
10665             op1 = TREE_TYPE (op1);
10666         }
10667       else
10668         {
10669           ++skip_evaluation;
10670           op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
10671                                        /*function_p=*/false,
10672                                        /*integral_constant_expression_p=*/false);
10673           --skip_evaluation;
10674         }
10675       if (TYPE_P (op1))
10676         return cxx_sizeof_or_alignof_type (op1, TREE_CODE (t), true);
10677       else
10678         return cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t));
10679
10680     case MODOP_EXPR:
10681       {
10682         tree r = build_x_modify_expr
10683           (RECUR (TREE_OPERAND (t, 0)),
10684            TREE_CODE (TREE_OPERAND (t, 1)),
10685            RECUR (TREE_OPERAND (t, 2)));
10686         /* TREE_NO_WARNING must be set if either the expression was
10687            parenthesized or it uses an operator such as >>= rather
10688            than plain assignment.  In the former case, it was already
10689            set and must be copied.  In the latter case,
10690            build_x_modify_expr sets it and it must not be reset
10691            here.  */
10692         if (TREE_NO_WARNING (t))
10693           TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
10694         return r;
10695       }
10696
10697     case ARROW_EXPR:
10698       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
10699                                                 args, complain, in_decl);
10700       /* Remember that there was a reference to this entity.  */
10701       if (DECL_P (op1))
10702         mark_used (op1);
10703       return build_x_arrow (op1);
10704
10705     case NEW_EXPR:
10706       {
10707         tree init = RECUR (TREE_OPERAND (t, 3));
10708
10709         if (TREE_OPERAND (t, 3) && !init)
10710           /* If there was an initializer in the the original tree, but
10711              it instantiated to an empty list, then we should pass on
10712              VOID_ZERO_NODE to tell build_new that it was an empty
10713              initializer () rather than no initializer.  This can only
10714              happen when the initializer is a pack expansion whose
10715              parameter packs are of length zero.  */
10716           init = void_zero_node;
10717
10718         return build_new
10719           (RECUR (TREE_OPERAND (t, 0)),
10720            RECUR (TREE_OPERAND (t, 1)),
10721            RECUR (TREE_OPERAND (t, 2)),
10722            init,
10723            NEW_EXPR_USE_GLOBAL (t));
10724       }
10725
10726     case DELETE_EXPR:
10727      return delete_sanity
10728        (RECUR (TREE_OPERAND (t, 0)),
10729         RECUR (TREE_OPERAND (t, 1)),
10730         DELETE_EXPR_USE_VEC (t),
10731         DELETE_EXPR_USE_GLOBAL (t));
10732
10733     case COMPOUND_EXPR:
10734       return build_x_compound_expr (RECUR (TREE_OPERAND (t, 0)),
10735                                     RECUR (TREE_OPERAND (t, 1)));
10736
10737     case CALL_EXPR:
10738       {
10739         tree function;
10740         tree call_args;
10741         bool qualified_p;
10742         bool koenig_p;
10743
10744         function = CALL_EXPR_FN (t);
10745         /* When we parsed the expression,  we determined whether or
10746            not Koenig lookup should be performed.  */
10747         koenig_p = KOENIG_LOOKUP_P (t);
10748         if (TREE_CODE (function) == SCOPE_REF)
10749           {
10750             qualified_p = true;
10751             function = tsubst_qualified_id (function, args, complain, in_decl,
10752                                             /*done=*/false,
10753                                             /*address_p=*/false);
10754           }
10755         else
10756           {
10757             if (TREE_CODE (function) == COMPONENT_REF)
10758               {
10759                 tree op = TREE_OPERAND (function, 1);
10760
10761                 qualified_p = (TREE_CODE (op) == SCOPE_REF
10762                                || (BASELINK_P (op)
10763                                    && BASELINK_QUALIFIED_P (op)));
10764               }
10765             else
10766               qualified_p = false;
10767
10768             function = tsubst_copy_and_build (function, args, complain,
10769                                               in_decl,
10770                                               !qualified_p,
10771                                               integral_constant_expression_p);
10772
10773             if (BASELINK_P (function))
10774               qualified_p = true;
10775           }
10776
10777         /* FIXME:  Rewrite this so as not to construct an arglist.  */
10778         call_args = RECUR (CALL_EXPR_ARGS (t));
10779
10780         /* We do not perform argument-dependent lookup if normal
10781            lookup finds a non-function, in accordance with the
10782            expected resolution of DR 218.  */
10783         if (koenig_p
10784             && ((is_overloaded_fn (function)
10785                  /* If lookup found a member function, the Koenig lookup is
10786                     not appropriate, even if an unqualified-name was used
10787                     to denote the function.  */
10788                  && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
10789                 || TREE_CODE (function) == IDENTIFIER_NODE))
10790           function = perform_koenig_lookup (function, call_args);
10791
10792         if (TREE_CODE (function) == IDENTIFIER_NODE)
10793           {
10794             unqualified_name_lookup_error (function);
10795             return error_mark_node;
10796           }
10797
10798         /* Remember that there was a reference to this entity.  */
10799         if (DECL_P (function))
10800           mark_used (function);
10801
10802         if (TREE_CODE (function) == OFFSET_REF)
10803           return build_offset_ref_call_from_tree (function, call_args);
10804         if (TREE_CODE (function) == COMPONENT_REF)
10805           {
10806             if (!BASELINK_P (TREE_OPERAND (function, 1)))
10807               return finish_call_expr (function, call_args,
10808                                        /*disallow_virtual=*/false,
10809                                        /*koenig_p=*/false);
10810             else
10811               return (build_new_method_call
10812                       (TREE_OPERAND (function, 0),
10813                        TREE_OPERAND (function, 1),
10814                        call_args, NULL_TREE,
10815                        qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL,
10816                        /*fn_p=*/NULL));
10817           }
10818         return finish_call_expr (function, call_args,
10819                                  /*disallow_virtual=*/qualified_p,
10820                                  koenig_p);
10821       }
10822
10823     case COND_EXPR:
10824       return build_x_conditional_expr
10825         (RECUR (TREE_OPERAND (t, 0)),
10826          RECUR (TREE_OPERAND (t, 1)),
10827          RECUR (TREE_OPERAND (t, 2)));
10828
10829     case PSEUDO_DTOR_EXPR:
10830       return finish_pseudo_destructor_expr
10831         (RECUR (TREE_OPERAND (t, 0)),
10832          RECUR (TREE_OPERAND (t, 1)),
10833          RECUR (TREE_OPERAND (t, 2)));
10834
10835     case TREE_LIST:
10836       {
10837         tree purpose, value, chain;
10838
10839         if (t == void_list_node)
10840           return t;
10841
10842         if ((TREE_PURPOSE (t) && PACK_EXPANSION_P (TREE_PURPOSE (t)))
10843             || (TREE_VALUE (t) && PACK_EXPANSION_P (TREE_VALUE (t))))
10844           {
10845             /* We have pack expansions, so expand those and
10846                create a new list out of it.  */
10847             tree purposevec = NULL_TREE;
10848             tree valuevec = NULL_TREE;
10849             tree chain;
10850             int i, len = -1;
10851
10852             /* Expand the argument expressions.  */
10853             if (TREE_PURPOSE (t))
10854               purposevec = tsubst_pack_expansion (TREE_PURPOSE (t), args,
10855                                                  complain, in_decl);
10856             if (TREE_VALUE (t))
10857               valuevec = tsubst_pack_expansion (TREE_VALUE (t), args,
10858                                                complain, in_decl);
10859
10860             /* Build the rest of the list.  */
10861             chain = TREE_CHAIN (t);
10862             if (chain && chain != void_type_node)
10863               chain = RECUR (chain);
10864
10865             /* Determine the number of arguments.  */
10866             if (purposevec && TREE_CODE (purposevec) == TREE_VEC)
10867               {
10868                 len = TREE_VEC_LENGTH (purposevec);
10869                 gcc_assert (!valuevec || len == TREE_VEC_LENGTH (valuevec));
10870               }
10871             else if (TREE_CODE (valuevec) == TREE_VEC)
10872               len = TREE_VEC_LENGTH (valuevec);
10873             else
10874               {
10875                 /* Since we only performed a partial substitution into
10876                    the argument pack, we only return a single list
10877                    node.  */
10878                 if (purposevec == TREE_PURPOSE (t)
10879                     && valuevec == TREE_VALUE (t)
10880                     && chain == TREE_CHAIN (t))
10881                   return t;
10882
10883                 return tree_cons (purposevec, valuevec, chain);
10884               }
10885             
10886             /* Convert the argument vectors into a TREE_LIST */
10887             i = len;
10888             while (i > 0)
10889               {
10890                 /* Grab the Ith values.  */
10891                 i--;
10892                 purpose = purposevec ? TREE_VEC_ELT (purposevec, i) 
10893                                      : NULL_TREE;
10894                 value 
10895                   = valuevec ? convert_from_reference (TREE_VEC_ELT (valuevec, i)) 
10896                              : NULL_TREE;
10897
10898                 /* Build the list (backwards).  */
10899                 chain = tree_cons (purpose, value, chain);
10900               }
10901
10902             return chain;
10903           }
10904
10905         purpose = TREE_PURPOSE (t);
10906         if (purpose)
10907           purpose = RECUR (purpose);
10908         value = TREE_VALUE (t);
10909         if (value)
10910           value = RECUR (value);
10911         chain = TREE_CHAIN (t);
10912         if (chain && chain != void_type_node)
10913           chain = RECUR (chain);
10914         if (purpose == TREE_PURPOSE (t)
10915             && value == TREE_VALUE (t)
10916             && chain == TREE_CHAIN (t))
10917           return t;
10918         return tree_cons (purpose, value, chain);
10919       }
10920
10921     case COMPONENT_REF:
10922       {
10923         tree object;
10924         tree object_type;
10925         tree member;
10926
10927         object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
10928                                                      args, complain, in_decl);
10929         /* Remember that there was a reference to this entity.  */
10930         if (DECL_P (object))
10931           mark_used (object);
10932         object_type = TREE_TYPE (object);
10933
10934         member = TREE_OPERAND (t, 1);
10935         if (BASELINK_P (member))
10936           member = tsubst_baselink (member,
10937                                     non_reference (TREE_TYPE (object)),
10938                                     args, complain, in_decl);
10939         else
10940           member = tsubst_copy (member, args, complain, in_decl);
10941         if (member == error_mark_node)
10942           return error_mark_node;
10943
10944         if (object_type && !CLASS_TYPE_P (object_type))
10945           {
10946             if (TREE_CODE (member) == BIT_NOT_EXPR)
10947               return finish_pseudo_destructor_expr (object,
10948                                                     NULL_TREE,
10949                                                     object_type);
10950             else if (TREE_CODE (member) == SCOPE_REF
10951                      && (TREE_CODE (TREE_OPERAND (member, 1)) == BIT_NOT_EXPR))
10952               return finish_pseudo_destructor_expr (object,
10953                                                     object,
10954                                                     object_type);
10955           }
10956         else if (TREE_CODE (member) == SCOPE_REF
10957                  && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
10958           {
10959             tree tmpl;
10960             tree args;
10961
10962             /* Lookup the template functions now that we know what the
10963                scope is.  */
10964             tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
10965             args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
10966             member = lookup_qualified_name (TREE_OPERAND (member, 0), tmpl,
10967                                             /*is_type_p=*/false,
10968                                             /*complain=*/false);
10969             if (BASELINK_P (member))
10970               {
10971                 BASELINK_FUNCTIONS (member)
10972                   = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
10973                               args);
10974                 member = (adjust_result_of_qualified_name_lookup
10975                           (member, BINFO_TYPE (BASELINK_BINFO (member)),
10976                            object_type));
10977               }
10978             else
10979               {
10980                 qualified_name_lookup_error (object_type, tmpl, member);
10981                 return error_mark_node;
10982               }
10983           }
10984         else if (TREE_CODE (member) == SCOPE_REF
10985                  && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
10986                  && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
10987           {
10988             if (complain & tf_error)
10989               {
10990                 if (TYPE_P (TREE_OPERAND (member, 0)))
10991                   error ("%qT is not a class or namespace",
10992                          TREE_OPERAND (member, 0));
10993                 else
10994                   error ("%qD is not a class or namespace",
10995                          TREE_OPERAND (member, 0));
10996               }
10997             return error_mark_node;
10998           }
10999         else if (TREE_CODE (member) == FIELD_DECL)
11000           return finish_non_static_data_member (member, object, NULL_TREE);
11001
11002         return finish_class_member_access_expr (object, member,
11003                                                 /*template_p=*/false);
11004       }
11005
11006     case THROW_EXPR:
11007       return build_throw
11008         (RECUR (TREE_OPERAND (t, 0)));
11009
11010     case CONSTRUCTOR:
11011       {
11012         VEC(constructor_elt,gc) *n;
11013         constructor_elt *ce;
11014         unsigned HOST_WIDE_INT idx;
11015         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11016         bool process_index_p;
11017         int newlen;
11018         bool need_copy_p = false;
11019
11020         if (type == error_mark_node)
11021           return error_mark_node;
11022
11023         /* digest_init will do the wrong thing if we let it.  */
11024         if (type && TYPE_PTRMEMFUNC_P (type))
11025           return t;
11026
11027         /* We do not want to process the index of aggregate
11028            initializers as they are identifier nodes which will be
11029            looked up by digest_init.  */
11030         process_index_p = !(type && IS_AGGR_TYPE (type));
11031
11032         n = VEC_copy (constructor_elt, gc, CONSTRUCTOR_ELTS (t));
11033         newlen = VEC_length (constructor_elt, n);
11034         for (idx = 0; VEC_iterate (constructor_elt, n, idx, ce); idx++)
11035           {
11036             if (ce->index && process_index_p)
11037               ce->index = RECUR (ce->index);
11038
11039             if (PACK_EXPANSION_P (ce->value))
11040               {
11041                 /* Substitute into the pack expansion.  */
11042                 ce->value = tsubst_pack_expansion (ce->value, args, complain,
11043                                                   in_decl);
11044
11045                 if (ce->value == error_mark_node)
11046                   ;
11047                 else if (TREE_VEC_LENGTH (ce->value) == 1)
11048                   /* Just move the argument into place.  */
11049                   ce->value = TREE_VEC_ELT (ce->value, 0);
11050                 else
11051                   {
11052                     /* Update the length of the final CONSTRUCTOR
11053                        arguments vector, and note that we will need to
11054                        copy.*/
11055                     newlen = newlen + TREE_VEC_LENGTH (ce->value) - 1;
11056                     need_copy_p = true;
11057                   }
11058               }
11059             else
11060               ce->value = RECUR (ce->value);
11061           }
11062
11063         if (need_copy_p)
11064           {
11065             VEC(constructor_elt,gc) *old_n = n;
11066
11067             n = VEC_alloc (constructor_elt, gc, newlen);
11068             for (idx = 0; VEC_iterate (constructor_elt, old_n, idx, ce); 
11069                  idx++)
11070               {
11071                 if (TREE_CODE (ce->value) == TREE_VEC)
11072                   {
11073                     int i, len = TREE_VEC_LENGTH (ce->value);
11074                     for (i = 0; i < len; ++i)
11075                       CONSTRUCTOR_APPEND_ELT (n, 0,
11076                                               TREE_VEC_ELT (ce->value, i));
11077                   }
11078                 else
11079                   CONSTRUCTOR_APPEND_ELT (n, 0, ce->value);
11080               }
11081           }
11082
11083         if (TREE_HAS_CONSTRUCTOR (t))
11084           return finish_compound_literal (type, n);
11085
11086         return build_constructor (NULL_TREE, n);
11087       }
11088
11089     case TYPEID_EXPR:
11090       {
11091         tree operand_0 = RECUR (TREE_OPERAND (t, 0));
11092         if (TYPE_P (operand_0))
11093           return get_typeid (operand_0);
11094         return build_typeid (operand_0);
11095       }
11096
11097     case VAR_DECL:
11098       if (!args)
11099         return t;
11100       /* Fall through */
11101
11102     case PARM_DECL:
11103       {
11104         tree r = tsubst_copy (t, args, complain, in_decl);
11105
11106         if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
11107           /* If the original type was a reference, we'll be wrapped in
11108              the appropriate INDIRECT_REF.  */
11109           r = convert_from_reference (r);
11110         return r;
11111       }
11112
11113     case VA_ARG_EXPR:
11114       return build_x_va_arg (RECUR (TREE_OPERAND (t, 0)),
11115                              tsubst_copy (TREE_TYPE (t), args, complain,
11116                                           in_decl));
11117
11118     case OFFSETOF_EXPR:
11119       return finish_offsetof (RECUR (TREE_OPERAND (t, 0)));
11120
11121     case TRAIT_EXPR:
11122       {
11123         tree type1 = tsubst_copy (TRAIT_EXPR_TYPE1 (t), args,
11124                                   complain, in_decl);
11125
11126         tree type2 = TRAIT_EXPR_TYPE2 (t);
11127         if (type2)
11128           type2 = tsubst_copy (type2, args, complain, in_decl);
11129         
11130         return finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2);
11131       }
11132
11133     case STMT_EXPR:
11134       {
11135         tree old_stmt_expr = cur_stmt_expr;
11136         tree stmt_expr = begin_stmt_expr ();
11137
11138         cur_stmt_expr = stmt_expr;
11139         tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl,
11140                      integral_constant_expression_p);
11141         stmt_expr = finish_stmt_expr (stmt_expr, false);
11142         cur_stmt_expr = old_stmt_expr;
11143
11144         return stmt_expr;
11145       }
11146
11147     case CONST_DECL:
11148       t = tsubst_copy (t, args, complain, in_decl);
11149       /* As in finish_id_expression, we resolve enumeration constants
11150          to their underlying values.  */
11151       if (TREE_CODE (t) == CONST_DECL)
11152         {
11153           used_types_insert (TREE_TYPE (t));
11154           return DECL_INITIAL (t);
11155         }
11156       return t;
11157
11158     default:
11159       /* Handle Objective-C++ constructs, if appropriate.  */
11160       {
11161         tree subst
11162           = objcp_tsubst_copy_and_build (t, args, complain,
11163                                          in_decl, /*function_p=*/false);
11164         if (subst)
11165           return subst;
11166       }
11167       return tsubst_copy (t, args, complain, in_decl);
11168     }
11169
11170 #undef RECUR
11171 }
11172
11173 /* Verify that the instantiated ARGS are valid. For type arguments,
11174    make sure that the type's linkage is ok. For non-type arguments,
11175    make sure they are constants if they are integral or enumerations.
11176    Emit an error under control of COMPLAIN, and return TRUE on error.  */
11177
11178 static bool
11179 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
11180 {
11181   int ix, len = DECL_NTPARMS (tmpl);
11182   bool result = false;
11183
11184   for (ix = 0; ix != len; ix++)
11185     {
11186       tree t = TREE_VEC_ELT (args, ix);
11187
11188       if (TYPE_P (t))
11189         {
11190           /* [basic.link]: A name with no linkage (notably, the name
11191              of a class or enumeration declared in a local scope)
11192              shall not be used to declare an entity with linkage.
11193              This implies that names with no linkage cannot be used as
11194              template arguments.  */
11195           tree nt = no_linkage_check (t, /*relaxed_p=*/false);
11196
11197           if (nt)
11198             {
11199               /* DR 488 makes use of a type with no linkage cause
11200                  type deduction to fail.  */
11201               if (complain & tf_error)
11202                 {
11203                   if (TYPE_ANONYMOUS_P (nt))
11204                     error ("%qT is/uses anonymous type", t);
11205                   else
11206                     error ("template argument for %qD uses local type %qT",
11207                            tmpl, t);
11208                 }
11209               result = true;
11210             }
11211           /* In order to avoid all sorts of complications, we do not
11212              allow variably-modified types as template arguments.  */
11213           else if (variably_modified_type_p (t, NULL_TREE))
11214             {
11215               if (complain & tf_error)
11216                 error ("%qT is a variably modified type", t);
11217               result = true;
11218             }
11219         }
11220       /* A non-type argument of integral or enumerated type must be a
11221          constant.  */
11222       else if (TREE_TYPE (t)
11223                && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
11224                && !TREE_CONSTANT (t))
11225         {
11226           if (complain & tf_error)
11227             error ("integral expression %qE is not constant", t);
11228           result = true;
11229         }
11230     }
11231   if (result && (complain & tf_error))
11232     error ("  trying to instantiate %qD", tmpl);
11233   return result;
11234 }
11235
11236 /* Instantiate the indicated variable or function template TMPL with
11237    the template arguments in TARG_PTR.  */
11238
11239 tree
11240 instantiate_template (tree tmpl, tree targ_ptr, tsubst_flags_t complain)
11241 {
11242   tree fndecl;
11243   tree gen_tmpl;
11244   tree spec;
11245   HOST_WIDE_INT saved_processing_template_decl;
11246
11247   if (tmpl == error_mark_node)
11248     return error_mark_node;
11249
11250   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
11251
11252   /* If this function is a clone, handle it specially.  */
11253   if (DECL_CLONED_FUNCTION_P (tmpl))
11254     {
11255       tree spec;
11256       tree clone;
11257
11258       spec = instantiate_template (DECL_CLONED_FUNCTION (tmpl), targ_ptr,
11259                                    complain);
11260       if (spec == error_mark_node)
11261         return error_mark_node;
11262
11263       /* Look for the clone.  */
11264       FOR_EACH_CLONE (clone, spec)
11265         if (DECL_NAME (clone) == DECL_NAME (tmpl))
11266           return clone;
11267       /* We should always have found the clone by now.  */
11268       gcc_unreachable ();
11269       return NULL_TREE;
11270     }
11271
11272   /* Check to see if we already have this specialization.  */
11273   spec = retrieve_specialization (tmpl, targ_ptr,
11274                                   /*class_specializations_p=*/false);
11275   if (spec != NULL_TREE)
11276     return spec;
11277
11278   gen_tmpl = most_general_template (tmpl);
11279   if (tmpl != gen_tmpl)
11280     {
11281       /* The TMPL is a partial instantiation.  To get a full set of
11282          arguments we must add the arguments used to perform the
11283          partial instantiation.  */
11284       targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
11285                                               targ_ptr);
11286
11287       /* Check to see if we already have this specialization.  */
11288       spec = retrieve_specialization (gen_tmpl, targ_ptr,
11289                                       /*class_specializations_p=*/false);
11290       if (spec != NULL_TREE)
11291         return spec;
11292     }
11293
11294   if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
11295                                complain))
11296     return error_mark_node;
11297
11298   /* We are building a FUNCTION_DECL, during which the access of its
11299      parameters and return types have to be checked.  However this
11300      FUNCTION_DECL which is the desired context for access checking
11301      is not built yet.  We solve this chicken-and-egg problem by
11302      deferring all checks until we have the FUNCTION_DECL.  */
11303   push_deferring_access_checks (dk_deferred);
11304
11305   /* Although PROCESSING_TEMPLATE_DECL may be true at this point
11306      (because, for example, we have encountered a non-dependent
11307      function call in the body of a template function and must now
11308      determine which of several overloaded functions will be called),
11309      within the instantiation itself we are not processing a
11310      template.  */  
11311   saved_processing_template_decl = processing_template_decl;
11312   processing_template_decl = 0;
11313   /* Substitute template parameters to obtain the specialization.  */
11314   fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
11315                    targ_ptr, complain, gen_tmpl);
11316   processing_template_decl = saved_processing_template_decl;
11317   if (fndecl == error_mark_node)
11318     return error_mark_node;
11319
11320   /* Now we know the specialization, compute access previously
11321      deferred.  */
11322   push_access_scope (fndecl);
11323   perform_deferred_access_checks ();
11324   pop_access_scope (fndecl);
11325   pop_deferring_access_checks ();
11326
11327   /* The DECL_TI_TEMPLATE should always be the immediate parent
11328      template, not the most general template.  */
11329   DECL_TI_TEMPLATE (fndecl) = tmpl;
11330
11331   /* If we've just instantiated the main entry point for a function,
11332      instantiate all the alternate entry points as well.  We do this
11333      by cloning the instantiation of the main entry point, not by
11334      instantiating the template clones.  */
11335   if (TREE_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (TREE_CHAIN (gen_tmpl)))
11336     clone_function_decl (fndecl, /*update_method_vec_p=*/0);
11337
11338   return fndecl;
11339 }
11340
11341 /* The FN is a TEMPLATE_DECL for a function.  The ARGS are the
11342    arguments that are being used when calling it.  TARGS is a vector
11343    into which the deduced template arguments are placed.
11344
11345    Return zero for success, 2 for an incomplete match that doesn't resolve
11346    all the types, and 1 for complete failure.  An error message will be
11347    printed only for an incomplete match.
11348
11349    If FN is a conversion operator, or we are trying to produce a specific
11350    specialization, RETURN_TYPE is the return type desired.
11351
11352    The EXPLICIT_TARGS are explicit template arguments provided via a
11353    template-id.
11354
11355    The parameter STRICT is one of:
11356
11357    DEDUCE_CALL:
11358      We are deducing arguments for a function call, as in
11359      [temp.deduct.call].
11360
11361    DEDUCE_CONV:
11362      We are deducing arguments for a conversion function, as in
11363      [temp.deduct.conv].
11364
11365    DEDUCE_EXACT:
11366      We are deducing arguments when doing an explicit instantiation
11367      as in [temp.explicit], when determining an explicit specialization
11368      as in [temp.expl.spec], or when taking the address of a function
11369      template, as in [temp.deduct.funcaddr].  */
11370
11371 int
11372 fn_type_unification (tree fn,
11373                      tree explicit_targs,
11374                      tree targs,
11375                      tree args,
11376                      tree return_type,
11377                      unification_kind_t strict,
11378                      int flags)
11379 {
11380   tree parms;
11381   tree fntype;
11382   int result;
11383   bool incomplete_argument_packs_p = false;
11384
11385   gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
11386
11387   fntype = TREE_TYPE (fn);
11388   if (explicit_targs)
11389     {
11390       /* [temp.deduct]
11391
11392          The specified template arguments must match the template
11393          parameters in kind (i.e., type, nontype, template), and there
11394          must not be more arguments than there are parameters;
11395          otherwise type deduction fails.
11396
11397          Nontype arguments must match the types of the corresponding
11398          nontype template parameters, or must be convertible to the
11399          types of the corresponding nontype parameters as specified in
11400          _temp.arg.nontype_, otherwise type deduction fails.
11401
11402          All references in the function type of the function template
11403          to the corresponding template parameters are replaced by the
11404          specified template argument values.  If a substitution in a
11405          template parameter or in the function type of the function
11406          template results in an invalid type, type deduction fails.  */
11407       tree tparms = DECL_INNERMOST_TEMPLATE_PARMS (fn);
11408       int i, len = TREE_VEC_LENGTH (tparms);
11409       tree converted_args;
11410       bool incomplete = false;
11411
11412       if (explicit_targs == error_mark_node)
11413         return 1;
11414
11415       converted_args
11416         = (coerce_template_parms (tparms, explicit_targs, NULL_TREE, tf_none,
11417                                   /*require_all_args=*/false,
11418                                   /*use_default_args=*/false));
11419       if (converted_args == error_mark_node)
11420         return 1;
11421
11422       /* Substitute the explicit args into the function type.  This is
11423          necessary so that, for instance, explicitly declared function
11424          arguments can match null pointed constants.  If we were given
11425          an incomplete set of explicit args, we must not do semantic
11426          processing during substitution as we could create partial
11427          instantiations.  */
11428       for (i = 0; i < len; i++)
11429         {
11430           tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
11431           bool parameter_pack = false;
11432
11433           /* Dig out the actual parm.  */
11434           if (TREE_CODE (parm) == TYPE_DECL
11435               || TREE_CODE (parm) == TEMPLATE_DECL)
11436             {
11437               parm = TREE_TYPE (parm);
11438               parameter_pack = TEMPLATE_TYPE_PARAMETER_PACK (parm);
11439             }
11440           else if (TREE_CODE (parm) == PARM_DECL)
11441             {
11442               parm = DECL_INITIAL (parm);
11443               parameter_pack = TEMPLATE_PARM_PARAMETER_PACK (parm);
11444             }
11445
11446           if (parameter_pack)
11447             {
11448               int level, idx;
11449               tree targ;
11450               template_parm_level_and_index (parm, &level, &idx);
11451
11452               /* Mark the argument pack as "incomplete". We could
11453                  still deduce more arguments during unification.  */
11454               targ = TMPL_ARG (converted_args, level, idx);
11455               if (targ)
11456                 {
11457                   ARGUMENT_PACK_INCOMPLETE_P(targ) = 1;
11458                   ARGUMENT_PACK_EXPLICIT_ARGS (targ) 
11459                     = ARGUMENT_PACK_ARGS (targ);
11460                 }
11461
11462               /* We have some incomplete argument packs.  */
11463               incomplete_argument_packs_p = true;
11464             }
11465         }
11466
11467       if (incomplete_argument_packs_p)
11468         /* Any substitution is guaranteed to be incomplete if there
11469            are incomplete argument packs, because we can still deduce
11470            more arguments.  */
11471         incomplete = 1;
11472       else
11473         incomplete = NUM_TMPL_ARGS (explicit_targs) != NUM_TMPL_ARGS (targs);
11474
11475       processing_template_decl += incomplete;
11476       fntype = tsubst (fntype, converted_args, tf_none, NULL_TREE);
11477       processing_template_decl -= incomplete;
11478
11479       if (fntype == error_mark_node)
11480         return 1;
11481
11482       /* Place the explicitly specified arguments in TARGS.  */
11483       for (i = NUM_TMPL_ARGS (converted_args); i--;)
11484         TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
11485     }
11486
11487   /* Never do unification on the 'this' parameter.  */
11488   parms = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (fntype));
11489
11490   if (return_type)
11491     {
11492       parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
11493       args = tree_cons (NULL_TREE, return_type, args);
11494     }
11495
11496   /* We allow incomplete unification without an error message here
11497      because the standard doesn't seem to explicitly prohibit it.  Our
11498      callers must be ready to deal with unification failures in any
11499      event.  */
11500   result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
11501                                   targs, parms, args, /*subr=*/0,
11502                                   strict, flags);
11503
11504   if (result == 0 && incomplete_argument_packs_p)
11505     {
11506       int i, len = NUM_TMPL_ARGS (targs);
11507
11508       /* Clear the "incomplete" flags on all argument packs.  */
11509       for (i = 0; i < len; i++)
11510         {
11511           tree arg = TREE_VEC_ELT (targs, i);
11512           if (ARGUMENT_PACK_P (arg))
11513             {
11514               ARGUMENT_PACK_INCOMPLETE_P (arg) = 0;
11515               ARGUMENT_PACK_EXPLICIT_ARGS (arg) = NULL_TREE;
11516             }
11517         }
11518     }
11519
11520   if (result == 0)
11521     /* All is well so far.  Now, check:
11522
11523        [temp.deduct]
11524
11525        When all template arguments have been deduced, all uses of
11526        template parameters in nondeduced contexts are replaced with
11527        the corresponding deduced argument values.  If the
11528        substitution results in an invalid type, as described above,
11529        type deduction fails.  */
11530     if (tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE)
11531         == error_mark_node)
11532       return 1;
11533
11534   return result;
11535 }
11536
11537 /* Adjust types before performing type deduction, as described in
11538    [temp.deduct.call] and [temp.deduct.conv].  The rules in these two
11539    sections are symmetric.  PARM is the type of a function parameter
11540    or the return type of the conversion function.  ARG is the type of
11541    the argument passed to the call, or the type of the value
11542    initialized with the result of the conversion function.
11543    ARG_EXPR is the original argument expression, which may be null.  */
11544
11545 static int
11546 maybe_adjust_types_for_deduction (unification_kind_t strict,
11547                                   tree* parm,
11548                                   tree* arg,
11549                                   tree arg_expr)
11550 {
11551   int result = 0;
11552
11553   switch (strict)
11554     {
11555     case DEDUCE_CALL:
11556       break;
11557
11558     case DEDUCE_CONV:
11559       {
11560         /* Swap PARM and ARG throughout the remainder of this
11561            function; the handling is precisely symmetric since PARM
11562            will initialize ARG rather than vice versa.  */
11563         tree* temp = parm;
11564         parm = arg;
11565         arg = temp;
11566         break;
11567       }
11568
11569     case DEDUCE_EXACT:
11570       /* There is nothing to do in this case.  */
11571       return 0;
11572
11573     default:
11574       gcc_unreachable ();
11575     }
11576
11577   if (TREE_CODE (*parm) != REFERENCE_TYPE)
11578     {
11579       /* [temp.deduct.call]
11580
11581          If P is not a reference type:
11582
11583          --If A is an array type, the pointer type produced by the
11584          array-to-pointer standard conversion (_conv.array_) is
11585          used in place of A for type deduction; otherwise,
11586
11587          --If A is a function type, the pointer type produced by
11588          the function-to-pointer standard conversion
11589          (_conv.func_) is used in place of A for type deduction;
11590          otherwise,
11591
11592          --If A is a cv-qualified type, the top level
11593          cv-qualifiers of A's type are ignored for type
11594          deduction.  */
11595       if (TREE_CODE (*arg) == ARRAY_TYPE)
11596         *arg = build_pointer_type (TREE_TYPE (*arg));
11597       else if (TREE_CODE (*arg) == FUNCTION_TYPE)
11598         *arg = build_pointer_type (*arg);
11599       else
11600         *arg = TYPE_MAIN_VARIANT (*arg);
11601     }
11602
11603   /* From C++0x [14.8.2.1/3 temp.deduct.call] (after DR606), "If P is
11604      of the form T&&, where T is a template parameter, and the argument
11605      is an lvalue, T is deduced as A& */
11606   if (TREE_CODE (*parm) == REFERENCE_TYPE
11607       && TYPE_REF_IS_RVALUE (*parm)
11608       && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
11609       && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
11610       && arg_expr && real_lvalue_p (arg_expr))
11611     *arg = build_reference_type (*arg);
11612
11613   /* [temp.deduct.call]
11614
11615      If P is a cv-qualified type, the top level cv-qualifiers
11616      of P's type are ignored for type deduction.  If P is a
11617      reference type, the type referred to by P is used for
11618      type deduction.  */
11619   *parm = TYPE_MAIN_VARIANT (*parm);
11620   if (TREE_CODE (*parm) == REFERENCE_TYPE)
11621     {
11622       *parm = TREE_TYPE (*parm);
11623       result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
11624     }
11625
11626   /* DR 322. For conversion deduction, remove a reference type on parm
11627      too (which has been swapped into ARG).  */
11628   if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
11629     *arg = TREE_TYPE (*arg);
11630
11631   return result;
11632 }
11633
11634 /* Most parms like fn_type_unification.
11635
11636    If SUBR is 1, we're being called recursively (to unify the
11637    arguments of a function or method parameter of a function
11638    template). */
11639
11640 static int
11641 type_unification_real (tree tparms,
11642                        tree targs,
11643                        tree xparms,
11644                        tree xargs,
11645                        int subr,
11646                        unification_kind_t strict,
11647                        int flags)
11648 {
11649   tree parm, arg, arg_expr;
11650   int i;
11651   int ntparms = TREE_VEC_LENGTH (tparms);
11652   int sub_strict;
11653   int saw_undeduced = 0;
11654   tree parms, args;
11655
11656   gcc_assert (TREE_CODE (tparms) == TREE_VEC);
11657   gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
11658   gcc_assert (!xargs || TREE_CODE (xargs) == TREE_LIST);
11659   gcc_assert (ntparms > 0);
11660
11661   switch (strict)
11662     {
11663     case DEDUCE_CALL:
11664       sub_strict = (UNIFY_ALLOW_OUTER_LEVEL | UNIFY_ALLOW_MORE_CV_QUAL
11665                     | UNIFY_ALLOW_DERIVED);
11666       break;
11667
11668     case DEDUCE_CONV:
11669       sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
11670       break;
11671
11672     case DEDUCE_EXACT:
11673       sub_strict = UNIFY_ALLOW_NONE;
11674       break;
11675
11676     default:
11677       gcc_unreachable ();
11678     }
11679
11680  again:
11681   parms = xparms;
11682   args = xargs;
11683
11684   while (parms && parms != void_list_node
11685          && args && args != void_list_node)
11686     {
11687       if (TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
11688         break;
11689
11690       parm = TREE_VALUE (parms);
11691       parms = TREE_CHAIN (parms);
11692       arg = TREE_VALUE (args);
11693       args = TREE_CHAIN (args);
11694       arg_expr = NULL;
11695
11696       if (arg == error_mark_node)
11697         return 1;
11698       if (arg == unknown_type_node)
11699         /* We can't deduce anything from this, but we might get all the
11700            template args from other function args.  */
11701         continue;
11702
11703       /* Conversions will be performed on a function argument that
11704          corresponds with a function parameter that contains only
11705          non-deducible template parameters and explicitly specified
11706          template parameters.  */
11707       if (!uses_template_parms (parm))
11708         {
11709           tree type;
11710
11711           if (!TYPE_P (arg))
11712             type = TREE_TYPE (arg);
11713           else
11714             type = arg;
11715
11716           if (same_type_p (parm, type))
11717             continue;
11718           if (strict != DEDUCE_EXACT
11719               && can_convert_arg (parm, type, TYPE_P (arg) ? NULL_TREE : arg,
11720                                   flags))
11721             continue;
11722
11723           return 1;
11724         }
11725
11726       if (!TYPE_P (arg))
11727         {
11728           gcc_assert (TREE_TYPE (arg) != NULL_TREE);
11729           if (type_unknown_p (arg))
11730             {
11731               /* [temp.deduct.type] 
11732
11733                  A template-argument can be deduced from a pointer to
11734                  function or pointer to member function argument if
11735                  the set of overloaded functions does not contain
11736                  function templates and at most one of a set of
11737                  overloaded functions provides a unique match.  */
11738               if (resolve_overloaded_unification
11739                   (tparms, targs, parm, arg, strict, sub_strict))
11740                 continue;
11741
11742               return 1;
11743             }
11744           arg_expr = arg;
11745           arg = unlowered_expr_type (arg);
11746           if (arg == error_mark_node)
11747             return 1;
11748         }
11749
11750       {
11751         int arg_strict = sub_strict;
11752
11753         if (!subr)
11754           arg_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg,
11755                                                           arg_expr);
11756
11757         if (unify (tparms, targs, parm, arg, arg_strict))
11758           return 1;
11759       }
11760     }
11761
11762
11763   if (parms 
11764       && parms != void_list_node
11765       && TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
11766     {
11767       /* Unify the remaining arguments with the pack expansion type.  */
11768       tree argvec;
11769       tree parmvec = make_tree_vec (1);
11770       int len = 0;
11771       tree t;
11772
11773       /* Count the number of arguments that remain.  */
11774       for (t = args; t && t != void_list_node; t = TREE_CHAIN (t))
11775         len++;
11776         
11777       /* Allocate a TREE_VEC and copy in all of the arguments */ 
11778       argvec = make_tree_vec (len);
11779       for (i = 0; args && args != void_list_node; args = TREE_CHAIN (args))
11780         {
11781           TREE_VEC_ELT (argvec, i) = TREE_VALUE (args);
11782           ++i;
11783         }
11784
11785       /* Copy the parameter into parmvec.  */
11786       TREE_VEC_ELT (parmvec, 0) = TREE_VALUE (parms);
11787       if (unify_pack_expansion (tparms, targs, parmvec, argvec, strict,
11788                                 /*call_args_p=*/true, /*subr=*/subr))
11789         return 1;
11790
11791       /* Advance to the end of the list of parameters.  */
11792       parms = TREE_CHAIN (parms);
11793     }
11794
11795   /* Fail if we've reached the end of the parm list, and more args
11796      are present, and the parm list isn't variadic.  */
11797   if (args && args != void_list_node && parms == void_list_node)
11798     return 1;
11799   /* Fail if parms are left and they don't have default values.  */
11800   if (parms && parms != void_list_node
11801       && TREE_PURPOSE (parms) == NULL_TREE)
11802     return 1;
11803
11804   if (!subr)
11805     for (i = 0; i < ntparms; i++)
11806       if (!TREE_VEC_ELT (targs, i))
11807         {
11808           tree tparm;
11809
11810           if (TREE_VEC_ELT (tparms, i) == error_mark_node)
11811             continue;
11812
11813           tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
11814
11815           /* If this is an undeduced nontype parameter that depends on
11816              a type parameter, try another pass; its type may have been
11817              deduced from a later argument than the one from which
11818              this parameter can be deduced.  */
11819           if (TREE_CODE (tparm) == PARM_DECL
11820               && uses_template_parms (TREE_TYPE (tparm))
11821               && !saw_undeduced++)
11822             goto again;
11823
11824           /* Core issue #226 (C++0x) [temp.deduct]:
11825
11826                If a template argument has not been deduced, its
11827                default template argument, if any, is used. 
11828
11829              When we are in C++98 mode, TREE_PURPOSE will either
11830              be NULL_TREE or ERROR_MARK_NODE, so we do not need
11831              to explicitly check cxx_dialect here.  */
11832           if (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)))
11833             {
11834               tree arg = tsubst (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)), 
11835                                  targs, tf_none, NULL_TREE);
11836               if (arg == error_mark_node)
11837                 return 1;
11838               else
11839                 {
11840                   TREE_VEC_ELT (targs, i) = arg;
11841                   continue;
11842                 }
11843             }
11844
11845           /* If the type parameter is a parameter pack, then it will
11846              be deduced to an empty parameter pack.  */
11847           if (template_parameter_pack_p (tparm))
11848             {
11849               tree arg;
11850
11851               if (TREE_CODE (tparm) == TEMPLATE_PARM_INDEX)
11852                 {
11853                   arg = make_node (NONTYPE_ARGUMENT_PACK);
11854                   TREE_TYPE (arg)  = TREE_TYPE (TEMPLATE_PARM_DECL (tparm));
11855                   TREE_CONSTANT (arg) = 1;
11856                 }
11857               else
11858                 arg = make_node (TYPE_ARGUMENT_PACK);
11859
11860               SET_ARGUMENT_PACK_ARGS (arg, make_tree_vec (0));
11861
11862               TREE_VEC_ELT (targs, i) = arg;
11863               continue;
11864             }
11865
11866           return 2;
11867         }
11868
11869   return 0;
11870 }
11871
11872 /* Subroutine of type_unification_real.  Args are like the variables
11873    at the call site.  ARG is an overloaded function (or template-id);
11874    we try deducing template args from each of the overloads, and if
11875    only one succeeds, we go with that.  Modifies TARGS and returns
11876    true on success.  */
11877
11878 static bool
11879 resolve_overloaded_unification (tree tparms,
11880                                 tree targs,
11881                                 tree parm,
11882                                 tree arg,
11883                                 unification_kind_t strict,
11884                                 int sub_strict)
11885 {
11886   tree tempargs = copy_node (targs);
11887   int good = 0;
11888   bool addr_p;
11889
11890   if (TREE_CODE (arg) == ADDR_EXPR)
11891     {
11892       arg = TREE_OPERAND (arg, 0);
11893       addr_p = true;
11894     }
11895   else
11896     addr_p = false;
11897
11898   if (TREE_CODE (arg) == COMPONENT_REF)
11899     /* Handle `&x' where `x' is some static or non-static member
11900        function name.  */
11901     arg = TREE_OPERAND (arg, 1);
11902
11903   if (TREE_CODE (arg) == OFFSET_REF)
11904     arg = TREE_OPERAND (arg, 1);
11905
11906   /* Strip baselink information.  */
11907   if (BASELINK_P (arg))
11908     arg = BASELINK_FUNCTIONS (arg);
11909
11910   if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
11911     {
11912       /* If we got some explicit template args, we need to plug them into
11913          the affected templates before we try to unify, in case the
11914          explicit args will completely resolve the templates in question.  */
11915
11916       tree expl_subargs = TREE_OPERAND (arg, 1);
11917       arg = TREE_OPERAND (arg, 0);
11918
11919       for (; arg; arg = OVL_NEXT (arg))
11920         {
11921           tree fn = OVL_CURRENT (arg);
11922           tree subargs, elem;
11923
11924           if (TREE_CODE (fn) != TEMPLATE_DECL)
11925             continue;
11926
11927           subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
11928                                   expl_subargs, /*check_ret=*/false);
11929           if (subargs)
11930             {
11931               elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
11932               good += try_one_overload (tparms, targs, tempargs, parm,
11933                                         elem, strict, sub_strict, addr_p);
11934             }
11935         }
11936     }
11937   else if (TREE_CODE (arg) != OVERLOAD
11938            && TREE_CODE (arg) != FUNCTION_DECL)
11939     /* If ARG is, for example, "(0, &f)" then its type will be unknown
11940        -- but the deduction does not succeed because the expression is
11941        not just the function on its own.  */
11942     return false;
11943   else
11944     for (; arg; arg = OVL_NEXT (arg))
11945       good += try_one_overload (tparms, targs, tempargs, parm,
11946                                 TREE_TYPE (OVL_CURRENT (arg)),
11947                                 strict, sub_strict, addr_p);
11948
11949   /* [temp.deduct.type] A template-argument can be deduced from a pointer
11950      to function or pointer to member function argument if the set of
11951      overloaded functions does not contain function templates and at most
11952      one of a set of overloaded functions provides a unique match.
11953
11954      So if we found multiple possibilities, we return success but don't
11955      deduce anything.  */
11956
11957   if (good == 1)
11958     {
11959       int i = TREE_VEC_LENGTH (targs);
11960       for (; i--; )
11961         if (TREE_VEC_ELT (tempargs, i))
11962           TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
11963     }
11964   if (good)
11965     return true;
11966
11967   return false;
11968 }
11969
11970 /* Subroutine of resolve_overloaded_unification; does deduction for a single
11971    overload.  Fills TARGS with any deduced arguments, or error_mark_node if
11972    different overloads deduce different arguments for a given parm.
11973    ADDR_P is true if the expression for which deduction is being
11974    performed was of the form "& fn" rather than simply "fn".
11975
11976    Returns 1 on success.  */
11977
11978 static int
11979 try_one_overload (tree tparms,
11980                   tree orig_targs,
11981                   tree targs,
11982                   tree parm,
11983                   tree arg,
11984                   unification_kind_t strict,
11985                   int sub_strict,
11986                   bool addr_p)
11987 {
11988   int nargs;
11989   tree tempargs;
11990   int i;
11991
11992   /* [temp.deduct.type] A template-argument can be deduced from a pointer
11993      to function or pointer to member function argument if the set of
11994      overloaded functions does not contain function templates and at most
11995      one of a set of overloaded functions provides a unique match.
11996
11997      So if this is a template, just return success.  */
11998
11999   if (uses_template_parms (arg))
12000     return 1;
12001
12002   if (TREE_CODE (arg) == METHOD_TYPE)
12003     arg = build_ptrmemfunc_type (build_pointer_type (arg));
12004   else if (addr_p)
12005     arg = build_pointer_type (arg);
12006
12007   sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
12008
12009   /* We don't copy orig_targs for this because if we have already deduced
12010      some template args from previous args, unify would complain when we
12011      try to deduce a template parameter for the same argument, even though
12012      there isn't really a conflict.  */
12013   nargs = TREE_VEC_LENGTH (targs);
12014   tempargs = make_tree_vec (nargs);
12015
12016   if (unify (tparms, tempargs, parm, arg, sub_strict) != 0)
12017     return 0;
12018
12019   /* First make sure we didn't deduce anything that conflicts with
12020      explicitly specified args.  */
12021   for (i = nargs; i--; )
12022     {
12023       tree elt = TREE_VEC_ELT (tempargs, i);
12024       tree oldelt = TREE_VEC_ELT (orig_targs, i);
12025
12026       if (!elt)
12027         /*NOP*/;
12028       else if (uses_template_parms (elt))
12029         /* Since we're unifying against ourselves, we will fill in
12030            template args used in the function parm list with our own
12031            template parms.  Discard them.  */
12032         TREE_VEC_ELT (tempargs, i) = NULL_TREE;
12033       else if (oldelt && !template_args_equal (oldelt, elt))
12034         return 0;
12035     }
12036
12037   for (i = nargs; i--; )
12038     {
12039       tree elt = TREE_VEC_ELT (tempargs, i);
12040
12041       if (elt)
12042         TREE_VEC_ELT (targs, i) = elt;
12043     }
12044
12045   return 1;
12046 }
12047
12048 /* PARM is a template class (perhaps with unbound template
12049    parameters).  ARG is a fully instantiated type.  If ARG can be
12050    bound to PARM, return ARG, otherwise return NULL_TREE.  TPARMS and
12051    TARGS are as for unify.  */
12052
12053 static tree
12054 try_class_unification (tree tparms, tree targs, tree parm, tree arg)
12055 {
12056   tree copy_of_targs;
12057
12058   if (!CLASSTYPE_TEMPLATE_INFO (arg)
12059       || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
12060           != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
12061     return NULL_TREE;
12062
12063   /* We need to make a new template argument vector for the call to
12064      unify.  If we used TARGS, we'd clutter it up with the result of
12065      the attempted unification, even if this class didn't work out.
12066      We also don't want to commit ourselves to all the unifications
12067      we've already done, since unification is supposed to be done on
12068      an argument-by-argument basis.  In other words, consider the
12069      following pathological case:
12070
12071        template <int I, int J, int K>
12072        struct S {};
12073
12074        template <int I, int J>
12075        struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
12076
12077        template <int I, int J, int K>
12078        void f(S<I, J, K>, S<I, I, I>);
12079
12080        void g() {
12081          S<0, 0, 0> s0;
12082          S<0, 1, 2> s2;
12083
12084          f(s0, s2);
12085        }
12086
12087      Now, by the time we consider the unification involving `s2', we
12088      already know that we must have `f<0, 0, 0>'.  But, even though
12089      `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
12090      because there are two ways to unify base classes of S<0, 1, 2>
12091      with S<I, I, I>.  If we kept the already deduced knowledge, we
12092      would reject the possibility I=1.  */
12093   copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
12094
12095   /* If unification failed, we're done.  */
12096   if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
12097              CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE))
12098     return NULL_TREE;
12099
12100   return arg;
12101 }
12102
12103 /* Given a template type PARM and a class type ARG, find the unique
12104    base type in ARG that is an instance of PARM.  We do not examine
12105    ARG itself; only its base-classes.  If there is not exactly one
12106    appropriate base class, return NULL_TREE.  PARM may be the type of
12107    a partial specialization, as well as a plain template type.  Used
12108    by unify.  */
12109
12110 static tree
12111 get_template_base (tree tparms, tree targs, tree parm, tree arg)
12112 {
12113   tree rval = NULL_TREE;
12114   tree binfo;
12115
12116   gcc_assert (IS_AGGR_TYPE_CODE (TREE_CODE (arg)));
12117
12118   binfo = TYPE_BINFO (complete_type (arg));
12119   if (!binfo)
12120     /* The type could not be completed.  */
12121     return NULL_TREE;
12122
12123   /* Walk in inheritance graph order.  The search order is not
12124      important, and this avoids multiple walks of virtual bases.  */
12125   for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
12126     {
12127       tree r = try_class_unification (tparms, targs, parm, BINFO_TYPE (binfo));
12128
12129       if (r)
12130         {
12131           /* If there is more than one satisfactory baseclass, then:
12132
12133                [temp.deduct.call]
12134
12135               If they yield more than one possible deduced A, the type
12136               deduction fails.
12137
12138              applies.  */
12139           if (rval && !same_type_p (r, rval))
12140             return NULL_TREE;
12141
12142           rval = r;
12143         }
12144     }
12145
12146   return rval;
12147 }
12148
12149 /* Returns the level of DECL, which declares a template parameter.  */
12150
12151 static int
12152 template_decl_level (tree decl)
12153 {
12154   switch (TREE_CODE (decl))
12155     {
12156     case TYPE_DECL:
12157     case TEMPLATE_DECL:
12158       return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
12159
12160     case PARM_DECL:
12161       return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
12162
12163     default:
12164       gcc_unreachable ();
12165     }
12166   return 0;
12167 }
12168
12169 /* Decide whether ARG can be unified with PARM, considering only the
12170    cv-qualifiers of each type, given STRICT as documented for unify.
12171    Returns nonzero iff the unification is OK on that basis.  */
12172
12173 static int
12174 check_cv_quals_for_unify (int strict, tree arg, tree parm)
12175 {
12176   int arg_quals = cp_type_quals (arg);
12177   int parm_quals = cp_type_quals (parm);
12178
12179   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
12180       && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
12181     {
12182       /*  Although a CVR qualifier is ignored when being applied to a
12183           substituted template parameter ([8.3.2]/1 for example), that
12184           does not apply during deduction [14.8.2.4]/1, (even though
12185           that is not explicitly mentioned, [14.8.2.4]/9 indicates
12186           this).  Except when we're allowing additional CV qualifiers
12187           at the outer level [14.8.2.1]/3,1st bullet.  */
12188       if ((TREE_CODE (arg) == REFERENCE_TYPE
12189            || TREE_CODE (arg) == FUNCTION_TYPE
12190            || TREE_CODE (arg) == METHOD_TYPE)
12191           && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
12192         return 0;
12193
12194       if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
12195           && (parm_quals & TYPE_QUAL_RESTRICT))
12196         return 0;
12197     }
12198
12199   if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
12200       && (arg_quals & parm_quals) != parm_quals)
12201     return 0;
12202
12203   if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
12204       && (parm_quals & arg_quals) != arg_quals)
12205     return 0;
12206
12207   return 1;
12208 }
12209
12210 /* Determines the LEVEL and INDEX for the template parameter PARM.  */
12211 void 
12212 template_parm_level_and_index (tree parm, int* level, int* index)
12213 {
12214   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
12215       || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
12216       || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
12217     {
12218       *index = TEMPLATE_TYPE_IDX (parm);
12219       *level = TEMPLATE_TYPE_LEVEL (parm);
12220     }
12221   else
12222     {
12223       *index = TEMPLATE_PARM_IDX (parm);
12224       *level = TEMPLATE_PARM_LEVEL (parm);
12225     }
12226 }
12227
12228 /* Unifies the remaining arguments in PACKED_ARGS with the pack
12229    expansion at the end of PACKED_PARMS. Returns 0 if the type
12230    deduction succeeds, 1 otherwise. STRICT is the same as in
12231    unify. CALL_ARGS_P is true iff PACKED_ARGS is actually a function
12232    call argument list. We'll need to adjust the arguments to make them
12233    types. SUBR tells us if this is from a recursive call to
12234    type_unification_real.  */
12235 int
12236 unify_pack_expansion (tree tparms, tree targs, tree packed_parms, 
12237                       tree packed_args, int strict, bool call_args_p,
12238                       bool subr)
12239 {
12240   tree parm 
12241     = TREE_VEC_ELT (packed_parms, TREE_VEC_LENGTH (packed_parms) - 1);
12242   tree pattern = PACK_EXPANSION_PATTERN (parm);
12243   tree pack, packs = NULL_TREE;
12244   int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
12245   int len = TREE_VEC_LENGTH (packed_args);
12246
12247   /* Determine the parameter packs we will be deducing from the
12248      pattern, and record their current deductions.  */
12249   for (pack = PACK_EXPANSION_PARAMETER_PACKS (parm); 
12250        pack; pack = TREE_CHAIN (pack))
12251     {
12252       tree parm_pack = TREE_VALUE (pack);
12253       int idx, level;
12254
12255       /* Determine the index and level of this parameter pack.  */
12256       template_parm_level_and_index (parm_pack, &level, &idx);
12257
12258       /* Keep track of the parameter packs and their corresponding
12259          argument packs.  */
12260       packs = tree_cons (parm_pack, TMPL_ARG (targs, level, idx), packs);
12261       TREE_TYPE (packs) = make_tree_vec (len - start);
12262     }
12263   
12264   /* Loop through all of the arguments that have not yet been
12265      unified and unify each with the pattern.  */
12266   for (i = start; i < len; i++)
12267     {
12268       tree parm = pattern;
12269
12270       /* For each parameter pack, clear out the deduced value so that
12271          we can deduce it again.  */
12272       for (pack = packs; pack; pack = TREE_CHAIN (pack))
12273         {
12274           int idx, level;
12275           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12276
12277           TMPL_ARG (targs, level, idx) = NULL_TREE;
12278         }
12279
12280       /* Unify the pattern with the current argument.  */
12281       {
12282         tree arg = TREE_VEC_ELT (packed_args, i);
12283         int arg_strict = strict;
12284         bool skip_arg_p = false;
12285
12286         if (call_args_p)
12287           {
12288             int sub_strict;
12289
12290             /* This mirrors what we do in type_unification_real.  */
12291             switch (strict)
12292               {
12293               case DEDUCE_CALL:
12294                 sub_strict = (UNIFY_ALLOW_OUTER_LEVEL 
12295                               | UNIFY_ALLOW_MORE_CV_QUAL
12296                               | UNIFY_ALLOW_DERIVED);
12297                 break;
12298                 
12299               case DEDUCE_CONV:
12300                 sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
12301                 break;
12302                 
12303               case DEDUCE_EXACT:
12304                 sub_strict = UNIFY_ALLOW_NONE;
12305                 break;
12306                 
12307               default:
12308                 gcc_unreachable ();
12309               }
12310
12311             if (!TYPE_P (arg))
12312               {
12313                 gcc_assert (TREE_TYPE (arg) != NULL_TREE);
12314                 if (type_unknown_p (arg))
12315                   {
12316                     /* [temp.deduct.type] A template-argument can be
12317                        deduced from a pointer to function or pointer
12318                        to member function argument if the set of
12319                        overloaded functions does not contain function
12320                        templates and at most one of a set of
12321                        overloaded functions provides a unique
12322                        match.  */
12323
12324                     if (resolve_overloaded_unification
12325                         (tparms, targs, parm, arg, strict, sub_strict)
12326                         != 0)
12327                       return 1;
12328                     skip_arg_p = true;
12329                   }
12330
12331                 if (!skip_arg_p)
12332                   {
12333                     arg = TREE_TYPE (arg);
12334                     if (arg == error_mark_node)
12335                       return 1;
12336                   }
12337               }
12338       
12339             arg_strict = sub_strict;
12340
12341             if (!subr)
12342               arg_strict |= 
12343                 maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
12344           }
12345
12346         if (!skip_arg_p)
12347           {
12348             if (unify (tparms, targs, parm, arg, arg_strict))
12349               return 1;
12350           }
12351       }
12352
12353       /* For each parameter pack, collect the deduced value.  */
12354       for (pack = packs; pack; pack = TREE_CHAIN (pack))
12355         {
12356           int idx, level;
12357           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12358
12359           TREE_VEC_ELT (TREE_TYPE (pack), i - start) = 
12360             TMPL_ARG (targs, level, idx);
12361         }
12362     }
12363
12364   /* Verify that the results of unification with the parameter packs
12365      produce results consistent with what we've seen before, and make
12366      the deduced argument packs available.  */
12367   for (pack = packs; pack; pack = TREE_CHAIN (pack))
12368     {
12369       tree old_pack = TREE_VALUE (pack);
12370       tree new_args = TREE_TYPE (pack);
12371
12372       if (old_pack && ARGUMENT_PACK_INCOMPLETE_P (old_pack))
12373         {
12374           /* Prepend the explicit arguments onto NEW_ARGS.  */
12375           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
12376           tree old_args = new_args;
12377           int i, explicit_len = TREE_VEC_LENGTH (explicit_args);
12378           int len = explicit_len + TREE_VEC_LENGTH (old_args);
12379
12380           /* Copy the explicit arguments.  */
12381           new_args = make_tree_vec (len);
12382           for (i = 0; i < explicit_len; i++)
12383             TREE_VEC_ELT (new_args, i) = TREE_VEC_ELT (explicit_args, i);
12384
12385           /* Copy the deduced arguments.  */
12386           for (; i < len; i++)
12387             TREE_VEC_ELT (new_args, i) =
12388               TREE_VEC_ELT (old_args, i - explicit_len);
12389         }
12390
12391       if (!old_pack)
12392         {
12393           tree result;
12394           int idx, level;
12395           
12396           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12397
12398           /* Build the deduced *_ARGUMENT_PACK.  */
12399           if (TREE_CODE (TREE_PURPOSE (pack)) == TEMPLATE_PARM_INDEX)
12400             {
12401               result = make_node (NONTYPE_ARGUMENT_PACK);
12402               TREE_TYPE (result) = 
12403                 TREE_TYPE (TEMPLATE_PARM_DECL (TREE_PURPOSE (pack)));
12404               TREE_CONSTANT (result) = 1;
12405             }
12406           else
12407             result = make_node (TYPE_ARGUMENT_PACK);
12408
12409           SET_ARGUMENT_PACK_ARGS (result, new_args);
12410
12411           /* Note the deduced argument packs for this parameter
12412              pack.  */
12413           TMPL_ARG (targs, level, idx) = result;
12414         }
12415       else if (ARGUMENT_PACK_INCOMPLETE_P (old_pack)
12416                && (ARGUMENT_PACK_ARGS (old_pack) 
12417                    == ARGUMENT_PACK_EXPLICIT_ARGS (old_pack)))
12418         {
12419           /* We only had the explicitly-provided arguments before, but
12420              now we have a complete set of arguments.  */
12421           int idx, level;
12422           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
12423           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12424
12425           /* Keep the original deduced argument pack.  */
12426           TMPL_ARG (targs, level, idx) = old_pack;
12427
12428           SET_ARGUMENT_PACK_ARGS (old_pack, new_args);
12429           ARGUMENT_PACK_INCOMPLETE_P (old_pack) = 1;
12430           ARGUMENT_PACK_EXPLICIT_ARGS (old_pack) = explicit_args;
12431         }
12432       else if (!comp_template_args (ARGUMENT_PACK_ARGS (old_pack),
12433                                     new_args))
12434         /* Inconsistent unification of this parameter pack.  */
12435         return 1;
12436       else
12437         {
12438           int idx, level;
12439           
12440           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12441
12442           /* Keep the original deduced argument pack.  */
12443           TMPL_ARG (targs, level, idx) = old_pack;
12444         }
12445     }
12446
12447   return 0;
12448 }
12449
12450 /* Deduce the value of template parameters.  TPARMS is the (innermost)
12451    set of template parameters to a template.  TARGS is the bindings
12452    for those template parameters, as determined thus far; TARGS may
12453    include template arguments for outer levels of template parameters
12454    as well.  PARM is a parameter to a template function, or a
12455    subcomponent of that parameter; ARG is the corresponding argument.
12456    This function attempts to match PARM with ARG in a manner
12457    consistent with the existing assignments in TARGS.  If more values
12458    are deduced, then TARGS is updated.
12459
12460    Returns 0 if the type deduction succeeds, 1 otherwise.  The
12461    parameter STRICT is a bitwise or of the following flags:
12462
12463      UNIFY_ALLOW_NONE:
12464        Require an exact match between PARM and ARG.
12465      UNIFY_ALLOW_MORE_CV_QUAL:
12466        Allow the deduced ARG to be more cv-qualified (by qualification
12467        conversion) than ARG.
12468      UNIFY_ALLOW_LESS_CV_QUAL:
12469        Allow the deduced ARG to be less cv-qualified than ARG.
12470      UNIFY_ALLOW_DERIVED:
12471        Allow the deduced ARG to be a template base class of ARG,
12472        or a pointer to a template base class of the type pointed to by
12473        ARG.
12474      UNIFY_ALLOW_INTEGER:
12475        Allow any integral type to be deduced.  See the TEMPLATE_PARM_INDEX
12476        case for more information.
12477      UNIFY_ALLOW_OUTER_LEVEL:
12478        This is the outermost level of a deduction. Used to determine validity
12479        of qualification conversions. A valid qualification conversion must
12480        have const qualified pointers leading up to the inner type which
12481        requires additional CV quals, except at the outer level, where const
12482        is not required [conv.qual]. It would be normal to set this flag in
12483        addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
12484      UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
12485        This is the outermost level of a deduction, and PARM can be more CV
12486        qualified at this point.
12487      UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
12488        This is the outermost level of a deduction, and PARM can be less CV
12489        qualified at this point.  */
12490
12491 static int
12492 unify (tree tparms, tree targs, tree parm, tree arg, int strict)
12493 {
12494   int idx;
12495   tree targ;
12496   tree tparm;
12497   int strict_in = strict;
12498
12499   /* I don't think this will do the right thing with respect to types.
12500      But the only case I've seen it in so far has been array bounds, where
12501      signedness is the only information lost, and I think that will be
12502      okay.  */
12503   while (TREE_CODE (parm) == NOP_EXPR)
12504     parm = TREE_OPERAND (parm, 0);
12505
12506   if (arg == error_mark_node)
12507     return 1;
12508   if (arg == unknown_type_node)
12509     /* We can't deduce anything from this, but we might get all the
12510        template args from other function args.  */
12511     return 0;
12512
12513   /* If PARM uses template parameters, then we can't bail out here,
12514      even if ARG == PARM, since we won't record unifications for the
12515      template parameters.  We might need them if we're trying to
12516      figure out which of two things is more specialized.  */
12517   if (arg == parm && !uses_template_parms (parm))
12518     return 0;
12519
12520   /* Immediately reject some pairs that won't unify because of
12521      cv-qualification mismatches.  */
12522   if (TREE_CODE (arg) == TREE_CODE (parm)
12523       && TYPE_P (arg)
12524       /* It is the elements of the array which hold the cv quals of an array
12525          type, and the elements might be template type parms. We'll check
12526          when we recurse.  */
12527       && TREE_CODE (arg) != ARRAY_TYPE
12528       /* We check the cv-qualifiers when unifying with template type
12529          parameters below.  We want to allow ARG `const T' to unify with
12530          PARM `T' for example, when computing which of two templates
12531          is more specialized, for example.  */
12532       && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
12533       && !check_cv_quals_for_unify (strict_in, arg, parm))
12534     return 1;
12535
12536   if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
12537       && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
12538     strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
12539   strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
12540   strict &= ~UNIFY_ALLOW_DERIVED;
12541   strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
12542   strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
12543
12544   switch (TREE_CODE (parm))
12545     {
12546     case TYPENAME_TYPE:
12547     case SCOPE_REF:
12548     case UNBOUND_CLASS_TEMPLATE:
12549       /* In a type which contains a nested-name-specifier, template
12550          argument values cannot be deduced for template parameters used
12551          within the nested-name-specifier.  */
12552       return 0;
12553
12554     case TEMPLATE_TYPE_PARM:
12555     case TEMPLATE_TEMPLATE_PARM:
12556     case BOUND_TEMPLATE_TEMPLATE_PARM:
12557       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
12558       if (tparm == error_mark_node)
12559         return 1;
12560
12561       if (TEMPLATE_TYPE_LEVEL (parm)
12562           != template_decl_level (tparm))
12563         /* The PARM is not one we're trying to unify.  Just check
12564            to see if it matches ARG.  */
12565         return (TREE_CODE (arg) == TREE_CODE (parm)
12566                 && same_type_p (parm, arg)) ? 0 : 1;
12567       idx = TEMPLATE_TYPE_IDX (parm);
12568       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
12569       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
12570
12571       /* Check for mixed types and values.  */
12572       if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
12573            && TREE_CODE (tparm) != TYPE_DECL)
12574           || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
12575               && TREE_CODE (tparm) != TEMPLATE_DECL))
12576         return 1;
12577
12578       if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
12579         {
12580           /* ARG must be constructed from a template class or a template
12581              template parameter.  */
12582           if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
12583               && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
12584             return 1;
12585
12586           {
12587             tree parmvec = TYPE_TI_ARGS (parm);
12588             tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
12589             tree argtmplvec
12590               = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_TI_TEMPLATE (arg));
12591             int i;
12592
12593             /* The resolution to DR150 makes clear that default
12594                arguments for an N-argument may not be used to bind T
12595                to a template template parameter with fewer than N
12596                parameters.  It is not safe to permit the binding of
12597                default arguments as an extension, as that may change
12598                the meaning of a conforming program.  Consider:
12599
12600                   struct Dense { static const unsigned int dim = 1; };
12601
12602                   template <template <typename> class View,
12603                             typename Block>
12604                   void operator+(float, View<Block> const&);
12605
12606                   template <typename Block,
12607                             unsigned int Dim = Block::dim>
12608                   struct Lvalue_proxy { operator float() const; };
12609
12610                   void
12611                   test_1d (void) {
12612                     Lvalue_proxy<Dense> p;
12613                     float b;
12614                     b + p;
12615                   }
12616
12617               Here, if Lvalue_proxy is permitted to bind to View, then
12618               the global operator+ will be used; if they are not, the
12619               Lvalue_proxy will be converted to float.  */
12620             if (coerce_template_parms (argtmplvec, parmvec,
12621                                        TYPE_TI_TEMPLATE (parm),
12622                                        tf_none,
12623                                        /*require_all_args=*/true,
12624                                        /*use_default_args=*/false)
12625                 == error_mark_node)
12626               return 1;
12627
12628             /* Deduce arguments T, i from TT<T> or TT<i>.
12629                We check each element of PARMVEC and ARGVEC individually
12630                rather than the whole TREE_VEC since they can have
12631                different number of elements.  */
12632
12633             for (i = 0; i < TREE_VEC_LENGTH (parmvec); ++i)
12634               {
12635                 if (unify (tparms, targs,
12636                            TREE_VEC_ELT (parmvec, i),
12637                            TREE_VEC_ELT (argvec, i),
12638                            UNIFY_ALLOW_NONE))
12639                   return 1;
12640               }
12641           }
12642           arg = TYPE_TI_TEMPLATE (arg);
12643
12644           /* Fall through to deduce template name.  */
12645         }
12646
12647       if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
12648           || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
12649         {
12650           /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>.  */
12651
12652           /* Simple cases: Value already set, does match or doesn't.  */
12653           if (targ != NULL_TREE && template_args_equal (targ, arg))
12654             return 0;
12655           else if (targ)
12656             return 1;
12657         }
12658       else
12659         {
12660           /* If PARM is `const T' and ARG is only `int', we don't have
12661              a match unless we are allowing additional qualification.
12662              If ARG is `const int' and PARM is just `T' that's OK;
12663              that binds `const int' to `T'.  */
12664           if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
12665                                          arg, parm))
12666             return 1;
12667
12668           /* Consider the case where ARG is `const volatile int' and
12669              PARM is `const T'.  Then, T should be `volatile int'.  */
12670           arg = cp_build_qualified_type_real
12671             (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
12672           if (arg == error_mark_node)
12673             return 1;
12674
12675           /* Simple cases: Value already set, does match or doesn't.  */
12676           if (targ != NULL_TREE && same_type_p (targ, arg))
12677             return 0;
12678           else if (targ)
12679             return 1;
12680
12681           /* Make sure that ARG is not a variable-sized array.  (Note
12682              that were talking about variable-sized arrays (like
12683              `int[n]'), rather than arrays of unknown size (like
12684              `int[]').)  We'll get very confused by such a type since
12685              the bound of the array will not be computable in an
12686              instantiation.  Besides, such types are not allowed in
12687              ISO C++, so we can do as we please here.  */
12688           if (variably_modified_type_p (arg, NULL_TREE))
12689             return 1;
12690         }
12691
12692       /* If ARG is a parameter pack or an expansion, we cannot unify
12693          against it unless PARM is also a parameter pack.  */
12694       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
12695           && !template_parameter_pack_p (parm))
12696         return 1;
12697
12698       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
12699       return 0;
12700
12701     case TEMPLATE_PARM_INDEX:
12702       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
12703       if (tparm == error_mark_node)
12704         return 1;
12705
12706       if (TEMPLATE_PARM_LEVEL (parm)
12707           != template_decl_level (tparm))
12708         /* The PARM is not one we're trying to unify.  Just check
12709            to see if it matches ARG.  */
12710         return !(TREE_CODE (arg) == TREE_CODE (parm)
12711                  && cp_tree_equal (parm, arg));
12712
12713       idx = TEMPLATE_PARM_IDX (parm);
12714       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
12715
12716       if (targ)
12717         return !cp_tree_equal (targ, arg);
12718
12719       /* [temp.deduct.type] If, in the declaration of a function template
12720          with a non-type template-parameter, the non-type
12721          template-parameter is used in an expression in the function
12722          parameter-list and, if the corresponding template-argument is
12723          deduced, the template-argument type shall match the type of the
12724          template-parameter exactly, except that a template-argument
12725          deduced from an array bound may be of any integral type.
12726          The non-type parameter might use already deduced type parameters.  */
12727       tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
12728       if (!TREE_TYPE (arg))
12729         /* Template-parameter dependent expression.  Just accept it for now.
12730            It will later be processed in convert_template_argument.  */
12731         ;
12732       else if (same_type_p (TREE_TYPE (arg), tparm))
12733         /* OK */;
12734       else if ((strict & UNIFY_ALLOW_INTEGER)
12735                && (TREE_CODE (tparm) == INTEGER_TYPE
12736                    || TREE_CODE (tparm) == BOOLEAN_TYPE))
12737         /* Convert the ARG to the type of PARM; the deduced non-type
12738            template argument must exactly match the types of the
12739            corresponding parameter.  */
12740         arg = fold (build_nop (TREE_TYPE (parm), arg));
12741       else if (uses_template_parms (tparm))
12742         /* We haven't deduced the type of this parameter yet.  Try again
12743            later.  */
12744         return 0;
12745       else
12746         return 1;
12747
12748       /* If ARG is a parameter pack or an expansion, we cannot unify
12749          against it unless PARM is also a parameter pack.  */
12750       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
12751           && !TEMPLATE_PARM_PARAMETER_PACK (parm))
12752         return 1;
12753
12754       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
12755       return 0;
12756
12757     case PTRMEM_CST:
12758      {
12759         /* A pointer-to-member constant can be unified only with
12760          another constant.  */
12761       if (TREE_CODE (arg) != PTRMEM_CST)
12762         return 1;
12763
12764       /* Just unify the class member. It would be useless (and possibly
12765          wrong, depending on the strict flags) to unify also
12766          PTRMEM_CST_CLASS, because we want to be sure that both parm and
12767          arg refer to the same variable, even if through different
12768          classes. For instance:
12769
12770          struct A { int x; };
12771          struct B : A { };
12772
12773          Unification of &A::x and &B::x must succeed.  */
12774       return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
12775                     PTRMEM_CST_MEMBER (arg), strict);
12776      }
12777
12778     case POINTER_TYPE:
12779       {
12780         if (TREE_CODE (arg) != POINTER_TYPE)
12781           return 1;
12782
12783         /* [temp.deduct.call]
12784
12785            A can be another pointer or pointer to member type that can
12786            be converted to the deduced A via a qualification
12787            conversion (_conv.qual_).
12788
12789            We pass down STRICT here rather than UNIFY_ALLOW_NONE.
12790            This will allow for additional cv-qualification of the
12791            pointed-to types if appropriate.  */
12792
12793         if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
12794           /* The derived-to-base conversion only persists through one
12795              level of pointers.  */
12796           strict |= (strict_in & UNIFY_ALLOW_DERIVED);
12797
12798         return unify (tparms, targs, TREE_TYPE (parm),
12799                       TREE_TYPE (arg), strict);
12800       }
12801
12802     case REFERENCE_TYPE:
12803       if (TREE_CODE (arg) != REFERENCE_TYPE)
12804         return 1;
12805       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
12806                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
12807
12808     case ARRAY_TYPE:
12809       if (TREE_CODE (arg) != ARRAY_TYPE)
12810         return 1;
12811       if ((TYPE_DOMAIN (parm) == NULL_TREE)
12812           != (TYPE_DOMAIN (arg) == NULL_TREE))
12813         return 1;
12814       if (TYPE_DOMAIN (parm) != NULL_TREE)
12815         {
12816           tree parm_max;
12817           tree arg_max;
12818           bool parm_cst;
12819           bool arg_cst;
12820
12821           /* Our representation of array types uses "N - 1" as the
12822              TYPE_MAX_VALUE for an array with "N" elements, if "N" is
12823              not an integer constant.  We cannot unify arbitrarily
12824              complex expressions, so we eliminate the MINUS_EXPRs
12825              here.  */
12826           parm_max = TYPE_MAX_VALUE (TYPE_DOMAIN (parm));
12827           parm_cst = TREE_CODE (parm_max) == INTEGER_CST;
12828           if (!parm_cst)
12829             {
12830               gcc_assert (TREE_CODE (parm_max) == MINUS_EXPR);
12831               parm_max = TREE_OPERAND (parm_max, 0);
12832             }
12833           arg_max = TYPE_MAX_VALUE (TYPE_DOMAIN (arg));
12834           arg_cst = TREE_CODE (arg_max) == INTEGER_CST;
12835           if (!arg_cst)
12836             {
12837               /* The ARG_MAX may not be a simple MINUS_EXPR, if we are
12838                  trying to unify the type of a variable with the type
12839                  of a template parameter.  For example:
12840
12841                    template <unsigned int N>
12842                    void f (char (&) [N]);
12843                    int g(); 
12844                    void h(int i) {
12845                      char a[g(i)];
12846                      f(a); 
12847                    }
12848
12849                 Here, the type of the ARG will be "int [g(i)]", and
12850                 may be a SAVE_EXPR, etc.  */
12851               if (TREE_CODE (arg_max) != MINUS_EXPR)
12852                 return 1;
12853               arg_max = TREE_OPERAND (arg_max, 0);
12854             }
12855
12856           /* If only one of the bounds used a MINUS_EXPR, compensate
12857              by adding one to the other bound.  */
12858           if (parm_cst && !arg_cst)
12859             parm_max = fold_build2 (PLUS_EXPR,
12860                                     integer_type_node,
12861                                     parm_max,
12862                                     integer_one_node);
12863           else if (arg_cst && !parm_cst)
12864             arg_max = fold_build2 (PLUS_EXPR,
12865                                    integer_type_node,
12866                                    arg_max,
12867                                    integer_one_node);
12868
12869           if (unify (tparms, targs, parm_max, arg_max, UNIFY_ALLOW_INTEGER))
12870             return 1;
12871         }
12872       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
12873                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
12874
12875     case REAL_TYPE:
12876     case COMPLEX_TYPE:
12877     case VECTOR_TYPE:
12878     case INTEGER_TYPE:
12879     case BOOLEAN_TYPE:
12880     case ENUMERAL_TYPE:
12881     case VOID_TYPE:
12882       if (TREE_CODE (arg) != TREE_CODE (parm))
12883         return 1;
12884
12885       /* We have already checked cv-qualification at the top of the
12886          function.  */
12887       if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
12888         return 1;
12889
12890       /* As far as unification is concerned, this wins.  Later checks
12891          will invalidate it if necessary.  */
12892       return 0;
12893
12894       /* Types INTEGER_CST and MINUS_EXPR can come from array bounds.  */
12895       /* Type INTEGER_CST can come from ordinary constant template args.  */
12896     case INTEGER_CST:
12897       while (TREE_CODE (arg) == NOP_EXPR)
12898         arg = TREE_OPERAND (arg, 0);
12899
12900       if (TREE_CODE (arg) != INTEGER_CST)
12901         return 1;
12902       return !tree_int_cst_equal (parm, arg);
12903
12904     case TREE_VEC:
12905       {
12906         int i;
12907         if (TREE_CODE (arg) != TREE_VEC)
12908           return 1;
12909         if (TREE_VEC_LENGTH (parm) != TREE_VEC_LENGTH (arg))
12910           return 1;
12911         for (i = 0; i < TREE_VEC_LENGTH (parm); ++i)
12912           if (unify (tparms, targs,
12913                      TREE_VEC_ELT (parm, i), TREE_VEC_ELT (arg, i),
12914                      UNIFY_ALLOW_NONE))
12915             return 1;
12916         return 0;
12917       }
12918
12919     case RECORD_TYPE:
12920     case UNION_TYPE:
12921       if (TREE_CODE (arg) != TREE_CODE (parm))
12922         return 1;
12923
12924       if (TYPE_PTRMEMFUNC_P (parm))
12925         {
12926           if (!TYPE_PTRMEMFUNC_P (arg))
12927             return 1;
12928
12929           return unify (tparms, targs,
12930                         TYPE_PTRMEMFUNC_FN_TYPE (parm),
12931                         TYPE_PTRMEMFUNC_FN_TYPE (arg),
12932                         strict);
12933         }
12934
12935       if (CLASSTYPE_TEMPLATE_INFO (parm))
12936         {
12937           tree t = NULL_TREE;
12938
12939           if (strict_in & UNIFY_ALLOW_DERIVED)
12940             {
12941               /* First, we try to unify the PARM and ARG directly.  */
12942               t = try_class_unification (tparms, targs,
12943                                          parm, arg);
12944
12945               if (!t)
12946                 {
12947                   /* Fallback to the special case allowed in
12948                      [temp.deduct.call]:
12949
12950                        If P is a class, and P has the form
12951                        template-id, then A can be a derived class of
12952                        the deduced A.  Likewise, if P is a pointer to
12953                        a class of the form template-id, A can be a
12954                        pointer to a derived class pointed to by the
12955                        deduced A.  */
12956                   t = get_template_base (tparms, targs, parm, arg);
12957
12958                   if (!t)
12959                     return 1;
12960                 }
12961             }
12962           else if (CLASSTYPE_TEMPLATE_INFO (arg)
12963                    && (CLASSTYPE_TI_TEMPLATE (parm)
12964                        == CLASSTYPE_TI_TEMPLATE (arg)))
12965             /* Perhaps PARM is something like S<U> and ARG is S<int>.
12966                Then, we should unify `int' and `U'.  */
12967             t = arg;
12968           else
12969             /* There's no chance of unification succeeding.  */
12970             return 1;
12971
12972           return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
12973                         CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE);
12974         }
12975       else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
12976         return 1;
12977       return 0;
12978
12979     case METHOD_TYPE:
12980     case FUNCTION_TYPE:
12981       if (TREE_CODE (arg) != TREE_CODE (parm))
12982         return 1;
12983
12984       /* CV qualifications for methods can never be deduced, they must
12985          match exactly.  We need to check them explicitly here,
12986          because type_unification_real treats them as any other
12987          cvqualified parameter.  */
12988       if (TREE_CODE (parm) == METHOD_TYPE
12989           && (!check_cv_quals_for_unify
12990               (UNIFY_ALLOW_NONE,
12991                TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (arg))),
12992                TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (parm))))))
12993         return 1;
12994
12995       if (unify (tparms, targs, TREE_TYPE (parm),
12996                  TREE_TYPE (arg), UNIFY_ALLOW_NONE))
12997         return 1;
12998       return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
12999                                     TYPE_ARG_TYPES (arg), 1, DEDUCE_EXACT,
13000                                     LOOKUP_NORMAL);
13001
13002     case OFFSET_TYPE:
13003       /* Unify a pointer to member with a pointer to member function, which
13004          deduces the type of the member as a function type. */
13005       if (TYPE_PTRMEMFUNC_P (arg))
13006         {
13007           tree method_type;
13008           tree fntype;
13009           cp_cv_quals cv_quals;
13010
13011           /* Check top-level cv qualifiers */
13012           if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
13013             return 1;
13014
13015           if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
13016                      TYPE_PTRMEMFUNC_OBJECT_TYPE (arg), UNIFY_ALLOW_NONE))
13017             return 1;
13018
13019           /* Determine the type of the function we are unifying against. */
13020           method_type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (arg));
13021           fntype =
13022             build_function_type (TREE_TYPE (method_type),
13023                                  TREE_CHAIN (TYPE_ARG_TYPES (method_type)));
13024
13025           /* Extract the cv-qualifiers of the member function from the
13026              implicit object parameter and place them on the function
13027              type to be restored later. */
13028           cv_quals =
13029             cp_type_quals(TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (method_type))));
13030           fntype = build_qualified_type (fntype, cv_quals);
13031           return unify (tparms, targs, TREE_TYPE (parm), fntype, strict);
13032         }
13033
13034       if (TREE_CODE (arg) != OFFSET_TYPE)
13035         return 1;
13036       if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
13037                  TYPE_OFFSET_BASETYPE (arg), UNIFY_ALLOW_NONE))
13038         return 1;
13039       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
13040                     strict);
13041
13042     case CONST_DECL:
13043       if (DECL_TEMPLATE_PARM_P (parm))
13044         return unify (tparms, targs, DECL_INITIAL (parm), arg, strict);
13045       if (arg != integral_constant_value (parm))
13046         return 1;
13047       return 0;
13048
13049     case FIELD_DECL:
13050     case TEMPLATE_DECL:
13051       /* Matched cases are handled by the ARG == PARM test above.  */
13052       return 1;
13053
13054     case TYPE_ARGUMENT_PACK:
13055     case NONTYPE_ARGUMENT_PACK:
13056       {
13057         tree packed_parms = ARGUMENT_PACK_ARGS (parm);
13058         tree packed_args = ARGUMENT_PACK_ARGS (arg);
13059         int i, len = TREE_VEC_LENGTH (packed_parms);
13060         int argslen = TREE_VEC_LENGTH (packed_args);
13061         int parm_variadic_p = 0;
13062
13063         /* Check if the parameters end in a pack, making them variadic.  */
13064         if (len > 0 
13065             && PACK_EXPANSION_P (TREE_VEC_ELT (packed_parms, len - 1)))
13066           parm_variadic_p = 1;
13067
13068         /* If we don't have enough arguments to satisfy the parameters
13069            (not counting the pack expression at the end), or we have
13070            too many arguments for a parameter list that doesn't end in
13071            a pack expression, we can't unify.  */
13072         if (argslen < (len - parm_variadic_p)
13073             || (argslen > len && !parm_variadic_p))
13074           return 1;
13075
13076         /* Unify all of the parameters that precede the (optional)
13077            pack expression.  */
13078         for (i = 0; i < len - parm_variadic_p; ++i)
13079           {
13080             if (unify (tparms, targs, TREE_VEC_ELT (packed_parms, i),
13081                        TREE_VEC_ELT (packed_args, i), strict))
13082               return 1;
13083           }
13084
13085         if (parm_variadic_p)
13086           return unify_pack_expansion (tparms, targs, 
13087                                        packed_parms, packed_args,
13088                                        strict, /*call_args_p=*/false,
13089                                        /*subr=*/false);
13090         return 0;
13091       }
13092
13093       break;
13094
13095     case TYPEOF_TYPE:
13096     case DECLTYPE_TYPE:
13097       /* Cannot deduce anything from TYPEOF_TYPE or DECLTYPE_TYPE
13098          nodes.  */
13099       return 0;
13100
13101     default:
13102       gcc_assert (EXPR_P (parm));
13103
13104       /* We must be looking at an expression.  This can happen with
13105          something like:
13106
13107            template <int I>
13108            void foo(S<I>, S<I + 2>);
13109
13110          This is a "nondeduced context":
13111
13112            [deduct.type]
13113
13114            The nondeduced contexts are:
13115
13116            --A type that is a template-id in which one or more of
13117              the template-arguments is an expression that references
13118              a template-parameter.
13119
13120          In these cases, we assume deduction succeeded, but don't
13121          actually infer any unifications.  */
13122
13123       if (!uses_template_parms (parm)
13124           && !template_args_equal (parm, arg))
13125         return 1;
13126       else
13127         return 0;
13128     }
13129 }
13130 \f
13131 /* Note that DECL can be defined in this translation unit, if
13132    required.  */
13133
13134 static void
13135 mark_definable (tree decl)
13136 {
13137   tree clone;
13138   DECL_NOT_REALLY_EXTERN (decl) = 1;
13139   FOR_EACH_CLONE (clone, decl)
13140     DECL_NOT_REALLY_EXTERN (clone) = 1;
13141 }
13142
13143 /* Called if RESULT is explicitly instantiated, or is a member of an
13144    explicitly instantiated class.  */
13145
13146 void
13147 mark_decl_instantiated (tree result, int extern_p)
13148 {
13149   SET_DECL_EXPLICIT_INSTANTIATION (result);
13150
13151   /* If this entity has already been written out, it's too late to
13152      make any modifications.  */
13153   if (TREE_ASM_WRITTEN (result))
13154     return;
13155
13156   if (TREE_CODE (result) != FUNCTION_DECL)
13157     /* The TREE_PUBLIC flag for function declarations will have been
13158        set correctly by tsubst.  */
13159     TREE_PUBLIC (result) = 1;
13160
13161   /* This might have been set by an earlier implicit instantiation.  */
13162   DECL_COMDAT (result) = 0;
13163
13164   if (extern_p)
13165     DECL_NOT_REALLY_EXTERN (result) = 0;
13166   else
13167     {
13168       mark_definable (result);
13169       /* Always make artificials weak.  */
13170       if (DECL_ARTIFICIAL (result) && flag_weak)
13171         comdat_linkage (result);
13172       /* For WIN32 we also want to put explicit instantiations in
13173          linkonce sections.  */
13174       else if (TREE_PUBLIC (result))
13175         maybe_make_one_only (result);
13176     }
13177
13178   /* If EXTERN_P, then this function will not be emitted -- unless
13179      followed by an explicit instantiation, at which point its linkage
13180      will be adjusted.  If !EXTERN_P, then this function will be
13181      emitted here.  In neither circumstance do we want
13182      import_export_decl to adjust the linkage.  */
13183   DECL_INTERFACE_KNOWN (result) = 1;
13184 }
13185
13186 /* Given two function templates PAT1 and PAT2, return:
13187
13188    1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
13189    -1 if PAT2 is more specialized than PAT1.
13190    0 if neither is more specialized.
13191
13192    LEN indicates the number of parameters we should consider
13193    (defaulted parameters should not be considered).
13194
13195    The 1998 std underspecified function template partial ordering, and
13196    DR214 addresses the issue.  We take pairs of arguments, one from
13197    each of the templates, and deduce them against each other.  One of
13198    the templates will be more specialized if all the *other*
13199    template's arguments deduce against its arguments and at least one
13200    of its arguments *does* *not* deduce against the other template's
13201    corresponding argument.  Deduction is done as for class templates.
13202    The arguments used in deduction have reference and top level cv
13203    qualifiers removed.  Iff both arguments were originally reference
13204    types *and* deduction succeeds in both directions, the template
13205    with the more cv-qualified argument wins for that pairing (if
13206    neither is more cv-qualified, they both are equal).  Unlike regular
13207    deduction, after all the arguments have been deduced in this way,
13208    we do *not* verify the deduced template argument values can be
13209    substituted into non-deduced contexts, nor do we have to verify
13210    that all template arguments have been deduced.  */
13211
13212 int
13213 more_specialized_fn (tree pat1, tree pat2, int len)
13214 {
13215   tree decl1 = DECL_TEMPLATE_RESULT (pat1);
13216   tree decl2 = DECL_TEMPLATE_RESULT (pat2);
13217   tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
13218   tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
13219   tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
13220   tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
13221   tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
13222   tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
13223   int better1 = 0;
13224   int better2 = 0;
13225
13226   /* Remove the this parameter from non-static member functions.  If
13227      one is a non-static member function and the other is not a static
13228      member function, remove the first parameter from that function
13229      also.  This situation occurs for operator functions where we
13230      locate both a member function (with this pointer) and non-member
13231      operator (with explicit first operand).  */
13232   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
13233     {
13234       len--; /* LEN is the number of significant arguments for DECL1 */
13235       args1 = TREE_CHAIN (args1);
13236       if (!DECL_STATIC_FUNCTION_P (decl2))
13237         args2 = TREE_CHAIN (args2);
13238     }
13239   else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
13240     {
13241       args2 = TREE_CHAIN (args2);
13242       if (!DECL_STATIC_FUNCTION_P (decl1))
13243         {
13244           len--;
13245           args1 = TREE_CHAIN (args1);
13246         }
13247     }
13248
13249   /* If only one is a conversion operator, they are unordered.  */
13250   if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
13251     return 0;
13252
13253   /* Consider the return type for a conversion function */
13254   if (DECL_CONV_FN_P (decl1))
13255     {
13256       args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
13257       args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
13258       len++;
13259     }
13260
13261   processing_template_decl++;
13262
13263   while (len--)
13264     {
13265       tree arg1 = TREE_VALUE (args1);
13266       tree arg2 = TREE_VALUE (args2);
13267       int deduce1, deduce2;
13268       int quals1 = -1;
13269       int quals2 = -1;
13270
13271       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
13272           && TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
13273         {
13274           /* When both arguments are pack expansions, we need only
13275              unify the patterns themselves.  */
13276           arg1 = PACK_EXPANSION_PATTERN (arg1);
13277           arg2 = PACK_EXPANSION_PATTERN (arg2);
13278
13279           /* This is the last comparison we need to do.  */
13280           len = 0;
13281         }
13282
13283       if (TREE_CODE (arg1) == REFERENCE_TYPE)
13284         {
13285           arg1 = TREE_TYPE (arg1);
13286           quals1 = cp_type_quals (arg1);
13287         }
13288
13289       if (TREE_CODE (arg2) == REFERENCE_TYPE)
13290         {
13291           arg2 = TREE_TYPE (arg2);
13292           quals2 = cp_type_quals (arg2);
13293         }
13294
13295       if ((quals1 < 0) != (quals2 < 0))
13296         {
13297           /* Only of the args is a reference, see if we should apply
13298              array/function pointer decay to it.  This is not part of
13299              DR214, but is, IMHO, consistent with the deduction rules
13300              for the function call itself, and with our earlier
13301              implementation of the underspecified partial ordering
13302              rules.  (nathan).  */
13303           if (quals1 >= 0)
13304             {
13305               switch (TREE_CODE (arg1))
13306                 {
13307                 case ARRAY_TYPE:
13308                   arg1 = TREE_TYPE (arg1);
13309                   /* FALLTHROUGH. */
13310                 case FUNCTION_TYPE:
13311                   arg1 = build_pointer_type (arg1);
13312                   break;
13313
13314                 default:
13315                   break;
13316                 }
13317             }
13318           else
13319             {
13320               switch (TREE_CODE (arg2))
13321                 {
13322                 case ARRAY_TYPE:
13323                   arg2 = TREE_TYPE (arg2);
13324                   /* FALLTHROUGH. */
13325                 case FUNCTION_TYPE:
13326                   arg2 = build_pointer_type (arg2);
13327                   break;
13328
13329                 default:
13330                   break;
13331                 }
13332             }
13333         }
13334
13335       arg1 = TYPE_MAIN_VARIANT (arg1);
13336       arg2 = TYPE_MAIN_VARIANT (arg2);
13337
13338       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION)
13339         {
13340           int i, len2 = list_length (args2);
13341           tree parmvec = make_tree_vec (1);
13342           tree argvec = make_tree_vec (len2);
13343           tree ta = args2;
13344
13345           /* Setup the parameter vector, which contains only ARG1.  */
13346           TREE_VEC_ELT (parmvec, 0) = arg1;
13347
13348           /* Setup the argument vector, which contains the remaining
13349              arguments.  */
13350           for (i = 0; i < len2; i++, ta = TREE_CHAIN (ta))
13351             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
13352
13353           deduce1 = !unify_pack_expansion (tparms1, targs1, parmvec, 
13354                                            argvec, UNIFY_ALLOW_NONE, 
13355                                            /*call_args_p=*/false, 
13356                                            /*subr=*/0);
13357
13358           /* We cannot deduce in the other direction, because ARG1 is
13359              a pack expansion but ARG2 is not.  */
13360           deduce2 = 0;
13361         }
13362       else if (TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
13363         {
13364           int i, len1 = list_length (args1);
13365           tree parmvec = make_tree_vec (1);
13366           tree argvec = make_tree_vec (len1);
13367           tree ta = args1;
13368
13369           /* Setup the parameter vector, which contains only ARG1.  */
13370           TREE_VEC_ELT (parmvec, 0) = arg2;
13371
13372           /* Setup the argument vector, which contains the remaining
13373              arguments.  */
13374           for (i = 0; i < len1; i++, ta = TREE_CHAIN (ta))
13375             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
13376
13377           deduce2 = !unify_pack_expansion (tparms2, targs2, parmvec, 
13378                                            argvec, UNIFY_ALLOW_NONE, 
13379                                            /*call_args_p=*/false, 
13380                                            /*subr=*/0);
13381
13382           /* We cannot deduce in the other direction, because ARG2 is
13383              a pack expansion but ARG1 is not.*/
13384           deduce1 = 0;
13385         }
13386
13387       else
13388         {
13389           /* The normal case, where neither argument is a pack
13390              expansion.  */
13391           deduce1 = !unify (tparms1, targs1, arg1, arg2, UNIFY_ALLOW_NONE);
13392           deduce2 = !unify (tparms2, targs2, arg2, arg1, UNIFY_ALLOW_NONE);
13393         }
13394
13395       if (!deduce1)
13396         better2 = -1;
13397       if (!deduce2)
13398         better1 = -1;
13399       if (better1 < 0 && better2 < 0)
13400         /* We've failed to deduce something in either direction.
13401            These must be unordered.  */
13402         break;
13403
13404       if (deduce1 && deduce2 && quals1 >= 0 && quals2 >= 0)
13405         {
13406           /* Deduces in both directions, see if quals can
13407              disambiguate.  Pretend the worse one failed to deduce. */
13408           if ((quals1 & quals2) == quals2)
13409             deduce1 = 0;
13410           if ((quals1 & quals2) == quals1)
13411             deduce2 = 0;
13412         }
13413       if (deduce1 && !deduce2 && !better2)
13414         better2 = 1;
13415       if (deduce2 && !deduce1 && !better1)
13416         better1 = 1;
13417
13418       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
13419           || TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
13420         /* We have already processed all of the arguments in our
13421            handing of the pack expansion type.  */
13422         len = 0;
13423
13424       args1 = TREE_CHAIN (args1);
13425       args2 = TREE_CHAIN (args2);
13426     }
13427
13428   processing_template_decl--;
13429
13430   /* All things being equal, if the next argument is a pack expansion
13431      for one function but not for the other, prefer the
13432      non-variadic function.  */
13433   if ((better1 > 0) - (better2 > 0) == 0
13434       && args1 && TREE_VALUE (args1)
13435       && args2 && TREE_VALUE (args2))
13436     {
13437       if (TREE_CODE (TREE_VALUE (args1)) == TYPE_PACK_EXPANSION)
13438         return TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION ? 0 : -1;
13439       else if (TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION)
13440         return 1;
13441     }
13442
13443   return (better1 > 0) - (better2 > 0);
13444 }
13445
13446 /* Determine which of two partial specializations is more specialized.
13447
13448    PAT1 is a TREE_LIST whose TREE_TYPE is the _TYPE node corresponding
13449    to the first partial specialization.  The TREE_VALUE is the
13450    innermost set of template parameters for the partial
13451    specialization.  PAT2 is similar, but for the second template.
13452
13453    Return 1 if the first partial specialization is more specialized;
13454    -1 if the second is more specialized; 0 if neither is more
13455    specialized.
13456
13457    See [temp.class.order] for information about determining which of
13458    two templates is more specialized.  */
13459
13460 static int
13461 more_specialized_class (tree pat1, tree pat2)
13462 {
13463   tree targs;
13464   tree tmpl1, tmpl2;
13465   int winner = 0;
13466   bool any_deductions = false;
13467
13468   tmpl1 = TREE_TYPE (pat1);
13469   tmpl2 = TREE_TYPE (pat2);
13470
13471   /* Just like what happens for functions, if we are ordering between
13472      different class template specializations, we may encounter dependent
13473      types in the arguments, and we need our dependency check functions
13474      to behave correctly.  */
13475   ++processing_template_decl;
13476   targs = get_class_bindings (TREE_VALUE (pat1),
13477                               CLASSTYPE_TI_ARGS (tmpl1),
13478                               CLASSTYPE_TI_ARGS (tmpl2));
13479   if (targs)
13480     {
13481       --winner;
13482       any_deductions = true;
13483     }
13484
13485   targs = get_class_bindings (TREE_VALUE (pat2),
13486                               CLASSTYPE_TI_ARGS (tmpl2),
13487                               CLASSTYPE_TI_ARGS (tmpl1));
13488   if (targs)
13489     {
13490       ++winner;
13491       any_deductions = true;
13492     }
13493   --processing_template_decl;
13494
13495   /* In the case of a tie where at least one of the class templates
13496      has a parameter pack at the end, the template with the most
13497      non-packed parameters wins.  */
13498   if (winner == 0
13499       && any_deductions
13500       && (template_args_variadic_p (TREE_PURPOSE (pat1))
13501           || template_args_variadic_p (TREE_PURPOSE (pat2))))
13502     {
13503       tree args1 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat1));
13504       tree args2 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat2));
13505       int len1 = TREE_VEC_LENGTH (args1);
13506       int len2 = TREE_VEC_LENGTH (args2);
13507
13508       /* We don't count the pack expansion at the end.  */
13509       if (template_args_variadic_p (TREE_PURPOSE (pat1)))
13510         --len1;
13511       if (template_args_variadic_p (TREE_PURPOSE (pat2)))
13512         --len2;
13513
13514       if (len1 > len2)
13515         return 1;
13516       else if (len1 < len2)
13517         return -1;
13518     }
13519
13520   return winner;
13521 }
13522
13523 /* Return the template arguments that will produce the function signature
13524    DECL from the function template FN, with the explicit template
13525    arguments EXPLICIT_ARGS.  If CHECK_RETTYPE is true, the return type must
13526    also match.  Return NULL_TREE if no satisfactory arguments could be
13527    found.  */
13528
13529 static tree
13530 get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
13531 {
13532   int ntparms = DECL_NTPARMS (fn);
13533   tree targs = make_tree_vec (ntparms);
13534   tree decl_type;
13535   tree decl_arg_types;
13536
13537   /* Substitute the explicit template arguments into the type of DECL.
13538      The call to fn_type_unification will handle substitution into the
13539      FN.  */
13540   decl_type = TREE_TYPE (decl);
13541   if (explicit_args && uses_template_parms (decl_type))
13542     {
13543       tree tmpl;
13544       tree converted_args;
13545
13546       if (DECL_TEMPLATE_INFO (decl))
13547         tmpl = DECL_TI_TEMPLATE (decl);
13548       else
13549         /* We can get here for some invalid specializations.  */
13550         return NULL_TREE;
13551
13552       converted_args
13553         = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
13554                                  explicit_args, NULL_TREE,
13555                                  tf_none,
13556                                  /*require_all_args=*/false,
13557                                  /*use_default_args=*/false);
13558       if (converted_args == error_mark_node)
13559         return NULL_TREE;
13560
13561       decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE);
13562       if (decl_type == error_mark_node)
13563         return NULL_TREE;
13564     }
13565
13566   /* Never do unification on the 'this' parameter.  */
13567   decl_arg_types = skip_artificial_parms_for (decl, 
13568                                               TYPE_ARG_TYPES (decl_type));
13569
13570   if (fn_type_unification (fn, explicit_args, targs,
13571                            decl_arg_types,
13572                            (check_rettype || DECL_CONV_FN_P (fn)
13573                             ? TREE_TYPE (decl_type) : NULL_TREE),
13574                            DEDUCE_EXACT, LOOKUP_NORMAL))
13575     return NULL_TREE;
13576
13577   return targs;
13578 }
13579
13580 /* Return the innermost template arguments that, when applied to a
13581    template specialization whose innermost template parameters are
13582    TPARMS, and whose specialization arguments are PARMS, yield the
13583    ARGS.
13584
13585    For example, suppose we have:
13586
13587      template <class T, class U> struct S {};
13588      template <class T> struct S<T*, int> {};
13589
13590    Then, suppose we want to get `S<double*, int>'.  The TPARMS will be
13591    {T}, the SPEC_ARGS will be {T*, int} and the ARGS will be {double*,
13592    int}.  The resulting vector will be {double}, indicating that `T'
13593    is bound to `double'.  */
13594
13595 static tree
13596 get_class_bindings (tree tparms, tree spec_args, tree args)
13597 {
13598   int i, ntparms = TREE_VEC_LENGTH (tparms);
13599   tree deduced_args;
13600   tree innermost_deduced_args;
13601
13602   innermost_deduced_args = make_tree_vec (ntparms);
13603   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
13604     {
13605       deduced_args = copy_node (args);
13606       SET_TMPL_ARGS_LEVEL (deduced_args,
13607                            TMPL_ARGS_DEPTH (deduced_args),
13608                            innermost_deduced_args);
13609     }
13610   else
13611     deduced_args = innermost_deduced_args;
13612
13613   if (unify (tparms, deduced_args,
13614              INNERMOST_TEMPLATE_ARGS (spec_args),
13615              INNERMOST_TEMPLATE_ARGS (args),
13616              UNIFY_ALLOW_NONE))
13617     return NULL_TREE;
13618
13619   for (i =  0; i < ntparms; ++i)
13620     if (! TREE_VEC_ELT (innermost_deduced_args, i))
13621       return NULL_TREE;
13622
13623   /* Verify that nondeduced template arguments agree with the type
13624      obtained from argument deduction.
13625
13626      For example:
13627
13628        struct A { typedef int X; };
13629        template <class T, class U> struct C {};
13630        template <class T> struct C<T, typename T::X> {};
13631
13632      Then with the instantiation `C<A, int>', we can deduce that
13633      `T' is `A' but unify () does not check whether `typename T::X'
13634      is `int'.  */
13635   spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
13636   if (spec_args == error_mark_node
13637       /* We only need to check the innermost arguments; the other
13638          arguments will always agree.  */
13639       || !comp_template_args (INNERMOST_TEMPLATE_ARGS (spec_args),
13640                               INNERMOST_TEMPLATE_ARGS (args)))
13641     return NULL_TREE;
13642
13643   return deduced_args;
13644 }
13645
13646 /* TEMPLATES is a TREE_LIST.  Each TREE_VALUE is a TEMPLATE_DECL.
13647    Return the TREE_LIST node with the most specialized template, if
13648    any.  If there is no most specialized template, the error_mark_node
13649    is returned.
13650
13651    Note that this function does not look at, or modify, the
13652    TREE_PURPOSE or TREE_TYPE of any of the nodes.  Since the node
13653    returned is one of the elements of INSTANTIATIONS, callers may
13654    store information in the TREE_PURPOSE or TREE_TYPE of the nodes,
13655    and retrieve it from the value returned.  */
13656
13657 tree
13658 most_specialized_instantiation (tree templates)
13659 {
13660   tree fn, champ;
13661
13662   ++processing_template_decl;
13663
13664   champ = templates;
13665   for (fn = TREE_CHAIN (templates); fn; fn = TREE_CHAIN (fn))
13666     {
13667       int fate = 0;
13668
13669       if (get_bindings (TREE_VALUE (champ),
13670                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
13671                         NULL_TREE, /*check_ret=*/false))
13672         fate--;
13673
13674       if (get_bindings (TREE_VALUE (fn),
13675                         DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
13676                         NULL_TREE, /*check_ret=*/false))
13677         fate++;
13678
13679       if (fate == -1)
13680         champ = fn;
13681       else if (!fate)
13682         {
13683           /* Equally specialized, move to next function.  If there
13684              is no next function, nothing's most specialized.  */
13685           fn = TREE_CHAIN (fn);
13686           champ = fn;
13687           if (!fn)
13688             break;
13689         }
13690     }
13691
13692   if (champ)
13693     /* Now verify that champ is better than everything earlier in the
13694        instantiation list.  */
13695     for (fn = templates; fn != champ; fn = TREE_CHAIN (fn))
13696       if (get_bindings (TREE_VALUE (champ),
13697                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
13698                         NULL_TREE, /*check_ret=*/false)
13699           || !get_bindings (TREE_VALUE (fn),
13700                             DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
13701                             NULL_TREE, /*check_ret=*/false))
13702         {
13703           champ = NULL_TREE;
13704           break;
13705         }
13706
13707   processing_template_decl--;
13708
13709   if (!champ)
13710     return error_mark_node;
13711
13712   return champ;
13713 }
13714
13715 /* If DECL is a specialization of some template, return the most
13716    general such template.  Otherwise, returns NULL_TREE.
13717
13718    For example, given:
13719
13720      template <class T> struct S { template <class U> void f(U); };
13721
13722    if TMPL is `template <class U> void S<int>::f(U)' this will return
13723    the full template.  This function will not trace past partial
13724    specializations, however.  For example, given in addition:
13725
13726      template <class T> struct S<T*> { template <class U> void f(U); };
13727
13728    if TMPL is `template <class U> void S<int*>::f(U)' this will return
13729    `template <class T> template <class U> S<T*>::f(U)'.  */
13730
13731 tree
13732 most_general_template (tree decl)
13733 {
13734   /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
13735      an immediate specialization.  */
13736   if (TREE_CODE (decl) == FUNCTION_DECL)
13737     {
13738       if (DECL_TEMPLATE_INFO (decl)) {
13739         decl = DECL_TI_TEMPLATE (decl);
13740
13741         /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
13742            template friend.  */
13743         if (TREE_CODE (decl) != TEMPLATE_DECL)
13744           return NULL_TREE;
13745       } else
13746         return NULL_TREE;
13747     }
13748
13749   /* Look for more and more general templates.  */
13750   while (DECL_TEMPLATE_INFO (decl))
13751     {
13752       /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
13753          (See cp-tree.h for details.)  */
13754       if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
13755         break;
13756
13757       if (CLASS_TYPE_P (TREE_TYPE (decl))
13758           && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
13759         break;
13760
13761       /* Stop if we run into an explicitly specialized class template.  */
13762       if (!DECL_NAMESPACE_SCOPE_P (decl)
13763           && DECL_CONTEXT (decl)
13764           && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
13765         break;
13766
13767       decl = DECL_TI_TEMPLATE (decl);
13768     }
13769
13770   return decl;
13771 }
13772
13773 /* Return the most specialized of the class template partial
13774    specializations of TMPL which can produce TYPE, a specialization of
13775    TMPL.  The value returned is actually a TREE_LIST; the TREE_TYPE is
13776    a _TYPE node corresponding to the partial specialization, while the
13777    TREE_PURPOSE is the set of template arguments that must be
13778    substituted into the TREE_TYPE in order to generate TYPE.
13779
13780    If the choice of partial specialization is ambiguous, a diagnostic
13781    is issued, and the error_mark_node is returned.  If there are no
13782    partial specializations of TMPL matching TYPE, then NULL_TREE is
13783    returned.  */
13784
13785 static tree
13786 most_specialized_class (tree type, tree tmpl)
13787 {
13788   tree list = NULL_TREE;
13789   tree t;
13790   tree champ;
13791   int fate;
13792   bool ambiguous_p;
13793   tree args;
13794   tree outer_args = NULL_TREE;
13795
13796   tmpl = most_general_template (tmpl);
13797   args = CLASSTYPE_TI_ARGS (type);
13798
13799   /* For determining which partial specialization to use, only the
13800      innermost args are interesting.  */
13801   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
13802     {
13803       outer_args = strip_innermost_template_args (args, 1);
13804       args = INNERMOST_TEMPLATE_ARGS (args);
13805     }
13806
13807   for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
13808     {
13809       tree partial_spec_args;
13810       tree spec_args;
13811       tree parms = TREE_VALUE (t);
13812
13813       partial_spec_args = CLASSTYPE_TI_ARGS (TREE_TYPE (t));
13814       if (outer_args)
13815         {
13816           int i;
13817
13818           ++processing_template_decl;
13819
13820           /* Discard the outer levels of args, and then substitute in the
13821              template args from the enclosing class.  */
13822           partial_spec_args = INNERMOST_TEMPLATE_ARGS (partial_spec_args);
13823           partial_spec_args = tsubst_template_args
13824             (partial_spec_args, outer_args, tf_none, NULL_TREE);
13825
13826           /* PARMS already refers to just the innermost parms, but the
13827              template parms in partial_spec_args had their levels lowered
13828              by tsubst, so we need to do the same for the parm list.  We
13829              can't just tsubst the TREE_VEC itself, as tsubst wants to
13830              treat a TREE_VEC as an argument vector.  */
13831           parms = copy_node (parms);
13832           for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
13833             TREE_VEC_ELT (parms, i) =
13834               tsubst (TREE_VEC_ELT (parms, i), outer_args, tf_none, NULL_TREE);
13835
13836           --processing_template_decl;
13837         }
13838       spec_args = get_class_bindings (parms,
13839                                       partial_spec_args,
13840                                       args);
13841       if (spec_args)
13842         {
13843           if (outer_args)
13844             spec_args = add_to_template_args (outer_args, spec_args);
13845           list = tree_cons (spec_args, TREE_VALUE (t), list);
13846           TREE_TYPE (list) = TREE_TYPE (t);
13847         }
13848     }
13849
13850   if (! list)
13851     return NULL_TREE;
13852
13853   ambiguous_p = false;
13854   t = list;
13855   champ = t;
13856   t = TREE_CHAIN (t);
13857   for (; t; t = TREE_CHAIN (t))
13858     {
13859       fate = more_specialized_class (champ, t);
13860       if (fate == 1)
13861         ;
13862       else
13863         {
13864           if (fate == 0)
13865             {
13866               t = TREE_CHAIN (t);
13867               if (! t)
13868                 {
13869                   ambiguous_p = true;
13870                   break;
13871                 }
13872             }
13873           champ = t;
13874         }
13875     }
13876
13877   if (!ambiguous_p)
13878     for (t = list; t && t != champ; t = TREE_CHAIN (t))
13879       {
13880         fate = more_specialized_class (champ, t);
13881         if (fate != 1)
13882           {
13883             ambiguous_p = true;
13884             break;
13885           }
13886       }
13887
13888   if (ambiguous_p)
13889     {
13890       const char *str = "candidates are:";
13891       error ("ambiguous class template instantiation for %q#T", type);
13892       for (t = list; t; t = TREE_CHAIN (t))
13893         {
13894           error ("%s %+#T", str, TREE_TYPE (t));
13895           str = "               ";
13896         }
13897       return error_mark_node;
13898     }
13899
13900   return champ;
13901 }
13902
13903 /* Explicitly instantiate DECL.  */
13904
13905 void
13906 do_decl_instantiation (tree decl, tree storage)
13907 {
13908   tree result = NULL_TREE;
13909   int extern_p = 0;
13910
13911   if (!decl || decl == error_mark_node)
13912     /* An error occurred, for which grokdeclarator has already issued
13913        an appropriate message.  */
13914     return;
13915   else if (! DECL_LANG_SPECIFIC (decl))
13916     {
13917       error ("explicit instantiation of non-template %q#D", decl);
13918       return;
13919     }
13920   else if (TREE_CODE (decl) == VAR_DECL)
13921     {
13922       /* There is an asymmetry here in the way VAR_DECLs and
13923          FUNCTION_DECLs are handled by grokdeclarator.  In the case of
13924          the latter, the DECL we get back will be marked as a
13925          template instantiation, and the appropriate
13926          DECL_TEMPLATE_INFO will be set up.  This does not happen for
13927          VAR_DECLs so we do the lookup here.  Probably, grokdeclarator
13928          should handle VAR_DECLs as it currently handles
13929          FUNCTION_DECLs.  */
13930       if (!DECL_CLASS_SCOPE_P (decl))
13931         {
13932           error ("%qD is not a static data member of a class template", decl);
13933           return;
13934         }
13935       result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
13936       if (!result || TREE_CODE (result) != VAR_DECL)
13937         {
13938           error ("no matching template for %qD found", decl);
13939           return;
13940         }
13941       if (!same_type_p (TREE_TYPE (result), TREE_TYPE (decl)))
13942         {
13943           error ("type %qT for explicit instantiation %qD does not match "
13944                  "declared type %qT", TREE_TYPE (result), decl,
13945                  TREE_TYPE (decl));
13946           return;
13947         }
13948     }
13949   else if (TREE_CODE (decl) != FUNCTION_DECL)
13950     {
13951       error ("explicit instantiation of %q#D", decl);
13952       return;
13953     }
13954   else
13955     result = decl;
13956
13957   /* Check for various error cases.  Note that if the explicit
13958      instantiation is valid the RESULT will currently be marked as an
13959      *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
13960      until we get here.  */
13961
13962   if (DECL_TEMPLATE_SPECIALIZATION (result))
13963     {
13964       /* DR 259 [temp.spec].
13965
13966          Both an explicit instantiation and a declaration of an explicit
13967          specialization shall not appear in a program unless the explicit
13968          instantiation follows a declaration of the explicit specialization.
13969
13970          For a given set of template parameters, if an explicit
13971          instantiation of a template appears after a declaration of an
13972          explicit specialization for that template, the explicit
13973          instantiation has no effect.  */
13974       return;
13975     }
13976   else if (DECL_EXPLICIT_INSTANTIATION (result))
13977     {
13978       /* [temp.spec]
13979
13980          No program shall explicitly instantiate any template more
13981          than once.
13982
13983          We check DECL_NOT_REALLY_EXTERN so as not to complain when
13984          the first instantiation was `extern' and the second is not,
13985          and EXTERN_P for the opposite case.  */
13986       if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
13987         pedwarn ("duplicate explicit instantiation of %q#D", result);
13988       /* If an "extern" explicit instantiation follows an ordinary
13989          explicit instantiation, the template is instantiated.  */
13990       if (extern_p)
13991         return;
13992     }
13993   else if (!DECL_IMPLICIT_INSTANTIATION (result))
13994     {
13995       error ("no matching template for %qD found", result);
13996       return;
13997     }
13998   else if (!DECL_TEMPLATE_INFO (result))
13999     {
14000       pedwarn ("explicit instantiation of non-template %q#D", result);
14001       return;
14002     }
14003
14004   if (storage == NULL_TREE)
14005     ;
14006   else if (storage == ridpointers[(int) RID_EXTERN])
14007     {
14008       if (pedantic && !in_system_header)
14009         pedwarn ("ISO C++ forbids the use of %<extern%> on explicit "
14010                  "instantiations");
14011       extern_p = 1;
14012     }
14013   else
14014     error ("storage class %qD applied to template instantiation", storage);
14015
14016   check_explicit_instantiation_namespace (result);
14017   mark_decl_instantiated (result, extern_p);
14018   if (! extern_p)
14019     instantiate_decl (result, /*defer_ok=*/1,
14020                       /*expl_inst_class_mem_p=*/false);
14021 }
14022
14023 static void
14024 mark_class_instantiated (tree t, int extern_p)
14025 {
14026   SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
14027   SET_CLASSTYPE_INTERFACE_KNOWN (t);
14028   CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
14029   TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
14030   if (! extern_p)
14031     {
14032       CLASSTYPE_DEBUG_REQUESTED (t) = 1;
14033       rest_of_type_compilation (t, 1);
14034     }
14035 }
14036
14037 /* Called from do_type_instantiation through binding_table_foreach to
14038    do recursive instantiation for the type bound in ENTRY.  */
14039 static void
14040 bt_instantiate_type_proc (binding_entry entry, void *data)
14041 {
14042   tree storage = *(tree *) data;
14043
14044   if (IS_AGGR_TYPE (entry->type)
14045       && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
14046     do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
14047 }
14048
14049 /* Called from do_type_instantiation to instantiate a member
14050    (a member function or a static member variable) of an
14051    explicitly instantiated class template.  */
14052 static void
14053 instantiate_class_member (tree decl, int extern_p)
14054 {
14055   mark_decl_instantiated (decl, extern_p);
14056   if (! extern_p)
14057     instantiate_decl (decl, /*defer_ok=*/1,
14058                       /*expl_inst_class_mem_p=*/true);
14059 }
14060
14061 /* Perform an explicit instantiation of template class T.  STORAGE, if
14062    non-null, is the RID for extern, inline or static.  COMPLAIN is
14063    nonzero if this is called from the parser, zero if called recursively,
14064    since the standard is unclear (as detailed below).  */
14065
14066 void
14067 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
14068 {
14069   int extern_p = 0;
14070   int nomem_p = 0;
14071   int static_p = 0;
14072   int previous_instantiation_extern_p = 0;
14073
14074   if (TREE_CODE (t) == TYPE_DECL)
14075     t = TREE_TYPE (t);
14076
14077   if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
14078     {
14079       error ("explicit instantiation of non-template type %qT", t);
14080       return;
14081     }
14082
14083   complete_type (t);
14084
14085   if (!COMPLETE_TYPE_P (t))
14086     {
14087       if (complain & tf_error)
14088         error ("explicit instantiation of %q#T before definition of template",
14089                t);
14090       return;
14091     }
14092
14093   if (storage != NULL_TREE)
14094     {
14095       if (pedantic && !in_system_header)
14096         pedwarn("ISO C++ forbids the use of %qE on explicit instantiations",
14097                 storage);
14098
14099       if (storage == ridpointers[(int) RID_INLINE])
14100         nomem_p = 1;
14101       else if (storage == ridpointers[(int) RID_EXTERN])
14102         extern_p = 1;
14103       else if (storage == ridpointers[(int) RID_STATIC])
14104         static_p = 1;
14105       else
14106         {
14107           error ("storage class %qD applied to template instantiation",
14108                  storage);
14109           extern_p = 0;
14110         }
14111     }
14112
14113   if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
14114     {
14115       /* DR 259 [temp.spec].
14116
14117          Both an explicit instantiation and a declaration of an explicit
14118          specialization shall not appear in a program unless the explicit
14119          instantiation follows a declaration of the explicit specialization.
14120
14121          For a given set of template parameters, if an explicit
14122          instantiation of a template appears after a declaration of an
14123          explicit specialization for that template, the explicit
14124          instantiation has no effect.  */
14125       return;
14126     }
14127   else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
14128     {
14129       /* [temp.spec]
14130
14131          No program shall explicitly instantiate any template more
14132          than once.
14133
14134          If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
14135          instantiation was `extern'.  If EXTERN_P then the second is.
14136          These cases are OK.  */
14137       previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
14138
14139       if (!previous_instantiation_extern_p && !extern_p
14140           && (complain & tf_error))
14141         pedwarn ("duplicate explicit instantiation of %q#T", t);
14142
14143       /* If we've already instantiated the template, just return now.  */
14144       if (!CLASSTYPE_INTERFACE_ONLY (t))
14145         return;
14146     }
14147
14148   check_explicit_instantiation_namespace (TYPE_NAME (t));
14149   mark_class_instantiated (t, extern_p);
14150
14151   if (nomem_p)
14152     return;
14153
14154   {
14155     tree tmp;
14156
14157     /* In contrast to implicit instantiation, where only the
14158        declarations, and not the definitions, of members are
14159        instantiated, we have here:
14160
14161          [temp.explicit]
14162
14163          The explicit instantiation of a class template specialization
14164          implies the instantiation of all of its members not
14165          previously explicitly specialized in the translation unit
14166          containing the explicit instantiation.
14167
14168        Of course, we can't instantiate member template classes, since
14169        we don't have any arguments for them.  Note that the standard
14170        is unclear on whether the instantiation of the members are
14171        *explicit* instantiations or not.  However, the most natural
14172        interpretation is that it should be an explicit instantiation.  */
14173
14174     if (! static_p)
14175       for (tmp = TYPE_METHODS (t); tmp; tmp = TREE_CHAIN (tmp))
14176         if (TREE_CODE (tmp) == FUNCTION_DECL
14177             && DECL_TEMPLATE_INSTANTIATION (tmp))
14178           instantiate_class_member (tmp, extern_p);
14179
14180     for (tmp = TYPE_FIELDS (t); tmp; tmp = TREE_CHAIN (tmp))
14181       if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
14182         instantiate_class_member (tmp, extern_p);
14183
14184     if (CLASSTYPE_NESTED_UTDS (t))
14185       binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
14186                              bt_instantiate_type_proc, &storage);
14187   }
14188 }
14189
14190 /* Given a function DECL, which is a specialization of TMPL, modify
14191    DECL to be a re-instantiation of TMPL with the same template
14192    arguments.  TMPL should be the template into which tsubst'ing
14193    should occur for DECL, not the most general template.
14194
14195    One reason for doing this is a scenario like this:
14196
14197      template <class T>
14198      void f(const T&, int i);
14199
14200      void g() { f(3, 7); }
14201
14202      template <class T>
14203      void f(const T& t, const int i) { }
14204
14205    Note that when the template is first instantiated, with
14206    instantiate_template, the resulting DECL will have no name for the
14207    first parameter, and the wrong type for the second.  So, when we go
14208    to instantiate the DECL, we regenerate it.  */
14209
14210 static void
14211 regenerate_decl_from_template (tree decl, tree tmpl)
14212 {
14213   /* The arguments used to instantiate DECL, from the most general
14214      template.  */
14215   tree args;
14216   tree code_pattern;
14217
14218   args = DECL_TI_ARGS (decl);
14219   code_pattern = DECL_TEMPLATE_RESULT (tmpl);
14220
14221   /* Make sure that we can see identifiers, and compute access
14222      correctly.  */
14223   push_access_scope (decl);
14224
14225   if (TREE_CODE (decl) == FUNCTION_DECL)
14226     {
14227       tree decl_parm;
14228       tree pattern_parm;
14229       tree specs;
14230       int args_depth;
14231       int parms_depth;
14232
14233       args_depth = TMPL_ARGS_DEPTH (args);
14234       parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
14235       if (args_depth > parms_depth)
14236         args = get_innermost_template_args (args, parms_depth);
14237
14238       specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
14239                                               args, tf_error, NULL_TREE);
14240       if (specs)
14241         TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
14242                                                     specs);
14243
14244       /* Merge parameter declarations.  */
14245       decl_parm = skip_artificial_parms_for (decl,
14246                                              DECL_ARGUMENTS (decl));
14247       pattern_parm
14248         = skip_artificial_parms_for (code_pattern,
14249                                      DECL_ARGUMENTS (code_pattern));
14250       while (decl_parm && !FUNCTION_PARAMETER_PACK_P (pattern_parm))
14251         {
14252           tree parm_type;
14253           tree attributes;
14254           
14255           if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
14256             DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
14257           parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
14258                               NULL_TREE);
14259           parm_type = type_decays_to (parm_type);
14260           if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
14261             TREE_TYPE (decl_parm) = parm_type;
14262           attributes = DECL_ATTRIBUTES (pattern_parm);
14263           if (DECL_ATTRIBUTES (decl_parm) != attributes)
14264             {
14265               DECL_ATTRIBUTES (decl_parm) = attributes;
14266               cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
14267             }
14268           decl_parm = TREE_CHAIN (decl_parm);
14269           pattern_parm = TREE_CHAIN (pattern_parm);
14270         }
14271       /* Merge any parameters that match with the function parameter
14272          pack.  */
14273       if (pattern_parm && FUNCTION_PARAMETER_PACK_P (pattern_parm))
14274         {
14275           int i, len;
14276           tree expanded_types;
14277           /* Expand the TYPE_PACK_EXPANSION that provides the types for
14278              the parameters in this function parameter pack.  */
14279           expanded_types = tsubst_pack_expansion (TREE_TYPE (pattern_parm), 
14280                                                  args, tf_error, NULL_TREE);
14281           len = TREE_VEC_LENGTH (expanded_types);
14282           for (i = 0; i < len; i++)
14283             {
14284               tree parm_type;
14285               tree attributes;
14286           
14287               if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
14288                 /* Rename the parameter to include the index.  */
14289                 DECL_NAME (decl_parm) = 
14290                   make_ith_pack_parameter_name (DECL_NAME (pattern_parm), i);
14291               parm_type = TREE_VEC_ELT (expanded_types, i);
14292               parm_type = type_decays_to (parm_type);
14293               if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
14294                 TREE_TYPE (decl_parm) = parm_type;
14295               attributes = DECL_ATTRIBUTES (pattern_parm);
14296               if (DECL_ATTRIBUTES (decl_parm) != attributes)
14297                 {
14298                   DECL_ATTRIBUTES (decl_parm) = attributes;
14299                   cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
14300                 }
14301               decl_parm = TREE_CHAIN (decl_parm);
14302             }
14303         }
14304       /* Merge additional specifiers from the CODE_PATTERN.  */
14305       if (DECL_DECLARED_INLINE_P (code_pattern)
14306           && !DECL_DECLARED_INLINE_P (decl))
14307         DECL_DECLARED_INLINE_P (decl) = 1;
14308       if (DECL_INLINE (code_pattern) && !DECL_INLINE (decl))
14309         DECL_INLINE (decl) = 1;
14310     }
14311   else if (TREE_CODE (decl) == VAR_DECL)
14312     DECL_INITIAL (decl) =
14313       tsubst_expr (DECL_INITIAL (code_pattern), args,
14314                    tf_error, DECL_TI_TEMPLATE (decl),
14315                    /*integral_constant_expression_p=*/false);
14316   else
14317     gcc_unreachable ();
14318
14319   pop_access_scope (decl);
14320 }
14321
14322 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
14323    substituted to get DECL.  */
14324
14325 tree
14326 template_for_substitution (tree decl)
14327 {
14328   tree tmpl = DECL_TI_TEMPLATE (decl);
14329
14330   /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
14331      for the instantiation.  This is not always the most general
14332      template.  Consider, for example:
14333
14334         template <class T>
14335         struct S { template <class U> void f();
14336                    template <> void f<int>(); };
14337
14338      and an instantiation of S<double>::f<int>.  We want TD to be the
14339      specialization S<T>::f<int>, not the more general S<T>::f<U>.  */
14340   while (/* An instantiation cannot have a definition, so we need a
14341             more general template.  */
14342          DECL_TEMPLATE_INSTANTIATION (tmpl)
14343            /* We must also deal with friend templates.  Given:
14344
14345                 template <class T> struct S {
14346                   template <class U> friend void f() {};
14347                 };
14348
14349               S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
14350               so far as the language is concerned, but that's still
14351               where we get the pattern for the instantiation from.  On
14352               other hand, if the definition comes outside the class, say:
14353
14354                 template <class T> struct S {
14355                   template <class U> friend void f();
14356                 };
14357                 template <class U> friend void f() {}
14358
14359               we don't need to look any further.  That's what the check for
14360               DECL_INITIAL is for.  */
14361           || (TREE_CODE (decl) == FUNCTION_DECL
14362               && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
14363               && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
14364     {
14365       /* The present template, TD, should not be a definition.  If it
14366          were a definition, we should be using it!  Note that we
14367          cannot restructure the loop to just keep going until we find
14368          a template with a definition, since that might go too far if
14369          a specialization was declared, but not defined.  */
14370       gcc_assert (TREE_CODE (decl) != VAR_DECL
14371                   || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl)));
14372
14373       /* Fetch the more general template.  */
14374       tmpl = DECL_TI_TEMPLATE (tmpl);
14375     }
14376
14377   return tmpl;
14378 }
14379
14380 /* Produce the definition of D, a _DECL generated from a template.  If
14381    DEFER_OK is nonzero, then we don't have to actually do the
14382    instantiation now; we just have to do it sometime.  Normally it is
14383    an error if this is an explicit instantiation but D is undefined.
14384    EXPL_INST_CLASS_MEM_P is true iff D is a member of an
14385    explicitly instantiated class template.  */
14386
14387 tree
14388 instantiate_decl (tree d, int defer_ok,
14389                   bool expl_inst_class_mem_p)
14390 {
14391   tree tmpl = DECL_TI_TEMPLATE (d);
14392   tree gen_args;
14393   tree args;
14394   tree td;
14395   tree code_pattern;
14396   tree spec;
14397   tree gen_tmpl;
14398   bool pattern_defined;
14399   int need_push;
14400   location_t saved_loc = input_location;
14401   int saved_in_system_header = in_system_header;
14402   bool external_p;
14403
14404   /* This function should only be used to instantiate templates for
14405      functions and static member variables.  */
14406   gcc_assert (TREE_CODE (d) == FUNCTION_DECL
14407               || TREE_CODE (d) == VAR_DECL);
14408
14409   /* Variables are never deferred; if instantiation is required, they
14410      are instantiated right away.  That allows for better code in the
14411      case that an expression refers to the value of the variable --
14412      if the variable has a constant value the referring expression can
14413      take advantage of that fact.  */
14414   if (TREE_CODE (d) == VAR_DECL)
14415     defer_ok = 0;
14416
14417   /* Don't instantiate cloned functions.  Instead, instantiate the
14418      functions they cloned.  */
14419   if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
14420     d = DECL_CLONED_FUNCTION (d);
14421
14422   if (DECL_TEMPLATE_INSTANTIATED (d))
14423     /* D has already been instantiated.  It might seem reasonable to
14424        check whether or not D is an explicit instantiation, and, if so,
14425        stop here.  But when an explicit instantiation is deferred
14426        until the end of the compilation, DECL_EXPLICIT_INSTANTIATION
14427        is set, even though we still need to do the instantiation.  */
14428     return d;
14429
14430   /* If we already have a specialization of this declaration, then
14431      there's no reason to instantiate it.  Note that
14432      retrieve_specialization gives us both instantiations and
14433      specializations, so we must explicitly check
14434      DECL_TEMPLATE_SPECIALIZATION.  */
14435   gen_tmpl = most_general_template (tmpl);
14436   gen_args = DECL_TI_ARGS (d);
14437   spec = retrieve_specialization (gen_tmpl, gen_args,
14438                                   /*class_specializations_p=*/false);
14439   if (spec != NULL_TREE && DECL_TEMPLATE_SPECIALIZATION (spec))
14440     return spec;
14441
14442   /* This needs to happen before any tsubsting.  */
14443   if (! push_tinst_level (d))
14444     return d;
14445
14446   timevar_push (TV_PARSE);
14447
14448   /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
14449      for the instantiation.  */
14450   td = template_for_substitution (d);
14451   code_pattern = DECL_TEMPLATE_RESULT (td);
14452
14453   /* We should never be trying to instantiate a member of a class
14454      template or partial specialization.  */
14455   gcc_assert (d != code_pattern);
14456
14457   if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
14458       || DECL_TEMPLATE_SPECIALIZATION (td))
14459     /* In the case of a friend template whose definition is provided
14460        outside the class, we may have too many arguments.  Drop the
14461        ones we don't need.  The same is true for specializations.  */
14462     args = get_innermost_template_args
14463       (gen_args, TMPL_PARMS_DEPTH  (DECL_TEMPLATE_PARMS (td)));
14464   else
14465     args = gen_args;
14466
14467   if (TREE_CODE (d) == FUNCTION_DECL)
14468     pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE);
14469   else
14470     pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
14471
14472   /* We may be in the middle of deferred access check.  Disable it now.  */
14473   push_deferring_access_checks (dk_no_deferred);
14474
14475   /* Unless an explicit instantiation directive has already determined
14476      the linkage of D, remember that a definition is available for
14477      this entity.  */
14478   if (pattern_defined
14479       && !DECL_INTERFACE_KNOWN (d)
14480       && !DECL_NOT_REALLY_EXTERN (d))
14481     mark_definable (d);
14482
14483   input_location = DECL_SOURCE_LOCATION (d);
14484   in_system_header = DECL_IN_SYSTEM_HEADER (d);
14485
14486   /* If D is a member of an explicitly instantiated class template,
14487      and no definition is available, treat it like an implicit
14488      instantiation.  */
14489   if (!pattern_defined && expl_inst_class_mem_p
14490       && DECL_EXPLICIT_INSTANTIATION (d))
14491     {
14492       DECL_NOT_REALLY_EXTERN (d) = 0;
14493       DECL_INTERFACE_KNOWN (d) = 0;
14494       SET_DECL_IMPLICIT_INSTANTIATION (d);
14495     }
14496
14497   if (!defer_ok)
14498     {
14499       /* Recheck the substitutions to obtain any warning messages
14500          about ignoring cv qualifiers.  */
14501       tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
14502       tree type = TREE_TYPE (gen);
14503
14504       /* Make sure that we can see identifiers, and compute access
14505          correctly.  D is already the target FUNCTION_DECL with the
14506          right context.  */
14507       push_access_scope (d);
14508
14509       if (TREE_CODE (gen) == FUNCTION_DECL)
14510         {
14511           tsubst (DECL_ARGUMENTS (gen), gen_args, tf_warning_or_error, d);
14512           tsubst_exception_specification (type, gen_args, tf_warning_or_error,
14513                                           d);
14514           /* Don't simply tsubst the function type, as that will give
14515              duplicate warnings about poor parameter qualifications.
14516              The function arguments are the same as the decl_arguments
14517              without the top level cv qualifiers.  */
14518           type = TREE_TYPE (type);
14519         }
14520       tsubst (type, gen_args, tf_warning_or_error, d);
14521
14522       pop_access_scope (d);
14523     }
14524
14525   /* Check to see whether we know that this template will be
14526      instantiated in some other file, as with "extern template"
14527      extension.  */
14528   external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
14529   /* In general, we do not instantiate such templates...  */
14530   if (external_p
14531       /* ... but we instantiate inline functions so that we can inline
14532          them and ... */
14533       && ! (TREE_CODE (d) == FUNCTION_DECL && DECL_INLINE (d))
14534       /* ... we instantiate static data members whose values are
14535          needed in integral constant expressions.  */
14536       && ! (TREE_CODE (d) == VAR_DECL
14537             && DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (d)))
14538     goto out;
14539   /* Defer all other templates, unless we have been explicitly
14540      forbidden from doing so.  */
14541   if (/* If there is no definition, we cannot instantiate the
14542          template.  */
14543       ! pattern_defined
14544       /* If it's OK to postpone instantiation, do so.  */
14545       || defer_ok
14546       /* If this is a static data member that will be defined
14547          elsewhere, we don't want to instantiate the entire data
14548          member, but we do want to instantiate the initializer so that
14549          we can substitute that elsewhere.  */
14550       || (external_p && TREE_CODE (d) == VAR_DECL))
14551     {
14552       /* The definition of the static data member is now required so
14553          we must substitute the initializer.  */
14554       if (TREE_CODE (d) == VAR_DECL
14555           && !DECL_INITIAL (d)
14556           && DECL_INITIAL (code_pattern))
14557         {
14558           tree ns;
14559           tree init;
14560
14561           ns = decl_namespace_context (d);
14562           push_nested_namespace (ns);
14563           push_nested_class (DECL_CONTEXT (d));
14564           init = tsubst_expr (DECL_INITIAL (code_pattern),
14565                               args,
14566                               tf_warning_or_error, NULL_TREE,
14567                               /*integral_constant_expression_p=*/false);
14568           cp_finish_decl (d, init, /*init_const_expr_p=*/false,
14569                           /*asmspec_tree=*/NULL_TREE,
14570                           LOOKUP_ONLYCONVERTING);
14571           pop_nested_class ();
14572           pop_nested_namespace (ns);
14573         }
14574
14575       /* We restore the source position here because it's used by
14576          add_pending_template.  */
14577       input_location = saved_loc;
14578
14579       if (at_eof && !pattern_defined
14580           && DECL_EXPLICIT_INSTANTIATION (d))
14581         /* [temp.explicit]
14582
14583            The definition of a non-exported function template, a
14584            non-exported member function template, or a non-exported
14585            member function or static data member of a class template
14586            shall be present in every translation unit in which it is
14587            explicitly instantiated.  */
14588         pedwarn
14589           ("explicit instantiation of %qD but no definition available", d);
14590
14591       /* ??? Historically, we have instantiated inline functions, even
14592          when marked as "extern template".  */
14593       if (!(external_p && TREE_CODE (d) == VAR_DECL))
14594         add_pending_template (d);
14595       goto out;
14596     }
14597   /* Tell the repository that D is available in this translation unit
14598      -- and see if it is supposed to be instantiated here.  */
14599   if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
14600     {
14601       /* In a PCH file, despite the fact that the repository hasn't
14602          requested instantiation in the PCH it is still possible that
14603          an instantiation will be required in a file that includes the
14604          PCH.  */
14605       if (pch_file)
14606         add_pending_template (d);
14607       /* Instantiate inline functions so that the inliner can do its
14608          job, even though we'll not be emitting a copy of this
14609          function.  */
14610       if (!(TREE_CODE (d) == FUNCTION_DECL
14611             && flag_inline_trees
14612             && DECL_DECLARED_INLINE_P (d)))
14613         goto out;
14614     }
14615
14616   need_push = !cfun || !global_bindings_p ();
14617   if (need_push)
14618     push_to_top_level ();
14619
14620   /* Mark D as instantiated so that recursive calls to
14621      instantiate_decl do not try to instantiate it again.  */
14622   DECL_TEMPLATE_INSTANTIATED (d) = 1;
14623
14624   /* Regenerate the declaration in case the template has been modified
14625      by a subsequent redeclaration.  */
14626   regenerate_decl_from_template (d, td);
14627
14628   /* We already set the file and line above.  Reset them now in case
14629      they changed as a result of calling regenerate_decl_from_template.  */
14630   input_location = DECL_SOURCE_LOCATION (d);
14631
14632   if (TREE_CODE (d) == VAR_DECL)
14633     {
14634       tree init;
14635
14636       /* Clear out DECL_RTL; whatever was there before may not be right
14637          since we've reset the type of the declaration.  */
14638       SET_DECL_RTL (d, NULL_RTX);
14639       DECL_IN_AGGR_P (d) = 0;
14640
14641       /* The initializer is placed in DECL_INITIAL by
14642          regenerate_decl_from_template.  Pull it out so that
14643          finish_decl can process it.  */
14644       init = DECL_INITIAL (d);
14645       DECL_INITIAL (d) = NULL_TREE;
14646       DECL_INITIALIZED_P (d) = 0;
14647
14648       /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
14649          initializer.  That function will defer actual emission until
14650          we have a chance to determine linkage.  */
14651       DECL_EXTERNAL (d) = 0;
14652
14653       /* Enter the scope of D so that access-checking works correctly.  */
14654       push_nested_class (DECL_CONTEXT (d));
14655       finish_decl (d, init, NULL_TREE);
14656       pop_nested_class ();
14657     }
14658   else if (TREE_CODE (d) == FUNCTION_DECL)
14659     {
14660       htab_t saved_local_specializations;
14661       tree subst_decl;
14662       tree tmpl_parm;
14663       tree spec_parm;
14664
14665       /* Save away the current list, in case we are instantiating one
14666          template from within the body of another.  */
14667       saved_local_specializations = local_specializations;
14668
14669       /* Set up the list of local specializations.  */
14670       local_specializations = htab_create (37,
14671                                            hash_local_specialization,
14672                                            eq_local_specializations,
14673                                            NULL);
14674
14675       /* Set up context.  */
14676       start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
14677
14678       /* Create substitution entries for the parameters.  */
14679       subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
14680       tmpl_parm = DECL_ARGUMENTS (subst_decl);
14681       spec_parm = DECL_ARGUMENTS (d);
14682       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
14683         {
14684           register_local_specialization (spec_parm, tmpl_parm);
14685           spec_parm = skip_artificial_parms_for (d, spec_parm);
14686           tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
14687         }
14688       while (tmpl_parm && !FUNCTION_PARAMETER_PACK_P (tmpl_parm))
14689         {
14690           register_local_specialization (spec_parm, tmpl_parm);
14691           tmpl_parm = TREE_CHAIN (tmpl_parm);
14692           spec_parm = TREE_CHAIN (spec_parm);
14693         }
14694       if (tmpl_parm && FUNCTION_PARAMETER_PACK_P (tmpl_parm))
14695         {
14696           /* Collect all of the extra "packed" parameters into an
14697              argument pack.  */
14698           tree parmvec;
14699           tree parmtypevec;
14700           tree argpack = make_node (NONTYPE_ARGUMENT_PACK);
14701           tree argtypepack = make_node (TYPE_ARGUMENT_PACK);
14702           int i, len = 0;
14703           tree t;
14704           
14705           /* Count how many parameters remain.  */
14706           for (t = spec_parm; t; t = TREE_CHAIN (t))
14707             len++;
14708
14709           /* Fill in PARMVEC and PARMTYPEVEC with all of the parameters.  */
14710           parmvec = make_tree_vec (len);
14711           parmtypevec = make_tree_vec (len);
14712           for(i = 0; i < len; i++, spec_parm = TREE_CHAIN (spec_parm))
14713             {
14714               TREE_VEC_ELT (parmvec, i) = spec_parm;
14715               TREE_VEC_ELT (parmtypevec, i) = TREE_TYPE (spec_parm);
14716             }
14717
14718           /* Build the argument packs.  */
14719           SET_ARGUMENT_PACK_ARGS (argpack, parmvec);
14720           SET_ARGUMENT_PACK_ARGS (argtypepack, parmtypevec);
14721           TREE_TYPE (argpack) = argtypepack;
14722           
14723           /* Register the (value) argument pack as a specialization of
14724              TMPL_PARM, then move on.  */
14725           register_local_specialization (argpack, tmpl_parm);
14726           tmpl_parm = TREE_CHAIN (tmpl_parm);
14727         }
14728       gcc_assert (!spec_parm);
14729
14730       /* Substitute into the body of the function.  */
14731       tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
14732                    tf_warning_or_error, tmpl,
14733                    /*integral_constant_expression_p=*/false);
14734
14735       /* Set the current input_location to the end of the function
14736          so that finish_function knows where we are.  */
14737       input_location = DECL_STRUCT_FUNCTION (code_pattern)->function_end_locus;
14738
14739       /* We don't need the local specializations any more.  */
14740       htab_delete (local_specializations);
14741       local_specializations = saved_local_specializations;
14742
14743       /* Finish the function.  */
14744       d = finish_function (0);
14745       expand_or_defer_fn (d);
14746     }
14747
14748   /* We're not deferring instantiation any more.  */
14749   TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
14750
14751   if (need_push)
14752     pop_from_top_level ();
14753
14754 out:
14755   input_location = saved_loc;
14756   in_system_header = saved_in_system_header;
14757   pop_deferring_access_checks ();
14758   pop_tinst_level ();
14759
14760   timevar_pop (TV_PARSE);
14761
14762   return d;
14763 }
14764
14765 /* Run through the list of templates that we wish we could
14766    instantiate, and instantiate any we can.  RETRIES is the
14767    number of times we retry pending template instantiation.  */
14768
14769 void
14770 instantiate_pending_templates (int retries)
14771 {
14772   int reconsider;
14773   location_t saved_loc = input_location;
14774   int saved_in_system_header = in_system_header;
14775
14776   /* Instantiating templates may trigger vtable generation.  This in turn
14777      may require further template instantiations.  We place a limit here
14778      to avoid infinite loop.  */
14779   if (pending_templates && retries >= max_tinst_depth)
14780     {
14781       tree decl = pending_templates->tinst->decl;
14782
14783       error ("template instantiation depth exceeds maximum of %d"
14784              " instantiating %q+D, possibly from virtual table generation"
14785              " (use -ftemplate-depth-NN to increase the maximum)",
14786              max_tinst_depth, decl);
14787       if (TREE_CODE (decl) == FUNCTION_DECL)
14788         /* Pretend that we defined it.  */
14789         DECL_INITIAL (decl) = error_mark_node;
14790       return;
14791     }
14792
14793   do
14794     {
14795       struct pending_template **t = &pending_templates;
14796       struct pending_template *last = NULL;
14797       reconsider = 0;
14798       while (*t)
14799         {
14800           tree instantiation = reopen_tinst_level ((*t)->tinst);
14801           bool complete = false;
14802
14803           if (TYPE_P (instantiation))
14804             {
14805               tree fn;
14806
14807               if (!COMPLETE_TYPE_P (instantiation))
14808                 {
14809                   instantiate_class_template (instantiation);
14810                   if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
14811                     for (fn = TYPE_METHODS (instantiation);
14812                          fn;
14813                          fn = TREE_CHAIN (fn))
14814                       if (! DECL_ARTIFICIAL (fn))
14815                         instantiate_decl (fn,
14816                                           /*defer_ok=*/0,
14817                                           /*expl_inst_class_mem_p=*/false);
14818                   if (COMPLETE_TYPE_P (instantiation))
14819                     reconsider = 1;
14820                 }
14821
14822               complete = COMPLETE_TYPE_P (instantiation);
14823             }
14824           else
14825             {
14826               if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
14827                   && !DECL_TEMPLATE_INSTANTIATED (instantiation))
14828                 {
14829                   instantiation
14830                     = instantiate_decl (instantiation,
14831                                         /*defer_ok=*/0,
14832                                         /*expl_inst_class_mem_p=*/false);
14833                   if (DECL_TEMPLATE_INSTANTIATED (instantiation))
14834                     reconsider = 1;
14835                 }
14836
14837               complete = (DECL_TEMPLATE_SPECIALIZATION (instantiation)
14838                           || DECL_TEMPLATE_INSTANTIATED (instantiation));
14839             }
14840
14841           if (complete)
14842             /* If INSTANTIATION has been instantiated, then we don't
14843                need to consider it again in the future.  */
14844             *t = (*t)->next;
14845           else
14846             {
14847               last = *t;
14848               t = &(*t)->next;
14849             }
14850           tinst_depth = 0;
14851           current_tinst_level = NULL;
14852         }
14853       last_pending_template = last;
14854     }
14855   while (reconsider);
14856
14857   input_location = saved_loc;
14858   in_system_header = saved_in_system_header;
14859 }
14860
14861 /* Substitute ARGVEC into T, which is a list of initializers for
14862    either base class or a non-static data member.  The TREE_PURPOSEs
14863    are DECLs, and the TREE_VALUEs are the initializer values.  Used by
14864    instantiate_decl.  */
14865
14866 static tree
14867 tsubst_initializer_list (tree t, tree argvec)
14868 {
14869   tree inits = NULL_TREE;
14870
14871   for (; t; t = TREE_CHAIN (t))
14872     {
14873       tree decl;
14874       tree init;
14875       tree expanded_bases = NULL_TREE;
14876       tree expanded_arguments = NULL_TREE;
14877       int i, len = 1;
14878
14879       if (TREE_CODE (TREE_PURPOSE (t)) == TYPE_PACK_EXPANSION)
14880         {
14881           tree expr;
14882           tree arg;
14883
14884           /* Expand the base class expansion type into separate base
14885              classes.  */
14886           expanded_bases = tsubst_pack_expansion (TREE_PURPOSE (t), argvec,
14887                                                  tf_warning_or_error,
14888                                                  NULL_TREE);
14889           if (expanded_bases == error_mark_node)
14890             continue;
14891           
14892           /* We'll be building separate TREE_LISTs of arguments for
14893              each base.  */
14894           len = TREE_VEC_LENGTH (expanded_bases);
14895           expanded_arguments = make_tree_vec (len);
14896           for (i = 0; i < len; i++)
14897             TREE_VEC_ELT (expanded_arguments, i) = NULL_TREE;
14898
14899           /* Build a dummy EXPR_PACK_EXPANSION that will be used to
14900              expand each argument in the TREE_VALUE of t.  */
14901           expr = make_node (EXPR_PACK_EXPANSION);
14902           PACK_EXPANSION_PARAMETER_PACKS (expr) =
14903             PACK_EXPANSION_PARAMETER_PACKS (TREE_PURPOSE (t));
14904
14905           /* Substitute parameter packs into each argument in the
14906              TREE_LIST.  */
14907           in_base_initializer = 1;
14908           for (arg = TREE_VALUE (t); arg; arg = TREE_CHAIN (arg))
14909             {
14910               tree expanded_exprs;
14911
14912               /* Expand the argument.  */
14913               SET_PACK_EXPANSION_PATTERN (expr, TREE_VALUE (arg));
14914               expanded_exprs = tsubst_pack_expansion (expr, argvec,
14915                                                       tf_warning_or_error,
14916                                                       NULL_TREE);
14917
14918               /* Prepend each of the expanded expressions to the
14919                  corresponding TREE_LIST in EXPANDED_ARGUMENTS.  */
14920               for (i = 0; i < len; i++)
14921                 {
14922                   TREE_VEC_ELT (expanded_arguments, i) = 
14923                     tree_cons (NULL_TREE, TREE_VEC_ELT (expanded_exprs, i),
14924                                TREE_VEC_ELT (expanded_arguments, i));
14925                 }
14926             }
14927           in_base_initializer = 0;
14928
14929           /* Reverse all of the TREE_LISTs in EXPANDED_ARGUMENTS,
14930              since we built them backwards.  */
14931           for (i = 0; i < len; i++)
14932             {
14933               TREE_VEC_ELT (expanded_arguments, i) = 
14934                 nreverse (TREE_VEC_ELT (expanded_arguments, i));
14935             }
14936         }
14937
14938       for (i = 0; i < len; ++i)
14939         {
14940           if (expanded_bases)
14941             {
14942               decl = TREE_VEC_ELT (expanded_bases, i);
14943               decl = expand_member_init (decl);
14944               init = TREE_VEC_ELT (expanded_arguments, i);
14945             }
14946           else
14947             {
14948               decl = tsubst_copy (TREE_PURPOSE (t), argvec, 
14949                                   tf_warning_or_error, NULL_TREE);
14950
14951               decl = expand_member_init (decl);
14952               if (decl && !DECL_P (decl))
14953                 in_base_initializer = 1;
14954
14955               init = tsubst_expr (TREE_VALUE (t), argvec, 
14956                                   tf_warning_or_error, NULL_TREE,
14957                                   /*integral_constant_expression_p=*/false);
14958               in_base_initializer = 0;
14959             }
14960
14961           if (decl)
14962             {
14963               init = build_tree_list (decl, init);
14964               TREE_CHAIN (init) = inits;
14965               inits = init;
14966             }
14967         }
14968     }
14969   return inits;
14970 }
14971
14972 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL.  */
14973
14974 static void
14975 set_current_access_from_decl (tree decl)
14976 {
14977   if (TREE_PRIVATE (decl))
14978     current_access_specifier = access_private_node;
14979   else if (TREE_PROTECTED (decl))
14980     current_access_specifier = access_protected_node;
14981   else
14982     current_access_specifier = access_public_node;
14983 }
14984
14985 /* Instantiate an enumerated type.  TAG is the template type, NEWTAG
14986    is the instantiation (which should have been created with
14987    start_enum) and ARGS are the template arguments to use.  */
14988
14989 static void
14990 tsubst_enum (tree tag, tree newtag, tree args)
14991 {
14992   tree e;
14993
14994   for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
14995     {
14996       tree value;
14997       tree decl;
14998
14999       decl = TREE_VALUE (e);
15000       /* Note that in a template enum, the TREE_VALUE is the
15001          CONST_DECL, not the corresponding INTEGER_CST.  */
15002       value = tsubst_expr (DECL_INITIAL (decl),
15003                            args, tf_warning_or_error, NULL_TREE,
15004                            /*integral_constant_expression_p=*/true);
15005
15006       /* Give this enumeration constant the correct access.  */
15007       set_current_access_from_decl (decl);
15008
15009       /* Actually build the enumerator itself.  */
15010       build_enumerator (DECL_NAME (decl), value, newtag);
15011     }
15012
15013   finish_enum (newtag);
15014   DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
15015     = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
15016 }
15017
15018 /* DECL is a FUNCTION_DECL that is a template specialization.  Return
15019    its type -- but without substituting the innermost set of template
15020    arguments.  So, innermost set of template parameters will appear in
15021    the type.  */
15022
15023 tree
15024 get_mostly_instantiated_function_type (tree decl)
15025 {
15026   tree fn_type;
15027   tree tmpl;
15028   tree targs;
15029   tree tparms;
15030   int parm_depth;
15031
15032   tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
15033   targs = DECL_TI_ARGS (decl);
15034   tparms = DECL_TEMPLATE_PARMS (tmpl);
15035   parm_depth = TMPL_PARMS_DEPTH (tparms);
15036
15037   /* There should be as many levels of arguments as there are levels
15038      of parameters.  */
15039   gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
15040
15041   fn_type = TREE_TYPE (tmpl);
15042
15043   if (parm_depth == 1)
15044     /* No substitution is necessary.  */
15045     ;
15046   else
15047     {
15048       int i, save_access_control;
15049       tree partial_args;
15050
15051       /* Replace the innermost level of the TARGS with NULL_TREEs to
15052          let tsubst know not to substitute for those parameters.  */
15053       partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
15054       for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
15055         SET_TMPL_ARGS_LEVEL (partial_args, i,
15056                              TMPL_ARGS_LEVEL (targs, i));
15057       SET_TMPL_ARGS_LEVEL (partial_args,
15058                            TMPL_ARGS_DEPTH (targs),
15059                            make_tree_vec (DECL_NTPARMS (tmpl)));
15060
15061       /* Disable access control as this function is used only during
15062          name-mangling.  */
15063       save_access_control = flag_access_control;
15064       flag_access_control = 0;
15065
15066       ++processing_template_decl;
15067       /* Now, do the (partial) substitution to figure out the
15068          appropriate function type.  */
15069       fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
15070       --processing_template_decl;
15071
15072       /* Substitute into the template parameters to obtain the real
15073          innermost set of parameters.  This step is important if the
15074          innermost set of template parameters contains value
15075          parameters whose types depend on outer template parameters.  */
15076       TREE_VEC_LENGTH (partial_args)--;
15077       tparms = tsubst_template_parms (tparms, partial_args, tf_error);
15078
15079       flag_access_control = save_access_control;
15080     }
15081
15082   return fn_type;
15083 }
15084
15085 /* Return truthvalue if we're processing a template different from
15086    the last one involved in diagnostics.  */
15087 int
15088 problematic_instantiation_changed (void)
15089 {
15090   return last_template_error_tick != tinst_level_tick;
15091 }
15092
15093 /* Remember current template involved in diagnostics.  */
15094 void
15095 record_last_problematic_instantiation (void)
15096 {
15097   last_template_error_tick = tinst_level_tick;
15098 }
15099
15100 struct tinst_level *
15101 current_instantiation (void)
15102 {
15103   return current_tinst_level;
15104 }
15105
15106 /* [temp.param] Check that template non-type parm TYPE is of an allowable
15107    type. Return zero for ok, nonzero for disallowed. Issue error and
15108    warning messages under control of COMPLAIN.  */
15109
15110 static int
15111 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
15112 {
15113   if (INTEGRAL_TYPE_P (type))
15114     return 0;
15115   else if (POINTER_TYPE_P (type))
15116     return 0;
15117   else if (TYPE_PTR_TO_MEMBER_P (type))
15118     return 0;
15119   else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
15120     return 0;
15121   else if (TREE_CODE (type) == TYPENAME_TYPE)
15122     return 0;
15123
15124   if (complain & tf_error)
15125     error ("%q#T is not a valid type for a template constant parameter", type);
15126   return 1;
15127 }
15128
15129 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
15130    Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
15131
15132 static bool
15133 dependent_type_p_r (tree type)
15134 {
15135   tree scope;
15136
15137   /* [temp.dep.type]
15138
15139      A type is dependent if it is:
15140
15141      -- a template parameter. Template template parameters are types
15142         for us (since TYPE_P holds true for them) so we handle
15143         them here.  */
15144   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
15145       || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
15146     return true;
15147   /* -- a qualified-id with a nested-name-specifier which contains a
15148         class-name that names a dependent type or whose unqualified-id
15149         names a dependent type.  */
15150   if (TREE_CODE (type) == TYPENAME_TYPE)
15151     return true;
15152   /* -- a cv-qualified type where the cv-unqualified type is
15153         dependent.  */
15154   type = TYPE_MAIN_VARIANT (type);
15155   /* -- a compound type constructed from any dependent type.  */
15156   if (TYPE_PTR_TO_MEMBER_P (type))
15157     return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
15158             || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
15159                                            (type)));
15160   else if (TREE_CODE (type) == POINTER_TYPE
15161            || TREE_CODE (type) == REFERENCE_TYPE)
15162     return dependent_type_p (TREE_TYPE (type));
15163   else if (TREE_CODE (type) == FUNCTION_TYPE
15164            || TREE_CODE (type) == METHOD_TYPE)
15165     {
15166       tree arg_type;
15167
15168       if (dependent_type_p (TREE_TYPE (type)))
15169         return true;
15170       for (arg_type = TYPE_ARG_TYPES (type);
15171            arg_type;
15172            arg_type = TREE_CHAIN (arg_type))
15173         if (dependent_type_p (TREE_VALUE (arg_type)))
15174           return true;
15175       return false;
15176     }
15177   /* -- an array type constructed from any dependent type or whose
15178         size is specified by a constant expression that is
15179         value-dependent.  */
15180   if (TREE_CODE (type) == ARRAY_TYPE)
15181     {
15182       if (TYPE_DOMAIN (type)
15183           && ((value_dependent_expression_p
15184                (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
15185               || (type_dependent_expression_p
15186                   (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))))
15187         return true;
15188       return dependent_type_p (TREE_TYPE (type));
15189     }
15190
15191   /* -- a template-id in which either the template name is a template
15192      parameter ...  */
15193   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
15194     return true;
15195   /* ... or any of the template arguments is a dependent type or
15196         an expression that is type-dependent or value-dependent.  */
15197   else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
15198            && (any_dependent_template_arguments_p
15199                (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
15200     return true;
15201
15202   /* All TYPEOF_TYPEs and DECLTYPE_TYPEs are dependent; if the
15203      argument of the `typeof' expression is not type-dependent, then
15204      it should already been have resolved.  */
15205   if (TREE_CODE (type) == TYPEOF_TYPE
15206       || TREE_CODE (type) == DECLTYPE_TYPE)
15207     return true;
15208
15209   /* A template argument pack is dependent if any of its packed
15210      arguments are.  */
15211   if (TREE_CODE (type) == TYPE_ARGUMENT_PACK)
15212     {
15213       tree args = ARGUMENT_PACK_ARGS (type);
15214       int i, len = TREE_VEC_LENGTH (args);
15215       for (i = 0; i < len; ++i)
15216         if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
15217           return true;
15218     }
15219
15220   /* All TYPE_PACK_EXPANSIONs are dependent, because parameter packs must
15221      be template parameters.  */
15222   if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
15223     return true;
15224
15225   /* The standard does not specifically mention types that are local
15226      to template functions or local classes, but they should be
15227      considered dependent too.  For example:
15228
15229        template <int I> void f() {
15230          enum E { a = I };
15231          S<sizeof (E)> s;
15232        }
15233
15234      The size of `E' cannot be known until the value of `I' has been
15235      determined.  Therefore, `E' must be considered dependent.  */
15236   scope = TYPE_CONTEXT (type);
15237   if (scope && TYPE_P (scope))
15238     return dependent_type_p (scope);
15239   else if (scope && TREE_CODE (scope) == FUNCTION_DECL)
15240     return type_dependent_expression_p (scope);
15241
15242   /* Other types are non-dependent.  */
15243   return false;
15244 }
15245
15246 /* Returns TRUE if TYPE is dependent, in the sense of
15247    [temp.dep.type].  */
15248
15249 bool
15250 dependent_type_p (tree type)
15251 {
15252   /* If there are no template parameters in scope, then there can't be
15253      any dependent types.  */
15254   if (!processing_template_decl)
15255     {
15256       /* If we are not processing a template, then nobody should be
15257          providing us with a dependent type.  */
15258       gcc_assert (type);
15259       gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM);
15260       return false;
15261     }
15262
15263   /* If the type is NULL, we have not computed a type for the entity
15264      in question; in that case, the type is dependent.  */
15265   if (!type)
15266     return true;
15267
15268   /* Erroneous types can be considered non-dependent.  */
15269   if (type == error_mark_node)
15270     return false;
15271
15272   /* If we have not already computed the appropriate value for TYPE,
15273      do so now.  */
15274   if (!TYPE_DEPENDENT_P_VALID (type))
15275     {
15276       TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
15277       TYPE_DEPENDENT_P_VALID (type) = 1;
15278     }
15279
15280   return TYPE_DEPENDENT_P (type);
15281 }
15282
15283 /* Returns TRUE if EXPRESSION is dependent, according to CRITERION.  */
15284
15285 static bool
15286 dependent_scope_ref_p (tree expression, bool criterion (tree))
15287 {
15288   tree scope;
15289   tree name;
15290
15291   gcc_assert (TREE_CODE (expression) == SCOPE_REF);
15292
15293   if (!TYPE_P (TREE_OPERAND (expression, 0)))
15294     return true;
15295
15296   scope = TREE_OPERAND (expression, 0);
15297   name = TREE_OPERAND (expression, 1);
15298
15299   /* [temp.dep.expr]
15300
15301      An id-expression is type-dependent if it contains a
15302      nested-name-specifier that contains a class-name that names a
15303      dependent type.  */
15304   /* The suggested resolution to Core Issue 2 implies that if the
15305      qualifying type is the current class, then we must peek
15306      inside it.  */
15307   if (DECL_P (name)
15308       && currently_open_class (scope)
15309       && !criterion (name))
15310     return false;
15311   if (dependent_type_p (scope))
15312     return true;
15313
15314   return false;
15315 }
15316
15317 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
15318    [temp.dep.constexpr].  EXPRESSION is already known to be a constant
15319    expression.  */
15320
15321 bool
15322 value_dependent_expression_p (tree expression)
15323 {
15324   if (!processing_template_decl)
15325     return false;
15326
15327   /* A name declared with a dependent type.  */
15328   if (DECL_P (expression) && type_dependent_expression_p (expression))
15329     return true;
15330
15331   switch (TREE_CODE (expression))
15332     {
15333     case IDENTIFIER_NODE:
15334       /* A name that has not been looked up -- must be dependent.  */
15335       return true;
15336
15337     case TEMPLATE_PARM_INDEX:
15338       /* A non-type template parm.  */
15339       return true;
15340
15341     case CONST_DECL:
15342       /* A non-type template parm.  */
15343       if (DECL_TEMPLATE_PARM_P (expression))
15344         return true;
15345       return false;
15346
15347     case VAR_DECL:
15348        /* A constant with integral or enumeration type and is initialized
15349           with an expression that is value-dependent.  */
15350       if (DECL_INITIAL (expression)
15351           && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (expression))
15352           && value_dependent_expression_p (DECL_INITIAL (expression)))
15353         return true;
15354       return false;
15355
15356     case DYNAMIC_CAST_EXPR:
15357     case STATIC_CAST_EXPR:
15358     case CONST_CAST_EXPR:
15359     case REINTERPRET_CAST_EXPR:
15360     case CAST_EXPR:
15361       /* These expressions are value-dependent if the type to which
15362          the cast occurs is dependent or the expression being casted
15363          is value-dependent.  */
15364       {
15365         tree type = TREE_TYPE (expression);
15366
15367         if (dependent_type_p (type))
15368           return true;
15369
15370         /* A functional cast has a list of operands.  */
15371         expression = TREE_OPERAND (expression, 0);
15372         if (!expression)
15373           {
15374             /* If there are no operands, it must be an expression such
15375                as "int()". This should not happen for aggregate types
15376                because it would form non-constant expressions.  */
15377             gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type));
15378
15379             return false;
15380           }
15381
15382         if (TREE_CODE (expression) == TREE_LIST)
15383           return any_value_dependent_elements_p (expression);
15384
15385         return value_dependent_expression_p (expression);
15386       }
15387
15388     case SIZEOF_EXPR:
15389     case ALIGNOF_EXPR:
15390       /* A `sizeof' expression is value-dependent if the operand is
15391          type-dependent or is a pack expansion.  */
15392       expression = TREE_OPERAND (expression, 0);
15393       if (PACK_EXPANSION_P (expression))
15394         return true;
15395       else if (TYPE_P (expression))
15396         return dependent_type_p (expression);
15397       return type_dependent_expression_p (expression);
15398
15399     case SCOPE_REF:
15400       return dependent_scope_ref_p (expression, value_dependent_expression_p);
15401
15402     case COMPONENT_REF:
15403       return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
15404               || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
15405
15406     case CALL_EXPR:
15407       /* A CALL_EXPR may appear in a constant expression if it is a
15408          call to a builtin function, e.g., __builtin_constant_p.  All
15409          such calls are value-dependent.  */
15410       return true;
15411
15412     case NONTYPE_ARGUMENT_PACK:
15413       /* A NONTYPE_ARGUMENT_PACK is value-dependent if any packed argument
15414          is value-dependent.  */
15415       {
15416         tree values = ARGUMENT_PACK_ARGS (expression);
15417         int i, len = TREE_VEC_LENGTH (values);
15418         
15419         for (i = 0; i < len; ++i)
15420           if (value_dependent_expression_p (TREE_VEC_ELT (values, i)))
15421             return true;
15422         
15423         return false;
15424       }
15425
15426     case TRAIT_EXPR:
15427       {
15428         tree type2 = TRAIT_EXPR_TYPE2 (expression);
15429         return (dependent_type_p (TRAIT_EXPR_TYPE1 (expression))
15430                 || (type2 ? dependent_type_p (type2) : false));
15431       }
15432
15433     case MODOP_EXPR:
15434       return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
15435               || (value_dependent_expression_p (TREE_OPERAND (expression, 2))));
15436
15437     default:
15438       /* A constant expression is value-dependent if any subexpression is
15439          value-dependent.  */
15440       switch (TREE_CODE_CLASS (TREE_CODE (expression)))
15441         {
15442         case tcc_reference:
15443         case tcc_unary:
15444           return (value_dependent_expression_p
15445                   (TREE_OPERAND (expression, 0)));
15446
15447         case tcc_comparison:
15448         case tcc_binary:
15449           return ((value_dependent_expression_p
15450                    (TREE_OPERAND (expression, 0)))
15451                   || (value_dependent_expression_p
15452                       (TREE_OPERAND (expression, 1))));
15453
15454         case tcc_expression:
15455         case tcc_vl_exp:
15456           {
15457             int i;
15458             for (i = 0; i < TREE_OPERAND_LENGTH (expression); ++i)
15459               /* In some cases, some of the operands may be missing.
15460                  (For example, in the case of PREDECREMENT_EXPR, the
15461                  amount to increment by may be missing.)  That doesn't
15462                  make the expression dependent.  */
15463               if (TREE_OPERAND (expression, i)
15464                   && (value_dependent_expression_p
15465                       (TREE_OPERAND (expression, i))))
15466                 return true;
15467             return false;
15468           }
15469
15470         default:
15471           break;
15472         }
15473     }
15474
15475   /* The expression is not value-dependent.  */
15476   return false;
15477 }
15478
15479 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
15480    [temp.dep.expr].  */
15481
15482 bool
15483 type_dependent_expression_p (tree expression)
15484 {
15485   if (!processing_template_decl)
15486     return false;
15487
15488   if (expression == error_mark_node)
15489     return false;
15490
15491   /* An unresolved name is always dependent.  */
15492   if (TREE_CODE (expression) == IDENTIFIER_NODE
15493       || TREE_CODE (expression) == USING_DECL)
15494     return true;
15495
15496   /* Some expression forms are never type-dependent.  */
15497   if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
15498       || TREE_CODE (expression) == SIZEOF_EXPR
15499       || TREE_CODE (expression) == ALIGNOF_EXPR
15500       || TREE_CODE (expression) == TRAIT_EXPR
15501       || TREE_CODE (expression) == TYPEID_EXPR
15502       || TREE_CODE (expression) == DELETE_EXPR
15503       || TREE_CODE (expression) == VEC_DELETE_EXPR
15504       || TREE_CODE (expression) == THROW_EXPR)
15505     return false;
15506
15507   /* The types of these expressions depends only on the type to which
15508      the cast occurs.  */
15509   if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
15510       || TREE_CODE (expression) == STATIC_CAST_EXPR
15511       || TREE_CODE (expression) == CONST_CAST_EXPR
15512       || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
15513       || TREE_CODE (expression) == CAST_EXPR)
15514     return dependent_type_p (TREE_TYPE (expression));
15515
15516   /* The types of these expressions depends only on the type created
15517      by the expression.  */
15518   if (TREE_CODE (expression) == NEW_EXPR
15519       || TREE_CODE (expression) == VEC_NEW_EXPR)
15520     {
15521       /* For NEW_EXPR tree nodes created inside a template, either
15522          the object type itself or a TREE_LIST may appear as the
15523          operand 1.  */
15524       tree type = TREE_OPERAND (expression, 1);
15525       if (TREE_CODE (type) == TREE_LIST)
15526         /* This is an array type.  We need to check array dimensions
15527            as well.  */
15528         return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
15529                || value_dependent_expression_p
15530                     (TREE_OPERAND (TREE_VALUE (type), 1));
15531       else
15532         return dependent_type_p (type);
15533     }
15534
15535   if (TREE_CODE (expression) == SCOPE_REF
15536       && dependent_scope_ref_p (expression,
15537                                 type_dependent_expression_p))
15538     return true;
15539
15540   if (TREE_CODE (expression) == FUNCTION_DECL
15541       && DECL_LANG_SPECIFIC (expression)
15542       && DECL_TEMPLATE_INFO (expression)
15543       && (any_dependent_template_arguments_p
15544           (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
15545     return true;
15546
15547   if (TREE_CODE (expression) == TEMPLATE_DECL
15548       && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
15549     return false;
15550
15551   if (TREE_CODE (expression) == STMT_EXPR)
15552     expression = stmt_expr_value_expr (expression);
15553
15554   if (TREE_TYPE (expression) == unknown_type_node)
15555     {
15556       if (TREE_CODE (expression) == ADDR_EXPR)
15557         return type_dependent_expression_p (TREE_OPERAND (expression, 0));
15558       if (TREE_CODE (expression) == COMPONENT_REF
15559           || TREE_CODE (expression) == OFFSET_REF)
15560         {
15561           if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
15562             return true;
15563           expression = TREE_OPERAND (expression, 1);
15564           if (TREE_CODE (expression) == IDENTIFIER_NODE)
15565             return false;
15566         }
15567       /* SCOPE_REF with non-null TREE_TYPE is always non-dependent.  */
15568       if (TREE_CODE (expression) == SCOPE_REF)
15569         return false;
15570
15571       if (TREE_CODE (expression) == BASELINK)
15572         expression = BASELINK_FUNCTIONS (expression);
15573
15574       if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
15575         {
15576           if (any_dependent_template_arguments_p
15577               (TREE_OPERAND (expression, 1)))
15578             return true;
15579           expression = TREE_OPERAND (expression, 0);
15580         }
15581       gcc_assert (TREE_CODE (expression) == OVERLOAD
15582                   || TREE_CODE (expression) == FUNCTION_DECL);
15583
15584       while (expression)
15585         {
15586           if (type_dependent_expression_p (OVL_CURRENT (expression)))
15587             return true;
15588           expression = OVL_NEXT (expression);
15589         }
15590       return false;
15591     }
15592
15593   gcc_assert (TREE_CODE (expression) != TYPE_DECL);
15594
15595   return (dependent_type_p (TREE_TYPE (expression)));
15596 }
15597
15598 /* Returns TRUE if ARGS (a TREE_LIST of arguments to a function call)
15599    contains a type-dependent expression.  */
15600
15601 bool
15602 any_type_dependent_arguments_p (const_tree args)
15603 {
15604   while (args)
15605     {
15606       tree arg = TREE_VALUE (args);
15607
15608       if (type_dependent_expression_p (arg))
15609         return true;
15610       args = TREE_CHAIN (args);
15611     }
15612   return false;
15613 }
15614
15615 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
15616    expressions) contains any value-dependent expressions.  */
15617
15618 bool
15619 any_value_dependent_elements_p (const_tree list)
15620 {
15621   for (; list; list = TREE_CHAIN (list))
15622     if (value_dependent_expression_p (TREE_VALUE (list)))
15623       return true;
15624
15625   return false;
15626 }
15627
15628 /* Returns TRUE if the ARG (a template argument) is dependent.  */
15629
15630 bool
15631 dependent_template_arg_p (tree arg)
15632 {
15633   if (!processing_template_decl)
15634     return false;
15635
15636   if (TREE_CODE (arg) == TEMPLATE_DECL
15637       || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
15638     return dependent_template_p (arg);
15639   else if (ARGUMENT_PACK_P (arg))
15640     {
15641       tree args = ARGUMENT_PACK_ARGS (arg);
15642       int i, len = TREE_VEC_LENGTH (args);
15643       for (i = 0; i < len; ++i)
15644         {
15645           if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
15646             return true;
15647         }
15648
15649       return false;
15650     }
15651   else if (TYPE_P (arg))
15652     return dependent_type_p (arg);
15653   else
15654     return (type_dependent_expression_p (arg)
15655             || value_dependent_expression_p (arg));
15656 }
15657
15658 /* Returns true if ARGS (a collection of template arguments) contains
15659    any types that require structural equality testing.  */
15660
15661 bool
15662 any_template_arguments_need_structural_equality_p (tree args)
15663 {
15664   int i;
15665   int j;
15666
15667   if (!args)
15668     return false;
15669   if (args == error_mark_node)
15670     return true;
15671
15672   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
15673     {
15674       tree level = TMPL_ARGS_LEVEL (args, i + 1);
15675       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
15676         {
15677           tree arg = TREE_VEC_ELT (level, j);
15678           tree packed_args = NULL_TREE;
15679           int k, len = 1;
15680
15681           if (ARGUMENT_PACK_P (arg))
15682             {
15683               /* Look inside the argument pack.  */
15684               packed_args = ARGUMENT_PACK_ARGS (arg);
15685               len = TREE_VEC_LENGTH (packed_args);
15686             }
15687
15688           for (k = 0; k < len; ++k)
15689             {
15690               if (packed_args)
15691                 arg = TREE_VEC_ELT (packed_args, k);
15692
15693               if (error_operand_p (arg))
15694                 return true;
15695               else if (TREE_CODE (arg) == TEMPLATE_DECL
15696                        || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
15697                 continue;
15698               else if (TYPE_P (arg) && TYPE_STRUCTURAL_EQUALITY_P (arg))
15699                 return true;
15700               else if (!TYPE_P (arg) && TREE_TYPE (arg)
15701                        && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (arg)))
15702                 return true;
15703             }
15704         }
15705     }
15706
15707   return false;
15708 }
15709
15710 /* Returns true if ARGS (a collection of template arguments) contains
15711    any dependent arguments.  */
15712
15713 bool
15714 any_dependent_template_arguments_p (const_tree args)
15715 {
15716   int i;
15717   int j;
15718
15719   if (!args)
15720     return false;
15721   if (args == error_mark_node)
15722     return true;
15723
15724   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
15725     {
15726       const_tree level = TMPL_ARGS_LEVEL (args, i + 1);
15727       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
15728         if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
15729           return true;
15730     }
15731
15732   return false;
15733 }
15734
15735 /* Returns TRUE if the template TMPL is dependent.  */
15736
15737 bool
15738 dependent_template_p (tree tmpl)
15739 {
15740   if (TREE_CODE (tmpl) == OVERLOAD)
15741     {
15742       while (tmpl)
15743         {
15744           if (dependent_template_p (OVL_FUNCTION (tmpl)))
15745             return true;
15746           tmpl = OVL_CHAIN (tmpl);
15747         }
15748       return false;
15749     }
15750
15751   /* Template template parameters are dependent.  */
15752   if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
15753       || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
15754     return true;
15755   /* So are names that have not been looked up.  */
15756   if (TREE_CODE (tmpl) == SCOPE_REF
15757       || TREE_CODE (tmpl) == IDENTIFIER_NODE)
15758     return true;
15759   /* So are member templates of dependent classes.  */
15760   if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
15761     return dependent_type_p (DECL_CONTEXT (tmpl));
15762   return false;
15763 }
15764
15765 /* Returns TRUE if the specialization TMPL<ARGS> is dependent.  */
15766
15767 bool
15768 dependent_template_id_p (tree tmpl, tree args)
15769 {
15770   return (dependent_template_p (tmpl)
15771           || any_dependent_template_arguments_p (args));
15772 }
15773
15774 /* TYPE is a TYPENAME_TYPE.  Returns the ordinary TYPE to which the
15775    TYPENAME_TYPE corresponds.  Returns the original TYPENAME_TYPE if
15776    no such TYPE can be found.  Note that this function peers inside
15777    uninstantiated templates and therefore should be used only in
15778    extremely limited situations.  ONLY_CURRENT_P restricts this
15779    peering to the currently open classes hierarchy (which is required
15780    when comparing types).  */
15781
15782 tree
15783 resolve_typename_type (tree type, bool only_current_p)
15784 {
15785   tree scope;
15786   tree name;
15787   tree decl;
15788   int quals;
15789   tree pushed_scope;
15790   tree result;
15791
15792   gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
15793
15794   scope = TYPE_CONTEXT (type);
15795   name = TYPE_IDENTIFIER (type);
15796
15797   /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
15798      it first before we can figure out what NAME refers to.  */
15799   if (TREE_CODE (scope) == TYPENAME_TYPE)
15800     scope = resolve_typename_type (scope, only_current_p);
15801   /* If we don't know what SCOPE refers to, then we cannot resolve the
15802      TYPENAME_TYPE.  */
15803   if (TREE_CODE (scope) == TYPENAME_TYPE)
15804     return type;
15805   /* If the SCOPE is a template type parameter, we have no way of
15806      resolving the name.  */
15807   if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
15808     return type;
15809   /* If the SCOPE is not the current instantiation, there's no reason
15810      to look inside it.  */
15811   if (only_current_p && !currently_open_class (scope))
15812     return type;
15813   /* If SCOPE isn't the template itself, it will not have a valid
15814      TYPE_FIELDS list.  */
15815   if (same_type_p (scope, CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope)))
15816     /* scope is either the template itself or a compatible instantiation
15817        like X<T>, so look up the name in the original template.  */
15818     scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
15819   else
15820     /* scope is a partial instantiation, so we can't do the lookup or we
15821        will lose the template arguments.  */
15822     return type;
15823   /* Enter the SCOPE so that name lookup will be resolved as if we
15824      were in the class definition.  In particular, SCOPE will no
15825      longer be considered a dependent type.  */
15826   pushed_scope = push_scope (scope);
15827   /* Look up the declaration.  */
15828   decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true);
15829
15830   result = NULL_TREE;
15831   
15832   /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
15833      find a TEMPLATE_DECL.  Otherwise, we want to find a TYPE_DECL.  */
15834   if (!decl)
15835     /*nop*/;
15836   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
15837            && TREE_CODE (decl) == TYPE_DECL)
15838     {
15839       result = TREE_TYPE (decl);
15840       if (result == error_mark_node)
15841         result = NULL_TREE;
15842     }
15843   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
15844            && DECL_CLASS_TEMPLATE_P (decl))
15845     {
15846       tree tmpl;
15847       tree args;
15848       /* Obtain the template and the arguments.  */
15849       tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
15850       args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
15851       /* Instantiate the template.  */
15852       result = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
15853                                       /*entering_scope=*/0,
15854                                       tf_error | tf_user);
15855       if (result == error_mark_node)
15856         result = NULL_TREE;
15857     }
15858   
15859   /* Leave the SCOPE.  */
15860   if (pushed_scope)
15861     pop_scope (pushed_scope);
15862
15863   /* If we failed to resolve it, return the original typename.  */
15864   if (!result)
15865     return type;
15866   
15867   /* If lookup found a typename type, resolve that too.  */
15868   if (TREE_CODE (result) == TYPENAME_TYPE && !TYPENAME_IS_RESOLVING_P (result))
15869     {
15870       /* Ill-formed programs can cause infinite recursion here, so we
15871          must catch that.  */
15872       TYPENAME_IS_RESOLVING_P (type) = 1;
15873       result = resolve_typename_type (result, only_current_p);
15874       TYPENAME_IS_RESOLVING_P (type) = 0;
15875     }
15876   
15877   /* Qualify the resulting type.  */
15878   quals = cp_type_quals (type);
15879   if (quals)
15880     result = cp_build_qualified_type (result, cp_type_quals (result) | quals);
15881
15882   return result;
15883 }
15884
15885 /* EXPR is an expression which is not type-dependent.  Return a proxy
15886    for EXPR that can be used to compute the types of larger
15887    expressions containing EXPR.  */
15888
15889 tree
15890 build_non_dependent_expr (tree expr)
15891 {
15892   tree inner_expr;
15893
15894   /* Preserve null pointer constants so that the type of things like
15895      "p == 0" where "p" is a pointer can be determined.  */
15896   if (null_ptr_cst_p (expr))
15897     return expr;
15898   /* Preserve OVERLOADs; the functions must be available to resolve
15899      types.  */
15900   inner_expr = expr;
15901   if (TREE_CODE (inner_expr) == STMT_EXPR)
15902     inner_expr = stmt_expr_value_expr (inner_expr);
15903   if (TREE_CODE (inner_expr) == ADDR_EXPR)
15904     inner_expr = TREE_OPERAND (inner_expr, 0);
15905   if (TREE_CODE (inner_expr) == COMPONENT_REF)
15906     inner_expr = TREE_OPERAND (inner_expr, 1);
15907   if (is_overloaded_fn (inner_expr)
15908       || TREE_CODE (inner_expr) == OFFSET_REF)
15909     return expr;
15910   /* There is no need to return a proxy for a variable.  */
15911   if (TREE_CODE (expr) == VAR_DECL)
15912     return expr;
15913   /* Preserve string constants; conversions from string constants to
15914      "char *" are allowed, even though normally a "const char *"
15915      cannot be used to initialize a "char *".  */
15916   if (TREE_CODE (expr) == STRING_CST)
15917     return expr;
15918   /* Preserve arithmetic constants, as an optimization -- there is no
15919      reason to create a new node.  */
15920   if (TREE_CODE (expr) == INTEGER_CST || TREE_CODE (expr) == REAL_CST)
15921     return expr;
15922   /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
15923      There is at least one place where we want to know that a
15924      particular expression is a throw-expression: when checking a ?:
15925      expression, there are special rules if the second or third
15926      argument is a throw-expression.  */
15927   if (TREE_CODE (expr) == THROW_EXPR)
15928     return expr;
15929
15930   if (TREE_CODE (expr) == COND_EXPR)
15931     return build3 (COND_EXPR,
15932                    TREE_TYPE (expr),
15933                    TREE_OPERAND (expr, 0),
15934                    (TREE_OPERAND (expr, 1)
15935                     ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
15936                     : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
15937                    build_non_dependent_expr (TREE_OPERAND (expr, 2)));
15938   if (TREE_CODE (expr) == COMPOUND_EXPR
15939       && !COMPOUND_EXPR_OVERLOADED (expr))
15940     return build2 (COMPOUND_EXPR,
15941                    TREE_TYPE (expr),
15942                    TREE_OPERAND (expr, 0),
15943                    build_non_dependent_expr (TREE_OPERAND (expr, 1)));
15944
15945   /* If the type is unknown, it can't really be non-dependent */
15946   gcc_assert (TREE_TYPE (expr) != unknown_type_node);
15947
15948   /* Otherwise, build a NON_DEPENDENT_EXPR.
15949
15950      REFERENCE_TYPEs are not stripped for expressions in templates
15951      because doing so would play havoc with mangling.  Consider, for
15952      example:
15953
15954        template <typename T> void f<T& g>() { g(); }
15955
15956      In the body of "f", the expression for "g" will have
15957      REFERENCE_TYPE, even though the standard says that it should
15958      not.  The reason is that we must preserve the syntactic form of
15959      the expression so that mangling (say) "f<g>" inside the body of
15960      "f" works out correctly.  Therefore, the REFERENCE_TYPE is
15961      stripped here.  */
15962   return build1 (NON_DEPENDENT_EXPR, non_reference (TREE_TYPE (expr)), expr);
15963 }
15964
15965 /* ARGS is a TREE_LIST of expressions as arguments to a function call.
15966    Return a new TREE_LIST with the various arguments replaced with
15967    equivalent non-dependent expressions.  */
15968
15969 tree
15970 build_non_dependent_args (tree args)
15971 {
15972   tree a;
15973   tree new_args;
15974
15975   new_args = NULL_TREE;
15976   for (a = args; a; a = TREE_CHAIN (a))
15977     new_args = tree_cons (NULL_TREE,
15978                           build_non_dependent_expr (TREE_VALUE (a)),
15979                           new_args);
15980   return nreverse (new_args);
15981 }
15982
15983 #include "gt-cp-pt.h"