OSDN Git Service

* pt.c (deduction_tsubst_fntype): Use push_deduction_access_scope.
[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, 2008, 2009, 2010, 2011
4    Free Software Foundation, Inc.
5    Written by Ken Raeburn (raeburn@cygnus.com) while at Watchmaker Computing.
6    Rewritten by Jason Merrill (jason@cygnus.com).
7
8 This file is part of GCC.
9
10 GCC is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 3, or (at your option)
13 any later version.
14
15 GCC is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18 GNU General Public License for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with GCC; see the file COPYING3.  If not see
22 <http://www.gnu.org/licenses/>.  */
23
24 /* Known bugs or deficiencies include:
25
26      all methods must be provided in header files; can't use a source
27      file that contains only the method templates and "just win".  */
28
29 #include "config.h"
30 #include "system.h"
31 #include "coretypes.h"
32 #include "tm.h"
33 #include "tree.h"
34 #include "intl.h"
35 #include "pointer-set.h"
36 #include "flags.h"
37 #include "cp-tree.h"
38 #include "c-family/c-common.h"
39 #include "c-family/c-objc.h"
40 #include "cp-objcp-common.h"
41 #include "tree-inline.h"
42 #include "decl.h"
43 #include "output.h"
44 #include "toplev.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 GTY ((chain_next ("%h.next"))) pending_template {
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 typedef struct GTY(()) spec_entry
85 {
86   tree tmpl;
87   tree args;
88   tree spec;
89 } spec_entry;
90
91 static GTY ((param_is (spec_entry)))
92   htab_t decl_specializations;
93
94 static GTY ((param_is (spec_entry)))
95   htab_t type_specializations;
96
97 /* Contains canonical template parameter types. The vector is indexed by
98    the TEMPLATE_TYPE_IDX of the template parameter. Each element is a
99    TREE_LIST, whose TREE_VALUEs contain the canonical template
100    parameters of various types and levels.  */
101 static GTY(()) VEC(tree,gc) *canonical_template_parms;
102
103 #define UNIFY_ALLOW_NONE 0
104 #define UNIFY_ALLOW_MORE_CV_QUAL 1
105 #define UNIFY_ALLOW_LESS_CV_QUAL 2
106 #define UNIFY_ALLOW_DERIVED 4
107 #define UNIFY_ALLOW_INTEGER 8
108 #define UNIFY_ALLOW_OUTER_LEVEL 16
109 #define UNIFY_ALLOW_OUTER_MORE_CV_QUAL 32
110 #define UNIFY_ALLOW_OUTER_LESS_CV_QUAL 64
111
112 static void push_access_scope (tree);
113 static void pop_access_scope (tree);
114 static void push_deduction_access_scope (tree);
115 static void pop_deduction_access_scope (tree);
116 static bool resolve_overloaded_unification (tree, tree, tree, tree,
117                                             unification_kind_t, int);
118 static int try_one_overload (tree, tree, tree, tree, tree,
119                              unification_kind_t, int, bool);
120 static int unify (tree, tree, tree, tree, int);
121 static void add_pending_template (tree);
122 static tree reopen_tinst_level (struct tinst_level *);
123 static tree tsubst_initializer_list (tree, tree);
124 static tree get_class_bindings (tree, tree, tree);
125 static tree coerce_template_parms (tree, tree, tree, tsubst_flags_t,
126                                    bool, bool);
127 static void tsubst_enum (tree, tree, tree);
128 static tree add_to_template_args (tree, tree);
129 static tree add_outermost_template_args (tree, tree);
130 static bool check_instantiated_args (tree, tree, tsubst_flags_t);
131 static int maybe_adjust_types_for_deduction (unification_kind_t, tree*, tree*,
132                                              tree);
133 static int type_unification_real (tree, tree, tree, const tree *,
134                                   unsigned int, int, unification_kind_t, int);
135 static void note_template_header (int);
136 static tree convert_nontype_argument_function (tree, tree);
137 static tree convert_nontype_argument (tree, tree, tsubst_flags_t);
138 static tree convert_template_argument (tree, tree, tree,
139                                        tsubst_flags_t, int, tree);
140 static int for_each_template_parm (tree, tree_fn_t, void*,
141                                    struct pointer_set_t*, bool);
142 static tree expand_template_argument_pack (tree);
143 static tree build_template_parm_index (int, int, int, int, tree, tree);
144 static bool inline_needs_template_parms (tree);
145 static void push_inline_template_parms_recursive (tree, int);
146 static tree retrieve_local_specialization (tree);
147 static void register_local_specialization (tree, tree);
148 static hashval_t hash_specialization (const void *p);
149 static tree reduce_template_parm_level (tree, tree, int, tree, tsubst_flags_t);
150 static int mark_template_parm (tree, void *);
151 static int template_parm_this_level_p (tree, void *);
152 static tree tsubst_friend_function (tree, tree);
153 static tree tsubst_friend_class (tree, tree);
154 static int can_complete_type_without_circularity (tree);
155 static tree get_bindings (tree, tree, tree, bool);
156 static int template_decl_level (tree);
157 static int check_cv_quals_for_unify (int, tree, tree);
158 static void template_parm_level_and_index (tree, int*, int*);
159 static int unify_pack_expansion (tree, tree, tree, tree, int, bool, bool);
160 static tree tsubst_template_arg (tree, tree, tsubst_flags_t, tree);
161 static tree tsubst_template_args (tree, tree, tsubst_flags_t, tree);
162 static tree tsubst_template_parms (tree, tree, tsubst_flags_t);
163 static void regenerate_decl_from_template (tree, tree);
164 static tree most_specialized_class (tree, tree, tsubst_flags_t);
165 static tree tsubst_aggr_type (tree, tree, tsubst_flags_t, tree, int);
166 static tree tsubst_arg_types (tree, tree, tsubst_flags_t, tree);
167 static tree tsubst_function_type (tree, tree, tsubst_flags_t, tree);
168 static bool check_specialization_scope (void);
169 static tree process_partial_specialization (tree);
170 static void set_current_access_from_decl (tree);
171 static tree get_template_base (tree, tree, tree, tree);
172 static tree try_class_unification (tree, tree, tree, tree);
173 static int coerce_template_template_parms (tree, tree, tsubst_flags_t,
174                                            tree, tree);
175 static bool template_template_parm_bindings_ok_p (tree, tree);
176 static int template_args_equal (tree, tree);
177 static void tsubst_default_arguments (tree);
178 static tree for_each_template_parm_r (tree *, int *, void *);
179 static tree copy_default_args_to_explicit_spec_1 (tree, tree);
180 static void copy_default_args_to_explicit_spec (tree);
181 static int invalid_nontype_parm_type_p (tree, tsubst_flags_t);
182 static int eq_local_specializations (const void *, const void *);
183 static bool dependent_template_arg_p (tree);
184 static bool any_template_arguments_need_structural_equality_p (tree);
185 static bool dependent_type_p_r (tree);
186 static tree tsubst_expr (tree, tree, tsubst_flags_t, tree, bool);
187 static tree tsubst_copy (tree, tree, tsubst_flags_t, tree);
188 static tree tsubst_pack_expansion (tree, tree, tsubst_flags_t, tree);
189 static tree tsubst_decl (tree, tree, tsubst_flags_t);
190 static void perform_typedefs_access_check (tree tmpl, tree targs);
191 static void append_type_to_template_for_access_check_1 (tree, tree, tree,
192                                                         location_t);
193 static tree listify (tree);
194 static tree listify_autos (tree, tree);
195 static tree template_parm_to_arg (tree t);
196 static tree current_template_args (void);
197 static tree fixup_template_type_parm_type (tree, int);
198 static tree fixup_template_parm_index (tree, tree, int);
199 static tree tsubst_template_parm (tree, tree, tsubst_flags_t);
200
201 /* Make the current scope suitable for access checking when we are
202    processing T.  T can be FUNCTION_DECL for instantiated function
203    template, or VAR_DECL for static member variable (need by
204    instantiate_decl).  */
205
206 static void
207 push_access_scope (tree t)
208 {
209   gcc_assert (TREE_CODE (t) == FUNCTION_DECL
210               || TREE_CODE (t) == VAR_DECL);
211
212   if (DECL_FRIEND_CONTEXT (t))
213     push_nested_class (DECL_FRIEND_CONTEXT (t));
214   else if (DECL_CLASS_SCOPE_P (t))
215     push_nested_class (DECL_CONTEXT (t));
216   else
217     pushclass (NULL_TREE);
218
219   if (TREE_CODE (t) == FUNCTION_DECL)
220     {
221       saved_access_scope = tree_cons
222         (NULL_TREE, current_function_decl, saved_access_scope);
223       current_function_decl = t;
224     }
225 }
226
227 /* Restore the scope set up by push_access_scope.  T is the node we
228    are processing.  */
229
230 static void
231 pop_access_scope (tree t)
232 {
233   if (TREE_CODE (t) == FUNCTION_DECL)
234     {
235       current_function_decl = TREE_VALUE (saved_access_scope);
236       saved_access_scope = TREE_CHAIN (saved_access_scope);
237     }
238
239   if (DECL_FRIEND_CONTEXT (t) || DECL_CLASS_SCOPE_P (t))
240     pop_nested_class ();
241   else
242     popclass ();
243 }
244
245 /* Do any processing required when DECL (a member template
246    declaration) is finished.  Returns the TEMPLATE_DECL corresponding
247    to DECL, unless it is a specialization, in which case the DECL
248    itself is returned.  */
249
250 tree
251 finish_member_template_decl (tree decl)
252 {
253   if (decl == error_mark_node)
254     return error_mark_node;
255
256   gcc_assert (DECL_P (decl));
257
258   if (TREE_CODE (decl) == TYPE_DECL)
259     {
260       tree type;
261
262       type = TREE_TYPE (decl);
263       if (type == error_mark_node)
264         return error_mark_node;
265       if (MAYBE_CLASS_TYPE_P (type)
266           && CLASSTYPE_TEMPLATE_INFO (type)
267           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
268         {
269           tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
270           check_member_template (tmpl);
271           return tmpl;
272         }
273       return NULL_TREE;
274     }
275   else if (TREE_CODE (decl) == FIELD_DECL)
276     error ("data member %qD cannot be a member template", decl);
277   else if (DECL_TEMPLATE_INFO (decl))
278     {
279       if (!DECL_TEMPLATE_SPECIALIZATION (decl))
280         {
281           check_member_template (DECL_TI_TEMPLATE (decl));
282           return DECL_TI_TEMPLATE (decl);
283         }
284       else
285         return decl;
286     }
287   else
288     error ("invalid member template declaration %qD", decl);
289
290   return error_mark_node;
291 }
292
293 /* Create a template info node.  */
294
295 tree
296 build_template_info (tree template_decl, tree template_args)
297 {
298   tree result = make_node (TEMPLATE_INFO);
299   TI_TEMPLATE (result) = template_decl;
300   TI_ARGS (result) = template_args;
301   return result;
302 }
303
304 /* Return the template info node corresponding to T, whatever T is.  */
305
306 tree
307 get_template_info (const_tree t)
308 {
309   tree tinfo = NULL_TREE;
310
311   if (!t || t == error_mark_node)
312     return NULL;
313
314   if (DECL_P (t) && DECL_LANG_SPECIFIC (t))
315     tinfo = DECL_TEMPLATE_INFO (t);
316
317   if (!tinfo && DECL_IMPLICIT_TYPEDEF_P (t))
318     t = TREE_TYPE (t);
319
320   if (TAGGED_TYPE_P (t))
321     tinfo = TYPE_TEMPLATE_INFO (t);
322   else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
323     tinfo = TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t);
324
325   return tinfo;
326 }
327
328 /* Returns the template nesting level of the indicated class TYPE.
329
330    For example, in:
331      template <class T>
332      struct A
333      {
334        template <class U>
335        struct B {};
336      };
337
338    A<T>::B<U> has depth two, while A<T> has depth one.
339    Both A<T>::B<int> and A<int>::B<U> have depth one, if
340    they are instantiations, not specializations.
341
342    This function is guaranteed to return 0 if passed NULL_TREE so
343    that, for example, `template_class_depth (current_class_type)' is
344    always safe.  */
345
346 int
347 template_class_depth (tree type)
348 {
349   int depth;
350
351   for (depth = 0;
352        type && TREE_CODE (type) != NAMESPACE_DECL;
353        type = (TREE_CODE (type) == FUNCTION_DECL)
354          ? CP_DECL_CONTEXT (type) : CP_TYPE_CONTEXT (type))
355     {
356       tree tinfo = get_template_info (type);
357
358       if (tinfo && PRIMARY_TEMPLATE_P (TI_TEMPLATE (tinfo))
359           && uses_template_parms (INNERMOST_TEMPLATE_ARGS (TI_ARGS (tinfo))))
360         ++depth;
361     }
362
363   return depth;
364 }
365
366 /* Subroutine of maybe_begin_member_template_processing.
367    Returns true if processing DECL needs us to push template parms.  */
368
369 static bool
370 inline_needs_template_parms (tree decl)
371 {
372   if (! DECL_TEMPLATE_INFO (decl))
373     return false;
374
375   return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (most_general_template (decl)))
376           > (processing_template_decl + DECL_TEMPLATE_SPECIALIZATION (decl)));
377 }
378
379 /* Subroutine of maybe_begin_member_template_processing.
380    Push the template parms in PARMS, starting from LEVELS steps into the
381    chain, and ending at the beginning, since template parms are listed
382    innermost first.  */
383
384 static void
385 push_inline_template_parms_recursive (tree parmlist, int levels)
386 {
387   tree parms = TREE_VALUE (parmlist);
388   int i;
389
390   if (levels > 1)
391     push_inline_template_parms_recursive (TREE_CHAIN (parmlist), levels - 1);
392
393   ++processing_template_decl;
394   current_template_parms
395     = tree_cons (size_int (processing_template_decl),
396                  parms, current_template_parms);
397   TEMPLATE_PARMS_FOR_INLINE (current_template_parms) = 1;
398
399   begin_scope (TREE_VEC_LENGTH (parms) ? sk_template_parms : sk_template_spec,
400                NULL);
401   for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
402     {
403       tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
404
405       if (parm == error_mark_node)
406         continue;
407
408       gcc_assert (DECL_P (parm));
409
410       switch (TREE_CODE (parm))
411         {
412         case TYPE_DECL:
413         case TEMPLATE_DECL:
414           pushdecl (parm);
415           break;
416
417         case PARM_DECL:
418           {
419             /* Make a CONST_DECL as is done in process_template_parm.
420                It is ugly that we recreate this here; the original
421                version built in process_template_parm is no longer
422                available.  */
423             tree decl = build_decl (DECL_SOURCE_LOCATION (parm),
424                                     CONST_DECL, DECL_NAME (parm),
425                                     TREE_TYPE (parm));
426             DECL_ARTIFICIAL (decl) = 1;
427             TREE_CONSTANT (decl) = 1;
428             TREE_READONLY (decl) = 1;
429             DECL_INITIAL (decl) = DECL_INITIAL (parm);
430             SET_DECL_TEMPLATE_PARM_P (decl);
431             pushdecl (decl);
432           }
433           break;
434
435         default:
436           gcc_unreachable ();
437         }
438     }
439 }
440
441 /* Restore the template parameter context for a member template or
442    a friend template defined in a class definition.  */
443
444 void
445 maybe_begin_member_template_processing (tree decl)
446 {
447   tree parms;
448   int levels = 0;
449
450   if (inline_needs_template_parms (decl))
451     {
452       parms = DECL_TEMPLATE_PARMS (most_general_template (decl));
453       levels = TMPL_PARMS_DEPTH (parms) - processing_template_decl;
454
455       if (DECL_TEMPLATE_SPECIALIZATION (decl))
456         {
457           --levels;
458           parms = TREE_CHAIN (parms);
459         }
460
461       push_inline_template_parms_recursive (parms, levels);
462     }
463
464   /* Remember how many levels of template parameters we pushed so that
465      we can pop them later.  */
466   VEC_safe_push (int, heap, inline_parm_levels, levels);
467 }
468
469 /* Undo the effects of maybe_begin_member_template_processing.  */
470
471 void
472 maybe_end_member_template_processing (void)
473 {
474   int i;
475   int last;
476
477   if (VEC_length (int, inline_parm_levels) == 0)
478     return;
479
480   last = VEC_pop (int, inline_parm_levels);
481   for (i = 0; i < last; ++i)
482     {
483       --processing_template_decl;
484       current_template_parms = TREE_CHAIN (current_template_parms);
485       poplevel (0, 0, 0);
486     }
487 }
488
489 /* Return a new template argument vector which contains all of ARGS,
490    but has as its innermost set of arguments the EXTRA_ARGS.  */
491
492 static tree
493 add_to_template_args (tree args, tree extra_args)
494 {
495   tree new_args;
496   int extra_depth;
497   int i;
498   int j;
499
500   if (args == NULL_TREE || extra_args == error_mark_node)
501     return extra_args;
502
503   extra_depth = TMPL_ARGS_DEPTH (extra_args);
504   new_args = make_tree_vec (TMPL_ARGS_DEPTH (args) + extra_depth);
505
506   for (i = 1; i <= TMPL_ARGS_DEPTH (args); ++i)
507     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (args, i));
508
509   for (j = 1; j <= extra_depth; ++j, ++i)
510     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (extra_args, j));
511
512   return new_args;
513 }
514
515 /* Like add_to_template_args, but only the outermost ARGS are added to
516    the EXTRA_ARGS.  In particular, all but TMPL_ARGS_DEPTH
517    (EXTRA_ARGS) levels are added.  This function is used to combine
518    the template arguments from a partial instantiation with the
519    template arguments used to attain the full instantiation from the
520    partial instantiation.  */
521
522 static tree
523 add_outermost_template_args (tree args, tree extra_args)
524 {
525   tree new_args;
526
527   /* If there are more levels of EXTRA_ARGS than there are ARGS,
528      something very fishy is going on.  */
529   gcc_assert (TMPL_ARGS_DEPTH (args) >= TMPL_ARGS_DEPTH (extra_args));
530
531   /* If *all* the new arguments will be the EXTRA_ARGS, just return
532      them.  */
533   if (TMPL_ARGS_DEPTH (args) == TMPL_ARGS_DEPTH (extra_args))
534     return extra_args;
535
536   /* For the moment, we make ARGS look like it contains fewer levels.  */
537   TREE_VEC_LENGTH (args) -= TMPL_ARGS_DEPTH (extra_args);
538
539   new_args = add_to_template_args (args, extra_args);
540
541   /* Now, we restore ARGS to its full dimensions.  */
542   TREE_VEC_LENGTH (args) += TMPL_ARGS_DEPTH (extra_args);
543
544   return new_args;
545 }
546
547 /* Return the N levels of innermost template arguments from the ARGS.  */
548
549 tree
550 get_innermost_template_args (tree args, int n)
551 {
552   tree new_args;
553   int extra_levels;
554   int i;
555
556   gcc_assert (n >= 0);
557
558   /* If N is 1, just return the innermost set of template arguments.  */
559   if (n == 1)
560     return TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args));
561
562   /* If we're not removing anything, just return the arguments we were
563      given.  */
564   extra_levels = TMPL_ARGS_DEPTH (args) - n;
565   gcc_assert (extra_levels >= 0);
566   if (extra_levels == 0)
567     return args;
568
569   /* Make a new set of arguments, not containing the outer arguments.  */
570   new_args = make_tree_vec (n);
571   for (i = 1; i <= n; ++i)
572     SET_TMPL_ARGS_LEVEL (new_args, i,
573                          TMPL_ARGS_LEVEL (args, i + extra_levels));
574
575   return new_args;
576 }
577
578 /* The inverse of get_innermost_template_args: Return all but the innermost
579    EXTRA_LEVELS levels of template arguments from the ARGS.  */
580
581 static tree
582 strip_innermost_template_args (tree args, int extra_levels)
583 {
584   tree new_args;
585   int n = TMPL_ARGS_DEPTH (args) - extra_levels;
586   int i;
587
588   gcc_assert (n >= 0);
589
590   /* If N is 1, just return the outermost set of template arguments.  */
591   if (n == 1)
592     return TMPL_ARGS_LEVEL (args, 1);
593
594   /* If we're not removing anything, just return the arguments we were
595      given.  */
596   gcc_assert (extra_levels >= 0);
597   if (extra_levels == 0)
598     return args;
599
600   /* Make a new set of arguments, not containing the inner arguments.  */
601   new_args = make_tree_vec (n);
602   for (i = 1; i <= n; ++i)
603     SET_TMPL_ARGS_LEVEL (new_args, i,
604                          TMPL_ARGS_LEVEL (args, i));
605
606   return new_args;
607 }
608
609 /* We've got a template header coming up; push to a new level for storing
610    the parms.  */
611
612 void
613 begin_template_parm_list (void)
614 {
615   /* We use a non-tag-transparent scope here, which causes pushtag to
616      put tags in this scope, rather than in the enclosing class or
617      namespace scope.  This is the right thing, since we want
618      TEMPLATE_DECLS, and not TYPE_DECLS for template classes.  For a
619      global template class, push_template_decl handles putting the
620      TEMPLATE_DECL into top-level scope.  For a nested template class,
621      e.g.:
622
623        template <class T> struct S1 {
624          template <class T> struct S2 {};
625        };
626
627      pushtag contains special code to call pushdecl_with_scope on the
628      TEMPLATE_DECL for S2.  */
629   begin_scope (sk_template_parms, NULL);
630   ++processing_template_decl;
631   ++processing_template_parmlist;
632   note_template_header (0);
633 }
634
635 /* This routine is called when a specialization is declared.  If it is
636    invalid to declare a specialization here, an error is reported and
637    false is returned, otherwise this routine will return true.  */
638
639 static bool
640 check_specialization_scope (void)
641 {
642   tree scope = current_scope ();
643
644   /* [temp.expl.spec]
645
646      An explicit specialization shall be declared in the namespace of
647      which the template is a member, or, for member templates, in the
648      namespace of which the enclosing class or enclosing class
649      template is a member.  An explicit specialization of a member
650      function, member class or static data member of a class template
651      shall be declared in the namespace of which the class template
652      is a member.  */
653   if (scope && TREE_CODE (scope) != NAMESPACE_DECL)
654     {
655       error ("explicit specialization in non-namespace scope %qD", scope);
656       return false;
657     }
658
659   /* [temp.expl.spec]
660
661      In an explicit specialization declaration for a member of a class
662      template or a member template that appears in namespace scope,
663      the member template and some of its enclosing class templates may
664      remain unspecialized, except that the declaration shall not
665      explicitly specialize a class member template if its enclosing
666      class templates are not explicitly specialized as well.  */
667   if (current_template_parms)
668     {
669       error ("enclosing class templates are not explicitly specialized");
670       return false;
671     }
672
673   return true;
674 }
675
676 /* We've just seen template <>.  */
677
678 bool
679 begin_specialization (void)
680 {
681   begin_scope (sk_template_spec, NULL);
682   note_template_header (1);
683   return check_specialization_scope ();
684 }
685
686 /* Called at then end of processing a declaration preceded by
687    template<>.  */
688
689 void
690 end_specialization (void)
691 {
692   finish_scope ();
693   reset_specialization ();
694 }
695
696 /* Any template <>'s that we have seen thus far are not referring to a
697    function specialization.  */
698
699 void
700 reset_specialization (void)
701 {
702   processing_specialization = 0;
703   template_header_count = 0;
704 }
705
706 /* We've just seen a template header.  If SPECIALIZATION is nonzero,
707    it was of the form template <>.  */
708
709 static void
710 note_template_header (int specialization)
711 {
712   processing_specialization = specialization;
713   template_header_count++;
714 }
715
716 /* We're beginning an explicit instantiation.  */
717
718 void
719 begin_explicit_instantiation (void)
720 {
721   gcc_assert (!processing_explicit_instantiation);
722   processing_explicit_instantiation = true;
723 }
724
725
726 void
727 end_explicit_instantiation (void)
728 {
729   gcc_assert (processing_explicit_instantiation);
730   processing_explicit_instantiation = false;
731 }
732
733 /* An explicit specialization or partial specialization TMPL is being
734    declared.  Check that the namespace in which the specialization is
735    occurring is permissible.  Returns false iff it is invalid to
736    specialize TMPL in the current namespace.  */
737
738 static bool
739 check_specialization_namespace (tree tmpl)
740 {
741   tree tpl_ns = decl_namespace_context (tmpl);
742
743   /* [tmpl.expl.spec]
744
745      An explicit specialization shall be declared in the namespace of
746      which the template is a member, or, for member templates, in the
747      namespace of which the enclosing class or enclosing class
748      template is a member.  An explicit specialization of a member
749      function, member class or static data member of a class template
750      shall be declared in the namespace of which the class template is
751      a member.  */
752   if (current_scope() != DECL_CONTEXT (tmpl)
753       && !at_namespace_scope_p ())
754     {
755       error ("specialization of %qD must appear at namespace scope", tmpl);
756       return false;
757     }
758   if (is_associated_namespace (current_namespace, tpl_ns))
759     /* Same or super-using namespace.  */
760     return true;
761   else
762     {
763       permerror (input_location, "specialization of %qD in different namespace", tmpl);
764       permerror (input_location, "  from definition of %q+#D", tmpl);
765       return false;
766     }
767 }
768
769 /* SPEC is an explicit instantiation.  Check that it is valid to
770    perform this explicit instantiation in the current namespace.  */
771
772 static void
773 check_explicit_instantiation_namespace (tree spec)
774 {
775   tree ns;
776
777   /* DR 275: An explicit instantiation shall appear in an enclosing
778      namespace of its template.  */
779   ns = decl_namespace_context (spec);
780   if (!is_ancestor (current_namespace, ns))
781     permerror (input_location, "explicit instantiation of %qD in namespace %qD "
782                "(which does not enclose namespace %qD)",
783                spec, current_namespace, ns);
784 }
785
786 /* The TYPE is being declared.  If it is a template type, that means it
787    is a partial specialization.  Do appropriate error-checking.  */
788
789 tree
790 maybe_process_partial_specialization (tree type)
791 {
792   tree context;
793
794   if (type == error_mark_node)
795     return error_mark_node;
796
797   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
798     {
799       error ("name of class shadows template template parameter %qD",
800              TYPE_NAME (type));
801       return error_mark_node;
802     }
803
804   context = TYPE_CONTEXT (type);
805
806   if (CLASS_TYPE_P (type) && CLASSTYPE_USE_TEMPLATE (type))
807     {
808       /* This is for ordinary explicit specialization and partial
809          specialization of a template class such as:
810
811            template <> class C<int>;
812
813          or:
814
815            template <class T> class C<T*>;
816
817          Make sure that `C<int>' and `C<T*>' are implicit instantiations.  */
818
819       if (CLASSTYPE_IMPLICIT_INSTANTIATION (type)
820           && !COMPLETE_TYPE_P (type))
821         {
822           check_specialization_namespace (CLASSTYPE_TI_TEMPLATE (type));
823           SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
824           if (processing_template_decl)
825             {
826               if (push_template_decl (TYPE_MAIN_DECL (type))
827                   == error_mark_node)
828                 return error_mark_node;
829             }
830         }
831       else if (CLASSTYPE_TEMPLATE_INSTANTIATION (type))
832         error ("specialization of %qT after instantiation", type);
833     }
834   else if (CLASS_TYPE_P (type)
835            && !CLASSTYPE_USE_TEMPLATE (type)
836            && CLASSTYPE_TEMPLATE_INFO (type)
837            && context && CLASS_TYPE_P (context)
838            && CLASSTYPE_TEMPLATE_INFO (context))
839     {
840       /* This is for an explicit specialization of member class
841          template according to [temp.expl.spec/18]:
842
843            template <> template <class U> class C<int>::D;
844
845          The context `C<int>' must be an implicit instantiation.
846          Otherwise this is just a member class template declared
847          earlier like:
848
849            template <> class C<int> { template <class U> class D; };
850            template <> template <class U> class C<int>::D;
851
852          In the first case, `C<int>::D' is a specialization of `C<T>::D'
853          while in the second case, `C<int>::D' is a primary template
854          and `C<T>::D' may not exist.  */
855
856       if (CLASSTYPE_IMPLICIT_INSTANTIATION (context)
857           && !COMPLETE_TYPE_P (type))
858         {
859           tree t;
860           tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
861
862           if (current_namespace
863               != decl_namespace_context (tmpl))
864             {
865               permerror (input_location, "specializing %q#T in different namespace", type);
866               permerror (input_location, "  from definition of %q+#D", tmpl);
867             }
868
869           /* Check for invalid specialization after instantiation:
870
871                template <> template <> class C<int>::D<int>;
872                template <> template <class U> class C<int>::D;  */
873
874           for (t = DECL_TEMPLATE_INSTANTIATIONS (tmpl);
875                t; t = TREE_CHAIN (t))
876             {
877               tree inst = TREE_VALUE (t);
878               if (CLASSTYPE_TEMPLATE_SPECIALIZATION (inst))
879                 {
880                   /* We already have a full specialization of this partial
881                      instantiation.  Reassign it to the new member
882                      specialization template.  */
883                   spec_entry elt;
884                   spec_entry **slot;
885
886                   elt.tmpl = most_general_template (tmpl);
887                   elt.args = CLASSTYPE_TI_ARGS (inst);
888                   elt.spec = inst;
889
890                   htab_remove_elt (type_specializations, &elt);
891
892                   elt.tmpl = tmpl;
893                   elt.args = INNERMOST_TEMPLATE_ARGS (elt.args);
894
895                   slot = (spec_entry **)
896                     htab_find_slot (type_specializations, &elt, INSERT);
897                   *slot = ggc_alloc_spec_entry ();
898                   **slot = elt;
899                 }
900               else if (COMPLETE_OR_OPEN_TYPE_P (inst))
901                 /* But if we've had an implicit instantiation, that's a
902                    problem ([temp.expl.spec]/6).  */
903                 error ("specialization %qT after instantiation %qT",
904                        type, inst);
905             }
906
907           /* Mark TYPE as a specialization.  And as a result, we only
908              have one level of template argument for the innermost
909              class template.  */
910           SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
911           CLASSTYPE_TI_ARGS (type)
912             = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type));
913         }
914     }
915   else if (processing_specialization)
916     {
917        /* Someday C++0x may allow for enum template specialization.  */
918       if (cxx_dialect > cxx98 && TREE_CODE (type) == ENUMERAL_TYPE
919           && CLASS_TYPE_P (context) && CLASSTYPE_USE_TEMPLATE (context))
920         pedwarn (input_location, OPT_pedantic, "template specialization "
921                  "of %qD not allowed by ISO C++", type);
922       else
923         {
924           error ("explicit specialization of non-template %qT", type);
925           return error_mark_node;
926         }
927     }
928
929   return type;
930 }
931
932 /* Returns nonzero if we can optimize the retrieval of specializations
933    for TMPL, a TEMPLATE_DECL.  In particular, for such a template, we
934    do not use DECL_TEMPLATE_SPECIALIZATIONS at all.  */
935
936 static inline bool
937 optimize_specialization_lookup_p (tree tmpl)
938 {
939   return (DECL_FUNCTION_TEMPLATE_P (tmpl)
940           && DECL_CLASS_SCOPE_P (tmpl)
941           /* DECL_CLASS_SCOPE_P holds of T::f even if T is a template
942              parameter.  */
943           && CLASS_TYPE_P (DECL_CONTEXT (tmpl))
944           /* The optimized lookup depends on the fact that the
945              template arguments for the member function template apply
946              purely to the containing class, which is not true if the
947              containing class is an explicit or partial
948              specialization.  */
949           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (tmpl))
950           && !DECL_MEMBER_TEMPLATE_P (tmpl)
951           && !DECL_CONV_FN_P (tmpl)
952           /* It is possible to have a template that is not a member
953              template and is not a member of a template class:
954
955              template <typename T>
956              struct S { friend A::f(); };
957
958              Here, the friend function is a template, but the context does
959              not have template information.  The optimized lookup relies
960              on having ARGS be the template arguments for both the class
961              and the function template.  */
962           && !DECL_FRIEND_P (DECL_TEMPLATE_RESULT (tmpl)));
963 }
964
965 /* Retrieve the specialization (in the sense of [temp.spec] - a
966    specialization is either an instantiation or an explicit
967    specialization) of TMPL for the given template ARGS.  If there is
968    no such specialization, return NULL_TREE.  The ARGS are a vector of
969    arguments, or a vector of vectors of arguments, in the case of
970    templates with more than one level of parameters.
971
972    If TMPL is a type template and CLASS_SPECIALIZATIONS_P is true,
973    then we search for a partial specialization matching ARGS.  This
974    parameter is ignored if TMPL is not a class template.  */
975
976 static tree
977 retrieve_specialization (tree tmpl, tree args, hashval_t hash)
978 {
979   if (args == error_mark_node)
980     return NULL_TREE;
981
982   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
983
984   /* There should be as many levels of arguments as there are
985      levels of parameters.  */
986   gcc_assert (TMPL_ARGS_DEPTH (args)
987               == TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl)));
988
989   if (optimize_specialization_lookup_p (tmpl))
990     {
991       tree class_template;
992       tree class_specialization;
993       VEC(tree,gc) *methods;
994       tree fns;
995       int idx;
996
997       /* The template arguments actually apply to the containing
998          class.  Find the class specialization with those
999          arguments.  */
1000       class_template = CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (tmpl));
1001       class_specialization
1002         = retrieve_specialization (class_template, args, 0);
1003       if (!class_specialization)
1004         return NULL_TREE;
1005       /* Now, find the appropriate entry in the CLASSTYPE_METHOD_VEC
1006          for the specialization.  */
1007       idx = class_method_index_for_fn (class_specialization, tmpl);
1008       if (idx == -1)
1009         return NULL_TREE;
1010       /* Iterate through the methods with the indicated name, looking
1011          for the one that has an instance of TMPL.  */
1012       methods = CLASSTYPE_METHOD_VEC (class_specialization);
1013       for (fns = VEC_index (tree, methods, idx); fns; fns = OVL_NEXT (fns))
1014         {
1015           tree fn = OVL_CURRENT (fns);
1016           if (DECL_TEMPLATE_INFO (fn) && DECL_TI_TEMPLATE (fn) == tmpl
1017               /* using-declarations can add base methods to the method vec,
1018                  and we don't want those here.  */
1019               && DECL_CONTEXT (fn) == class_specialization)
1020             return fn;
1021         }
1022       return NULL_TREE;
1023     }
1024   else
1025     {
1026       spec_entry *found;
1027       spec_entry elt;
1028       htab_t specializations;
1029
1030       elt.tmpl = tmpl;
1031       elt.args = args;
1032       elt.spec = NULL_TREE;
1033
1034       if (DECL_CLASS_TEMPLATE_P (tmpl))
1035         specializations = type_specializations;
1036       else
1037         specializations = decl_specializations;
1038
1039       if (hash == 0)
1040         hash = hash_specialization (&elt);
1041       found = (spec_entry *) htab_find_with_hash (specializations, &elt, hash);
1042       if (found)
1043         return found->spec;
1044     }
1045
1046   return NULL_TREE;
1047 }
1048
1049 /* Like retrieve_specialization, but for local declarations.  */
1050
1051 static tree
1052 retrieve_local_specialization (tree tmpl)
1053 {
1054   tree spec;
1055
1056   if (local_specializations == NULL)
1057     return NULL_TREE;
1058
1059   spec = (tree) htab_find_with_hash (local_specializations, tmpl,
1060                                      htab_hash_pointer (tmpl));
1061   return spec ? TREE_PURPOSE (spec) : NULL_TREE;
1062 }
1063
1064 /* Returns nonzero iff DECL is a specialization of TMPL.  */
1065
1066 int
1067 is_specialization_of (tree decl, tree tmpl)
1068 {
1069   tree t;
1070
1071   if (TREE_CODE (decl) == FUNCTION_DECL)
1072     {
1073       for (t = decl;
1074            t != NULL_TREE;
1075            t = DECL_TEMPLATE_INFO (t) ? DECL_TI_TEMPLATE (t) : NULL_TREE)
1076         if (t == tmpl)
1077           return 1;
1078     }
1079   else
1080     {
1081       gcc_assert (TREE_CODE (decl) == TYPE_DECL);
1082
1083       for (t = TREE_TYPE (decl);
1084            t != NULL_TREE;
1085            t = CLASSTYPE_USE_TEMPLATE (t)
1086              ? TREE_TYPE (CLASSTYPE_TI_TEMPLATE (t)) : NULL_TREE)
1087         if (same_type_ignoring_top_level_qualifiers_p (t, TREE_TYPE (tmpl)))
1088           return 1;
1089     }
1090
1091   return 0;
1092 }
1093
1094 /* Returns nonzero iff DECL is a specialization of friend declaration
1095    FRIEND_DECL according to [temp.friend].  */
1096
1097 bool
1098 is_specialization_of_friend (tree decl, tree friend_decl)
1099 {
1100   bool need_template = true;
1101   int template_depth;
1102
1103   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
1104               || TREE_CODE (decl) == TYPE_DECL);
1105
1106   /* For [temp.friend/6] when FRIEND_DECL is an ordinary member function
1107      of a template class, we want to check if DECL is a specialization
1108      if this.  */
1109   if (TREE_CODE (friend_decl) == FUNCTION_DECL
1110       && DECL_TEMPLATE_INFO (friend_decl)
1111       && !DECL_USE_TEMPLATE (friend_decl))
1112     {
1113       /* We want a TEMPLATE_DECL for `is_specialization_of'.  */
1114       friend_decl = DECL_TI_TEMPLATE (friend_decl);
1115       need_template = false;
1116     }
1117   else if (TREE_CODE (friend_decl) == TEMPLATE_DECL
1118            && !PRIMARY_TEMPLATE_P (friend_decl))
1119     need_template = false;
1120
1121   /* There is nothing to do if this is not a template friend.  */
1122   if (TREE_CODE (friend_decl) != TEMPLATE_DECL)
1123     return false;
1124
1125   if (is_specialization_of (decl, friend_decl))
1126     return true;
1127
1128   /* [temp.friend/6]
1129      A member of a class template may be declared to be a friend of a
1130      non-template class.  In this case, the corresponding member of
1131      every specialization of the class template is a friend of the
1132      class granting friendship.
1133
1134      For example, given a template friend declaration
1135
1136        template <class T> friend void A<T>::f();
1137
1138      the member function below is considered a friend
1139
1140        template <> struct A<int> {
1141          void f();
1142        };
1143
1144      For this type of template friend, TEMPLATE_DEPTH below will be
1145      nonzero.  To determine if DECL is a friend of FRIEND, we first
1146      check if the enclosing class is a specialization of another.  */
1147
1148   template_depth = template_class_depth (CP_DECL_CONTEXT (friend_decl));
1149   if (template_depth
1150       && DECL_CLASS_SCOPE_P (decl)
1151       && is_specialization_of (TYPE_NAME (DECL_CONTEXT (decl)),
1152                                CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (friend_decl))))
1153     {
1154       /* Next, we check the members themselves.  In order to handle
1155          a few tricky cases, such as when FRIEND_DECL's are
1156
1157            template <class T> friend void A<T>::g(T t);
1158            template <class T> template <T t> friend void A<T>::h();
1159
1160          and DECL's are
1161
1162            void A<int>::g(int);
1163            template <int> void A<int>::h();
1164
1165          we need to figure out ARGS, the template arguments from
1166          the context of DECL.  This is required for template substitution
1167          of `T' in the function parameter of `g' and template parameter
1168          of `h' in the above examples.  Here ARGS corresponds to `int'.  */
1169
1170       tree context = DECL_CONTEXT (decl);
1171       tree args = NULL_TREE;
1172       int current_depth = 0;
1173
1174       while (current_depth < template_depth)
1175         {
1176           if (CLASSTYPE_TEMPLATE_INFO (context))
1177             {
1178               if (current_depth == 0)
1179                 args = TYPE_TI_ARGS (context);
1180               else
1181                 args = add_to_template_args (TYPE_TI_ARGS (context), args);
1182               current_depth++;
1183             }
1184           context = TYPE_CONTEXT (context);
1185         }
1186
1187       if (TREE_CODE (decl) == FUNCTION_DECL)
1188         {
1189           bool is_template;
1190           tree friend_type;
1191           tree decl_type;
1192           tree friend_args_type;
1193           tree decl_args_type;
1194
1195           /* Make sure that both DECL and FRIEND_DECL are templates or
1196              non-templates.  */
1197           is_template = DECL_TEMPLATE_INFO (decl)
1198                         && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl));
1199           if (need_template ^ is_template)
1200             return false;
1201           else if (is_template)
1202             {
1203               /* If both are templates, check template parameter list.  */
1204               tree friend_parms
1205                 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1206                                          args, tf_none);
1207               if (!comp_template_parms
1208                      (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (decl)),
1209                       friend_parms))
1210                 return false;
1211
1212               decl_type = TREE_TYPE (DECL_TI_TEMPLATE (decl));
1213             }
1214           else
1215             decl_type = TREE_TYPE (decl);
1216
1217           friend_type = tsubst_function_type (TREE_TYPE (friend_decl), args,
1218                                               tf_none, NULL_TREE);
1219           if (friend_type == error_mark_node)
1220             return false;
1221
1222           /* Check if return types match.  */
1223           if (!same_type_p (TREE_TYPE (decl_type), TREE_TYPE (friend_type)))
1224             return false;
1225
1226           /* Check if function parameter types match, ignoring the
1227              `this' parameter.  */
1228           friend_args_type = TYPE_ARG_TYPES (friend_type);
1229           decl_args_type = TYPE_ARG_TYPES (decl_type);
1230           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (friend_decl))
1231             friend_args_type = TREE_CHAIN (friend_args_type);
1232           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1233             decl_args_type = TREE_CHAIN (decl_args_type);
1234
1235           return compparms (decl_args_type, friend_args_type);
1236         }
1237       else
1238         {
1239           /* DECL is a TYPE_DECL */
1240           bool is_template;
1241           tree decl_type = TREE_TYPE (decl);
1242
1243           /* Make sure that both DECL and FRIEND_DECL are templates or
1244              non-templates.  */
1245           is_template
1246             = CLASSTYPE_TEMPLATE_INFO (decl_type)
1247               && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (decl_type));
1248
1249           if (need_template ^ is_template)
1250             return false;
1251           else if (is_template)
1252             {
1253               tree friend_parms;
1254               /* If both are templates, check the name of the two
1255                  TEMPLATE_DECL's first because is_friend didn't.  */
1256               if (DECL_NAME (CLASSTYPE_TI_TEMPLATE (decl_type))
1257                   != DECL_NAME (friend_decl))
1258                 return false;
1259
1260               /* Now check template parameter list.  */
1261               friend_parms
1262                 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1263                                          args, tf_none);
1264               return comp_template_parms
1265                 (DECL_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (decl_type)),
1266                  friend_parms);
1267             }
1268           else
1269             return (DECL_NAME (decl)
1270                     == DECL_NAME (friend_decl));
1271         }
1272     }
1273   return false;
1274 }
1275
1276 /* Register the specialization SPEC as a specialization of TMPL with
1277    the indicated ARGS.  IS_FRIEND indicates whether the specialization
1278    is actually just a friend declaration.  Returns SPEC, or an
1279    equivalent prior declaration, if available.  */
1280
1281 static tree
1282 register_specialization (tree spec, tree tmpl, tree args, bool is_friend,
1283                          hashval_t hash)
1284 {
1285   tree fn;
1286   spec_entry **slot = NULL;
1287   spec_entry elt;
1288
1289   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL && DECL_P (spec));
1290
1291   if (TREE_CODE (spec) == FUNCTION_DECL
1292       && uses_template_parms (DECL_TI_ARGS (spec)))
1293     /* This is the FUNCTION_DECL for a partial instantiation.  Don't
1294        register it; we want the corresponding TEMPLATE_DECL instead.
1295        We use `uses_template_parms (DECL_TI_ARGS (spec))' rather than
1296        the more obvious `uses_template_parms (spec)' to avoid problems
1297        with default function arguments.  In particular, given
1298        something like this:
1299
1300           template <class T> void f(T t1, T t = T())
1301
1302        the default argument expression is not substituted for in an
1303        instantiation unless and until it is actually needed.  */
1304     return spec;
1305
1306   if (optimize_specialization_lookup_p (tmpl))
1307     /* We don't put these specializations in the hash table, but we might
1308        want to give an error about a mismatch.  */
1309     fn = retrieve_specialization (tmpl, args, 0);
1310   else
1311     {
1312       elt.tmpl = tmpl;
1313       elt.args = args;
1314       elt.spec = spec;
1315
1316       if (hash == 0)
1317         hash = hash_specialization (&elt);
1318
1319       slot = (spec_entry **)
1320         htab_find_slot_with_hash (decl_specializations, &elt, hash, INSERT);
1321       if (*slot)
1322         fn = (*slot)->spec;
1323       else
1324         fn = NULL_TREE;
1325     }
1326
1327   /* We can sometimes try to re-register a specialization that we've
1328      already got.  In particular, regenerate_decl_from_template calls
1329      duplicate_decls which will update the specialization list.  But,
1330      we'll still get called again here anyhow.  It's more convenient
1331      to simply allow this than to try to prevent it.  */
1332   if (fn == spec)
1333     return spec;
1334   else if (fn && DECL_TEMPLATE_SPECIALIZATION (spec))
1335     {
1336       if (DECL_TEMPLATE_INSTANTIATION (fn))
1337         {
1338           if (DECL_ODR_USED (fn)
1339               || DECL_EXPLICIT_INSTANTIATION (fn))
1340             {
1341               error ("specialization of %qD after instantiation",
1342                      fn);
1343               return error_mark_node;
1344             }
1345           else
1346             {
1347               tree clone;
1348               /* This situation should occur only if the first
1349                  specialization is an implicit instantiation, the
1350                  second is an explicit specialization, and the
1351                  implicit instantiation has not yet been used.  That
1352                  situation can occur if we have implicitly
1353                  instantiated a member function and then specialized
1354                  it later.
1355
1356                  We can also wind up here if a friend declaration that
1357                  looked like an instantiation turns out to be a
1358                  specialization:
1359
1360                    template <class T> void foo(T);
1361                    class S { friend void foo<>(int) };
1362                    template <> void foo(int);
1363
1364                  We transform the existing DECL in place so that any
1365                  pointers to it become pointers to the updated
1366                  declaration.
1367
1368                  If there was a definition for the template, but not
1369                  for the specialization, we want this to look as if
1370                  there were no definition, and vice versa.  */
1371               DECL_INITIAL (fn) = NULL_TREE;
1372               duplicate_decls (spec, fn, is_friend);
1373               /* The call to duplicate_decls will have applied
1374                  [temp.expl.spec]:
1375
1376                    An explicit specialization of a function template
1377                    is inline only if it is explicitly declared to be,
1378                    and independently of whether its function template
1379                    is.
1380
1381                 to the primary function; now copy the inline bits to
1382                 the various clones.  */
1383               FOR_EACH_CLONE (clone, fn)
1384                 {
1385                   DECL_DECLARED_INLINE_P (clone)
1386                     = DECL_DECLARED_INLINE_P (fn);
1387                   DECL_SOURCE_LOCATION (clone)
1388                     = DECL_SOURCE_LOCATION (fn);
1389                 }
1390               check_specialization_namespace (fn);
1391
1392               return fn;
1393             }
1394         }
1395       else if (DECL_TEMPLATE_SPECIALIZATION (fn))
1396         {
1397           if (!duplicate_decls (spec, fn, is_friend) && DECL_INITIAL (spec))
1398             /* Dup decl failed, but this is a new definition. Set the
1399                line number so any errors match this new
1400                definition.  */
1401             DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (spec);
1402
1403           return fn;
1404         }
1405     }
1406   else if (fn)
1407     return duplicate_decls (spec, fn, is_friend);
1408
1409   /* A specialization must be declared in the same namespace as the
1410      template it is specializing.  */
1411   if (DECL_TEMPLATE_SPECIALIZATION (spec)
1412       && !check_specialization_namespace (tmpl))
1413     DECL_CONTEXT (spec) = DECL_CONTEXT (tmpl);
1414
1415   if (!optimize_specialization_lookup_p (tmpl))
1416     {
1417       gcc_assert (tmpl && args && spec);
1418       *slot = ggc_alloc_spec_entry ();
1419       **slot = elt;
1420       if (TREE_CODE (spec) == FUNCTION_DECL && DECL_NAMESPACE_SCOPE_P (spec)
1421           && PRIMARY_TEMPLATE_P (tmpl)
1422           && DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (tmpl)) == NULL_TREE)
1423         /* TMPL is a forward declaration of a template function; keep a list
1424            of all specializations in case we need to reassign them to a friend
1425            template later in tsubst_friend_function.  */
1426         DECL_TEMPLATE_INSTANTIATIONS (tmpl)
1427           = tree_cons (args, spec, DECL_TEMPLATE_INSTANTIATIONS (tmpl));
1428     }
1429
1430   return spec;
1431 }
1432
1433 /* Returns true iff two spec_entry nodes are equivalent.  Only compares the
1434    TMPL and ARGS members, ignores SPEC.  */
1435
1436 static int
1437 eq_specializations (const void *p1, const void *p2)
1438 {
1439   const spec_entry *e1 = (const spec_entry *)p1;
1440   const spec_entry *e2 = (const spec_entry *)p2;
1441
1442   return (e1->tmpl == e2->tmpl
1443           && comp_template_args (e1->args, e2->args));
1444 }
1445
1446 /* Returns a hash for a template TMPL and template arguments ARGS.  */
1447
1448 static hashval_t
1449 hash_tmpl_and_args (tree tmpl, tree args)
1450 {
1451   hashval_t val = DECL_UID (tmpl);
1452   return iterative_hash_template_arg (args, val);
1453 }
1454
1455 /* Returns a hash for a spec_entry node based on the TMPL and ARGS members,
1456    ignoring SPEC.  */
1457
1458 static hashval_t
1459 hash_specialization (const void *p)
1460 {
1461   const spec_entry *e = (const spec_entry *)p;
1462   return hash_tmpl_and_args (e->tmpl, e->args);
1463 }
1464
1465 /* Recursively calculate a hash value for a template argument ARG, for use
1466    in the hash tables of template specializations.  */
1467
1468 hashval_t
1469 iterative_hash_template_arg (tree arg, hashval_t val)
1470 {
1471   unsigned HOST_WIDE_INT i;
1472   enum tree_code code;
1473   char tclass;
1474
1475   if (arg == NULL_TREE)
1476     return iterative_hash_object (arg, val);
1477
1478   if (!TYPE_P (arg))
1479     STRIP_NOPS (arg);
1480
1481   if (TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
1482     /* We can get one of these when re-hashing a previous entry in the middle
1483        of substituting into a pack expansion.  Just look through it.  */
1484     arg = ARGUMENT_PACK_SELECT_FROM_PACK (arg);
1485
1486   code = TREE_CODE (arg);
1487   tclass = TREE_CODE_CLASS (code);
1488
1489   val = iterative_hash_object (code, val);
1490
1491   switch (code)
1492     {
1493     case ERROR_MARK:
1494       return val;
1495
1496     case IDENTIFIER_NODE:
1497       return iterative_hash_object (IDENTIFIER_HASH_VALUE (arg), val);
1498
1499     case TREE_VEC:
1500       {
1501         int i, len = TREE_VEC_LENGTH (arg);
1502         for (i = 0; i < len; ++i)
1503           val = iterative_hash_template_arg (TREE_VEC_ELT (arg, i), val);
1504         return val;
1505       }
1506
1507     case TYPE_PACK_EXPANSION:
1508     case EXPR_PACK_EXPANSION:
1509       return iterative_hash_template_arg (PACK_EXPANSION_PATTERN (arg), val);
1510
1511     case TYPE_ARGUMENT_PACK:
1512     case NONTYPE_ARGUMENT_PACK:
1513       return iterative_hash_template_arg (ARGUMENT_PACK_ARGS (arg), val);
1514
1515     case TREE_LIST:
1516       for (; arg; arg = TREE_CHAIN (arg))
1517         val = iterative_hash_template_arg (TREE_VALUE (arg), val);
1518       return val;
1519
1520     case OVERLOAD:
1521       for (; arg; arg = OVL_NEXT (arg))
1522         val = iterative_hash_template_arg (OVL_CURRENT (arg), val);
1523       return val;
1524
1525     case CONSTRUCTOR:
1526       {
1527         tree field, value;
1528         FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (arg), i, field, value)
1529           {
1530             val = iterative_hash_template_arg (field, val);
1531             val = iterative_hash_template_arg (value, val);
1532           }
1533         return val;
1534       }
1535
1536     case PARM_DECL:
1537       if (!DECL_ARTIFICIAL (arg))
1538         {
1539           val = iterative_hash_object (DECL_PARM_INDEX (arg), val);
1540           val = iterative_hash_object (DECL_PARM_LEVEL (arg), val);
1541         }
1542       return iterative_hash_template_arg (TREE_TYPE (arg), val);
1543
1544     case TARGET_EXPR:
1545       return iterative_hash_template_arg (TARGET_EXPR_INITIAL (arg), val);
1546
1547     case PTRMEM_CST:
1548       val = iterative_hash_template_arg (PTRMEM_CST_CLASS (arg), val);
1549       return iterative_hash_template_arg (PTRMEM_CST_MEMBER (arg), val);
1550
1551     case TEMPLATE_PARM_INDEX:
1552       val = iterative_hash_template_arg
1553         (TREE_TYPE (TEMPLATE_PARM_DECL (arg)), val);
1554       val = iterative_hash_object (TEMPLATE_PARM_LEVEL (arg), val);
1555       return iterative_hash_object (TEMPLATE_PARM_IDX (arg), val);
1556
1557     case TRAIT_EXPR:
1558       val = iterative_hash_object (TRAIT_EXPR_KIND (arg), val);
1559       val = iterative_hash_template_arg (TRAIT_EXPR_TYPE1 (arg), val);
1560       return iterative_hash_template_arg (TRAIT_EXPR_TYPE2 (arg), val);
1561
1562     case BASELINK:
1563       val = iterative_hash_template_arg (BINFO_TYPE (BASELINK_BINFO (arg)),
1564                                          val);
1565       return iterative_hash_template_arg (DECL_NAME (get_first_fn (arg)),
1566                                           val);
1567
1568     case MODOP_EXPR:
1569       val = iterative_hash_template_arg (TREE_OPERAND (arg, 0), val);
1570       code = TREE_CODE (TREE_OPERAND (arg, 1));
1571       val = iterative_hash_object (code, val);
1572       return iterative_hash_template_arg (TREE_OPERAND (arg, 2), val);
1573
1574     case LAMBDA_EXPR:
1575       /* A lambda can't appear in a template arg, but don't crash on
1576          erroneous input.  */
1577       gcc_assert (seen_error ());
1578       return val;
1579
1580     case CAST_EXPR:
1581     case STATIC_CAST_EXPR:
1582     case REINTERPRET_CAST_EXPR:
1583     case CONST_CAST_EXPR:
1584     case DYNAMIC_CAST_EXPR:
1585     case NEW_EXPR:
1586       val = iterative_hash_template_arg (TREE_TYPE (arg), val);
1587       /* Now hash operands as usual.  */
1588       break;
1589
1590     default:
1591       break;
1592     }
1593
1594   switch (tclass)
1595     {
1596     case tcc_type:
1597       if (TYPE_CANONICAL (arg))
1598         return iterative_hash_object (TYPE_HASH (TYPE_CANONICAL (arg)),
1599                                       val);
1600       else if (TREE_CODE (arg) == DECLTYPE_TYPE)
1601         return iterative_hash_template_arg (DECLTYPE_TYPE_EXPR (arg), val);
1602       /* Otherwise just compare the types during lookup.  */
1603       return val;
1604
1605     case tcc_declaration:
1606     case tcc_constant:
1607       return iterative_hash_expr (arg, val);
1608
1609     default:
1610       gcc_assert (IS_EXPR_CODE_CLASS (tclass));
1611       {
1612         unsigned n = TREE_OPERAND_LENGTH (arg);
1613         for (i = 0; i < n; ++i)
1614           val = iterative_hash_template_arg (TREE_OPERAND (arg, i), val);
1615         return val;
1616       }
1617     }
1618   gcc_unreachable ();
1619   return 0;
1620 }
1621
1622 /* Unregister the specialization SPEC as a specialization of TMPL.
1623    Replace it with NEW_SPEC, if NEW_SPEC is non-NULL.  Returns true
1624    if the SPEC was listed as a specialization of TMPL.
1625
1626    Note that SPEC has been ggc_freed, so we can't look inside it.  */
1627
1628 bool
1629 reregister_specialization (tree spec, tree tinfo, tree new_spec)
1630 {
1631   spec_entry **slot;
1632   spec_entry elt;
1633
1634   elt.tmpl = most_general_template (TI_TEMPLATE (tinfo));
1635   elt.args = TI_ARGS (tinfo);
1636   elt.spec = NULL_TREE;
1637
1638   slot = (spec_entry **) htab_find_slot (decl_specializations, &elt, INSERT);
1639   if (*slot)
1640     {
1641       gcc_assert ((*slot)->spec == spec || (*slot)->spec == new_spec);
1642       gcc_assert (new_spec != NULL_TREE);
1643       (*slot)->spec = new_spec;
1644       return 1;
1645     }
1646
1647   return 0;
1648 }
1649
1650 /* Compare an entry in the local specializations hash table P1 (which
1651    is really a pointer to a TREE_LIST) with P2 (which is really a
1652    DECL).  */
1653
1654 static int
1655 eq_local_specializations (const void *p1, const void *p2)
1656 {
1657   return TREE_VALUE ((const_tree) p1) == (const_tree) p2;
1658 }
1659
1660 /* Hash P1, an entry in the local specializations table.  */
1661
1662 static hashval_t
1663 hash_local_specialization (const void* p1)
1664 {
1665   return htab_hash_pointer (TREE_VALUE ((const_tree) p1));
1666 }
1667
1668 /* Like register_specialization, but for local declarations.  We are
1669    registering SPEC, an instantiation of TMPL.  */
1670
1671 static void
1672 register_local_specialization (tree spec, tree tmpl)
1673 {
1674   void **slot;
1675
1676   slot = htab_find_slot_with_hash (local_specializations, tmpl,
1677                                    htab_hash_pointer (tmpl), INSERT);
1678   *slot = build_tree_list (spec, tmpl);
1679 }
1680
1681 /* TYPE is a class type.  Returns true if TYPE is an explicitly
1682    specialized class.  */
1683
1684 bool
1685 explicit_class_specialization_p (tree type)
1686 {
1687   if (!CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
1688     return false;
1689   return !uses_template_parms (CLASSTYPE_TI_ARGS (type));
1690 }
1691
1692 /* Print the list of functions at FNS, going through all the overloads
1693    for each element of the list.  Alternatively, FNS can not be a
1694    TREE_LIST, in which case it will be printed together with all the
1695    overloads.
1696
1697    MORE and *STR should respectively be FALSE and NULL when the function
1698    is called from the outside.  They are used internally on recursive
1699    calls.  print_candidates manages the two parameters and leaves NULL
1700    in *STR when it ends.  */
1701
1702 static void
1703 print_candidates_1 (tree fns, bool more, const char **str)
1704 {
1705   tree fn, fn2;
1706   char *spaces = NULL;
1707
1708   for (fn = fns; fn; fn = OVL_NEXT (fn))
1709     if (TREE_CODE (fn) == TREE_LIST)
1710       {
1711         for (fn2 = fn; fn2 != NULL_TREE; fn2 = TREE_CHAIN (fn2))
1712           print_candidates_1 (TREE_VALUE (fn2),
1713                               TREE_CHAIN (fn2) || more, str);
1714       }
1715     else
1716       {
1717         if (!*str)
1718           {
1719             /* Pick the prefix string.  */
1720             if (!more && !OVL_NEXT (fns))
1721               {
1722                 error ("candidate is: %+#D", OVL_CURRENT (fn));
1723                 continue;
1724               }
1725
1726             *str = _("candidates are:");
1727             spaces = get_spaces (*str);
1728           }
1729         error ("%s %+#D", *str, OVL_CURRENT (fn));
1730         *str = spaces ? spaces : *str;
1731       }
1732
1733   if (!more)
1734     {
1735       free (spaces);
1736       *str = NULL;
1737     }
1738 }
1739
1740 /* Print the list of candidate FNS in an error message.  FNS can also
1741    be a TREE_LIST of non-functions in the case of an ambiguous lookup.  */
1742
1743 void
1744 print_candidates (tree fns)
1745 {
1746   const char *str = NULL;
1747   print_candidates_1 (fns, false, &str);
1748   gcc_assert (str == NULL);
1749 }
1750
1751 /* Returns the template (one of the functions given by TEMPLATE_ID)
1752    which can be specialized to match the indicated DECL with the
1753    explicit template args given in TEMPLATE_ID.  The DECL may be
1754    NULL_TREE if none is available.  In that case, the functions in
1755    TEMPLATE_ID are non-members.
1756
1757    If NEED_MEMBER_TEMPLATE is nonzero the function is known to be a
1758    specialization of a member template.
1759
1760    The TEMPLATE_COUNT is the number of references to qualifying
1761    template classes that appeared in the name of the function. See
1762    check_explicit_specialization for a more accurate description.
1763
1764    TSK indicates what kind of template declaration (if any) is being
1765    declared.  TSK_TEMPLATE indicates that the declaration given by
1766    DECL, though a FUNCTION_DECL, has template parameters, and is
1767    therefore a template function.
1768
1769    The template args (those explicitly specified and those deduced)
1770    are output in a newly created vector *TARGS_OUT.
1771
1772    If it is impossible to determine the result, an error message is
1773    issued.  The error_mark_node is returned to indicate failure.  */
1774
1775 static tree
1776 determine_specialization (tree template_id,
1777                           tree decl,
1778                           tree* targs_out,
1779                           int need_member_template,
1780                           int template_count,
1781                           tmpl_spec_kind tsk)
1782 {
1783   tree fns;
1784   tree targs;
1785   tree explicit_targs;
1786   tree candidates = NULL_TREE;
1787   /* A TREE_LIST of templates of which DECL may be a specialization.
1788      The TREE_VALUE of each node is a TEMPLATE_DECL.  The
1789      corresponding TREE_PURPOSE is the set of template arguments that,
1790      when used to instantiate the template, would produce a function
1791      with the signature of DECL.  */
1792   tree templates = NULL_TREE;
1793   int header_count;
1794   struct cp_binding_level *b;
1795
1796   *targs_out = NULL_TREE;
1797
1798   if (template_id == error_mark_node || decl == error_mark_node)
1799     return error_mark_node;
1800
1801   fns = TREE_OPERAND (template_id, 0);
1802   explicit_targs = TREE_OPERAND (template_id, 1);
1803
1804   if (fns == error_mark_node)
1805     return error_mark_node;
1806
1807   /* Check for baselinks.  */
1808   if (BASELINK_P (fns))
1809     fns = BASELINK_FUNCTIONS (fns);
1810
1811   if (!is_overloaded_fn (fns))
1812     {
1813       error ("%qD is not a function template", fns);
1814       return error_mark_node;
1815     }
1816
1817   /* Count the number of template headers specified for this
1818      specialization.  */
1819   header_count = 0;
1820   for (b = current_binding_level;
1821        b->kind == sk_template_parms;
1822        b = b->level_chain)
1823     ++header_count;
1824
1825   for (; fns; fns = OVL_NEXT (fns))
1826     {
1827       tree fn = OVL_CURRENT (fns);
1828
1829       if (TREE_CODE (fn) == TEMPLATE_DECL)
1830         {
1831           tree decl_arg_types;
1832           tree fn_arg_types;
1833
1834           /* In case of explicit specialization, we need to check if
1835              the number of template headers appearing in the specialization
1836              is correct. This is usually done in check_explicit_specialization,
1837              but the check done there cannot be exhaustive when specializing
1838              member functions. Consider the following code:
1839
1840              template <> void A<int>::f(int);
1841              template <> template <> void A<int>::f(int);
1842
1843              Assuming that A<int> is not itself an explicit specialization
1844              already, the first line specializes "f" which is a non-template
1845              member function, whilst the second line specializes "f" which
1846              is a template member function. So both lines are syntactically
1847              correct, and check_explicit_specialization does not reject
1848              them.
1849
1850              Here, we can do better, as we are matching the specialization
1851              against the declarations. We count the number of template
1852              headers, and we check if they match TEMPLATE_COUNT + 1
1853              (TEMPLATE_COUNT is the number of qualifying template classes,
1854              plus there must be another header for the member template
1855              itself).
1856
1857              Notice that if header_count is zero, this is not a
1858              specialization but rather a template instantiation, so there
1859              is no check we can perform here.  */
1860           if (header_count && header_count != template_count + 1)
1861             continue;
1862
1863           /* Check that the number of template arguments at the
1864              innermost level for DECL is the same as for FN.  */
1865           if (current_binding_level->kind == sk_template_parms
1866               && !current_binding_level->explicit_spec_p
1867               && (TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (fn))
1868                   != TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS
1869                                       (current_template_parms))))
1870             continue;
1871
1872           /* DECL might be a specialization of FN.  */
1873           decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1874           fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
1875
1876           /* For a non-static member function, we need to make sure
1877              that the const qualification is the same.  Since
1878              get_bindings does not try to merge the "this" parameter,
1879              we must do the comparison explicitly.  */
1880           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1881               && !same_type_p (TREE_VALUE (fn_arg_types),
1882                                TREE_VALUE (decl_arg_types)))
1883             continue;
1884
1885           /* Skip the "this" parameter and, for constructors of
1886              classes with virtual bases, the VTT parameter.  A
1887              full specialization of a constructor will have a VTT
1888              parameter, but a template never will.  */ 
1889           decl_arg_types 
1890             = skip_artificial_parms_for (decl, decl_arg_types);
1891           fn_arg_types 
1892             = skip_artificial_parms_for (fn, fn_arg_types);
1893
1894           /* Check that the number of function parameters matches.
1895              For example,
1896                template <class T> void f(int i = 0);
1897                template <> void f<int>();
1898              The specialization f<int> is invalid but is not caught
1899              by get_bindings below.  */
1900           if (list_length (fn_arg_types) != list_length (decl_arg_types))
1901             continue;
1902
1903           /* Function templates cannot be specializations; there are
1904              no partial specializations of functions.  Therefore, if
1905              the type of DECL does not match FN, there is no
1906              match.  */
1907           if (tsk == tsk_template)
1908             {
1909               if (compparms (fn_arg_types, decl_arg_types))
1910                 candidates = tree_cons (NULL_TREE, fn, candidates);
1911               continue;
1912             }
1913
1914           /* See whether this function might be a specialization of this
1915              template.  */
1916           targs = get_bindings (fn, decl, explicit_targs, /*check_ret=*/true);
1917
1918           if (!targs)
1919             /* We cannot deduce template arguments that when used to
1920                specialize TMPL will produce DECL.  */
1921             continue;
1922
1923           /* Save this template, and the arguments deduced.  */
1924           templates = tree_cons (targs, fn, templates);
1925         }
1926       else if (need_member_template)
1927         /* FN is an ordinary member function, and we need a
1928            specialization of a member template.  */
1929         ;
1930       else if (TREE_CODE (fn) != FUNCTION_DECL)
1931         /* We can get IDENTIFIER_NODEs here in certain erroneous
1932            cases.  */
1933         ;
1934       else if (!DECL_FUNCTION_MEMBER_P (fn))
1935         /* This is just an ordinary non-member function.  Nothing can
1936            be a specialization of that.  */
1937         ;
1938       else if (DECL_ARTIFICIAL (fn))
1939         /* Cannot specialize functions that are created implicitly.  */
1940         ;
1941       else
1942         {
1943           tree decl_arg_types;
1944
1945           /* This is an ordinary member function.  However, since
1946              we're here, we can assume it's enclosing class is a
1947              template class.  For example,
1948
1949                template <typename T> struct S { void f(); };
1950                template <> void S<int>::f() {}
1951
1952              Here, S<int>::f is a non-template, but S<int> is a
1953              template class.  If FN has the same type as DECL, we
1954              might be in business.  */
1955
1956           if (!DECL_TEMPLATE_INFO (fn))
1957             /* Its enclosing class is an explicit specialization
1958                of a template class.  This is not a candidate.  */
1959             continue;
1960
1961           if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
1962                             TREE_TYPE (TREE_TYPE (fn))))
1963             /* The return types differ.  */
1964             continue;
1965
1966           /* Adjust the type of DECL in case FN is a static member.  */
1967           decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1968           if (DECL_STATIC_FUNCTION_P (fn)
1969               && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1970             decl_arg_types = TREE_CHAIN (decl_arg_types);
1971
1972           if (compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
1973                          decl_arg_types))
1974             /* They match!  */
1975             candidates = tree_cons (NULL_TREE, fn, candidates);
1976         }
1977     }
1978
1979   if (templates && TREE_CHAIN (templates))
1980     {
1981       /* We have:
1982
1983            [temp.expl.spec]
1984
1985            It is possible for a specialization with a given function
1986            signature to be instantiated from more than one function
1987            template.  In such cases, explicit specification of the
1988            template arguments must be used to uniquely identify the
1989            function template specialization being specialized.
1990
1991          Note that here, there's no suggestion that we're supposed to
1992          determine which of the candidate templates is most
1993          specialized.  However, we, also have:
1994
1995            [temp.func.order]
1996
1997            Partial ordering of overloaded function template
1998            declarations is used in the following contexts to select
1999            the function template to which a function template
2000            specialization refers:
2001
2002            -- when an explicit specialization refers to a function
2003               template.
2004
2005          So, we do use the partial ordering rules, at least for now.
2006          This extension can only serve to make invalid programs valid,
2007          so it's safe.  And, there is strong anecdotal evidence that
2008          the committee intended the partial ordering rules to apply;
2009          the EDG front end has that behavior, and John Spicer claims
2010          that the committee simply forgot to delete the wording in
2011          [temp.expl.spec].  */
2012       tree tmpl = most_specialized_instantiation (templates);
2013       if (tmpl != error_mark_node)
2014         {
2015           templates = tmpl;
2016           TREE_CHAIN (templates) = NULL_TREE;
2017         }
2018     }
2019
2020   if (templates == NULL_TREE && candidates == NULL_TREE)
2021     {
2022       error ("template-id %qD for %q+D does not match any template "
2023              "declaration", template_id, decl);
2024       if (header_count && header_count != template_count + 1)
2025         inform (input_location, "saw %d %<template<>%>, need %d for "
2026                 "specializing a member function template",
2027                 header_count, template_count + 1);
2028       return error_mark_node;
2029     }
2030   else if ((templates && TREE_CHAIN (templates))
2031            || (candidates && TREE_CHAIN (candidates))
2032            || (templates && candidates))
2033     {
2034       error ("ambiguous template specialization %qD for %q+D",
2035              template_id, decl);
2036       candidates = chainon (candidates, templates);
2037       print_candidates (candidates);
2038       return error_mark_node;
2039     }
2040
2041   /* We have one, and exactly one, match.  */
2042   if (candidates)
2043     {
2044       tree fn = TREE_VALUE (candidates);
2045       *targs_out = copy_node (DECL_TI_ARGS (fn));
2046       /* DECL is a re-declaration or partial instantiation of a template
2047          function.  */
2048       if (TREE_CODE (fn) == TEMPLATE_DECL)
2049         return fn;
2050       /* It was a specialization of an ordinary member function in a
2051          template class.  */
2052       return DECL_TI_TEMPLATE (fn);
2053     }
2054
2055   /* It was a specialization of a template.  */
2056   targs = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (TREE_VALUE (templates)));
2057   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (targs))
2058     {
2059       *targs_out = copy_node (targs);
2060       SET_TMPL_ARGS_LEVEL (*targs_out,
2061                            TMPL_ARGS_DEPTH (*targs_out),
2062                            TREE_PURPOSE (templates));
2063     }
2064   else
2065     *targs_out = TREE_PURPOSE (templates);
2066   return TREE_VALUE (templates);
2067 }
2068
2069 /* Returns a chain of parameter types, exactly like the SPEC_TYPES,
2070    but with the default argument values filled in from those in the
2071    TMPL_TYPES.  */
2072
2073 static tree
2074 copy_default_args_to_explicit_spec_1 (tree spec_types,
2075                                       tree tmpl_types)
2076 {
2077   tree new_spec_types;
2078
2079   if (!spec_types)
2080     return NULL_TREE;
2081
2082   if (spec_types == void_list_node)
2083     return void_list_node;
2084
2085   /* Substitute into the rest of the list.  */
2086   new_spec_types =
2087     copy_default_args_to_explicit_spec_1 (TREE_CHAIN (spec_types),
2088                                           TREE_CHAIN (tmpl_types));
2089
2090   /* Add the default argument for this parameter.  */
2091   return hash_tree_cons (TREE_PURPOSE (tmpl_types),
2092                          TREE_VALUE (spec_types),
2093                          new_spec_types);
2094 }
2095
2096 /* DECL is an explicit specialization.  Replicate default arguments
2097    from the template it specializes.  (That way, code like:
2098
2099      template <class T> void f(T = 3);
2100      template <> void f(double);
2101      void g () { f (); }
2102
2103    works, as required.)  An alternative approach would be to look up
2104    the correct default arguments at the call-site, but this approach
2105    is consistent with how implicit instantiations are handled.  */
2106
2107 static void
2108 copy_default_args_to_explicit_spec (tree decl)
2109 {
2110   tree tmpl;
2111   tree spec_types;
2112   tree tmpl_types;
2113   tree new_spec_types;
2114   tree old_type;
2115   tree new_type;
2116   tree t;
2117   tree object_type = NULL_TREE;
2118   tree in_charge = NULL_TREE;
2119   tree vtt = NULL_TREE;
2120
2121   /* See if there's anything we need to do.  */
2122   tmpl = DECL_TI_TEMPLATE (decl);
2123   tmpl_types = TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (tmpl)));
2124   for (t = tmpl_types; t; t = TREE_CHAIN (t))
2125     if (TREE_PURPOSE (t))
2126       break;
2127   if (!t)
2128     return;
2129
2130   old_type = TREE_TYPE (decl);
2131   spec_types = TYPE_ARG_TYPES (old_type);
2132
2133   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2134     {
2135       /* Remove the this pointer, but remember the object's type for
2136          CV quals.  */
2137       object_type = TREE_TYPE (TREE_VALUE (spec_types));
2138       spec_types = TREE_CHAIN (spec_types);
2139       tmpl_types = TREE_CHAIN (tmpl_types);
2140
2141       if (DECL_HAS_IN_CHARGE_PARM_P (decl))
2142         {
2143           /* DECL may contain more parameters than TMPL due to the extra
2144              in-charge parameter in constructors and destructors.  */
2145           in_charge = spec_types;
2146           spec_types = TREE_CHAIN (spec_types);
2147         }
2148       if (DECL_HAS_VTT_PARM_P (decl))
2149         {
2150           vtt = spec_types;
2151           spec_types = TREE_CHAIN (spec_types);
2152         }
2153     }
2154
2155   /* Compute the merged default arguments.  */
2156   new_spec_types =
2157     copy_default_args_to_explicit_spec_1 (spec_types, tmpl_types);
2158
2159   /* Compute the new FUNCTION_TYPE.  */
2160   if (object_type)
2161     {
2162       if (vtt)
2163         new_spec_types = hash_tree_cons (TREE_PURPOSE (vtt),
2164                                          TREE_VALUE (vtt),
2165                                          new_spec_types);
2166
2167       if (in_charge)
2168         /* Put the in-charge parameter back.  */
2169         new_spec_types = hash_tree_cons (TREE_PURPOSE (in_charge),
2170                                          TREE_VALUE (in_charge),
2171                                          new_spec_types);
2172
2173       new_type = build_method_type_directly (object_type,
2174                                              TREE_TYPE (old_type),
2175                                              new_spec_types);
2176     }
2177   else
2178     new_type = build_function_type (TREE_TYPE (old_type),
2179                                     new_spec_types);
2180   new_type = cp_build_type_attribute_variant (new_type,
2181                                               TYPE_ATTRIBUTES (old_type));
2182   new_type = build_exception_variant (new_type,
2183                                       TYPE_RAISES_EXCEPTIONS (old_type));
2184   TREE_TYPE (decl) = new_type;
2185 }
2186
2187 /* Check to see if the function just declared, as indicated in
2188    DECLARATOR, and in DECL, is a specialization of a function
2189    template.  We may also discover that the declaration is an explicit
2190    instantiation at this point.
2191
2192    Returns DECL, or an equivalent declaration that should be used
2193    instead if all goes well.  Issues an error message if something is
2194    amiss.  Returns error_mark_node if the error is not easily
2195    recoverable.
2196
2197    FLAGS is a bitmask consisting of the following flags:
2198
2199    2: The function has a definition.
2200    4: The function is a friend.
2201
2202    The TEMPLATE_COUNT is the number of references to qualifying
2203    template classes that appeared in the name of the function.  For
2204    example, in
2205
2206      template <class T> struct S { void f(); };
2207      void S<int>::f();
2208
2209    the TEMPLATE_COUNT would be 1.  However, explicitly specialized
2210    classes are not counted in the TEMPLATE_COUNT, so that in
2211
2212      template <class T> struct S {};
2213      template <> struct S<int> { void f(); }
2214      template <> void S<int>::f();
2215
2216    the TEMPLATE_COUNT would be 0.  (Note that this declaration is
2217    invalid; there should be no template <>.)
2218
2219    If the function is a specialization, it is marked as such via
2220    DECL_TEMPLATE_SPECIALIZATION.  Furthermore, its DECL_TEMPLATE_INFO
2221    is set up correctly, and it is added to the list of specializations
2222    for that template.  */
2223
2224 tree
2225 check_explicit_specialization (tree declarator,
2226                                tree decl,
2227                                int template_count,
2228                                int flags)
2229 {
2230   int have_def = flags & 2;
2231   int is_friend = flags & 4;
2232   int specialization = 0;
2233   int explicit_instantiation = 0;
2234   int member_specialization = 0;
2235   tree ctype = DECL_CLASS_CONTEXT (decl);
2236   tree dname = DECL_NAME (decl);
2237   tmpl_spec_kind tsk;
2238
2239   if (is_friend)
2240     {
2241       if (!processing_specialization)
2242         tsk = tsk_none;
2243       else
2244         tsk = tsk_excessive_parms;
2245     }
2246   else
2247     tsk = current_tmpl_spec_kind (template_count);
2248
2249   switch (tsk)
2250     {
2251     case tsk_none:
2252       if (processing_specialization)
2253         {
2254           specialization = 1;
2255           SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2256         }
2257       else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
2258         {
2259           if (is_friend)
2260             /* This could be something like:
2261
2262                template <class T> void f(T);
2263                class S { friend void f<>(int); }  */
2264             specialization = 1;
2265           else
2266             {
2267               /* This case handles bogus declarations like template <>
2268                  template <class T> void f<int>(); */
2269
2270               error ("template-id %qD in declaration of primary template",
2271                      declarator);
2272               return decl;
2273             }
2274         }
2275       break;
2276
2277     case tsk_invalid_member_spec:
2278       /* The error has already been reported in
2279          check_specialization_scope.  */
2280       return error_mark_node;
2281
2282     case tsk_invalid_expl_inst:
2283       error ("template parameter list used in explicit instantiation");
2284
2285       /* Fall through.  */
2286
2287     case tsk_expl_inst:
2288       if (have_def)
2289         error ("definition provided for explicit instantiation");
2290
2291       explicit_instantiation = 1;
2292       break;
2293
2294     case tsk_excessive_parms:
2295     case tsk_insufficient_parms:
2296       if (tsk == tsk_excessive_parms)
2297         error ("too many template parameter lists in declaration of %qD",
2298                decl);
2299       else if (template_header_count)
2300         error("too few template parameter lists in declaration of %qD", decl);
2301       else
2302         error("explicit specialization of %qD must be introduced by "
2303               "%<template <>%>", decl);
2304
2305       /* Fall through.  */
2306     case tsk_expl_spec:
2307       SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2308       if (ctype)
2309         member_specialization = 1;
2310       else
2311         specialization = 1;
2312       break;
2313
2314     case tsk_template:
2315       if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
2316         {
2317           /* This case handles bogus declarations like template <>
2318              template <class T> void f<int>(); */
2319
2320           if (uses_template_parms (declarator))
2321             error ("function template partial specialization %qD "
2322                    "is not allowed", declarator);
2323           else
2324             error ("template-id %qD in declaration of primary template",
2325                    declarator);
2326           return decl;
2327         }
2328
2329       if (ctype && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype))
2330         /* This is a specialization of a member template, without
2331            specialization the containing class.  Something like:
2332
2333              template <class T> struct S {
2334                template <class U> void f (U);
2335              };
2336              template <> template <class U> void S<int>::f(U) {}
2337
2338            That's a specialization -- but of the entire template.  */
2339         specialization = 1;
2340       break;
2341
2342     default:
2343       gcc_unreachable ();
2344     }
2345
2346   if (specialization || member_specialization)
2347     {
2348       tree t = TYPE_ARG_TYPES (TREE_TYPE (decl));
2349       for (; t; t = TREE_CHAIN (t))
2350         if (TREE_PURPOSE (t))
2351           {
2352             permerror (input_location, 
2353                        "default argument specified in explicit specialization");
2354             break;
2355           }
2356     }
2357
2358   if (specialization || member_specialization || explicit_instantiation)
2359     {
2360       tree tmpl = NULL_TREE;
2361       tree targs = NULL_TREE;
2362
2363       /* Make sure that the declarator is a TEMPLATE_ID_EXPR.  */
2364       if (TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
2365         {
2366           tree fns;
2367
2368           gcc_assert (TREE_CODE (declarator) == IDENTIFIER_NODE);
2369           if (ctype)
2370             fns = dname;
2371           else
2372             {
2373               /* If there is no class context, the explicit instantiation
2374                  must be at namespace scope.  */
2375               gcc_assert (DECL_NAMESPACE_SCOPE_P (decl));
2376
2377               /* Find the namespace binding, using the declaration
2378                  context.  */
2379               fns = lookup_qualified_name (CP_DECL_CONTEXT (decl), dname,
2380                                            false, true);
2381               if (fns == error_mark_node || !is_overloaded_fn (fns))
2382                 {
2383                   error ("%qD is not a template function", dname);
2384                   fns = error_mark_node;
2385                 }
2386               else
2387                 {
2388                   tree fn = OVL_CURRENT (fns);
2389                   if (!is_associated_namespace (CP_DECL_CONTEXT (decl),
2390                                                 CP_DECL_CONTEXT (fn)))
2391                     error ("%qD is not declared in %qD",
2392                            decl, current_namespace);
2393                 }
2394             }
2395
2396           declarator = lookup_template_function (fns, NULL_TREE);
2397         }
2398
2399       if (declarator == error_mark_node)
2400         return error_mark_node;
2401
2402       if (ctype != NULL_TREE && TYPE_BEING_DEFINED (ctype))
2403         {
2404           if (!explicit_instantiation)
2405             /* A specialization in class scope.  This is invalid,
2406                but the error will already have been flagged by
2407                check_specialization_scope.  */
2408             return error_mark_node;
2409           else
2410             {
2411               /* It's not valid to write an explicit instantiation in
2412                  class scope, e.g.:
2413
2414                    class C { template void f(); }
2415
2416                    This case is caught by the parser.  However, on
2417                    something like:
2418
2419                    template class C { void f(); };
2420
2421                    (which is invalid) we can get here.  The error will be
2422                    issued later.  */
2423               ;
2424             }
2425
2426           return decl;
2427         }
2428       else if (ctype != NULL_TREE
2429                && (TREE_CODE (TREE_OPERAND (declarator, 0)) ==
2430                    IDENTIFIER_NODE))
2431         {
2432           /* Find the list of functions in ctype that have the same
2433              name as the declared function.  */
2434           tree name = TREE_OPERAND (declarator, 0);
2435           tree fns = NULL_TREE;
2436           int idx;
2437
2438           if (constructor_name_p (name, ctype))
2439             {
2440               int is_constructor = DECL_CONSTRUCTOR_P (decl);
2441
2442               if (is_constructor ? !TYPE_HAS_USER_CONSTRUCTOR (ctype)
2443                   : !CLASSTYPE_DESTRUCTORS (ctype))
2444                 {
2445                   /* From [temp.expl.spec]:
2446
2447                      If such an explicit specialization for the member
2448                      of a class template names an implicitly-declared
2449                      special member function (clause _special_), the
2450                      program is ill-formed.
2451
2452                      Similar language is found in [temp.explicit].  */
2453                   error ("specialization of implicitly-declared special member function");
2454                   return error_mark_node;
2455                 }
2456
2457               name = is_constructor ? ctor_identifier : dtor_identifier;
2458             }
2459
2460           if (!DECL_CONV_FN_P (decl))
2461             {
2462               idx = lookup_fnfields_1 (ctype, name);
2463               if (idx >= 0)
2464                 fns = VEC_index (tree, CLASSTYPE_METHOD_VEC (ctype), idx);
2465             }
2466           else
2467             {
2468               VEC(tree,gc) *methods;
2469               tree ovl;
2470
2471               /* For a type-conversion operator, we cannot do a
2472                  name-based lookup.  We might be looking for `operator
2473                  int' which will be a specialization of `operator T'.
2474                  So, we find *all* the conversion operators, and then
2475                  select from them.  */
2476               fns = NULL_TREE;
2477
2478               methods = CLASSTYPE_METHOD_VEC (ctype);
2479               if (methods)
2480                 for (idx = CLASSTYPE_FIRST_CONVERSION_SLOT;
2481                      VEC_iterate (tree, methods, idx, ovl);
2482                      ++idx)
2483                   {
2484                     if (!DECL_CONV_FN_P (OVL_CURRENT (ovl)))
2485                       /* There are no more conversion functions.  */
2486                       break;
2487
2488                     /* Glue all these conversion functions together
2489                        with those we already have.  */
2490                     for (; ovl; ovl = OVL_NEXT (ovl))
2491                       fns = ovl_cons (OVL_CURRENT (ovl), fns);
2492                   }
2493             }
2494
2495           if (fns == NULL_TREE)
2496             {
2497               error ("no member function %qD declared in %qT", name, ctype);
2498               return error_mark_node;
2499             }
2500           else
2501             TREE_OPERAND (declarator, 0) = fns;
2502         }
2503
2504       /* Figure out what exactly is being specialized at this point.
2505          Note that for an explicit instantiation, even one for a
2506          member function, we cannot tell apriori whether the
2507          instantiation is for a member template, or just a member
2508          function of a template class.  Even if a member template is
2509          being instantiated, the member template arguments may be
2510          elided if they can be deduced from the rest of the
2511          declaration.  */
2512       tmpl = determine_specialization (declarator, decl,
2513                                        &targs,
2514                                        member_specialization,
2515                                        template_count,
2516                                        tsk);
2517
2518       if (!tmpl || tmpl == error_mark_node)
2519         /* We couldn't figure out what this declaration was
2520            specializing.  */
2521         return error_mark_node;
2522       else
2523         {
2524           tree gen_tmpl = most_general_template (tmpl);
2525
2526           if (explicit_instantiation)
2527             {
2528               /* We don't set DECL_EXPLICIT_INSTANTIATION here; that
2529                  is done by do_decl_instantiation later.  */
2530
2531               int arg_depth = TMPL_ARGS_DEPTH (targs);
2532               int parm_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
2533
2534               if (arg_depth > parm_depth)
2535                 {
2536                   /* If TMPL is not the most general template (for
2537                      example, if TMPL is a friend template that is
2538                      injected into namespace scope), then there will
2539                      be too many levels of TARGS.  Remove some of them
2540                      here.  */
2541                   int i;
2542                   tree new_targs;
2543
2544                   new_targs = make_tree_vec (parm_depth);
2545                   for (i = arg_depth - parm_depth; i < arg_depth; ++i)
2546                     TREE_VEC_ELT (new_targs, i - (arg_depth - parm_depth))
2547                       = TREE_VEC_ELT (targs, i);
2548                   targs = new_targs;
2549                 }
2550
2551               return instantiate_template (tmpl, targs, tf_error);
2552             }
2553
2554           /* If we thought that the DECL was a member function, but it
2555              turns out to be specializing a static member function,
2556              make DECL a static member function as well.  */
2557           if (DECL_STATIC_FUNCTION_P (tmpl)
2558               && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2559             revert_static_member_fn (decl);
2560
2561           /* If this is a specialization of a member template of a
2562              template class, we want to return the TEMPLATE_DECL, not
2563              the specialization of it.  */
2564           if (tsk == tsk_template)
2565             {
2566               tree result = DECL_TEMPLATE_RESULT (tmpl);
2567               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
2568               DECL_INITIAL (result) = NULL_TREE;
2569               if (have_def)
2570                 {
2571                   tree parm;
2572                   DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
2573                   DECL_SOURCE_LOCATION (result)
2574                     = DECL_SOURCE_LOCATION (decl);
2575                   /* We want to use the argument list specified in the
2576                      definition, not in the original declaration.  */
2577                   DECL_ARGUMENTS (result) = DECL_ARGUMENTS (decl);
2578                   for (parm = DECL_ARGUMENTS (result); parm;
2579                        parm = DECL_CHAIN (parm))
2580                     DECL_CONTEXT (parm) = result;
2581                 }
2582               return register_specialization (tmpl, gen_tmpl, targs,
2583                                               is_friend, 0);
2584             }
2585
2586           /* Set up the DECL_TEMPLATE_INFO for DECL.  */
2587           DECL_TEMPLATE_INFO (decl) = build_template_info (tmpl, targs);
2588
2589           /* Inherit default function arguments from the template
2590              DECL is specializing.  */
2591           copy_default_args_to_explicit_spec (decl);
2592
2593           /* This specialization has the same protection as the
2594              template it specializes.  */
2595           TREE_PRIVATE (decl) = TREE_PRIVATE (gen_tmpl);
2596           TREE_PROTECTED (decl) = TREE_PROTECTED (gen_tmpl);
2597
2598           /* 7.1.1-1 [dcl.stc]
2599
2600              A storage-class-specifier shall not be specified in an
2601              explicit specialization...
2602
2603              The parser rejects these, so unless action is taken here,
2604              explicit function specializations will always appear with
2605              global linkage.
2606
2607              The action recommended by the C++ CWG in response to C++
2608              defect report 605 is to make the storage class and linkage
2609              of the explicit specialization match the templated function:
2610
2611              http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#605
2612            */
2613           if (tsk == tsk_expl_spec && DECL_FUNCTION_TEMPLATE_P (gen_tmpl))
2614             {
2615               tree tmpl_func = DECL_TEMPLATE_RESULT (gen_tmpl);
2616               gcc_assert (TREE_CODE (tmpl_func) == FUNCTION_DECL);
2617
2618               /* This specialization has the same linkage and visibility as
2619                  the function template it specializes.  */
2620               TREE_PUBLIC (decl) = TREE_PUBLIC (tmpl_func);
2621               if (! TREE_PUBLIC (decl))
2622                 {
2623                   DECL_INTERFACE_KNOWN (decl) = 1;
2624                   DECL_NOT_REALLY_EXTERN (decl) = 1;
2625                 }
2626               DECL_THIS_STATIC (decl) = DECL_THIS_STATIC (tmpl_func);
2627               if (DECL_VISIBILITY_SPECIFIED (tmpl_func))
2628                 {
2629                   DECL_VISIBILITY_SPECIFIED (decl) = 1;
2630                   DECL_VISIBILITY (decl) = DECL_VISIBILITY (tmpl_func);
2631                 }
2632             }
2633
2634           /* If DECL is a friend declaration, declared using an
2635              unqualified name, the namespace associated with DECL may
2636              have been set incorrectly.  For example, in:
2637
2638                template <typename T> void f(T);
2639                namespace N {
2640                  struct S { friend void f<int>(int); }
2641                }
2642
2643              we will have set the DECL_CONTEXT for the friend
2644              declaration to N, rather than to the global namespace.  */
2645           if (DECL_NAMESPACE_SCOPE_P (decl))
2646             DECL_CONTEXT (decl) = DECL_CONTEXT (tmpl);
2647
2648           if (is_friend && !have_def)
2649             /* This is not really a declaration of a specialization.
2650                It's just the name of an instantiation.  But, it's not
2651                a request for an instantiation, either.  */
2652             SET_DECL_IMPLICIT_INSTANTIATION (decl);
2653           else if (DECL_CONSTRUCTOR_P (decl) || DECL_DESTRUCTOR_P (decl))
2654             /* This is indeed a specialization.  In case of constructors
2655                and destructors, we need in-charge and not-in-charge
2656                versions in V3 ABI.  */
2657             clone_function_decl (decl, /*update_method_vec_p=*/0);
2658
2659           /* Register this specialization so that we can find it
2660              again.  */
2661           decl = register_specialization (decl, gen_tmpl, targs, is_friend, 0);
2662         }
2663     }
2664
2665   return decl;
2666 }
2667
2668 /* Returns 1 iff PARMS1 and PARMS2 are identical sets of template
2669    parameters.  These are represented in the same format used for
2670    DECL_TEMPLATE_PARMS.  */
2671
2672 int
2673 comp_template_parms (const_tree parms1, const_tree parms2)
2674 {
2675   const_tree p1;
2676   const_tree p2;
2677
2678   if (parms1 == parms2)
2679     return 1;
2680
2681   for (p1 = parms1, p2 = parms2;
2682        p1 != NULL_TREE && p2 != NULL_TREE;
2683        p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2))
2684     {
2685       tree t1 = TREE_VALUE (p1);
2686       tree t2 = TREE_VALUE (p2);
2687       int i;
2688
2689       gcc_assert (TREE_CODE (t1) == TREE_VEC);
2690       gcc_assert (TREE_CODE (t2) == TREE_VEC);
2691
2692       if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
2693         return 0;
2694
2695       for (i = 0; i < TREE_VEC_LENGTH (t2); ++i)
2696         {
2697           tree parm1 = TREE_VALUE (TREE_VEC_ELT (t1, i));
2698           tree parm2 = TREE_VALUE (TREE_VEC_ELT (t2, i));
2699
2700           /* If either of the template parameters are invalid, assume
2701              they match for the sake of error recovery. */
2702           if (parm1 == error_mark_node || parm2 == error_mark_node)
2703             return 1;
2704
2705           if (TREE_CODE (parm1) != TREE_CODE (parm2))
2706             return 0;
2707
2708           if (TREE_CODE (parm1) == TEMPLATE_TYPE_PARM
2709               && (TEMPLATE_TYPE_PARAMETER_PACK (parm1)
2710                   == TEMPLATE_TYPE_PARAMETER_PACK (parm2)))
2711             continue;
2712           else if (!same_type_p (TREE_TYPE (parm1), TREE_TYPE (parm2)))
2713             return 0;
2714         }
2715     }
2716
2717   if ((p1 != NULL_TREE) != (p2 != NULL_TREE))
2718     /* One set of parameters has more parameters lists than the
2719        other.  */
2720     return 0;
2721
2722   return 1;
2723 }
2724
2725 /* Determine whether PARM is a parameter pack.  */
2726
2727 bool 
2728 template_parameter_pack_p (const_tree parm)
2729 {
2730   /* Determine if we have a non-type template parameter pack.  */
2731   if (TREE_CODE (parm) == PARM_DECL)
2732     return (DECL_TEMPLATE_PARM_P (parm) 
2733             && TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)));
2734
2735   /* If this is a list of template parameters, we could get a
2736      TYPE_DECL or a TEMPLATE_DECL.  */ 
2737   if (TREE_CODE (parm) == TYPE_DECL || TREE_CODE (parm) == TEMPLATE_DECL)
2738     parm = TREE_TYPE (parm);
2739
2740   return ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
2741            || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM)
2742           && TEMPLATE_TYPE_PARAMETER_PACK (parm));
2743 }
2744
2745 /* Determine if T is a function parameter pack.  */
2746
2747 bool
2748 function_parameter_pack_p (const_tree t)
2749 {
2750   if (t && TREE_CODE (t) == PARM_DECL)
2751     return FUNCTION_PARAMETER_PACK_P (t);
2752   return false;
2753 }
2754
2755 /* Return the function template declaration of PRIMARY_FUNC_TMPL_INST.
2756    PRIMARY_FUNC_TMPL_INST is a primary function template instantiation.  */
2757
2758 tree
2759 get_function_template_decl (const_tree primary_func_tmpl_inst)
2760 {
2761   if (! primary_func_tmpl_inst
2762       || TREE_CODE (primary_func_tmpl_inst) != FUNCTION_DECL
2763       || ! primary_template_instantiation_p (primary_func_tmpl_inst))
2764     return NULL;
2765
2766   return DECL_TEMPLATE_RESULT (DECL_TI_TEMPLATE (primary_func_tmpl_inst));
2767 }
2768
2769 /* Return true iff the function parameter PARAM_DECL was expanded
2770    from the function parameter pack PACK.  */
2771
2772 bool
2773 function_parameter_expanded_from_pack_p (tree param_decl, tree pack)
2774 {
2775   if (DECL_ARTIFICIAL (param_decl)
2776       || !function_parameter_pack_p (pack))
2777     return false;
2778
2779   /* The parameter pack and its pack arguments have the same
2780      DECL_PARM_INDEX.  */
2781   return DECL_PARM_INDEX (pack) == DECL_PARM_INDEX (param_decl);
2782 }
2783
2784 /* Determine whether ARGS describes a variadic template args list,
2785    i.e., one that is terminated by a template argument pack.  */
2786
2787 static bool 
2788 template_args_variadic_p (tree args)
2789 {
2790   int nargs;
2791   tree last_parm;
2792
2793   if (args == NULL_TREE)
2794     return false;
2795
2796   args = INNERMOST_TEMPLATE_ARGS (args);
2797   nargs = TREE_VEC_LENGTH (args);
2798
2799   if (nargs == 0)
2800     return false;
2801
2802   last_parm = TREE_VEC_ELT (args, nargs - 1);
2803
2804   return ARGUMENT_PACK_P (last_parm);
2805 }
2806
2807 /* Generate a new name for the parameter pack name NAME (an
2808    IDENTIFIER_NODE) that incorporates its */
2809
2810 static tree
2811 make_ith_pack_parameter_name (tree name, int i)
2812 {
2813   /* Munge the name to include the parameter index.  */
2814 #define NUMBUF_LEN 128
2815   char numbuf[NUMBUF_LEN];
2816   char* newname;
2817   int newname_len;
2818
2819   snprintf (numbuf, NUMBUF_LEN, "%i", i);
2820   newname_len = IDENTIFIER_LENGTH (name)
2821                 + strlen (numbuf) + 2;
2822   newname = (char*)alloca (newname_len);
2823   snprintf (newname, newname_len,
2824             "%s#%i", IDENTIFIER_POINTER (name), i);
2825   return get_identifier (newname);
2826 }
2827
2828 /* Return true if T is a primary function
2829    or class template instantiation.  */
2830
2831 bool
2832 primary_template_instantiation_p (const_tree t)
2833 {
2834   if (!t)
2835     return false;
2836
2837   if (TREE_CODE (t) == FUNCTION_DECL)
2838     return DECL_LANG_SPECIFIC (t)
2839            && DECL_TEMPLATE_INSTANTIATION (t)
2840            && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (t));
2841   else if (CLASS_TYPE_P (t))
2842     return CLASSTYPE_TEMPLATE_INSTANTIATION (t)
2843            && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t));
2844   return false;
2845 }
2846
2847 /* Return true if PARM is a template template parameter.  */
2848
2849 bool
2850 template_template_parameter_p (const_tree parm)
2851 {
2852   return DECL_TEMPLATE_TEMPLATE_PARM_P (parm);
2853 }
2854
2855 /* Return the template parameters of T if T is a
2856    primary template instantiation, NULL otherwise.  */
2857
2858 tree
2859 get_primary_template_innermost_parameters (const_tree t)
2860 {
2861   tree parms = NULL, template_info = NULL;
2862
2863   if ((template_info = get_template_info (t))
2864       && primary_template_instantiation_p (t))
2865     parms = INNERMOST_TEMPLATE_PARMS
2866         (DECL_TEMPLATE_PARMS (TI_TEMPLATE (template_info)));
2867
2868   return parms;
2869 }
2870
2871 /* Return the template parameters of the LEVELth level from the full list
2872    of template parameters PARMS.  */
2873
2874 tree
2875 get_template_parms_at_level (tree parms, int level)
2876 {
2877   tree p;
2878   if (!parms
2879       || TREE_CODE (parms) != TREE_LIST
2880       || level > TMPL_PARMS_DEPTH (parms))
2881     return NULL_TREE;
2882
2883   for (p = parms; p; p = TREE_CHAIN (p))
2884     if (TMPL_PARMS_DEPTH (p) == level)
2885       return p;
2886
2887   return NULL_TREE;
2888 }
2889
2890 /* Returns the template arguments of T if T is a template instantiation,
2891    NULL otherwise.  */
2892
2893 tree
2894 get_template_innermost_arguments (const_tree t)
2895 {
2896   tree args = NULL, template_info = NULL;
2897
2898   if ((template_info = get_template_info (t))
2899       && TI_ARGS (template_info))
2900     args = INNERMOST_TEMPLATE_ARGS (TI_ARGS (template_info));
2901
2902   return args;
2903 }
2904
2905 /* Return the argument pack elements of T if T is a template argument pack,
2906    NULL otherwise.  */
2907
2908 tree
2909 get_template_argument_pack_elems (const_tree t)
2910 {
2911   if (TREE_CODE (t) != TYPE_ARGUMENT_PACK
2912       && TREE_CODE (t) != NONTYPE_ARGUMENT_PACK)
2913     return NULL;
2914
2915   return ARGUMENT_PACK_ARGS (t);
2916 }
2917
2918 /* Structure used to track the progress of find_parameter_packs_r.  */
2919 struct find_parameter_pack_data 
2920 {
2921   /* TREE_LIST that will contain all of the parameter packs found by
2922      the traversal.  */
2923   tree* parameter_packs;
2924
2925   /* Set of AST nodes that have been visited by the traversal.  */
2926   struct pointer_set_t *visited;
2927 };
2928
2929 /* Identifies all of the argument packs that occur in a template
2930    argument and appends them to the TREE_LIST inside DATA, which is a
2931    find_parameter_pack_data structure. This is a subroutine of
2932    make_pack_expansion and uses_parameter_packs.  */
2933 static tree
2934 find_parameter_packs_r (tree *tp, int *walk_subtrees, void* data)
2935 {
2936   tree t = *tp;
2937   struct find_parameter_pack_data* ppd = 
2938     (struct find_parameter_pack_data*)data;
2939   bool parameter_pack_p = false;
2940
2941   /* Identify whether this is a parameter pack or not.  */
2942   switch (TREE_CODE (t))
2943     {
2944     case TEMPLATE_PARM_INDEX:
2945       if (TEMPLATE_PARM_PARAMETER_PACK (t))
2946         parameter_pack_p = true;
2947       break;
2948
2949     case TEMPLATE_TYPE_PARM:
2950     case TEMPLATE_TEMPLATE_PARM:
2951       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
2952         parameter_pack_p = true;
2953       break;
2954
2955     case PARM_DECL:
2956       if (FUNCTION_PARAMETER_PACK_P (t))
2957         {
2958           /* We don't want to walk into the type of a PARM_DECL,
2959              because we don't want to see the type parameter pack.  */
2960           *walk_subtrees = 0;
2961           parameter_pack_p = true;
2962         }
2963       break;
2964
2965     default:
2966       /* Not a parameter pack.  */
2967       break;
2968     }
2969
2970   if (parameter_pack_p)
2971     {
2972       /* Add this parameter pack to the list.  */
2973       *ppd->parameter_packs = tree_cons (NULL_TREE, t, *ppd->parameter_packs);
2974     }
2975
2976   if (TYPE_P (t))
2977     cp_walk_tree (&TYPE_CONTEXT (t), 
2978                   &find_parameter_packs_r, ppd, ppd->visited);
2979
2980   /* This switch statement will return immediately if we don't find a
2981      parameter pack.  */
2982   switch (TREE_CODE (t)) 
2983     {
2984     case TEMPLATE_PARM_INDEX:
2985       return NULL_TREE;
2986
2987     case BOUND_TEMPLATE_TEMPLATE_PARM:
2988       /* Check the template itself.  */
2989       cp_walk_tree (&TREE_TYPE (TYPE_TI_TEMPLATE (t)), 
2990                     &find_parameter_packs_r, ppd, ppd->visited);
2991       /* Check the template arguments.  */
2992       cp_walk_tree (&TYPE_TI_ARGS (t), &find_parameter_packs_r, ppd, 
2993                     ppd->visited);
2994       *walk_subtrees = 0;
2995       return NULL_TREE;
2996
2997     case TEMPLATE_TYPE_PARM:
2998     case TEMPLATE_TEMPLATE_PARM:
2999       return NULL_TREE;
3000
3001     case PARM_DECL:
3002       return NULL_TREE;
3003
3004     case RECORD_TYPE:
3005       if (TYPE_PTRMEMFUNC_P (t))
3006         return NULL_TREE;
3007       /* Fall through.  */
3008
3009     case UNION_TYPE:
3010     case ENUMERAL_TYPE:
3011       if (TYPE_TEMPLATE_INFO (t))
3012         cp_walk_tree (&TI_ARGS (TYPE_TEMPLATE_INFO (t)),
3013                       &find_parameter_packs_r, ppd, ppd->visited);
3014
3015       *walk_subtrees = 0;
3016       return NULL_TREE;
3017
3018     case TEMPLATE_DECL:
3019       cp_walk_tree (&TREE_TYPE (t),
3020                     &find_parameter_packs_r, ppd, ppd->visited);
3021       return NULL_TREE;
3022  
3023     case TYPENAME_TYPE:
3024       cp_walk_tree (&TYPENAME_TYPE_FULLNAME (t), &find_parameter_packs_r,
3025                    ppd, ppd->visited);
3026       *walk_subtrees = 0;
3027       return NULL_TREE;
3028       
3029     case TYPE_PACK_EXPANSION:
3030     case EXPR_PACK_EXPANSION:
3031       *walk_subtrees = 0;
3032       return NULL_TREE;
3033
3034     case INTEGER_TYPE:
3035       cp_walk_tree (&TYPE_MAX_VALUE (t), &find_parameter_packs_r, 
3036                     ppd, ppd->visited);
3037       *walk_subtrees = 0;
3038       return NULL_TREE;
3039
3040     case IDENTIFIER_NODE:
3041       cp_walk_tree (&TREE_TYPE (t), &find_parameter_packs_r, ppd, 
3042                     ppd->visited);
3043       *walk_subtrees = 0;
3044       return NULL_TREE;
3045
3046     default:
3047       return NULL_TREE;
3048     }
3049
3050   return NULL_TREE;
3051 }
3052
3053 /* Determines if the expression or type T uses any parameter packs.  */
3054 bool
3055 uses_parameter_packs (tree t)
3056 {
3057   tree parameter_packs = NULL_TREE;
3058   struct find_parameter_pack_data ppd;
3059   ppd.parameter_packs = &parameter_packs;
3060   ppd.visited = pointer_set_create ();
3061   cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
3062   pointer_set_destroy (ppd.visited);
3063   return parameter_packs != NULL_TREE;
3064 }
3065
3066 /* Turn ARG, which may be an expression, type, or a TREE_LIST
3067    representation a base-class initializer into a parameter pack
3068    expansion. If all goes well, the resulting node will be an
3069    EXPR_PACK_EXPANSION, TYPE_PACK_EXPANSION, or TREE_LIST,
3070    respectively.  */
3071 tree 
3072 make_pack_expansion (tree arg)
3073 {
3074   tree result;
3075   tree parameter_packs = NULL_TREE;
3076   bool for_types = false;
3077   struct find_parameter_pack_data ppd;
3078
3079   if (!arg || arg == error_mark_node)
3080     return arg;
3081
3082   if (TREE_CODE (arg) == TREE_LIST)
3083     {
3084       /* The only time we will see a TREE_LIST here is for a base
3085          class initializer.  In this case, the TREE_PURPOSE will be a
3086          _TYPE node (representing the base class expansion we're
3087          initializing) and the TREE_VALUE will be a TREE_LIST
3088          containing the initialization arguments. 
3089
3090          The resulting expansion looks somewhat different from most
3091          expansions. Rather than returning just one _EXPANSION, we
3092          return a TREE_LIST whose TREE_PURPOSE is a
3093          TYPE_PACK_EXPANSION containing the bases that will be
3094          initialized.  The TREE_VALUE will be identical to the
3095          original TREE_VALUE, which is a list of arguments that will
3096          be passed to each base.  We do not introduce any new pack
3097          expansion nodes into the TREE_VALUE (although it is possible
3098          that some already exist), because the TREE_PURPOSE and
3099          TREE_VALUE all need to be expanded together with the same
3100          _EXPANSION node.  Note that the TYPE_PACK_EXPANSION in the
3101          resulting TREE_PURPOSE will mention the parameter packs in
3102          both the bases and the arguments to the bases.  */
3103       tree purpose;
3104       tree value;
3105       tree parameter_packs = NULL_TREE;
3106
3107       /* Determine which parameter packs will be used by the base
3108          class expansion.  */
3109       ppd.visited = pointer_set_create ();
3110       ppd.parameter_packs = &parameter_packs;
3111       cp_walk_tree (&TREE_PURPOSE (arg), &find_parameter_packs_r, 
3112                     &ppd, ppd.visited);
3113
3114       if (parameter_packs == NULL_TREE)
3115         {
3116           error ("base initializer expansion %<%T%> contains no parameter packs", arg);
3117           pointer_set_destroy (ppd.visited);
3118           return error_mark_node;
3119         }
3120
3121       if (TREE_VALUE (arg) != void_type_node)
3122         {
3123           /* Collect the sets of parameter packs used in each of the
3124              initialization arguments.  */
3125           for (value = TREE_VALUE (arg); value; value = TREE_CHAIN (value))
3126             {
3127               /* Determine which parameter packs will be expanded in this
3128                  argument.  */
3129               cp_walk_tree (&TREE_VALUE (value), &find_parameter_packs_r, 
3130                             &ppd, ppd.visited);
3131             }
3132         }
3133
3134       pointer_set_destroy (ppd.visited);
3135
3136       /* Create the pack expansion type for the base type.  */
3137       purpose = cxx_make_type (TYPE_PACK_EXPANSION);
3138       SET_PACK_EXPANSION_PATTERN (purpose, TREE_PURPOSE (arg));
3139       PACK_EXPANSION_PARAMETER_PACKS (purpose) = parameter_packs;
3140
3141       /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
3142          they will rarely be compared to anything.  */
3143       SET_TYPE_STRUCTURAL_EQUALITY (purpose);
3144
3145       return tree_cons (purpose, TREE_VALUE (arg), NULL_TREE);
3146     }
3147
3148   if (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL)
3149     for_types = true;
3150
3151   /* Build the PACK_EXPANSION_* node.  */
3152   result = for_types
3153      ? cxx_make_type (TYPE_PACK_EXPANSION)
3154      : make_node (EXPR_PACK_EXPANSION);
3155   SET_PACK_EXPANSION_PATTERN (result, arg);
3156   if (TREE_CODE (result) == EXPR_PACK_EXPANSION)
3157     {
3158       /* Propagate type and const-expression information.  */
3159       TREE_TYPE (result) = TREE_TYPE (arg);
3160       TREE_CONSTANT (result) = TREE_CONSTANT (arg);
3161     }
3162   else
3163     /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
3164        they will rarely be compared to anything.  */
3165     SET_TYPE_STRUCTURAL_EQUALITY (result);
3166
3167   /* Determine which parameter packs will be expanded.  */
3168   ppd.parameter_packs = &parameter_packs;
3169   ppd.visited = pointer_set_create ();
3170   cp_walk_tree (&arg, &find_parameter_packs_r, &ppd, ppd.visited);
3171   pointer_set_destroy (ppd.visited);
3172
3173   /* Make sure we found some parameter packs.  */
3174   if (parameter_packs == NULL_TREE)
3175     {
3176       if (TYPE_P (arg))
3177         error ("expansion pattern %<%T%> contains no argument packs", arg);
3178       else
3179         error ("expansion pattern %<%E%> contains no argument packs", arg);
3180       return error_mark_node;
3181     }
3182   PACK_EXPANSION_PARAMETER_PACKS (result) = parameter_packs;
3183
3184   return result;
3185 }
3186
3187 /* Checks T for any "bare" parameter packs, which have not yet been
3188    expanded, and issues an error if any are found. This operation can
3189    only be done on full expressions or types (e.g., an expression
3190    statement, "if" condition, etc.), because we could have expressions like:
3191
3192      foo(f(g(h(args)))...)
3193
3194    where "args" is a parameter pack. check_for_bare_parameter_packs
3195    should not be called for the subexpressions args, h(args),
3196    g(h(args)), or f(g(h(args))), because we would produce erroneous
3197    error messages. 
3198
3199    Returns TRUE and emits an error if there were bare parameter packs,
3200    returns FALSE otherwise.  */
3201 bool 
3202 check_for_bare_parameter_packs (tree t)
3203 {
3204   tree parameter_packs = NULL_TREE;
3205   struct find_parameter_pack_data ppd;
3206
3207   if (!processing_template_decl || !t || t == error_mark_node)
3208     return false;
3209
3210   if (TREE_CODE (t) == TYPE_DECL)
3211     t = TREE_TYPE (t);
3212
3213   ppd.parameter_packs = &parameter_packs;
3214   ppd.visited = pointer_set_create ();
3215   cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
3216   pointer_set_destroy (ppd.visited);
3217
3218   if (parameter_packs) 
3219     {
3220       error ("parameter packs not expanded with %<...%>:");
3221       while (parameter_packs)
3222         {
3223           tree pack = TREE_VALUE (parameter_packs);
3224           tree name = NULL_TREE;
3225
3226           if (TREE_CODE (pack) == TEMPLATE_TYPE_PARM
3227               || TREE_CODE (pack) == TEMPLATE_TEMPLATE_PARM)
3228             name = TYPE_NAME (pack);
3229           else if (TREE_CODE (pack) == TEMPLATE_PARM_INDEX)
3230             name = DECL_NAME (TEMPLATE_PARM_DECL (pack));
3231           else
3232             name = DECL_NAME (pack);
3233
3234           if (name)
3235             inform (input_location, "        %qD", name);
3236           else
3237             inform (input_location, "        <anonymous>");
3238
3239           parameter_packs = TREE_CHAIN (parameter_packs);
3240         }
3241
3242       return true;
3243     }
3244
3245   return false;
3246 }
3247
3248 /* Expand any parameter packs that occur in the template arguments in
3249    ARGS.  */
3250 tree
3251 expand_template_argument_pack (tree args)
3252 {
3253   tree result_args = NULL_TREE;
3254   int in_arg, out_arg = 0, nargs = args ? TREE_VEC_LENGTH (args) : 0;
3255   int num_result_args = -1;
3256   int non_default_args_count = -1;
3257
3258   /* First, determine if we need to expand anything, and the number of
3259      slots we'll need.  */
3260   for (in_arg = 0; in_arg < nargs; ++in_arg)
3261     {
3262       tree arg = TREE_VEC_ELT (args, in_arg);
3263       if (arg == NULL_TREE)
3264         return args;
3265       if (ARGUMENT_PACK_P (arg))
3266         {
3267           int num_packed = TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg));
3268           if (num_result_args < 0)
3269             num_result_args = in_arg + num_packed;
3270           else
3271             num_result_args += num_packed;
3272         }
3273       else
3274         {
3275           if (num_result_args >= 0)
3276             num_result_args++;
3277         }
3278     }
3279
3280   /* If no expansion is necessary, we're done.  */
3281   if (num_result_args < 0)
3282     return args;
3283
3284   /* Expand arguments.  */
3285   result_args = make_tree_vec (num_result_args);
3286   if (NON_DEFAULT_TEMPLATE_ARGS_COUNT (args))
3287     non_default_args_count =
3288       GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (args);
3289   for (in_arg = 0; in_arg < nargs; ++in_arg)
3290     {
3291       tree arg = TREE_VEC_ELT (args, in_arg);
3292       if (ARGUMENT_PACK_P (arg))
3293         {
3294           tree packed = ARGUMENT_PACK_ARGS (arg);
3295           int i, num_packed = TREE_VEC_LENGTH (packed);
3296           for (i = 0; i < num_packed; ++i, ++out_arg)
3297             TREE_VEC_ELT (result_args, out_arg) = TREE_VEC_ELT(packed, i);
3298           if (non_default_args_count > 0)
3299             non_default_args_count += num_packed;
3300         }
3301       else
3302         {
3303           TREE_VEC_ELT (result_args, out_arg) = arg;
3304           ++out_arg;
3305         }
3306     }
3307   if (non_default_args_count >= 0)
3308     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (result_args, non_default_args_count);
3309   return result_args;
3310 }
3311
3312 /* Checks if DECL shadows a template parameter.
3313
3314    [temp.local]: A template-parameter shall not be redeclared within its
3315    scope (including nested scopes).
3316
3317    Emits an error and returns TRUE if the DECL shadows a parameter,
3318    returns FALSE otherwise.  */
3319
3320 bool
3321 check_template_shadow (tree decl)
3322 {
3323   tree olddecl;
3324
3325   /* If we're not in a template, we can't possibly shadow a template
3326      parameter.  */
3327   if (!current_template_parms)
3328     return true;
3329
3330   /* Figure out what we're shadowing.  */
3331   if (TREE_CODE (decl) == OVERLOAD)
3332     decl = OVL_CURRENT (decl);
3333   olddecl = innermost_non_namespace_value (DECL_NAME (decl));
3334
3335   /* If there's no previous binding for this name, we're not shadowing
3336      anything, let alone a template parameter.  */
3337   if (!olddecl)
3338     return true;
3339
3340   /* If we're not shadowing a template parameter, we're done.  Note
3341      that OLDDECL might be an OVERLOAD (or perhaps even an
3342      ERROR_MARK), so we can't just blithely assume it to be a _DECL
3343      node.  */
3344   if (!DECL_P (olddecl) || !DECL_TEMPLATE_PARM_P (olddecl))
3345     return true;
3346
3347   /* We check for decl != olddecl to avoid bogus errors for using a
3348      name inside a class.  We check TPFI to avoid duplicate errors for
3349      inline member templates.  */
3350   if (decl == olddecl
3351       || TEMPLATE_PARMS_FOR_INLINE (current_template_parms))
3352     return true;
3353
3354   error ("declaration of %q+#D", decl);
3355   error (" shadows template parm %q+#D", olddecl);
3356   return false;
3357 }
3358
3359 /* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
3360    ORIG_LEVEL, DECL, and TYPE.  NUM_SIBLINGS is the total number of
3361    template parameters.  */
3362
3363 static tree
3364 build_template_parm_index (int index,
3365                            int level,
3366                            int orig_level,
3367                            int num_siblings,
3368                            tree decl,
3369                            tree type)
3370 {
3371   tree t = make_node (TEMPLATE_PARM_INDEX);
3372   TEMPLATE_PARM_IDX (t) = index;
3373   TEMPLATE_PARM_LEVEL (t) = level;
3374   TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
3375   TEMPLATE_PARM_NUM_SIBLINGS (t) = num_siblings;
3376   TEMPLATE_PARM_DECL (t) = decl;
3377   TREE_TYPE (t) = type;
3378   TREE_CONSTANT (t) = TREE_CONSTANT (decl);
3379   TREE_READONLY (t) = TREE_READONLY (decl);
3380
3381   return t;
3382 }
3383
3384 /* Find the canonical type parameter for the given template type
3385    parameter.  Returns the canonical type parameter, which may be TYPE
3386    if no such parameter existed.  */
3387
3388 static tree
3389 canonical_type_parameter (tree type)
3390 {
3391   tree list;
3392   int idx = TEMPLATE_TYPE_IDX (type);
3393   if (!canonical_template_parms)
3394     canonical_template_parms = VEC_alloc (tree, gc, idx+1);
3395
3396   while (VEC_length (tree, canonical_template_parms) <= (unsigned)idx)
3397     VEC_safe_push (tree, gc, canonical_template_parms, NULL_TREE);
3398
3399   list = VEC_index (tree, canonical_template_parms, idx);
3400   while (list && !comptypes (type, TREE_VALUE (list), COMPARE_STRUCTURAL))
3401     list = TREE_CHAIN (list);
3402
3403   if (list)
3404     return TREE_VALUE (list);
3405   else
3406     {
3407       VEC_replace(tree, canonical_template_parms, idx,
3408                   tree_cons (NULL_TREE, type, 
3409                              VEC_index (tree, canonical_template_parms, idx)));
3410       return type;
3411     }
3412 }
3413
3414 /* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
3415    TEMPLATE_PARM_LEVEL has been decreased by LEVELS.  If such a
3416    TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
3417    new one is created.  */
3418
3419 static tree
3420 reduce_template_parm_level (tree index, tree type, int levels, tree args,
3421                             tsubst_flags_t complain)
3422 {
3423   if (TEMPLATE_PARM_DESCENDANTS (index) == NULL_TREE
3424       || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
3425           != TEMPLATE_PARM_LEVEL (index) - levels)
3426       || !same_type_p (type, TREE_TYPE (TEMPLATE_PARM_DESCENDANTS (index))))
3427     {
3428       tree orig_decl = TEMPLATE_PARM_DECL (index);
3429       tree decl, t;
3430
3431       decl = build_decl (DECL_SOURCE_LOCATION (orig_decl),
3432                          TREE_CODE (orig_decl), DECL_NAME (orig_decl), type);
3433       TREE_CONSTANT (decl) = TREE_CONSTANT (orig_decl);
3434       TREE_READONLY (decl) = TREE_READONLY (orig_decl);
3435       DECL_ARTIFICIAL (decl) = 1;
3436       SET_DECL_TEMPLATE_PARM_P (decl);
3437
3438       t = build_template_parm_index (TEMPLATE_PARM_IDX (index),
3439                                      TEMPLATE_PARM_LEVEL (index) - levels,
3440                                      TEMPLATE_PARM_ORIG_LEVEL (index),
3441                                      TEMPLATE_PARM_NUM_SIBLINGS (index),
3442                                      decl, type);
3443       TEMPLATE_PARM_DESCENDANTS (index) = t;
3444       TEMPLATE_PARM_PARAMETER_PACK (t) 
3445         = TEMPLATE_PARM_PARAMETER_PACK (index);
3446
3447         /* Template template parameters need this.  */
3448       if (TREE_CODE (decl) == TEMPLATE_DECL)
3449         DECL_TEMPLATE_PARMS (decl) = tsubst_template_parms
3450           (DECL_TEMPLATE_PARMS (TEMPLATE_PARM_DECL (index)),
3451            args, complain);
3452     }
3453
3454   return TEMPLATE_PARM_DESCENDANTS (index);
3455 }
3456
3457 /* Process information from new template parameter PARM and append it
3458    to the LIST being built.  This new parameter is a non-type
3459    parameter iff IS_NON_TYPE is true. This new parameter is a
3460    parameter pack iff IS_PARAMETER_PACK is true.  The location of PARM
3461    is in PARM_LOC. NUM_TEMPLATE_PARMS is the size of the template
3462    parameter list PARM belongs to. This is used used to create a
3463    proper canonical type for the type of PARM that is to be created,
3464    iff PARM is a type.  If the size is not known, this parameter shall
3465    be set to 0.  */
3466
3467 tree
3468 process_template_parm (tree list, location_t parm_loc, tree parm,
3469                        bool is_non_type, bool is_parameter_pack,
3470                        unsigned num_template_parms)
3471 {
3472   tree decl = 0;
3473   tree defval;
3474   tree err_parm_list;
3475   int idx = 0;
3476
3477   gcc_assert (TREE_CODE (parm) == TREE_LIST);
3478   defval = TREE_PURPOSE (parm);
3479
3480   if (list)
3481     {
3482       tree p = tree_last (list);
3483
3484       if (p && TREE_VALUE (p) != error_mark_node)
3485         {
3486           p = TREE_VALUE (p);
3487           if (TREE_CODE (p) == TYPE_DECL || TREE_CODE (p) == TEMPLATE_DECL)
3488             idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
3489           else
3490             idx = TEMPLATE_PARM_IDX (DECL_INITIAL (p));
3491         }
3492
3493       ++idx;
3494     }
3495   else
3496     idx = 0;
3497
3498   if (is_non_type)
3499     {
3500       parm = TREE_VALUE (parm);
3501
3502       SET_DECL_TEMPLATE_PARM_P (parm);
3503
3504       if (TREE_TYPE (parm) == error_mark_node)
3505         {
3506           err_parm_list = build_tree_list (defval, parm);
3507           TREE_VALUE (err_parm_list) = error_mark_node;
3508            return chainon (list, err_parm_list);
3509         }
3510       else
3511       {
3512         /* [temp.param]
3513
3514            The top-level cv-qualifiers on the template-parameter are
3515            ignored when determining its type.  */
3516         TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
3517         if (invalid_nontype_parm_type_p (TREE_TYPE (parm), 1))
3518           {
3519             err_parm_list = build_tree_list (defval, parm);
3520             TREE_VALUE (err_parm_list) = error_mark_node;
3521              return chainon (list, err_parm_list);
3522           }
3523
3524         if (uses_parameter_packs (TREE_TYPE (parm)) && !is_parameter_pack)
3525           {
3526             /* This template parameter is not a parameter pack, but it
3527                should be. Complain about "bare" parameter packs.  */
3528             check_for_bare_parameter_packs (TREE_TYPE (parm));
3529             
3530             /* Recover by calling this a parameter pack.  */
3531             is_parameter_pack = true;
3532           }
3533       }
3534
3535       /* A template parameter is not modifiable.  */
3536       TREE_CONSTANT (parm) = 1;
3537       TREE_READONLY (parm) = 1;
3538       decl = build_decl (parm_loc,
3539                          CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
3540       TREE_CONSTANT (decl) = 1;
3541       TREE_READONLY (decl) = 1;
3542       DECL_INITIAL (parm) = DECL_INITIAL (decl)
3543         = build_template_parm_index (idx, processing_template_decl,
3544                                      processing_template_decl,
3545                                      num_template_parms,
3546                                      decl, TREE_TYPE (parm));
3547
3548       TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)) 
3549         = is_parameter_pack;
3550     }
3551   else
3552     {
3553       tree t;
3554       parm = TREE_VALUE (TREE_VALUE (parm));
3555
3556       if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
3557         {
3558           t = cxx_make_type (TEMPLATE_TEMPLATE_PARM);
3559           /* This is for distinguishing between real templates and template
3560              template parameters */
3561           TREE_TYPE (parm) = t;
3562           TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
3563           decl = parm;
3564         }
3565       else
3566         {
3567           t = cxx_make_type (TEMPLATE_TYPE_PARM);
3568           /* parm is either IDENTIFIER_NODE or NULL_TREE.  */
3569           decl = build_decl (parm_loc,
3570                              TYPE_DECL, parm, t);
3571         }
3572
3573       TYPE_NAME (t) = decl;
3574       TYPE_STUB_DECL (t) = decl;
3575       parm = decl;
3576       TEMPLATE_TYPE_PARM_INDEX (t)
3577         = build_template_parm_index (idx, processing_template_decl,
3578                                      processing_template_decl,
3579                                      num_template_parms,
3580                                      decl, TREE_TYPE (parm));
3581       TEMPLATE_TYPE_PARAMETER_PACK (t) = is_parameter_pack;
3582       TYPE_CANONICAL (t) = canonical_type_parameter (t);
3583     }
3584   DECL_ARTIFICIAL (decl) = 1;
3585   SET_DECL_TEMPLATE_PARM_P (decl);
3586   pushdecl (decl);
3587   parm = build_tree_list (defval, parm);
3588   return chainon (list, parm);
3589 }
3590
3591 /* The end of a template parameter list has been reached.  Process the
3592    tree list into a parameter vector, converting each parameter into a more
3593    useful form.  Type parameters are saved as IDENTIFIER_NODEs, and others
3594    as PARM_DECLs.  */
3595
3596 tree
3597 end_template_parm_list (tree parms)
3598 {
3599   int nparms;
3600   tree parm, next;
3601   tree saved_parmlist = make_tree_vec (list_length (parms));
3602
3603   current_template_parms
3604     = tree_cons (size_int (processing_template_decl),
3605                  saved_parmlist, current_template_parms);
3606
3607   for (parm = parms, nparms = 0; parm; parm = next, nparms++)
3608     {
3609       next = TREE_CHAIN (parm);
3610       TREE_VEC_ELT (saved_parmlist, nparms) = parm;
3611       TREE_CHAIN (parm) = NULL_TREE;
3612     }
3613
3614   --processing_template_parmlist;
3615
3616   return saved_parmlist;
3617 }
3618
3619 /* Create a new type almost identical to TYPE but which has the
3620    following differences:
3621
3622      1/ T has a new TEMPLATE_PARM_INDEX that carries the new number of
3623      template sibling parameters of T.
3624
3625      2/ T has a new canonical type that matches the new number
3626      of sibling parms.
3627
3628      3/ From now on, T is going to be what lookups referring to the
3629      name of TYPE will return. No lookup should return TYPE anymore.
3630
3631    NUM_PARMS is the new number of sibling parms TYPE belongs to.
3632
3633    This is a subroutine of fixup_template_parms.  */
3634
3635 static tree
3636 fixup_template_type_parm_type (tree type, int num_parms)
3637 {
3638   tree orig_idx = TEMPLATE_TYPE_PARM_INDEX (type), idx;
3639   tree t;
3640   /* This is the decl which name is inserted into the symbol table for
3641      the template parm type. So whenever we lookup the type name, this
3642      is the DECL we get.  */
3643   tree decl;
3644
3645   /* Do not fix up the type twice.  */
3646   if (orig_idx && TEMPLATE_PARM_NUM_SIBLINGS (orig_idx) != 0)
3647     return type;
3648
3649   t = copy_type (type);
3650   decl = TYPE_NAME (t);
3651
3652   TYPE_MAIN_VARIANT (t) = t;
3653   TYPE_NEXT_VARIANT (t)= NULL_TREE;
3654   TYPE_POINTER_TO (t) = 0;
3655   TYPE_REFERENCE_TO (t) = 0;
3656
3657   idx = build_template_parm_index (TEMPLATE_PARM_IDX (orig_idx),
3658                                    TEMPLATE_PARM_LEVEL (orig_idx),
3659                                    TEMPLATE_PARM_ORIG_LEVEL (orig_idx),
3660                                    num_parms,
3661                                    decl, t);
3662   TEMPLATE_PARM_DESCENDANTS (idx) = TEMPLATE_PARM_DESCENDANTS (orig_idx);
3663   TEMPLATE_PARM_PARAMETER_PACK (idx) = TEMPLATE_PARM_PARAMETER_PACK (orig_idx);
3664   TEMPLATE_TYPE_PARM_INDEX (t) = idx;
3665
3666   TYPE_STUB_DECL (t) = decl;
3667   TEMPLATE_TYPE_DECL (t) = decl;
3668   if (TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
3669     TREE_TYPE (DECL_TEMPLATE_RESULT  (decl)) = t;
3670
3671   /* Update the type associated to the type name stored in the symbol
3672      table. Now, whenever the type name is looked up, the resulting
3673      type is properly fixed up.  */
3674   TREE_TYPE (decl) = t;
3675
3676   TYPE_CANONICAL (t) = canonical_type_parameter (t);
3677
3678   return t;
3679 }
3680
3681 /* Create and return a new TEMPLATE_PARM_INDEX that is almost
3682    identical to I, but that is fixed up as to:
3683
3684    1/ carry the number of sibling parms (NUM_PARMS) of the template
3685    parm represented by I.
3686
3687    2/ replace all references to template parm types declared before I
3688    (in the same template parm list as I) by references to template
3689    parm types contained in ARGS. ARGS should contain the list of
3690    template parms that have been fixed up so far, in a form suitable
3691    to be passed to tsubst.
3692
3693    This is a subroutine of fixup_template_parms.  */
3694
3695 static tree
3696 fixup_template_parm_index (tree i, tree args, int num_parms)
3697 {
3698   tree index, decl, type;
3699
3700   if (i == NULL_TREE
3701       || TREE_CODE (i) != TEMPLATE_PARM_INDEX
3702       /* Do not fix up the index twice.  */
3703       || (TEMPLATE_PARM_NUM_SIBLINGS (i) != 0))
3704     return i;
3705
3706   decl = TEMPLATE_PARM_DECL (i);
3707   type = TREE_TYPE (decl);
3708
3709   index = build_template_parm_index (TEMPLATE_PARM_IDX (i),
3710                                      TEMPLATE_PARM_LEVEL (i),
3711                                      TEMPLATE_PARM_ORIG_LEVEL (i),
3712                                      num_parms,
3713                                      decl, type);
3714
3715   TEMPLATE_PARM_DESCENDANTS (index) = TEMPLATE_PARM_DESCENDANTS (i);
3716   TEMPLATE_PARM_PARAMETER_PACK (index) = TEMPLATE_PARM_PARAMETER_PACK (i);
3717
3718   type = tsubst (type, args, tf_none, NULL_TREE);
3719   
3720   TREE_TYPE (decl) = type;
3721   TREE_TYPE (index) = type;
3722
3723   return index;
3724 }
3725
3726 /* 
3727    This is a subroutine of fixup_template_parms.
3728
3729    It computes the canonical type of the type of the template
3730    parameter PARM_DESC and update all references to that type so that
3731    they use the newly computed canonical type. No access check is
3732    performed during the fixup. PARM_DESC is a TREE_LIST which
3733    TREE_VALUE is the template parameter and its TREE_PURPOSE is the
3734    default argument of the template parm if any. IDX is the index of
3735    the template parameter, starting at 0. NUM_PARMS is the number of
3736    template parameters in the set PARM_DESC belongs to. ARGLIST is a
3737    TREE_VEC containing the full set of template parameters in a form
3738    suitable to be passed to substs functions as their ARGS
3739    argument. This is what current_template_args returns for a given
3740    template. The innermost vector of args in ARGLIST is the set of
3741    template parms that have been fixed up so far. This function adds
3742    the fixed up parameter into that vector.  */
3743
3744 static void
3745 fixup_template_parm (tree parm_desc,
3746                      int idx,
3747                      int num_parms,
3748                      tree arglist)
3749 {
3750   tree parm = TREE_VALUE (parm_desc);
3751   tree fixedup_args = INNERMOST_TEMPLATE_ARGS (arglist);
3752
3753   push_deferring_access_checks (dk_no_check);
3754
3755   if (TREE_CODE (parm) == TYPE_DECL)
3756     {
3757       /* PARM is a template type parameter. Fix up its type, add
3758          the fixed-up template parm to the vector of fixed-up
3759          template parms so far, and substitute the fixed-up
3760          template parms into the default argument of this
3761          parameter.  */
3762       tree t =
3763         fixup_template_type_parm_type (TREE_TYPE (parm), num_parms);
3764       TREE_TYPE (parm) = t;
3765
3766       TREE_VEC_ELT (fixedup_args, idx) = template_parm_to_arg (parm_desc);
3767     }
3768   else if (TREE_CODE (parm) == TEMPLATE_DECL)
3769     {
3770       /* PARM is a template template parameter. This is going to
3771          be interesting.  */
3772       tree tparms, targs, innermost_args, t;
3773       int j;
3774
3775       /* First, fix up the parms of the template template parm
3776          because the parms are involved in defining the new canonical
3777          type of the template template parm.  */
3778
3779       /* So we need to substitute the template parm types that have
3780          been fixed up so far into the template parms of this template
3781          template parm. E.g, consider this:
3782
3783          template<class T, template<T u> class TT> class S;
3784
3785          In this case we want to substitute T into the
3786          template parameters of TT.
3787
3788          So let's walk the template parms of PARM here, and
3789          tsubst ARGLIST into into each of the template
3790          parms.   */
3791
3792       /* For this substitution we need to build the full set of
3793          template parameters and use that as arguments for the
3794          tsubsting function.  */
3795       tparms = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (parm));
3796
3797       /* This will contain the innermost parms of PARM into which
3798          we have substituted so far.  */
3799       innermost_args = make_tree_vec (TREE_VEC_LENGTH (tparms));
3800       targs = add_to_template_args (arglist, innermost_args);
3801       for (j = 0; j < TREE_VEC_LENGTH (tparms); ++j)
3802         {
3803           tree parameter;
3804
3805           parameter = TREE_VEC_ELT (tparms, j);
3806
3807           /* INNERMOST_ARGS needs to have at least the same number
3808              of elements as the index PARAMETER, ortherwise
3809              tsubsting into PARAMETER will result in partially
3810              instantiating it, reducing its tempate parm
3811              level. Let's tactically fill INNERMOST_ARGS for that
3812              purpose.  */
3813           TREE_VEC_ELT (innermost_args, j) =
3814             template_parm_to_arg (parameter);
3815
3816           fixup_template_parm (parameter, j,
3817                                TREE_VEC_LENGTH (tparms),
3818                                targs);
3819         }
3820
3821       /* Now fix up the type of the template template parm.  */
3822
3823       t = fixup_template_type_parm_type (TREE_TYPE (parm), num_parms);
3824       TREE_TYPE (parm) = t;
3825
3826       TREE_VEC_ELT (fixedup_args, idx) =
3827         template_parm_to_arg (parm_desc);
3828     }
3829   else if (TREE_CODE (parm) == PARM_DECL)
3830     {
3831       /* PARM is a non-type template parameter. We need to:
3832
3833        * Fix up its TEMPLATE_PARM_INDEX to make it carry the
3834        proper number of sibling parameters.
3835
3836        * Make lookups of the template parameter return a reference
3837        to the fixed-up index. No lookup should return references
3838        to the former index anymore.
3839
3840        * Substitute the template parms that got fixed up so far
3841
3842        * into the type of PARM.  */
3843
3844       tree index = DECL_INITIAL (parm);
3845
3846       /* PUSHED_DECL is the decl added to the symbol table with
3847          the name of the parameter. E,g:
3848              
3849          template<class T, T u> //#0
3850          auto my_function(T t) -> decltype(u); //#1
3851
3852          Here, when looking up u at //#1, we get the decl of u
3853          resulting from the declaration in #0. This is what
3854          PUSHED_DECL is. We need to replace the reference to the
3855          old TEMPLATE_PARM_INDEX carried by PUSHED_DECL by the
3856          fixed-up TEMPLATE_PARM_INDEX.  */
3857       tree pushed_decl = TEMPLATE_PARM_DECL (index);
3858
3859       /* Let's fix up the TEMPLATE_PARM_INDEX then. Note that we must
3860          fixup the type of PUSHED_DECL as well and luckily
3861          fixup_template_parm_index does it for us too.  */
3862       tree fixed_up_index =
3863         fixup_template_parm_index (index, arglist, num_parms);
3864
3865       DECL_INITIAL (pushed_decl) = DECL_INITIAL (parm) = fixed_up_index;
3866
3867       /* Add this fixed up PARM to the template parms we've fixed
3868          up so far and use that to substitute the fixed-up
3869          template parms into the type of PARM.  */
3870       TREE_VEC_ELT (fixedup_args, idx) =
3871         template_parm_to_arg (parm_desc);
3872       TREE_TYPE (parm) = tsubst (TREE_TYPE (parm), arglist,
3873                                  tf_none, NULL_TREE);
3874     }
3875
3876   TREE_PURPOSE (parm_desc) =
3877     tsubst_template_arg (TREE_PURPOSE (parm_desc),
3878                          arglist, tf_none, parm);
3879
3880   pop_deferring_access_checks ();
3881 }
3882
3883 /* Walk the current template parms and properly compute the canonical
3884    types of the dependent types created during
3885    cp_parser_template_parameter_list.  */
3886
3887 void
3888 fixup_template_parms (void)
3889 {
3890   tree arglist;
3891   tree parameter_vec;
3892   tree fixedup_args;
3893   int i, num_parms;
3894
3895   parameter_vec = INNERMOST_TEMPLATE_PARMS (current_template_parms);
3896   if (parameter_vec == NULL_TREE)
3897     return;
3898
3899   num_parms = TREE_VEC_LENGTH (parameter_vec);
3900
3901   /* This vector contains the current innermost template parms that
3902      have been fixed up so far.  The form of FIXEDUP_ARGS is suitable
3903      to be passed to tsubst* functions as their ARGS argument.  */
3904   fixedup_args = make_tree_vec (num_parms);
3905
3906   /* This vector contains the full set of template parms in a form
3907      suitable to be passed to substs functions as their ARGS
3908      argument.  */
3909   arglist = current_template_args ();
3910   arglist = add_outermost_template_args (arglist, fixedup_args);
3911
3912   /* Let's do the proper fixup now.  */
3913   for (i = 0; i < num_parms; ++i)
3914     fixup_template_parm (TREE_VEC_ELT (parameter_vec, i),
3915                          i, num_parms, arglist);
3916 }
3917
3918 /* end_template_decl is called after a template declaration is seen.  */
3919
3920 void
3921 end_template_decl (void)
3922 {
3923   reset_specialization ();
3924
3925   if (! processing_template_decl)
3926     return;
3927
3928   /* This matches the pushlevel in begin_template_parm_list.  */
3929   finish_scope ();
3930
3931   --processing_template_decl;
3932   current_template_parms = TREE_CHAIN (current_template_parms);
3933 }
3934
3935 /* Takes a TREE_LIST representing a template parameter and convert it
3936    into an argument suitable to be passed to the type substitution
3937    functions.  Note that If the TREE_LIST contains an error_mark
3938    node, the returned argument is error_mark_node.  */
3939
3940 static tree
3941 template_parm_to_arg (tree t)
3942 {
3943
3944   if (t == NULL_TREE
3945       || TREE_CODE (t) != TREE_LIST)
3946     return t;
3947
3948   if (error_operand_p (TREE_VALUE (t)))
3949     return error_mark_node;
3950
3951   t = TREE_VALUE (t);
3952
3953   if (TREE_CODE (t) == TYPE_DECL
3954       || TREE_CODE (t) == TEMPLATE_DECL)
3955     {
3956       t = TREE_TYPE (t);
3957
3958       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
3959         {
3960           /* Turn this argument into a TYPE_ARGUMENT_PACK
3961              with a single element, which expands T.  */
3962           tree vec = make_tree_vec (1);
3963 #ifdef ENABLE_CHECKING
3964           SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT
3965             (vec, TREE_VEC_LENGTH (vec));
3966 #endif
3967           TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3968
3969           t = cxx_make_type (TYPE_ARGUMENT_PACK);
3970           SET_ARGUMENT_PACK_ARGS (t, vec);
3971         }
3972     }
3973   else
3974     {
3975       t = DECL_INITIAL (t);
3976
3977       if (TEMPLATE_PARM_PARAMETER_PACK (t))
3978         {
3979           /* Turn this argument into a NONTYPE_ARGUMENT_PACK
3980              with a single element, which expands T.  */
3981           tree vec = make_tree_vec (1);
3982           tree type = TREE_TYPE (TEMPLATE_PARM_DECL (t));
3983 #ifdef ENABLE_CHECKING
3984           SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT
3985             (vec, TREE_VEC_LENGTH (vec));
3986 #endif
3987           TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3988
3989           t  = make_node (NONTYPE_ARGUMENT_PACK);
3990           SET_ARGUMENT_PACK_ARGS (t, vec);
3991           TREE_TYPE (t) = type;
3992         }
3993     }
3994   return t;
3995 }
3996
3997 /* Within the declaration of a template, return all levels of template
3998    parameters that apply.  The template parameters are represented as
3999    a TREE_VEC, in the form documented in cp-tree.h for template
4000    arguments.  */
4001
4002 static tree
4003 current_template_args (void)
4004 {
4005   tree header;
4006   tree args = NULL_TREE;
4007   int length = TMPL_PARMS_DEPTH (current_template_parms);
4008   int l = length;
4009
4010   /* If there is only one level of template parameters, we do not
4011      create a TREE_VEC of TREE_VECs.  Instead, we return a single
4012      TREE_VEC containing the arguments.  */
4013   if (length > 1)
4014     args = make_tree_vec (length);
4015
4016   for (header = current_template_parms; header; header = TREE_CHAIN (header))
4017     {
4018       tree a = copy_node (TREE_VALUE (header));
4019       int i;
4020
4021       TREE_TYPE (a) = NULL_TREE;
4022       for (i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
4023         TREE_VEC_ELT (a, i) = template_parm_to_arg (TREE_VEC_ELT (a, i));
4024
4025 #ifdef ENABLE_CHECKING
4026       SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (a, TREE_VEC_LENGTH (a));
4027 #endif
4028
4029       if (length > 1)
4030         TREE_VEC_ELT (args, --l) = a;
4031       else
4032         args = a;
4033     }
4034
4035     if (length > 1 && TREE_VEC_ELT (args, 0) == NULL_TREE)
4036       /* This can happen for template parms of a template template
4037          parameter, e.g:
4038
4039          template<template<class T, class U> class TT> struct S;
4040
4041          Consider the level of the parms of TT; T and U both have
4042          level 2; TT has no template parm of level 1. So in this case
4043          the first element of full_template_args is NULL_TREE. If we
4044          leave it like this TMPL_ARG_DEPTH on args returns 1 instead
4045          of 2. This will make tsubst wrongly consider that T and U
4046          have level 1. Instead, let's create a dummy vector as the
4047          first element of full_template_args so that TMPL_ARG_DEPTH
4048          returns the correct depth for args.  */
4049       TREE_VEC_ELT (args, 0) = make_tree_vec (1);
4050   return args;
4051 }
4052
4053 /* Update the declared TYPE by doing any lookups which were thought to be
4054    dependent, but are not now that we know the SCOPE of the declarator.  */
4055
4056 tree
4057 maybe_update_decl_type (tree orig_type, tree scope)
4058 {
4059   tree type = orig_type;
4060
4061   if (type == NULL_TREE)
4062     return type;
4063
4064   if (TREE_CODE (orig_type) == TYPE_DECL)
4065     type = TREE_TYPE (type);
4066
4067   if (scope && TYPE_P (scope) && dependent_type_p (scope)
4068       && dependent_type_p (type)
4069       /* Don't bother building up the args in this case.  */
4070       && TREE_CODE (type) != TEMPLATE_TYPE_PARM)
4071     {
4072       /* tsubst in the args corresponding to the template parameters,
4073          including auto if present.  Most things will be unchanged, but
4074          make_typename_type and tsubst_qualified_id will resolve
4075          TYPENAME_TYPEs and SCOPE_REFs that were previously dependent.  */
4076       tree args = current_template_args ();
4077       tree auto_node = type_uses_auto (type);
4078       tree pushed;
4079       if (auto_node)
4080         {
4081           tree auto_vec = make_tree_vec (1);
4082           TREE_VEC_ELT (auto_vec, 0) = auto_node;
4083           args = add_to_template_args (args, auto_vec);
4084         }
4085       pushed = push_scope (scope);
4086       type = tsubst (type, args, tf_warning_or_error, NULL_TREE);
4087       if (pushed)
4088         pop_scope (scope);
4089     }
4090
4091   if (type == error_mark_node)
4092     return orig_type;
4093
4094   if (TREE_CODE (orig_type) == TYPE_DECL)
4095     {
4096       if (same_type_p (type, TREE_TYPE (orig_type)))
4097         type = orig_type;
4098       else
4099         type = TYPE_NAME (type);
4100     }
4101   return type;
4102 }
4103
4104 /* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
4105    template PARMS.  If MEMBER_TEMPLATE_P is true, the new template is
4106    a member template.  Used by push_template_decl below.  */
4107
4108 static tree
4109 build_template_decl (tree decl, tree parms, bool member_template_p)
4110 {
4111   tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
4112   DECL_TEMPLATE_PARMS (tmpl) = parms;
4113   DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
4114   DECL_MEMBER_TEMPLATE_P (tmpl) = member_template_p;
4115
4116   return tmpl;
4117 }
4118
4119 struct template_parm_data
4120 {
4121   /* The level of the template parameters we are currently
4122      processing.  */
4123   int level;
4124
4125   /* The index of the specialization argument we are currently
4126      processing.  */
4127   int current_arg;
4128
4129   /* An array whose size is the number of template parameters.  The
4130      elements are nonzero if the parameter has been used in any one
4131      of the arguments processed so far.  */
4132   int* parms;
4133
4134   /* An array whose size is the number of template arguments.  The
4135      elements are nonzero if the argument makes use of template
4136      parameters of this level.  */
4137   int* arg_uses_template_parms;
4138 };
4139
4140 /* Subroutine of push_template_decl used to see if each template
4141    parameter in a partial specialization is used in the explicit
4142    argument list.  If T is of the LEVEL given in DATA (which is
4143    treated as a template_parm_data*), then DATA->PARMS is marked
4144    appropriately.  */
4145
4146 static int
4147 mark_template_parm (tree t, void* data)
4148 {
4149   int level;
4150   int idx;
4151   struct template_parm_data* tpd = (struct template_parm_data*) data;
4152
4153   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
4154     {
4155       level = TEMPLATE_PARM_LEVEL (t);
4156       idx = TEMPLATE_PARM_IDX (t);
4157     }
4158   else
4159     {
4160       level = TEMPLATE_TYPE_LEVEL (t);
4161       idx = TEMPLATE_TYPE_IDX (t);
4162     }
4163
4164   if (level == tpd->level)
4165     {
4166       tpd->parms[idx] = 1;
4167       tpd->arg_uses_template_parms[tpd->current_arg] = 1;
4168     }
4169
4170   /* Return zero so that for_each_template_parm will continue the
4171      traversal of the tree; we want to mark *every* template parm.  */
4172   return 0;
4173 }
4174
4175 /* Process the partial specialization DECL.  */
4176
4177 static tree
4178 process_partial_specialization (tree decl)
4179 {
4180   tree type = TREE_TYPE (decl);
4181   tree maintmpl = CLASSTYPE_TI_TEMPLATE (type);
4182   tree specargs = CLASSTYPE_TI_ARGS (type);
4183   tree inner_args = INNERMOST_TEMPLATE_ARGS (specargs);
4184   tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
4185   tree inner_parms;
4186   tree inst;
4187   int nargs = TREE_VEC_LENGTH (inner_args);
4188   int ntparms;
4189   int  i;
4190   bool did_error_intro = false;
4191   struct template_parm_data tpd;
4192   struct template_parm_data tpd2;
4193
4194   gcc_assert (current_template_parms);
4195
4196   inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
4197   ntparms = TREE_VEC_LENGTH (inner_parms);
4198
4199   /* We check that each of the template parameters given in the
4200      partial specialization is used in the argument list to the
4201      specialization.  For example:
4202
4203        template <class T> struct S;
4204        template <class T> struct S<T*>;
4205
4206      The second declaration is OK because `T*' uses the template
4207      parameter T, whereas
4208
4209        template <class T> struct S<int>;
4210
4211      is no good.  Even trickier is:
4212
4213        template <class T>
4214        struct S1
4215        {
4216           template <class U>
4217           struct S2;
4218           template <class U>
4219           struct S2<T>;
4220        };
4221
4222      The S2<T> declaration is actually invalid; it is a
4223      full-specialization.  Of course,
4224
4225           template <class U>
4226           struct S2<T (*)(U)>;
4227
4228      or some such would have been OK.  */
4229   tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
4230   tpd.parms = XALLOCAVEC (int, ntparms);
4231   memset (tpd.parms, 0, sizeof (int) * ntparms);
4232
4233   tpd.arg_uses_template_parms = XALLOCAVEC (int, nargs);
4234   memset (tpd.arg_uses_template_parms, 0, sizeof (int) * nargs);
4235   for (i = 0; i < nargs; ++i)
4236     {
4237       tpd.current_arg = i;
4238       for_each_template_parm (TREE_VEC_ELT (inner_args, i),
4239                               &mark_template_parm,
4240                               &tpd,
4241                               NULL,
4242                               /*include_nondeduced_p=*/false);
4243     }
4244   for (i = 0; i < ntparms; ++i)
4245     if (tpd.parms[i] == 0)
4246       {
4247         /* One of the template parms was not used in the
4248            specialization.  */
4249         if (!did_error_intro)
4250           {
4251             error ("template parameters not used in partial specialization:");
4252             did_error_intro = true;
4253           }
4254
4255         error ("        %qD", TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
4256       }
4257
4258   if (did_error_intro)
4259     return error_mark_node;
4260
4261   /* [temp.class.spec]
4262
4263      The argument list of the specialization shall not be identical to
4264      the implicit argument list of the primary template.  */
4265   if (comp_template_args
4266       (inner_args,
4267        INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE
4268                                                    (maintmpl)))))
4269     error ("partial specialization %qT does not specialize any template arguments", type);
4270
4271   /* [temp.class.spec]
4272
4273      A partially specialized non-type argument expression shall not
4274      involve template parameters of the partial specialization except
4275      when the argument expression is a simple identifier.
4276
4277      The type of a template parameter corresponding to a specialized
4278      non-type argument shall not be dependent on a parameter of the
4279      specialization. 
4280
4281      Also, we verify that pack expansions only occur at the
4282      end of the argument list.  */
4283   gcc_assert (nargs == DECL_NTPARMS (maintmpl));
4284   tpd2.parms = 0;
4285   for (i = 0; i < nargs; ++i)
4286     {
4287       tree parm = TREE_VALUE (TREE_VEC_ELT (main_inner_parms, i));
4288       tree arg = TREE_VEC_ELT (inner_args, i);
4289       tree packed_args = NULL_TREE;
4290       int j, len = 1;
4291
4292       if (ARGUMENT_PACK_P (arg))
4293         {
4294           /* Extract the arguments from the argument pack. We'll be
4295              iterating over these in the following loop.  */
4296           packed_args = ARGUMENT_PACK_ARGS (arg);
4297           len = TREE_VEC_LENGTH (packed_args);
4298         }
4299
4300       for (j = 0; j < len; j++)
4301         {
4302           if (packed_args)
4303             /* Get the Jth argument in the parameter pack.  */
4304             arg = TREE_VEC_ELT (packed_args, j);
4305
4306           if (PACK_EXPANSION_P (arg))
4307             {
4308               /* Pack expansions must come at the end of the
4309                  argument list.  */
4310               if ((packed_args && j < len - 1)
4311                   || (!packed_args && i < nargs - 1))
4312                 {
4313                   if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
4314                     error ("parameter pack argument %qE must be at the "
4315                            "end of the template argument list", arg);
4316                   else
4317                     error ("parameter pack argument %qT must be at the "
4318                            "end of the template argument list", arg);
4319                 }
4320             }
4321
4322           if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
4323             /* We only care about the pattern.  */
4324             arg = PACK_EXPANSION_PATTERN (arg);
4325
4326           if (/* These first two lines are the `non-type' bit.  */
4327               !TYPE_P (arg)
4328               && TREE_CODE (arg) != TEMPLATE_DECL
4329               /* This next line is the `argument expression is not just a
4330                  simple identifier' condition and also the `specialized
4331                  non-type argument' bit.  */
4332               && TREE_CODE (arg) != TEMPLATE_PARM_INDEX)
4333             {
4334               if ((!packed_args && tpd.arg_uses_template_parms[i])
4335                   || (packed_args && uses_template_parms (arg)))
4336                 error ("template argument %qE involves template parameter(s)",
4337                        arg);
4338               else 
4339                 {
4340                   /* Look at the corresponding template parameter,
4341                      marking which template parameters its type depends
4342                      upon.  */
4343                   tree type = TREE_TYPE (parm);
4344
4345                   if (!tpd2.parms)
4346                     {
4347                       /* We haven't yet initialized TPD2.  Do so now.  */
4348                       tpd2.arg_uses_template_parms = XALLOCAVEC (int, nargs);
4349                       /* The number of parameters here is the number in the
4350                          main template, which, as checked in the assertion
4351                          above, is NARGS.  */
4352                       tpd2.parms = XALLOCAVEC (int, nargs);
4353                       tpd2.level = 
4354                         TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
4355                     }
4356
4357                   /* Mark the template parameters.  But this time, we're
4358                      looking for the template parameters of the main
4359                      template, not in the specialization.  */
4360                   tpd2.current_arg = i;
4361                   tpd2.arg_uses_template_parms[i] = 0;
4362                   memset (tpd2.parms, 0, sizeof (int) * nargs);
4363                   for_each_template_parm (type,
4364                                           &mark_template_parm,
4365                                           &tpd2,
4366                                           NULL,
4367                                           /*include_nondeduced_p=*/false);
4368
4369                   if (tpd2.arg_uses_template_parms [i])
4370                     {
4371                       /* The type depended on some template parameters.
4372                          If they are fully specialized in the
4373                          specialization, that's OK.  */
4374                       int j;
4375                       int count = 0;
4376                       for (j = 0; j < nargs; ++j)
4377                         if (tpd2.parms[j] != 0
4378                             && tpd.arg_uses_template_parms [j])
4379                           ++count;
4380                       if (count != 0)
4381                         error_n (input_location, count,
4382                                  "type %qT of template argument %qE depends "
4383                                  "on a template parameter",
4384                                  "type %qT of template argument %qE depends "
4385                                  "on template parameters",
4386                                  type,
4387                                  arg);
4388                     }
4389                 }
4390             }
4391         }
4392     }
4393
4394   /* We should only get here once.  */
4395   gcc_assert (!COMPLETE_TYPE_P (type));
4396
4397   DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
4398     = tree_cons (specargs, inner_parms,
4399                  DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
4400   TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
4401
4402   for (inst = DECL_TEMPLATE_INSTANTIATIONS (maintmpl); inst;
4403        inst = TREE_CHAIN (inst))
4404     {
4405       tree inst_type = TREE_VALUE (inst);
4406       if (COMPLETE_TYPE_P (inst_type)
4407           && CLASSTYPE_IMPLICIT_INSTANTIATION (inst_type))
4408         {
4409           tree spec = most_specialized_class (inst_type, maintmpl, tf_none);
4410           if (spec && TREE_TYPE (spec) == type)
4411             permerror (input_location,
4412                        "partial specialization of %qT after instantiation "
4413                        "of %qT", type, inst_type);
4414         }
4415     }
4416
4417   return decl;
4418 }
4419
4420 /* Check that a template declaration's use of default arguments and
4421    parameter packs is not invalid.  Here, PARMS are the template
4422    parameters.  IS_PRIMARY is nonzero if DECL is the thing declared by
4423    a primary template.  IS_PARTIAL is nonzero if DECL is a partial
4424    specialization.
4425    
4426
4427    IS_FRIEND_DECL is nonzero if DECL is a friend function template
4428    declaration (but not a definition); 1 indicates a declaration, 2
4429    indicates a redeclaration. When IS_FRIEND_DECL=2, no errors are
4430    emitted for extraneous default arguments.
4431
4432    Returns TRUE if there were no errors found, FALSE otherwise. */
4433
4434 bool
4435 check_default_tmpl_args (tree decl, tree parms, int is_primary, 
4436                          int is_partial, int is_friend_decl)
4437 {
4438   const char *msg;
4439   int last_level_to_check;
4440   tree parm_level;
4441   bool no_errors = true;
4442
4443   /* [temp.param]
4444
4445      A default template-argument shall not be specified in a
4446      function template declaration or a function template definition, nor
4447      in the template-parameter-list of the definition of a member of a
4448      class template.  */
4449
4450   if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
4451     /* You can't have a function template declaration in a local
4452        scope, nor you can you define a member of a class template in a
4453        local scope.  */
4454     return true;
4455
4456   if (current_class_type
4457       && !TYPE_BEING_DEFINED (current_class_type)
4458       && DECL_LANG_SPECIFIC (decl)
4459       && DECL_DECLARES_FUNCTION_P (decl)
4460       /* If this is either a friend defined in the scope of the class
4461          or a member function.  */
4462       && (DECL_FUNCTION_MEMBER_P (decl)
4463           ? same_type_p (DECL_CONTEXT (decl), current_class_type)
4464           : DECL_FRIEND_CONTEXT (decl)
4465           ? same_type_p (DECL_FRIEND_CONTEXT (decl), current_class_type)
4466           : false)
4467       /* And, if it was a member function, it really was defined in
4468          the scope of the class.  */
4469       && (!DECL_FUNCTION_MEMBER_P (decl)
4470           || DECL_INITIALIZED_IN_CLASS_P (decl)))
4471     /* We already checked these parameters when the template was
4472        declared, so there's no need to do it again now.  This function
4473        was defined in class scope, but we're processing it's body now
4474        that the class is complete.  */
4475     return true;
4476
4477   /* Core issue 226 (C++0x only): the following only applies to class
4478      templates.  */
4479   if ((cxx_dialect == cxx98) || TREE_CODE (decl) != FUNCTION_DECL)
4480     {
4481       /* [temp.param]
4482
4483          If a template-parameter has a default template-argument, all
4484          subsequent template-parameters shall have a default
4485          template-argument supplied.  */
4486       for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
4487         {
4488           tree inner_parms = TREE_VALUE (parm_level);
4489           int ntparms = TREE_VEC_LENGTH (inner_parms);
4490           int seen_def_arg_p = 0;
4491           int i;
4492
4493           for (i = 0; i < ntparms; ++i)
4494             {
4495               tree parm = TREE_VEC_ELT (inner_parms, i);
4496
4497               if (parm == error_mark_node)
4498                 continue;
4499
4500               if (TREE_PURPOSE (parm))
4501                 seen_def_arg_p = 1;
4502               else if (seen_def_arg_p
4503                        && !template_parameter_pack_p (TREE_VALUE (parm)))
4504                 {
4505                   error ("no default argument for %qD", TREE_VALUE (parm));
4506                   /* For better subsequent error-recovery, we indicate that
4507                      there should have been a default argument.  */
4508                   TREE_PURPOSE (parm) = error_mark_node;
4509                   no_errors = false;
4510                 }
4511               else if (is_primary
4512                        && !is_partial
4513                        && !is_friend_decl
4514                        /* Don't complain about an enclosing partial
4515                           specialization.  */
4516                        && parm_level == parms
4517                        && TREE_CODE (decl) == TYPE_DECL
4518                        && i < ntparms - 1
4519                        && template_parameter_pack_p (TREE_VALUE (parm)))
4520                 {
4521                   /* A primary class template can only have one
4522                      parameter pack, at the end of the template
4523                      parameter list.  */
4524
4525                   if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL)
4526                     error ("parameter pack %qE must be at the end of the"
4527                            " template parameter list", TREE_VALUE (parm));
4528                   else
4529                     error ("parameter pack %qT must be at the end of the"
4530                            " template parameter list", 
4531                            TREE_TYPE (TREE_VALUE (parm)));
4532
4533                   TREE_VALUE (TREE_VEC_ELT (inner_parms, i)) 
4534                     = error_mark_node;
4535                   no_errors = false;
4536                 }
4537             }
4538         }
4539     }
4540
4541   if (((cxx_dialect == cxx98) && TREE_CODE (decl) != TYPE_DECL)
4542       || is_partial 
4543       || !is_primary
4544       || is_friend_decl)
4545     /* For an ordinary class template, default template arguments are
4546        allowed at the innermost level, e.g.:
4547          template <class T = int>
4548          struct S {};
4549        but, in a partial specialization, they're not allowed even
4550        there, as we have in [temp.class.spec]:
4551
4552          The template parameter list of a specialization shall not
4553          contain default template argument values.
4554
4555        So, for a partial specialization, or for a function template
4556        (in C++98/C++03), we look at all of them.  */
4557     ;
4558   else
4559     /* But, for a primary class template that is not a partial
4560        specialization we look at all template parameters except the
4561        innermost ones.  */
4562     parms = TREE_CHAIN (parms);
4563
4564   /* Figure out what error message to issue.  */
4565   if (is_friend_decl == 2)
4566     msg = G_("default template arguments may not be used in function template "
4567              "friend re-declaration");
4568   else if (is_friend_decl)
4569     msg = G_("default template arguments may not be used in function template "
4570              "friend declarations");
4571   else if (TREE_CODE (decl) == FUNCTION_DECL && (cxx_dialect == cxx98))
4572     msg = G_("default template arguments may not be used in function templates "
4573              "without -std=c++0x or -std=gnu++0x");
4574   else if (is_partial)
4575     msg = G_("default template arguments may not be used in "
4576              "partial specializations");
4577   else
4578     msg = G_("default argument for template parameter for class enclosing %qD");
4579
4580   if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
4581     /* If we're inside a class definition, there's no need to
4582        examine the parameters to the class itself.  On the one
4583        hand, they will be checked when the class is defined, and,
4584        on the other, default arguments are valid in things like:
4585          template <class T = double>
4586          struct S { template <class U> void f(U); };
4587        Here the default argument for `S' has no bearing on the
4588        declaration of `f'.  */
4589     last_level_to_check = template_class_depth (current_class_type) + 1;
4590   else
4591     /* Check everything.  */
4592     last_level_to_check = 0;
4593
4594   for (parm_level = parms;
4595        parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check;
4596        parm_level = TREE_CHAIN (parm_level))
4597     {
4598       tree inner_parms = TREE_VALUE (parm_level);
4599       int i;
4600       int ntparms;
4601
4602       ntparms = TREE_VEC_LENGTH (inner_parms);
4603       for (i = 0; i < ntparms; ++i)
4604         {
4605           if (TREE_VEC_ELT (inner_parms, i) == error_mark_node)
4606             continue;
4607
4608           if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
4609             {
4610               if (msg)
4611                 {
4612                   no_errors = false;
4613                   if (is_friend_decl == 2)
4614                     return no_errors;
4615
4616                   error (msg, decl);
4617                   msg = 0;
4618                 }
4619
4620               /* Clear out the default argument so that we are not
4621                  confused later.  */
4622               TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
4623             }
4624         }
4625
4626       /* At this point, if we're still interested in issuing messages,
4627          they must apply to classes surrounding the object declared.  */
4628       if (msg)
4629         msg = G_("default argument for template parameter for class "
4630                  "enclosing %qD");
4631     }
4632
4633   return no_errors;
4634 }
4635
4636 /* Worker for push_template_decl_real, called via
4637    for_each_template_parm.  DATA is really an int, indicating the
4638    level of the parameters we are interested in.  If T is a template
4639    parameter of that level, return nonzero.  */
4640
4641 static int
4642 template_parm_this_level_p (tree t, void* data)
4643 {
4644   int this_level = *(int *)data;
4645   int level;
4646
4647   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
4648     level = TEMPLATE_PARM_LEVEL (t);
4649   else
4650     level = TEMPLATE_TYPE_LEVEL (t);
4651   return level == this_level;
4652 }
4653
4654 /* Creates a TEMPLATE_DECL for the indicated DECL using the template
4655    parameters given by current_template_args, or reuses a
4656    previously existing one, if appropriate.  Returns the DECL, or an
4657    equivalent one, if it is replaced via a call to duplicate_decls.
4658
4659    If IS_FRIEND is true, DECL is a friend declaration.  */
4660
4661 tree
4662 push_template_decl_real (tree decl, bool is_friend)
4663 {
4664   tree tmpl;
4665   tree args;
4666   tree info;
4667   tree ctx;
4668   int primary;
4669   int is_partial;
4670   int new_template_p = 0;
4671   /* True if the template is a member template, in the sense of
4672      [temp.mem].  */
4673   bool member_template_p = false;
4674
4675   if (decl == error_mark_node || !current_template_parms)
4676     return error_mark_node;
4677
4678   /* See if this is a partial specialization.  */
4679   is_partial = (DECL_IMPLICIT_TYPEDEF_P (decl)
4680                 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
4681                 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)));
4682
4683   if (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl))
4684     is_friend = true;
4685
4686   if (is_friend)
4687     /* For a friend, we want the context of the friend function, not
4688        the type of which it is a friend.  */
4689     ctx = CP_DECL_CONTEXT (decl);
4690   else if (CP_DECL_CONTEXT (decl)
4691            && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
4692     /* In the case of a virtual function, we want the class in which
4693        it is defined.  */
4694     ctx = CP_DECL_CONTEXT (decl);
4695   else
4696     /* Otherwise, if we're currently defining some class, the DECL
4697        is assumed to be a member of the class.  */
4698     ctx = current_scope ();
4699
4700   if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
4701     ctx = NULL_TREE;
4702
4703   if (!DECL_CONTEXT (decl))
4704     DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
4705
4706   /* See if this is a primary template.  */
4707   if (is_friend && ctx)
4708     /* A friend template that specifies a class context, i.e.
4709          template <typename T> friend void A<T>::f();
4710        is not primary.  */
4711     primary = 0;
4712   else
4713     primary = template_parm_scope_p ();
4714
4715   if (primary)
4716     {
4717       if (DECL_CLASS_SCOPE_P (decl))
4718         member_template_p = true;
4719       if (TREE_CODE (decl) == TYPE_DECL
4720           && ANON_AGGRNAME_P (DECL_NAME (decl)))
4721         {
4722           error ("template class without a name");
4723           return error_mark_node;
4724         }
4725       else if (TREE_CODE (decl) == FUNCTION_DECL)
4726         {
4727           if (DECL_DESTRUCTOR_P (decl))
4728             {
4729               /* [temp.mem]
4730
4731                  A destructor shall not be a member template.  */
4732               error ("destructor %qD declared as member template", decl);
4733               return error_mark_node;
4734             }
4735           if (NEW_DELETE_OPNAME_P (DECL_NAME (decl))
4736               && (!prototype_p (TREE_TYPE (decl))
4737                   || TYPE_ARG_TYPES (TREE_TYPE (decl)) == void_list_node
4738                   || !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
4739                   || (TREE_CHAIN (TYPE_ARG_TYPES ((TREE_TYPE (decl))))
4740                       == void_list_node)))
4741             {
4742               /* [basic.stc.dynamic.allocation]
4743
4744                  An allocation function can be a function
4745                  template. ... Template allocation functions shall
4746                  have two or more parameters.  */
4747               error ("invalid template declaration of %qD", decl);
4748               return error_mark_node;
4749             }
4750         }
4751       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
4752                && CLASS_TYPE_P (TREE_TYPE (decl)))
4753         /* OK */;
4754       else
4755         {
4756           error ("template declaration of %q#D", decl);
4757           return error_mark_node;
4758         }
4759     }
4760
4761   /* Check to see that the rules regarding the use of default
4762      arguments are not being violated.  */
4763   check_default_tmpl_args (decl, current_template_parms,
4764                            primary, is_partial, /*is_friend_decl=*/0);
4765
4766   /* Ensure that there are no parameter packs in the type of this
4767      declaration that have not been expanded.  */
4768   if (TREE_CODE (decl) == FUNCTION_DECL)
4769     {
4770       /* Check each of the arguments individually to see if there are
4771          any bare parameter packs.  */
4772       tree type = TREE_TYPE (decl);
4773       tree arg = DECL_ARGUMENTS (decl);
4774       tree argtype = TYPE_ARG_TYPES (type);
4775
4776       while (arg && argtype)
4777         {
4778           if (!FUNCTION_PARAMETER_PACK_P (arg)
4779               && check_for_bare_parameter_packs (TREE_TYPE (arg)))
4780             {
4781             /* This is a PARM_DECL that contains unexpanded parameter
4782                packs. We have already complained about this in the
4783                check_for_bare_parameter_packs call, so just replace
4784                these types with ERROR_MARK_NODE.  */
4785               TREE_TYPE (arg) = error_mark_node;
4786               TREE_VALUE (argtype) = error_mark_node;
4787             }
4788
4789           arg = DECL_CHAIN (arg);
4790           argtype = TREE_CHAIN (argtype);
4791         }
4792
4793       /* Check for bare parameter packs in the return type and the
4794          exception specifiers.  */
4795       if (check_for_bare_parameter_packs (TREE_TYPE (type)))
4796         /* Errors were already issued, set return type to int
4797            as the frontend doesn't expect error_mark_node as
4798            the return type.  */
4799         TREE_TYPE (type) = integer_type_node;
4800       if (check_for_bare_parameter_packs (TYPE_RAISES_EXCEPTIONS (type)))
4801         TYPE_RAISES_EXCEPTIONS (type) = NULL_TREE;
4802     }
4803   else if (check_for_bare_parameter_packs (TREE_TYPE (decl)))
4804     {
4805       TREE_TYPE (decl) = error_mark_node;
4806       return error_mark_node;
4807     }
4808
4809   if (is_partial)
4810     return process_partial_specialization (decl);
4811
4812   args = current_template_args ();
4813
4814   if (!ctx
4815       || TREE_CODE (ctx) == FUNCTION_DECL
4816       || (CLASS_TYPE_P (ctx) && TYPE_BEING_DEFINED (ctx))
4817       || (is_friend && !DECL_TEMPLATE_INFO (decl)))
4818     {
4819       if (DECL_LANG_SPECIFIC (decl)
4820           && DECL_TEMPLATE_INFO (decl)
4821           && DECL_TI_TEMPLATE (decl))
4822         tmpl = DECL_TI_TEMPLATE (decl);
4823       /* If DECL is a TYPE_DECL for a class-template, then there won't
4824          be DECL_LANG_SPECIFIC.  The information equivalent to
4825          DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead.  */
4826       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
4827                && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
4828                && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
4829         {
4830           /* Since a template declaration already existed for this
4831              class-type, we must be redeclaring it here.  Make sure
4832              that the redeclaration is valid.  */
4833           redeclare_class_template (TREE_TYPE (decl),
4834                                     current_template_parms);
4835           /* We don't need to create a new TEMPLATE_DECL; just use the
4836              one we already had.  */
4837           tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
4838         }
4839       else
4840         {
4841           tmpl = build_template_decl (decl, current_template_parms,
4842                                       member_template_p);
4843           new_template_p = 1;
4844
4845           if (DECL_LANG_SPECIFIC (decl)
4846               && DECL_TEMPLATE_SPECIALIZATION (decl))
4847             {
4848               /* A specialization of a member template of a template
4849                  class.  */
4850               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
4851               DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
4852               DECL_TEMPLATE_INFO (decl) = NULL_TREE;
4853             }
4854         }
4855     }
4856   else
4857     {
4858       tree a, t, current, parms;
4859       int i;
4860       tree tinfo = get_template_info (decl);
4861
4862       if (!tinfo)
4863         {
4864           error ("template definition of non-template %q#D", decl);
4865           return error_mark_node;
4866         }
4867
4868       tmpl = TI_TEMPLATE (tinfo);
4869
4870       if (DECL_FUNCTION_TEMPLATE_P (tmpl)
4871           && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
4872           && DECL_TEMPLATE_SPECIALIZATION (decl)
4873           && DECL_MEMBER_TEMPLATE_P (tmpl))
4874         {
4875           tree new_tmpl;
4876
4877           /* The declaration is a specialization of a member
4878              template, declared outside the class.  Therefore, the
4879              innermost template arguments will be NULL, so we
4880              replace them with the arguments determined by the
4881              earlier call to check_explicit_specialization.  */
4882           args = DECL_TI_ARGS (decl);
4883
4884           new_tmpl
4885             = build_template_decl (decl, current_template_parms,
4886                                    member_template_p);
4887           DECL_TEMPLATE_RESULT (new_tmpl) = decl;
4888           TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
4889           DECL_TI_TEMPLATE (decl) = new_tmpl;
4890           SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
4891           DECL_TEMPLATE_INFO (new_tmpl)
4892             = build_template_info (tmpl, args);
4893
4894           register_specialization (new_tmpl,
4895                                    most_general_template (tmpl),
4896                                    args,
4897                                    is_friend, 0);
4898           return decl;
4899         }
4900
4901       /* Make sure the template headers we got make sense.  */
4902
4903       parms = DECL_TEMPLATE_PARMS (tmpl);
4904       i = TMPL_PARMS_DEPTH (parms);
4905       if (TMPL_ARGS_DEPTH (args) != i)
4906         {
4907           error ("expected %d levels of template parms for %q#D, got %d",
4908                  i, decl, TMPL_ARGS_DEPTH (args));
4909         }
4910       else
4911         for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
4912           {
4913             a = TMPL_ARGS_LEVEL (args, i);
4914             t = INNERMOST_TEMPLATE_PARMS (parms);
4915
4916             if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
4917               {
4918                 if (current == decl)
4919                   error ("got %d template parameters for %q#D",
4920                          TREE_VEC_LENGTH (a), decl);
4921                 else
4922                   error ("got %d template parameters for %q#T",
4923                          TREE_VEC_LENGTH (a), current);
4924                 error ("  but %d required", TREE_VEC_LENGTH (t));
4925                 return error_mark_node;
4926               }
4927
4928             if (current == decl)
4929               current = ctx;
4930             else if (current == NULL_TREE)
4931               /* Can happen in erroneous input.  */
4932               break;
4933             else
4934               current = (TYPE_P (current)
4935                          ? TYPE_CONTEXT (current)
4936                          : DECL_CONTEXT (current));
4937           }
4938
4939       /* Check that the parms are used in the appropriate qualifying scopes
4940          in the declarator.  */
4941       if (!comp_template_args
4942           (TI_ARGS (tinfo),
4943            TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (tmpl)))))
4944         {
4945           error ("\
4946 template arguments to %qD do not match original template %qD",
4947                  decl, DECL_TEMPLATE_RESULT (tmpl));
4948           if (!uses_template_parms (TI_ARGS (tinfo)))
4949             inform (input_location, "use template<> for an explicit specialization");
4950           /* Avoid crash in import_export_decl.  */
4951           DECL_INTERFACE_KNOWN (decl) = 1;
4952           return error_mark_node;
4953         }
4954     }
4955
4956   DECL_TEMPLATE_RESULT (tmpl) = decl;
4957   TREE_TYPE (tmpl) = TREE_TYPE (decl);
4958
4959   /* Push template declarations for global functions and types.  Note
4960      that we do not try to push a global template friend declared in a
4961      template class; such a thing may well depend on the template
4962      parameters of the class.  */
4963   if (new_template_p && !ctx
4964       && !(is_friend && template_class_depth (current_class_type) > 0))
4965     {
4966       tmpl = pushdecl_namespace_level (tmpl, is_friend);
4967       if (tmpl == error_mark_node)
4968         return error_mark_node;
4969
4970       /* Hide template friend classes that haven't been declared yet.  */
4971       if (is_friend && TREE_CODE (decl) == TYPE_DECL)
4972         {
4973           DECL_ANTICIPATED (tmpl) = 1;
4974           DECL_FRIEND_P (tmpl) = 1;
4975         }
4976     }
4977
4978   if (primary)
4979     {
4980       tree parms = DECL_TEMPLATE_PARMS (tmpl);
4981       int i;
4982
4983       DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
4984       if (DECL_CONV_FN_P (tmpl))
4985         {
4986           int depth = TMPL_PARMS_DEPTH (parms);
4987
4988           /* It is a conversion operator. See if the type converted to
4989              depends on innermost template operands.  */
4990
4991           if (uses_template_parms_level (TREE_TYPE (TREE_TYPE (tmpl)),
4992                                          depth))
4993             DECL_TEMPLATE_CONV_FN_P (tmpl) = 1;
4994         }
4995
4996       /* Give template template parms a DECL_CONTEXT of the template
4997          for which they are a parameter.  */
4998       parms = INNERMOST_TEMPLATE_PARMS (parms);
4999       for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
5000         {
5001           tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
5002           if (TREE_CODE (parm) == TEMPLATE_DECL)
5003             DECL_CONTEXT (parm) = tmpl;
5004         }
5005     }
5006
5007   /* The DECL_TI_ARGS of DECL contains full set of arguments referring
5008      back to its most general template.  If TMPL is a specialization,
5009      ARGS may only have the innermost set of arguments.  Add the missing
5010      argument levels if necessary.  */
5011   if (DECL_TEMPLATE_INFO (tmpl))
5012     args = add_outermost_template_args (DECL_TI_ARGS (tmpl), args);
5013
5014   info = build_template_info (tmpl, args);
5015
5016   if (DECL_IMPLICIT_TYPEDEF_P (decl))
5017     SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
5018   else if (DECL_LANG_SPECIFIC (decl))
5019     DECL_TEMPLATE_INFO (decl) = info;
5020
5021   return DECL_TEMPLATE_RESULT (tmpl);
5022 }
5023
5024 tree
5025 push_template_decl (tree decl)
5026 {
5027   return push_template_decl_real (decl, false);
5028 }
5029
5030 /* Called when a class template TYPE is redeclared with the indicated
5031    template PARMS, e.g.:
5032
5033      template <class T> struct S;
5034      template <class T> struct S {};  */
5035
5036 bool
5037 redeclare_class_template (tree type, tree parms)
5038 {
5039   tree tmpl;
5040   tree tmpl_parms;
5041   int i;
5042
5043   if (!TYPE_TEMPLATE_INFO (type))
5044     {
5045       error ("%qT is not a template type", type);
5046       return false;
5047     }
5048
5049   tmpl = TYPE_TI_TEMPLATE (type);
5050   if (!PRIMARY_TEMPLATE_P (tmpl))
5051     /* The type is nested in some template class.  Nothing to worry
5052        about here; there are no new template parameters for the nested
5053        type.  */
5054     return true;
5055
5056   if (!parms)
5057     {
5058       error ("template specifiers not specified in declaration of %qD",
5059              tmpl);
5060       return false;
5061     }
5062
5063   parms = INNERMOST_TEMPLATE_PARMS (parms);
5064   tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
5065
5066   if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
5067     {
5068       error_n (input_location, TREE_VEC_LENGTH (parms),
5069                "redeclared with %d template parameter",
5070                "redeclared with %d template parameters",
5071                TREE_VEC_LENGTH (parms));
5072       inform_n (input_location, TREE_VEC_LENGTH (tmpl_parms),
5073                 "previous declaration %q+D used %d template parameter",
5074                 "previous declaration %q+D used %d template parameters",
5075                 tmpl, TREE_VEC_LENGTH (tmpl_parms));
5076       return false;
5077     }
5078
5079   for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
5080     {
5081       tree tmpl_parm;
5082       tree parm;
5083       tree tmpl_default;
5084       tree parm_default;
5085
5086       if (TREE_VEC_ELT (tmpl_parms, i) == error_mark_node
5087           || TREE_VEC_ELT (parms, i) == error_mark_node)
5088         continue;
5089
5090       tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
5091       if (tmpl_parm == error_mark_node)
5092         return false;
5093
5094       parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
5095       tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
5096       parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
5097
5098       /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
5099          TEMPLATE_DECL.  */
5100       if (TREE_CODE (tmpl_parm) != TREE_CODE (parm)
5101           || (TREE_CODE (tmpl_parm) != TYPE_DECL
5102               && !same_type_p (TREE_TYPE (tmpl_parm), TREE_TYPE (parm)))
5103           || (TREE_CODE (tmpl_parm) != PARM_DECL
5104               && (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (tmpl_parm))
5105                   != TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm))))
5106           || (TREE_CODE (tmpl_parm) == PARM_DECL
5107               && (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (tmpl_parm))
5108                   != TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))))
5109         {
5110           error ("template parameter %q+#D", tmpl_parm);
5111           error ("redeclared here as %q#D", parm);
5112           return false;
5113         }
5114
5115       if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
5116         {
5117           /* We have in [temp.param]:
5118
5119              A template-parameter may not be given default arguments
5120              by two different declarations in the same scope.  */
5121           error_at (input_location, "redefinition of default argument for %q#D", parm);
5122           inform (DECL_SOURCE_LOCATION (tmpl_parm),
5123                   "original definition appeared here");
5124           return false;
5125         }
5126
5127       if (parm_default != NULL_TREE)
5128         /* Update the previous template parameters (which are the ones
5129            that will really count) with the new default value.  */
5130         TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
5131       else if (tmpl_default != NULL_TREE)
5132         /* Update the new parameters, too; they'll be used as the
5133            parameters for any members.  */
5134         TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
5135     }
5136
5137     return true;
5138 }
5139
5140 /* Simplify EXPR if it is a non-dependent expression.  Returns the
5141    (possibly simplified) expression.  */
5142
5143 static tree
5144 fold_non_dependent_expr_sfinae (tree expr, tsubst_flags_t complain)
5145 {
5146   if (expr == NULL_TREE)
5147     return NULL_TREE;
5148
5149   /* If we're in a template, but EXPR isn't value dependent, simplify
5150      it.  We're supposed to treat:
5151
5152        template <typename T> void f(T[1 + 1]);
5153        template <typename T> void f(T[2]);
5154
5155      as two declarations of the same function, for example.  */
5156   if (processing_template_decl
5157       && !type_dependent_expression_p (expr)
5158       && potential_constant_expression (expr)
5159       && !value_dependent_expression_p (expr))
5160     {
5161       HOST_WIDE_INT saved_processing_template_decl;
5162
5163       saved_processing_template_decl = processing_template_decl;
5164       processing_template_decl = 0;
5165       expr = tsubst_copy_and_build (expr,
5166                                     /*args=*/NULL_TREE,
5167                                     complain,
5168                                     /*in_decl=*/NULL_TREE,
5169                                     /*function_p=*/false,
5170                                     /*integral_constant_expression_p=*/true);
5171       processing_template_decl = saved_processing_template_decl;
5172     }
5173   return expr;
5174 }
5175
5176 tree
5177 fold_non_dependent_expr (tree expr)
5178 {
5179   return fold_non_dependent_expr_sfinae (expr, tf_error);
5180 }
5181
5182 /* Subroutine of convert_nontype_argument. Converts EXPR to TYPE, which
5183    must be a function or a pointer-to-function type, as specified
5184    in [temp.arg.nontype]: disambiguate EXPR if it is an overload set,
5185    and check that the resulting function has external linkage.  */
5186
5187 static tree
5188 convert_nontype_argument_function (tree type, tree expr)
5189 {
5190   tree fns = expr;
5191   tree fn, fn_no_ptr;
5192
5193   fn = instantiate_type (type, fns, tf_none);
5194   if (fn == error_mark_node)
5195     return error_mark_node;
5196
5197   fn_no_ptr = fn;
5198   if (TREE_CODE (fn_no_ptr) == ADDR_EXPR)
5199     fn_no_ptr = TREE_OPERAND (fn_no_ptr, 0);
5200   if (TREE_CODE (fn_no_ptr) == BASELINK)
5201     fn_no_ptr = BASELINK_FUNCTIONS (fn_no_ptr);
5202  
5203   /* [temp.arg.nontype]/1
5204
5205      A template-argument for a non-type, non-template template-parameter
5206      shall be one of:
5207      [...]
5208      -- the address of an object or function with external linkage.  */
5209   if (!DECL_EXTERNAL_LINKAGE_P (fn_no_ptr))
5210     {
5211       error ("%qE is not a valid template argument for type %qT "
5212              "because function %qD has not external linkage",
5213              expr, type, fn_no_ptr);
5214       return NULL_TREE;
5215     }
5216
5217   return fn;
5218 }
5219
5220 /* Subroutine of convert_nontype_argument.
5221    Check if EXPR of type TYPE is a valid pointer-to-member constant.
5222    Emit an error otherwise.  */
5223
5224 static bool
5225 check_valid_ptrmem_cst_expr (tree type, tree expr,
5226                              tsubst_flags_t complain)
5227 {
5228   STRIP_NOPS (expr);
5229   if (expr && (null_ptr_cst_p (expr) || TREE_CODE (expr) == PTRMEM_CST))
5230     return true;
5231   if (complain & tf_error)
5232     {
5233       error ("%qE is not a valid template argument for type %qT",
5234              expr, type);
5235       error ("it must be a pointer-to-member of the form %<&X::Y%>");
5236     }
5237   return false;
5238 }
5239
5240 /* Returns TRUE iff the address of OP is value-dependent.
5241
5242    14.6.2.4 [temp.dep.temp]:
5243    A non-integral non-type template-argument is dependent if its type is
5244    dependent or it has either of the following forms
5245      qualified-id
5246      & qualified-id
5247    and contains a nested-name-specifier which specifies a class-name that
5248    names a dependent type.
5249
5250    We generalize this to just say that the address of a member of a
5251    dependent class is value-dependent; the above doesn't cover the
5252    address of a static data member named with an unqualified-id.  */
5253
5254 static bool
5255 has_value_dependent_address (tree op)
5256 {
5257   /* We could use get_inner_reference here, but there's no need;
5258      this is only relevant for template non-type arguments, which
5259      can only be expressed as &id-expression.  */
5260   if (DECL_P (op))
5261     {
5262       tree ctx = CP_DECL_CONTEXT (op);
5263       if (TYPE_P (ctx) && dependent_type_p (ctx))
5264         return true;
5265     }
5266
5267   return false;
5268 }
5269
5270 /* Attempt to convert the non-type template parameter EXPR to the
5271    indicated TYPE.  If the conversion is successful, return the
5272    converted value.  If the conversion is unsuccessful, return
5273    NULL_TREE if we issued an error message, or error_mark_node if we
5274    did not.  We issue error messages for out-and-out bad template
5275    parameters, but not simply because the conversion failed, since we
5276    might be just trying to do argument deduction.  Both TYPE and EXPR
5277    must be non-dependent.
5278
5279    The conversion follows the special rules described in
5280    [temp.arg.nontype], and it is much more strict than an implicit
5281    conversion.
5282
5283    This function is called twice for each template argument (see
5284    lookup_template_class for a more accurate description of this
5285    problem). This means that we need to handle expressions which
5286    are not valid in a C++ source, but can be created from the
5287    first call (for instance, casts to perform conversions). These
5288    hacks can go away after we fix the double coercion problem.  */
5289
5290 static tree
5291 convert_nontype_argument (tree type, tree expr, tsubst_flags_t complain)
5292 {
5293   tree expr_type;
5294
5295   /* Detect immediately string literals as invalid non-type argument.
5296      This special-case is not needed for correctness (we would easily
5297      catch this later), but only to provide better diagnostic for this
5298      common user mistake. As suggested by DR 100, we do not mention
5299      linkage issues in the diagnostic as this is not the point.  */
5300   /* FIXME we're making this OK.  */
5301   if (TREE_CODE (expr) == STRING_CST)
5302     {
5303       if (complain & tf_error)
5304         error ("%qE is not a valid template argument for type %qT "
5305                "because string literals can never be used in this context",
5306                expr, type);
5307       return NULL_TREE;
5308     }
5309
5310   /* Add the ADDR_EXPR now for the benefit of
5311      value_dependent_expression_p.  */
5312   if (TYPE_PTROBV_P (type)
5313       && TREE_CODE (TREE_TYPE (expr)) == ARRAY_TYPE)
5314     expr = decay_conversion (expr);
5315
5316   /* If we are in a template, EXPR may be non-dependent, but still
5317      have a syntactic, rather than semantic, form.  For example, EXPR
5318      might be a SCOPE_REF, rather than the VAR_DECL to which the
5319      SCOPE_REF refers.  Preserving the qualifying scope is necessary
5320      so that access checking can be performed when the template is
5321      instantiated -- but here we need the resolved form so that we can
5322      convert the argument.  */
5323   if (TYPE_REF_OBJ_P (type)
5324       && has_value_dependent_address (expr))
5325     /* If we want the address and it's value-dependent, don't fold.  */;
5326   else if (!type_unknown_p (expr))
5327     expr = fold_non_dependent_expr_sfinae (expr, complain);
5328   if (error_operand_p (expr))
5329     return error_mark_node;
5330   expr_type = TREE_TYPE (expr);
5331   if (TREE_CODE (type) == REFERENCE_TYPE)
5332     expr = mark_lvalue_use (expr);
5333   else
5334     expr = mark_rvalue_use (expr);
5335
5336   /* HACK: Due to double coercion, we can get a
5337      NOP_EXPR<REFERENCE_TYPE>(ADDR_EXPR<POINTER_TYPE> (arg)) here,
5338      which is the tree that we built on the first call (see
5339      below when coercing to reference to object or to reference to
5340      function). We just strip everything and get to the arg.
5341      See g++.old-deja/g++.oliva/template4.C and g++.dg/template/nontype9.C
5342      for examples.  */
5343   if (TREE_CODE (expr) == NOP_EXPR)
5344     {
5345       if (TYPE_REF_OBJ_P (type) || TYPE_REFFN_P (type))
5346         {
5347           /* ??? Maybe we could use convert_from_reference here, but we
5348              would need to relax its constraints because the NOP_EXPR
5349              could actually change the type to something more cv-qualified,
5350              and this is not folded by convert_from_reference.  */
5351           tree addr = TREE_OPERAND (expr, 0);
5352           gcc_assert (TREE_CODE (expr_type) == REFERENCE_TYPE);
5353           gcc_assert (TREE_CODE (addr) == ADDR_EXPR);
5354           gcc_assert (TREE_CODE (TREE_TYPE (addr)) == POINTER_TYPE);
5355           gcc_assert (same_type_ignoring_top_level_qualifiers_p
5356                       (TREE_TYPE (expr_type),
5357                        TREE_TYPE (TREE_TYPE (addr))));
5358
5359           expr = TREE_OPERAND (addr, 0);
5360           expr_type = TREE_TYPE (expr);
5361         }
5362
5363       /* We could also generate a NOP_EXPR(ADDR_EXPR()) when the
5364          parameter is a pointer to object, through decay and
5365          qualification conversion. Let's strip everything.  */
5366       else if (TYPE_PTROBV_P (type))
5367         {
5368           STRIP_NOPS (expr);
5369           gcc_assert (TREE_CODE (expr) == ADDR_EXPR);
5370           gcc_assert (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE);
5371           /* Skip the ADDR_EXPR only if it is part of the decay for
5372              an array. Otherwise, it is part of the original argument
5373              in the source code.  */
5374           if (TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == ARRAY_TYPE)
5375             expr = TREE_OPERAND (expr, 0);
5376           expr_type = TREE_TYPE (expr);
5377         }
5378     }
5379
5380   /* [temp.arg.nontype]/5, bullet 1
5381
5382      For a non-type template-parameter of integral or enumeration type,
5383      integral promotions (_conv.prom_) and integral conversions
5384      (_conv.integral_) are applied.  */
5385   if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
5386     {
5387       tree t = build_integral_nontype_arg_conv (type, expr, complain);
5388       t = maybe_constant_value (t);
5389       if (t != error_mark_node)
5390         expr = t;
5391
5392       if (!same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (expr)))
5393         return error_mark_node;
5394
5395       /* Notice that there are constant expressions like '4 % 0' which
5396          do not fold into integer constants.  */
5397       if (TREE_CODE (expr) != INTEGER_CST)
5398         {
5399           if (complain & tf_error)
5400             {
5401               int errs = errorcount, warns = warningcount;
5402               expr = cxx_constant_value (expr);
5403               if (errorcount > errs || warningcount > warns)
5404                 inform (EXPR_LOC_OR_HERE (expr),
5405                         "in template argument for type %qT ", type);
5406               if (expr == error_mark_node)
5407                 return NULL_TREE;
5408               /* else cxx_constant_value complained but gave us
5409                  a real constant, so go ahead.  */
5410               gcc_assert (TREE_CODE (expr) == INTEGER_CST);
5411             }
5412           else
5413             return NULL_TREE;
5414         }
5415     }
5416   /* [temp.arg.nontype]/5, bullet 2
5417
5418      For a non-type template-parameter of type pointer to object,
5419      qualification conversions (_conv.qual_) and the array-to-pointer
5420      conversion (_conv.array_) are applied.  */
5421   else if (TYPE_PTROBV_P (type))
5422     {
5423       /* [temp.arg.nontype]/1  (TC1 version, DR 49):
5424
5425          A template-argument for a non-type, non-template template-parameter
5426          shall be one of: [...]
5427
5428          -- the name of a non-type template-parameter;
5429          -- the address of an object or function with external linkage, [...]
5430             expressed as "& id-expression" where the & is optional if the name
5431             refers to a function or array, or if the corresponding
5432             template-parameter is a reference.
5433
5434         Here, we do not care about functions, as they are invalid anyway
5435         for a parameter of type pointer-to-object.  */
5436
5437       if (DECL_P (expr) && DECL_TEMPLATE_PARM_P (expr))
5438         /* Non-type template parameters are OK.  */
5439         ;
5440       else if (TREE_CODE (expr) != ADDR_EXPR
5441                && TREE_CODE (expr_type) != ARRAY_TYPE)
5442         {
5443           if (TREE_CODE (expr) == VAR_DECL)
5444             {
5445               error ("%qD is not a valid template argument "
5446                      "because %qD is a variable, not the address of "
5447                      "a variable",
5448                      expr, expr);
5449               return NULL_TREE;
5450             }
5451           /* Other values, like integer constants, might be valid
5452              non-type arguments of some other type.  */
5453           return error_mark_node;
5454         }
5455       else
5456         {
5457           tree decl;
5458
5459           decl = ((TREE_CODE (expr) == ADDR_EXPR)
5460                   ? TREE_OPERAND (expr, 0) : expr);
5461           if (TREE_CODE (decl) != VAR_DECL)
5462             {
5463               error ("%qE is not a valid template argument of type %qT "
5464                      "because %qE is not a variable",
5465                      expr, type, decl);
5466               return NULL_TREE;
5467             }
5468           else if (!DECL_EXTERNAL_LINKAGE_P (decl))
5469             {
5470               error ("%qE is not a valid template argument of type %qT "
5471                      "because %qD does not have external linkage",
5472                      expr, type, decl);
5473               return NULL_TREE;
5474             }
5475         }
5476
5477       expr = decay_conversion (expr);
5478       if (expr == error_mark_node)
5479         return error_mark_node;
5480
5481       expr = perform_qualification_conversions (type, expr);
5482       if (expr == error_mark_node)
5483         return error_mark_node;
5484     }
5485   /* [temp.arg.nontype]/5, bullet 3
5486
5487      For a non-type template-parameter of type reference to object, no
5488      conversions apply. The type referred to by the reference may be more
5489      cv-qualified than the (otherwise identical) type of the
5490      template-argument. The template-parameter is bound directly to the
5491      template-argument, which must be an lvalue.  */
5492   else if (TYPE_REF_OBJ_P (type))
5493     {
5494       if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type),
5495                                                       expr_type))
5496         return error_mark_node;
5497
5498       if (!at_least_as_qualified_p (TREE_TYPE (type), expr_type))
5499         {
5500           error ("%qE is not a valid template argument for type %qT "
5501                  "because of conflicts in cv-qualification", expr, type);
5502           return NULL_TREE;
5503         }
5504
5505       if (!real_lvalue_p (expr))
5506         {
5507           error ("%qE is not a valid template argument for type %qT "
5508                  "because it is not an lvalue", expr, type);
5509           return NULL_TREE;
5510         }
5511
5512       /* [temp.arg.nontype]/1
5513
5514          A template-argument for a non-type, non-template template-parameter
5515          shall be one of: [...]
5516
5517          -- the address of an object or function with external linkage.  */
5518       if (TREE_CODE (expr) == INDIRECT_REF
5519           && TYPE_REF_OBJ_P (TREE_TYPE (TREE_OPERAND (expr, 0))))
5520         {
5521           expr = TREE_OPERAND (expr, 0);
5522           if (DECL_P (expr))
5523             {
5524               error ("%q#D is not a valid template argument for type %qT "
5525                      "because a reference variable does not have a constant "
5526                      "address", expr, type);
5527               return NULL_TREE;
5528             }
5529         }
5530
5531       if (!DECL_P (expr))
5532         {
5533           error ("%qE is not a valid template argument for type %qT "
5534                  "because it is not an object with external linkage",
5535                  expr, type);
5536           return NULL_TREE;
5537         }
5538
5539       if (!DECL_EXTERNAL_LINKAGE_P (expr))
5540         {
5541           error ("%qE is not a valid template argument for type %qT "
5542                  "because object %qD has not external linkage",
5543                  expr, type, expr);
5544           return NULL_TREE;
5545         }
5546
5547       expr = build_nop (type, build_address (expr));
5548     }
5549   /* [temp.arg.nontype]/5, bullet 4
5550
5551      For a non-type template-parameter of type pointer to function, only
5552      the function-to-pointer conversion (_conv.func_) is applied. If the
5553      template-argument represents a set of overloaded functions (or a
5554      pointer to such), the matching function is selected from the set
5555      (_over.over_).  */
5556   else if (TYPE_PTRFN_P (type))
5557     {
5558       /* If the argument is a template-id, we might not have enough
5559          context information to decay the pointer.  */
5560       if (!type_unknown_p (expr_type))
5561         {
5562           expr = decay_conversion (expr);
5563           if (expr == error_mark_node)
5564             return error_mark_node;
5565         }
5566
5567       expr = convert_nontype_argument_function (type, expr);
5568       if (!expr || expr == error_mark_node)
5569         return expr;
5570
5571       if (TREE_CODE (expr) != ADDR_EXPR)
5572         {
5573           error ("%qE is not a valid template argument for type %qT", expr, type);
5574           error ("it must be the address of a function with external linkage");
5575           return NULL_TREE;
5576         }
5577     }
5578   /* [temp.arg.nontype]/5, bullet 5
5579
5580      For a non-type template-parameter of type reference to function, no
5581      conversions apply. If the template-argument represents a set of
5582      overloaded functions, the matching function is selected from the set
5583      (_over.over_).  */
5584   else if (TYPE_REFFN_P (type))
5585     {
5586       if (TREE_CODE (expr) == ADDR_EXPR)
5587         {
5588           error ("%qE is not a valid template argument for type %qT "
5589                  "because it is a pointer", expr, type);
5590           inform (input_location, "try using %qE instead", TREE_OPERAND (expr, 0));
5591           return NULL_TREE;
5592         }
5593
5594       expr = convert_nontype_argument_function (TREE_TYPE (type), expr);
5595       if (!expr || expr == error_mark_node)
5596         return expr;
5597
5598       expr = build_nop (type, build_address (expr));
5599     }
5600   /* [temp.arg.nontype]/5, bullet 6
5601
5602      For a non-type template-parameter of type pointer to member function,
5603      no conversions apply. If the template-argument represents a set of
5604      overloaded member functions, the matching member function is selected
5605      from the set (_over.over_).  */
5606   else if (TYPE_PTRMEMFUNC_P (type))
5607     {
5608       expr = instantiate_type (type, expr, tf_none);
5609       if (expr == error_mark_node)
5610         return error_mark_node;
5611
5612       /* [temp.arg.nontype] bullet 1 says the pointer to member
5613          expression must be a pointer-to-member constant.  */
5614       if (!check_valid_ptrmem_cst_expr (type, expr, complain))
5615         return error_mark_node;
5616
5617       /* There is no way to disable standard conversions in
5618          resolve_address_of_overloaded_function (called by
5619          instantiate_type). It is possible that the call succeeded by
5620          converting &B::I to &D::I (where B is a base of D), so we need
5621          to reject this conversion here.
5622
5623          Actually, even if there was a way to disable standard conversions,
5624          it would still be better to reject them here so that we can
5625          provide a superior diagnostic.  */
5626       if (!same_type_p (TREE_TYPE (expr), type))
5627         {
5628           error ("%qE is not a valid template argument for type %qT "
5629                  "because it is of type %qT", expr, type,
5630                  TREE_TYPE (expr));
5631           /* If we are just one standard conversion off, explain.  */
5632           if (can_convert (type, TREE_TYPE (expr)))
5633             inform (input_location,
5634                     "standard conversions are not allowed in this context");
5635           return NULL_TREE;
5636         }
5637     }
5638   /* [temp.arg.nontype]/5, bullet 7
5639
5640      For a non-type template-parameter of type pointer to data member,
5641      qualification conversions (_conv.qual_) are applied.  */
5642   else if (TYPE_PTRMEM_P (type))
5643     {
5644       /* [temp.arg.nontype] bullet 1 says the pointer to member
5645          expression must be a pointer-to-member constant.  */
5646       if (!check_valid_ptrmem_cst_expr (type, expr, complain))
5647         return error_mark_node;
5648
5649       expr = perform_qualification_conversions (type, expr);
5650       if (expr == error_mark_node)
5651         return expr;
5652     }
5653   /* A template non-type parameter must be one of the above.  */
5654   else
5655     gcc_unreachable ();
5656
5657   /* Sanity check: did we actually convert the argument to the
5658      right type?  */
5659   gcc_assert (same_type_ignoring_top_level_qualifiers_p
5660               (type, TREE_TYPE (expr)));
5661   return expr;
5662 }
5663
5664 /* Subroutine of coerce_template_template_parms, which returns 1 if
5665    PARM_PARM and ARG_PARM match using the rule for the template
5666    parameters of template template parameters. Both PARM and ARG are
5667    template parameters; the rest of the arguments are the same as for
5668    coerce_template_template_parms.
5669  */
5670 static int
5671 coerce_template_template_parm (tree parm,
5672                               tree arg,
5673                               tsubst_flags_t complain,
5674                               tree in_decl,
5675                               tree outer_args)
5676 {
5677   if (arg == NULL_TREE || arg == error_mark_node
5678       || parm == NULL_TREE || parm == error_mark_node)
5679     return 0;
5680   
5681   if (TREE_CODE (arg) != TREE_CODE (parm))
5682     return 0;
5683   
5684   switch (TREE_CODE (parm))
5685     {
5686     case TEMPLATE_DECL:
5687       /* We encounter instantiations of templates like
5688          template <template <template <class> class> class TT>
5689          class C;  */
5690       {
5691         tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
5692         tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
5693         
5694         if (!coerce_template_template_parms
5695             (parmparm, argparm, complain, in_decl, outer_args))
5696           return 0;
5697       }
5698       /* Fall through.  */
5699       
5700     case TYPE_DECL:
5701       if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (arg))
5702           && !TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
5703         /* Argument is a parameter pack but parameter is not.  */
5704         return 0;
5705       break;
5706       
5707     case PARM_DECL:
5708       /* The tsubst call is used to handle cases such as
5709          
5710            template <int> class C {};
5711            template <class T, template <T> class TT> class D {};
5712            D<int, C> d;
5713
5714          i.e. the parameter list of TT depends on earlier parameters.  */
5715       if (!uses_template_parms (TREE_TYPE (arg))
5716           && !same_type_p
5717                 (tsubst (TREE_TYPE (parm), outer_args, complain, in_decl),
5718                  TREE_TYPE (arg)))
5719         return 0;
5720       
5721       if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (arg))
5722           && !TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
5723         /* Argument is a parameter pack but parameter is not.  */
5724         return 0;
5725       
5726       break;
5727
5728     default:
5729       gcc_unreachable ();
5730     }
5731
5732   return 1;
5733 }
5734
5735
5736 /* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
5737    template template parameters.  Both PARM_PARMS and ARG_PARMS are
5738    vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
5739    or PARM_DECL.
5740
5741    Consider the example:
5742      template <class T> class A;
5743      template<template <class U> class TT> class B;
5744
5745    For B<A>, PARM_PARMS are the parameters to TT, while ARG_PARMS are
5746    the parameters to A, and OUTER_ARGS contains A.  */
5747
5748 static int
5749 coerce_template_template_parms (tree parm_parms,
5750                                 tree arg_parms,
5751                                 tsubst_flags_t complain,
5752                                 tree in_decl,
5753                                 tree outer_args)
5754 {
5755   int nparms, nargs, i;
5756   tree parm, arg;
5757   int variadic_p = 0;
5758
5759   gcc_assert (TREE_CODE (parm_parms) == TREE_VEC);
5760   gcc_assert (TREE_CODE (arg_parms) == TREE_VEC);
5761
5762   nparms = TREE_VEC_LENGTH (parm_parms);
5763   nargs = TREE_VEC_LENGTH (arg_parms);
5764
5765   /* Determine whether we have a parameter pack at the end of the
5766      template template parameter's template parameter list.  */
5767   if (TREE_VEC_ELT (parm_parms, nparms - 1) != error_mark_node)
5768     {
5769       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, nparms - 1));
5770       
5771       if (parm == error_mark_node)
5772         return 0;
5773
5774       switch (TREE_CODE (parm))
5775         {
5776         case TEMPLATE_DECL:
5777         case TYPE_DECL:
5778           if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
5779             variadic_p = 1;
5780           break;
5781           
5782         case PARM_DECL:
5783           if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
5784             variadic_p = 1;
5785           break;
5786           
5787         default:
5788           gcc_unreachable ();
5789         }
5790     }
5791  
5792   if (nargs != nparms
5793       && !(variadic_p && nargs >= nparms - 1))
5794     return 0;
5795
5796   /* Check all of the template parameters except the parameter pack at
5797      the end (if any).  */
5798   for (i = 0; i < nparms - variadic_p; ++i)
5799     {
5800       if (TREE_VEC_ELT (parm_parms, i) == error_mark_node
5801           || TREE_VEC_ELT (arg_parms, i) == error_mark_node)
5802         continue;
5803
5804       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
5805       arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
5806
5807       if (!coerce_template_template_parm (parm, arg, complain, in_decl,
5808                                           outer_args))
5809         return 0;
5810
5811     }
5812
5813   if (variadic_p)
5814     {
5815       /* Check each of the template parameters in the template
5816          argument against the template parameter pack at the end of
5817          the template template parameter.  */
5818       if (TREE_VEC_ELT (parm_parms, i) == error_mark_node)
5819         return 0;
5820
5821       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
5822
5823       for (; i < nargs; ++i)
5824         {
5825           if (TREE_VEC_ELT (arg_parms, i) == error_mark_node)
5826             continue;
5827  
5828           arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
5829  
5830           if (!coerce_template_template_parm (parm, arg, complain, in_decl,
5831                                               outer_args))
5832             return 0;
5833         }
5834     }
5835
5836   return 1;
5837 }
5838
5839 /* Verifies that the deduced template arguments (in TARGS) for the
5840    template template parameters (in TPARMS) represent valid bindings,
5841    by comparing the template parameter list of each template argument
5842    to the template parameter list of its corresponding template
5843    template parameter, in accordance with DR150. This
5844    routine can only be called after all template arguments have been
5845    deduced. It will return TRUE if all of the template template
5846    parameter bindings are okay, FALSE otherwise.  */
5847 bool 
5848 template_template_parm_bindings_ok_p (tree tparms, tree targs)
5849 {
5850   int i, ntparms = TREE_VEC_LENGTH (tparms);
5851   bool ret = true;
5852
5853   /* We're dealing with template parms in this process.  */
5854   ++processing_template_decl;
5855
5856   targs = INNERMOST_TEMPLATE_ARGS (targs);
5857
5858   for (i = 0; i < ntparms; ++i)
5859     {
5860       tree tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
5861       tree targ = TREE_VEC_ELT (targs, i);
5862
5863       if (TREE_CODE (tparm) == TEMPLATE_DECL && targ)
5864         {
5865           tree packed_args = NULL_TREE;
5866           int idx, len = 1;
5867
5868           if (ARGUMENT_PACK_P (targ))
5869             {
5870               /* Look inside the argument pack.  */
5871               packed_args = ARGUMENT_PACK_ARGS (targ);
5872               len = TREE_VEC_LENGTH (packed_args);
5873             }
5874
5875           for (idx = 0; idx < len; ++idx)
5876             {
5877               tree targ_parms = NULL_TREE;
5878
5879               if (packed_args)
5880                 /* Extract the next argument from the argument
5881                    pack.  */
5882                 targ = TREE_VEC_ELT (packed_args, idx);
5883
5884               if (PACK_EXPANSION_P (targ))
5885                 /* Look at the pattern of the pack expansion.  */
5886                 targ = PACK_EXPANSION_PATTERN (targ);
5887
5888               /* Extract the template parameters from the template
5889                  argument.  */
5890               if (TREE_CODE (targ) == TEMPLATE_DECL)
5891                 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (targ);
5892               else if (TREE_CODE (targ) == TEMPLATE_TEMPLATE_PARM)
5893                 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_NAME (targ));
5894
5895               /* Verify that we can coerce the template template
5896                  parameters from the template argument to the template
5897                  parameter.  This requires an exact match.  */
5898               if (targ_parms
5899                   && !coerce_template_template_parms
5900                        (DECL_INNERMOST_TEMPLATE_PARMS (tparm),
5901                         targ_parms,
5902                         tf_none,
5903                         tparm,
5904                         targs))
5905                 {
5906                   ret = false;
5907                   goto out;
5908                 }
5909             }
5910         }
5911     }
5912
5913  out:
5914
5915   --processing_template_decl;
5916   return ret;
5917 }
5918
5919 /* Convert the indicated template ARG as necessary to match the
5920    indicated template PARM.  Returns the converted ARG, or
5921    error_mark_node if the conversion was unsuccessful.  Error and
5922    warning messages are issued under control of COMPLAIN.  This
5923    conversion is for the Ith parameter in the parameter list.  ARGS is
5924    the full set of template arguments deduced so far.  */
5925
5926 static tree
5927 convert_template_argument (tree parm,
5928                            tree arg,
5929                            tree args,
5930                            tsubst_flags_t complain,
5931                            int i,
5932                            tree in_decl)
5933 {
5934   tree orig_arg;
5935   tree val;
5936   int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
5937
5938   if (TREE_CODE (arg) == TREE_LIST
5939       && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
5940     {
5941       /* The template argument was the name of some
5942          member function.  That's usually
5943          invalid, but static members are OK.  In any
5944          case, grab the underlying fields/functions
5945          and issue an error later if required.  */
5946       orig_arg = TREE_VALUE (arg);
5947       TREE_TYPE (arg) = unknown_type_node;
5948     }
5949
5950   orig_arg = arg;
5951
5952   requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
5953   requires_type = (TREE_CODE (parm) == TYPE_DECL
5954                    || requires_tmpl_type);
5955
5956   /* When determining whether an argument pack expansion is a template,
5957      look at the pattern.  */
5958   if (TREE_CODE (arg) == TYPE_PACK_EXPANSION)
5959     arg = PACK_EXPANSION_PATTERN (arg);
5960
5961   /* Deal with an injected-class-name used as a template template arg.  */
5962   if (requires_tmpl_type && CLASS_TYPE_P (arg))
5963     {
5964       tree t = maybe_get_template_decl_from_type_decl (TYPE_NAME (arg));
5965       if (TREE_CODE (t) == TEMPLATE_DECL)
5966         {
5967           if (cxx_dialect >= cxx0x)
5968             /* OK under DR 1004.  */;
5969           else if (complain & tf_warning_or_error)
5970             pedwarn (input_location, OPT_pedantic, "injected-class-name %qD"
5971                      " used as template template argument", TYPE_NAME (arg));
5972           else if (flag_pedantic_errors)
5973             t = arg;
5974
5975           arg = t;
5976         }
5977     }
5978
5979   is_tmpl_type = 
5980     ((TREE_CODE (arg) == TEMPLATE_DECL
5981       && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
5982      || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
5983      || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
5984
5985   if (is_tmpl_type
5986       && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
5987           || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
5988     arg = TYPE_STUB_DECL (arg);
5989
5990   is_type = TYPE_P (arg) || is_tmpl_type;
5991
5992   if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
5993       && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
5994     {
5995       permerror (input_location, "to refer to a type member of a template parameter, "
5996                  "use %<typename %E%>", orig_arg);
5997
5998       orig_arg = make_typename_type (TREE_OPERAND (arg, 0),
5999                                      TREE_OPERAND (arg, 1),
6000                                      typename_type,
6001                                      complain & tf_error);
6002       arg = orig_arg;
6003       is_type = 1;
6004     }
6005   if (is_type != requires_type)
6006     {
6007       if (in_decl)
6008         {
6009           if (complain & tf_error)
6010             {
6011               error ("type/value mismatch at argument %d in template "
6012                      "parameter list for %qD",
6013                      i + 1, in_decl);
6014               if (is_type)
6015                 error ("  expected a constant of type %qT, got %qT",
6016                        TREE_TYPE (parm),
6017                        (DECL_P (arg) ? DECL_NAME (arg) : orig_arg));
6018               else if (requires_tmpl_type)
6019                 error ("  expected a class template, got %qE", orig_arg);
6020               else
6021                 error ("  expected a type, got %qE", orig_arg);
6022             }
6023         }
6024       return error_mark_node;
6025     }
6026   if (is_tmpl_type ^ requires_tmpl_type)
6027     {
6028       if (in_decl && (complain & tf_error))
6029         {
6030           error ("type/value mismatch at argument %d in template "
6031                  "parameter list for %qD",
6032                  i + 1, in_decl);
6033           if (is_tmpl_type)
6034             error ("  expected a type, got %qT", DECL_NAME (arg));
6035           else
6036             error ("  expected a class template, got %qT", orig_arg);
6037         }
6038       return error_mark_node;
6039     }
6040
6041   if (is_type)
6042     {
6043       if (requires_tmpl_type)
6044         {
6045           if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
6046             /* The number of argument required is not known yet.
6047                Just accept it for now.  */
6048             val = TREE_TYPE (arg);
6049           else
6050             {
6051               tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
6052               tree argparm;
6053
6054               argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
6055
6056               if (coerce_template_template_parms (parmparm, argparm,
6057                                                   complain, in_decl,
6058                                                   args))
6059                 {
6060                   val = arg;
6061
6062                   /* TEMPLATE_TEMPLATE_PARM node is preferred over
6063                      TEMPLATE_DECL.  */
6064                   if (val != error_mark_node)
6065                     {
6066                       if (DECL_TEMPLATE_TEMPLATE_PARM_P (val))
6067                         val = TREE_TYPE (val);
6068                       if (TREE_CODE (orig_arg) == TYPE_PACK_EXPANSION)
6069                         val = make_pack_expansion (val);
6070                     }
6071                 }
6072               else
6073                 {
6074                   if (in_decl && (complain & tf_error))
6075                     {
6076                       error ("type/value mismatch at argument %d in "
6077                              "template parameter list for %qD",
6078                              i + 1, in_decl);
6079                       error ("  expected a template of type %qD, got %qT",
6080                              parm, orig_arg);
6081                     }
6082
6083                   val = error_mark_node;
6084                 }
6085             }
6086         }
6087       else
6088         val = orig_arg;
6089       /* We only form one instance of each template specialization.
6090          Therefore, if we use a non-canonical variant (i.e., a
6091          typedef), any future messages referring to the type will use
6092          the typedef, which is confusing if those future uses do not
6093          themselves also use the typedef.  */
6094       if (TYPE_P (val))
6095         val = strip_typedefs (val);
6096     }
6097   else
6098     {
6099       tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
6100
6101       if (invalid_nontype_parm_type_p (t, complain))
6102         return error_mark_node;
6103
6104       if (template_parameter_pack_p (parm) && ARGUMENT_PACK_P (orig_arg))
6105         {
6106           if (same_type_p (t, TREE_TYPE (orig_arg)))
6107             val = orig_arg;
6108           else
6109             {
6110               /* Not sure if this is reachable, but it doesn't hurt
6111                  to be robust.  */
6112               error ("type mismatch in nontype parameter pack");
6113               val = error_mark_node;
6114             }
6115         }
6116       else if (!uses_template_parms (orig_arg) && !uses_template_parms (t))
6117         /* We used to call digest_init here.  However, digest_init
6118            will report errors, which we don't want when complain
6119            is zero.  More importantly, digest_init will try too
6120            hard to convert things: for example, `0' should not be
6121            converted to pointer type at this point according to
6122            the standard.  Accepting this is not merely an
6123            extension, since deciding whether or not these
6124            conversions can occur is part of determining which
6125            function template to call, or whether a given explicit
6126            argument specification is valid.  */
6127         val = convert_nontype_argument (t, orig_arg, complain);
6128       else
6129         val = orig_arg;
6130
6131       if (val == NULL_TREE)
6132         val = error_mark_node;
6133       else if (val == error_mark_node && (complain & tf_error))
6134         error ("could not convert template argument %qE to %qT",  orig_arg, t);
6135
6136       if (TREE_CODE (val) == SCOPE_REF)
6137         {
6138           /* Strip typedefs from the SCOPE_REF.  */
6139           tree type = strip_typedefs (TREE_TYPE (val));
6140           tree scope = strip_typedefs (TREE_OPERAND (val, 0));
6141           val = build_qualified_name (type, scope, TREE_OPERAND (val, 1),
6142                                       QUALIFIED_NAME_IS_TEMPLATE (val));
6143         }
6144     }
6145
6146   return val;
6147 }
6148
6149 /* Coerces the remaining template arguments in INNER_ARGS (from
6150    ARG_IDX to the end) into the parameter pack at PARM_IDX in PARMS.
6151    Returns the coerced argument pack. PARM_IDX is the position of this
6152    parameter in the template parameter list. ARGS is the original
6153    template argument list.  */
6154 static tree
6155 coerce_template_parameter_pack (tree parms,
6156                                 int parm_idx,
6157                                 tree args,
6158                                 tree inner_args,
6159                                 int arg_idx,
6160                                 tree new_args,
6161                                 int* lost,
6162                                 tree in_decl,
6163                                 tsubst_flags_t complain)
6164 {
6165   tree parm = TREE_VEC_ELT (parms, parm_idx);
6166   int nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
6167   tree packed_args;
6168   tree argument_pack;
6169   tree packed_types = NULL_TREE;
6170
6171   if (arg_idx > nargs)
6172     arg_idx = nargs;
6173
6174   packed_args = make_tree_vec (nargs - arg_idx);
6175
6176   if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL
6177       && uses_parameter_packs (TREE_TYPE (TREE_VALUE (parm))))
6178     {
6179       /* When the template parameter is a non-type template
6180          parameter pack whose type uses parameter packs, we need
6181          to look at each of the template arguments
6182          separately. Build a vector of the types for these
6183          non-type template parameters in PACKED_TYPES.  */
6184       tree expansion 
6185         = make_pack_expansion (TREE_TYPE (TREE_VALUE (parm)));
6186       packed_types = tsubst_pack_expansion (expansion, args,
6187                                             complain, in_decl);
6188
6189       if (packed_types == error_mark_node)
6190         return error_mark_node;
6191
6192       /* Check that we have the right number of arguments.  */
6193       if (arg_idx < nargs
6194           && !PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx))
6195           && nargs - arg_idx != TREE_VEC_LENGTH (packed_types))
6196         {
6197           int needed_parms 
6198             = TREE_VEC_LENGTH (parms) - 1 + TREE_VEC_LENGTH (packed_types);
6199           error ("wrong number of template arguments (%d, should be %d)",
6200                  nargs, needed_parms);
6201           return error_mark_node;
6202         }
6203
6204       /* If we aren't able to check the actual arguments now
6205          (because they haven't been expanded yet), we can at least
6206          verify that all of the types used for the non-type
6207          template parameter pack are, in fact, valid for non-type
6208          template parameters.  */
6209       if (arg_idx < nargs 
6210           && PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx)))
6211         {
6212           int j, len = TREE_VEC_LENGTH (packed_types);
6213           for (j = 0; j < len; ++j)
6214             {
6215               tree t = TREE_VEC_ELT (packed_types, j);
6216               if (invalid_nontype_parm_type_p (t, complain))
6217                 return error_mark_node;
6218             }
6219         }
6220     }
6221
6222   /* Convert the remaining arguments, which will be a part of the
6223      parameter pack "parm".  */
6224   for (; arg_idx < nargs; ++arg_idx)
6225     {
6226       tree arg = TREE_VEC_ELT (inner_args, arg_idx);
6227       tree actual_parm = TREE_VALUE (parm);
6228
6229       if (packed_types && !PACK_EXPANSION_P (arg))
6230         {
6231           /* When we have a vector of types (corresponding to the
6232              non-type template parameter pack that uses parameter
6233              packs in its type, as mention above), and the
6234              argument is not an expansion (which expands to a
6235              currently unknown number of arguments), clone the
6236              parm and give it the next type in PACKED_TYPES.  */
6237           actual_parm = copy_node (actual_parm);
6238           TREE_TYPE (actual_parm) = 
6239             TREE_VEC_ELT (packed_types, arg_idx - parm_idx);
6240         }
6241
6242       if (arg != error_mark_node)
6243         arg = convert_template_argument (actual_parm, 
6244                                          arg, new_args, complain, parm_idx,
6245                                          in_decl);
6246       if (arg == error_mark_node)
6247         (*lost)++;
6248       TREE_VEC_ELT (packed_args, arg_idx - parm_idx) = arg; 
6249     }
6250
6251   if (TREE_CODE (TREE_VALUE (parm)) == TYPE_DECL
6252       || TREE_CODE (TREE_VALUE (parm)) == TEMPLATE_DECL)
6253     argument_pack = cxx_make_type (TYPE_ARGUMENT_PACK);
6254   else
6255     {
6256       argument_pack = make_node (NONTYPE_ARGUMENT_PACK);
6257       TREE_TYPE (argument_pack) 
6258         = tsubst (TREE_TYPE (TREE_VALUE (parm)), new_args, complain, in_decl);
6259       TREE_CONSTANT (argument_pack) = 1;
6260     }
6261
6262   SET_ARGUMENT_PACK_ARGS (argument_pack, packed_args);
6263 #ifdef ENABLE_CHECKING
6264   SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (packed_args,
6265                                        TREE_VEC_LENGTH (packed_args));
6266 #endif
6267   return argument_pack;
6268 }
6269
6270 /* Convert all template arguments to their appropriate types, and
6271    return a vector containing the innermost resulting template
6272    arguments.  If any error occurs, return error_mark_node. Error and
6273    warning messages are issued under control of COMPLAIN.
6274
6275    If REQUIRE_ALL_ARGS is false, argument deduction will be performed
6276    for arguments not specified in ARGS.  Otherwise, if
6277    USE_DEFAULT_ARGS is true, default arguments will be used to fill in
6278    unspecified arguments.  If REQUIRE_ALL_ARGS is true, but
6279    USE_DEFAULT_ARGS is false, then all arguments must be specified in
6280    ARGS.  */
6281
6282 static tree
6283 coerce_template_parms (tree parms,
6284                        tree args,
6285                        tree in_decl,
6286                        tsubst_flags_t complain,
6287                        bool require_all_args,
6288                        bool use_default_args)
6289 {
6290   int nparms, nargs, parm_idx, arg_idx, lost = 0;
6291   tree inner_args;
6292   tree new_args;
6293   tree new_inner_args;
6294   int saved_unevaluated_operand;
6295   int saved_inhibit_evaluation_warnings;
6296
6297   /* When used as a boolean value, indicates whether this is a
6298      variadic template parameter list. Since it's an int, we can also
6299      subtract it from nparms to get the number of non-variadic
6300      parameters.  */
6301   int variadic_p = 0;
6302
6303   if (args == error_mark_node)
6304     return error_mark_node;
6305
6306   nparms = TREE_VEC_LENGTH (parms);
6307
6308   /* Determine if there are any parameter packs.  */
6309   for (parm_idx = 0; parm_idx < nparms; ++parm_idx)
6310     {
6311       tree tparm = TREE_VALUE (TREE_VEC_ELT (parms, parm_idx));
6312       if (template_parameter_pack_p (tparm))
6313         ++variadic_p;
6314     }
6315
6316   inner_args = INNERMOST_TEMPLATE_ARGS (args);
6317   /* If there are 0 or 1 parameter packs, we need to expand any argument
6318      packs so that we can deduce a parameter pack from some non-packed args
6319      followed by an argument pack, as in variadic85.C.  If there are more
6320      than that, we need to leave argument packs intact so the arguments are
6321      assigned to the right parameter packs.  This should only happen when
6322      dealing with a nested class inside a partial specialization of a class
6323      template, as in variadic92.C.  */
6324   if (variadic_p <= 1)
6325     inner_args = expand_template_argument_pack (inner_args);
6326
6327   nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
6328   if ((nargs > nparms && !variadic_p)
6329       || (nargs < nparms - variadic_p
6330           && require_all_args
6331           && (!use_default_args
6332               || (TREE_VEC_ELT (parms, nargs) != error_mark_node
6333                   && !TREE_PURPOSE (TREE_VEC_ELT (parms, nargs))))))
6334     {
6335       if (complain & tf_error)
6336         {
6337           if (variadic_p)
6338             {
6339               --nparms;
6340               error ("wrong number of template arguments "
6341                      "(%d, should be %d or more)", nargs, nparms);
6342             }
6343           else
6344              error ("wrong number of template arguments "
6345                     "(%d, should be %d)", nargs, nparms);
6346
6347           if (in_decl)
6348             error ("provided for %q+D", in_decl);
6349         }
6350
6351       return error_mark_node;
6352     }
6353
6354   /* We need to evaluate the template arguments, even though this
6355      template-id may be nested within a "sizeof".  */
6356   saved_unevaluated_operand = cp_unevaluated_operand;
6357   cp_unevaluated_operand = 0;
6358   saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
6359   c_inhibit_evaluation_warnings = 0;
6360   new_inner_args = make_tree_vec (nparms);
6361   new_args = add_outermost_template_args (args, new_inner_args);
6362   for (parm_idx = 0, arg_idx = 0; parm_idx < nparms; parm_idx++, arg_idx++)
6363     {
6364       tree arg;
6365       tree parm;
6366
6367       /* Get the Ith template parameter.  */
6368       parm = TREE_VEC_ELT (parms, parm_idx);
6369  
6370       if (parm == error_mark_node)
6371       {
6372         TREE_VEC_ELT (new_inner_args, arg_idx) = error_mark_node;
6373         continue;
6374       }
6375
6376       /* Calculate the next argument.  */
6377       if (arg_idx < nargs)
6378         arg = TREE_VEC_ELT (inner_args, arg_idx);
6379       else
6380         arg = NULL_TREE;
6381
6382       if (template_parameter_pack_p (TREE_VALUE (parm))
6383           && !(arg && ARGUMENT_PACK_P (arg)))
6384         {
6385           /* All remaining arguments will be placed in the
6386              template parameter pack PARM.  */
6387           arg = coerce_template_parameter_pack (parms, parm_idx, args, 
6388                                                 inner_args, arg_idx,
6389                                                 new_args, &lost,
6390                                                 in_decl, complain);
6391
6392           /* Store this argument.  */
6393           if (arg == error_mark_node)
6394             lost++;
6395           TREE_VEC_ELT (new_inner_args, parm_idx) = arg;
6396
6397           /* We are done with all of the arguments.  */
6398           arg_idx = nargs;
6399           
6400           continue;
6401         }
6402       else if (arg)
6403         {
6404           if (PACK_EXPANSION_P (arg))
6405             {
6406               if (complain & tf_error)
6407                 {
6408                   /* FIXME this restriction was removed by N2555; see
6409                      bug 35722.  */
6410                   /* If ARG is a pack expansion, but PARM is not a
6411                      template parameter pack (if it were, we would have
6412                      handled it above), we're trying to expand into a
6413                      fixed-length argument list.  */
6414                   if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
6415                     sorry ("cannot expand %<%E%> into a fixed-length "
6416                            "argument list", arg);
6417                   else
6418                     sorry ("cannot expand %<%T%> into a fixed-length "
6419                            "argument list", arg);
6420                 }
6421               ++lost;
6422             }
6423         }
6424       else if (require_all_args)
6425         {
6426           /* There must be a default arg in this case.  */
6427           arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
6428                                      complain, in_decl);
6429           /* The position of the first default template argument,
6430              is also the number of non-defaulted arguments in NEW_INNER_ARGS.
6431              Record that.  */
6432           if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args))
6433             SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args, arg_idx);
6434         }
6435       else
6436         break;
6437
6438       if (arg == error_mark_node)
6439         {
6440           if (complain & tf_error)
6441             error ("template argument %d is invalid", arg_idx + 1);
6442         }
6443       else if (!arg)
6444         /* This only occurs if there was an error in the template
6445            parameter list itself (which we would already have
6446            reported) that we are trying to recover from, e.g., a class
6447            template with a parameter list such as
6448            template<typename..., typename>.  */
6449         ++lost;
6450       else
6451         arg = convert_template_argument (TREE_VALUE (parm),
6452                                          arg, new_args, complain, 
6453                                          parm_idx, in_decl);
6454
6455       if (arg == error_mark_node)
6456         lost++;
6457       TREE_VEC_ELT (new_inner_args, arg_idx) = arg;
6458     }
6459   cp_unevaluated_operand = saved_unevaluated_operand;
6460   c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
6461
6462   if (lost)
6463     return error_mark_node;
6464
6465 #ifdef ENABLE_CHECKING
6466   if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args))
6467     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args,
6468                                          TREE_VEC_LENGTH (new_inner_args));
6469 #endif
6470
6471   return new_inner_args;
6472 }
6473
6474 /* Returns 1 if template args OT and NT are equivalent.  */
6475
6476 static int
6477 template_args_equal (tree ot, tree nt)
6478 {
6479   if (nt == ot)
6480     return 1;
6481   if (nt == NULL_TREE || ot == NULL_TREE)
6482     return false;
6483
6484   if (TREE_CODE (nt) == TREE_VEC)
6485     /* For member templates */
6486     return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
6487   else if (PACK_EXPANSION_P (ot))
6488     return PACK_EXPANSION_P (nt) 
6489       && template_args_equal (PACK_EXPANSION_PATTERN (ot),
6490                               PACK_EXPANSION_PATTERN (nt));
6491   else if (ARGUMENT_PACK_P (ot))
6492     {
6493       int i, len;
6494       tree opack, npack;
6495
6496       if (!ARGUMENT_PACK_P (nt))
6497         return 0;
6498
6499       opack = ARGUMENT_PACK_ARGS (ot);
6500       npack = ARGUMENT_PACK_ARGS (nt);
6501       len = TREE_VEC_LENGTH (opack);
6502       if (TREE_VEC_LENGTH (npack) != len)
6503         return 0;
6504       for (i = 0; i < len; ++i)
6505         if (!template_args_equal (TREE_VEC_ELT (opack, i),
6506                                   TREE_VEC_ELT (npack, i)))
6507           return 0;
6508       return 1;
6509     }
6510   else if (ot && TREE_CODE (ot) == ARGUMENT_PACK_SELECT)
6511     {
6512       /* We get here probably because we are in the middle of substituting
6513          into the pattern of a pack expansion. In that case the
6514          ARGUMENT_PACK_SELECT temporarily replaces the pack argument we are
6515          interested in. So we want to use the initial pack argument for
6516          the comparison.  */
6517       ot = ARGUMENT_PACK_SELECT_FROM_PACK (ot);
6518       if (nt && TREE_CODE (nt) == ARGUMENT_PACK_SELECT)
6519         nt = ARGUMENT_PACK_SELECT_FROM_PACK (nt);
6520       return template_args_equal (ot, nt);
6521     }
6522   else if (TYPE_P (nt))
6523     return TYPE_P (ot) && same_type_p (ot, nt);
6524   else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
6525     return 0;
6526   else
6527     return cp_tree_equal (ot, nt);
6528 }
6529
6530 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
6531    of template arguments.  Returns 0 otherwise.  */
6532
6533 int
6534 comp_template_args (tree oldargs, tree newargs)
6535 {
6536   int i;
6537
6538   if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
6539     return 0;
6540
6541   for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
6542     {
6543       tree nt = TREE_VEC_ELT (newargs, i);
6544       tree ot = TREE_VEC_ELT (oldargs, i);
6545
6546       if (! template_args_equal (ot, nt))
6547         return 0;
6548     }
6549   return 1;
6550 }
6551
6552 static void
6553 add_pending_template (tree d)
6554 {
6555   tree ti = (TYPE_P (d)
6556              ? CLASSTYPE_TEMPLATE_INFO (d)
6557              : DECL_TEMPLATE_INFO (d));
6558   struct pending_template *pt;
6559   int level;
6560
6561   if (TI_PENDING_TEMPLATE_FLAG (ti))
6562     return;
6563
6564   /* We are called both from instantiate_decl, where we've already had a
6565      tinst_level pushed, and instantiate_template, where we haven't.
6566      Compensate.  */
6567   level = !current_tinst_level || current_tinst_level->decl != d;
6568
6569   if (level)
6570     push_tinst_level (d);
6571
6572   pt = ggc_alloc_pending_template ();
6573   pt->next = NULL;
6574   pt->tinst = current_tinst_level;
6575   if (last_pending_template)
6576     last_pending_template->next = pt;
6577   else
6578     pending_templates = pt;
6579
6580   last_pending_template = pt;
6581
6582   TI_PENDING_TEMPLATE_FLAG (ti) = 1;
6583
6584   if (level)
6585     pop_tinst_level ();
6586 }
6587
6588
6589 /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
6590    ARGLIST.  Valid choices for FNS are given in the cp-tree.def
6591    documentation for TEMPLATE_ID_EXPR.  */
6592
6593 tree
6594 lookup_template_function (tree fns, tree arglist)
6595 {
6596   tree type;
6597
6598   if (fns == error_mark_node || arglist == error_mark_node)
6599     return error_mark_node;
6600
6601   gcc_assert (!arglist || TREE_CODE (arglist) == TREE_VEC);
6602   gcc_assert (fns && (is_overloaded_fn (fns)
6603                       || TREE_CODE (fns) == IDENTIFIER_NODE));
6604
6605   if (BASELINK_P (fns))
6606     {
6607       BASELINK_FUNCTIONS (fns) = build2 (TEMPLATE_ID_EXPR,
6608                                          unknown_type_node,
6609                                          BASELINK_FUNCTIONS (fns),
6610                                          arglist);
6611       return fns;
6612     }
6613
6614   type = TREE_TYPE (fns);
6615   if (TREE_CODE (fns) == OVERLOAD || !type)
6616     type = unknown_type_node;
6617
6618   return build2 (TEMPLATE_ID_EXPR, type, fns, arglist);
6619 }
6620
6621 /* Within the scope of a template class S<T>, the name S gets bound
6622    (in build_self_reference) to a TYPE_DECL for the class, not a
6623    TEMPLATE_DECL.  If DECL is a TYPE_DECL for current_class_type,
6624    or one of its enclosing classes, and that type is a template,
6625    return the associated TEMPLATE_DECL.  Otherwise, the original
6626    DECL is returned.
6627
6628    Also handle the case when DECL is a TREE_LIST of ambiguous
6629    injected-class-names from different bases.  */
6630
6631 tree
6632 maybe_get_template_decl_from_type_decl (tree decl)
6633 {
6634   if (decl == NULL_TREE)
6635     return decl;
6636
6637   /* DR 176: A lookup that finds an injected-class-name (10.2
6638      [class.member.lookup]) can result in an ambiguity in certain cases
6639      (for example, if it is found in more than one base class). If all of
6640      the injected-class-names that are found refer to specializations of
6641      the same class template, and if the name is followed by a
6642      template-argument-list, the reference refers to the class template
6643      itself and not a specialization thereof, and is not ambiguous.  */
6644   if (TREE_CODE (decl) == TREE_LIST)
6645     {
6646       tree t, tmpl = NULL_TREE;
6647       for (t = decl; t; t = TREE_CHAIN (t))
6648         {
6649           tree elt = maybe_get_template_decl_from_type_decl (TREE_VALUE (t));
6650           if (!tmpl)
6651             tmpl = elt;
6652           else if (tmpl != elt)
6653             break;
6654         }
6655       if (tmpl && t == NULL_TREE)
6656         return tmpl;
6657       else
6658         return decl;
6659     }
6660
6661   return (decl != NULL_TREE
6662           && DECL_SELF_REFERENCE_P (decl)
6663           && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
6664     ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
6665 }
6666
6667 /* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of
6668    parameters, find the desired type.
6669
6670    D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
6671
6672    IN_DECL, if non-NULL, is the template declaration we are trying to
6673    instantiate.
6674
6675    If ENTERING_SCOPE is nonzero, we are about to enter the scope of
6676    the class we are looking up.
6677
6678    Issue error and warning messages under control of COMPLAIN.
6679
6680    If the template class is really a local class in a template
6681    function, then the FUNCTION_CONTEXT is the function in which it is
6682    being instantiated.
6683
6684    ??? Note that this function is currently called *twice* for each
6685    template-id: the first time from the parser, while creating the
6686    incomplete type (finish_template_type), and the second type during the
6687    real instantiation (instantiate_template_class). This is surely something
6688    that we want to avoid. It also causes some problems with argument
6689    coercion (see convert_nontype_argument for more information on this).  */
6690
6691 static tree
6692 lookup_template_class_1 (tree d1, tree arglist, tree in_decl, tree context,
6693                          int entering_scope, tsubst_flags_t complain)
6694 {
6695   tree templ = NULL_TREE, parmlist;
6696   tree t;
6697   spec_entry **slot;
6698   spec_entry *entry;
6699   spec_entry elt;
6700   hashval_t hash;
6701
6702   if (TREE_CODE (d1) == IDENTIFIER_NODE)
6703     {
6704       tree value = innermost_non_namespace_value (d1);
6705       if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
6706         templ = value;
6707       else
6708         {
6709           if (context)
6710             push_decl_namespace (context);
6711           templ = lookup_name (d1);
6712           templ = maybe_get_template_decl_from_type_decl (templ);
6713           if (context)
6714             pop_decl_namespace ();
6715         }
6716       if (templ)
6717         context = DECL_CONTEXT (templ);
6718     }
6719   else if (TREE_CODE (d1) == TYPE_DECL && MAYBE_CLASS_TYPE_P (TREE_TYPE (d1)))
6720     {
6721       tree type = TREE_TYPE (d1);
6722
6723       /* If we are declaring a constructor, say A<T>::A<T>, we will get
6724          an implicit typename for the second A.  Deal with it.  */
6725       if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
6726         type = TREE_TYPE (type);
6727
6728       if (CLASSTYPE_TEMPLATE_INFO (type))
6729         {
6730           templ = CLASSTYPE_TI_TEMPLATE (type);
6731           d1 = DECL_NAME (templ);
6732         }
6733     }
6734   else if (TREE_CODE (d1) == ENUMERAL_TYPE
6735            || (TYPE_P (d1) && MAYBE_CLASS_TYPE_P (d1)))
6736     {
6737       templ = TYPE_TI_TEMPLATE (d1);
6738       d1 = DECL_NAME (templ);
6739     }
6740   else if (TREE_CODE (d1) == TEMPLATE_DECL
6741            && DECL_TEMPLATE_RESULT (d1)
6742            && TREE_CODE (DECL_TEMPLATE_RESULT (d1)) == TYPE_DECL)
6743     {
6744       templ = d1;
6745       d1 = DECL_NAME (templ);
6746       context = DECL_CONTEXT (templ);
6747     }
6748
6749   /* Issue an error message if we didn't find a template.  */
6750   if (! templ)
6751     {
6752       if (complain & tf_error)
6753         error ("%qT is not a template", d1);
6754       return error_mark_node;
6755     }
6756
6757   if (TREE_CODE (templ) != TEMPLATE_DECL
6758          /* Make sure it's a user visible template, if it was named by
6759             the user.  */
6760       || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (templ)
6761           && !PRIMARY_TEMPLATE_P (templ)))
6762     {
6763       if (complain & tf_error)
6764         {
6765           error ("non-template type %qT used as a template", d1);
6766           if (in_decl)
6767             error ("for template declaration %q+D", in_decl);
6768         }
6769       return error_mark_node;
6770     }
6771
6772   complain &= ~tf_user;
6773
6774   if (DECL_TEMPLATE_TEMPLATE_PARM_P (templ))
6775     {
6776       /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
6777          template arguments */
6778
6779       tree parm;
6780       tree arglist2;
6781       tree outer;
6782
6783       parmlist = DECL_INNERMOST_TEMPLATE_PARMS (templ);
6784
6785       /* Consider an example where a template template parameter declared as
6786
6787            template <class T, class U = std::allocator<T> > class TT
6788
6789          The template parameter level of T and U are one level larger than
6790          of TT.  To proper process the default argument of U, say when an
6791          instantiation `TT<int>' is seen, we need to build the full
6792          arguments containing {int} as the innermost level.  Outer levels,
6793          available when not appearing as default template argument, can be
6794          obtained from the arguments of the enclosing template.
6795
6796          Suppose that TT is later substituted with std::vector.  The above
6797          instantiation is `TT<int, std::allocator<T> >' with TT at
6798          level 1, and T at level 2, while the template arguments at level 1
6799          becomes {std::vector} and the inner level 2 is {int}.  */
6800
6801       outer = DECL_CONTEXT (templ);
6802       if (outer)
6803         outer = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (outer)));
6804       else if (current_template_parms)
6805         /* This is an argument of the current template, so we haven't set
6806            DECL_CONTEXT yet.  */
6807         outer = current_template_args ();
6808
6809       if (outer)
6810         arglist = add_to_template_args (outer, arglist);
6811
6812       arglist2 = coerce_template_parms (parmlist, arglist, templ,
6813                                         complain,
6814                                         /*require_all_args=*/true,
6815                                         /*use_default_args=*/true);
6816       if (arglist2 == error_mark_node
6817           || (!uses_template_parms (arglist2)
6818               && check_instantiated_args (templ, arglist2, complain)))
6819         return error_mark_node;
6820
6821       parm = bind_template_template_parm (TREE_TYPE (templ), arglist2);
6822       return parm;
6823     }
6824   else
6825     {
6826       tree template_type = TREE_TYPE (templ);
6827       tree gen_tmpl;
6828       tree type_decl;
6829       tree found = NULL_TREE;
6830       int arg_depth;
6831       int parm_depth;
6832       int is_dependent_type;
6833       int use_partial_inst_tmpl = false;
6834
6835       gen_tmpl = most_general_template (templ);
6836       parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
6837       parm_depth = TMPL_PARMS_DEPTH (parmlist);
6838       arg_depth = TMPL_ARGS_DEPTH (arglist);
6839
6840       if (arg_depth == 1 && parm_depth > 1)
6841         {
6842           /* We've been given an incomplete set of template arguments.
6843              For example, given:
6844
6845                template <class T> struct S1 {
6846                  template <class U> struct S2 {};
6847                  template <class U> struct S2<U*> {};
6848                 };
6849
6850              we will be called with an ARGLIST of `U*', but the
6851              TEMPLATE will be `template <class T> template
6852              <class U> struct S1<T>::S2'.  We must fill in the missing
6853              arguments.  */
6854           arglist
6855             = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (templ)),
6856                                            arglist);
6857           arg_depth = TMPL_ARGS_DEPTH (arglist);
6858         }
6859
6860       /* Now we should have enough arguments.  */
6861       gcc_assert (parm_depth == arg_depth);
6862
6863       /* From here on, we're only interested in the most general
6864          template.  */
6865
6866       /* Calculate the BOUND_ARGS.  These will be the args that are
6867          actually tsubst'd into the definition to create the
6868          instantiation.  */
6869       if (parm_depth > 1)
6870         {
6871           /* We have multiple levels of arguments to coerce, at once.  */
6872           int i;
6873           int saved_depth = TMPL_ARGS_DEPTH (arglist);
6874
6875           tree bound_args = make_tree_vec (parm_depth);
6876
6877           for (i = saved_depth,
6878                  t = DECL_TEMPLATE_PARMS (gen_tmpl);
6879                i > 0 && t != NULL_TREE;
6880                --i, t = TREE_CHAIN (t))
6881             {
6882               tree a;
6883               if (i == saved_depth)
6884                 a = coerce_template_parms (TREE_VALUE (t),
6885                                            arglist, gen_tmpl,
6886                                            complain,
6887                                            /*require_all_args=*/true,
6888                                            /*use_default_args=*/true);
6889               else
6890                 /* Outer levels should have already been coerced.  */
6891                 a = TMPL_ARGS_LEVEL (arglist, i);
6892
6893               /* Don't process further if one of the levels fails.  */
6894               if (a == error_mark_node)
6895                 {
6896                   /* Restore the ARGLIST to its full size.  */
6897                   TREE_VEC_LENGTH (arglist) = saved_depth;
6898                   return error_mark_node;
6899                 }
6900
6901               SET_TMPL_ARGS_LEVEL (bound_args, i, a);
6902
6903               /* We temporarily reduce the length of the ARGLIST so
6904                  that coerce_template_parms will see only the arguments
6905                  corresponding to the template parameters it is
6906                  examining.  */
6907               TREE_VEC_LENGTH (arglist)--;
6908             }
6909
6910           /* Restore the ARGLIST to its full size.  */
6911           TREE_VEC_LENGTH (arglist) = saved_depth;
6912
6913           arglist = bound_args;
6914         }
6915       else
6916         arglist
6917           = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
6918                                    INNERMOST_TEMPLATE_ARGS (arglist),
6919                                    gen_tmpl,
6920                                    complain,
6921                                    /*require_all_args=*/true,
6922                                    /*use_default_args=*/true);
6923
6924       if (arglist == error_mark_node)
6925         /* We were unable to bind the arguments.  */
6926         return error_mark_node;
6927
6928       /* In the scope of a template class, explicit references to the
6929          template class refer to the type of the template, not any
6930          instantiation of it.  For example, in:
6931
6932            template <class T> class C { void f(C<T>); }
6933
6934          the `C<T>' is just the same as `C'.  Outside of the
6935          class, however, such a reference is an instantiation.  */
6936       if ((entering_scope
6937            || !PRIMARY_TEMPLATE_P (gen_tmpl)
6938            || currently_open_class (template_type))
6939           /* comp_template_args is expensive, check it last.  */
6940           && comp_template_args (TYPE_TI_ARGS (template_type),
6941                                  arglist))
6942         return template_type;
6943
6944       /* If we already have this specialization, return it.  */
6945       elt.tmpl = gen_tmpl;
6946       elt.args = arglist;
6947       hash = hash_specialization (&elt);
6948       entry = (spec_entry *) htab_find_with_hash (type_specializations,
6949                                                   &elt, hash);
6950
6951       if (entry)
6952         return entry->spec;
6953
6954       is_dependent_type = uses_template_parms (arglist);
6955
6956       /* If the deduced arguments are invalid, then the binding
6957          failed.  */
6958       if (!is_dependent_type
6959           && check_instantiated_args (gen_tmpl,
6960                                       INNERMOST_TEMPLATE_ARGS (arglist),
6961                                       complain))
6962         return error_mark_node;
6963
6964       if (!is_dependent_type
6965           && !PRIMARY_TEMPLATE_P (gen_tmpl)
6966           && !LAMBDA_TYPE_P (TREE_TYPE (gen_tmpl))
6967           && TREE_CODE (CP_DECL_CONTEXT (gen_tmpl)) == NAMESPACE_DECL)
6968         {
6969           found = xref_tag_from_type (TREE_TYPE (gen_tmpl),
6970                                       DECL_NAME (gen_tmpl),
6971                                       /*tag_scope=*/ts_global);
6972           return found;
6973         }
6974
6975       context = tsubst (DECL_CONTEXT (gen_tmpl), arglist,
6976                         complain, in_decl);
6977       if (!context)
6978         context = global_namespace;
6979
6980       /* Create the type.  */
6981       if (TREE_CODE (template_type) == ENUMERAL_TYPE)
6982         {
6983           if (!is_dependent_type)
6984             {
6985               set_current_access_from_decl (TYPE_NAME (template_type));
6986               t = start_enum (TYPE_IDENTIFIER (template_type), NULL_TREE,
6987                               tsubst (ENUM_UNDERLYING_TYPE (template_type),
6988                                       arglist, complain, in_decl),
6989                               SCOPED_ENUM_P (template_type), NULL);
6990             }
6991           else
6992             {
6993               /* We don't want to call start_enum for this type, since
6994                  the values for the enumeration constants may involve
6995                  template parameters.  And, no one should be interested
6996                  in the enumeration constants for such a type.  */
6997               t = cxx_make_type (ENUMERAL_TYPE);
6998               SET_SCOPED_ENUM_P (t, SCOPED_ENUM_P (template_type));
6999             }
7000           SET_OPAQUE_ENUM_P (t, OPAQUE_ENUM_P (template_type));
7001           ENUM_FIXED_UNDERLYING_TYPE_P (t)
7002             = ENUM_FIXED_UNDERLYING_TYPE_P (template_type);
7003         }
7004       else
7005         {
7006           t = make_class_type (TREE_CODE (template_type));
7007           CLASSTYPE_DECLARED_CLASS (t)
7008             = CLASSTYPE_DECLARED_CLASS (template_type);
7009           SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
7010           TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
7011
7012           /* A local class.  Make sure the decl gets registered properly.  */
7013           if (context == current_function_decl)
7014             pushtag (DECL_NAME (gen_tmpl), t, /*tag_scope=*/ts_current);
7015
7016           if (comp_template_args (CLASSTYPE_TI_ARGS (template_type), arglist))
7017             /* This instantiation is another name for the primary
7018                template type. Set the TYPE_CANONICAL field
7019                appropriately. */
7020             TYPE_CANONICAL (t) = template_type;
7021           else if (any_template_arguments_need_structural_equality_p (arglist))
7022             /* Some of the template arguments require structural
7023                equality testing, so this template class requires
7024                structural equality testing. */
7025             SET_TYPE_STRUCTURAL_EQUALITY (t);
7026         }
7027
7028       /* If we called start_enum or pushtag above, this information
7029          will already be set up.  */
7030       if (!TYPE_NAME (t))
7031         {
7032           TYPE_CONTEXT (t) = FROB_CONTEXT (context);
7033
7034           type_decl = create_implicit_typedef (DECL_NAME (gen_tmpl), t);
7035           DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
7036           DECL_SOURCE_LOCATION (type_decl)
7037             = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
7038         }
7039       else
7040         type_decl = TYPE_NAME (t);
7041
7042       TREE_PRIVATE (type_decl)
7043         = TREE_PRIVATE (TYPE_STUB_DECL (template_type));
7044       TREE_PROTECTED (type_decl)
7045         = TREE_PROTECTED (TYPE_STUB_DECL (template_type));
7046       if (CLASSTYPE_VISIBILITY_SPECIFIED (template_type))
7047         {
7048           DECL_VISIBILITY_SPECIFIED (type_decl) = 1;
7049           DECL_VISIBILITY (type_decl) = CLASSTYPE_VISIBILITY (template_type);
7050         }
7051
7052       /* Let's consider the explicit specialization of a member
7053          of a class template specialization that is implicitely instantiated,
7054          e.g.:
7055              template<class T>
7056              struct S
7057              {
7058                template<class U> struct M {}; //#0
7059              };
7060
7061              template<>
7062              template<>
7063              struct S<int>::M<char> //#1
7064              {
7065                int i;
7066              };
7067         [temp.expl.spec]/4 says this is valid.
7068
7069         In this case, when we write:
7070         S<int>::M<char> m;
7071
7072         M is instantiated from the CLASSTYPE_TI_TEMPLATE of #1, not from
7073         the one of #0.
7074
7075         When we encounter #1, we want to store the partial instantiation
7076         of M (template<class T> S<int>::M<T>) in it's CLASSTYPE_TI_TEMPLATE.
7077
7078         For all cases other than this "explicit specialization of member of a
7079         class template", we just want to store the most general template into
7080         the CLASSTYPE_TI_TEMPLATE of M.
7081
7082         This case of "explicit specialization of member of a class template"
7083         only happens when:
7084         1/ the enclosing class is an instantiation of, and therefore not
7085         the same as, the context of the most general template, and
7086         2/ we aren't looking at the partial instantiation itself, i.e.
7087         the innermost arguments are not the same as the innermost parms of
7088         the most general template.
7089
7090         So it's only when 1/ and 2/ happens that we want to use the partial
7091         instantiation of the member template in lieu of its most general
7092         template.  */
7093
7094       if (PRIMARY_TEMPLATE_P (gen_tmpl)
7095           && TMPL_ARGS_HAVE_MULTIPLE_LEVELS (arglist)
7096           /* the enclosing class must be an instantiation...  */
7097           && CLASS_TYPE_P (context)
7098           && !same_type_p (context, DECL_CONTEXT (gen_tmpl)))
7099         {
7100           tree partial_inst_args;
7101           TREE_VEC_LENGTH (arglist)--;
7102           ++processing_template_decl;
7103           partial_inst_args =
7104             tsubst (INNERMOST_TEMPLATE_ARGS
7105                         (CLASSTYPE_TI_ARGS (TREE_TYPE (gen_tmpl))),
7106                     arglist, complain, NULL_TREE);
7107           --processing_template_decl;
7108           TREE_VEC_LENGTH (arglist)++;
7109           use_partial_inst_tmpl =
7110             /*...and we must not be looking at the partial instantiation
7111              itself. */
7112             !comp_template_args (INNERMOST_TEMPLATE_ARGS (arglist),
7113                                  partial_inst_args);
7114         }
7115
7116       if (!use_partial_inst_tmpl)
7117         /* This case is easy; there are no member templates involved.  */
7118         found = gen_tmpl;
7119       else
7120         {
7121           /* This is a full instantiation of a member template.  Find
7122              the partial instantiation of which this is an instance.  */
7123
7124           /* Temporarily reduce by one the number of levels in the ARGLIST
7125              so as to avoid comparing the last set of arguments.  */
7126           TREE_VEC_LENGTH (arglist)--;
7127           found = tsubst (gen_tmpl, arglist, complain, NULL_TREE);
7128           TREE_VEC_LENGTH (arglist)++;
7129           found = CLASSTYPE_TI_TEMPLATE (found);
7130         }
7131
7132       SET_TYPE_TEMPLATE_INFO (t, build_template_info (found, arglist));
7133
7134       elt.spec = t;
7135       slot = (spec_entry **) htab_find_slot_with_hash (type_specializations,
7136                                                        &elt, hash, INSERT);
7137       *slot = ggc_alloc_spec_entry ();
7138       **slot = elt;
7139
7140       /* Note this use of the partial instantiation so we can check it
7141          later in maybe_process_partial_specialization.  */
7142       DECL_TEMPLATE_INSTANTIATIONS (templ)
7143         = tree_cons (arglist, t,
7144                      DECL_TEMPLATE_INSTANTIATIONS (templ));
7145
7146       if (TREE_CODE (t) == ENUMERAL_TYPE && !is_dependent_type)
7147         /* Now that the type has been registered on the instantiations
7148            list, we set up the enumerators.  Because the enumeration
7149            constants may involve the enumeration type itself, we make
7150            sure to register the type first, and then create the
7151            constants.  That way, doing tsubst_expr for the enumeration
7152            constants won't result in recursive calls here; we'll find
7153            the instantiation and exit above.  */
7154         tsubst_enum (template_type, t, arglist);
7155
7156       if (is_dependent_type)
7157         /* If the type makes use of template parameters, the
7158            code that generates debugging information will crash.  */
7159         DECL_IGNORED_P (TYPE_STUB_DECL (t)) = 1;
7160
7161       /* Possibly limit visibility based on template args.  */
7162       TREE_PUBLIC (type_decl) = 1;
7163       determine_visibility (type_decl);
7164
7165       return t;
7166     }
7167 }
7168
7169 /* Wrapper for lookup_template_class_1.  */
7170
7171 tree
7172 lookup_template_class (tree d1, tree arglist, tree in_decl, tree context,
7173                        int entering_scope, tsubst_flags_t complain)
7174 {
7175   tree ret;
7176   timevar_push (TV_TEMPLATE_INST);
7177   ret = lookup_template_class_1 (d1, arglist, in_decl, context,
7178                                  entering_scope, complain);
7179   timevar_pop (TV_TEMPLATE_INST);
7180   return ret;
7181 }
7182 \f
7183 struct pair_fn_data
7184 {
7185   tree_fn_t fn;
7186   void *data;
7187   /* True when we should also visit template parameters that occur in
7188      non-deduced contexts.  */
7189   bool include_nondeduced_p;
7190   struct pointer_set_t *visited;
7191 };
7192
7193 /* Called from for_each_template_parm via walk_tree.  */
7194
7195 static tree
7196 for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
7197 {
7198   tree t = *tp;
7199   struct pair_fn_data *pfd = (struct pair_fn_data *) d;
7200   tree_fn_t fn = pfd->fn;
7201   void *data = pfd->data;
7202
7203   if (TYPE_P (t)
7204       && (pfd->include_nondeduced_p || TREE_CODE (t) != TYPENAME_TYPE)
7205       && for_each_template_parm (TYPE_CONTEXT (t), fn, data, pfd->visited,
7206                                  pfd->include_nondeduced_p))
7207     return error_mark_node;
7208
7209   switch (TREE_CODE (t))
7210     {
7211     case RECORD_TYPE:
7212       if (TYPE_PTRMEMFUNC_P (t))
7213         break;
7214       /* Fall through.  */
7215
7216     case UNION_TYPE:
7217     case ENUMERAL_TYPE:
7218       if (!TYPE_TEMPLATE_INFO (t))
7219         *walk_subtrees = 0;
7220       else if (for_each_template_parm (TI_ARGS (TYPE_TEMPLATE_INFO (t)),
7221                                        fn, data, pfd->visited, 
7222                                        pfd->include_nondeduced_p))
7223         return error_mark_node;
7224       break;
7225
7226     case INTEGER_TYPE:
7227       if (for_each_template_parm (TYPE_MIN_VALUE (t),
7228                                   fn, data, pfd->visited, 
7229                                   pfd->include_nondeduced_p)
7230           || for_each_template_parm (TYPE_MAX_VALUE (t),
7231                                      fn, data, pfd->visited,
7232                                      pfd->include_nondeduced_p))
7233         return error_mark_node;
7234       break;
7235
7236     case METHOD_TYPE:
7237       /* Since we're not going to walk subtrees, we have to do this
7238          explicitly here.  */
7239       if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data,
7240                                   pfd->visited, pfd->include_nondeduced_p))
7241         return error_mark_node;
7242       /* Fall through.  */
7243
7244     case FUNCTION_TYPE:
7245       /* Check the return type.  */
7246       if (for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
7247                                   pfd->include_nondeduced_p))
7248         return error_mark_node;
7249
7250       /* Check the parameter types.  Since default arguments are not
7251          instantiated until they are needed, the TYPE_ARG_TYPES may
7252          contain expressions that involve template parameters.  But,
7253          no-one should be looking at them yet.  And, once they're
7254          instantiated, they don't contain template parameters, so
7255          there's no point in looking at them then, either.  */
7256       {
7257         tree parm;
7258
7259         for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
7260           if (for_each_template_parm (TREE_VALUE (parm), fn, data,
7261                                       pfd->visited, pfd->include_nondeduced_p))
7262             return error_mark_node;
7263
7264         /* Since we've already handled the TYPE_ARG_TYPES, we don't
7265            want walk_tree walking into them itself.  */
7266         *walk_subtrees = 0;
7267       }
7268       break;
7269
7270     case TYPEOF_TYPE:
7271     case UNDERLYING_TYPE:
7272       if (pfd->include_nondeduced_p
7273           && for_each_template_parm (TYPE_FIELDS (t), fn, data,
7274                                      pfd->visited, 
7275                                      pfd->include_nondeduced_p))
7276         return error_mark_node;
7277       break;
7278
7279     case FUNCTION_DECL:
7280     case VAR_DECL:
7281       if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
7282           && for_each_template_parm (DECL_TI_ARGS (t), fn, data,
7283                                      pfd->visited, pfd->include_nondeduced_p))
7284         return error_mark_node;
7285       /* Fall through.  */
7286
7287     case PARM_DECL:
7288     case CONST_DECL:
7289       if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t)
7290           && for_each_template_parm (DECL_INITIAL (t), fn, data,
7291                                      pfd->visited, pfd->include_nondeduced_p))
7292         return error_mark_node;
7293       if (DECL_CONTEXT (t)
7294           && pfd->include_nondeduced_p
7295           && for_each_template_parm (DECL_CONTEXT (t), fn, data,
7296                                      pfd->visited, pfd->include_nondeduced_p))
7297         return error_mark_node;
7298       break;
7299
7300     case BOUND_TEMPLATE_TEMPLATE_PARM:
7301       /* Record template parameters such as `T' inside `TT<T>'.  */
7302       if (for_each_template_parm (TYPE_TI_ARGS (t), fn, data, pfd->visited,
7303                                   pfd->include_nondeduced_p))
7304         return error_mark_node;
7305       /* Fall through.  */
7306
7307     case TEMPLATE_TEMPLATE_PARM:
7308     case TEMPLATE_TYPE_PARM:
7309     case TEMPLATE_PARM_INDEX:
7310       if (fn && (*fn)(t, data))
7311         return error_mark_node;
7312       else if (!fn)
7313         return error_mark_node;
7314       break;
7315
7316     case TEMPLATE_DECL:
7317       /* A template template parameter is encountered.  */
7318       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
7319           && for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
7320                                      pfd->include_nondeduced_p))
7321         return error_mark_node;
7322
7323       /* Already substituted template template parameter */
7324       *walk_subtrees = 0;
7325       break;
7326
7327     case TYPENAME_TYPE:
7328       if (!fn
7329           || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn,
7330                                      data, pfd->visited, 
7331                                      pfd->include_nondeduced_p))
7332         return error_mark_node;
7333       break;
7334
7335     case CONSTRUCTOR:
7336       if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
7337           && pfd->include_nondeduced_p
7338           && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
7339                                      (TREE_TYPE (t)), fn, data,
7340                                      pfd->visited, pfd->include_nondeduced_p))
7341         return error_mark_node;
7342       break;
7343
7344     case INDIRECT_REF:
7345     case COMPONENT_REF:
7346       /* If there's no type, then this thing must be some expression
7347          involving template parameters.  */
7348       if (!fn && !TREE_TYPE (t))
7349         return error_mark_node;
7350       break;
7351
7352     case MODOP_EXPR:
7353     case CAST_EXPR:
7354     case REINTERPRET_CAST_EXPR:
7355     case CONST_CAST_EXPR:
7356     case STATIC_CAST_EXPR:
7357     case DYNAMIC_CAST_EXPR:
7358     case ARROW_EXPR:
7359     case DOTSTAR_EXPR:
7360     case TYPEID_EXPR:
7361     case PSEUDO_DTOR_EXPR:
7362       if (!fn)
7363         return error_mark_node;
7364       break;
7365
7366     default:
7367       break;
7368     }
7369
7370   /* We didn't find any template parameters we liked.  */
7371   return NULL_TREE;
7372 }
7373
7374 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
7375    BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
7376    call FN with the parameter and the DATA.
7377    If FN returns nonzero, the iteration is terminated, and
7378    for_each_template_parm returns 1.  Otherwise, the iteration
7379    continues.  If FN never returns a nonzero value, the value
7380    returned by for_each_template_parm is 0.  If FN is NULL, it is
7381    considered to be the function which always returns 1.
7382
7383    If INCLUDE_NONDEDUCED_P, then this routine will also visit template
7384    parameters that occur in non-deduced contexts.  When false, only
7385    visits those template parameters that can be deduced.  */
7386
7387 static int
7388 for_each_template_parm (tree t, tree_fn_t fn, void* data,
7389                         struct pointer_set_t *visited,
7390                         bool include_nondeduced_p)
7391 {
7392   struct pair_fn_data pfd;
7393   int result;
7394
7395   /* Set up.  */
7396   pfd.fn = fn;
7397   pfd.data = data;
7398   pfd.include_nondeduced_p = include_nondeduced_p;
7399
7400   /* Walk the tree.  (Conceptually, we would like to walk without
7401      duplicates, but for_each_template_parm_r recursively calls
7402      for_each_template_parm, so we would need to reorganize a fair
7403      bit to use walk_tree_without_duplicates, so we keep our own
7404      visited list.)  */
7405   if (visited)
7406     pfd.visited = visited;
7407   else
7408     pfd.visited = pointer_set_create ();
7409   result = cp_walk_tree (&t,
7410                          for_each_template_parm_r,
7411                          &pfd,
7412                          pfd.visited) != NULL_TREE;
7413
7414   /* Clean up.  */
7415   if (!visited)
7416     {
7417       pointer_set_destroy (pfd.visited);
7418       pfd.visited = 0;
7419     }
7420
7421   return result;
7422 }
7423
7424 /* Returns true if T depends on any template parameter.  */
7425
7426 int
7427 uses_template_parms (tree t)
7428 {
7429   bool dependent_p;
7430   int saved_processing_template_decl;
7431
7432   saved_processing_template_decl = processing_template_decl;
7433   if (!saved_processing_template_decl)
7434     processing_template_decl = 1;
7435   if (TYPE_P (t))
7436     dependent_p = dependent_type_p (t);
7437   else if (TREE_CODE (t) == TREE_VEC)
7438     dependent_p = any_dependent_template_arguments_p (t);
7439   else if (TREE_CODE (t) == TREE_LIST)
7440     dependent_p = (uses_template_parms (TREE_VALUE (t))
7441                    || uses_template_parms (TREE_CHAIN (t)));
7442   else if (TREE_CODE (t) == TYPE_DECL)
7443     dependent_p = dependent_type_p (TREE_TYPE (t));
7444   else if (DECL_P (t)
7445            || EXPR_P (t)
7446            || TREE_CODE (t) == TEMPLATE_PARM_INDEX
7447            || TREE_CODE (t) == OVERLOAD
7448            || TREE_CODE (t) == BASELINK
7449            || TREE_CODE (t) == IDENTIFIER_NODE
7450            || TREE_CODE (t) == TRAIT_EXPR
7451            || TREE_CODE (t) == CONSTRUCTOR
7452            || CONSTANT_CLASS_P (t))
7453     dependent_p = (type_dependent_expression_p (t)
7454                    || value_dependent_expression_p (t));
7455   else
7456     {
7457       gcc_assert (t == error_mark_node);
7458       dependent_p = false;
7459     }
7460
7461   processing_template_decl = saved_processing_template_decl;
7462
7463   return dependent_p;
7464 }
7465
7466 /* Returns true if T depends on any template parameter with level LEVEL.  */
7467
7468 int
7469 uses_template_parms_level (tree t, int level)
7470 {
7471   return for_each_template_parm (t, template_parm_this_level_p, &level, NULL,
7472                                  /*include_nondeduced_p=*/true);
7473 }
7474
7475 static int tinst_depth;
7476 extern int max_tinst_depth;
7477 #ifdef GATHER_STATISTICS
7478 int depth_reached;
7479 #endif
7480 static int tinst_level_tick;
7481 static int last_template_error_tick;
7482
7483 /* We're starting to instantiate D; record the template instantiation context
7484    for diagnostics and to restore it later.  */
7485
7486 int
7487 push_tinst_level (tree d)
7488 {
7489   struct tinst_level *new_level;
7490
7491   if (tinst_depth >= max_tinst_depth)
7492     {
7493       /* If the instantiation in question still has unbound template parms,
7494          we don't really care if we can't instantiate it, so just return.
7495          This happens with base instantiation for implicit `typename'.  */
7496       if (uses_template_parms (d))
7497         return 0;
7498
7499       last_template_error_tick = tinst_level_tick;
7500       error ("template instantiation depth exceeds maximum of %d (use "
7501              "-ftemplate-depth= to increase the maximum) instantiating %qD",
7502              max_tinst_depth, d);
7503
7504       print_instantiation_context ();
7505
7506       return 0;
7507     }
7508
7509   new_level = ggc_alloc_tinst_level ();
7510   new_level->decl = d;
7511   new_level->locus = input_location;
7512   new_level->in_system_header_p = in_system_header;
7513   new_level->next = current_tinst_level;
7514   current_tinst_level = new_level;
7515
7516   ++tinst_depth;
7517 #ifdef GATHER_STATISTICS
7518   if (tinst_depth > depth_reached)
7519     depth_reached = tinst_depth;
7520 #endif
7521
7522   ++tinst_level_tick;
7523   return 1;
7524 }
7525
7526 /* We're done instantiating this template; return to the instantiation
7527    context.  */
7528
7529 void
7530 pop_tinst_level (void)
7531 {
7532   /* Restore the filename and line number stashed away when we started
7533      this instantiation.  */
7534   input_location = current_tinst_level->locus;
7535   current_tinst_level = current_tinst_level->next;
7536   --tinst_depth;
7537   ++tinst_level_tick;
7538 }
7539
7540 /* We're instantiating a deferred template; restore the template
7541    instantiation context in which the instantiation was requested, which
7542    is one step out from LEVEL.  Return the corresponding DECL or TYPE.  */
7543
7544 static tree
7545 reopen_tinst_level (struct tinst_level *level)
7546 {
7547   struct tinst_level *t;
7548
7549   tinst_depth = 0;
7550   for (t = level; t; t = t->next)
7551     ++tinst_depth;
7552
7553   current_tinst_level = level;
7554   pop_tinst_level ();
7555   return level->decl;
7556 }
7557
7558 /* Returns the TINST_LEVEL which gives the original instantiation
7559    context.  */
7560
7561 struct tinst_level *
7562 outermost_tinst_level (void)
7563 {
7564   struct tinst_level *level = current_tinst_level;
7565   if (level)
7566     while (level->next)
7567       level = level->next;
7568   return level;
7569 }
7570
7571 /* Returns TRUE if PARM is a parameter of the template TEMPL.  */
7572
7573 bool
7574 parameter_of_template_p (tree parm, tree templ)
7575 {
7576   tree parms;
7577   int i;
7578
7579   if (!parm || !templ)
7580     return false;
7581
7582   gcc_assert (DECL_TEMPLATE_PARM_P (parm));
7583   gcc_assert (TREE_CODE (templ) == TEMPLATE_DECL);
7584
7585   parms = DECL_TEMPLATE_PARMS (templ);
7586   parms = INNERMOST_TEMPLATE_PARMS (parms);
7587
7588   for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
7589     if (parm == TREE_VALUE (TREE_VEC_ELT (parms, i)))
7590       return true;
7591
7592   return false;
7593 }
7594
7595 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL.  ARGS is the
7596    vector of template arguments, as for tsubst.
7597
7598    Returns an appropriate tsubst'd friend declaration.  */
7599
7600 static tree
7601 tsubst_friend_function (tree decl, tree args)
7602 {
7603   tree new_friend;
7604
7605   if (TREE_CODE (decl) == FUNCTION_DECL
7606       && DECL_TEMPLATE_INSTANTIATION (decl)
7607       && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
7608     /* This was a friend declared with an explicit template
7609        argument list, e.g.:
7610
7611        friend void f<>(T);
7612
7613        to indicate that f was a template instantiation, not a new
7614        function declaration.  Now, we have to figure out what
7615        instantiation of what template.  */
7616     {
7617       tree template_id, arglist, fns;
7618       tree new_args;
7619       tree tmpl;
7620       tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
7621
7622       /* Friend functions are looked up in the containing namespace scope.
7623          We must enter that scope, to avoid finding member functions of the
7624          current class with same name.  */
7625       push_nested_namespace (ns);
7626       fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
7627                          tf_warning_or_error, NULL_TREE,
7628                          /*integral_constant_expression_p=*/false);
7629       pop_nested_namespace (ns);
7630       arglist = tsubst (DECL_TI_ARGS (decl), args,
7631                         tf_warning_or_error, NULL_TREE);
7632       template_id = lookup_template_function (fns, arglist);
7633
7634       new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
7635       tmpl = determine_specialization (template_id, new_friend,
7636                                        &new_args,
7637                                        /*need_member_template=*/0,
7638                                        TREE_VEC_LENGTH (args),
7639                                        tsk_none);
7640       return instantiate_template (tmpl, new_args, tf_error);
7641     }
7642
7643   new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
7644
7645   /* The NEW_FRIEND will look like an instantiation, to the
7646      compiler, but is not an instantiation from the point of view of
7647      the language.  For example, we might have had:
7648
7649      template <class T> struct S {
7650        template <class U> friend void f(T, U);
7651      };
7652
7653      Then, in S<int>, template <class U> void f(int, U) is not an
7654      instantiation of anything.  */
7655   if (new_friend == error_mark_node)
7656     return error_mark_node;
7657
7658   DECL_USE_TEMPLATE (new_friend) = 0;
7659   if (TREE_CODE (decl) == TEMPLATE_DECL)
7660     {
7661       DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
7662       DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
7663         = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
7664     }
7665
7666   /* The mangled name for the NEW_FRIEND is incorrect.  The function
7667      is not a template instantiation and should not be mangled like
7668      one.  Therefore, we forget the mangling here; we'll recompute it
7669      later if we need it.  */
7670   if (TREE_CODE (new_friend) != TEMPLATE_DECL)
7671     {
7672       SET_DECL_RTL (new_friend, NULL);
7673       SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
7674     }
7675
7676   if (DECL_NAMESPACE_SCOPE_P (new_friend))
7677     {
7678       tree old_decl;
7679       tree new_friend_template_info;
7680       tree new_friend_result_template_info;
7681       tree ns;
7682       int  new_friend_is_defn;
7683
7684       /* We must save some information from NEW_FRIEND before calling
7685          duplicate decls since that function will free NEW_FRIEND if
7686          possible.  */
7687       new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
7688       new_friend_is_defn =
7689             (DECL_INITIAL (DECL_TEMPLATE_RESULT
7690                            (template_for_substitution (new_friend)))
7691              != NULL_TREE);
7692       if (TREE_CODE (new_friend) == TEMPLATE_DECL)
7693         {
7694           /* This declaration is a `primary' template.  */
7695           DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
7696
7697           new_friend_result_template_info
7698             = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
7699         }
7700       else
7701         new_friend_result_template_info = NULL_TREE;
7702
7703       /* Make the init_value nonzero so pushdecl knows this is a defn.  */
7704       if (new_friend_is_defn)
7705         DECL_INITIAL (new_friend) = error_mark_node;
7706
7707       /* Inside pushdecl_namespace_level, we will push into the
7708          current namespace. However, the friend function should go
7709          into the namespace of the template.  */
7710       ns = decl_namespace_context (new_friend);
7711       push_nested_namespace (ns);
7712       old_decl = pushdecl_namespace_level (new_friend, /*is_friend=*/true);
7713       pop_nested_namespace (ns);
7714
7715       if (old_decl == error_mark_node)
7716         return error_mark_node;
7717
7718       if (old_decl != new_friend)
7719         {
7720           /* This new friend declaration matched an existing
7721              declaration.  For example, given:
7722
7723                template <class T> void f(T);
7724                template <class U> class C {
7725                  template <class T> friend void f(T) {}
7726                };
7727
7728              the friend declaration actually provides the definition
7729              of `f', once C has been instantiated for some type.  So,
7730              old_decl will be the out-of-class template declaration,
7731              while new_friend is the in-class definition.
7732
7733              But, if `f' was called before this point, the
7734              instantiation of `f' will have DECL_TI_ARGS corresponding
7735              to `T' but not to `U', references to which might appear
7736              in the definition of `f'.  Previously, the most general
7737              template for an instantiation of `f' was the out-of-class
7738              version; now it is the in-class version.  Therefore, we
7739              run through all specialization of `f', adding to their
7740              DECL_TI_ARGS appropriately.  In particular, they need a
7741              new set of outer arguments, corresponding to the
7742              arguments for this class instantiation.
7743
7744              The same situation can arise with something like this:
7745
7746                friend void f(int);
7747                template <class T> class C {
7748                  friend void f(T) {}
7749                };
7750
7751              when `C<int>' is instantiated.  Now, `f(int)' is defined
7752              in the class.  */
7753
7754           if (!new_friend_is_defn)
7755             /* On the other hand, if the in-class declaration does
7756                *not* provide a definition, then we don't want to alter
7757                existing definitions.  We can just leave everything
7758                alone.  */
7759             ;
7760           else
7761             {
7762               tree new_template = TI_TEMPLATE (new_friend_template_info);
7763               tree new_args = TI_ARGS (new_friend_template_info);
7764
7765               /* Overwrite whatever template info was there before, if
7766                  any, with the new template information pertaining to
7767                  the declaration.  */
7768               DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
7769
7770               if (TREE_CODE (old_decl) != TEMPLATE_DECL)
7771                 {
7772                   /* We should have called reregister_specialization in
7773                      duplicate_decls.  */
7774                   gcc_assert (retrieve_specialization (new_template,
7775                                                        new_args, 0)
7776                               == old_decl);
7777
7778                   /* Instantiate it if the global has already been used.  */
7779                   if (DECL_ODR_USED (old_decl))
7780                     instantiate_decl (old_decl, /*defer_ok=*/true,
7781                                       /*expl_inst_class_mem_p=*/false);
7782                 }
7783               else
7784                 {
7785                   tree t;
7786
7787                   /* Indicate that the old function template is a partial
7788                      instantiation.  */
7789                   DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
7790                     = new_friend_result_template_info;
7791
7792                   gcc_assert (new_template
7793                               == most_general_template (new_template));
7794                   gcc_assert (new_template != old_decl);
7795
7796                   /* Reassign any specializations already in the hash table
7797                      to the new more general template, and add the
7798                      additional template args.  */
7799                   for (t = DECL_TEMPLATE_INSTANTIATIONS (old_decl);
7800                        t != NULL_TREE;
7801                        t = TREE_CHAIN (t))
7802                     {
7803                       tree spec = TREE_VALUE (t);
7804                       spec_entry elt;
7805
7806                       elt.tmpl = old_decl;
7807                       elt.args = DECL_TI_ARGS (spec);
7808                       elt.spec = NULL_TREE;
7809
7810                       htab_remove_elt (decl_specializations, &elt);
7811
7812                       DECL_TI_ARGS (spec)
7813                         = add_outermost_template_args (new_args,
7814                                                        DECL_TI_ARGS (spec));
7815
7816                       register_specialization
7817                         (spec, new_template, DECL_TI_ARGS (spec), true, 0);
7818
7819                     }
7820                   DECL_TEMPLATE_INSTANTIATIONS (old_decl) = NULL_TREE;
7821                 }
7822             }
7823
7824           /* The information from NEW_FRIEND has been merged into OLD_DECL
7825              by duplicate_decls.  */
7826           new_friend = old_decl;
7827         }
7828     }
7829   else
7830     {
7831       tree context = DECL_CONTEXT (new_friend);
7832       bool dependent_p;
7833
7834       /* In the code
7835            template <class T> class C {
7836              template <class U> friend void C1<U>::f (); // case 1
7837              friend void C2<T>::f ();                    // case 2
7838            };
7839          we only need to make sure CONTEXT is a complete type for
7840          case 2.  To distinguish between the two cases, we note that
7841          CONTEXT of case 1 remains dependent type after tsubst while
7842          this isn't true for case 2.  */
7843       ++processing_template_decl;
7844       dependent_p = dependent_type_p (context);
7845       --processing_template_decl;
7846
7847       if (!dependent_p
7848           && !complete_type_or_else (context, NULL_TREE))
7849         return error_mark_node;
7850
7851       if (COMPLETE_TYPE_P (context))
7852         {
7853           /* Check to see that the declaration is really present, and,
7854              possibly obtain an improved declaration.  */
7855           tree fn = check_classfn (context,
7856                                    new_friend, NULL_TREE);
7857
7858           if (fn)
7859             new_friend = fn;
7860         }
7861     }
7862
7863   return new_friend;
7864 }
7865
7866 /* FRIEND_TMPL is a friend TEMPLATE_DECL.  ARGS is the vector of
7867    template arguments, as for tsubst.
7868
7869    Returns an appropriate tsubst'd friend type or error_mark_node on
7870    failure.  */
7871
7872 static tree
7873 tsubst_friend_class (tree friend_tmpl, tree args)
7874 {
7875   tree friend_type;
7876   tree tmpl;
7877   tree context;
7878
7879   context = CP_DECL_CONTEXT (friend_tmpl);
7880
7881   if (context != global_namespace)
7882     {
7883       if (TREE_CODE (context) == NAMESPACE_DECL)
7884         push_nested_namespace (context);
7885       else
7886         push_nested_class (tsubst (context, args, tf_none, NULL_TREE));
7887     }
7888
7889   /* Look for a class template declaration.  We look for hidden names
7890      because two friend declarations of the same template are the
7891      same.  For example, in:
7892
7893        struct A { 
7894          template <typename> friend class F;
7895        };
7896        template <typename> struct B { 
7897          template <typename> friend class F;
7898        };
7899
7900      both F templates are the same.  */
7901   tmpl = lookup_name_real (DECL_NAME (friend_tmpl), 0, 0,
7902                            /*block_p=*/true, 0, 
7903                            LOOKUP_COMPLAIN | LOOKUP_HIDDEN);
7904
7905   /* But, if we don't find one, it might be because we're in a
7906      situation like this:
7907
7908        template <class T>
7909        struct S {
7910          template <class U>
7911          friend struct S;
7912        };
7913
7914      Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
7915      for `S<int>', not the TEMPLATE_DECL.  */
7916   if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
7917     {
7918       tmpl = lookup_name_prefer_type (DECL_NAME (friend_tmpl), 1);
7919       tmpl = maybe_get_template_decl_from_type_decl (tmpl);
7920     }
7921
7922   if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
7923     {
7924       /* The friend template has already been declared.  Just
7925          check to see that the declarations match, and install any new
7926          default parameters.  We must tsubst the default parameters,
7927          of course.  We only need the innermost template parameters
7928          because that is all that redeclare_class_template will look
7929          at.  */
7930       if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
7931           > TMPL_ARGS_DEPTH (args))
7932         {
7933           tree parms;
7934           location_t saved_input_location;
7935           parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
7936                                          args, tf_warning_or_error);
7937
7938           saved_input_location = input_location;
7939           input_location = DECL_SOURCE_LOCATION (friend_tmpl);
7940           redeclare_class_template (TREE_TYPE (tmpl), parms);
7941           input_location = saved_input_location;
7942           
7943         }
7944
7945       friend_type = TREE_TYPE (tmpl);
7946     }
7947   else
7948     {
7949       /* The friend template has not already been declared.  In this
7950          case, the instantiation of the template class will cause the
7951          injection of this template into the global scope.  */
7952       tmpl = tsubst (friend_tmpl, args, tf_warning_or_error, NULL_TREE);
7953       if (tmpl == error_mark_node)
7954         return error_mark_node;
7955
7956       /* The new TMPL is not an instantiation of anything, so we
7957          forget its origins.  We don't reset CLASSTYPE_TI_TEMPLATE for
7958          the new type because that is supposed to be the corresponding
7959          template decl, i.e., TMPL.  */
7960       DECL_USE_TEMPLATE (tmpl) = 0;
7961       DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
7962       CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
7963       CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
7964         = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
7965
7966       /* Inject this template into the global scope.  */
7967       friend_type = TREE_TYPE (pushdecl_top_level_maybe_friend (tmpl, true));
7968     }
7969
7970   if (context != global_namespace)
7971     {
7972       if (TREE_CODE (context) == NAMESPACE_DECL)
7973         pop_nested_namespace (context);
7974       else
7975         pop_nested_class ();
7976     }
7977
7978   return friend_type;
7979 }
7980
7981 /* Returns zero if TYPE cannot be completed later due to circularity.
7982    Otherwise returns one.  */
7983
7984 static int
7985 can_complete_type_without_circularity (tree type)
7986 {
7987   if (type == NULL_TREE || type == error_mark_node)
7988     return 0;
7989   else if (COMPLETE_TYPE_P (type))
7990     return 1;
7991   else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
7992     return can_complete_type_without_circularity (TREE_TYPE (type));
7993   else if (CLASS_TYPE_P (type)
7994            && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
7995     return 0;
7996   else
7997     return 1;
7998 }
7999
8000 /* Apply any attributes which had to be deferred until instantiation
8001    time.  DECL_P, ATTRIBUTES and ATTR_FLAGS are as cplus_decl_attributes;
8002    ARGS, COMPLAIN, IN_DECL are as tsubst.  */
8003
8004 static void
8005 apply_late_template_attributes (tree *decl_p, tree attributes, int attr_flags,
8006                                 tree args, tsubst_flags_t complain, tree in_decl)
8007 {
8008   tree last_dep = NULL_TREE;
8009   tree t;
8010   tree *p;
8011
8012   for (t = attributes; t; t = TREE_CHAIN (t))
8013     if (ATTR_IS_DEPENDENT (t))
8014       {
8015         last_dep = t;
8016         attributes = copy_list (attributes);
8017         break;
8018       }
8019
8020   if (DECL_P (*decl_p))
8021     {
8022       if (TREE_TYPE (*decl_p) == error_mark_node)
8023         return;
8024       p = &DECL_ATTRIBUTES (*decl_p);
8025     }
8026   else
8027     p = &TYPE_ATTRIBUTES (*decl_p);
8028
8029   if (last_dep)
8030     {
8031       tree late_attrs = NULL_TREE;
8032       tree *q = &late_attrs;
8033
8034       for (*p = attributes; *p; )
8035         {
8036           t = *p;
8037           if (ATTR_IS_DEPENDENT (t))
8038             {
8039               *p = TREE_CHAIN (t);
8040               TREE_CHAIN (t) = NULL_TREE;
8041               /* If the first attribute argument is an identifier, don't
8042                  pass it through tsubst.  Attributes like mode, format,
8043                  cleanup and several target specific attributes expect it
8044                  unmodified.  */
8045               if (TREE_VALUE (t)
8046                   && TREE_CODE (TREE_VALUE (t)) == TREE_LIST
8047                   && TREE_VALUE (TREE_VALUE (t))
8048                   && (TREE_CODE (TREE_VALUE (TREE_VALUE (t)))
8049                       == IDENTIFIER_NODE))
8050                 {
8051                   tree chain
8052                     = tsubst_expr (TREE_CHAIN (TREE_VALUE (t)), args, complain,
8053                                    in_decl,
8054                                    /*integral_constant_expression_p=*/false);
8055                   if (chain != TREE_CHAIN (TREE_VALUE (t)))
8056                     TREE_VALUE (t)
8057                       = tree_cons (NULL_TREE, TREE_VALUE (TREE_VALUE (t)),
8058                                    chain);
8059                 }
8060               else
8061                 TREE_VALUE (t)
8062                   = tsubst_expr (TREE_VALUE (t), args, complain, in_decl,
8063                                  /*integral_constant_expression_p=*/false);
8064               *q = t;
8065               q = &TREE_CHAIN (t);
8066             }
8067           else
8068             p = &TREE_CHAIN (t);
8069         }
8070
8071       cplus_decl_attributes (decl_p, late_attrs, attr_flags);
8072     }
8073 }
8074
8075 /* Perform (or defer) access check for typedefs that were referenced
8076    from within the template TMPL code.
8077    This is a subroutine of instantiate_template and instantiate_class_template.
8078    TMPL is the template to consider and TARGS is the list of arguments of
8079    that template.  */
8080
8081 static void
8082 perform_typedefs_access_check (tree tmpl, tree targs)
8083 {
8084   location_t saved_location;
8085   int i;
8086   qualified_typedef_usage_t *iter;
8087
8088   if (!tmpl
8089       || (!CLASS_TYPE_P (tmpl)
8090           && TREE_CODE (tmpl) != FUNCTION_DECL))
8091     return;
8092
8093   saved_location = input_location;
8094   FOR_EACH_VEC_ELT (qualified_typedef_usage_t,
8095                     get_types_needing_access_check (tmpl),
8096                     i, iter)
8097     {
8098       tree type_decl = iter->typedef_decl;
8099       tree type_scope = iter->context;
8100
8101       if (!type_decl || !type_scope || !CLASS_TYPE_P (type_scope))
8102         continue;
8103
8104       if (uses_template_parms (type_decl))
8105         type_decl = tsubst (type_decl, targs, tf_error, NULL_TREE);
8106       if (uses_template_parms (type_scope))
8107         type_scope = tsubst (type_scope, targs, tf_error, NULL_TREE);
8108
8109       /* Make access check error messages point to the location
8110          of the use of the typedef.  */
8111       input_location = iter->locus;
8112       perform_or_defer_access_check (TYPE_BINFO (type_scope),
8113                                      type_decl, type_decl);
8114     }
8115     input_location = saved_location;
8116 }
8117
8118 static tree
8119 instantiate_class_template_1 (tree type)
8120 {
8121   tree templ, args, pattern, t, member;
8122   tree typedecl;
8123   tree pbinfo;
8124   tree base_list;
8125   unsigned int saved_maximum_field_alignment;
8126
8127   if (type == error_mark_node)
8128     return error_mark_node;
8129
8130   if (COMPLETE_OR_OPEN_TYPE_P (type)
8131       || uses_template_parms (type))
8132     return type;
8133
8134   /* Figure out which template is being instantiated.  */
8135   templ = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
8136   gcc_assert (TREE_CODE (templ) == TEMPLATE_DECL);
8137
8138   /* Determine what specialization of the original template to
8139      instantiate.  */
8140   t = most_specialized_class (type, templ, tf_warning_or_error);
8141   if (t == error_mark_node)
8142     {
8143       TYPE_BEING_DEFINED (type) = 1;
8144       return error_mark_node;
8145     }
8146   else if (t)
8147     {
8148       /* This TYPE is actually an instantiation of a partial
8149          specialization.  We replace the innermost set of ARGS with
8150          the arguments appropriate for substitution.  For example,
8151          given:
8152
8153            template <class T> struct S {};
8154            template <class T> struct S<T*> {};
8155
8156          and supposing that we are instantiating S<int*>, ARGS will
8157          presently be {int*} -- but we need {int}.  */
8158       pattern = TREE_TYPE (t);
8159       args = TREE_PURPOSE (t);
8160     }
8161   else
8162     {
8163       pattern = TREE_TYPE (templ);
8164       args = CLASSTYPE_TI_ARGS (type);
8165     }
8166
8167   /* If the template we're instantiating is incomplete, then clearly
8168      there's nothing we can do.  */
8169   if (!COMPLETE_TYPE_P (pattern))
8170     return type;
8171
8172   /* If we've recursively instantiated too many templates, stop.  */
8173   if (! push_tinst_level (type))
8174     return type;
8175
8176   /* Now we're really doing the instantiation.  Mark the type as in
8177      the process of being defined.  */
8178   TYPE_BEING_DEFINED (type) = 1;
8179
8180   /* We may be in the middle of deferred access check.  Disable
8181      it now.  */
8182   push_deferring_access_checks (dk_no_deferred);
8183
8184   push_to_top_level ();
8185   /* Use #pragma pack from the template context.  */
8186   saved_maximum_field_alignment = maximum_field_alignment;
8187   maximum_field_alignment = TYPE_PRECISION (pattern);
8188
8189   SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
8190
8191   /* Set the input location to the most specialized template definition.
8192      This is needed if tsubsting causes an error.  */
8193   typedecl = TYPE_MAIN_DECL (pattern);
8194   input_location = DECL_SOURCE_LOCATION (TYPE_NAME (type)) =
8195     DECL_SOURCE_LOCATION (typedecl);
8196
8197   TYPE_HAS_USER_CONSTRUCTOR (type) = TYPE_HAS_USER_CONSTRUCTOR (pattern);
8198   TYPE_HAS_NEW_OPERATOR (type) = TYPE_HAS_NEW_OPERATOR (pattern);
8199   TYPE_HAS_ARRAY_NEW_OPERATOR (type) = TYPE_HAS_ARRAY_NEW_OPERATOR (pattern);
8200   TYPE_GETS_DELETE (type) = TYPE_GETS_DELETE (pattern);
8201   TYPE_HAS_COPY_ASSIGN (type) = TYPE_HAS_COPY_ASSIGN (pattern);
8202   TYPE_HAS_CONST_COPY_ASSIGN (type) = TYPE_HAS_CONST_COPY_ASSIGN (pattern);
8203   TYPE_HAS_COPY_CTOR (type) = TYPE_HAS_COPY_CTOR (pattern);
8204   TYPE_HAS_CONST_COPY_CTOR (type) = TYPE_HAS_CONST_COPY_CTOR (pattern);
8205   TYPE_HAS_DEFAULT_CONSTRUCTOR (type) = TYPE_HAS_DEFAULT_CONSTRUCTOR (pattern);
8206   TYPE_HAS_CONVERSION (type) = TYPE_HAS_CONVERSION (pattern);
8207   TYPE_PACKED (type) = TYPE_PACKED (pattern);
8208   TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
8209   TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
8210   TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
8211   if (ANON_AGGR_TYPE_P (pattern))
8212     SET_ANON_AGGR_TYPE_P (type);
8213   if (CLASSTYPE_VISIBILITY_SPECIFIED (pattern))
8214     {
8215       CLASSTYPE_VISIBILITY_SPECIFIED (type) = 1;
8216       CLASSTYPE_VISIBILITY (type) = CLASSTYPE_VISIBILITY (pattern);
8217     }
8218   CLASSTYPE_FINAL (type) = CLASSTYPE_FINAL (pattern);
8219
8220   pbinfo = TYPE_BINFO (pattern);
8221
8222   /* We should never instantiate a nested class before its enclosing
8223      class; we need to look up the nested class by name before we can
8224      instantiate it, and that lookup should instantiate the enclosing
8225      class.  */
8226   gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
8227               || COMPLETE_OR_OPEN_TYPE_P (TYPE_CONTEXT (type)));
8228
8229   base_list = NULL_TREE;
8230   if (BINFO_N_BASE_BINFOS (pbinfo))
8231     {
8232       tree pbase_binfo;
8233       tree pushed_scope;
8234       int i;
8235
8236       /* We must enter the scope containing the type, as that is where
8237          the accessibility of types named in dependent bases are
8238          looked up from.  */
8239       pushed_scope = push_scope (CP_TYPE_CONTEXT (type));
8240
8241       /* Substitute into each of the bases to determine the actual
8242          basetypes.  */
8243       for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
8244         {
8245           tree base;
8246           tree access = BINFO_BASE_ACCESS (pbinfo, i);
8247           tree expanded_bases = NULL_TREE;
8248           int idx, len = 1;
8249
8250           if (PACK_EXPANSION_P (BINFO_TYPE (pbase_binfo)))
8251             {
8252               expanded_bases = 
8253                 tsubst_pack_expansion (BINFO_TYPE (pbase_binfo),
8254                                        args, tf_error, NULL_TREE);
8255               if (expanded_bases == error_mark_node)
8256                 continue;
8257
8258               len = TREE_VEC_LENGTH (expanded_bases);
8259             }
8260
8261           for (idx = 0; idx < len; idx++)
8262             {
8263               if (expanded_bases)
8264                 /* Extract the already-expanded base class.  */
8265                 base = TREE_VEC_ELT (expanded_bases, idx);
8266               else
8267                 /* Substitute to figure out the base class.  */
8268                 base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error, 
8269                                NULL_TREE);
8270
8271               if (base == error_mark_node)
8272                 continue;
8273
8274               base_list = tree_cons (access, base, base_list);
8275               if (BINFO_VIRTUAL_P (pbase_binfo))
8276                 TREE_TYPE (base_list) = integer_type_node;
8277             }
8278         }
8279
8280       /* The list is now in reverse order; correct that.  */
8281       base_list = nreverse (base_list);
8282
8283       if (pushed_scope)
8284         pop_scope (pushed_scope);
8285     }
8286   /* Now call xref_basetypes to set up all the base-class
8287      information.  */
8288   xref_basetypes (type, base_list);
8289
8290   apply_late_template_attributes (&type, TYPE_ATTRIBUTES (pattern),
8291                                   (int) ATTR_FLAG_TYPE_IN_PLACE,
8292                                   args, tf_error, NULL_TREE);
8293   fixup_attribute_variants (type);
8294
8295   /* Now that our base classes are set up, enter the scope of the
8296      class, so that name lookups into base classes, etc. will work
8297      correctly.  This is precisely analogous to what we do in
8298      begin_class_definition when defining an ordinary non-template
8299      class, except we also need to push the enclosing classes.  */
8300   push_nested_class (type);
8301
8302   /* Now members are processed in the order of declaration.  */
8303   for (member = CLASSTYPE_DECL_LIST (pattern);
8304        member; member = TREE_CHAIN (member))
8305     {
8306       tree t = TREE_VALUE (member);
8307
8308       if (TREE_PURPOSE (member))
8309         {
8310           if (TYPE_P (t))
8311             {
8312               /* Build new CLASSTYPE_NESTED_UTDS.  */
8313
8314               tree newtag;
8315               bool class_template_p;
8316
8317               class_template_p = (TREE_CODE (t) != ENUMERAL_TYPE
8318                                   && TYPE_LANG_SPECIFIC (t)
8319                                   && CLASSTYPE_IS_TEMPLATE (t));
8320               /* If the member is a class template, then -- even after
8321                  substitution -- there may be dependent types in the
8322                  template argument list for the class.  We increment
8323                  PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
8324                  that function will assume that no types are dependent
8325                  when outside of a template.  */
8326               if (class_template_p)
8327                 ++processing_template_decl;
8328               newtag = tsubst (t, args, tf_error, NULL_TREE);
8329               if (class_template_p)
8330                 --processing_template_decl;
8331               if (newtag == error_mark_node)
8332                 continue;
8333
8334               if (TREE_CODE (newtag) != ENUMERAL_TYPE)
8335                 {
8336                   tree name = TYPE_IDENTIFIER (t);
8337
8338                   if (class_template_p)
8339                     /* Unfortunately, lookup_template_class sets
8340                        CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
8341                        instantiation (i.e., for the type of a member
8342                        template class nested within a template class.)
8343                        This behavior is required for
8344                        maybe_process_partial_specialization to work
8345                        correctly, but is not accurate in this case;
8346                        the TAG is not an instantiation of anything.
8347                        (The corresponding TEMPLATE_DECL is an
8348                        instantiation, but the TYPE is not.) */
8349                     CLASSTYPE_USE_TEMPLATE (newtag) = 0;
8350
8351                   /* Now, we call pushtag to put this NEWTAG into the scope of
8352                      TYPE.  We first set up the IDENTIFIER_TYPE_VALUE to avoid
8353                      pushtag calling push_template_decl.  We don't have to do
8354                      this for enums because it will already have been done in
8355                      tsubst_enum.  */
8356                   if (name)
8357                     SET_IDENTIFIER_TYPE_VALUE (name, newtag);
8358                   pushtag (name, newtag, /*tag_scope=*/ts_current);
8359                 }
8360             }
8361           else if (TREE_CODE (t) == FUNCTION_DECL
8362                    || DECL_FUNCTION_TEMPLATE_P (t))
8363             {
8364               /* Build new TYPE_METHODS.  */
8365               tree r;
8366
8367               if (TREE_CODE (t) == TEMPLATE_DECL)
8368                 ++processing_template_decl;
8369               r = tsubst (t, args, tf_error, NULL_TREE);
8370               if (TREE_CODE (t) == TEMPLATE_DECL)
8371                 --processing_template_decl;
8372               set_current_access_from_decl (r);
8373               finish_member_declaration (r);
8374             }
8375           else
8376             {
8377               /* Build new TYPE_FIELDS.  */
8378               if (TREE_CODE (t) == STATIC_ASSERT)
8379                 {
8380                   tree condition = 
8381                     tsubst_expr (STATIC_ASSERT_CONDITION (t), args, 
8382                                  tf_warning_or_error, NULL_TREE,
8383                                  /*integral_constant_expression_p=*/true);
8384                   finish_static_assert (condition,
8385                                         STATIC_ASSERT_MESSAGE (t), 
8386                                         STATIC_ASSERT_SOURCE_LOCATION (t),
8387                                         /*member_p=*/true);
8388                 }
8389               else if (TREE_CODE (t) != CONST_DECL)
8390                 {
8391                   tree r;
8392
8393                   /* The file and line for this declaration, to
8394                      assist in error message reporting.  Since we
8395                      called push_tinst_level above, we don't need to
8396                      restore these.  */
8397                   input_location = DECL_SOURCE_LOCATION (t);
8398
8399                   if (TREE_CODE (t) == TEMPLATE_DECL)
8400                     ++processing_template_decl;
8401                   r = tsubst (t, args, tf_warning_or_error, NULL_TREE);
8402                   if (TREE_CODE (t) == TEMPLATE_DECL)
8403                     --processing_template_decl;
8404                   if (TREE_CODE (r) == VAR_DECL)
8405                     {
8406                       /* In [temp.inst]:
8407
8408                            [t]he initialization (and any associated
8409                            side-effects) of a static data member does
8410                            not occur unless the static data member is
8411                            itself used in a way that requires the
8412                            definition of the static data member to
8413                            exist.
8414
8415                          Therefore, we do not substitute into the
8416                          initialized for the static data member here.  */
8417                       finish_static_data_member_decl
8418                         (r,
8419                          /*init=*/NULL_TREE,
8420                          /*init_const_expr_p=*/false,
8421                          /*asmspec_tree=*/NULL_TREE,
8422                          /*flags=*/0);
8423                     }
8424                   else if (TREE_CODE (r) == FIELD_DECL)
8425                     {
8426                       /* Determine whether R has a valid type and can be
8427                          completed later.  If R is invalid, then it is
8428                          replaced by error_mark_node so that it will not be
8429                          added to TYPE_FIELDS.  */
8430                       tree rtype = TREE_TYPE (r);
8431                       if (can_complete_type_without_circularity (rtype))
8432                         complete_type (rtype);
8433
8434                       if (!COMPLETE_TYPE_P (rtype))
8435                         {
8436                           cxx_incomplete_type_error (r, rtype);
8437                           r = error_mark_node;
8438                         }
8439                     }
8440
8441                   /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
8442                      such a thing will already have been added to the field
8443                      list by tsubst_enum in finish_member_declaration in the
8444                      CLASSTYPE_NESTED_UTDS case above.  */
8445                   if (!(TREE_CODE (r) == TYPE_DECL
8446                         && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
8447                         && DECL_ARTIFICIAL (r)))
8448                     {
8449                       set_current_access_from_decl (r);
8450                       finish_member_declaration (r);
8451                     }
8452                 }
8453             }
8454         }
8455       else
8456         {
8457           if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t))
8458             {
8459               /* Build new CLASSTYPE_FRIEND_CLASSES.  */
8460
8461               tree friend_type = t;
8462               bool adjust_processing_template_decl = false;
8463
8464               if (TREE_CODE (friend_type) == TEMPLATE_DECL)
8465                 {
8466                   /* template <class T> friend class C;  */
8467                   friend_type = tsubst_friend_class (friend_type, args);
8468                   adjust_processing_template_decl = true;
8469                 }
8470               else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
8471                 {
8472                   /* template <class T> friend class C::D;  */
8473                   friend_type = tsubst (friend_type, args,
8474                                         tf_warning_or_error, NULL_TREE);
8475                   if (TREE_CODE (friend_type) == TEMPLATE_DECL)
8476                     friend_type = TREE_TYPE (friend_type);
8477                   adjust_processing_template_decl = true;
8478                 }
8479               else if (TREE_CODE (friend_type) == TYPENAME_TYPE
8480                        || TREE_CODE (friend_type) == TEMPLATE_TYPE_PARM)
8481                 {
8482                   /* This could be either
8483
8484                        friend class T::C;
8485
8486                      when dependent_type_p is false or
8487
8488                        template <class U> friend class T::C;
8489
8490                      otherwise.  */
8491                   friend_type = tsubst (friend_type, args,
8492                                         tf_warning_or_error, NULL_TREE);
8493                   /* Bump processing_template_decl for correct
8494                      dependent_type_p calculation.  */
8495                   ++processing_template_decl;
8496                   if (dependent_type_p (friend_type))
8497                     adjust_processing_template_decl = true;
8498                   --processing_template_decl;
8499                 }
8500               else if (!CLASSTYPE_USE_TEMPLATE (friend_type)
8501                        && hidden_name_p (TYPE_NAME (friend_type)))
8502                 {
8503                   /* friend class C;
8504
8505                      where C hasn't been declared yet.  Let's lookup name
8506                      from namespace scope directly, bypassing any name that
8507                      come from dependent base class.  */
8508                   tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
8509
8510                   /* The call to xref_tag_from_type does injection for friend
8511                      classes.  */
8512                   push_nested_namespace (ns);
8513                   friend_type =
8514                     xref_tag_from_type (friend_type, NULL_TREE,
8515                                         /*tag_scope=*/ts_current);
8516                   pop_nested_namespace (ns);
8517                 }
8518               else if (uses_template_parms (friend_type))
8519                 /* friend class C<T>;  */
8520                 friend_type = tsubst (friend_type, args,
8521                                       tf_warning_or_error, NULL_TREE);
8522               /* Otherwise it's
8523
8524                    friend class C;
8525
8526                  where C is already declared or
8527
8528                    friend class C<int>;
8529
8530                  We don't have to do anything in these cases.  */
8531
8532               if (adjust_processing_template_decl)
8533                 /* Trick make_friend_class into realizing that the friend
8534                    we're adding is a template, not an ordinary class.  It's
8535                    important that we use make_friend_class since it will
8536                    perform some error-checking and output cross-reference
8537                    information.  */
8538                 ++processing_template_decl;
8539
8540               if (friend_type != error_mark_node)
8541                 make_friend_class (type, friend_type, /*complain=*/false);
8542
8543               if (adjust_processing_template_decl)
8544                 --processing_template_decl;
8545             }
8546           else
8547             {
8548               /* Build new DECL_FRIENDLIST.  */
8549               tree r;
8550
8551               /* The file and line for this declaration, to
8552                  assist in error message reporting.  Since we
8553                  called push_tinst_level above, we don't need to
8554                  restore these.  */
8555               input_location = DECL_SOURCE_LOCATION (t);
8556
8557               if (TREE_CODE (t) == TEMPLATE_DECL)
8558                 {
8559                   ++processing_template_decl;
8560                   push_deferring_access_checks (dk_no_check);
8561                 }
8562
8563               r = tsubst_friend_function (t, args);
8564               add_friend (type, r, /*complain=*/false);
8565               if (TREE_CODE (t) == TEMPLATE_DECL)
8566                 {
8567                   pop_deferring_access_checks ();
8568                   --processing_template_decl;
8569                 }
8570             }
8571         }
8572     }
8573
8574   if (CLASSTYPE_LAMBDA_EXPR (type))
8575     maybe_add_lambda_conv_op (type);
8576
8577   /* Set the file and line number information to whatever is given for
8578      the class itself.  This puts error messages involving generated
8579      implicit functions at a predictable point, and the same point
8580      that would be used for non-template classes.  */
8581   input_location = DECL_SOURCE_LOCATION (typedecl);
8582
8583   unreverse_member_declarations (type);
8584   finish_struct_1 (type);
8585   TYPE_BEING_DEFINED (type) = 0;
8586
8587   /* We don't instantiate default arguments for member functions.  14.7.1:
8588
8589      The implicit instantiation of a class template specialization causes
8590      the implicit instantiation of the declarations, but not of the
8591      definitions or default arguments, of the class member functions,
8592      member classes, static data members and member templates....  */
8593
8594   /* Some typedefs referenced from within the template code need to be access
8595      checked at template instantiation time, i.e now. These types were
8596      added to the template at parsing time. Let's get those and perform
8597      the access checks then.  */
8598   perform_typedefs_access_check (pattern, args);
8599   perform_deferred_access_checks ();
8600   pop_nested_class ();
8601   maximum_field_alignment = saved_maximum_field_alignment;
8602   pop_from_top_level ();
8603   pop_deferring_access_checks ();
8604   pop_tinst_level ();
8605
8606   /* The vtable for a template class can be emitted in any translation
8607      unit in which the class is instantiated.  When there is no key
8608      method, however, finish_struct_1 will already have added TYPE to
8609      the keyed_classes list.  */
8610   if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
8611     keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
8612
8613   return type;
8614 }
8615
8616 /* Wrapper for instantiate_class_template_1.  */
8617
8618 tree
8619 instantiate_class_template (tree type)
8620 {
8621   tree ret;
8622   timevar_push (TV_TEMPLATE_INST);
8623   ret = instantiate_class_template_1 (type);
8624   timevar_pop (TV_TEMPLATE_INST);
8625   return ret;
8626 }
8627
8628 static tree
8629 tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
8630 {
8631   tree r;
8632
8633   if (!t)
8634     r = t;
8635   else if (TYPE_P (t))
8636     r = tsubst (t, args, complain, in_decl);
8637   else
8638     {
8639       if (!(complain & tf_warning))
8640         ++c_inhibit_evaluation_warnings;
8641       r = tsubst_expr (t, args, complain, in_decl,
8642                        /*integral_constant_expression_p=*/true);
8643       if (!(complain & tf_warning))
8644         --c_inhibit_evaluation_warnings;
8645     }
8646   return r;
8647 }
8648
8649 /* Give a chain SPEC_PARM of PARM_DECLs, pack them into a
8650    NONTYPE_ARGUMENT_PACK.  */
8651
8652 static tree
8653 make_fnparm_pack (tree spec_parm)
8654 {
8655   /* Collect all of the extra "packed" parameters into an
8656      argument pack.  */
8657   tree parmvec;
8658   tree parmtypevec;
8659   tree argpack = make_node (NONTYPE_ARGUMENT_PACK);
8660   tree argtypepack = cxx_make_type (TYPE_ARGUMENT_PACK);
8661   int i, len = list_length (spec_parm);
8662
8663   /* Fill in PARMVEC and PARMTYPEVEC with all of the parameters.  */
8664   parmvec = make_tree_vec (len);
8665   parmtypevec = make_tree_vec (len);
8666   for (i = 0; i < len; i++, spec_parm = DECL_CHAIN (spec_parm))
8667     {
8668       TREE_VEC_ELT (parmvec, i) = spec_parm;
8669       TREE_VEC_ELT (parmtypevec, i) = TREE_TYPE (spec_parm);
8670     }
8671
8672   /* Build the argument packs.  */
8673   SET_ARGUMENT_PACK_ARGS (argpack, parmvec);
8674   SET_ARGUMENT_PACK_ARGS (argtypepack, parmtypevec);
8675   TREE_TYPE (argpack) = argtypepack;
8676
8677   return argpack;
8678 }        
8679
8680 /* Substitute ARGS into T, which is an pack expansion
8681    (i.e. TYPE_PACK_EXPANSION or EXPR_PACK_EXPANSION). Returns a
8682    TREE_VEC with the substituted arguments, a PACK_EXPANSION_* node
8683    (if only a partial substitution could be performed) or
8684    ERROR_MARK_NODE if there was an error.  */
8685 tree
8686 tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
8687                        tree in_decl)
8688 {
8689   tree pattern;
8690   tree pack, packs = NULL_TREE, unsubstituted_packs = NULL_TREE;
8691   int i, len = -1;
8692   tree result;
8693   int incomplete = 0;
8694   htab_t saved_local_specializations = NULL;
8695
8696   gcc_assert (PACK_EXPANSION_P (t));
8697   pattern = PACK_EXPANSION_PATTERN (t);
8698
8699   /* Determine the argument packs that will instantiate the parameter
8700      packs used in the expansion expression. While we're at it,
8701      compute the number of arguments to be expanded and make sure it
8702      is consistent.  */
8703   for (pack = PACK_EXPANSION_PARAMETER_PACKS (t); pack; 
8704        pack = TREE_CHAIN (pack))
8705     {
8706       tree parm_pack = TREE_VALUE (pack);
8707       tree arg_pack = NULL_TREE;
8708       tree orig_arg = NULL_TREE;
8709
8710       if (TREE_CODE (parm_pack) == PARM_DECL)
8711         {
8712           if (!cp_unevaluated_operand)
8713             arg_pack = retrieve_local_specialization (parm_pack);
8714           else
8715             {
8716               /* We can't rely on local_specializations for a parameter
8717                  name used later in a function declaration (such as in a
8718                  late-specified return type).  Even if it exists, it might
8719                  have the wrong value for a recursive call.  Just make a
8720                  dummy decl, since it's only used for its type.  */
8721               arg_pack = tsubst_decl (parm_pack, args, complain);
8722               if (arg_pack && FUNCTION_PARAMETER_PACK_P (arg_pack))
8723                 /* Partial instantiation of the parm_pack, we can't build
8724                    up an argument pack yet.  */
8725                 arg_pack = NULL_TREE;
8726               else
8727                 arg_pack = make_fnparm_pack (arg_pack);
8728             }
8729         }
8730       else
8731         {
8732           int level, idx, levels;
8733           template_parm_level_and_index (parm_pack, &level, &idx);
8734
8735           levels = TMPL_ARGS_DEPTH (args);
8736           if (level <= levels)
8737             arg_pack = TMPL_ARG (args, level, idx);
8738         }
8739
8740       orig_arg = arg_pack;
8741       if (arg_pack && TREE_CODE (arg_pack) == ARGUMENT_PACK_SELECT)
8742         arg_pack = ARGUMENT_PACK_SELECT_FROM_PACK (arg_pack);
8743       
8744       if (arg_pack && !ARGUMENT_PACK_P (arg_pack))
8745         /* This can only happen if we forget to expand an argument
8746            pack somewhere else. Just return an error, silently.  */
8747         {
8748           result = make_tree_vec (1);
8749           TREE_VEC_ELT (result, 0) = error_mark_node;
8750           return result;
8751         }
8752
8753       /* For clarity in the comments below let's use the
8754          representation 'argument_pack<elements>' to denote an
8755          argument pack and its elements.
8756
8757          In the 'if' block below, we want to detect cases where
8758          ARG_PACK is argument_pack<PARM_PACK...>.  I.e, we want to
8759          check if ARG_PACK is an argument pack which sole element is
8760          the expansion of PARM_PACK.  That argument pack is typically
8761          created by template_parm_to_arg when passed a parameter
8762          pack.  */
8763       if (arg_pack
8764           && TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack)) == 1
8765           && PACK_EXPANSION_P (TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0)))
8766         {
8767           tree expansion = TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0);
8768           tree pattern = PACK_EXPANSION_PATTERN (expansion);
8769           /* So we have an argument_pack<P...>.  We want to test if P
8770              is actually PARM_PACK.  We will not use cp_tree_equal to
8771              test P and PARM_PACK because during type fixup (by
8772              fixup_template_parm) P can be a pre-fixup version of a
8773              type and PARM_PACK be its post-fixup version.
8774              cp_tree_equal would consider them as different even
8775              though we would want to consider them compatible for our
8776              precise purpose here.
8777
8778              Thus we are going to consider that P and PARM_PACK are
8779              compatible if they have the same DECL.  */
8780           if ((/* If ARG_PACK is a type parameter pack named by the
8781                   same DECL as parm_pack ...  */
8782                (TYPE_P (pattern)
8783                 && TYPE_P (parm_pack)
8784                 && TYPE_NAME (pattern) == TYPE_NAME (parm_pack))
8785                /* ... or if ARG_PACK is a non-type parameter
8786                   named by the same DECL as parm_pack ...  */
8787                || (TREE_CODE (pattern) == TEMPLATE_PARM_INDEX
8788                    && TREE_CODE (parm_pack) == PARM_DECL
8789                    && TEMPLATE_PARM_DECL (pattern)
8790                    == TEMPLATE_PARM_DECL (DECL_INITIAL (parm_pack))))
8791               && template_parameter_pack_p (pattern))
8792             /* ... then the argument pack that the parameter maps to
8793                is just an expansion of the parameter itself, such as
8794                one would find in the implicit typedef of a class
8795                inside the class itself.  Consider this parameter
8796                "unsubstituted", so that we will maintain the outer
8797                pack expansion.  */
8798             arg_pack = NULL_TREE;
8799         }
8800           
8801       if (arg_pack)
8802         {
8803           int my_len = 
8804             TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack));
8805
8806           /* It's all-or-nothing with incomplete argument packs.  */
8807           if (incomplete && !ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
8808             return error_mark_node;
8809           
8810           if (ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
8811             incomplete = 1;
8812
8813           if (len < 0)
8814             len = my_len;
8815           else if (len != my_len)
8816             {
8817               if (incomplete)
8818                 /* We got explicit args for some packs but not others;
8819                    do nothing now and try again after deduction.  */
8820                 return t;
8821               if (TREE_CODE (t) == TYPE_PACK_EXPANSION)
8822                 error ("mismatched argument pack lengths while expanding "
8823                        "%<%T%>",
8824                        pattern);
8825               else
8826                 error ("mismatched argument pack lengths while expanding "
8827                        "%<%E%>",
8828                        pattern);
8829               return error_mark_node;
8830             }
8831
8832           /* Keep track of the parameter packs and their corresponding
8833              argument packs.  */
8834           packs = tree_cons (parm_pack, arg_pack, packs);
8835           TREE_TYPE (packs) = orig_arg;
8836         }
8837       else
8838         /* We can't substitute for this parameter pack.  */
8839         unsubstituted_packs = tree_cons (TREE_PURPOSE (pack),
8840                                          TREE_VALUE (pack),
8841                                          unsubstituted_packs);
8842     }
8843
8844   /* We cannot expand this expansion expression, because we don't have
8845      all of the argument packs we need. Substitute into the pattern
8846      and return a PACK_EXPANSION_*. The caller will need to deal with
8847      that.  */
8848   if (unsubstituted_packs)
8849     {
8850       tree new_pat;
8851       if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
8852         new_pat = tsubst_expr (pattern, args, complain, in_decl,
8853                                /*integral_constant_expression_p=*/false);
8854       else
8855         new_pat = tsubst (pattern, args, complain, in_decl);
8856       return make_pack_expansion (new_pat);
8857     }
8858
8859   /* We could not find any argument packs that work.  */
8860   if (len < 0)
8861     return error_mark_node;
8862
8863   if (cp_unevaluated_operand)
8864     {
8865       /* We're in a late-specified return type, so create our own local
8866          specializations table; the current table is either NULL or (in the
8867          case of recursive unification) might have bindings that we don't
8868          want to use or alter.  */
8869       saved_local_specializations = local_specializations;
8870       local_specializations = htab_create (37,
8871                                            hash_local_specialization,
8872                                            eq_local_specializations,
8873                                            NULL);
8874     }
8875
8876   /* For each argument in each argument pack, substitute into the
8877      pattern.  */
8878   result = make_tree_vec (len + incomplete);
8879   for (i = 0; i < len + incomplete; ++i)
8880     {
8881       /* For parameter pack, change the substitution of the parameter
8882          pack to the ith argument in its argument pack, then expand
8883          the pattern.  */
8884       for (pack = packs; pack; pack = TREE_CHAIN (pack))
8885         {
8886           tree parm = TREE_PURPOSE (pack);
8887
8888           if (TREE_CODE (parm) == PARM_DECL)
8889             {
8890               /* Select the Ith argument from the pack.  */
8891               tree arg = make_node (ARGUMENT_PACK_SELECT);
8892               ARGUMENT_PACK_SELECT_FROM_PACK (arg) = TREE_VALUE (pack);
8893               ARGUMENT_PACK_SELECT_INDEX (arg) = i;
8894               mark_used (parm);
8895               register_local_specialization (arg, parm);
8896             }
8897           else
8898             {
8899               tree value = parm;
8900               int idx, level;
8901               template_parm_level_and_index (parm, &level, &idx);
8902               
8903               if (i < len) 
8904                 {
8905                   /* Select the Ith argument from the pack. */
8906                   value = make_node (ARGUMENT_PACK_SELECT);
8907                   ARGUMENT_PACK_SELECT_FROM_PACK (value) = TREE_VALUE (pack);
8908                   ARGUMENT_PACK_SELECT_INDEX (value) = i;
8909                 }
8910
8911               /* Update the corresponding argument.  */
8912               TMPL_ARG (args, level, idx) = value;
8913             }
8914         }
8915
8916       /* Substitute into the PATTERN with the altered arguments.  */
8917       if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
8918         TREE_VEC_ELT (result, i) = 
8919           tsubst_expr (pattern, args, complain, in_decl,
8920                        /*integral_constant_expression_p=*/false);
8921       else
8922         TREE_VEC_ELT (result, i) = tsubst (pattern, args, complain, in_decl);
8923
8924       if (i == len)
8925         /* When we have incomplete argument packs, the last "expanded"
8926            result is itself a pack expansion, which allows us
8927            to deduce more arguments.  */
8928         TREE_VEC_ELT (result, i) = 
8929           make_pack_expansion (TREE_VEC_ELT (result, i));
8930
8931       if (TREE_VEC_ELT (result, i) == error_mark_node)
8932         {
8933           result = error_mark_node;
8934           break;
8935         }
8936     }
8937
8938   /* Update ARGS to restore the substitution from parameter packs to
8939      their argument packs.  */
8940   for (pack = packs; pack; pack = TREE_CHAIN (pack))
8941     {
8942       tree parm = TREE_PURPOSE (pack);
8943
8944       if (TREE_CODE (parm) == PARM_DECL)
8945         register_local_specialization (TREE_TYPE (pack), parm);
8946       else
8947         {
8948           int idx, level;
8949           template_parm_level_and_index (parm, &level, &idx);
8950           
8951           /* Update the corresponding argument.  */
8952           if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
8953             TREE_VEC_ELT (TREE_VEC_ELT (args, level -1 ), idx) =
8954               TREE_TYPE (pack);
8955           else
8956             TREE_VEC_ELT (args, idx) = TREE_TYPE (pack);
8957         }
8958     }
8959
8960   if (saved_local_specializations)
8961     {
8962       htab_delete (local_specializations);
8963       local_specializations = saved_local_specializations;
8964     }
8965   
8966   return result;
8967 }
8968
8969 /* Given PARM_DECL PARM, find the corresponding PARM_DECL in the template
8970    TMPL.  We do this using DECL_PARM_INDEX, which should work even with
8971    parameter packs; all parms generated from a function parameter pack will
8972    have the same DECL_PARM_INDEX.  */
8973
8974 tree
8975 get_pattern_parm (tree parm, tree tmpl)
8976 {
8977   tree pattern = DECL_TEMPLATE_RESULT (tmpl);
8978   tree patparm;
8979
8980   if (DECL_ARTIFICIAL (parm))
8981     {
8982       for (patparm = DECL_ARGUMENTS (pattern);
8983            patparm; patparm = DECL_CHAIN (patparm))
8984         if (DECL_ARTIFICIAL (patparm)
8985             && DECL_NAME (parm) == DECL_NAME (patparm))
8986           break;
8987     }
8988   else
8989     {
8990       patparm = FUNCTION_FIRST_USER_PARM (DECL_TEMPLATE_RESULT (tmpl));
8991       patparm = chain_index (DECL_PARM_INDEX (parm)-1, patparm);
8992       gcc_assert (DECL_PARM_INDEX (patparm)
8993                   == DECL_PARM_INDEX (parm));
8994     }
8995
8996   return patparm;
8997 }
8998
8999 /* Substitute ARGS into the vector or list of template arguments T.  */
9000
9001 static tree
9002 tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
9003 {
9004   tree orig_t = t;
9005   int len, need_new = 0, i, expanded_len_adjust = 0, out;
9006   tree *elts;
9007
9008   if (t == error_mark_node)
9009     return error_mark_node;
9010
9011   len = TREE_VEC_LENGTH (t);
9012   elts = XALLOCAVEC (tree, len);
9013
9014   for (i = 0; i < len; i++)
9015     {
9016       tree orig_arg = TREE_VEC_ELT (t, i);
9017       tree new_arg;
9018
9019       if (TREE_CODE (orig_arg) == TREE_VEC)
9020         new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
9021       else if (PACK_EXPANSION_P (orig_arg))
9022         {
9023           /* Substitute into an expansion expression.  */
9024           new_arg = tsubst_pack_expansion (orig_arg, args, complain, in_decl);
9025
9026           if (TREE_CODE (new_arg) == TREE_VEC)
9027             /* Add to the expanded length adjustment the number of
9028                expanded arguments. We subtract one from this
9029                measurement, because the argument pack expression
9030                itself is already counted as 1 in
9031                LEN. EXPANDED_LEN_ADJUST can actually be negative, if
9032                the argument pack is empty.  */
9033             expanded_len_adjust += TREE_VEC_LENGTH (new_arg) - 1;
9034         }
9035       else if (ARGUMENT_PACK_P (orig_arg))
9036         {
9037           /* Substitute into each of the arguments.  */
9038           new_arg = TYPE_P (orig_arg)
9039             ? cxx_make_type (TREE_CODE (orig_arg))
9040             : make_node (TREE_CODE (orig_arg));
9041           
9042           SET_ARGUMENT_PACK_ARGS (
9043             new_arg,
9044             tsubst_template_args (ARGUMENT_PACK_ARGS (orig_arg),
9045                                   args, complain, in_decl));
9046
9047           if (ARGUMENT_PACK_ARGS (new_arg) == error_mark_node)
9048             new_arg = error_mark_node;
9049
9050           if (TREE_CODE (new_arg) == NONTYPE_ARGUMENT_PACK) {
9051             TREE_TYPE (new_arg) = tsubst (TREE_TYPE (orig_arg), args,
9052                                           complain, in_decl);
9053             TREE_CONSTANT (new_arg) = TREE_CONSTANT (orig_arg);
9054
9055             if (TREE_TYPE (new_arg) == error_mark_node)
9056               new_arg = error_mark_node;
9057           }
9058         }
9059       else
9060         new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
9061
9062       if (new_arg == error_mark_node)
9063         return error_mark_node;
9064
9065       elts[i] = new_arg;
9066       if (new_arg != orig_arg)
9067         need_new = 1;
9068     }
9069
9070   if (!need_new)
9071     return t;
9072
9073   /* Make space for the expanded arguments coming from template
9074      argument packs.  */
9075   t = make_tree_vec (len + expanded_len_adjust);
9076   /* ORIG_T can contain TREE_VECs. That happens if ORIG_T contains the
9077      arguments for a member template.
9078      In that case each TREE_VEC in ORIG_T represents a level of template
9079      arguments, and ORIG_T won't carry any non defaulted argument count.
9080      It will rather be the nested TREE_VECs that will carry one.
9081      In other words, ORIG_T carries a non defaulted argument count only
9082      if it doesn't contain any nested TREE_VEC.  */
9083   if (NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t))
9084     {
9085       int count = GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t);
9086       count += expanded_len_adjust;
9087       SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (t, count);
9088     }
9089   for (i = 0, out = 0; i < len; i++)
9090     {
9091       if ((PACK_EXPANSION_P (TREE_VEC_ELT (orig_t, i))
9092            || ARGUMENT_PACK_P (TREE_VEC_ELT (orig_t, i)))
9093           && TREE_CODE (elts[i]) == TREE_VEC)
9094         {
9095           int idx;
9096
9097           /* Now expand the template argument pack "in place".  */
9098           for (idx = 0; idx < TREE_VEC_LENGTH (elts[i]); idx++, out++)
9099             TREE_VEC_ELT (t, out) = TREE_VEC_ELT (elts[i], idx);
9100         }
9101       else
9102         {
9103           TREE_VEC_ELT (t, out) = elts[i];
9104           out++;
9105         }
9106     }
9107
9108   return t;
9109 }
9110
9111 /* Return the result of substituting ARGS into the template parameters
9112    given by PARMS.  If there are m levels of ARGS and m + n levels of
9113    PARMS, then the result will contain n levels of PARMS.  For
9114    example, if PARMS is `template <class T> template <class U>
9115    template <T*, U, class V>' and ARGS is {{int}, {double}} then the
9116    result will be `template <int*, double, class V>'.  */
9117
9118 static tree
9119 tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
9120 {
9121   tree r = NULL_TREE;
9122   tree* new_parms;
9123
9124   /* When substituting into a template, we must set
9125      PROCESSING_TEMPLATE_DECL as the template parameters may be
9126      dependent if they are based on one-another, and the dependency
9127      predicates are short-circuit outside of templates.  */
9128   ++processing_template_decl;
9129
9130   for (new_parms = &r;
9131        TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
9132        new_parms = &(TREE_CHAIN (*new_parms)),
9133          parms = TREE_CHAIN (parms))
9134     {
9135       tree new_vec =
9136         make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
9137       int i;
9138
9139       for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
9140         {
9141           tree tuple;
9142
9143           if (parms == error_mark_node)
9144             continue;
9145
9146           tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
9147
9148           if (tuple == error_mark_node)
9149             continue;
9150
9151           TREE_VEC_ELT (new_vec, i) =
9152             tsubst_template_parm (tuple, args, complain);
9153         }
9154
9155       *new_parms =
9156         tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
9157                              - TMPL_ARGS_DEPTH (args)),
9158                    new_vec, NULL_TREE);
9159     }
9160
9161   --processing_template_decl;
9162
9163   return r;
9164 }
9165
9166 /* Return the result of substituting ARGS into one template parameter
9167    given by T. T Must be a TREE_LIST which TREE_VALUE is the template
9168    parameter and which TREE_PURPOSE is the default argument of the
9169    template parameter.  */
9170
9171 static tree
9172 tsubst_template_parm (tree t, tree args, tsubst_flags_t complain)
9173 {
9174   tree default_value, parm_decl;
9175
9176   if (args == NULL_TREE
9177       || t == NULL_TREE
9178       || t == error_mark_node)
9179     return t;
9180
9181   gcc_assert (TREE_CODE (t) == TREE_LIST);
9182
9183   default_value = TREE_PURPOSE (t);
9184   parm_decl = TREE_VALUE (t);
9185
9186   parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
9187   if (TREE_CODE (parm_decl) == PARM_DECL
9188       && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl), complain))
9189     parm_decl = error_mark_node;
9190   default_value = tsubst_template_arg (default_value, args,
9191                                        complain, NULL_TREE);
9192
9193   return build_tree_list (default_value, parm_decl);
9194 }
9195
9196 /* Substitute the ARGS into the indicated aggregate (or enumeration)
9197    type T.  If T is not an aggregate or enumeration type, it is
9198    handled as if by tsubst.  IN_DECL is as for tsubst.  If
9199    ENTERING_SCOPE is nonzero, T is the context for a template which
9200    we are presently tsubst'ing.  Return the substituted value.  */
9201
9202 static tree
9203 tsubst_aggr_type (tree t,
9204                   tree args,
9205                   tsubst_flags_t complain,
9206                   tree in_decl,
9207                   int entering_scope)
9208 {
9209   if (t == NULL_TREE)
9210     return NULL_TREE;
9211
9212   switch (TREE_CODE (t))
9213     {
9214     case RECORD_TYPE:
9215       if (TYPE_PTRMEMFUNC_P (t))
9216         return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
9217
9218       /* Else fall through.  */
9219     case ENUMERAL_TYPE:
9220     case UNION_TYPE:
9221       if (TYPE_TEMPLATE_INFO (t) && uses_template_parms (t))
9222         {
9223           tree argvec;
9224           tree context;
9225           tree r;
9226           int saved_unevaluated_operand;
9227           int saved_inhibit_evaluation_warnings;
9228
9229           /* In "sizeof(X<I>)" we need to evaluate "I".  */
9230           saved_unevaluated_operand = cp_unevaluated_operand;
9231           cp_unevaluated_operand = 0;
9232           saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
9233           c_inhibit_evaluation_warnings = 0;
9234
9235           /* First, determine the context for the type we are looking
9236              up.  */
9237           context = TYPE_CONTEXT (t);
9238           if (context)
9239             {
9240               context = tsubst_aggr_type (context, args, complain,
9241                                           in_decl, /*entering_scope=*/1);
9242               /* If context is a nested class inside a class template,
9243                  it may still need to be instantiated (c++/33959).  */
9244               if (TYPE_P (context))
9245                 context = complete_type (context);
9246             }
9247
9248           /* Then, figure out what arguments are appropriate for the
9249              type we are trying to find.  For example, given:
9250
9251                template <class T> struct S;
9252                template <class T, class U> void f(T, U) { S<U> su; }
9253
9254              and supposing that we are instantiating f<int, double>,
9255              then our ARGS will be {int, double}, but, when looking up
9256              S we only want {double}.  */
9257           argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
9258                                          complain, in_decl);
9259           if (argvec == error_mark_node)
9260             r = error_mark_node;
9261           else
9262             {
9263               r = lookup_template_class (t, argvec, in_decl, context,
9264                                          entering_scope, complain);
9265               r = cp_build_qualified_type_real (r, cp_type_quals (t), complain);
9266             }
9267
9268           cp_unevaluated_operand = saved_unevaluated_operand;
9269           c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
9270
9271           return r;
9272         }
9273       else
9274         /* This is not a template type, so there's nothing to do.  */
9275         return t;
9276
9277     default:
9278       return tsubst (t, args, complain, in_decl);
9279     }
9280 }
9281
9282 /* Substitute into the default argument ARG (a default argument for
9283    FN), which has the indicated TYPE.  */
9284
9285 tree
9286 tsubst_default_argument (tree fn, tree type, tree arg)
9287 {
9288   tree saved_class_ptr = NULL_TREE;
9289   tree saved_class_ref = NULL_TREE;
9290
9291   /* This can happen in invalid code.  */
9292   if (TREE_CODE (arg) == DEFAULT_ARG)
9293     return arg;
9294
9295   /* This default argument came from a template.  Instantiate the
9296      default argument here, not in tsubst.  In the case of
9297      something like:
9298
9299        template <class T>
9300        struct S {
9301          static T t();
9302          void f(T = t());
9303        };
9304
9305      we must be careful to do name lookup in the scope of S<T>,
9306      rather than in the current class.  */
9307   push_access_scope (fn);
9308   /* The "this" pointer is not valid in a default argument.  */
9309   if (cfun)
9310     {
9311       saved_class_ptr = current_class_ptr;
9312       cp_function_chain->x_current_class_ptr = NULL_TREE;
9313       saved_class_ref = current_class_ref;
9314       cp_function_chain->x_current_class_ref = NULL_TREE;
9315     }
9316
9317   push_deferring_access_checks(dk_no_deferred);
9318   /* The default argument expression may cause implicitly defined
9319      member functions to be synthesized, which will result in garbage
9320      collection.  We must treat this situation as if we were within
9321      the body of function so as to avoid collecting live data on the
9322      stack.  */
9323   ++function_depth;
9324   arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
9325                      tf_warning_or_error, NULL_TREE,
9326                      /*integral_constant_expression_p=*/false);
9327   --function_depth;
9328   pop_deferring_access_checks();
9329
9330   /* Restore the "this" pointer.  */
9331   if (cfun)
9332     {
9333       cp_function_chain->x_current_class_ptr = saved_class_ptr;
9334       cp_function_chain->x_current_class_ref = saved_class_ref;
9335     }
9336
9337   /* Make sure the default argument is reasonable.  */
9338   arg = check_default_argument (type, arg);
9339
9340   pop_access_scope (fn);
9341
9342   return arg;
9343 }
9344
9345 /* Substitute into all the default arguments for FN.  */
9346
9347 static void
9348 tsubst_default_arguments (tree fn)
9349 {
9350   tree arg;
9351   tree tmpl_args;
9352
9353   tmpl_args = DECL_TI_ARGS (fn);
9354
9355   /* If this function is not yet instantiated, we certainly don't need
9356      its default arguments.  */
9357   if (uses_template_parms (tmpl_args))
9358     return;
9359   /* Don't do this again for clones.  */
9360   if (DECL_CLONED_FUNCTION_P (fn))
9361     return;
9362
9363   for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
9364        arg;
9365        arg = TREE_CHAIN (arg))
9366     if (TREE_PURPOSE (arg))
9367       TREE_PURPOSE (arg) = tsubst_default_argument (fn,
9368                                                     TREE_VALUE (arg),
9369                                                     TREE_PURPOSE (arg));
9370 }
9371
9372 /* Substitute the ARGS into the T, which is a _DECL.  Return the
9373    result of the substitution.  Issue error and warning messages under
9374    control of COMPLAIN.  */
9375
9376 static tree
9377 tsubst_decl (tree t, tree args, tsubst_flags_t complain)
9378 {
9379 #define RETURN(EXP) do { r = (EXP); goto out; } while(0)
9380   location_t saved_loc;
9381   tree r = NULL_TREE;
9382   tree in_decl = t;
9383   hashval_t hash = 0;
9384
9385   /* Set the filename and linenumber to improve error-reporting.  */
9386   saved_loc = input_location;
9387   input_location = DECL_SOURCE_LOCATION (t);
9388
9389   switch (TREE_CODE (t))
9390     {
9391     case TEMPLATE_DECL:
9392       {
9393         /* We can get here when processing a member function template,
9394            member class template, or template template parameter.  */
9395         tree decl = DECL_TEMPLATE_RESULT (t);
9396         tree spec;
9397         tree tmpl_args;
9398         tree full_args;
9399
9400         if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
9401           {
9402             /* Template template parameter is treated here.  */
9403             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9404             if (new_type == error_mark_node)
9405               RETURN (error_mark_node);
9406
9407             r = copy_decl (t);
9408             DECL_CHAIN (r) = NULL_TREE;
9409             TREE_TYPE (r) = new_type;
9410             DECL_TEMPLATE_RESULT (r)
9411               = build_decl (DECL_SOURCE_LOCATION (decl),
9412                             TYPE_DECL, DECL_NAME (decl), new_type);
9413             DECL_TEMPLATE_PARMS (r)
9414               = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
9415                                        complain);
9416             TYPE_NAME (new_type) = r;
9417             break;
9418           }
9419
9420         /* We might already have an instance of this template.
9421            The ARGS are for the surrounding class type, so the
9422            full args contain the tsubst'd args for the context,
9423            plus the innermost args from the template decl.  */
9424         tmpl_args = DECL_CLASS_TEMPLATE_P (t)
9425           ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
9426           : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
9427         /* Because this is a template, the arguments will still be
9428            dependent, even after substitution.  If
9429            PROCESSING_TEMPLATE_DECL is not set, the dependency
9430            predicates will short-circuit.  */
9431         ++processing_template_decl;
9432         full_args = tsubst_template_args (tmpl_args, args,
9433                                           complain, in_decl);
9434         --processing_template_decl;
9435         if (full_args == error_mark_node)
9436           RETURN (error_mark_node);
9437
9438         /* If this is a default template template argument,
9439            tsubst might not have changed anything.  */
9440         if (full_args == tmpl_args)
9441           RETURN (t);
9442
9443         hash = hash_tmpl_and_args (t, full_args);
9444         spec = retrieve_specialization (t, full_args, hash);
9445         if (spec != NULL_TREE)
9446           {
9447             r = spec;
9448             break;
9449           }
9450
9451         /* Make a new template decl.  It will be similar to the
9452            original, but will record the current template arguments.
9453            We also create a new function declaration, which is just
9454            like the old one, but points to this new template, rather
9455            than the old one.  */
9456         r = copy_decl (t);
9457         gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
9458         DECL_CHAIN (r) = NULL_TREE;
9459
9460         DECL_TEMPLATE_INFO (r) = build_template_info (t, args);
9461
9462         if (TREE_CODE (decl) == TYPE_DECL)
9463           {
9464             tree new_type;
9465             ++processing_template_decl;
9466             new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9467             --processing_template_decl;
9468             if (new_type == error_mark_node)
9469               RETURN (error_mark_node);
9470
9471             TREE_TYPE (r) = new_type;
9472             CLASSTYPE_TI_TEMPLATE (new_type) = r;
9473             DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
9474             DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
9475             DECL_CONTEXT (r) = TYPE_CONTEXT (new_type);
9476           }
9477         else
9478           {
9479             tree new_decl;
9480             ++processing_template_decl;
9481             new_decl = tsubst (decl, args, complain, in_decl);
9482             --processing_template_decl;
9483             if (new_decl == error_mark_node)
9484               RETURN (error_mark_node);
9485
9486             DECL_TEMPLATE_RESULT (r) = new_decl;
9487             DECL_TI_TEMPLATE (new_decl) = r;
9488             TREE_TYPE (r) = TREE_TYPE (new_decl);
9489             DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
9490             DECL_CONTEXT (r) = DECL_CONTEXT (new_decl);
9491           }
9492
9493         SET_DECL_IMPLICIT_INSTANTIATION (r);
9494         DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
9495         DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
9496
9497         /* The template parameters for this new template are all the
9498            template parameters for the old template, except the
9499            outermost level of parameters.  */
9500         DECL_TEMPLATE_PARMS (r)
9501           = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
9502                                    complain);
9503
9504         if (PRIMARY_TEMPLATE_P (t))
9505           DECL_PRIMARY_TEMPLATE (r) = r;
9506
9507         if (TREE_CODE (decl) != TYPE_DECL)
9508           /* Record this non-type partial instantiation.  */
9509           register_specialization (r, t,
9510                                    DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)),
9511                                    false, hash);
9512       }
9513       break;
9514
9515     case FUNCTION_DECL:
9516       {
9517         tree ctx;
9518         tree argvec = NULL_TREE;
9519         tree *friends;
9520         tree gen_tmpl;
9521         tree type;
9522         int member;
9523         int args_depth;
9524         int parms_depth;
9525
9526         /* Nobody should be tsubst'ing into non-template functions.  */
9527         gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
9528
9529         if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
9530           {
9531             tree spec;
9532             bool dependent_p;
9533
9534             /* If T is not dependent, just return it.  We have to
9535                increment PROCESSING_TEMPLATE_DECL because
9536                value_dependent_expression_p assumes that nothing is
9537                dependent when PROCESSING_TEMPLATE_DECL is zero.  */
9538             ++processing_template_decl;
9539             dependent_p = value_dependent_expression_p (t);
9540             --processing_template_decl;
9541             if (!dependent_p)
9542               RETURN (t);
9543
9544             /* Calculate the most general template of which R is a
9545                specialization, and the complete set of arguments used to
9546                specialize R.  */
9547             gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
9548             argvec = tsubst_template_args (DECL_TI_ARGS
9549                                           (DECL_TEMPLATE_RESULT
9550                                                  (DECL_TI_TEMPLATE (t))),
9551                                            args, complain, in_decl);
9552
9553             /* Check to see if we already have this specialization.  */
9554             hash = hash_tmpl_and_args (gen_tmpl, argvec);
9555             spec = retrieve_specialization (gen_tmpl, argvec, hash);
9556
9557             if (spec)
9558               {
9559                 r = spec;
9560                 break;
9561               }
9562
9563             /* We can see more levels of arguments than parameters if
9564                there was a specialization of a member template, like
9565                this:
9566
9567                  template <class T> struct S { template <class U> void f(); }
9568                  template <> template <class U> void S<int>::f(U);
9569
9570                Here, we'll be substituting into the specialization,
9571                because that's where we can find the code we actually
9572                want to generate, but we'll have enough arguments for
9573                the most general template.
9574
9575                We also deal with the peculiar case:
9576
9577                  template <class T> struct S {
9578                    template <class U> friend void f();
9579                  };
9580                  template <class U> void f() {}
9581                  template S<int>;
9582                  template void f<double>();
9583
9584                Here, the ARGS for the instantiation of will be {int,
9585                double}.  But, we only need as many ARGS as there are
9586                levels of template parameters in CODE_PATTERN.  We are
9587                careful not to get fooled into reducing the ARGS in
9588                situations like:
9589
9590                  template <class T> struct S { template <class U> void f(U); }
9591                  template <class T> template <> void S<T>::f(int) {}
9592
9593                which we can spot because the pattern will be a
9594                specialization in this case.  */
9595             args_depth = TMPL_ARGS_DEPTH (args);
9596             parms_depth =
9597               TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
9598             if (args_depth > parms_depth
9599                 && !DECL_TEMPLATE_SPECIALIZATION (t))
9600               args = get_innermost_template_args (args, parms_depth);
9601           }
9602         else
9603           {
9604             /* This special case arises when we have something like this:
9605
9606                  template <class T> struct S {
9607                    friend void f<int>(int, double);
9608                  };
9609
9610                Here, the DECL_TI_TEMPLATE for the friend declaration
9611                will be an IDENTIFIER_NODE.  We are being called from
9612                tsubst_friend_function, and we want only to create a
9613                new decl (R) with appropriate types so that we can call
9614                determine_specialization.  */
9615             gen_tmpl = NULL_TREE;
9616           }
9617
9618         if (DECL_CLASS_SCOPE_P (t))
9619           {
9620             if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
9621               member = 2;
9622             else
9623               member = 1;
9624             ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
9625                                     complain, t, /*entering_scope=*/1);
9626           }
9627         else
9628           {
9629             member = 0;
9630             ctx = DECL_CONTEXT (t);
9631           }
9632         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9633         if (type == error_mark_node)
9634           RETURN (error_mark_node);
9635
9636         /* We do NOT check for matching decls pushed separately at this
9637            point, as they may not represent instantiations of this
9638            template, and in any case are considered separate under the
9639            discrete model.  */
9640         r = copy_decl (t);
9641         DECL_USE_TEMPLATE (r) = 0;
9642         TREE_TYPE (r) = type;
9643         /* Clear out the mangled name and RTL for the instantiation.  */
9644         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
9645         SET_DECL_RTL (r, NULL);
9646         /* Leave DECL_INITIAL set on deleted instantiations.  */
9647         if (!DECL_DELETED_FN (r))
9648           DECL_INITIAL (r) = NULL_TREE;
9649         DECL_CONTEXT (r) = ctx;
9650
9651         if (member && DECL_CONV_FN_P (r))
9652           /* Type-conversion operator.  Reconstruct the name, in
9653              case it's the name of one of the template's parameters.  */
9654           DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
9655
9656         DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
9657                                      complain, t);
9658         DECL_RESULT (r) = NULL_TREE;
9659
9660         TREE_STATIC (r) = 0;
9661         TREE_PUBLIC (r) = TREE_PUBLIC (t);
9662         DECL_EXTERNAL (r) = 1;
9663         /* If this is an instantiation of a function with internal
9664            linkage, we already know what object file linkage will be
9665            assigned to the instantiation.  */
9666         DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
9667         DECL_DEFER_OUTPUT (r) = 0;
9668         DECL_CHAIN (r) = NULL_TREE;
9669         DECL_PENDING_INLINE_INFO (r) = 0;
9670         DECL_PENDING_INLINE_P (r) = 0;
9671         DECL_SAVED_TREE (r) = NULL_TREE;
9672         DECL_STRUCT_FUNCTION (r) = NULL;
9673         TREE_USED (r) = 0;
9674         /* We'll re-clone as appropriate in instantiate_template.  */
9675         DECL_CLONED_FUNCTION (r) = NULL_TREE;
9676
9677         /* If we aren't complaining now, return on error before we register
9678            the specialization so that we'll complain eventually.  */
9679         if ((complain & tf_error) == 0
9680             && IDENTIFIER_OPNAME_P (DECL_NAME (r))
9681             && !grok_op_properties (r, /*complain=*/false))
9682           RETURN (error_mark_node);
9683
9684         /* Set up the DECL_TEMPLATE_INFO for R.  There's no need to do
9685            this in the special friend case mentioned above where
9686            GEN_TMPL is NULL.  */
9687         if (gen_tmpl)
9688           {
9689             DECL_TEMPLATE_INFO (r)
9690               = build_template_info (gen_tmpl, argvec);
9691             SET_DECL_IMPLICIT_INSTANTIATION (r);
9692             register_specialization (r, gen_tmpl, argvec, false, hash);
9693
9694             /* We're not supposed to instantiate default arguments
9695                until they are called, for a template.  But, for a
9696                declaration like:
9697
9698                  template <class T> void f ()
9699                  { extern void g(int i = T()); }
9700
9701                we should do the substitution when the template is
9702                instantiated.  We handle the member function case in
9703                instantiate_class_template since the default arguments
9704                might refer to other members of the class.  */
9705             if (!member
9706                 && !PRIMARY_TEMPLATE_P (gen_tmpl)
9707                 && !uses_template_parms (argvec))
9708               tsubst_default_arguments (r);
9709           }
9710         else
9711           DECL_TEMPLATE_INFO (r) = NULL_TREE;
9712
9713         /* Copy the list of befriending classes.  */
9714         for (friends = &DECL_BEFRIENDING_CLASSES (r);
9715              *friends;
9716              friends = &TREE_CHAIN (*friends))
9717           {
9718             *friends = copy_node (*friends);
9719             TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
9720                                             args, complain,
9721                                             in_decl);
9722           }
9723
9724         if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
9725           {
9726             maybe_retrofit_in_chrg (r);
9727             if (DECL_CONSTRUCTOR_P (r))
9728               grok_ctor_properties (ctx, r);
9729             /* If this is an instantiation of a member template, clone it.
9730                If it isn't, that'll be handled by
9731                clone_constructors_and_destructors.  */
9732             if (PRIMARY_TEMPLATE_P (gen_tmpl))
9733               clone_function_decl (r, /*update_method_vec_p=*/0);
9734           }
9735         else if ((complain & tf_error) != 0
9736                  && IDENTIFIER_OPNAME_P (DECL_NAME (r))
9737                  && !grok_op_properties (r, /*complain=*/true))
9738           RETURN (error_mark_node);
9739
9740         if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
9741           SET_DECL_FRIEND_CONTEXT (r,
9742                                    tsubst (DECL_FRIEND_CONTEXT (t),
9743                                             args, complain, in_decl));
9744
9745         /* Possibly limit visibility based on template args.  */
9746         DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
9747         if (DECL_VISIBILITY_SPECIFIED (t))
9748           {
9749             DECL_VISIBILITY_SPECIFIED (r) = 0;
9750             DECL_ATTRIBUTES (r)
9751               = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
9752           }
9753         determine_visibility (r);
9754         if (DECL_DEFAULTED_OUTSIDE_CLASS_P (r)
9755             && !processing_template_decl)
9756           defaulted_late_check (r);
9757
9758         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
9759                                         args, complain, in_decl);
9760       }
9761       break;
9762
9763     case PARM_DECL:
9764       {
9765         tree type = NULL_TREE;
9766         int i, len = 1;
9767         tree expanded_types = NULL_TREE;
9768         tree prev_r = NULL_TREE;
9769         tree first_r = NULL_TREE;
9770
9771         if (FUNCTION_PARAMETER_PACK_P (t))
9772           {
9773             /* If there is a local specialization that isn't a
9774                parameter pack, it means that we're doing a "simple"
9775                substitution from inside tsubst_pack_expansion. Just
9776                return the local specialization (which will be a single
9777                parm).  */
9778             tree spec = retrieve_local_specialization (t);
9779             if (spec 
9780                 && TREE_CODE (spec) == PARM_DECL
9781                 && TREE_CODE (TREE_TYPE (spec)) != TYPE_PACK_EXPANSION)
9782               RETURN (spec);
9783
9784             /* Expand the TYPE_PACK_EXPANSION that provides the types for
9785                the parameters in this function parameter pack.  */
9786             expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
9787                                                     complain, in_decl);
9788             if (TREE_CODE (expanded_types) == TREE_VEC)
9789               {
9790                 len = TREE_VEC_LENGTH (expanded_types);
9791
9792                 /* Zero-length parameter packs are boring. Just substitute
9793                    into the chain.  */
9794                 if (len == 0)
9795                   RETURN (tsubst (TREE_CHAIN (t), args, complain,
9796                                   TREE_CHAIN (t)));
9797               }
9798             else
9799               {
9800                 /* All we did was update the type. Make a note of that.  */
9801                 type = expanded_types;
9802                 expanded_types = NULL_TREE;
9803               }
9804           }
9805
9806         /* Loop through all of the parameter's we'll build. When T is
9807            a function parameter pack, LEN is the number of expanded
9808            types in EXPANDED_TYPES; otherwise, LEN is 1.  */
9809         r = NULL_TREE;
9810         for (i = 0; i < len; ++i)
9811           {
9812             prev_r = r;
9813             r = copy_node (t);
9814             if (DECL_TEMPLATE_PARM_P (t))
9815               SET_DECL_TEMPLATE_PARM_P (r);
9816
9817             if (expanded_types)
9818               /* We're on the Ith parameter of the function parameter
9819                  pack.  */
9820               {
9821                 /* An argument of a function parameter pack is not a parameter
9822                    pack.  */
9823                 FUNCTION_PARAMETER_PACK_P (r) = false;
9824
9825                 /* Get the Ith type.  */
9826                 type = TREE_VEC_ELT (expanded_types, i);
9827
9828                 if (DECL_NAME (r))
9829                   /* Rename the parameter to include the index.  */
9830                   DECL_NAME (r) =
9831                     make_ith_pack_parameter_name (DECL_NAME (r), i);
9832               }
9833             else if (!type)
9834               /* We're dealing with a normal parameter.  */
9835               type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9836
9837             type = type_decays_to (type);
9838             TREE_TYPE (r) = type;
9839             cp_apply_type_quals_to_decl (cp_type_quals (type), r);
9840
9841             if (DECL_INITIAL (r))
9842               {
9843                 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
9844                   DECL_INITIAL (r) = TREE_TYPE (r);
9845                 else
9846                   DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
9847                                              complain, in_decl);
9848               }
9849
9850             DECL_CONTEXT (r) = NULL_TREE;
9851
9852             if (!DECL_TEMPLATE_PARM_P (r))
9853               DECL_ARG_TYPE (r) = type_passed_as (type);
9854
9855             apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
9856                                             args, complain, in_decl);
9857
9858             /* Keep track of the first new parameter we
9859                generate. That's what will be returned to the
9860                caller.  */
9861             if (!first_r)
9862               first_r = r;
9863
9864             /* Build a proper chain of parameters when substituting
9865                into a function parameter pack.  */
9866             if (prev_r)
9867               DECL_CHAIN (prev_r) = r;
9868           }
9869
9870         if (DECL_CHAIN (t))
9871           DECL_CHAIN (r) = tsubst (DECL_CHAIN (t), args,
9872                                    complain, DECL_CHAIN (t));
9873
9874         /* FIRST_R contains the start of the chain we've built.  */
9875         r = first_r;
9876       }
9877       break;
9878
9879     case FIELD_DECL:
9880       {
9881         tree type;
9882
9883         r = copy_decl (t);
9884         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9885         if (type == error_mark_node)
9886           RETURN (error_mark_node);
9887         TREE_TYPE (r) = type;
9888         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
9889
9890         /* DECL_INITIAL gives the number of bits in a bit-field.  */
9891         DECL_INITIAL (r)
9892           = tsubst_expr (DECL_INITIAL (t), args,
9893                          complain, in_decl,
9894                          /*integral_constant_expression_p=*/true);
9895         /* We don't have to set DECL_CONTEXT here; it is set by
9896            finish_member_declaration.  */
9897         DECL_CHAIN (r) = NULL_TREE;
9898         if (VOID_TYPE_P (type))
9899           error ("instantiation of %q+D as type %qT", r, type);
9900
9901         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
9902                                         args, complain, in_decl);
9903       }
9904       break;
9905
9906     case USING_DECL:
9907       /* We reach here only for member using decls.  */
9908       if (DECL_DEPENDENT_P (t))
9909         {
9910           r = do_class_using_decl
9911             (tsubst_copy (USING_DECL_SCOPE (t), args, complain, in_decl),
9912              tsubst_copy (DECL_NAME (t), args, complain, in_decl));
9913           if (!r)
9914             r = error_mark_node;
9915           else
9916             {
9917               TREE_PROTECTED (r) = TREE_PROTECTED (t);
9918               TREE_PRIVATE (r) = TREE_PRIVATE (t);
9919             }
9920         }
9921       else
9922         {
9923           r = copy_node (t);
9924           DECL_CHAIN (r) = NULL_TREE;
9925         }
9926       break;
9927
9928     case TYPE_DECL:
9929     case VAR_DECL:
9930       {
9931         tree argvec = NULL_TREE;
9932         tree gen_tmpl = NULL_TREE;
9933         tree spec;
9934         tree tmpl = NULL_TREE;
9935         tree ctx;
9936         tree type = NULL_TREE;
9937         bool local_p;
9938
9939         if (TREE_CODE (t) == TYPE_DECL
9940             && t == TYPE_MAIN_DECL (TREE_TYPE (t)))
9941           {
9942             /* If this is the canonical decl, we don't have to
9943                mess with instantiations, and often we can't (for
9944                typename, template type parms and such).  Note that
9945                TYPE_NAME is not correct for the above test if
9946                we've copied the type for a typedef.  */
9947             type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9948             if (type == error_mark_node)
9949               RETURN (error_mark_node);
9950             r = TYPE_NAME (type);
9951             break;
9952           }
9953
9954         /* Check to see if we already have the specialization we
9955            need.  */
9956         spec = NULL_TREE;
9957         if (DECL_CLASS_SCOPE_P (t) || DECL_NAMESPACE_SCOPE_P (t))
9958           {
9959             /* T is a static data member or namespace-scope entity.
9960                We have to substitute into namespace-scope variables
9961                (even though such entities are never templates) because
9962                of cases like:
9963                
9964                  template <class T> void f() { extern T t; }
9965
9966                where the entity referenced is not known until
9967                instantiation time.  */
9968             local_p = false;
9969             ctx = DECL_CONTEXT (t);
9970             if (DECL_CLASS_SCOPE_P (t))
9971               {
9972                 ctx = tsubst_aggr_type (ctx, args,
9973                                         complain,
9974                                         in_decl, /*entering_scope=*/1);
9975                 /* If CTX is unchanged, then T is in fact the
9976                    specialization we want.  That situation occurs when
9977                    referencing a static data member within in its own
9978                    class.  We can use pointer equality, rather than
9979                    same_type_p, because DECL_CONTEXT is always
9980                    canonical.  */
9981                 if (ctx == DECL_CONTEXT (t))
9982                   spec = t;
9983               }
9984
9985             if (!spec)
9986               {
9987                 tmpl = DECL_TI_TEMPLATE (t);
9988                 gen_tmpl = most_general_template (tmpl);
9989                 argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
9990                 hash = hash_tmpl_and_args (gen_tmpl, argvec);
9991                 spec = retrieve_specialization (gen_tmpl, argvec, hash);
9992               }
9993           }
9994         else
9995           {
9996             /* A local variable.  */
9997             local_p = true;
9998             /* Subsequent calls to pushdecl will fill this in.  */
9999             ctx = NULL_TREE;
10000             spec = retrieve_local_specialization (t);
10001           }
10002         /* If we already have the specialization we need, there is
10003            nothing more to do.  */ 
10004         if (spec)
10005           {
10006             r = spec;
10007             break;
10008           }
10009
10010         /* Create a new node for the specialization we need.  */
10011         r = copy_decl (t);
10012         if (type == NULL_TREE)
10013           {
10014             if (is_typedef_decl (t))
10015               type = DECL_ORIGINAL_TYPE (t);
10016             else
10017               type = TREE_TYPE (t);
10018             if (TREE_CODE (t) == VAR_DECL && VAR_HAD_UNKNOWN_BOUND (t))
10019               type = strip_array_domain (type);
10020             type = tsubst (type, args, complain, in_decl);
10021           }
10022         if (TREE_CODE (r) == VAR_DECL)
10023           {
10024             /* Even if the original location is out of scope, the
10025                newly substituted one is not.  */
10026             DECL_DEAD_FOR_LOCAL (r) = 0;
10027             DECL_INITIALIZED_P (r) = 0;
10028             DECL_TEMPLATE_INSTANTIATED (r) = 0;
10029             if (type == error_mark_node)
10030               RETURN (error_mark_node);
10031             if (TREE_CODE (type) == FUNCTION_TYPE)
10032               {
10033                 /* It may seem that this case cannot occur, since:
10034
10035                      typedef void f();
10036                      void g() { f x; }
10037
10038                    declares a function, not a variable.  However:
10039       
10040                      typedef void f();
10041                      template <typename T> void g() { T t; }
10042                      template void g<f>();
10043
10044                    is an attempt to declare a variable with function
10045                    type.  */
10046                 error ("variable %qD has function type",
10047                        /* R is not yet sufficiently initialized, so we
10048                           just use its name.  */
10049                        DECL_NAME (r));
10050                 RETURN (error_mark_node);
10051               }
10052             type = complete_type (type);
10053             /* Wait until cp_finish_decl to set this again, to handle
10054                circular dependency (template/instantiate6.C). */
10055             DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r) = 0;
10056             type = check_var_type (DECL_NAME (r), type);
10057
10058             if (DECL_HAS_VALUE_EXPR_P (t))
10059               {
10060                 tree ve = DECL_VALUE_EXPR (t);
10061                 ve = tsubst_expr (ve, args, complain, in_decl,
10062                                   /*constant_expression_p=*/false);
10063                 SET_DECL_VALUE_EXPR (r, ve);
10064               }
10065           }
10066         else if (DECL_SELF_REFERENCE_P (t))
10067           SET_DECL_SELF_REFERENCE_P (r);
10068         TREE_TYPE (r) = type;
10069         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
10070         DECL_CONTEXT (r) = ctx;
10071         /* Clear out the mangled name and RTL for the instantiation.  */
10072         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
10073         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
10074           SET_DECL_RTL (r, NULL);
10075         /* The initializer must not be expanded until it is required;
10076            see [temp.inst].  */
10077         DECL_INITIAL (r) = NULL_TREE;
10078         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
10079           SET_DECL_RTL (r, NULL);
10080         DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
10081         if (TREE_CODE (r) == VAR_DECL)
10082           {
10083             /* Possibly limit visibility based on template args.  */
10084             DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
10085             if (DECL_VISIBILITY_SPECIFIED (t))
10086               {
10087                 DECL_VISIBILITY_SPECIFIED (r) = 0;
10088                 DECL_ATTRIBUTES (r)
10089                   = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
10090               }
10091             determine_visibility (r);
10092           }
10093
10094         if (!local_p)
10095           {
10096             /* A static data member declaration is always marked
10097                external when it is declared in-class, even if an
10098                initializer is present.  We mimic the non-template
10099                processing here.  */
10100             DECL_EXTERNAL (r) = 1;
10101
10102             register_specialization (r, gen_tmpl, argvec, false, hash);
10103             DECL_TEMPLATE_INFO (r) = build_template_info (tmpl, argvec);
10104             SET_DECL_IMPLICIT_INSTANTIATION (r);
10105           }
10106         else if (cp_unevaluated_operand)
10107           {
10108             /* We're substituting this var in a decltype outside of its
10109                scope, such as for a lambda return type.  Don't add it to
10110                local_specializations, do perform auto deduction.  */
10111             tree auto_node = type_uses_auto (type);
10112             tree init
10113               = tsubst_expr (DECL_INITIAL (t), args, complain, in_decl,
10114                              /*constant_expression_p=*/false);
10115
10116             if (auto_node && init)
10117               {
10118                 init = resolve_nondeduced_context (init);
10119                 if (describable_type (init))
10120                   {
10121                     type = do_auto_deduction (type, init, auto_node);
10122                     TREE_TYPE (r) = type;
10123                   }
10124               }
10125           }
10126         else
10127           register_local_specialization (r, t);
10128
10129         DECL_CHAIN (r) = NULL_TREE;
10130
10131         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r),
10132                                         /*flags=*/0,
10133                                         args, complain, in_decl);
10134
10135         /* Preserve a typedef that names a type.  */
10136         if (is_typedef_decl (r))
10137           {
10138             DECL_ORIGINAL_TYPE (r) = NULL_TREE;
10139             set_underlying_type (r);
10140           }
10141
10142         layout_decl (r, 0);
10143       }
10144       break;
10145
10146     default:
10147       gcc_unreachable ();
10148     }
10149 #undef RETURN
10150
10151  out:
10152   /* Restore the file and line information.  */
10153   input_location = saved_loc;
10154
10155   return r;
10156 }
10157
10158 /* Substitute into the ARG_TYPES of a function type.  */
10159
10160 static tree
10161 tsubst_arg_types (tree arg_types,
10162                   tree args,
10163                   tsubst_flags_t complain,
10164                   tree in_decl)
10165 {
10166   tree remaining_arg_types;
10167   tree type = NULL_TREE;
10168   int i = 1;
10169   tree expanded_args = NULL_TREE;
10170   tree default_arg;
10171
10172   if (!arg_types || arg_types == void_list_node)
10173     return arg_types;
10174
10175   remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
10176                                           args, complain, in_decl);
10177   if (remaining_arg_types == error_mark_node)
10178     return error_mark_node;
10179
10180   if (PACK_EXPANSION_P (TREE_VALUE (arg_types)))
10181     {
10182       /* For a pack expansion, perform substitution on the
10183          entire expression. Later on, we'll handle the arguments
10184          one-by-one.  */
10185       expanded_args = tsubst_pack_expansion (TREE_VALUE (arg_types),
10186                                             args, complain, in_decl);
10187
10188       if (TREE_CODE (expanded_args) == TREE_VEC)
10189         /* So that we'll spin through the parameters, one by one.  */
10190         i = TREE_VEC_LENGTH (expanded_args);
10191       else
10192         {
10193           /* We only partially substituted into the parameter
10194              pack. Our type is TYPE_PACK_EXPANSION.  */
10195           type = expanded_args;
10196           expanded_args = NULL_TREE;
10197         }
10198     }
10199
10200   while (i > 0) {
10201     --i;
10202     
10203     if (expanded_args)
10204       type = TREE_VEC_ELT (expanded_args, i);
10205     else if (!type)
10206       type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
10207
10208     if (type == error_mark_node)
10209       return error_mark_node;
10210     if (VOID_TYPE_P (type))
10211       {
10212         if (complain & tf_error)
10213           {
10214             error ("invalid parameter type %qT", type);
10215             if (in_decl)
10216               error ("in declaration %q+D", in_decl);
10217           }
10218         return error_mark_node;
10219     }
10220     
10221     /* Do array-to-pointer, function-to-pointer conversion, and ignore
10222        top-level qualifiers as required.  */
10223     type = TYPE_MAIN_VARIANT (type_decays_to (type));
10224
10225     /* We do not substitute into default arguments here.  The standard
10226        mandates that they be instantiated only when needed, which is
10227        done in build_over_call.  */
10228     default_arg = TREE_PURPOSE (arg_types);
10229
10230     if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
10231       {
10232         /* We've instantiated a template before its default arguments
10233            have been parsed.  This can happen for a nested template
10234            class, and is not an error unless we require the default
10235            argument in a call of this function.  */
10236         remaining_arg_types = 
10237           tree_cons (default_arg, type, remaining_arg_types);
10238         VEC_safe_push (tree, gc, DEFARG_INSTANTIATIONS (default_arg), 
10239                        remaining_arg_types);
10240       }
10241     else
10242       remaining_arg_types = 
10243         hash_tree_cons (default_arg, type, remaining_arg_types);
10244   }
10245         
10246   return remaining_arg_types;
10247 }
10248
10249 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE.  This routine does
10250    *not* handle the exception-specification for FNTYPE, because the
10251    initial substitution of explicitly provided template parameters
10252    during argument deduction forbids substitution into the
10253    exception-specification:
10254
10255      [temp.deduct]
10256
10257      All references in the function type of the function template to  the
10258      corresponding template parameters are replaced by the specified tem-
10259      plate argument values.  If a substitution in a template parameter or
10260      in  the function type of the function template results in an invalid
10261      type, type deduction fails.  [Note: The equivalent  substitution  in
10262      exception specifications is done only when the function is instanti-
10263      ated, at which point a program is  ill-formed  if  the  substitution
10264      results in an invalid type.]  */
10265
10266 static tree
10267 tsubst_function_type (tree t,
10268                       tree args,
10269                       tsubst_flags_t complain,
10270                       tree in_decl)
10271 {
10272   tree return_type;
10273   tree arg_types;
10274   tree fntype;
10275
10276   /* The TYPE_CONTEXT is not used for function/method types.  */
10277   gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
10278
10279   /* Substitute the return type.  */
10280   return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10281   if (return_type == error_mark_node)
10282     return error_mark_node;
10283   /* The standard does not presently indicate that creation of a
10284      function type with an invalid return type is a deduction failure.
10285      However, that is clearly analogous to creating an array of "void"
10286      or a reference to a reference.  This is core issue #486.  */
10287   if (TREE_CODE (return_type) == ARRAY_TYPE
10288       || TREE_CODE (return_type) == FUNCTION_TYPE)
10289     {
10290       if (complain & tf_error)
10291         {
10292           if (TREE_CODE (return_type) == ARRAY_TYPE)
10293             error ("function returning an array");
10294           else
10295             error ("function returning a function");
10296         }
10297       return error_mark_node;
10298     }
10299
10300   /* Substitute the argument types.  */
10301   arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
10302                                 complain, in_decl);
10303   if (arg_types == error_mark_node)
10304     return error_mark_node;
10305
10306   /* Construct a new type node and return it.  */
10307   if (TREE_CODE (t) == FUNCTION_TYPE)
10308     {
10309       fntype = build_function_type (return_type, arg_types);
10310       fntype = apply_memfn_quals (fntype, type_memfn_quals (t));
10311     }
10312   else
10313     {
10314       tree r = TREE_TYPE (TREE_VALUE (arg_types));
10315       if (! MAYBE_CLASS_TYPE_P (r))
10316         {
10317           /* [temp.deduct]
10318
10319              Type deduction may fail for any of the following
10320              reasons:
10321
10322              -- Attempting to create "pointer to member of T" when T
10323              is not a class type.  */
10324           if (complain & tf_error)
10325             error ("creating pointer to member function of non-class type %qT",
10326                       r);
10327           return error_mark_node;
10328         }
10329
10330       fntype = build_method_type_directly (r, return_type,
10331                                            TREE_CHAIN (arg_types));
10332     }
10333   fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
10334
10335   return fntype;
10336 }
10337
10338 /* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE.  Substitute the template
10339    ARGS into that specification, and return the substituted
10340    specification.  If there is no specification, return NULL_TREE.  */
10341
10342 static tree
10343 tsubst_exception_specification (tree fntype,
10344                                 tree args,
10345                                 tsubst_flags_t complain,
10346                                 tree in_decl)
10347 {
10348   tree specs;
10349   tree new_specs;
10350
10351   specs = TYPE_RAISES_EXCEPTIONS (fntype);
10352   new_specs = NULL_TREE;
10353   if (specs && TREE_PURPOSE (specs))
10354     {
10355       /* A noexcept-specifier.  */
10356       new_specs = tsubst_copy_and_build
10357         (TREE_PURPOSE (specs), args, complain, in_decl, /*function_p=*/false,
10358          /*integral_constant_expression_p=*/true);
10359       new_specs = build_noexcept_spec (new_specs, complain);
10360     }
10361   else if (specs)
10362     {
10363       if (! TREE_VALUE (specs))
10364         new_specs = specs;
10365       else
10366         while (specs)
10367           {
10368             tree spec;
10369             int i, len = 1;
10370             tree expanded_specs = NULL_TREE;
10371
10372             if (PACK_EXPANSION_P (TREE_VALUE (specs)))
10373               {
10374                 /* Expand the pack expansion type.  */
10375                 expanded_specs = tsubst_pack_expansion (TREE_VALUE (specs),
10376                                                        args, complain,
10377                                                        in_decl);
10378
10379                 if (expanded_specs == error_mark_node)
10380                   return error_mark_node;
10381                 else if (TREE_CODE (expanded_specs) == TREE_VEC)
10382                   len = TREE_VEC_LENGTH (expanded_specs);
10383                 else
10384                   {
10385                     /* We're substituting into a member template, so
10386                        we got a TYPE_PACK_EXPANSION back.  Add that
10387                        expansion and move on.  */
10388                     gcc_assert (TREE_CODE (expanded_specs) 
10389                                 == TYPE_PACK_EXPANSION);
10390                     new_specs = add_exception_specifier (new_specs,
10391                                                          expanded_specs,
10392                                                          complain);
10393                     specs = TREE_CHAIN (specs);
10394                     continue;
10395                   }
10396               }
10397
10398             for (i = 0; i < len; ++i)
10399               {
10400                 if (expanded_specs)
10401                   spec = TREE_VEC_ELT (expanded_specs, i);
10402                 else
10403                   spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
10404                 if (spec == error_mark_node)
10405                   return spec;
10406                 new_specs = add_exception_specifier (new_specs, spec, 
10407                                                      complain);
10408               }
10409
10410             specs = TREE_CHAIN (specs);
10411           }
10412     }
10413   return new_specs;
10414 }
10415
10416 /* Take the tree structure T and replace template parameters used
10417    therein with the argument vector ARGS.  IN_DECL is an associated
10418    decl for diagnostics.  If an error occurs, returns ERROR_MARK_NODE.
10419    Issue error and warning messages under control of COMPLAIN.  Note
10420    that we must be relatively non-tolerant of extensions here, in
10421    order to preserve conformance; if we allow substitutions that
10422    should not be allowed, we may allow argument deductions that should
10423    not succeed, and therefore report ambiguous overload situations
10424    where there are none.  In theory, we could allow the substitution,
10425    but indicate that it should have failed, and allow our caller to
10426    make sure that the right thing happens, but we don't try to do this
10427    yet.
10428
10429    This function is used for dealing with types, decls and the like;
10430    for expressions, use tsubst_expr or tsubst_copy.  */
10431
10432 tree
10433 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
10434 {
10435   enum tree_code code;
10436   tree type, r;
10437
10438   if (t == NULL_TREE || t == error_mark_node
10439       || t == integer_type_node
10440       || t == void_type_node
10441       || t == char_type_node
10442       || t == unknown_type_node
10443       || TREE_CODE (t) == NAMESPACE_DECL
10444       || TREE_CODE (t) == TRANSLATION_UNIT_DECL)
10445     return t;
10446
10447   if (DECL_P (t))
10448     return tsubst_decl (t, args, complain);
10449
10450   if (args == NULL_TREE)
10451     return t;
10452
10453   code = TREE_CODE (t);
10454
10455   if (code == IDENTIFIER_NODE)
10456     type = IDENTIFIER_TYPE_VALUE (t);
10457   else
10458     type = TREE_TYPE (t);
10459
10460   gcc_assert (type != unknown_type_node);
10461
10462   /* Reuse typedefs.  We need to do this to handle dependent attributes,
10463      such as attribute aligned.  */
10464   if (TYPE_P (t)
10465       && typedef_variant_p (t))
10466     {
10467       tree decl = TYPE_NAME (t);
10468       
10469       if (DECL_CLASS_SCOPE_P (decl)
10470           && CLASSTYPE_TEMPLATE_INFO (DECL_CONTEXT (decl))
10471           && uses_template_parms (DECL_CONTEXT (decl)))
10472         {
10473           tree tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
10474           tree gen_args = tsubst (DECL_TI_ARGS (decl), args, complain, in_decl);
10475           r = retrieve_specialization (tmpl, gen_args, 0);
10476         }
10477       else if (DECL_FUNCTION_SCOPE_P (decl)
10478                && DECL_TEMPLATE_INFO (DECL_CONTEXT (decl))
10479                && uses_template_parms (DECL_TI_ARGS (DECL_CONTEXT (decl))))
10480         r = retrieve_local_specialization (decl);
10481       else
10482         /* The typedef is from a non-template context.  */
10483         return t;
10484
10485       if (r)
10486         {
10487           r = TREE_TYPE (r);
10488           r = cp_build_qualified_type_real
10489             (r, cp_type_quals (t) | cp_type_quals (r),
10490              complain | tf_ignore_bad_quals);
10491           return r;
10492         }
10493       /* Else we must be instantiating the typedef, so fall through.  */
10494     }
10495
10496   if (type
10497       && code != TYPENAME_TYPE
10498       && code != TEMPLATE_TYPE_PARM
10499       && code != IDENTIFIER_NODE
10500       && code != FUNCTION_TYPE
10501       && code != METHOD_TYPE)
10502     type = tsubst (type, args, complain, in_decl);
10503   if (type == error_mark_node)
10504     return error_mark_node;
10505
10506   switch (code)
10507     {
10508     case RECORD_TYPE:
10509     case UNION_TYPE:
10510     case ENUMERAL_TYPE:
10511       return tsubst_aggr_type (t, args, complain, in_decl,
10512                                /*entering_scope=*/0);
10513
10514     case ERROR_MARK:
10515     case IDENTIFIER_NODE:
10516     case VOID_TYPE:
10517     case REAL_TYPE:
10518     case COMPLEX_TYPE:
10519     case VECTOR_TYPE:
10520     case BOOLEAN_TYPE:
10521     case NULLPTR_TYPE:
10522     case LANG_TYPE:
10523       return t;
10524
10525     case INTEGER_TYPE:
10526       if (t == integer_type_node)
10527         return t;
10528
10529       if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
10530           && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
10531         return t;
10532
10533       {
10534         tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
10535
10536         max = tsubst_expr (omax, args, complain, in_decl,
10537                            /*integral_constant_expression_p=*/false);
10538
10539         /* Fix up type of the magic NOP_EXPR with TREE_SIDE_EFFECTS if
10540            needed.  */
10541         if (TREE_CODE (max) == NOP_EXPR
10542             && TREE_SIDE_EFFECTS (omax)
10543             && !TREE_TYPE (max))
10544           TREE_TYPE (max) = TREE_TYPE (TREE_OPERAND (max, 0));
10545
10546         /* If we're in a partial instantiation, preserve the magic NOP_EXPR
10547            with TREE_SIDE_EFFECTS that indicates this is not an integral
10548            constant expression.  */
10549         if (processing_template_decl
10550             && TREE_SIDE_EFFECTS (omax) && TREE_CODE (omax) == NOP_EXPR)
10551           {
10552             gcc_assert (TREE_CODE (max) == NOP_EXPR);
10553             TREE_SIDE_EFFECTS (max) = 1;
10554           }
10555
10556         return compute_array_index_type (NULL_TREE, max, complain);
10557       }
10558
10559     case TEMPLATE_TYPE_PARM:
10560     case TEMPLATE_TEMPLATE_PARM:
10561     case BOUND_TEMPLATE_TEMPLATE_PARM:
10562     case TEMPLATE_PARM_INDEX:
10563       {
10564         int idx;
10565         int level;
10566         int levels;
10567         tree arg = NULL_TREE;
10568
10569         r = NULL_TREE;
10570
10571         gcc_assert (TREE_VEC_LENGTH (args) > 0);
10572         template_parm_level_and_index (t, &level, &idx); 
10573
10574         levels = TMPL_ARGS_DEPTH (args);
10575         if (level <= levels)
10576           {
10577             arg = TMPL_ARG (args, level, idx);
10578
10579             if (arg && TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
10580               /* See through ARGUMENT_PACK_SELECT arguments. */
10581               arg = ARGUMENT_PACK_SELECT_ARG (arg);
10582           }
10583
10584         if (arg == error_mark_node)
10585           return error_mark_node;
10586         else if (arg != NULL_TREE)
10587           {
10588             if (ARGUMENT_PACK_P (arg))
10589               /* If ARG is an argument pack, we don't actually want to
10590                  perform a substitution here, because substitutions
10591                  for argument packs are only done
10592                  element-by-element. We can get to this point when
10593                  substituting the type of a non-type template
10594                  parameter pack, when that type actually contains
10595                  template parameter packs from an outer template, e.g.,
10596
10597                  template<typename... Types> struct A {
10598                    template<Types... Values> struct B { };
10599                  };  */
10600               return t;
10601
10602             if (code == TEMPLATE_TYPE_PARM)
10603               {
10604                 int quals;
10605                 gcc_assert (TYPE_P (arg));
10606
10607                 quals = cp_type_quals (arg) | cp_type_quals (t);
10608                   
10609                 return cp_build_qualified_type_real
10610                   (arg, quals, complain | tf_ignore_bad_quals);
10611               }
10612             else if (code == BOUND_TEMPLATE_TEMPLATE_PARM)
10613               {
10614                 /* We are processing a type constructed from a
10615                    template template parameter.  */
10616                 tree argvec = tsubst (TYPE_TI_ARGS (t),
10617                                       args, complain, in_decl);
10618                 if (argvec == error_mark_node)
10619                   return error_mark_node;
10620
10621                 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
10622                    are resolving nested-types in the signature of a
10623                    member function templates.  Otherwise ARG is a
10624                    TEMPLATE_DECL and is the real template to be
10625                    instantiated.  */
10626                 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
10627                   arg = TYPE_NAME (arg);
10628
10629                 r = lookup_template_class (arg,
10630                                            argvec, in_decl,
10631                                            DECL_CONTEXT (arg),
10632                                             /*entering_scope=*/0,
10633                                            complain);
10634                 return cp_build_qualified_type_real
10635                   (r, cp_type_quals (t), complain);
10636               }
10637             else
10638               /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX.  */
10639               return unshare_expr (arg);
10640           }
10641
10642         if (level == 1)
10643           /* This can happen during the attempted tsubst'ing in
10644              unify.  This means that we don't yet have any information
10645              about the template parameter in question.  */
10646           return t;
10647
10648         /* If we get here, we must have been looking at a parm for a
10649            more deeply nested template.  Make a new version of this
10650            template parameter, but with a lower level.  */
10651         switch (code)
10652           {
10653           case TEMPLATE_TYPE_PARM:
10654           case TEMPLATE_TEMPLATE_PARM:
10655           case BOUND_TEMPLATE_TEMPLATE_PARM:
10656             if (cp_type_quals (t))
10657               {
10658                 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
10659                 r = cp_build_qualified_type_real
10660                   (r, cp_type_quals (t),
10661                    complain | (code == TEMPLATE_TYPE_PARM
10662                                ? tf_ignore_bad_quals : 0));
10663               }
10664             else
10665               {
10666                 r = copy_type (t);
10667                 TEMPLATE_TYPE_PARM_INDEX (r)
10668                   = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
10669                                                 r, levels, args, complain);
10670                 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
10671                 TYPE_MAIN_VARIANT (r) = r;
10672                 TYPE_POINTER_TO (r) = NULL_TREE;
10673                 TYPE_REFERENCE_TO (r) = NULL_TREE;
10674
10675                 if (TREE_CODE (r) == TEMPLATE_TEMPLATE_PARM)
10676                   /* We have reduced the level of the template
10677                      template parameter, but not the levels of its
10678                      template parameters, so canonical_type_parameter
10679                      will not be able to find the canonical template
10680                      template parameter for this level. Thus, we
10681                      require structural equality checking to compare
10682                      TEMPLATE_TEMPLATE_PARMs. */
10683                   SET_TYPE_STRUCTURAL_EQUALITY (r);
10684                 else if (TYPE_STRUCTURAL_EQUALITY_P (t))
10685                   SET_TYPE_STRUCTURAL_EQUALITY (r);
10686                 else
10687                   TYPE_CANONICAL (r) = canonical_type_parameter (r);
10688
10689                 if (code == BOUND_TEMPLATE_TEMPLATE_PARM)
10690                   {
10691                     tree argvec = tsubst (TYPE_TI_ARGS (t), args,
10692                                           complain, in_decl);
10693                     if (argvec == error_mark_node)
10694                       return error_mark_node;
10695
10696                     TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
10697                       = build_template_info (TYPE_TI_TEMPLATE (t), argvec);
10698                   }
10699               }
10700             break;
10701
10702           case TEMPLATE_PARM_INDEX:
10703             r = reduce_template_parm_level (t, type, levels, args, complain);
10704             break;
10705
10706           default:
10707             gcc_unreachable ();
10708           }
10709
10710         return r;
10711       }
10712
10713     case TREE_LIST:
10714       {
10715         tree purpose, value, chain;
10716
10717         if (t == void_list_node)
10718           return t;
10719
10720         purpose = TREE_PURPOSE (t);
10721         if (purpose)
10722           {
10723             purpose = tsubst (purpose, args, complain, in_decl);
10724             if (purpose == error_mark_node)
10725               return error_mark_node;
10726           }
10727         value = TREE_VALUE (t);
10728         if (value)
10729           {
10730             value = tsubst (value, args, complain, in_decl);
10731             if (value == error_mark_node)
10732               return error_mark_node;
10733           }
10734         chain = TREE_CHAIN (t);
10735         if (chain && chain != void_type_node)
10736           {
10737             chain = tsubst (chain, args, complain, in_decl);
10738             if (chain == error_mark_node)
10739               return error_mark_node;
10740           }
10741         if (purpose == TREE_PURPOSE (t)
10742             && value == TREE_VALUE (t)
10743             && chain == TREE_CHAIN (t))
10744           return t;
10745         return hash_tree_cons (purpose, value, chain);
10746       }
10747
10748     case TREE_BINFO:
10749       /* We should never be tsubsting a binfo.  */
10750       gcc_unreachable ();
10751
10752     case TREE_VEC:
10753       /* A vector of template arguments.  */
10754       gcc_assert (!type);
10755       return tsubst_template_args (t, args, complain, in_decl);
10756
10757     case POINTER_TYPE:
10758     case REFERENCE_TYPE:
10759       {
10760         if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
10761           return t;
10762
10763         /* [temp.deduct]
10764
10765            Type deduction may fail for any of the following
10766            reasons:
10767
10768            -- Attempting to create a pointer to reference type.
10769            -- Attempting to create a reference to a reference type or
10770               a reference to void.
10771
10772           Core issue 106 says that creating a reference to a reference
10773           during instantiation is no longer a cause for failure. We
10774           only enforce this check in strict C++98 mode.  */
10775         if ((TREE_CODE (type) == REFERENCE_TYPE
10776              && (((cxx_dialect == cxx98) && flag_iso) || code != REFERENCE_TYPE))
10777             || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
10778           {
10779             static location_t last_loc;
10780
10781             /* We keep track of the last time we issued this error
10782                message to avoid spewing a ton of messages during a
10783                single bad template instantiation.  */
10784             if (complain & tf_error
10785                 && last_loc != input_location)
10786               {
10787                 if (TREE_CODE (type) == VOID_TYPE)
10788                   error ("forming reference to void");
10789                else if (code == POINTER_TYPE)
10790                  error ("forming pointer to reference type %qT", type);
10791                else
10792                   error ("forming reference to reference type %qT", type);
10793                 last_loc = input_location;
10794               }
10795
10796             return error_mark_node;
10797           }
10798         else if (code == POINTER_TYPE)
10799           {
10800             r = build_pointer_type (type);
10801             if (TREE_CODE (type) == METHOD_TYPE)
10802               r = build_ptrmemfunc_type (r);
10803           }
10804         else if (TREE_CODE (type) == REFERENCE_TYPE)
10805           /* In C++0x, during template argument substitution, when there is an
10806              attempt to create a reference to a reference type, reference
10807              collapsing is applied as described in [14.3.1/4 temp.arg.type]:
10808
10809              "If a template-argument for a template-parameter T names a type
10810              that is a reference to a type A, an attempt to create the type
10811              'lvalue reference to cv T' creates the type 'lvalue reference to
10812              A,' while an attempt to create the type type rvalue reference to
10813              cv T' creates the type T"
10814           */
10815           r = cp_build_reference_type
10816               (TREE_TYPE (type),
10817                TYPE_REF_IS_RVALUE (t) && TYPE_REF_IS_RVALUE (type));
10818         else
10819           r = cp_build_reference_type (type, TYPE_REF_IS_RVALUE (t));
10820         r = cp_build_qualified_type_real (r, cp_type_quals (t), complain);
10821
10822         if (r != error_mark_node)
10823           /* Will this ever be needed for TYPE_..._TO values?  */
10824           layout_type (r);
10825
10826         return r;
10827       }
10828     case OFFSET_TYPE:
10829       {
10830         r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
10831         if (r == error_mark_node || !MAYBE_CLASS_TYPE_P (r))
10832           {
10833             /* [temp.deduct]
10834
10835                Type deduction may fail for any of the following
10836                reasons:
10837
10838                -- Attempting to create "pointer to member of T" when T
10839                   is not a class type.  */
10840             if (complain & tf_error)
10841               error ("creating pointer to member of non-class type %qT", r);
10842             return error_mark_node;
10843           }
10844         if (TREE_CODE (type) == REFERENCE_TYPE)
10845           {
10846             if (complain & tf_error)
10847               error ("creating pointer to member reference type %qT", type);
10848             return error_mark_node;
10849           }
10850         if (TREE_CODE (type) == VOID_TYPE)
10851           {
10852             if (complain & tf_error)
10853               error ("creating pointer to member of type void");
10854             return error_mark_node;
10855           }
10856         gcc_assert (TREE_CODE (type) != METHOD_TYPE);
10857         if (TREE_CODE (type) == FUNCTION_TYPE)
10858           {
10859             /* The type of the implicit object parameter gets its
10860                cv-qualifiers from the FUNCTION_TYPE. */
10861             tree memptr;
10862             tree method_type = build_memfn_type (type, r, type_memfn_quals (type));
10863             memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
10864             return cp_build_qualified_type_real (memptr, cp_type_quals (t),
10865                                                  complain);
10866           }
10867         else
10868           return cp_build_qualified_type_real (build_ptrmem_type (r, type),
10869                                                cp_type_quals (t),
10870                                                complain);
10871       }
10872     case FUNCTION_TYPE:
10873     case METHOD_TYPE:
10874       {
10875         tree fntype;
10876         tree specs;
10877         fntype = tsubst_function_type (t, args, complain, in_decl);
10878         if (fntype == error_mark_node)
10879           return error_mark_node;
10880
10881         /* Substitute the exception specification.  */
10882         specs = tsubst_exception_specification (t, args, complain,
10883                                                 in_decl);
10884         if (specs == error_mark_node)
10885           return error_mark_node;
10886         if (specs)
10887           fntype = build_exception_variant (fntype, specs);
10888         return fntype;
10889       }
10890     case ARRAY_TYPE:
10891       {
10892         tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
10893         if (domain == error_mark_node)
10894           return error_mark_node;
10895
10896         /* As an optimization, we avoid regenerating the array type if
10897            it will obviously be the same as T.  */
10898         if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
10899           return t;
10900
10901         /* These checks should match the ones in grokdeclarator.
10902
10903            [temp.deduct]
10904
10905            The deduction may fail for any of the following reasons:
10906
10907            -- Attempting to create an array with an element type that
10908               is void, a function type, or a reference type, or [DR337]
10909               an abstract class type.  */
10910         if (TREE_CODE (type) == VOID_TYPE
10911             || TREE_CODE (type) == FUNCTION_TYPE
10912             || TREE_CODE (type) == REFERENCE_TYPE)
10913           {
10914             if (complain & tf_error)
10915               error ("creating array of %qT", type);
10916             return error_mark_node;
10917           }
10918         if (CLASS_TYPE_P (type) && CLASSTYPE_PURE_VIRTUALS (type))
10919           {
10920             if (complain & tf_error)
10921               error ("creating array of %qT, which is an abstract class type",
10922                      type);
10923             return error_mark_node;
10924           }
10925
10926         r = build_cplus_array_type (type, domain);
10927
10928         if (TYPE_USER_ALIGN (t))
10929           {
10930             TYPE_ALIGN (r) = TYPE_ALIGN (t);
10931             TYPE_USER_ALIGN (r) = 1;
10932           }
10933
10934         return r;
10935       }
10936
10937     case TYPENAME_TYPE:
10938       {
10939         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
10940                                      in_decl, /*entering_scope=*/1);
10941         tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
10942                               complain, in_decl);
10943
10944         if (ctx == error_mark_node || f == error_mark_node)
10945           return error_mark_node;
10946
10947         if (!MAYBE_CLASS_TYPE_P (ctx))
10948           {
10949             if (complain & tf_error)
10950               error ("%qT is not a class, struct, or union type", ctx);
10951             return error_mark_node;
10952           }
10953         else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
10954           {
10955             /* Normally, make_typename_type does not require that the CTX
10956                have complete type in order to allow things like:
10957
10958                  template <class T> struct S { typename S<T>::X Y; };
10959
10960                But, such constructs have already been resolved by this
10961                point, so here CTX really should have complete type, unless
10962                it's a partial instantiation.  */
10963             ctx = complete_type (ctx);
10964             if (!COMPLETE_TYPE_P (ctx))
10965               {
10966                 if (complain & tf_error)
10967                   cxx_incomplete_type_error (NULL_TREE, ctx);
10968                 return error_mark_node;
10969               }
10970           }
10971
10972         f = make_typename_type (ctx, f, typename_type,
10973                                 (complain & tf_error) | tf_keep_type_decl);
10974         if (f == error_mark_node)
10975           return f;
10976         if (TREE_CODE (f) == TYPE_DECL)
10977           {
10978             complain |= tf_ignore_bad_quals;
10979             f = TREE_TYPE (f);
10980           }
10981
10982         if (TREE_CODE (f) != TYPENAME_TYPE)
10983           {
10984             if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
10985               {
10986                 if (complain & tf_error)
10987                   error ("%qT resolves to %qT, which is not an enumeration type",
10988                          t, f);
10989                 else
10990                   return error_mark_node;
10991               }
10992             else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
10993               {
10994                 if (complain & tf_error)
10995                   error ("%qT resolves to %qT, which is is not a class type",
10996                          t, f);
10997                 else
10998                   return error_mark_node;
10999               }
11000           }
11001
11002         return cp_build_qualified_type_real
11003           (f, cp_type_quals (f) | cp_type_quals (t), complain);
11004       }
11005
11006     case UNBOUND_CLASS_TEMPLATE:
11007       {
11008         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
11009                                      in_decl, /*entering_scope=*/1);
11010         tree name = TYPE_IDENTIFIER (t);
11011         tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
11012
11013         if (ctx == error_mark_node || name == error_mark_node)
11014           return error_mark_node;
11015
11016         if (parm_list)
11017           parm_list = tsubst_template_parms (parm_list, args, complain);
11018         return make_unbound_class_template (ctx, name, parm_list, complain);
11019       }
11020
11021     case TYPEOF_TYPE:
11022       {
11023         tree type;
11024
11025         ++cp_unevaluated_operand;
11026         ++c_inhibit_evaluation_warnings;
11027
11028         type = tsubst_expr (TYPEOF_TYPE_EXPR (t), args,
11029                             complain, in_decl,
11030                             /*integral_constant_expression_p=*/false);
11031
11032         --cp_unevaluated_operand;
11033         --c_inhibit_evaluation_warnings;
11034
11035         type = finish_typeof (type);
11036         return cp_build_qualified_type_real (type,
11037                                              cp_type_quals (t)
11038                                              | cp_type_quals (type),
11039                                              complain);
11040       }
11041
11042     case DECLTYPE_TYPE:
11043       {
11044         tree type;
11045
11046         ++cp_unevaluated_operand;
11047         ++c_inhibit_evaluation_warnings;
11048
11049         type = tsubst_expr (DECLTYPE_TYPE_EXPR (t), args,
11050                             complain, in_decl,
11051                             /*integral_constant_expression_p=*/false);
11052
11053         --cp_unevaluated_operand;
11054         --c_inhibit_evaluation_warnings;
11055
11056         if (DECLTYPE_FOR_LAMBDA_CAPTURE (t))
11057           type = lambda_capture_field_type (type);
11058         else if (DECLTYPE_FOR_LAMBDA_RETURN (t))
11059           type = lambda_return_type (type);
11060         else
11061           type = finish_decltype_type
11062             (type, DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t), complain);
11063         return cp_build_qualified_type_real (type,
11064                                              cp_type_quals (t)
11065                                              | cp_type_quals (type),
11066                                              complain);
11067       }
11068
11069     case UNDERLYING_TYPE:
11070       {
11071         tree type = tsubst (UNDERLYING_TYPE_TYPE (t), args,
11072                             complain, in_decl);
11073         return finish_underlying_type (type);
11074       }
11075
11076     case TYPE_ARGUMENT_PACK:
11077     case NONTYPE_ARGUMENT_PACK:
11078       {
11079         tree r = TYPE_P (t) ? cxx_make_type (code) : make_node (code);
11080         tree packed_out = 
11081           tsubst_template_args (ARGUMENT_PACK_ARGS (t), 
11082                                 args,
11083                                 complain,
11084                                 in_decl);
11085         SET_ARGUMENT_PACK_ARGS (r, packed_out);
11086
11087         /* For template nontype argument packs, also substitute into
11088            the type.  */
11089         if (code == NONTYPE_ARGUMENT_PACK)
11090           TREE_TYPE (r) = tsubst (TREE_TYPE (t), args, complain, in_decl);
11091
11092         return r;
11093       }
11094       break;
11095
11096     case INTEGER_CST:
11097     case REAL_CST:
11098     case STRING_CST:
11099     case PLUS_EXPR:
11100     case MINUS_EXPR:
11101     case NEGATE_EXPR:
11102     case NOP_EXPR:
11103     case INDIRECT_REF:
11104     case ADDR_EXPR:
11105     case CALL_EXPR:
11106     case ARRAY_REF:
11107     case SCOPE_REF:
11108       /* We should use one of the expression tsubsts for these codes.  */
11109       gcc_unreachable ();
11110
11111     default:
11112       sorry ("use of %qs in template", tree_code_name [(int) code]);
11113       return error_mark_node;
11114     }
11115 }
11116
11117 /* Like tsubst_expr for a BASELINK.  OBJECT_TYPE, if non-NULL, is the
11118    type of the expression on the left-hand side of the "." or "->"
11119    operator.  */
11120
11121 static tree
11122 tsubst_baselink (tree baselink, tree object_type,
11123                  tree args, tsubst_flags_t complain, tree in_decl)
11124 {
11125     tree name;
11126     tree qualifying_scope;
11127     tree fns;
11128     tree optype;
11129     tree template_args = 0;
11130     bool template_id_p = false;
11131
11132     /* A baselink indicates a function from a base class.  Both the
11133        BASELINK_ACCESS_BINFO and the base class referenced may
11134        indicate bases of the template class, rather than the
11135        instantiated class.  In addition, lookups that were not
11136        ambiguous before may be ambiguous now.  Therefore, we perform
11137        the lookup again.  */
11138     qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
11139     qualifying_scope = tsubst (qualifying_scope, args,
11140                                complain, in_decl);
11141     fns = BASELINK_FUNCTIONS (baselink);
11142     optype = tsubst (BASELINK_OPTYPE (baselink), args, complain, in_decl);
11143     if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
11144       {
11145         template_id_p = true;
11146         template_args = TREE_OPERAND (fns, 1);
11147         fns = TREE_OPERAND (fns, 0);
11148         if (template_args)
11149           template_args = tsubst_template_args (template_args, args,
11150                                                 complain, in_decl);
11151       }
11152     name = DECL_NAME (get_first_fn (fns));
11153     if (IDENTIFIER_TYPENAME_P (name))
11154       name = mangle_conv_op_name_for_type (optype);
11155     baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
11156     if (!baselink)
11157       return error_mark_node;
11158
11159     /* If lookup found a single function, mark it as used at this
11160        point.  (If it lookup found multiple functions the one selected
11161        later by overload resolution will be marked as used at that
11162        point.)  */
11163     if (BASELINK_P (baselink))
11164       fns = BASELINK_FUNCTIONS (baselink);
11165     if (!template_id_p && !really_overloaded_fn (fns))
11166       mark_used (OVL_CURRENT (fns));
11167
11168     /* Add back the template arguments, if present.  */
11169     if (BASELINK_P (baselink) && template_id_p)
11170       BASELINK_FUNCTIONS (baselink)
11171         = build_nt (TEMPLATE_ID_EXPR,
11172                     BASELINK_FUNCTIONS (baselink),
11173                     template_args);
11174     /* Update the conversion operator type.  */
11175     BASELINK_OPTYPE (baselink) = optype;
11176
11177     if (!object_type)
11178       object_type = current_class_type;
11179     return adjust_result_of_qualified_name_lookup (baselink,
11180                                                    qualifying_scope,
11181                                                    object_type);
11182 }
11183
11184 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID.  DONE is
11185    true if the qualified-id will be a postfix-expression in-and-of
11186    itself; false if more of the postfix-expression follows the
11187    QUALIFIED_ID.  ADDRESS_P is true if the qualified-id is the operand
11188    of "&".  */
11189
11190 static tree
11191 tsubst_qualified_id (tree qualified_id, tree args,
11192                      tsubst_flags_t complain, tree in_decl,
11193                      bool done, bool address_p)
11194 {
11195   tree expr;
11196   tree scope;
11197   tree name;
11198   bool is_template;
11199   tree template_args;
11200
11201   gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
11202
11203   /* Figure out what name to look up.  */
11204   name = TREE_OPERAND (qualified_id, 1);
11205   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
11206     {
11207       is_template = true;
11208       template_args = TREE_OPERAND (name, 1);
11209       if (template_args)
11210         template_args = tsubst_template_args (template_args, args,
11211                                               complain, in_decl);
11212       name = TREE_OPERAND (name, 0);
11213     }
11214   else
11215     {
11216       is_template = false;
11217       template_args = NULL_TREE;
11218     }
11219
11220   /* Substitute into the qualifying scope.  When there are no ARGS, we
11221      are just trying to simplify a non-dependent expression.  In that
11222      case the qualifying scope may be dependent, and, in any case,
11223      substituting will not help.  */
11224   scope = TREE_OPERAND (qualified_id, 0);
11225   if (args)
11226     {
11227       scope = tsubst (scope, args, complain, in_decl);
11228       expr = tsubst_copy (name, args, complain, in_decl);
11229     }
11230   else
11231     expr = name;
11232
11233   if (dependent_scope_p (scope))
11234     return build_qualified_name (NULL_TREE, scope, expr,
11235                                  QUALIFIED_NAME_IS_TEMPLATE (qualified_id));
11236
11237   if (!BASELINK_P (name) && !DECL_P (expr))
11238     {
11239       if (TREE_CODE (expr) == BIT_NOT_EXPR)
11240         {
11241           /* A BIT_NOT_EXPR is used to represent a destructor.  */
11242           if (!check_dtor_name (scope, TREE_OPERAND (expr, 0)))
11243             {
11244               error ("qualifying type %qT does not match destructor name ~%qT",
11245                      scope, TREE_OPERAND (expr, 0));
11246               expr = error_mark_node;
11247             }
11248           else
11249             expr = lookup_qualified_name (scope, complete_dtor_identifier,
11250                                           /*is_type_p=*/0, false);
11251         }
11252       else
11253         expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
11254       if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
11255                      ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
11256         {
11257           if (complain & tf_error)
11258             {
11259               error ("dependent-name %qE is parsed as a non-type, but "
11260                      "instantiation yields a type", qualified_id);
11261               inform (input_location, "say %<typename %E%> if a type is meant", qualified_id);
11262             }
11263           return error_mark_node;
11264         }
11265     }
11266
11267   if (DECL_P (expr))
11268     {
11269       check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
11270                                            scope);
11271       /* Remember that there was a reference to this entity.  */
11272       mark_used (expr);
11273     }
11274
11275   if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
11276     {
11277       if (complain & tf_error)
11278         qualified_name_lookup_error (scope,
11279                                      TREE_OPERAND (qualified_id, 1),
11280                                      expr, input_location);
11281       return error_mark_node;
11282     }
11283
11284   if (is_template)
11285     expr = lookup_template_function (expr, template_args);
11286
11287   if (expr == error_mark_node && complain & tf_error)
11288     qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
11289                                  expr, input_location);
11290   else if (TYPE_P (scope))
11291     {
11292       expr = (adjust_result_of_qualified_name_lookup
11293               (expr, scope, current_class_type));
11294       expr = (finish_qualified_id_expr
11295               (scope, expr, done, address_p,
11296                QUALIFIED_NAME_IS_TEMPLATE (qualified_id),
11297                /*template_arg_p=*/false));
11298     }
11299
11300   /* Expressions do not generally have reference type.  */
11301   if (TREE_CODE (expr) != SCOPE_REF
11302       /* However, if we're about to form a pointer-to-member, we just
11303          want the referenced member referenced.  */
11304       && TREE_CODE (expr) != OFFSET_REF)
11305     expr = convert_from_reference (expr);
11306
11307   return expr;
11308 }
11309
11310 /* Like tsubst, but deals with expressions.  This function just replaces
11311    template parms; to finish processing the resultant expression, use
11312    tsubst_expr.  */
11313
11314 static tree
11315 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
11316 {
11317   enum tree_code code;
11318   tree r;
11319
11320   if (t == NULL_TREE || t == error_mark_node || args == NULL_TREE)
11321     return t;
11322
11323   code = TREE_CODE (t);
11324
11325   switch (code)
11326     {
11327     case PARM_DECL:
11328       r = retrieve_local_specialization (t);
11329
11330       if (r == NULL)
11331         {
11332           tree c;
11333           /* This can happen for a parameter name used later in a function
11334              declaration (such as in a late-specified return type).  Just
11335              make a dummy decl, since it's only used for its type.  */
11336           gcc_assert (cp_unevaluated_operand != 0);
11337           /* We copy T because want to tsubst the PARM_DECL only,
11338              not the following PARM_DECLs that are chained to T.  */
11339           c = copy_node (t);
11340           r = tsubst_decl (c, args, complain);
11341           /* Give it the template pattern as its context; its true context
11342              hasn't been instantiated yet and this is good enough for
11343              mangling.  */
11344           DECL_CONTEXT (r) = DECL_CONTEXT (t);
11345         }
11346       
11347       if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
11348         r = ARGUMENT_PACK_SELECT_ARG (r);
11349       mark_used (r);
11350       return r;
11351
11352     case CONST_DECL:
11353       {
11354         tree enum_type;
11355         tree v;
11356
11357         if (DECL_TEMPLATE_PARM_P (t))
11358           return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
11359         /* There is no need to substitute into namespace-scope
11360            enumerators.  */
11361         if (DECL_NAMESPACE_SCOPE_P (t))
11362           return t;
11363         /* If ARGS is NULL, then T is known to be non-dependent.  */
11364         if (args == NULL_TREE)
11365           return integral_constant_value (t);
11366
11367         /* Unfortunately, we cannot just call lookup_name here.
11368            Consider:
11369
11370              template <int I> int f() {
11371              enum E { a = I };
11372              struct S { void g() { E e = a; } };
11373              };
11374
11375            When we instantiate f<7>::S::g(), say, lookup_name is not
11376            clever enough to find f<7>::a.  */
11377         enum_type
11378           = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl,
11379                               /*entering_scope=*/0);
11380
11381         for (v = TYPE_VALUES (enum_type);
11382              v != NULL_TREE;
11383              v = TREE_CHAIN (v))
11384           if (TREE_PURPOSE (v) == DECL_NAME (t))
11385             return TREE_VALUE (v);
11386
11387           /* We didn't find the name.  That should never happen; if
11388              name-lookup found it during preliminary parsing, we
11389              should find it again here during instantiation.  */
11390         gcc_unreachable ();
11391       }
11392       return t;
11393
11394     case FIELD_DECL:
11395       if (DECL_CONTEXT (t))
11396         {
11397           tree ctx;
11398
11399           ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
11400                                   /*entering_scope=*/1);
11401           if (ctx != DECL_CONTEXT (t))
11402             {
11403               tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
11404               if (!r)
11405                 {
11406                   if (complain & tf_error)
11407                     error ("using invalid field %qD", t);
11408                   return error_mark_node;
11409                 }
11410               return r;
11411             }
11412         }
11413
11414       return t;
11415
11416     case VAR_DECL:
11417     case FUNCTION_DECL:
11418       if ((DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
11419           || local_variable_p (t))
11420         t = tsubst (t, args, complain, in_decl);
11421       mark_used (t);
11422       return t;
11423
11424     case OVERLOAD:
11425       /* An OVERLOAD will always be a non-dependent overload set; an
11426          overload set from function scope will just be represented with an
11427          IDENTIFIER_NODE, and from class scope with a BASELINK.  */
11428       gcc_assert (!uses_template_parms (t));
11429       return t;
11430
11431     case BASELINK:
11432       return tsubst_baselink (t, current_class_type, args, complain, in_decl);
11433
11434     case TEMPLATE_DECL:
11435       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
11436         return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
11437                        args, complain, in_decl);
11438       else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
11439         return tsubst (t, args, complain, in_decl);
11440       else if (DECL_CLASS_SCOPE_P (t)
11441                && uses_template_parms (DECL_CONTEXT (t)))
11442         {
11443           /* Template template argument like the following example need
11444              special treatment:
11445
11446                template <template <class> class TT> struct C {};
11447                template <class T> struct D {
11448                  template <class U> struct E {};
11449                  C<E> c;                                // #1
11450                };
11451                D<int> d;                                // #2
11452
11453              We are processing the template argument `E' in #1 for
11454              the template instantiation #2.  Originally, `E' is a
11455              TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT.  Now we
11456              have to substitute this with one having context `D<int>'.  */
11457
11458           tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
11459           return lookup_field (context, DECL_NAME(t), 0, false);
11460         }
11461       else
11462         /* Ordinary template template argument.  */
11463         return t;
11464
11465     case CAST_EXPR:
11466     case REINTERPRET_CAST_EXPR:
11467     case CONST_CAST_EXPR:
11468     case STATIC_CAST_EXPR:
11469     case DYNAMIC_CAST_EXPR:
11470     case NOP_EXPR:
11471       return build1
11472         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
11473          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
11474
11475     case SIZEOF_EXPR:
11476       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
11477         {
11478
11479           tree expanded;
11480           int len = 0;
11481
11482           ++cp_unevaluated_operand;
11483           ++c_inhibit_evaluation_warnings;
11484           /* We only want to compute the number of arguments.  */
11485           expanded = tsubst_pack_expansion (TREE_OPERAND (t, 0), args,
11486                                             complain, in_decl);
11487           --cp_unevaluated_operand;
11488           --c_inhibit_evaluation_warnings;
11489
11490           if (TREE_CODE (expanded) == TREE_VEC)
11491             len = TREE_VEC_LENGTH (expanded);
11492
11493           if (expanded == error_mark_node)
11494             return error_mark_node;
11495           else if (PACK_EXPANSION_P (expanded)
11496                    || (TREE_CODE (expanded) == TREE_VEC
11497                        && len > 0
11498                        && PACK_EXPANSION_P (TREE_VEC_ELT (expanded, len-1))))
11499             {
11500               if (TREE_CODE (expanded) == TREE_VEC)
11501                 expanded = TREE_VEC_ELT (expanded, len - 1);
11502
11503               if (TYPE_P (expanded))
11504                 return cxx_sizeof_or_alignof_type (expanded, SIZEOF_EXPR, 
11505                                                    complain & tf_error);
11506               else
11507                 return cxx_sizeof_or_alignof_expr (expanded, SIZEOF_EXPR,
11508                                                    complain & tf_error);
11509             }
11510           else
11511             return build_int_cst (size_type_node, len);
11512         }
11513       /* Fall through */
11514
11515     case INDIRECT_REF:
11516     case NEGATE_EXPR:
11517     case TRUTH_NOT_EXPR:
11518     case BIT_NOT_EXPR:
11519     case ADDR_EXPR:
11520     case UNARY_PLUS_EXPR:      /* Unary + */
11521     case ALIGNOF_EXPR:
11522     case AT_ENCODE_EXPR:
11523     case ARROW_EXPR:
11524     case THROW_EXPR:
11525     case TYPEID_EXPR:
11526     case REALPART_EXPR:
11527     case IMAGPART_EXPR:
11528       return build1
11529         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
11530          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
11531
11532     case COMPONENT_REF:
11533       {
11534         tree object;
11535         tree name;
11536
11537         object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
11538         name = TREE_OPERAND (t, 1);
11539         if (TREE_CODE (name) == BIT_NOT_EXPR)
11540           {
11541             name = tsubst_copy (TREE_OPERAND (name, 0), args,
11542                                 complain, in_decl);
11543             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
11544           }
11545         else if (TREE_CODE (name) == SCOPE_REF
11546                  && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
11547           {
11548             tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
11549                                      complain, in_decl);
11550             name = TREE_OPERAND (name, 1);
11551             name = tsubst_copy (TREE_OPERAND (name, 0), args,
11552                                 complain, in_decl);
11553             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
11554             name = build_qualified_name (/*type=*/NULL_TREE,
11555                                          base, name,
11556                                          /*template_p=*/false);
11557           }
11558         else if (TREE_CODE (name) == BASELINK)
11559           name = tsubst_baselink (name,
11560                                   non_reference (TREE_TYPE (object)),
11561                                   args, complain,
11562                                   in_decl);
11563         else
11564           name = tsubst_copy (name, args, complain, in_decl);
11565         return build_nt (COMPONENT_REF, object, name, NULL_TREE);
11566       }
11567
11568     case PLUS_EXPR:
11569     case MINUS_EXPR:
11570     case MULT_EXPR:
11571     case TRUNC_DIV_EXPR:
11572     case CEIL_DIV_EXPR:
11573     case FLOOR_DIV_EXPR:
11574     case ROUND_DIV_EXPR:
11575     case EXACT_DIV_EXPR:
11576     case BIT_AND_EXPR:
11577     case BIT_IOR_EXPR:
11578     case BIT_XOR_EXPR:
11579     case TRUNC_MOD_EXPR:
11580     case FLOOR_MOD_EXPR:
11581     case TRUTH_ANDIF_EXPR:
11582     case TRUTH_ORIF_EXPR:
11583     case TRUTH_AND_EXPR:
11584     case TRUTH_OR_EXPR:
11585     case RSHIFT_EXPR:
11586     case LSHIFT_EXPR:
11587     case RROTATE_EXPR:
11588     case LROTATE_EXPR:
11589     case EQ_EXPR:
11590     case NE_EXPR:
11591     case MAX_EXPR:
11592     case MIN_EXPR:
11593     case LE_EXPR:
11594     case GE_EXPR:
11595     case LT_EXPR:
11596     case GT_EXPR:
11597     case COMPOUND_EXPR:
11598     case DOTSTAR_EXPR:
11599     case MEMBER_REF:
11600     case PREDECREMENT_EXPR:
11601     case PREINCREMENT_EXPR:
11602     case POSTDECREMENT_EXPR:
11603     case POSTINCREMENT_EXPR:
11604       return build_nt
11605         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
11606          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
11607
11608     case SCOPE_REF:
11609       return build_qualified_name (/*type=*/NULL_TREE,
11610                                    tsubst_copy (TREE_OPERAND (t, 0),
11611                                                 args, complain, in_decl),
11612                                    tsubst_copy (TREE_OPERAND (t, 1),
11613                                                 args, complain, in_decl),
11614                                    QUALIFIED_NAME_IS_TEMPLATE (t));
11615
11616     case ARRAY_REF:
11617       return build_nt
11618         (ARRAY_REF,
11619          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
11620          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
11621          NULL_TREE, NULL_TREE);
11622
11623     case CALL_EXPR:
11624       {
11625         int n = VL_EXP_OPERAND_LENGTH (t);
11626         tree result = build_vl_exp (CALL_EXPR, n);
11627         int i;
11628         for (i = 0; i < n; i++)
11629           TREE_OPERAND (t, i) = tsubst_copy (TREE_OPERAND (t, i), args,
11630                                              complain, in_decl);
11631         return result;
11632       }
11633
11634     case COND_EXPR:
11635     case MODOP_EXPR:
11636     case PSEUDO_DTOR_EXPR:
11637       {
11638         r = build_nt
11639           (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
11640            tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
11641            tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
11642         TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
11643         return r;
11644       }
11645
11646     case NEW_EXPR:
11647       {
11648         r = build_nt
11649         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
11650          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
11651          tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
11652         NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
11653         return r;
11654       }
11655
11656     case DELETE_EXPR:
11657       {
11658         r = build_nt
11659         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
11660          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
11661         DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
11662         DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
11663         return r;
11664       }
11665
11666     case TEMPLATE_ID_EXPR:
11667       {
11668         /* Substituted template arguments */
11669         tree fn = TREE_OPERAND (t, 0);
11670         tree targs = TREE_OPERAND (t, 1);
11671
11672         fn = tsubst_copy (fn, args, complain, in_decl);
11673         if (targs)
11674           targs = tsubst_template_args (targs, args, complain, in_decl);
11675
11676         return lookup_template_function (fn, targs);
11677       }
11678
11679     case TREE_LIST:
11680       {
11681         tree purpose, value, chain;
11682
11683         if (t == void_list_node)
11684           return t;
11685
11686         purpose = TREE_PURPOSE (t);
11687         if (purpose)
11688           purpose = tsubst_copy (purpose, args, complain, in_decl);
11689         value = TREE_VALUE (t);
11690         if (value)
11691           value = tsubst_copy (value, args, complain, in_decl);
11692         chain = TREE_CHAIN (t);
11693         if (chain && chain != void_type_node)
11694           chain = tsubst_copy (chain, args, complain, in_decl);
11695         if (purpose == TREE_PURPOSE (t)
11696             && value == TREE_VALUE (t)
11697             && chain == TREE_CHAIN (t))
11698           return t;
11699         return tree_cons (purpose, value, chain);
11700       }
11701
11702     case RECORD_TYPE:
11703     case UNION_TYPE:
11704     case ENUMERAL_TYPE:
11705     case INTEGER_TYPE:
11706     case TEMPLATE_TYPE_PARM:
11707     case TEMPLATE_TEMPLATE_PARM:
11708     case BOUND_TEMPLATE_TEMPLATE_PARM:
11709     case TEMPLATE_PARM_INDEX:
11710     case POINTER_TYPE:
11711     case REFERENCE_TYPE:
11712     case OFFSET_TYPE:
11713     case FUNCTION_TYPE:
11714     case METHOD_TYPE:
11715     case ARRAY_TYPE:
11716     case TYPENAME_TYPE:
11717     case UNBOUND_CLASS_TEMPLATE:
11718     case TYPEOF_TYPE:
11719     case DECLTYPE_TYPE:
11720     case TYPE_DECL:
11721       return tsubst (t, args, complain, in_decl);
11722
11723     case IDENTIFIER_NODE:
11724       if (IDENTIFIER_TYPENAME_P (t))
11725         {
11726           tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11727           return mangle_conv_op_name_for_type (new_type);
11728         }
11729       else
11730         return t;
11731
11732     case CONSTRUCTOR:
11733       /* This is handled by tsubst_copy_and_build.  */
11734       gcc_unreachable ();
11735
11736     case VA_ARG_EXPR:
11737       return build_x_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
11738                                           in_decl),
11739                              tsubst (TREE_TYPE (t), args, complain, in_decl));
11740
11741     case CLEANUP_POINT_EXPR:
11742       /* We shouldn't have built any of these during initial template
11743          generation.  Instead, they should be built during instantiation
11744          in response to the saved STMT_IS_FULL_EXPR_P setting.  */
11745       gcc_unreachable ();
11746
11747     case OFFSET_REF:
11748       r = build2
11749         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
11750          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
11751          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
11752       PTRMEM_OK_P (r) = PTRMEM_OK_P (t);
11753       mark_used (TREE_OPERAND (r, 1));
11754       return r;
11755
11756     case EXPR_PACK_EXPANSION:
11757       error ("invalid use of pack expansion expression");
11758       return error_mark_node;
11759
11760     case NONTYPE_ARGUMENT_PACK:
11761       error ("use %<...%> to expand argument pack");
11762       return error_mark_node;
11763
11764     case INTEGER_CST:
11765     case REAL_CST:
11766     case STRING_CST:
11767     case COMPLEX_CST:
11768       {
11769         /* Instantiate any typedefs in the type.  */
11770         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11771         r = fold_convert (type, t);
11772         gcc_assert (TREE_CODE (r) == code);
11773         return r;
11774       }
11775
11776     case PTRMEM_CST:
11777       /* These can sometimes show up in a partial instantiation, but never
11778          involve template parms.  */
11779       gcc_assert (!uses_template_parms (t));
11780       return t;
11781
11782     default:
11783       /* We shouldn't get here, but keep going if !ENABLE_CHECKING.  */
11784       gcc_checking_assert (false);
11785       return t;
11786     }
11787 }
11788
11789 /* Like tsubst_copy, but specifically for OpenMP clauses.  */
11790
11791 static tree
11792 tsubst_omp_clauses (tree clauses, tree args, tsubst_flags_t complain,
11793                     tree in_decl)
11794 {
11795   tree new_clauses = NULL, nc, oc;
11796
11797   for (oc = clauses; oc ; oc = OMP_CLAUSE_CHAIN (oc))
11798     {
11799       nc = copy_node (oc);
11800       OMP_CLAUSE_CHAIN (nc) = new_clauses;
11801       new_clauses = nc;
11802
11803       switch (OMP_CLAUSE_CODE (nc))
11804         {
11805         case OMP_CLAUSE_LASTPRIVATE:
11806           if (OMP_CLAUSE_LASTPRIVATE_STMT (oc))
11807             {
11808               OMP_CLAUSE_LASTPRIVATE_STMT (nc) = push_stmt_list ();
11809               tsubst_expr (OMP_CLAUSE_LASTPRIVATE_STMT (oc), args, complain,
11810                            in_decl, /*integral_constant_expression_p=*/false);
11811               OMP_CLAUSE_LASTPRIVATE_STMT (nc)
11812                 = pop_stmt_list (OMP_CLAUSE_LASTPRIVATE_STMT (nc));
11813             }
11814           /* FALLTHRU */
11815         case OMP_CLAUSE_PRIVATE:
11816         case OMP_CLAUSE_SHARED:
11817         case OMP_CLAUSE_FIRSTPRIVATE:
11818         case OMP_CLAUSE_REDUCTION:
11819         case OMP_CLAUSE_COPYIN:
11820         case OMP_CLAUSE_COPYPRIVATE:
11821         case OMP_CLAUSE_IF:
11822         case OMP_CLAUSE_NUM_THREADS:
11823         case OMP_CLAUSE_SCHEDULE:
11824         case OMP_CLAUSE_COLLAPSE:
11825           OMP_CLAUSE_OPERAND (nc, 0)
11826             = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain, 
11827                            in_decl, /*integral_constant_expression_p=*/false);
11828           break;
11829         case OMP_CLAUSE_NOWAIT:
11830         case OMP_CLAUSE_ORDERED:
11831         case OMP_CLAUSE_DEFAULT:
11832         case OMP_CLAUSE_UNTIED:
11833           break;
11834         default:
11835           gcc_unreachable ();
11836         }
11837     }
11838
11839   return finish_omp_clauses (nreverse (new_clauses));
11840 }
11841
11842 /* Like tsubst_copy_and_build, but unshare TREE_LIST nodes.  */
11843
11844 static tree
11845 tsubst_copy_asm_operands (tree t, tree args, tsubst_flags_t complain,
11846                           tree in_decl)
11847 {
11848 #define RECUR(t) tsubst_copy_asm_operands (t, args, complain, in_decl)
11849
11850   tree purpose, value, chain;
11851
11852   if (t == NULL)
11853     return t;
11854
11855   if (TREE_CODE (t) != TREE_LIST)
11856     return tsubst_copy_and_build (t, args, complain, in_decl,
11857                                   /*function_p=*/false,
11858                                   /*integral_constant_expression_p=*/false);
11859
11860   if (t == void_list_node)
11861     return t;
11862
11863   purpose = TREE_PURPOSE (t);
11864   if (purpose)
11865     purpose = RECUR (purpose);
11866   value = TREE_VALUE (t);
11867   if (value && TREE_CODE (value) != LABEL_DECL)
11868     value = RECUR (value);
11869   chain = TREE_CHAIN (t);
11870   if (chain && chain != void_type_node)
11871     chain = RECUR (chain);
11872   return tree_cons (purpose, value, chain);
11873 #undef RECUR
11874 }
11875
11876 /* Substitute one OMP_FOR iterator.  */
11877
11878 static void
11879 tsubst_omp_for_iterator (tree t, int i, tree declv, tree initv,
11880                          tree condv, tree incrv, tree *clauses,
11881                          tree args, tsubst_flags_t complain, tree in_decl,
11882                          bool integral_constant_expression_p)
11883 {
11884 #define RECUR(NODE)                             \
11885   tsubst_expr ((NODE), args, complain, in_decl, \
11886                integral_constant_expression_p)
11887   tree decl, init, cond, incr, auto_node;
11888
11889   init = TREE_VEC_ELT (OMP_FOR_INIT (t), i);
11890   gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
11891   decl = RECUR (TREE_OPERAND (init, 0));
11892   init = TREE_OPERAND (init, 1);
11893   auto_node = type_uses_auto (TREE_TYPE (decl));
11894   if (auto_node && init)
11895     {
11896       tree init_expr = init;
11897       if (TREE_CODE (init_expr) == DECL_EXPR)
11898         init_expr = DECL_INITIAL (DECL_EXPR_DECL (init_expr));
11899       init_expr = RECUR (init_expr);
11900       TREE_TYPE (decl)
11901         = do_auto_deduction (TREE_TYPE (decl), init_expr, auto_node);
11902     }
11903   gcc_assert (!type_dependent_expression_p (decl));
11904
11905   if (!CLASS_TYPE_P (TREE_TYPE (decl)))
11906     {
11907       cond = RECUR (TREE_VEC_ELT (OMP_FOR_COND (t), i));
11908       incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
11909       if (TREE_CODE (incr) == MODIFY_EXPR)
11910         incr = build_x_modify_expr (RECUR (TREE_OPERAND (incr, 0)), NOP_EXPR,
11911                                     RECUR (TREE_OPERAND (incr, 1)),
11912                                     complain);
11913       else
11914         incr = RECUR (incr);
11915       TREE_VEC_ELT (declv, i) = decl;
11916       TREE_VEC_ELT (initv, i) = init;
11917       TREE_VEC_ELT (condv, i) = cond;
11918       TREE_VEC_ELT (incrv, i) = incr;
11919       return;
11920     }
11921
11922   if (init && TREE_CODE (init) != DECL_EXPR)
11923     {
11924       tree c;
11925       for (c = *clauses; c ; c = OMP_CLAUSE_CHAIN (c))
11926         {
11927           if ((OMP_CLAUSE_CODE (c) == OMP_CLAUSE_PRIVATE
11928                || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE)
11929               && OMP_CLAUSE_DECL (c) == decl)
11930             break;
11931           else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FIRSTPRIVATE
11932                    && OMP_CLAUSE_DECL (c) == decl)
11933             error ("iteration variable %qD should not be firstprivate", decl);
11934           else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION
11935                    && OMP_CLAUSE_DECL (c) == decl)
11936             error ("iteration variable %qD should not be reduction", decl);
11937         }
11938       if (c == NULL)
11939         {
11940           c = build_omp_clause (input_location, OMP_CLAUSE_PRIVATE);
11941           OMP_CLAUSE_DECL (c) = decl;
11942           c = finish_omp_clauses (c);
11943           if (c)
11944             {
11945               OMP_CLAUSE_CHAIN (c) = *clauses;
11946               *clauses = c;
11947             }
11948         }
11949     }
11950   cond = TREE_VEC_ELT (OMP_FOR_COND (t), i);
11951   if (COMPARISON_CLASS_P (cond))
11952     cond = build2 (TREE_CODE (cond), boolean_type_node,
11953                    RECUR (TREE_OPERAND (cond, 0)),
11954                    RECUR (TREE_OPERAND (cond, 1)));
11955   else
11956     cond = RECUR (cond);
11957   incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
11958   switch (TREE_CODE (incr))
11959     {
11960     case PREINCREMENT_EXPR:
11961     case PREDECREMENT_EXPR:
11962     case POSTINCREMENT_EXPR:
11963     case POSTDECREMENT_EXPR:
11964       incr = build2 (TREE_CODE (incr), TREE_TYPE (decl),
11965                      RECUR (TREE_OPERAND (incr, 0)), NULL_TREE);
11966       break;
11967     case MODIFY_EXPR:
11968       if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
11969           || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
11970         {
11971           tree rhs = TREE_OPERAND (incr, 1);
11972           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl),
11973                          RECUR (TREE_OPERAND (incr, 0)),
11974                          build2 (TREE_CODE (rhs), TREE_TYPE (decl),
11975                                  RECUR (TREE_OPERAND (rhs, 0)),
11976                                  RECUR (TREE_OPERAND (rhs, 1))));
11977         }
11978       else
11979         incr = RECUR (incr);
11980       break;
11981     case MODOP_EXPR:
11982       if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
11983           || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
11984         {
11985           tree lhs = RECUR (TREE_OPERAND (incr, 0));
11986           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl), lhs,
11987                          build2 (TREE_CODE (TREE_OPERAND (incr, 1)),
11988                                  TREE_TYPE (decl), lhs,
11989                                  RECUR (TREE_OPERAND (incr, 2))));
11990         }
11991       else if (TREE_CODE (TREE_OPERAND (incr, 1)) == NOP_EXPR
11992                && (TREE_CODE (TREE_OPERAND (incr, 2)) == PLUS_EXPR
11993                    || (TREE_CODE (TREE_OPERAND (incr, 2)) == MINUS_EXPR)))
11994         {
11995           tree rhs = TREE_OPERAND (incr, 2);
11996           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl),
11997                          RECUR (TREE_OPERAND (incr, 0)),
11998                          build2 (TREE_CODE (rhs), TREE_TYPE (decl),
11999                                  RECUR (TREE_OPERAND (rhs, 0)),
12000                                  RECUR (TREE_OPERAND (rhs, 1))));
12001         }
12002       else
12003         incr = RECUR (incr);
12004       break;
12005     default:
12006       incr = RECUR (incr);
12007       break;
12008     }
12009
12010   TREE_VEC_ELT (declv, i) = decl;
12011   TREE_VEC_ELT (initv, i) = init;
12012   TREE_VEC_ELT (condv, i) = cond;
12013   TREE_VEC_ELT (incrv, i) = incr;
12014 #undef RECUR
12015 }
12016
12017 /* Like tsubst_copy for expressions, etc. but also does semantic
12018    processing.  */
12019
12020 static tree
12021 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
12022              bool integral_constant_expression_p)
12023 {
12024 #define RECUR(NODE)                             \
12025   tsubst_expr ((NODE), args, complain, in_decl, \
12026                integral_constant_expression_p)
12027
12028   tree stmt, tmp;
12029
12030   if (t == NULL_TREE || t == error_mark_node)
12031     return t;
12032
12033   if (EXPR_HAS_LOCATION (t))
12034     input_location = EXPR_LOCATION (t);
12035   if (STATEMENT_CODE_P (TREE_CODE (t)))
12036     current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
12037
12038   switch (TREE_CODE (t))
12039     {
12040     case STATEMENT_LIST:
12041       {
12042         tree_stmt_iterator i;
12043         for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
12044           RECUR (tsi_stmt (i));
12045         break;
12046       }
12047
12048     case CTOR_INITIALIZER:
12049       finish_mem_initializers (tsubst_initializer_list
12050                                (TREE_OPERAND (t, 0), args));
12051       break;
12052
12053     case RETURN_EXPR:
12054       finish_return_stmt (RECUR (TREE_OPERAND (t, 0)));
12055       break;
12056
12057     case EXPR_STMT:
12058       tmp = RECUR (EXPR_STMT_EXPR (t));
12059       if (EXPR_STMT_STMT_EXPR_RESULT (t))
12060         finish_stmt_expr_expr (tmp, cur_stmt_expr);
12061       else
12062         finish_expr_stmt (tmp);
12063       break;
12064
12065     case USING_STMT:
12066       do_using_directive (USING_STMT_NAMESPACE (t));
12067       break;
12068
12069     case DECL_EXPR:
12070       {
12071         tree decl, pattern_decl;
12072         tree init;
12073
12074         pattern_decl = decl = DECL_EXPR_DECL (t);
12075         if (TREE_CODE (decl) == LABEL_DECL)
12076           finish_label_decl (DECL_NAME (decl));
12077         else if (TREE_CODE (decl) == USING_DECL)
12078           {
12079             tree scope = USING_DECL_SCOPE (decl);
12080             tree name = DECL_NAME (decl);
12081             tree decl;
12082
12083             scope = tsubst (scope, args, complain, in_decl);
12084             decl = lookup_qualified_name (scope, name,
12085                                           /*is_type_p=*/false,
12086                                           /*complain=*/false);
12087             if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
12088               qualified_name_lookup_error (scope, name, decl, input_location);
12089             else
12090               do_local_using_decl (decl, scope, name);
12091           }
12092         else
12093           {
12094             init = DECL_INITIAL (decl);
12095             decl = tsubst (decl, args, complain, in_decl);
12096             if (decl != error_mark_node)
12097               {
12098                 /* By marking the declaration as instantiated, we avoid
12099                    trying to instantiate it.  Since instantiate_decl can't
12100                    handle local variables, and since we've already done
12101                    all that needs to be done, that's the right thing to
12102                    do.  */
12103                 if (TREE_CODE (decl) == VAR_DECL)
12104                   DECL_TEMPLATE_INSTANTIATED (decl) = 1;
12105                 if (TREE_CODE (decl) == VAR_DECL
12106                     && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
12107                   /* Anonymous aggregates are a special case.  */
12108                   finish_anon_union (decl);
12109                 else
12110                   {
12111                     int const_init = false;
12112                     maybe_push_decl (decl);
12113                     if (TREE_CODE (decl) == VAR_DECL
12114                         && DECL_PRETTY_FUNCTION_P (decl))
12115                       {
12116                         /* For __PRETTY_FUNCTION__ we have to adjust the
12117                            initializer.  */
12118                         const char *const name
12119                           = cxx_printable_name (current_function_decl, 2);
12120                         init = cp_fname_init (name, &TREE_TYPE (decl));
12121                       }
12122                     else
12123                       {
12124                         tree t = RECUR (init);
12125
12126                         if (init && !t)
12127                           {
12128                             /* If we had an initializer but it
12129                                instantiated to nothing,
12130                                value-initialize the object.  This will
12131                                only occur when the initializer was a
12132                                pack expansion where the parameter packs
12133                                used in that expansion were of length
12134                                zero.  */
12135                             init = build_value_init (TREE_TYPE (decl),
12136                                                      complain);
12137                             if (TREE_CODE (init) == AGGR_INIT_EXPR)
12138                               init = get_target_expr_sfinae (init, complain);
12139                           }
12140                         else
12141                           init = t;
12142                       }
12143
12144                     if (TREE_CODE (decl) == VAR_DECL)
12145                       const_init = (DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P
12146                                     (pattern_decl));
12147                     cp_finish_decl (decl, init, const_init, NULL_TREE, 0);
12148                   }
12149               }
12150           }
12151
12152         /* A DECL_EXPR can also be used as an expression, in the condition
12153            clause of an if/for/while construct.  */
12154         return decl;
12155       }
12156
12157     case FOR_STMT:
12158       stmt = begin_for_stmt (NULL_TREE, NULL_TREE);
12159       RECUR (FOR_INIT_STMT (t));
12160       finish_for_init_stmt (stmt);
12161       tmp = RECUR (FOR_COND (t));
12162       finish_for_cond (tmp, stmt);
12163       tmp = RECUR (FOR_EXPR (t));
12164       finish_for_expr (tmp, stmt);
12165       RECUR (FOR_BODY (t));
12166       finish_for_stmt (stmt);
12167       break;
12168
12169     case RANGE_FOR_STMT:
12170       {
12171         tree decl, expr;
12172         stmt = begin_for_stmt (NULL_TREE, NULL_TREE);
12173         decl = RANGE_FOR_DECL (t);
12174         decl = tsubst (decl, args, complain, in_decl);
12175         maybe_push_decl (decl);
12176         expr = RECUR (RANGE_FOR_EXPR (t));
12177         stmt = cp_convert_range_for (stmt, decl, expr);
12178         RECUR (RANGE_FOR_BODY (t));
12179         finish_for_stmt (stmt);
12180       }
12181       break;
12182
12183     case WHILE_STMT:
12184       stmt = begin_while_stmt ();
12185       tmp = RECUR (WHILE_COND (t));
12186       finish_while_stmt_cond (tmp, stmt);
12187       RECUR (WHILE_BODY (t));
12188       finish_while_stmt (stmt);
12189       break;
12190
12191     case DO_STMT:
12192       stmt = begin_do_stmt ();
12193       RECUR (DO_BODY (t));
12194       finish_do_body (stmt);
12195       tmp = RECUR (DO_COND (t));
12196       finish_do_stmt (tmp, stmt);
12197       break;
12198
12199     case IF_STMT:
12200       stmt = begin_if_stmt ();
12201       tmp = RECUR (IF_COND (t));
12202       finish_if_stmt_cond (tmp, stmt);
12203       RECUR (THEN_CLAUSE (t));
12204       finish_then_clause (stmt);
12205
12206       if (ELSE_CLAUSE (t))
12207         {
12208           begin_else_clause (stmt);
12209           RECUR (ELSE_CLAUSE (t));
12210           finish_else_clause (stmt);
12211         }
12212
12213       finish_if_stmt (stmt);
12214       break;
12215
12216     case BIND_EXPR:
12217       if (BIND_EXPR_BODY_BLOCK (t))
12218         stmt = begin_function_body ();
12219       else
12220         stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
12221                                     ? BCS_TRY_BLOCK : 0);
12222
12223       RECUR (BIND_EXPR_BODY (t));
12224
12225       if (BIND_EXPR_BODY_BLOCK (t))
12226         finish_function_body (stmt);
12227       else
12228         finish_compound_stmt (stmt);
12229       break;
12230
12231     case BREAK_STMT:
12232       finish_break_stmt ();
12233       break;
12234
12235     case CONTINUE_STMT:
12236       finish_continue_stmt ();
12237       break;
12238
12239     case SWITCH_STMT:
12240       stmt = begin_switch_stmt ();
12241       tmp = RECUR (SWITCH_STMT_COND (t));
12242       finish_switch_cond (tmp, stmt);
12243       RECUR (SWITCH_STMT_BODY (t));
12244       finish_switch_stmt (stmt);
12245       break;
12246
12247     case CASE_LABEL_EXPR:
12248       finish_case_label (EXPR_LOCATION (t),
12249                          RECUR (CASE_LOW (t)),
12250                          RECUR (CASE_HIGH (t)));
12251       break;
12252
12253     case LABEL_EXPR:
12254       {
12255         tree decl = LABEL_EXPR_LABEL (t);
12256         tree label;
12257
12258         label = finish_label_stmt (DECL_NAME (decl));
12259         if (DECL_ATTRIBUTES (decl) != NULL_TREE)
12260           cplus_decl_attributes (&label, DECL_ATTRIBUTES (decl), 0);
12261       }
12262       break;
12263
12264     case GOTO_EXPR:
12265       tmp = GOTO_DESTINATION (t);
12266       if (TREE_CODE (tmp) != LABEL_DECL)
12267         /* Computed goto's must be tsubst'd into.  On the other hand,
12268            non-computed gotos must not be; the identifier in question
12269            will have no binding.  */
12270         tmp = RECUR (tmp);
12271       else
12272         tmp = DECL_NAME (tmp);
12273       finish_goto_stmt (tmp);
12274       break;
12275
12276     case ASM_EXPR:
12277       tmp = finish_asm_stmt
12278         (ASM_VOLATILE_P (t),
12279          RECUR (ASM_STRING (t)),
12280          tsubst_copy_asm_operands (ASM_OUTPUTS (t), args, complain, in_decl),
12281          tsubst_copy_asm_operands (ASM_INPUTS (t), args, complain, in_decl),
12282          tsubst_copy_asm_operands (ASM_CLOBBERS (t), args, complain, in_decl),
12283          tsubst_copy_asm_operands (ASM_LABELS (t), args, complain, in_decl));
12284       {
12285         tree asm_expr = tmp;
12286         if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
12287           asm_expr = TREE_OPERAND (asm_expr, 0);
12288         ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
12289       }
12290       break;
12291
12292     case TRY_BLOCK:
12293       if (CLEANUP_P (t))
12294         {
12295           stmt = begin_try_block ();
12296           RECUR (TRY_STMTS (t));
12297           finish_cleanup_try_block (stmt);
12298           finish_cleanup (RECUR (TRY_HANDLERS (t)), stmt);
12299         }
12300       else
12301         {
12302           tree compound_stmt = NULL_TREE;
12303
12304           if (FN_TRY_BLOCK_P (t))
12305             stmt = begin_function_try_block (&compound_stmt);
12306           else
12307             stmt = begin_try_block ();
12308
12309           RECUR (TRY_STMTS (t));
12310
12311           if (FN_TRY_BLOCK_P (t))
12312             finish_function_try_block (stmt);
12313           else
12314             finish_try_block (stmt);
12315
12316           RECUR (TRY_HANDLERS (t));
12317           if (FN_TRY_BLOCK_P (t))
12318             finish_function_handler_sequence (stmt, compound_stmt);
12319           else
12320             finish_handler_sequence (stmt);
12321         }
12322       break;
12323
12324     case HANDLER:
12325       {
12326         tree decl = HANDLER_PARMS (t);
12327
12328         if (decl)
12329           {
12330             decl = tsubst (decl, args, complain, in_decl);
12331             /* Prevent instantiate_decl from trying to instantiate
12332                this variable.  We've already done all that needs to be
12333                done.  */
12334             if (decl != error_mark_node)
12335               DECL_TEMPLATE_INSTANTIATED (decl) = 1;
12336           }
12337         stmt = begin_handler ();
12338         finish_handler_parms (decl, stmt);
12339         RECUR (HANDLER_BODY (t));
12340         finish_handler (stmt);
12341       }
12342       break;
12343
12344     case TAG_DEFN:
12345       tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
12346       break;
12347
12348     case STATIC_ASSERT:
12349       {
12350         tree condition = 
12351           tsubst_expr (STATIC_ASSERT_CONDITION (t), 
12352                        args,
12353                        complain, in_decl,
12354                        /*integral_constant_expression_p=*/true);
12355         finish_static_assert (condition,
12356                               STATIC_ASSERT_MESSAGE (t),
12357                               STATIC_ASSERT_SOURCE_LOCATION (t),
12358                               /*member_p=*/false);
12359       }
12360       break;
12361
12362     case OMP_PARALLEL:
12363       tmp = tsubst_omp_clauses (OMP_PARALLEL_CLAUSES (t),
12364                                 args, complain, in_decl);
12365       stmt = begin_omp_parallel ();
12366       RECUR (OMP_PARALLEL_BODY (t));
12367       OMP_PARALLEL_COMBINED (finish_omp_parallel (tmp, stmt))
12368         = OMP_PARALLEL_COMBINED (t);
12369       break;
12370
12371     case OMP_TASK:
12372       tmp = tsubst_omp_clauses (OMP_TASK_CLAUSES (t),
12373                                 args, complain, in_decl);
12374       stmt = begin_omp_task ();
12375       RECUR (OMP_TASK_BODY (t));
12376       finish_omp_task (tmp, stmt);
12377       break;
12378
12379     case OMP_FOR:
12380       {
12381         tree clauses, body, pre_body;
12382         tree declv, initv, condv, incrv;
12383         int i;
12384
12385         clauses = tsubst_omp_clauses (OMP_FOR_CLAUSES (t),
12386                                       args, complain, in_decl);
12387         declv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
12388         initv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
12389         condv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
12390         incrv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
12391
12392         for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INIT (t)); i++)
12393           tsubst_omp_for_iterator (t, i, declv, initv, condv, incrv,
12394                                    &clauses, args, complain, in_decl,
12395                                    integral_constant_expression_p);
12396
12397         stmt = begin_omp_structured_block ();
12398
12399         for (i = 0; i < TREE_VEC_LENGTH (initv); i++)
12400           if (TREE_VEC_ELT (initv, i) == NULL
12401               || TREE_CODE (TREE_VEC_ELT (initv, i)) != DECL_EXPR)
12402             TREE_VEC_ELT (initv, i) = RECUR (TREE_VEC_ELT (initv, i));
12403           else if (CLASS_TYPE_P (TREE_TYPE (TREE_VEC_ELT (initv, i))))
12404             {
12405               tree init = RECUR (TREE_VEC_ELT (initv, i));
12406               gcc_assert (init == TREE_VEC_ELT (declv, i));
12407               TREE_VEC_ELT (initv, i) = NULL_TREE;
12408             }
12409           else
12410             {
12411               tree decl_expr = TREE_VEC_ELT (initv, i);
12412               tree init = DECL_INITIAL (DECL_EXPR_DECL (decl_expr));
12413               gcc_assert (init != NULL);
12414               TREE_VEC_ELT (initv, i) = RECUR (init);
12415               DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = NULL;
12416               RECUR (decl_expr);
12417               DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = init;
12418             }
12419
12420         pre_body = push_stmt_list ();
12421         RECUR (OMP_FOR_PRE_BODY (t));
12422         pre_body = pop_stmt_list (pre_body);
12423
12424         body = push_stmt_list ();
12425         RECUR (OMP_FOR_BODY (t));
12426         body = pop_stmt_list (body);
12427
12428         t = finish_omp_for (EXPR_LOCATION (t), declv, initv, condv, incrv,
12429                             body, pre_body, clauses);
12430
12431         add_stmt (finish_omp_structured_block (stmt));
12432       }
12433       break;
12434
12435     case OMP_SECTIONS:
12436     case OMP_SINGLE:
12437       tmp = tsubst_omp_clauses (OMP_CLAUSES (t), args, complain, in_decl);
12438       stmt = push_stmt_list ();
12439       RECUR (OMP_BODY (t));
12440       stmt = pop_stmt_list (stmt);
12441
12442       t = copy_node (t);
12443       OMP_BODY (t) = stmt;
12444       OMP_CLAUSES (t) = tmp;
12445       add_stmt (t);
12446       break;
12447
12448     case OMP_SECTION:
12449     case OMP_CRITICAL:
12450     case OMP_MASTER:
12451     case OMP_ORDERED:
12452       stmt = push_stmt_list ();
12453       RECUR (OMP_BODY (t));
12454       stmt = pop_stmt_list (stmt);
12455
12456       t = copy_node (t);
12457       OMP_BODY (t) = stmt;
12458       add_stmt (t);
12459       break;
12460
12461     case OMP_ATOMIC:
12462       gcc_assert (OMP_ATOMIC_DEPENDENT_P (t));
12463       {
12464         tree op1 = TREE_OPERAND (t, 1);
12465         tree lhs = RECUR (TREE_OPERAND (op1, 0));
12466         tree rhs = RECUR (TREE_OPERAND (op1, 1));
12467         finish_omp_atomic (TREE_CODE (op1), lhs, rhs);
12468       }
12469       break;
12470
12471     case EXPR_PACK_EXPANSION:
12472       error ("invalid use of pack expansion expression");
12473       return error_mark_node;
12474
12475     case NONTYPE_ARGUMENT_PACK:
12476       error ("use %<...%> to expand argument pack");
12477       return error_mark_node;
12478
12479     default:
12480       gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
12481
12482       return tsubst_copy_and_build (t, args, complain, in_decl,
12483                                     /*function_p=*/false,
12484                                     integral_constant_expression_p);
12485     }
12486
12487   return NULL_TREE;
12488 #undef RECUR
12489 }
12490
12491 /* T is a postfix-expression that is not being used in a function
12492    call.  Return the substituted version of T.  */
12493
12494 static tree
12495 tsubst_non_call_postfix_expression (tree t, tree args,
12496                                     tsubst_flags_t complain,
12497                                     tree in_decl)
12498 {
12499   if (TREE_CODE (t) == SCOPE_REF)
12500     t = tsubst_qualified_id (t, args, complain, in_decl,
12501                              /*done=*/false, /*address_p=*/false);
12502   else
12503     t = tsubst_copy_and_build (t, args, complain, in_decl,
12504                                /*function_p=*/false,
12505                                /*integral_constant_expression_p=*/false);
12506
12507   return t;
12508 }
12509
12510 /* Like tsubst but deals with expressions and performs semantic
12511    analysis.  FUNCTION_P is true if T is the "F" in "F (ARGS)".  */
12512
12513 tree
12514 tsubst_copy_and_build (tree t,
12515                        tree args,
12516                        tsubst_flags_t complain,
12517                        tree in_decl,
12518                        bool function_p,
12519                        bool integral_constant_expression_p)
12520 {
12521 #define RECUR(NODE)                                             \
12522   tsubst_copy_and_build (NODE, args, complain, in_decl,         \
12523                          /*function_p=*/false,                  \
12524                          integral_constant_expression_p)
12525
12526   tree op1;
12527
12528   if (t == NULL_TREE || t == error_mark_node)
12529     return t;
12530
12531   switch (TREE_CODE (t))
12532     {
12533     case USING_DECL:
12534       t = DECL_NAME (t);
12535       /* Fall through.  */
12536     case IDENTIFIER_NODE:
12537       {
12538         tree decl;
12539         cp_id_kind idk;
12540         bool non_integral_constant_expression_p;
12541         const char *error_msg;
12542
12543         if (IDENTIFIER_TYPENAME_P (t))
12544           {
12545             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
12546             t = mangle_conv_op_name_for_type (new_type);
12547           }
12548
12549         /* Look up the name.  */
12550         decl = lookup_name (t);
12551
12552         /* By convention, expressions use ERROR_MARK_NODE to indicate
12553            failure, not NULL_TREE.  */
12554         if (decl == NULL_TREE)
12555           decl = error_mark_node;
12556
12557         decl = finish_id_expression (t, decl, NULL_TREE,
12558                                      &idk,
12559                                      integral_constant_expression_p,
12560                                      /*allow_non_integral_constant_expression_p=*/false,
12561                                      &non_integral_constant_expression_p,
12562                                      /*template_p=*/false,
12563                                      /*done=*/true,
12564                                      /*address_p=*/false,
12565                                      /*template_arg_p=*/false,
12566                                      &error_msg,
12567                                      input_location);
12568         if (error_msg)
12569           error (error_msg);
12570         if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
12571           decl = unqualified_name_lookup_error (decl);
12572         return decl;
12573       }
12574
12575     case TEMPLATE_ID_EXPR:
12576       {
12577         tree object;
12578         tree templ = RECUR (TREE_OPERAND (t, 0));
12579         tree targs = TREE_OPERAND (t, 1);
12580
12581         if (targs)
12582           targs = tsubst_template_args (targs, args, complain, in_decl);
12583
12584         if (TREE_CODE (templ) == COMPONENT_REF)
12585           {
12586             object = TREE_OPERAND (templ, 0);
12587             templ = TREE_OPERAND (templ, 1);
12588           }
12589         else
12590           object = NULL_TREE;
12591         templ = lookup_template_function (templ, targs);
12592
12593         if (object)
12594           return build3 (COMPONENT_REF, TREE_TYPE (templ),
12595                          object, templ, NULL_TREE);
12596         else
12597           return baselink_for_fns (templ);
12598       }
12599
12600     case INDIRECT_REF:
12601       {
12602         tree r = RECUR (TREE_OPERAND (t, 0));
12603
12604         if (REFERENCE_REF_P (t))
12605           {
12606             /* A type conversion to reference type will be enclosed in
12607                such an indirect ref, but the substitution of the cast
12608                will have also added such an indirect ref.  */
12609             if (TREE_CODE (TREE_TYPE (r)) == REFERENCE_TYPE)
12610               r = convert_from_reference (r);
12611           }
12612         else
12613           r = build_x_indirect_ref (r, RO_UNARY_STAR, complain);
12614         return r;
12615       }
12616
12617     case NOP_EXPR:
12618       return build_nop
12619         (tsubst (TREE_TYPE (t), args, complain, in_decl),
12620          RECUR (TREE_OPERAND (t, 0)));
12621
12622     case CAST_EXPR:
12623     case REINTERPRET_CAST_EXPR:
12624     case CONST_CAST_EXPR:
12625     case DYNAMIC_CAST_EXPR:
12626     case STATIC_CAST_EXPR:
12627       {
12628         tree type;
12629         tree op;
12630
12631         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
12632         if (integral_constant_expression_p
12633             && !cast_valid_in_integral_constant_expression_p (type))
12634           {
12635             if (complain & tf_error)
12636               error ("a cast to a type other than an integral or "
12637                      "enumeration type cannot appear in a constant-expression");
12638             return error_mark_node; 
12639           }
12640
12641         op = RECUR (TREE_OPERAND (t, 0));
12642
12643         switch (TREE_CODE (t))
12644           {
12645           case CAST_EXPR:
12646             return build_functional_cast (type, op, complain);
12647           case REINTERPRET_CAST_EXPR:
12648             return build_reinterpret_cast (type, op, complain);
12649           case CONST_CAST_EXPR:
12650             return build_const_cast (type, op, complain);
12651           case DYNAMIC_CAST_EXPR:
12652             return build_dynamic_cast (type, op, complain);
12653           case STATIC_CAST_EXPR:
12654             return build_static_cast (type, op, complain);
12655           default:
12656             gcc_unreachable ();
12657           }
12658       }
12659
12660     case POSTDECREMENT_EXPR:
12661     case POSTINCREMENT_EXPR:
12662       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
12663                                                 args, complain, in_decl);
12664       return build_x_unary_op (TREE_CODE (t), op1, complain);
12665
12666     case PREDECREMENT_EXPR:
12667     case PREINCREMENT_EXPR:
12668     case NEGATE_EXPR:
12669     case BIT_NOT_EXPR:
12670     case ABS_EXPR:
12671     case TRUTH_NOT_EXPR:
12672     case UNARY_PLUS_EXPR:  /* Unary + */
12673     case REALPART_EXPR:
12674     case IMAGPART_EXPR:
12675       return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)),
12676                                complain);
12677
12678     case ADDR_EXPR:
12679       op1 = TREE_OPERAND (t, 0);
12680       if (TREE_CODE (op1) == LABEL_DECL)
12681         return finish_label_address_expr (DECL_NAME (op1),
12682                                           EXPR_LOCATION (op1));
12683       if (TREE_CODE (op1) == SCOPE_REF)
12684         op1 = tsubst_qualified_id (op1, args, complain, in_decl,
12685                                    /*done=*/true, /*address_p=*/true);
12686       else
12687         op1 = tsubst_non_call_postfix_expression (op1, args, complain,
12688                                                   in_decl);
12689       return build_x_unary_op (ADDR_EXPR, op1, complain);
12690
12691     case PLUS_EXPR:
12692     case MINUS_EXPR:
12693     case MULT_EXPR:
12694     case TRUNC_DIV_EXPR:
12695     case CEIL_DIV_EXPR:
12696     case FLOOR_DIV_EXPR:
12697     case ROUND_DIV_EXPR:
12698     case EXACT_DIV_EXPR:
12699     case BIT_AND_EXPR:
12700     case BIT_IOR_EXPR:
12701     case BIT_XOR_EXPR:
12702     case TRUNC_MOD_EXPR:
12703     case FLOOR_MOD_EXPR:
12704     case TRUTH_ANDIF_EXPR:
12705     case TRUTH_ORIF_EXPR:
12706     case TRUTH_AND_EXPR:
12707     case TRUTH_OR_EXPR:
12708     case RSHIFT_EXPR:
12709     case LSHIFT_EXPR:
12710     case RROTATE_EXPR:
12711     case LROTATE_EXPR:
12712     case EQ_EXPR:
12713     case NE_EXPR:
12714     case MAX_EXPR:
12715     case MIN_EXPR:
12716     case LE_EXPR:
12717     case GE_EXPR:
12718     case LT_EXPR:
12719     case GT_EXPR:
12720     case MEMBER_REF:
12721     case DOTSTAR_EXPR:
12722       return build_x_binary_op
12723         (TREE_CODE (t),
12724          RECUR (TREE_OPERAND (t, 0)),
12725          (TREE_NO_WARNING (TREE_OPERAND (t, 0))
12726           ? ERROR_MARK
12727           : TREE_CODE (TREE_OPERAND (t, 0))),
12728          RECUR (TREE_OPERAND (t, 1)),
12729          (TREE_NO_WARNING (TREE_OPERAND (t, 1))
12730           ? ERROR_MARK
12731           : TREE_CODE (TREE_OPERAND (t, 1))),
12732          /*overloaded_p=*/NULL,
12733          complain);
12734
12735     case SCOPE_REF:
12736       return tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
12737                                   /*address_p=*/false);
12738     case ARRAY_REF:
12739       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
12740                                                 args, complain, in_decl);
12741       return build_x_array_ref (op1, RECUR (TREE_OPERAND (t, 1)), complain);
12742
12743     case SIZEOF_EXPR:
12744       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
12745         return tsubst_copy (t, args, complain, in_decl);
12746       /* Fall through */
12747       
12748     case ALIGNOF_EXPR:
12749       op1 = TREE_OPERAND (t, 0);
12750       if (!args)
12751         {
12752           /* When there are no ARGS, we are trying to evaluate a
12753              non-dependent expression from the parser.  Trying to do
12754              the substitutions may not work.  */
12755           if (!TYPE_P (op1))
12756             op1 = TREE_TYPE (op1);
12757         }
12758       else
12759         {
12760           ++cp_unevaluated_operand;
12761           ++c_inhibit_evaluation_warnings;
12762           op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
12763                                        /*function_p=*/false,
12764                                        /*integral_constant_expression_p=*/false);
12765           --cp_unevaluated_operand;
12766           --c_inhibit_evaluation_warnings;
12767         }
12768       if (TYPE_P (op1))
12769         return cxx_sizeof_or_alignof_type (op1, TREE_CODE (t), 
12770                                            complain & tf_error);
12771       else
12772         return cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t), 
12773                                            complain & tf_error);
12774
12775     case AT_ENCODE_EXPR:
12776       {
12777         op1 = TREE_OPERAND (t, 0);
12778         ++cp_unevaluated_operand;
12779         ++c_inhibit_evaluation_warnings;
12780         op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
12781                                      /*function_p=*/false,
12782                                      /*integral_constant_expression_p=*/false);
12783         --cp_unevaluated_operand;
12784         --c_inhibit_evaluation_warnings;
12785         return objc_build_encode_expr (op1);
12786       }
12787
12788     case NOEXCEPT_EXPR:
12789       op1 = TREE_OPERAND (t, 0);
12790       ++cp_unevaluated_operand;
12791       ++c_inhibit_evaluation_warnings;
12792       op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
12793                                    /*function_p=*/false,
12794                                    /*integral_constant_expression_p=*/false);
12795       --cp_unevaluated_operand;
12796       --c_inhibit_evaluation_warnings;
12797       return finish_noexcept_expr (op1, complain);
12798
12799     case MODOP_EXPR:
12800       {
12801         tree r = build_x_modify_expr
12802           (RECUR (TREE_OPERAND (t, 0)),
12803            TREE_CODE (TREE_OPERAND (t, 1)),
12804            RECUR (TREE_OPERAND (t, 2)),
12805            complain);
12806         /* TREE_NO_WARNING must be set if either the expression was
12807            parenthesized or it uses an operator such as >>= rather
12808            than plain assignment.  In the former case, it was already
12809            set and must be copied.  In the latter case,
12810            build_x_modify_expr sets it and it must not be reset
12811            here.  */
12812         if (TREE_NO_WARNING (t))
12813           TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
12814         return r;
12815       }
12816
12817     case ARROW_EXPR:
12818       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
12819                                                 args, complain, in_decl);
12820       /* Remember that there was a reference to this entity.  */
12821       if (DECL_P (op1))
12822         mark_used (op1);
12823       return build_x_arrow (op1);
12824
12825     case NEW_EXPR:
12826       {
12827         tree placement = RECUR (TREE_OPERAND (t, 0));
12828         tree init = RECUR (TREE_OPERAND (t, 3));
12829         VEC(tree,gc) *placement_vec;
12830         VEC(tree,gc) *init_vec;
12831         tree ret;
12832
12833         if (placement == NULL_TREE)
12834           placement_vec = NULL;
12835         else
12836           {
12837             placement_vec = make_tree_vector ();
12838             for (; placement != NULL_TREE; placement = TREE_CHAIN (placement))
12839               VEC_safe_push (tree, gc, placement_vec, TREE_VALUE (placement));
12840           }
12841
12842         /* If there was an initializer in the original tree, but it
12843            instantiated to an empty list, then we should pass a
12844            non-NULL empty vector to tell build_new that it was an
12845            empty initializer() rather than no initializer.  This can
12846            only happen when the initializer is a pack expansion whose
12847            parameter packs are of length zero.  */
12848         if (init == NULL_TREE && TREE_OPERAND (t, 3) == NULL_TREE)
12849           init_vec = NULL;
12850         else
12851           {
12852             init_vec = make_tree_vector ();
12853             if (init == void_zero_node)
12854               gcc_assert (init_vec != NULL);
12855             else
12856               {
12857                 for (; init != NULL_TREE; init = TREE_CHAIN (init))
12858                   VEC_safe_push (tree, gc, init_vec, TREE_VALUE (init));
12859               }
12860           }
12861
12862         ret = build_new (&placement_vec,
12863                          tsubst (TREE_OPERAND (t, 1), args, complain, in_decl),
12864                          RECUR (TREE_OPERAND (t, 2)),
12865                          &init_vec,
12866                          NEW_EXPR_USE_GLOBAL (t),
12867                          complain);
12868
12869         if (placement_vec != NULL)
12870           release_tree_vector (placement_vec);
12871         if (init_vec != NULL)
12872           release_tree_vector (init_vec);
12873
12874         return ret;
12875       }
12876
12877     case DELETE_EXPR:
12878      return delete_sanity
12879        (RECUR (TREE_OPERAND (t, 0)),
12880         RECUR (TREE_OPERAND (t, 1)),
12881         DELETE_EXPR_USE_VEC (t),
12882         DELETE_EXPR_USE_GLOBAL (t),
12883         complain);
12884
12885     case COMPOUND_EXPR:
12886       return build_x_compound_expr (RECUR (TREE_OPERAND (t, 0)),
12887                                     RECUR (TREE_OPERAND (t, 1)),
12888                                     complain);
12889
12890     case CALL_EXPR:
12891       {
12892         tree function;
12893         VEC(tree,gc) *call_args;
12894         unsigned int nargs, i;
12895         bool qualified_p;
12896         bool koenig_p;
12897         tree ret;
12898
12899         function = CALL_EXPR_FN (t);
12900         /* When we parsed the expression,  we determined whether or
12901            not Koenig lookup should be performed.  */
12902         koenig_p = KOENIG_LOOKUP_P (t);
12903         if (TREE_CODE (function) == SCOPE_REF)
12904           {
12905             qualified_p = true;
12906             function = tsubst_qualified_id (function, args, complain, in_decl,
12907                                             /*done=*/false,
12908                                             /*address_p=*/false);
12909           }
12910         else if (koenig_p && TREE_CODE (function) == IDENTIFIER_NODE)
12911           {
12912             /* Do nothing; calling tsubst_copy_and_build on an identifier
12913                would incorrectly perform unqualified lookup again.
12914
12915                Note that we can also have an IDENTIFIER_NODE if the earlier
12916                unqualified lookup found a member function; in that case
12917                koenig_p will be false and we do want to do the lookup
12918                again to find the instantiated member function.
12919
12920                FIXME but doing that causes c++/15272, so we need to stop
12921                using IDENTIFIER_NODE in that situation.  */
12922             qualified_p = false;
12923           }
12924         else
12925           {
12926             if (TREE_CODE (function) == COMPONENT_REF)
12927               {
12928                 tree op = TREE_OPERAND (function, 1);
12929
12930                 qualified_p = (TREE_CODE (op) == SCOPE_REF
12931                                || (BASELINK_P (op)
12932                                    && BASELINK_QUALIFIED_P (op)));
12933               }
12934             else
12935               qualified_p = false;
12936
12937             function = tsubst_copy_and_build (function, args, complain,
12938                                               in_decl,
12939                                               !qualified_p,
12940                                               integral_constant_expression_p);
12941
12942             if (BASELINK_P (function))
12943               qualified_p = true;
12944           }
12945
12946         nargs = call_expr_nargs (t);
12947         call_args = make_tree_vector ();
12948         for (i = 0; i < nargs; ++i)
12949           {
12950             tree arg = CALL_EXPR_ARG (t, i);
12951
12952             if (!PACK_EXPANSION_P (arg))
12953               VEC_safe_push (tree, gc, call_args,
12954                              RECUR (CALL_EXPR_ARG (t, i)));
12955             else
12956               {
12957                 /* Expand the pack expansion and push each entry onto
12958                    CALL_ARGS.  */
12959                 arg = tsubst_pack_expansion (arg, args, complain, in_decl);
12960                 if (TREE_CODE (arg) == TREE_VEC)
12961                   {
12962                     unsigned int len, j;
12963
12964                     len = TREE_VEC_LENGTH (arg);
12965                     for (j = 0; j < len; ++j)
12966                       {
12967                         tree value = TREE_VEC_ELT (arg, j);
12968                         if (value != NULL_TREE)
12969                           value = convert_from_reference (value);
12970                         VEC_safe_push (tree, gc, call_args, value);
12971                       }
12972                   }
12973                 else
12974                   {
12975                     /* A partial substitution.  Add one entry.  */
12976                     VEC_safe_push (tree, gc, call_args, arg);
12977                   }
12978               }
12979           }
12980
12981         /* We do not perform argument-dependent lookup if normal
12982            lookup finds a non-function, in accordance with the
12983            expected resolution of DR 218.  */
12984         if (koenig_p
12985             && ((is_overloaded_fn (function)
12986                  /* If lookup found a member function, the Koenig lookup is
12987                     not appropriate, even if an unqualified-name was used
12988                     to denote the function.  */
12989                  && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
12990                 || TREE_CODE (function) == IDENTIFIER_NODE)
12991             /* Only do this when substitution turns a dependent call
12992                into a non-dependent call.  */
12993             && type_dependent_expression_p_push (t)
12994             && !any_type_dependent_arguments_p (call_args))
12995           function = perform_koenig_lookup (function, call_args, false,
12996                                             tf_none);
12997
12998         if (TREE_CODE (function) == IDENTIFIER_NODE
12999             && !any_type_dependent_arguments_p (call_args))
13000           {
13001             if (koenig_p && (complain & tf_warning_or_error))
13002               {
13003                 /* For backwards compatibility and good diagnostics, try
13004                    the unqualified lookup again if we aren't in SFINAE
13005                    context.  */
13006                 tree unq = (tsubst_copy_and_build
13007                             (function, args, complain, in_decl, true,
13008                              integral_constant_expression_p));
13009                 if (unq != function)
13010                   {
13011                     tree fn = unq;
13012                     if (TREE_CODE (fn) == COMPONENT_REF)
13013                       fn = TREE_OPERAND (fn, 1);
13014                     if (is_overloaded_fn (fn))
13015                       fn = get_first_fn (fn);
13016                     permerror (EXPR_LOC_OR_HERE (t),
13017                                "%qD was not declared in this scope, "
13018                                "and no declarations were found by "
13019                                "argument-dependent lookup at the point "
13020                                "of instantiation", function);
13021                     if (DECL_CLASS_SCOPE_P (fn))
13022                       {
13023                         inform (EXPR_LOC_OR_HERE (t),
13024                                 "declarations in dependent base %qT are "
13025                                 "not found by unqualified lookup",
13026                                 DECL_CLASS_CONTEXT (fn));
13027                         if (current_class_ptr)
13028                           inform (EXPR_LOC_OR_HERE (t),
13029                                   "use %<this->%D%> instead", function);
13030                         else
13031                           inform (EXPR_LOC_OR_HERE (t),
13032                                   "use %<%T::%D%> instead",
13033                                   current_class_name, function);
13034                       }
13035                     else
13036                       inform (0, "%q+D declared here, later in the "
13037                                 "translation unit", fn);
13038                     function = unq;
13039                   }
13040               }
13041             if (TREE_CODE (function) == IDENTIFIER_NODE)
13042               {
13043                 unqualified_name_lookup_error (function);
13044                 release_tree_vector (call_args);
13045                 return error_mark_node;
13046               }
13047           }
13048
13049         /* Remember that there was a reference to this entity.  */
13050         if (DECL_P (function))
13051           mark_used (function);
13052
13053         if (TREE_CODE (function) == OFFSET_REF)
13054           ret = build_offset_ref_call_from_tree (function, &call_args);
13055         else if (TREE_CODE (function) == COMPONENT_REF)
13056           {
13057             tree instance = TREE_OPERAND (function, 0);
13058             tree fn = TREE_OPERAND (function, 1);
13059
13060             if (processing_template_decl
13061                 && (type_dependent_expression_p (instance)
13062                     || (!BASELINK_P (fn)
13063                         && TREE_CODE (fn) != FIELD_DECL)
13064                     || type_dependent_expression_p (fn)
13065                     || any_type_dependent_arguments_p (call_args)))
13066               ret = build_nt_call_vec (function, call_args);
13067             else if (!BASELINK_P (fn))
13068               ret = finish_call_expr (function, &call_args,
13069                                        /*disallow_virtual=*/false,
13070                                        /*koenig_p=*/false,
13071                                        complain);
13072             else
13073               ret = (build_new_method_call
13074                       (instance, fn,
13075                        &call_args, NULL_TREE,
13076                        qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL,
13077                        /*fn_p=*/NULL,
13078                        complain));
13079           }
13080         else
13081           ret = finish_call_expr (function, &call_args,
13082                                   /*disallow_virtual=*/qualified_p,
13083                                   koenig_p,
13084                                   complain);
13085
13086         release_tree_vector (call_args);
13087
13088         return ret;
13089       }
13090
13091     case COND_EXPR:
13092       return build_x_conditional_expr
13093         (RECUR (TREE_OPERAND (t, 0)),
13094          RECUR (TREE_OPERAND (t, 1)),
13095          RECUR (TREE_OPERAND (t, 2)),
13096          complain);
13097
13098     case PSEUDO_DTOR_EXPR:
13099       return finish_pseudo_destructor_expr
13100         (RECUR (TREE_OPERAND (t, 0)),
13101          RECUR (TREE_OPERAND (t, 1)),
13102          tsubst (TREE_OPERAND (t, 2), args, complain, in_decl));
13103
13104     case TREE_LIST:
13105       {
13106         tree purpose, value, chain;
13107
13108         if (t == void_list_node)
13109           return t;
13110
13111         if ((TREE_PURPOSE (t) && PACK_EXPANSION_P (TREE_PURPOSE (t)))
13112             || (TREE_VALUE (t) && PACK_EXPANSION_P (TREE_VALUE (t))))
13113           {
13114             /* We have pack expansions, so expand those and
13115                create a new list out of it.  */
13116             tree purposevec = NULL_TREE;
13117             tree valuevec = NULL_TREE;
13118             tree chain;
13119             int i, len = -1;
13120
13121             /* Expand the argument expressions.  */
13122             if (TREE_PURPOSE (t))
13123               purposevec = tsubst_pack_expansion (TREE_PURPOSE (t), args,
13124                                                  complain, in_decl);
13125             if (TREE_VALUE (t))
13126               valuevec = tsubst_pack_expansion (TREE_VALUE (t), args,
13127                                                complain, in_decl);
13128
13129             /* Build the rest of the list.  */
13130             chain = TREE_CHAIN (t);
13131             if (chain && chain != void_type_node)
13132               chain = RECUR (chain);
13133
13134             /* Determine the number of arguments.  */
13135             if (purposevec && TREE_CODE (purposevec) == TREE_VEC)
13136               {
13137                 len = TREE_VEC_LENGTH (purposevec);
13138                 gcc_assert (!valuevec || len == TREE_VEC_LENGTH (valuevec));
13139               }
13140             else if (TREE_CODE (valuevec) == TREE_VEC)
13141               len = TREE_VEC_LENGTH (valuevec);
13142             else
13143               {
13144                 /* Since we only performed a partial substitution into
13145                    the argument pack, we only return a single list
13146                    node.  */
13147                 if (purposevec == TREE_PURPOSE (t)
13148                     && valuevec == TREE_VALUE (t)
13149                     && chain == TREE_CHAIN (t))
13150                   return t;
13151
13152                 return tree_cons (purposevec, valuevec, chain);
13153               }
13154             
13155             /* Convert the argument vectors into a TREE_LIST */
13156             i = len;
13157             while (i > 0)
13158               {
13159                 /* Grab the Ith values.  */
13160                 i--;
13161                 purpose = purposevec ? TREE_VEC_ELT (purposevec, i) 
13162                                      : NULL_TREE;
13163                 value 
13164                   = valuevec ? convert_from_reference (TREE_VEC_ELT (valuevec, i)) 
13165                              : NULL_TREE;
13166
13167                 /* Build the list (backwards).  */
13168                 chain = tree_cons (purpose, value, chain);
13169               }
13170
13171             return chain;
13172           }
13173
13174         purpose = TREE_PURPOSE (t);
13175         if (purpose)
13176           purpose = RECUR (purpose);
13177         value = TREE_VALUE (t);
13178         if (value)
13179           value = RECUR (value);
13180         chain = TREE_CHAIN (t);
13181         if (chain && chain != void_type_node)
13182           chain = RECUR (chain);
13183         if (purpose == TREE_PURPOSE (t)
13184             && value == TREE_VALUE (t)
13185             && chain == TREE_CHAIN (t))
13186           return t;
13187         return tree_cons (purpose, value, chain);
13188       }
13189
13190     case COMPONENT_REF:
13191       {
13192         tree object;
13193         tree object_type;
13194         tree member;
13195
13196         object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
13197                                                      args, complain, in_decl);
13198         /* Remember that there was a reference to this entity.  */
13199         if (DECL_P (object))
13200           mark_used (object);
13201         object_type = TREE_TYPE (object);
13202
13203         member = TREE_OPERAND (t, 1);
13204         if (BASELINK_P (member))
13205           member = tsubst_baselink (member,
13206                                     non_reference (TREE_TYPE (object)),
13207                                     args, complain, in_decl);
13208         else
13209           member = tsubst_copy (member, args, complain, in_decl);
13210         if (member == error_mark_node)
13211           return error_mark_node;
13212
13213         if (object_type && !CLASS_TYPE_P (object_type))
13214           {
13215             if (SCALAR_TYPE_P (object_type))
13216               {
13217                 tree s = NULL_TREE;
13218                 tree dtor = member;
13219
13220                 if (TREE_CODE (dtor) == SCOPE_REF)
13221                   {
13222                     s = TREE_OPERAND (dtor, 0);
13223                     dtor = TREE_OPERAND (dtor, 1);
13224                   }
13225                 if (TREE_CODE (dtor) == BIT_NOT_EXPR)
13226                   {
13227                     dtor = TREE_OPERAND (dtor, 0);
13228                     if (TYPE_P (dtor))
13229                       return finish_pseudo_destructor_expr (object, s, dtor);
13230                   }
13231               }
13232           }
13233         else if (TREE_CODE (member) == SCOPE_REF
13234                  && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
13235           {
13236             tree tmpl;
13237             tree args;
13238
13239             /* Lookup the template functions now that we know what the
13240                scope is.  */
13241             tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
13242             args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
13243             member = lookup_qualified_name (TREE_OPERAND (member, 0), tmpl,
13244                                             /*is_type_p=*/false,
13245                                             /*complain=*/false);
13246             if (BASELINK_P (member))
13247               {
13248                 BASELINK_FUNCTIONS (member)
13249                   = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
13250                               args);
13251                 member = (adjust_result_of_qualified_name_lookup
13252                           (member, BINFO_TYPE (BASELINK_BINFO (member)),
13253                            object_type));
13254               }
13255             else
13256               {
13257                 qualified_name_lookup_error (object_type, tmpl, member,
13258                                              input_location);
13259                 return error_mark_node;
13260               }
13261           }
13262         else if (TREE_CODE (member) == SCOPE_REF
13263                  && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
13264                  && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
13265           {
13266             if (complain & tf_error)
13267               {
13268                 if (TYPE_P (TREE_OPERAND (member, 0)))
13269                   error ("%qT is not a class or namespace",
13270                          TREE_OPERAND (member, 0));
13271                 else
13272                   error ("%qD is not a class or namespace",
13273                          TREE_OPERAND (member, 0));
13274               }
13275             return error_mark_node;
13276           }
13277         else if (TREE_CODE (member) == FIELD_DECL)
13278           return finish_non_static_data_member (member, object, NULL_TREE);
13279
13280         return finish_class_member_access_expr (object, member,
13281                                                 /*template_p=*/false,
13282                                                 complain);
13283       }
13284
13285     case THROW_EXPR:
13286       return build_throw
13287         (RECUR (TREE_OPERAND (t, 0)));
13288
13289     case CONSTRUCTOR:
13290       {
13291         VEC(constructor_elt,gc) *n;
13292         constructor_elt *ce;
13293         unsigned HOST_WIDE_INT idx;
13294         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13295         bool process_index_p;
13296         int newlen;
13297         bool need_copy_p = false;
13298         tree r;
13299
13300         if (type == error_mark_node)
13301           return error_mark_node;
13302
13303         /* digest_init will do the wrong thing if we let it.  */
13304         if (type && TYPE_PTRMEMFUNC_P (type))
13305           return t;
13306
13307         /* We do not want to process the index of aggregate
13308            initializers as they are identifier nodes which will be
13309            looked up by digest_init.  */
13310         process_index_p = !(type && MAYBE_CLASS_TYPE_P (type));
13311
13312         n = VEC_copy (constructor_elt, gc, CONSTRUCTOR_ELTS (t));
13313         newlen = VEC_length (constructor_elt, n);
13314         FOR_EACH_VEC_ELT (constructor_elt, n, idx, ce)
13315           {
13316             if (ce->index && process_index_p)
13317               ce->index = RECUR (ce->index);
13318
13319             if (PACK_EXPANSION_P (ce->value))
13320               {
13321                 /* Substitute into the pack expansion.  */
13322                 ce->value = tsubst_pack_expansion (ce->value, args, complain,
13323                                                   in_decl);
13324
13325                 if (ce->value == error_mark_node
13326                     || PACK_EXPANSION_P (ce->value))
13327                   ;
13328                 else if (TREE_VEC_LENGTH (ce->value) == 1)
13329                   /* Just move the argument into place.  */
13330                   ce->value = TREE_VEC_ELT (ce->value, 0);
13331                 else
13332                   {
13333                     /* Update the length of the final CONSTRUCTOR
13334                        arguments vector, and note that we will need to
13335                        copy.*/
13336                     newlen = newlen + TREE_VEC_LENGTH (ce->value) - 1;
13337                     need_copy_p = true;
13338                   }
13339               }
13340             else
13341               ce->value = RECUR (ce->value);
13342           }
13343
13344         if (need_copy_p)
13345           {
13346             VEC(constructor_elt,gc) *old_n = n;
13347
13348             n = VEC_alloc (constructor_elt, gc, newlen);
13349             FOR_EACH_VEC_ELT (constructor_elt, old_n, idx, ce)
13350               {
13351                 if (TREE_CODE (ce->value) == TREE_VEC)
13352                   {
13353                     int i, len = TREE_VEC_LENGTH (ce->value);
13354                     for (i = 0; i < len; ++i)
13355                       CONSTRUCTOR_APPEND_ELT (n, 0,
13356                                               TREE_VEC_ELT (ce->value, i));
13357                   }
13358                 else
13359                   CONSTRUCTOR_APPEND_ELT (n, 0, ce->value);
13360               }
13361           }
13362
13363         r = build_constructor (init_list_type_node, n);
13364         CONSTRUCTOR_IS_DIRECT_INIT (r) = CONSTRUCTOR_IS_DIRECT_INIT (t);
13365
13366         if (TREE_HAS_CONSTRUCTOR (t))
13367           return finish_compound_literal (type, r, complain);
13368
13369         TREE_TYPE (r) = type;
13370         return r;
13371       }
13372
13373     case TYPEID_EXPR:
13374       {
13375         tree operand_0 = TREE_OPERAND (t, 0);
13376         if (TYPE_P (operand_0))
13377           {
13378             operand_0 = tsubst (operand_0, args, complain, in_decl);
13379             return get_typeid (operand_0);
13380           }
13381         else
13382           {
13383             operand_0 = RECUR (operand_0);
13384             return build_typeid (operand_0);
13385           }
13386       }
13387
13388     case VAR_DECL:
13389       if (!args)
13390         return t;
13391       /* Fall through */
13392
13393     case PARM_DECL:
13394       {
13395         tree r = tsubst_copy (t, args, complain, in_decl);
13396
13397         if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
13398           /* If the original type was a reference, we'll be wrapped in
13399              the appropriate INDIRECT_REF.  */
13400           r = convert_from_reference (r);
13401         return r;
13402       }
13403
13404     case VA_ARG_EXPR:
13405       return build_x_va_arg (RECUR (TREE_OPERAND (t, 0)),
13406                              tsubst (TREE_TYPE (t), args, complain, in_decl));
13407
13408     case OFFSETOF_EXPR:
13409       return finish_offsetof (RECUR (TREE_OPERAND (t, 0)));
13410
13411     case TRAIT_EXPR:
13412       {
13413         tree type1 = tsubst_copy (TRAIT_EXPR_TYPE1 (t), args,
13414                                   complain, in_decl);
13415
13416         tree type2 = TRAIT_EXPR_TYPE2 (t);
13417         if (type2)
13418           type2 = tsubst_copy (type2, args, complain, in_decl);
13419         
13420         return finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2);
13421       }
13422
13423     case STMT_EXPR:
13424       {
13425         tree old_stmt_expr = cur_stmt_expr;
13426         tree stmt_expr = begin_stmt_expr ();
13427
13428         cur_stmt_expr = stmt_expr;
13429         tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl,
13430                      integral_constant_expression_p);
13431         stmt_expr = finish_stmt_expr (stmt_expr, false);
13432         cur_stmt_expr = old_stmt_expr;
13433
13434         /* If the resulting list of expression statement is empty,
13435            fold it further into void_zero_node.  */
13436         if (empty_expr_stmt_p (stmt_expr))
13437           stmt_expr = void_zero_node;
13438
13439         return stmt_expr;
13440       }
13441
13442     case CONST_DECL:
13443       t = tsubst_copy (t, args, complain, in_decl);
13444       /* As in finish_id_expression, we resolve enumeration constants
13445          to their underlying values.  */
13446       if (TREE_CODE (t) == CONST_DECL)
13447         {
13448           used_types_insert (TREE_TYPE (t));
13449           return DECL_INITIAL (t);
13450         }
13451       return t;
13452
13453     case LAMBDA_EXPR:
13454       {
13455         tree r = build_lambda_expr ();
13456
13457         tree type = tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
13458         TREE_TYPE (r) = type;
13459         CLASSTYPE_LAMBDA_EXPR (type) = r;
13460
13461         LAMBDA_EXPR_LOCATION (r)
13462           = LAMBDA_EXPR_LOCATION (t);
13463         LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (r)
13464           = LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (t);
13465         LAMBDA_EXPR_MUTABLE_P (r) = LAMBDA_EXPR_MUTABLE_P (t);
13466         LAMBDA_EXPR_DISCRIMINATOR (r)
13467           = (LAMBDA_EXPR_DISCRIMINATOR (t));
13468         LAMBDA_EXPR_CAPTURE_LIST (r)
13469           = RECUR (LAMBDA_EXPR_CAPTURE_LIST (t));
13470         LAMBDA_EXPR_THIS_CAPTURE (r)
13471           = RECUR (LAMBDA_EXPR_THIS_CAPTURE (t));
13472         LAMBDA_EXPR_EXTRA_SCOPE (r)
13473           = RECUR (LAMBDA_EXPR_EXTRA_SCOPE (t));
13474
13475         /* Do this again now that LAMBDA_EXPR_EXTRA_SCOPE is set.  */
13476         determine_visibility (TYPE_NAME (type));
13477         /* Now that we know visibility, instantiate the type so we have a
13478            declaration of the op() for later calls to lambda_function.  */
13479         complete_type (type);
13480
13481         type = tsubst (LAMBDA_EXPR_RETURN_TYPE (t), args, complain, in_decl);
13482         if (type)
13483           apply_lambda_return_type (r, type);
13484
13485         return build_lambda_object (r);
13486       }
13487
13488     case TARGET_EXPR:
13489       /* We can get here for a constant initializer of non-dependent type.
13490          FIXME stop folding in cp_parser_initializer_clause.  */
13491       gcc_assert (TREE_CONSTANT (t));
13492       {
13493         tree r = get_target_expr (RECUR (TARGET_EXPR_INITIAL (t)));
13494         TREE_CONSTANT (r) = true;
13495         return r;
13496       }
13497
13498     default:
13499       /* Handle Objective-C++ constructs, if appropriate.  */
13500       {
13501         tree subst
13502           = objcp_tsubst_copy_and_build (t, args, complain,
13503                                          in_decl, /*function_p=*/false);
13504         if (subst)
13505           return subst;
13506       }
13507       return tsubst_copy (t, args, complain, in_decl);
13508     }
13509
13510 #undef RECUR
13511 }
13512
13513 /* Verify that the instantiated ARGS are valid. For type arguments,
13514    make sure that the type's linkage is ok. For non-type arguments,
13515    make sure they are constants if they are integral or enumerations.
13516    Emit an error under control of COMPLAIN, and return TRUE on error.  */
13517
13518 static bool
13519 check_instantiated_arg (tree tmpl, tree t, tsubst_flags_t complain)
13520 {
13521   if (ARGUMENT_PACK_P (t))
13522     {
13523       tree vec = ARGUMENT_PACK_ARGS (t);
13524       int len = TREE_VEC_LENGTH (vec);
13525       bool result = false;
13526       int i;
13527
13528       for (i = 0; i < len; ++i)
13529         if (check_instantiated_arg (tmpl, TREE_VEC_ELT (vec, i), complain))
13530           result = true;
13531       return result;
13532     }
13533   else if (TYPE_P (t))
13534     {
13535       /* [basic.link]: A name with no linkage (notably, the name
13536          of a class or enumeration declared in a local scope)
13537          shall not be used to declare an entity with linkage.
13538          This implies that names with no linkage cannot be used as
13539          template arguments
13540
13541          DR 757 relaxes this restriction for C++0x.  */
13542       tree nt = (cxx_dialect > cxx98 ? NULL_TREE
13543                  : no_linkage_check (t, /*relaxed_p=*/false));
13544
13545       if (nt)
13546         {
13547           /* DR 488 makes use of a type with no linkage cause
13548              type deduction to fail.  */
13549           if (complain & tf_error)
13550             {
13551               if (TYPE_ANONYMOUS_P (nt))
13552                 error ("%qT is/uses anonymous type", t);
13553               else
13554                 error ("template argument for %qD uses local type %qT",
13555                        tmpl, t);
13556             }
13557           return true;
13558         }
13559       /* In order to avoid all sorts of complications, we do not
13560          allow variably-modified types as template arguments.  */
13561       else if (variably_modified_type_p (t, NULL_TREE))
13562         {
13563           if (complain & tf_error)
13564             error ("%qT is a variably modified type", t);
13565           return true;
13566         }
13567     }
13568   /* A non-type argument of integral or enumerated type must be a
13569      constant.  */
13570   else if (TREE_TYPE (t)
13571            && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
13572            && !TREE_CONSTANT (t))
13573     {
13574       if (complain & tf_error)
13575         error ("integral expression %qE is not constant", t);
13576       return true;
13577     }
13578   return false;
13579 }
13580
13581 static bool
13582 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
13583 {
13584   int ix, len = DECL_NTPARMS (tmpl);
13585   bool result = false;
13586
13587   for (ix = 0; ix != len; ix++)
13588     {
13589       if (check_instantiated_arg (tmpl, TREE_VEC_ELT (args, ix), complain))
13590         result = true;
13591     }
13592   if (result && (complain & tf_error))
13593     error ("  trying to instantiate %qD", tmpl);
13594   return result;
13595 }
13596
13597 DEF_VEC_O (spec_entry);
13598 DEF_VEC_ALLOC_O (spec_entry,gc);
13599 static GTY(()) VEC(spec_entry,gc) *current_deduction_vec;
13600 static GTY((param_is (spec_entry))) htab_t current_deduction_htab;
13601
13602 /* In C++0x, it's possible to have a function template whose type depends
13603    on itself recursively.  This is most obvious with decltype, but can also
13604    occur with enumeration scope (c++/48969).  So we need to catch infinite
13605    recursion and reject the substitution at deduction time; this function
13606    will return error_mark_node for any repeated substitution.
13607
13608    This also catches excessive recursion such as when f<N> depends on
13609    f<N-1> across all integers, and returns error_mark_node for all the
13610    substitutions back up to the initial one.
13611
13612    This is, of course, not reentrant.
13613
13614    Use of a VEC here is O(n^2) in the depth of function template argument
13615    deduction substitution, but using a hash table creates a lot of constant
13616    overhead for the typical case of very low depth.  So to make the typical
13617    case fast we start out with a VEC and switch to a hash table only if
13618    depth gets to be significant; in one metaprogramming testcase, even at
13619    depth 80 the overhead of the VEC relative to a hash table was only about
13620    0.5% of compile time.  */
13621
13622 static tree
13623 deduction_tsubst_fntype (tree fn, tree targs)
13624 {
13625   static bool excessive_deduction_depth;
13626
13627   unsigned i;
13628   spec_entry **slot;
13629   spec_entry *p;
13630   spec_entry elt;
13631   tree r;
13632   hashval_t hash;
13633
13634   tree fntype = TREE_TYPE (fn);
13635
13636   /* We don't need to worry about this in C++98.  */
13637   if (cxx_dialect < cxx0x)
13638     {
13639       push_deduction_access_scope (fn);
13640       r = tsubst (fntype, targs, tf_none, NULL_TREE);
13641       pop_deduction_access_scope (fn);
13642       return r;
13643     }
13644
13645   /* If we're seeing a lot of recursion, switch over to a hash table.  The
13646      constant 40 is fairly arbitrary.  */
13647   if (!current_deduction_htab
13648       && VEC_length (spec_entry, current_deduction_vec) > 40)
13649     {
13650       current_deduction_htab = htab_create_ggc (40*2, hash_specialization,
13651                                                 eq_specializations, ggc_free);
13652       FOR_EACH_VEC_ELT (spec_entry, current_deduction_vec, i, p)
13653         {
13654           slot = (spec_entry **) htab_find_slot (current_deduction_htab,
13655                                                  p, INSERT);
13656           *slot = ggc_alloc_spec_entry ();
13657           **slot = *p;
13658         }
13659       VEC_free (spec_entry, gc, current_deduction_vec);
13660     }
13661
13662   /* Now check everything in the vector, if any.  */
13663   FOR_EACH_VEC_ELT (spec_entry, current_deduction_vec, i, p)
13664     if (p->tmpl == fn && comp_template_args (p->args, targs))
13665       {
13666         p->spec = error_mark_node;
13667         return error_mark_node;
13668       }
13669
13670   elt.tmpl = fn;
13671   elt.args = targs;
13672   elt.spec = NULL_TREE;
13673
13674   /* If we've created a hash table, look there.  */
13675   if (current_deduction_htab)
13676     {
13677       if (htab_elements (current_deduction_htab)
13678           > (unsigned) max_tinst_depth)
13679         {
13680           /* Trying to recurse across all integers or some such.  */
13681           excessive_deduction_depth = true;
13682           return error_mark_node;
13683         }
13684
13685       hash = hash_specialization (&elt);
13686       slot = (spec_entry **)
13687         htab_find_slot_with_hash (current_deduction_htab, &elt, hash, INSERT);
13688       if (*slot)
13689         {
13690           /* We already have an entry for this.  */
13691           (*slot)->spec = error_mark_node;
13692           return error_mark_node;
13693         }
13694       else
13695         {
13696           /* Create a new entry.  */
13697           *slot = ggc_alloc_spec_entry ();
13698           **slot = elt;
13699         }
13700     }
13701   else
13702     {
13703       /* No hash table, so add it to the VEC.  */
13704       hash = 0;
13705       VEC_safe_push (spec_entry, gc, current_deduction_vec, &elt);
13706     }
13707
13708   push_deduction_access_scope (fn);
13709   r = tsubst (fntype, targs, tf_none, NULL_TREE);
13710   pop_deduction_access_scope (fn);
13711
13712   /* After doing the substitution, make sure we didn't hit it again.  Note
13713      that we might have switched to a hash table during tsubst.  */
13714   if (current_deduction_htab)
13715     {
13716       if (hash == 0)
13717         hash = hash_specialization (&elt);
13718       slot = (spec_entry **)
13719         htab_find_slot_with_hash (current_deduction_htab, &elt, hash,
13720                                   NO_INSERT);
13721       if ((*slot)->spec == error_mark_node)
13722         r = error_mark_node;
13723       htab_clear_slot (current_deduction_htab, (void**)slot);
13724     }
13725   else
13726     {
13727       if (VEC_last (spec_entry, current_deduction_vec)->spec
13728           == error_mark_node)
13729         r = error_mark_node;
13730       VEC_pop (spec_entry, current_deduction_vec);
13731     }
13732   if (excessive_deduction_depth)
13733     {
13734       r = error_mark_node;
13735       if (htab_elements (current_deduction_htab) == 0)
13736         /* Reset once we're all the way out.  */
13737         excessive_deduction_depth = false;
13738     }
13739   return r;
13740 }
13741
13742 /* Instantiate the indicated variable or function template TMPL with
13743    the template arguments in TARG_PTR.  */
13744
13745 static tree
13746 instantiate_template_1 (tree tmpl, tree orig_args, tsubst_flags_t complain)
13747 {
13748   tree targ_ptr = orig_args;
13749   tree fndecl;
13750   tree gen_tmpl;
13751   tree spec;
13752   HOST_WIDE_INT saved_processing_template_decl;
13753
13754   if (tmpl == error_mark_node)
13755     return error_mark_node;
13756
13757   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
13758
13759   /* If this function is a clone, handle it specially.  */
13760   if (DECL_CLONED_FUNCTION_P (tmpl))
13761     {
13762       tree spec;
13763       tree clone;
13764
13765       /* Use DECL_ABSTRACT_ORIGIN because only FUNCTION_DECLs have
13766          DECL_CLONED_FUNCTION.  */
13767       spec = instantiate_template (DECL_ABSTRACT_ORIGIN (tmpl),
13768                                    targ_ptr, complain);
13769       if (spec == error_mark_node)
13770         return error_mark_node;
13771
13772       /* Look for the clone.  */
13773       FOR_EACH_CLONE (clone, spec)
13774         if (DECL_NAME (clone) == DECL_NAME (tmpl))
13775           return clone;
13776       /* We should always have found the clone by now.  */
13777       gcc_unreachable ();
13778       return NULL_TREE;
13779     }
13780
13781   /* Check to see if we already have this specialization.  */
13782   gen_tmpl = most_general_template (tmpl);
13783   if (tmpl != gen_tmpl)
13784     /* The TMPL is a partial instantiation.  To get a full set of
13785        arguments we must add the arguments used to perform the
13786        partial instantiation.  */
13787     targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
13788                                             targ_ptr);
13789
13790   /* It would be nice to avoid hashing here and then again in tsubst_decl,
13791      but it doesn't seem to be on the hot path.  */
13792   spec = retrieve_specialization (gen_tmpl, targ_ptr, 0);
13793
13794   gcc_assert (tmpl == gen_tmpl
13795               || ((fndecl = retrieve_specialization (tmpl, orig_args, 0))
13796                   == spec)
13797               || fndecl == NULL_TREE);
13798
13799   if (spec != NULL_TREE)
13800     return spec;
13801
13802   if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
13803                                complain))
13804     return error_mark_node;
13805
13806   /* We are building a FUNCTION_DECL, during which the access of its
13807      parameters and return types have to be checked.  However this
13808      FUNCTION_DECL which is the desired context for access checking
13809      is not built yet.  We solve this chicken-and-egg problem by
13810      deferring all checks until we have the FUNCTION_DECL.  */
13811   push_deferring_access_checks (dk_deferred);
13812
13813   /* Although PROCESSING_TEMPLATE_DECL may be true at this point
13814      (because, for example, we have encountered a non-dependent
13815      function call in the body of a template function and must now
13816      determine which of several overloaded functions will be called),
13817      within the instantiation itself we are not processing a
13818      template.  */  
13819   saved_processing_template_decl = processing_template_decl;
13820   processing_template_decl = 0;
13821   /* Substitute template parameters to obtain the specialization.  */
13822   fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
13823                    targ_ptr, complain, gen_tmpl);
13824   processing_template_decl = saved_processing_template_decl;
13825   if (fndecl == error_mark_node)
13826     return error_mark_node;
13827
13828   /* Now we know the specialization, compute access previously
13829      deferred.  */
13830   push_access_scope (fndecl);
13831
13832   /* Some typedefs referenced from within the template code need to be access
13833      checked at template instantiation time, i.e now. These types were
13834      added to the template at parsing time. Let's get those and perfom
13835      the acces checks then.  */
13836   perform_typedefs_access_check (DECL_TEMPLATE_RESULT (tmpl), targ_ptr);
13837   perform_deferred_access_checks ();
13838   pop_access_scope (fndecl);
13839   pop_deferring_access_checks ();
13840
13841   /* The DECL_TI_TEMPLATE should always be the immediate parent
13842      template, not the most general template.  */
13843   DECL_TI_TEMPLATE (fndecl) = tmpl;
13844
13845   /* If we've just instantiated the main entry point for a function,
13846      instantiate all the alternate entry points as well.  We do this
13847      by cloning the instantiation of the main entry point, not by
13848      instantiating the template clones.  */
13849   if (DECL_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (DECL_CHAIN (gen_tmpl)))
13850     clone_function_decl (fndecl, /*update_method_vec_p=*/0);
13851
13852   return fndecl;
13853 }
13854
13855 /* Wrapper for instantiate_template_1.  */
13856
13857 tree
13858 instantiate_template (tree tmpl, tree orig_args, tsubst_flags_t complain)
13859 {
13860   tree ret;
13861   timevar_push (TV_TEMPLATE_INST);
13862   ret = instantiate_template_1 (tmpl, orig_args,  complain);
13863   timevar_pop (TV_TEMPLATE_INST);
13864   return ret;
13865 }
13866
13867 /* We're going to do deduction substitution on the type of TMPL, a function
13868    template.  In C++11 mode, push into that access scope.  In C++03 mode,
13869    disable access checking.  */
13870
13871 static void
13872 push_deduction_access_scope (tree tmpl)
13873 {
13874   if (cxx_dialect >= cxx0x)
13875     push_access_scope (DECL_TEMPLATE_RESULT (tmpl));
13876   else
13877     push_deferring_access_checks (dk_no_check);
13878 }
13879
13880 /* And pop back out.  */
13881
13882 static void
13883 pop_deduction_access_scope (tree tmpl)
13884 {
13885   if (cxx_dialect >= cxx0x)
13886     pop_access_scope (DECL_TEMPLATE_RESULT (tmpl));
13887   else
13888     pop_deferring_access_checks ();
13889 }
13890
13891 /* The FN is a TEMPLATE_DECL for a function.  ARGS is an array with
13892    NARGS elements of the arguments that are being used when calling
13893    it.  TARGS is a vector into which the deduced template arguments
13894    are placed.
13895
13896    Return zero for success, 2 for an incomplete match that doesn't resolve
13897    all the types, and 1 for complete failure.  An error message will be
13898    printed only for an incomplete match.
13899
13900    If FN is a conversion operator, or we are trying to produce a specific
13901    specialization, RETURN_TYPE is the return type desired.
13902
13903    The EXPLICIT_TARGS are explicit template arguments provided via a
13904    template-id.
13905
13906    The parameter STRICT is one of:
13907
13908    DEDUCE_CALL:
13909      We are deducing arguments for a function call, as in
13910      [temp.deduct.call].
13911
13912    DEDUCE_CONV:
13913      We are deducing arguments for a conversion function, as in
13914      [temp.deduct.conv].
13915
13916    DEDUCE_EXACT:
13917      We are deducing arguments when doing an explicit instantiation
13918      as in [temp.explicit], when determining an explicit specialization
13919      as in [temp.expl.spec], or when taking the address of a function
13920      template, as in [temp.deduct.funcaddr].  */
13921
13922 int
13923 fn_type_unification (tree fn,
13924                      tree explicit_targs,
13925                      tree targs,
13926                      const tree *args,
13927                      unsigned int nargs,
13928                      tree return_type,
13929                      unification_kind_t strict,
13930                      int flags)
13931 {
13932   tree parms;
13933   tree fntype;
13934   int result;
13935   bool incomplete_argument_packs_p = false;
13936
13937   gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
13938
13939   fntype = TREE_TYPE (fn);
13940   if (explicit_targs)
13941     {
13942       /* [temp.deduct]
13943
13944          The specified template arguments must match the template
13945          parameters in kind (i.e., type, nontype, template), and there
13946          must not be more arguments than there are parameters;
13947          otherwise type deduction fails.
13948
13949          Nontype arguments must match the types of the corresponding
13950          nontype template parameters, or must be convertible to the
13951          types of the corresponding nontype parameters as specified in
13952          _temp.arg.nontype_, otherwise type deduction fails.
13953
13954          All references in the function type of the function template
13955          to the corresponding template parameters are replaced by the
13956          specified template argument values.  If a substitution in a
13957          template parameter or in the function type of the function
13958          template results in an invalid type, type deduction fails.  */
13959       tree tparms = DECL_INNERMOST_TEMPLATE_PARMS (fn);
13960       int i, len = TREE_VEC_LENGTH (tparms);
13961       tree converted_args;
13962       bool incomplete = false;
13963
13964       if (explicit_targs == error_mark_node)
13965         return 1;
13966
13967       converted_args
13968         = (coerce_template_parms (tparms, explicit_targs, NULL_TREE, tf_none,
13969                                   /*require_all_args=*/false,
13970                                   /*use_default_args=*/false));
13971       if (converted_args == error_mark_node)
13972         return 1;
13973
13974       /* Substitute the explicit args into the function type.  This is
13975          necessary so that, for instance, explicitly declared function
13976          arguments can match null pointed constants.  If we were given
13977          an incomplete set of explicit args, we must not do semantic
13978          processing during substitution as we could create partial
13979          instantiations.  */
13980       for (i = 0; i < len; i++)
13981         {
13982           tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
13983           bool parameter_pack = false;
13984
13985           /* Dig out the actual parm.  */
13986           if (TREE_CODE (parm) == TYPE_DECL
13987               || TREE_CODE (parm) == TEMPLATE_DECL)
13988             {
13989               parm = TREE_TYPE (parm);
13990               parameter_pack = TEMPLATE_TYPE_PARAMETER_PACK (parm);
13991             }
13992           else if (TREE_CODE (parm) == PARM_DECL)
13993             {
13994               parm = DECL_INITIAL (parm);
13995               parameter_pack = TEMPLATE_PARM_PARAMETER_PACK (parm);
13996             }
13997
13998           if (parameter_pack)
13999             {
14000               int level, idx;
14001               tree targ;
14002               template_parm_level_and_index (parm, &level, &idx);
14003
14004               /* Mark the argument pack as "incomplete". We could
14005                  still deduce more arguments during unification.
14006                  We remove this mark in type_unification_real.  */
14007               targ = TMPL_ARG (converted_args, level, idx);
14008               if (targ)
14009                 {
14010                   ARGUMENT_PACK_INCOMPLETE_P(targ) = 1;
14011                   ARGUMENT_PACK_EXPLICIT_ARGS (targ) 
14012                     = ARGUMENT_PACK_ARGS (targ);
14013                 }
14014
14015               /* We have some incomplete argument packs.  */
14016               incomplete_argument_packs_p = true;
14017             }
14018         }
14019
14020       if (incomplete_argument_packs_p)
14021         /* Any substitution is guaranteed to be incomplete if there
14022            are incomplete argument packs, because we can still deduce
14023            more arguments.  */
14024         incomplete = 1;
14025       else
14026         incomplete = NUM_TMPL_ARGS (explicit_targs) != NUM_TMPL_ARGS (targs);
14027
14028       processing_template_decl += incomplete;
14029       fntype = deduction_tsubst_fntype (fn, converted_args);
14030       processing_template_decl -= incomplete;
14031
14032       if (fntype == error_mark_node)
14033         return 1;
14034
14035       /* Place the explicitly specified arguments in TARGS.  */
14036       for (i = NUM_TMPL_ARGS (converted_args); i--;)
14037         TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
14038     }
14039
14040   /* Never do unification on the 'this' parameter.  */
14041   parms = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (fntype));
14042
14043   if (return_type)
14044     {
14045       tree *new_args;
14046
14047       parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
14048       new_args = XALLOCAVEC (tree, nargs + 1);
14049       new_args[0] = return_type;
14050       memcpy (new_args + 1, args, nargs * sizeof (tree));
14051       args = new_args;
14052       ++nargs;
14053     }
14054
14055   /* We allow incomplete unification without an error message here
14056      because the standard doesn't seem to explicitly prohibit it.  Our
14057      callers must be ready to deal with unification failures in any
14058      event.  */
14059   result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
14060                                   targs, parms, args, nargs, /*subr=*/0,
14061                                   strict, flags);
14062
14063   /* Now that we have bindings for all of the template arguments,
14064      ensure that the arguments deduced for the template template
14065      parameters have compatible template parameter lists.  We cannot
14066      check this property before we have deduced all template
14067      arguments, because the template parameter types of a template
14068      template parameter might depend on prior template parameters
14069      deduced after the template template parameter.  The following
14070      ill-formed example illustrates this issue:
14071
14072        template<typename T, template<T> class C> void f(C<5>, T);
14073
14074        template<int N> struct X {};
14075
14076        void g() {
14077          f(X<5>(), 5l); // error: template argument deduction fails
14078        }
14079
14080      The template parameter list of 'C' depends on the template type
14081      parameter 'T', but 'C' is deduced to 'X' before 'T' is deduced to
14082      'long'.  Thus, we can't check that 'C' cannot bind to 'X' at the
14083      time that we deduce 'C'.  */
14084   if (result == 0
14085       && !template_template_parm_bindings_ok_p 
14086            (DECL_INNERMOST_TEMPLATE_PARMS (fn), targs))
14087     return 1;
14088
14089   if (result == 0)
14090     /* All is well so far.  Now, check:
14091
14092        [temp.deduct]
14093
14094        When all template arguments have been deduced, all uses of
14095        template parameters in nondeduced contexts are replaced with
14096        the corresponding deduced argument values.  If the
14097        substitution results in an invalid type, as described above,
14098        type deduction fails.  */
14099     {
14100       tree substed = deduction_tsubst_fntype (fn, targs);
14101       if (substed == error_mark_node)
14102         return 1;
14103
14104       /* If we're looking for an exact match, check that what we got
14105          is indeed an exact match.  It might not be if some template
14106          parameters are used in non-deduced contexts.  */
14107       if (strict == DEDUCE_EXACT)
14108         {
14109           unsigned int i;
14110
14111           tree sarg
14112             = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (substed));
14113           if (return_type)
14114             sarg = tree_cons (NULL_TREE, TREE_TYPE (substed), sarg);
14115           for (i = 0; i < nargs && sarg; ++i, sarg = TREE_CHAIN (sarg))
14116             if (!same_type_p (args[i], TREE_VALUE (sarg)))
14117               return 1;
14118         }
14119     }
14120
14121   return result;
14122 }
14123
14124 /* Adjust types before performing type deduction, as described in
14125    [temp.deduct.call] and [temp.deduct.conv].  The rules in these two
14126    sections are symmetric.  PARM is the type of a function parameter
14127    or the return type of the conversion function.  ARG is the type of
14128    the argument passed to the call, or the type of the value
14129    initialized with the result of the conversion function.
14130    ARG_EXPR is the original argument expression, which may be null.  */
14131
14132 static int
14133 maybe_adjust_types_for_deduction (unification_kind_t strict,
14134                                   tree* parm,
14135                                   tree* arg,
14136                                   tree arg_expr)
14137 {
14138   int result = 0;
14139
14140   switch (strict)
14141     {
14142     case DEDUCE_CALL:
14143       break;
14144
14145     case DEDUCE_CONV:
14146       {
14147         /* Swap PARM and ARG throughout the remainder of this
14148            function; the handling is precisely symmetric since PARM
14149            will initialize ARG rather than vice versa.  */
14150         tree* temp = parm;
14151         parm = arg;
14152         arg = temp;
14153         break;
14154       }
14155
14156     case DEDUCE_EXACT:
14157       /* Core issue #873: Do the DR606 thing (see below) for these cases,
14158          too, but here handle it by stripping the reference from PARM
14159          rather than by adding it to ARG.  */
14160       if (TREE_CODE (*parm) == REFERENCE_TYPE
14161           && TYPE_REF_IS_RVALUE (*parm)
14162           && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
14163           && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
14164           && TREE_CODE (*arg) == REFERENCE_TYPE
14165           && !TYPE_REF_IS_RVALUE (*arg))
14166         *parm = TREE_TYPE (*parm);
14167       /* Nothing else to do in this case.  */
14168       return 0;
14169
14170     default:
14171       gcc_unreachable ();
14172     }
14173
14174   if (TREE_CODE (*parm) != REFERENCE_TYPE)
14175     {
14176       /* [temp.deduct.call]
14177
14178          If P is not a reference type:
14179
14180          --If A is an array type, the pointer type produced by the
14181          array-to-pointer standard conversion (_conv.array_) is
14182          used in place of A for type deduction; otherwise,
14183
14184          --If A is a function type, the pointer type produced by
14185          the function-to-pointer standard conversion
14186          (_conv.func_) is used in place of A for type deduction;
14187          otherwise,
14188
14189          --If A is a cv-qualified type, the top level
14190          cv-qualifiers of A's type are ignored for type
14191          deduction.  */
14192       if (TREE_CODE (*arg) == ARRAY_TYPE)
14193         *arg = build_pointer_type (TREE_TYPE (*arg));
14194       else if (TREE_CODE (*arg) == FUNCTION_TYPE)
14195         *arg = build_pointer_type (*arg);
14196       else
14197         *arg = TYPE_MAIN_VARIANT (*arg);
14198     }
14199
14200   /* From C++0x [14.8.2.1/3 temp.deduct.call] (after DR606), "If P is
14201      of the form T&&, where T is a template parameter, and the argument
14202      is an lvalue, T is deduced as A& */
14203   if (TREE_CODE (*parm) == REFERENCE_TYPE
14204       && TYPE_REF_IS_RVALUE (*parm)
14205       && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
14206       && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
14207       && (arg_expr ? real_lvalue_p (arg_expr)
14208           /* try_one_overload doesn't provide an arg_expr, but
14209              functions are always lvalues.  */
14210           : TREE_CODE (*arg) == FUNCTION_TYPE))
14211     *arg = build_reference_type (*arg);
14212
14213   /* [temp.deduct.call]
14214
14215      If P is a cv-qualified type, the top level cv-qualifiers
14216      of P's type are ignored for type deduction.  If P is a
14217      reference type, the type referred to by P is used for
14218      type deduction.  */
14219   *parm = TYPE_MAIN_VARIANT (*parm);
14220   if (TREE_CODE (*parm) == REFERENCE_TYPE)
14221     {
14222       *parm = TREE_TYPE (*parm);
14223       result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
14224     }
14225
14226   /* DR 322. For conversion deduction, remove a reference type on parm
14227      too (which has been swapped into ARG).  */
14228   if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
14229     *arg = TREE_TYPE (*arg);
14230
14231   return result;
14232 }
14233
14234 /* Most parms like fn_type_unification.
14235
14236    If SUBR is 1, we're being called recursively (to unify the
14237    arguments of a function or method parameter of a function
14238    template). */
14239
14240 static int
14241 type_unification_real (tree tparms,
14242                        tree targs,
14243                        tree xparms,
14244                        const tree *xargs,
14245                        unsigned int xnargs,
14246                        int subr,
14247                        unification_kind_t strict,
14248                        int flags)
14249 {
14250   tree parm, arg, arg_expr;
14251   int i;
14252   int ntparms = TREE_VEC_LENGTH (tparms);
14253   int sub_strict;
14254   int saw_undeduced = 0;
14255   tree parms;
14256   const tree *args;
14257   unsigned int nargs;
14258   unsigned int ia;
14259
14260   gcc_assert (TREE_CODE (tparms) == TREE_VEC);
14261   gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
14262   gcc_assert (ntparms > 0);
14263
14264   /* Reset the number of non-defaulted template arguments contained
14265      in TARGS.  */
14266   NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs) = NULL_TREE;
14267
14268   switch (strict)
14269     {
14270     case DEDUCE_CALL:
14271       sub_strict = (UNIFY_ALLOW_OUTER_LEVEL | UNIFY_ALLOW_MORE_CV_QUAL
14272                     | UNIFY_ALLOW_DERIVED);
14273       break;
14274
14275     case DEDUCE_CONV:
14276       sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
14277       break;
14278
14279     case DEDUCE_EXACT:
14280       sub_strict = UNIFY_ALLOW_NONE;
14281       break;
14282
14283     default:
14284       gcc_unreachable ();
14285     }
14286
14287  again:
14288   parms = xparms;
14289   args = xargs;
14290   nargs = xnargs;
14291
14292   ia = 0;
14293   while (parms && parms != void_list_node
14294          && ia < nargs)
14295     {
14296       parm = TREE_VALUE (parms);
14297
14298       if (TREE_CODE (parm) == TYPE_PACK_EXPANSION
14299           && (!TREE_CHAIN (parms) || TREE_CHAIN (parms) == void_list_node))
14300         /* For a function parameter pack that occurs at the end of the
14301            parameter-declaration-list, the type A of each remaining
14302            argument of the call is compared with the type P of the
14303            declarator-id of the function parameter pack.  */
14304         break;
14305
14306       parms = TREE_CHAIN (parms);
14307
14308       if (TREE_CODE (parm) == TYPE_PACK_EXPANSION)
14309         /* For a function parameter pack that does not occur at the
14310            end of the parameter-declaration-list, the type of the
14311            parameter pack is a non-deduced context.  */
14312         continue;
14313
14314       arg = args[ia];
14315       ++ia;
14316       arg_expr = NULL;
14317
14318       if (arg == error_mark_node)
14319         return 1;
14320       if (arg == unknown_type_node)
14321         /* We can't deduce anything from this, but we might get all the
14322            template args from other function args.  */
14323         continue;
14324
14325       /* Conversions will be performed on a function argument that
14326          corresponds with a function parameter that contains only
14327          non-deducible template parameters and explicitly specified
14328          template parameters.  */
14329       if (!uses_template_parms (parm))
14330         {
14331           tree type;
14332
14333           if (!TYPE_P (arg))
14334             type = TREE_TYPE (arg);
14335           else
14336             type = arg;
14337
14338           if (same_type_p (parm, type))
14339             continue;
14340           if (strict != DEDUCE_EXACT
14341               && can_convert_arg (parm, type, TYPE_P (arg) ? NULL_TREE : arg,
14342                                   flags))
14343             continue;
14344
14345           return 1;
14346         }
14347
14348       if (!TYPE_P (arg))
14349         {
14350           gcc_assert (TREE_TYPE (arg) != NULL_TREE);
14351           if (type_unknown_p (arg))
14352             {
14353               /* [temp.deduct.type] 
14354
14355                  A template-argument can be deduced from a pointer to
14356                  function or pointer to member function argument if
14357                  the set of overloaded functions does not contain
14358                  function templates and at most one of a set of
14359                  overloaded functions provides a unique match.  */
14360               if (resolve_overloaded_unification
14361                   (tparms, targs, parm, arg, strict, sub_strict))
14362                 continue;
14363
14364               return 1;
14365             }
14366           arg_expr = arg;
14367           arg = unlowered_expr_type (arg);
14368           if (arg == error_mark_node)
14369             return 1;
14370         }
14371
14372       {
14373         int arg_strict = sub_strict;
14374
14375         if (!subr)
14376           arg_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg,
14377                                                           arg_expr);
14378
14379         if (arg == init_list_type_node && arg_expr)
14380           arg = arg_expr;
14381         if (unify (tparms, targs, parm, arg, arg_strict))
14382           return 1;
14383       }
14384     }
14385
14386
14387   if (parms 
14388       && parms != void_list_node
14389       && TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
14390     {
14391       /* Unify the remaining arguments with the pack expansion type.  */
14392       tree argvec;
14393       tree parmvec = make_tree_vec (1);
14394
14395       /* Allocate a TREE_VEC and copy in all of the arguments */ 
14396       argvec = make_tree_vec (nargs - ia);
14397       for (i = 0; ia < nargs; ++ia, ++i)
14398         TREE_VEC_ELT (argvec, i) = args[ia];
14399
14400       /* Copy the parameter into parmvec.  */
14401       TREE_VEC_ELT (parmvec, 0) = TREE_VALUE (parms);
14402       if (unify_pack_expansion (tparms, targs, parmvec, argvec, strict,
14403                                 /*call_args_p=*/true, /*subr=*/subr))
14404         return 1;
14405
14406       /* Advance to the end of the list of parameters.  */
14407       parms = TREE_CHAIN (parms);
14408     }
14409
14410   /* Fail if we've reached the end of the parm list, and more args
14411      are present, and the parm list isn't variadic.  */
14412   if (ia < nargs && parms == void_list_node)
14413     return 1;
14414   /* Fail if parms are left and they don't have default values.  */
14415   if (parms && parms != void_list_node
14416       && TREE_PURPOSE (parms) == NULL_TREE)
14417     return 1;
14418
14419   if (!subr)
14420     {
14421       /* Check to see if we need another pass before we start clearing
14422          ARGUMENT_PACK_INCOMPLETE_P.  */
14423       for (i = 0; i < ntparms; i++)
14424         {
14425           tree targ = TREE_VEC_ELT (targs, i);
14426           tree tparm = TREE_VEC_ELT (tparms, i);
14427
14428           if (targ || tparm == error_mark_node)
14429             continue;
14430           tparm = TREE_VALUE (tparm);
14431
14432           /* If this is an undeduced nontype parameter that depends on
14433              a type parameter, try another pass; its type may have been
14434              deduced from a later argument than the one from which
14435              this parameter can be deduced.  */
14436           if (TREE_CODE (tparm) == PARM_DECL
14437               && uses_template_parms (TREE_TYPE (tparm))
14438               && !saw_undeduced++)
14439             goto again;
14440         }
14441
14442       for (i = 0; i < ntparms; i++)
14443         {
14444           tree targ = TREE_VEC_ELT (targs, i);
14445           tree tparm = TREE_VEC_ELT (tparms, i);
14446
14447           /* Clear the "incomplete" flags on all argument packs now so that
14448              substituting them into later default arguments works.  */
14449           if (targ && ARGUMENT_PACK_P (targ))
14450             {
14451               ARGUMENT_PACK_INCOMPLETE_P (targ) = 0;
14452               ARGUMENT_PACK_EXPLICIT_ARGS (targ) = NULL_TREE;
14453             }
14454
14455           if (targ || tparm == error_mark_node)
14456             continue;
14457           tparm = TREE_VALUE (tparm);
14458
14459           /* Core issue #226 (C++0x) [temp.deduct]:
14460
14461              If a template argument has not been deduced, its
14462              default template argument, if any, is used. 
14463
14464              When we are in C++98 mode, TREE_PURPOSE will either
14465              be NULL_TREE or ERROR_MARK_NODE, so we do not need
14466              to explicitly check cxx_dialect here.  */
14467           if (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)))
14468             {
14469               tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
14470               tree arg = TREE_PURPOSE (TREE_VEC_ELT (tparms, i));
14471               arg = tsubst_template_arg (arg, targs, tf_none, NULL_TREE);
14472               arg = convert_template_argument (parm, arg, targs, tf_none,
14473                                                i, NULL_TREE);
14474               if (arg == error_mark_node)
14475                 return 1;
14476               else
14477                 {
14478                   TREE_VEC_ELT (targs, i) = arg;
14479                   /* The position of the first default template argument,
14480                      is also the number of non-defaulted arguments in TARGS.
14481                      Record that.  */
14482                   if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
14483                     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, i);
14484                   continue;
14485                 }
14486             }
14487
14488           /* If the type parameter is a parameter pack, then it will
14489              be deduced to an empty parameter pack.  */
14490           if (template_parameter_pack_p (tparm))
14491             {
14492               tree arg;
14493
14494               if (TREE_CODE (tparm) == TEMPLATE_PARM_INDEX)
14495                 {
14496                   arg = make_node (NONTYPE_ARGUMENT_PACK);
14497                   TREE_TYPE (arg)  = TREE_TYPE (TEMPLATE_PARM_DECL (tparm));
14498                   TREE_CONSTANT (arg) = 1;
14499                 }
14500               else
14501                 arg = cxx_make_type (TYPE_ARGUMENT_PACK);
14502
14503               SET_ARGUMENT_PACK_ARGS (arg, make_tree_vec (0));
14504
14505               TREE_VEC_ELT (targs, i) = arg;
14506               continue;
14507             }
14508
14509           return 2;
14510         }
14511     }
14512 #ifdef ENABLE_CHECKING
14513   if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
14514     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, TREE_VEC_LENGTH (targs));
14515 #endif
14516
14517   return 0;
14518 }
14519
14520 /* Subroutine of type_unification_real.  Args are like the variables
14521    at the call site.  ARG is an overloaded function (or template-id);
14522    we try deducing template args from each of the overloads, and if
14523    only one succeeds, we go with that.  Modifies TARGS and returns
14524    true on success.  */
14525
14526 static bool
14527 resolve_overloaded_unification (tree tparms,
14528                                 tree targs,
14529                                 tree parm,
14530                                 tree arg,
14531                                 unification_kind_t strict,
14532                                 int sub_strict)
14533 {
14534   tree tempargs = copy_node (targs);
14535   int good = 0;
14536   tree goodfn = NULL_TREE;
14537   bool addr_p;
14538
14539   if (TREE_CODE (arg) == ADDR_EXPR)
14540     {
14541       arg = TREE_OPERAND (arg, 0);
14542       addr_p = true;
14543     }
14544   else
14545     addr_p = false;
14546
14547   if (TREE_CODE (arg) == COMPONENT_REF)
14548     /* Handle `&x' where `x' is some static or non-static member
14549        function name.  */
14550     arg = TREE_OPERAND (arg, 1);
14551
14552   if (TREE_CODE (arg) == OFFSET_REF)
14553     arg = TREE_OPERAND (arg, 1);
14554
14555   /* Strip baselink information.  */
14556   if (BASELINK_P (arg))
14557     arg = BASELINK_FUNCTIONS (arg);
14558
14559   if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
14560     {
14561       /* If we got some explicit template args, we need to plug them into
14562          the affected templates before we try to unify, in case the
14563          explicit args will completely resolve the templates in question.  */
14564
14565       tree expl_subargs = TREE_OPERAND (arg, 1);
14566       arg = TREE_OPERAND (arg, 0);
14567
14568       for (; arg; arg = OVL_NEXT (arg))
14569         {
14570           tree fn = OVL_CURRENT (arg);
14571           tree subargs, elem;
14572
14573           if (TREE_CODE (fn) != TEMPLATE_DECL)
14574             continue;
14575
14576           ++processing_template_decl;
14577           subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
14578                                   expl_subargs, /*check_ret=*/false);
14579           if (subargs)
14580             {
14581               elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
14582               if (try_one_overload (tparms, targs, tempargs, parm,
14583                                     elem, strict, sub_strict, addr_p)
14584                   && (!goodfn || !decls_match (goodfn, elem)))
14585                 {
14586                   goodfn = elem;
14587                   ++good;
14588                 }
14589             }
14590           --processing_template_decl;
14591         }
14592     }
14593   else if (TREE_CODE (arg) != OVERLOAD
14594            && TREE_CODE (arg) != FUNCTION_DECL)
14595     /* If ARG is, for example, "(0, &f)" then its type will be unknown
14596        -- but the deduction does not succeed because the expression is
14597        not just the function on its own.  */
14598     return false;
14599   else
14600     for (; arg; arg = OVL_NEXT (arg))
14601       if (try_one_overload (tparms, targs, tempargs, parm,
14602                             TREE_TYPE (OVL_CURRENT (arg)),
14603                             strict, sub_strict, addr_p)
14604           && (!goodfn || !decls_match (goodfn, OVL_CURRENT (arg))))
14605         {
14606           goodfn = OVL_CURRENT (arg);
14607           ++good;
14608         }
14609
14610   /* [temp.deduct.type] A template-argument can be deduced from a pointer
14611      to function or pointer to member function argument if the set of
14612      overloaded functions does not contain function templates and at most
14613      one of a set of overloaded functions provides a unique match.
14614
14615      So if we found multiple possibilities, we return success but don't
14616      deduce anything.  */
14617
14618   if (good == 1)
14619     {
14620       int i = TREE_VEC_LENGTH (targs);
14621       for (; i--; )
14622         if (TREE_VEC_ELT (tempargs, i))
14623           TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
14624     }
14625   if (good)
14626     return true;
14627
14628   return false;
14629 }
14630
14631 /* Core DR 115: In contexts where deduction is done and fails, or in
14632    contexts where deduction is not done, if a template argument list is
14633    specified and it, along with any default template arguments, identifies
14634    a single function template specialization, then the template-id is an
14635    lvalue for the function template specialization.  */
14636
14637 tree
14638 resolve_nondeduced_context (tree orig_expr)
14639 {
14640   tree expr, offset, baselink;
14641   bool addr;
14642
14643   if (!type_unknown_p (orig_expr))
14644     return orig_expr;
14645
14646   expr = orig_expr;
14647   addr = false;
14648   offset = NULL_TREE;
14649   baselink = NULL_TREE;
14650
14651   if (TREE_CODE (expr) == ADDR_EXPR)
14652     {
14653       expr = TREE_OPERAND (expr, 0);
14654       addr = true;
14655     }
14656   if (TREE_CODE (expr) == OFFSET_REF)
14657     {
14658       offset = expr;
14659       expr = TREE_OPERAND (expr, 1);
14660     }
14661   if (TREE_CODE (expr) == BASELINK)
14662     {
14663       baselink = expr;
14664       expr = BASELINK_FUNCTIONS (expr);
14665     }
14666
14667   if (TREE_CODE (expr) == TEMPLATE_ID_EXPR)
14668     {
14669       int good = 0;
14670       tree goodfn = NULL_TREE;
14671
14672       /* If we got some explicit template args, we need to plug them into
14673          the affected templates before we try to unify, in case the
14674          explicit args will completely resolve the templates in question.  */
14675
14676       tree expl_subargs = TREE_OPERAND (expr, 1);
14677       tree arg = TREE_OPERAND (expr, 0);
14678       tree badfn = NULL_TREE;
14679       tree badargs = NULL_TREE;
14680
14681       for (; arg; arg = OVL_NEXT (arg))
14682         {
14683           tree fn = OVL_CURRENT (arg);
14684           tree subargs, elem;
14685
14686           if (TREE_CODE (fn) != TEMPLATE_DECL)
14687             continue;
14688
14689           ++processing_template_decl;
14690           subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
14691                                   expl_subargs, /*check_ret=*/false);
14692           if (subargs && !any_dependent_template_arguments_p (subargs))
14693             {
14694               elem = instantiate_template (fn, subargs, tf_none);
14695               if (elem == error_mark_node)
14696                 {
14697                   badfn = fn;
14698                   badargs = subargs;
14699                 }
14700               else if (elem && (!goodfn || !decls_match (goodfn, elem)))
14701                 {
14702                   goodfn = elem;
14703                   ++good;
14704                 }
14705             }
14706           --processing_template_decl;
14707         }
14708       if (good == 1)
14709         {
14710           expr = goodfn;
14711           if (baselink)
14712             expr = build_baselink (BASELINK_BINFO (baselink),
14713                                    BASELINK_ACCESS_BINFO (baselink),
14714                                    expr, BASELINK_OPTYPE (baselink));
14715           if (offset)
14716             {
14717               tree base
14718                 = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (offset, 0)));
14719               expr = build_offset_ref (base, expr, addr);
14720             }
14721           if (addr)
14722             expr = cp_build_addr_expr (expr, tf_warning_or_error);
14723           return expr;
14724         }
14725       else if (good == 0 && badargs)
14726         /* There were no good options and at least one bad one, so let the
14727            user know what the problem is.  */
14728         instantiate_template (badfn, badargs, tf_warning_or_error);
14729     }
14730   return orig_expr;
14731 }
14732
14733 /* Subroutine of resolve_overloaded_unification; does deduction for a single
14734    overload.  Fills TARGS with any deduced arguments, or error_mark_node if
14735    different overloads deduce different arguments for a given parm.
14736    ADDR_P is true if the expression for which deduction is being
14737    performed was of the form "& fn" rather than simply "fn".
14738
14739    Returns 1 on success.  */
14740
14741 static int
14742 try_one_overload (tree tparms,
14743                   tree orig_targs,
14744                   tree targs,
14745                   tree parm,
14746                   tree arg,
14747                   unification_kind_t strict,
14748                   int sub_strict,
14749                   bool addr_p)
14750 {
14751   int nargs;
14752   tree tempargs;
14753   int i;
14754
14755   /* [temp.deduct.type] A template-argument can be deduced from a pointer
14756      to function or pointer to member function argument if the set of
14757      overloaded functions does not contain function templates and at most
14758      one of a set of overloaded functions provides a unique match.
14759
14760      So if this is a template, just return success.  */
14761
14762   if (uses_template_parms (arg))
14763     return 1;
14764
14765   if (TREE_CODE (arg) == METHOD_TYPE)
14766     arg = build_ptrmemfunc_type (build_pointer_type (arg));
14767   else if (addr_p)
14768     arg = build_pointer_type (arg);
14769
14770   sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
14771
14772   /* We don't copy orig_targs for this because if we have already deduced
14773      some template args from previous args, unify would complain when we
14774      try to deduce a template parameter for the same argument, even though
14775      there isn't really a conflict.  */
14776   nargs = TREE_VEC_LENGTH (targs);
14777   tempargs = make_tree_vec (nargs);
14778
14779   if (unify (tparms, tempargs, parm, arg, sub_strict) != 0)
14780     return 0;
14781
14782   /* First make sure we didn't deduce anything that conflicts with
14783      explicitly specified args.  */
14784   for (i = nargs; i--; )
14785     {
14786       tree elt = TREE_VEC_ELT (tempargs, i);
14787       tree oldelt = TREE_VEC_ELT (orig_targs, i);
14788
14789       if (!elt)
14790         /*NOP*/;
14791       else if (uses_template_parms (elt))
14792         /* Since we're unifying against ourselves, we will fill in
14793            template args used in the function parm list with our own
14794            template parms.  Discard them.  */
14795         TREE_VEC_ELT (tempargs, i) = NULL_TREE;
14796       else if (oldelt && !template_args_equal (oldelt, elt))
14797         return 0;
14798     }
14799
14800   for (i = nargs; i--; )
14801     {
14802       tree elt = TREE_VEC_ELT (tempargs, i);
14803
14804       if (elt)
14805         TREE_VEC_ELT (targs, i) = elt;
14806     }
14807
14808   return 1;
14809 }
14810
14811 /* PARM is a template class (perhaps with unbound template
14812    parameters).  ARG is a fully instantiated type.  If ARG can be
14813    bound to PARM, return ARG, otherwise return NULL_TREE.  TPARMS and
14814    TARGS are as for unify.  */
14815
14816 static tree
14817 try_class_unification (tree tparms, tree targs, tree parm, tree arg)
14818 {
14819   tree copy_of_targs;
14820
14821   if (!CLASSTYPE_TEMPLATE_INFO (arg)
14822       || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
14823           != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
14824     return NULL_TREE;
14825
14826   /* We need to make a new template argument vector for the call to
14827      unify.  If we used TARGS, we'd clutter it up with the result of
14828      the attempted unification, even if this class didn't work out.
14829      We also don't want to commit ourselves to all the unifications
14830      we've already done, since unification is supposed to be done on
14831      an argument-by-argument basis.  In other words, consider the
14832      following pathological case:
14833
14834        template <int I, int J, int K>
14835        struct S {};
14836
14837        template <int I, int J>
14838        struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
14839
14840        template <int I, int J, int K>
14841        void f(S<I, J, K>, S<I, I, I>);
14842
14843        void g() {
14844          S<0, 0, 0> s0;
14845          S<0, 1, 2> s2;
14846
14847          f(s0, s2);
14848        }
14849
14850      Now, by the time we consider the unification involving `s2', we
14851      already know that we must have `f<0, 0, 0>'.  But, even though
14852      `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
14853      because there are two ways to unify base classes of S<0, 1, 2>
14854      with S<I, I, I>.  If we kept the already deduced knowledge, we
14855      would reject the possibility I=1.  */
14856   copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
14857
14858   /* If unification failed, we're done.  */
14859   if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
14860              CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE))
14861     return NULL_TREE;
14862
14863   return arg;
14864 }
14865
14866 /* Given a template type PARM and a class type ARG, find the unique
14867    base type in ARG that is an instance of PARM.  We do not examine
14868    ARG itself; only its base-classes.  If there is not exactly one
14869    appropriate base class, return NULL_TREE.  PARM may be the type of
14870    a partial specialization, as well as a plain template type.  Used
14871    by unify.  */
14872
14873 static tree
14874 get_template_base (tree tparms, tree targs, tree parm, tree arg)
14875 {
14876   tree rval = NULL_TREE;
14877   tree binfo;
14878
14879   gcc_assert (RECORD_OR_UNION_CODE_P (TREE_CODE (arg)));
14880
14881   binfo = TYPE_BINFO (complete_type (arg));
14882   if (!binfo)
14883     /* The type could not be completed.  */
14884     return NULL_TREE;
14885
14886   /* Walk in inheritance graph order.  The search order is not
14887      important, and this avoids multiple walks of virtual bases.  */
14888   for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
14889     {
14890       tree r = try_class_unification (tparms, targs, parm, BINFO_TYPE (binfo));
14891
14892       if (r)
14893         {
14894           /* If there is more than one satisfactory baseclass, then:
14895
14896                [temp.deduct.call]
14897
14898               If they yield more than one possible deduced A, the type
14899               deduction fails.
14900
14901              applies.  */
14902           if (rval && !same_type_p (r, rval))
14903             return NULL_TREE;
14904
14905           rval = r;
14906         }
14907     }
14908
14909   return rval;
14910 }
14911
14912 /* Returns the level of DECL, which declares a template parameter.  */
14913
14914 static int
14915 template_decl_level (tree decl)
14916 {
14917   switch (TREE_CODE (decl))
14918     {
14919     case TYPE_DECL:
14920     case TEMPLATE_DECL:
14921       return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
14922
14923     case PARM_DECL:
14924       return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
14925
14926     default:
14927       gcc_unreachable ();
14928     }
14929   return 0;
14930 }
14931
14932 /* Decide whether ARG can be unified with PARM, considering only the
14933    cv-qualifiers of each type, given STRICT as documented for unify.
14934    Returns nonzero iff the unification is OK on that basis.  */
14935
14936 static int
14937 check_cv_quals_for_unify (int strict, tree arg, tree parm)
14938 {
14939   int arg_quals = cp_type_quals (arg);
14940   int parm_quals = cp_type_quals (parm);
14941
14942   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
14943       && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
14944     {
14945       /*  Although a CVR qualifier is ignored when being applied to a
14946           substituted template parameter ([8.3.2]/1 for example), that
14947           does not allow us to unify "const T" with "int&" because both
14948           types are not of the form "cv-list T" [14.8.2.5 temp.deduct.type].
14949           It is ok when we're allowing additional CV qualifiers
14950           at the outer level [14.8.2.1]/3,1st bullet.  */
14951       if ((TREE_CODE (arg) == REFERENCE_TYPE
14952            || TREE_CODE (arg) == FUNCTION_TYPE
14953            || TREE_CODE (arg) == METHOD_TYPE)
14954           && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
14955         return 0;
14956
14957       if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
14958           && (parm_quals & TYPE_QUAL_RESTRICT))
14959         return 0;
14960     }
14961
14962   if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
14963       && (arg_quals & parm_quals) != parm_quals)
14964     return 0;
14965
14966   if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
14967       && (parm_quals & arg_quals) != arg_quals)
14968     return 0;
14969
14970   return 1;
14971 }
14972
14973 /* Determines the LEVEL and INDEX for the template parameter PARM.  */
14974 void 
14975 template_parm_level_and_index (tree parm, int* level, int* index)
14976 {
14977   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
14978       || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
14979       || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
14980     {
14981       *index = TEMPLATE_TYPE_IDX (parm);
14982       *level = TEMPLATE_TYPE_LEVEL (parm);
14983     }
14984   else
14985     {
14986       *index = TEMPLATE_PARM_IDX (parm);
14987       *level = TEMPLATE_PARM_LEVEL (parm);
14988     }
14989 }
14990
14991 /* Unifies the remaining arguments in PACKED_ARGS with the pack
14992    expansion at the end of PACKED_PARMS. Returns 0 if the type
14993    deduction succeeds, 1 otherwise. STRICT is the same as in
14994    unify. CALL_ARGS_P is true iff PACKED_ARGS is actually a function
14995    call argument list. We'll need to adjust the arguments to make them
14996    types. SUBR tells us if this is from a recursive call to
14997    type_unification_real.  */
14998 int
14999 unify_pack_expansion (tree tparms, tree targs, tree packed_parms, 
15000                       tree packed_args, int strict, bool call_args_p,
15001                       bool subr)
15002 {
15003   tree parm 
15004     = TREE_VEC_ELT (packed_parms, TREE_VEC_LENGTH (packed_parms) - 1);
15005   tree pattern = PACK_EXPANSION_PATTERN (parm);
15006   tree pack, packs = NULL_TREE;
15007   int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
15008   int len = TREE_VEC_LENGTH (packed_args);
15009
15010   /* Determine the parameter packs we will be deducing from the
15011      pattern, and record their current deductions.  */
15012   for (pack = PACK_EXPANSION_PARAMETER_PACKS (parm); 
15013        pack; pack = TREE_CHAIN (pack))
15014     {
15015       tree parm_pack = TREE_VALUE (pack);
15016       int idx, level;
15017
15018       /* Determine the index and level of this parameter pack.  */
15019       template_parm_level_and_index (parm_pack, &level, &idx);
15020
15021       /* Keep track of the parameter packs and their corresponding
15022          argument packs.  */
15023       packs = tree_cons (parm_pack, TMPL_ARG (targs, level, idx), packs);
15024       TREE_TYPE (packs) = make_tree_vec (len - start);
15025     }
15026   
15027   /* Loop through all of the arguments that have not yet been
15028      unified and unify each with the pattern.  */
15029   for (i = start; i < len; i++)
15030     {
15031       tree parm = pattern;
15032
15033       /* For each parameter pack, clear out the deduced value so that
15034          we can deduce it again.  */
15035       for (pack = packs; pack; pack = TREE_CHAIN (pack))
15036         {
15037           int idx, level;
15038           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
15039
15040           TMPL_ARG (targs, level, idx) = NULL_TREE;
15041         }
15042
15043       /* Unify the pattern with the current argument.  */
15044       {
15045         tree arg = TREE_VEC_ELT (packed_args, i);
15046         tree arg_expr = NULL_TREE;
15047         int arg_strict = strict;
15048         bool skip_arg_p = false;
15049
15050         if (call_args_p)
15051           {
15052             int sub_strict;
15053
15054             /* This mirrors what we do in type_unification_real.  */
15055             switch (strict)
15056               {
15057               case DEDUCE_CALL:
15058                 sub_strict = (UNIFY_ALLOW_OUTER_LEVEL 
15059                               | UNIFY_ALLOW_MORE_CV_QUAL
15060                               | UNIFY_ALLOW_DERIVED);
15061                 break;
15062                 
15063               case DEDUCE_CONV:
15064                 sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
15065                 break;
15066                 
15067               case DEDUCE_EXACT:
15068                 sub_strict = UNIFY_ALLOW_NONE;
15069                 break;
15070                 
15071               default:
15072                 gcc_unreachable ();
15073               }
15074
15075             if (!TYPE_P (arg))
15076               {
15077                 gcc_assert (TREE_TYPE (arg) != NULL_TREE);
15078                 if (type_unknown_p (arg))
15079                   {
15080                     /* [temp.deduct.type] A template-argument can be
15081                        deduced from a pointer to function or pointer
15082                        to member function argument if the set of
15083                        overloaded functions does not contain function
15084                        templates and at most one of a set of
15085                        overloaded functions provides a unique
15086                        match.  */
15087
15088                     if (resolve_overloaded_unification
15089                         (tparms, targs, parm, arg,
15090                          (unification_kind_t) strict,
15091                          sub_strict)
15092                         != 0)
15093                       return 1;
15094                     skip_arg_p = true;
15095                   }
15096
15097                 if (!skip_arg_p)
15098                   {
15099                     arg_expr = arg;
15100                     arg = unlowered_expr_type (arg);
15101                     if (arg == error_mark_node)
15102                       return 1;
15103                   }
15104               }
15105       
15106             arg_strict = sub_strict;
15107
15108             if (!subr)
15109               arg_strict |= 
15110                 maybe_adjust_types_for_deduction ((unification_kind_t) strict,
15111                                                   &parm, &arg, arg_expr);
15112           }
15113
15114         if (!skip_arg_p)
15115           {
15116             /* For deduction from an init-list we need the actual list.  */
15117             if (arg_expr && BRACE_ENCLOSED_INITIALIZER_P (arg_expr))
15118               arg = arg_expr;
15119             if (unify (tparms, targs, parm, arg, arg_strict))
15120               return 1;
15121           }
15122       }
15123
15124       /* For each parameter pack, collect the deduced value.  */
15125       for (pack = packs; pack; pack = TREE_CHAIN (pack))
15126         {
15127           int idx, level;
15128           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
15129
15130           TREE_VEC_ELT (TREE_TYPE (pack), i - start) = 
15131             TMPL_ARG (targs, level, idx);
15132         }
15133     }
15134
15135   /* Verify that the results of unification with the parameter packs
15136      produce results consistent with what we've seen before, and make
15137      the deduced argument packs available.  */
15138   for (pack = packs; pack; pack = TREE_CHAIN (pack))
15139     {
15140       tree old_pack = TREE_VALUE (pack);
15141       tree new_args = TREE_TYPE (pack);
15142       int i, len = TREE_VEC_LENGTH (new_args);
15143       int idx, level;
15144       bool nondeduced_p = false;
15145
15146       /* By default keep the original deduced argument pack.
15147          If necessary, more specific code is going to update the
15148          resulting deduced argument later down in this function.  */
15149       template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
15150       TMPL_ARG (targs, level, idx) = old_pack;
15151
15152       /* If NEW_ARGS contains any NULL_TREE entries, we didn't
15153          actually deduce anything.  */
15154       for (i = 0; i < len && !nondeduced_p; ++i)
15155         if (TREE_VEC_ELT (new_args, i) == NULL_TREE)
15156           nondeduced_p = true;
15157       if (nondeduced_p)
15158         continue;
15159
15160       if (old_pack && ARGUMENT_PACK_INCOMPLETE_P (old_pack))
15161         {
15162           /* Prepend the explicit arguments onto NEW_ARGS.  */
15163           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
15164           tree old_args = new_args;
15165           int i, explicit_len = TREE_VEC_LENGTH (explicit_args);
15166           int len = explicit_len + TREE_VEC_LENGTH (old_args);
15167
15168           /* Copy the explicit arguments.  */
15169           new_args = make_tree_vec (len);
15170           for (i = 0; i < explicit_len; i++)
15171             TREE_VEC_ELT (new_args, i) = TREE_VEC_ELT (explicit_args, i);
15172
15173           /* Copy the deduced arguments.  */
15174           for (; i < len; i++)
15175             TREE_VEC_ELT (new_args, i) =
15176               TREE_VEC_ELT (old_args, i - explicit_len);
15177         }
15178
15179       if (!old_pack)
15180         {
15181           tree result;
15182           /* Build the deduced *_ARGUMENT_PACK.  */
15183           if (TREE_CODE (TREE_PURPOSE (pack)) == TEMPLATE_PARM_INDEX)
15184             {
15185               result = make_node (NONTYPE_ARGUMENT_PACK);
15186               TREE_TYPE (result) = 
15187                 TREE_TYPE (TEMPLATE_PARM_DECL (TREE_PURPOSE (pack)));
15188               TREE_CONSTANT (result) = 1;
15189             }
15190           else
15191             result = cxx_make_type (TYPE_ARGUMENT_PACK);
15192
15193           SET_ARGUMENT_PACK_ARGS (result, new_args);
15194
15195           /* Note the deduced argument packs for this parameter
15196              pack.  */
15197           TMPL_ARG (targs, level, idx) = result;
15198         }
15199       else if (ARGUMENT_PACK_INCOMPLETE_P (old_pack)
15200                && (ARGUMENT_PACK_ARGS (old_pack) 
15201                    == ARGUMENT_PACK_EXPLICIT_ARGS (old_pack)))
15202         {
15203           /* We only had the explicitly-provided arguments before, but
15204              now we have a complete set of arguments.  */
15205           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
15206
15207           SET_ARGUMENT_PACK_ARGS (old_pack, new_args);
15208           ARGUMENT_PACK_INCOMPLETE_P (old_pack) = 1;
15209           ARGUMENT_PACK_EXPLICIT_ARGS (old_pack) = explicit_args;
15210         }
15211       else if (!comp_template_args (ARGUMENT_PACK_ARGS (old_pack),
15212                                     new_args))
15213         /* Inconsistent unification of this parameter pack.  */
15214         return 1;
15215     }
15216
15217   return 0;
15218 }
15219
15220 /* Deduce the value of template parameters.  TPARMS is the (innermost)
15221    set of template parameters to a template.  TARGS is the bindings
15222    for those template parameters, as determined thus far; TARGS may
15223    include template arguments for outer levels of template parameters
15224    as well.  PARM is a parameter to a template function, or a
15225    subcomponent of that parameter; ARG is the corresponding argument.
15226    This function attempts to match PARM with ARG in a manner
15227    consistent with the existing assignments in TARGS.  If more values
15228    are deduced, then TARGS is updated.
15229
15230    Returns 0 if the type deduction succeeds, 1 otherwise.  The
15231    parameter STRICT is a bitwise or of the following flags:
15232
15233      UNIFY_ALLOW_NONE:
15234        Require an exact match between PARM and ARG.
15235      UNIFY_ALLOW_MORE_CV_QUAL:
15236        Allow the deduced ARG to be more cv-qualified (by qualification
15237        conversion) than ARG.
15238      UNIFY_ALLOW_LESS_CV_QUAL:
15239        Allow the deduced ARG to be less cv-qualified than ARG.
15240      UNIFY_ALLOW_DERIVED:
15241        Allow the deduced ARG to be a template base class of ARG,
15242        or a pointer to a template base class of the type pointed to by
15243        ARG.
15244      UNIFY_ALLOW_INTEGER:
15245        Allow any integral type to be deduced.  See the TEMPLATE_PARM_INDEX
15246        case for more information.
15247      UNIFY_ALLOW_OUTER_LEVEL:
15248        This is the outermost level of a deduction. Used to determine validity
15249        of qualification conversions. A valid qualification conversion must
15250        have const qualified pointers leading up to the inner type which
15251        requires additional CV quals, except at the outer level, where const
15252        is not required [conv.qual]. It would be normal to set this flag in
15253        addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
15254      UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
15255        This is the outermost level of a deduction, and PARM can be more CV
15256        qualified at this point.
15257      UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
15258        This is the outermost level of a deduction, and PARM can be less CV
15259        qualified at this point.  */
15260
15261 static int
15262 unify (tree tparms, tree targs, tree parm, tree arg, int strict)
15263 {
15264   int idx;
15265   tree targ;
15266   tree tparm;
15267   int strict_in = strict;
15268
15269   /* I don't think this will do the right thing with respect to types.
15270      But the only case I've seen it in so far has been array bounds, where
15271      signedness is the only information lost, and I think that will be
15272      okay.  */
15273   while (TREE_CODE (parm) == NOP_EXPR)
15274     parm = TREE_OPERAND (parm, 0);
15275
15276   if (arg == error_mark_node)
15277     return 1;
15278   if (arg == unknown_type_node
15279       || arg == init_list_type_node)
15280     /* We can't deduce anything from this, but we might get all the
15281        template args from other function args.  */
15282     return 0;
15283
15284   /* If PARM uses template parameters, then we can't bail out here,
15285      even if ARG == PARM, since we won't record unifications for the
15286      template parameters.  We might need them if we're trying to
15287      figure out which of two things is more specialized.  */
15288   if (arg == parm && !uses_template_parms (parm))
15289     return 0;
15290
15291   /* Handle init lists early, so the rest of the function can assume
15292      we're dealing with a type. */
15293   if (BRACE_ENCLOSED_INITIALIZER_P (arg))
15294     {
15295       tree elt, elttype;
15296       unsigned i;
15297       tree orig_parm = parm;
15298
15299       /* Replace T with std::initializer_list<T> for deduction.  */
15300       if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
15301           && flag_deduce_init_list)
15302         parm = listify (parm);
15303
15304       if (!is_std_init_list (parm))
15305         /* We can only deduce from an initializer list argument if the
15306            parameter is std::initializer_list; otherwise this is a
15307            non-deduced context. */
15308         return 0;
15309
15310       elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (parm), 0);
15311
15312       FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (arg), i, elt)
15313         {
15314           int elt_strict = strict;
15315
15316           if (elt == error_mark_node)
15317             return 1;
15318
15319           if (!BRACE_ENCLOSED_INITIALIZER_P (elt))
15320             {
15321               tree type = TREE_TYPE (elt);
15322               /* It should only be possible to get here for a call.  */
15323               gcc_assert (elt_strict & UNIFY_ALLOW_OUTER_LEVEL);
15324               elt_strict |= maybe_adjust_types_for_deduction
15325                 (DEDUCE_CALL, &elttype, &type, elt);
15326               elt = type;
15327             }
15328
15329           if (unify (tparms, targs, elttype, elt, elt_strict))
15330             return 1;
15331         }
15332
15333       /* If the std::initializer_list<T> deduction worked, replace the
15334          deduced A with std::initializer_list<A>.  */
15335       if (orig_parm != parm)
15336         {
15337           idx = TEMPLATE_TYPE_IDX (orig_parm);
15338           targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
15339           targ = listify (targ);
15340           TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = targ;
15341         }
15342       return 0;
15343     }
15344
15345   /* Immediately reject some pairs that won't unify because of
15346      cv-qualification mismatches.  */
15347   if (TREE_CODE (arg) == TREE_CODE (parm)
15348       && TYPE_P (arg)
15349       /* It is the elements of the array which hold the cv quals of an array
15350          type, and the elements might be template type parms. We'll check
15351          when we recurse.  */
15352       && TREE_CODE (arg) != ARRAY_TYPE
15353       /* We check the cv-qualifiers when unifying with template type
15354          parameters below.  We want to allow ARG `const T' to unify with
15355          PARM `T' for example, when computing which of two templates
15356          is more specialized, for example.  */
15357       && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
15358       && !check_cv_quals_for_unify (strict_in, arg, parm))
15359     return 1;
15360
15361   if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
15362       && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
15363     strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
15364   strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
15365   strict &= ~UNIFY_ALLOW_DERIVED;
15366   strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
15367   strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
15368
15369   switch (TREE_CODE (parm))
15370     {
15371     case TYPENAME_TYPE:
15372     case SCOPE_REF:
15373     case UNBOUND_CLASS_TEMPLATE:
15374       /* In a type which contains a nested-name-specifier, template
15375          argument values cannot be deduced for template parameters used
15376          within the nested-name-specifier.  */
15377       return 0;
15378
15379     case TEMPLATE_TYPE_PARM:
15380     case TEMPLATE_TEMPLATE_PARM:
15381     case BOUND_TEMPLATE_TEMPLATE_PARM:
15382       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
15383       if (tparm == error_mark_node)
15384         return 1;
15385
15386       if (TEMPLATE_TYPE_LEVEL (parm)
15387           != template_decl_level (tparm))
15388         /* The PARM is not one we're trying to unify.  Just check
15389            to see if it matches ARG.  */
15390         return (TREE_CODE (arg) == TREE_CODE (parm)
15391                 && same_type_p (parm, arg)) ? 0 : 1;
15392       idx = TEMPLATE_TYPE_IDX (parm);
15393       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
15394       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
15395
15396       /* Check for mixed types and values.  */
15397       if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
15398            && TREE_CODE (tparm) != TYPE_DECL)
15399           || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
15400               && TREE_CODE (tparm) != TEMPLATE_DECL))
15401         return 1;
15402
15403       if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
15404         {
15405           /* ARG must be constructed from a template class or a template
15406              template parameter.  */
15407           if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
15408               && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
15409             return 1;
15410
15411           {
15412             tree parmvec = TYPE_TI_ARGS (parm);
15413             tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
15414             tree full_argvec = add_to_template_args (targs, argvec);
15415             tree parm_parms 
15416               = DECL_INNERMOST_TEMPLATE_PARMS
15417                   (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (parm));
15418             int i, len;
15419             int parm_variadic_p = 0;
15420
15421             /* The resolution to DR150 makes clear that default
15422                arguments for an N-argument may not be used to bind T
15423                to a template template parameter with fewer than N
15424                parameters.  It is not safe to permit the binding of
15425                default arguments as an extension, as that may change
15426                the meaning of a conforming program.  Consider:
15427
15428                   struct Dense { static const unsigned int dim = 1; };
15429
15430                   template <template <typename> class View,
15431                             typename Block>
15432                   void operator+(float, View<Block> const&);
15433
15434                   template <typename Block,
15435                             unsigned int Dim = Block::dim>
15436                   struct Lvalue_proxy { operator float() const; };
15437
15438                   void
15439                   test_1d (void) {
15440                     Lvalue_proxy<Dense> p;
15441                     float b;
15442                     b + p;
15443                   }
15444
15445               Here, if Lvalue_proxy is permitted to bind to View, then
15446               the global operator+ will be used; if they are not, the
15447               Lvalue_proxy will be converted to float.  */
15448             if (coerce_template_parms (parm_parms,
15449                                        full_argvec,
15450                                        TYPE_TI_TEMPLATE (parm),
15451                                        tf_none,
15452                                        /*require_all_args=*/true,
15453                                        /*use_default_args=*/false)
15454                 == error_mark_node)
15455               return 1;
15456
15457             /* Deduce arguments T, i from TT<T> or TT<i>.
15458                We check each element of PARMVEC and ARGVEC individually
15459                rather than the whole TREE_VEC since they can have
15460                different number of elements.  */
15461
15462             parmvec = expand_template_argument_pack (parmvec);
15463             argvec = expand_template_argument_pack (argvec);
15464
15465             len = TREE_VEC_LENGTH (parmvec);
15466
15467             /* Check if the parameters end in a pack, making them
15468                variadic.  */
15469             if (len > 0
15470                 && PACK_EXPANSION_P (TREE_VEC_ELT (parmvec, len - 1)))
15471               parm_variadic_p = 1;
15472             
15473             if (TREE_VEC_LENGTH (argvec) < len - parm_variadic_p)
15474               return 1;
15475
15476              for (i = 0; i < len - parm_variadic_p; ++i)
15477               {
15478                 if (unify (tparms, targs,
15479                            TREE_VEC_ELT (parmvec, i),
15480                            TREE_VEC_ELT (argvec, i),
15481                            UNIFY_ALLOW_NONE))
15482                   return 1;
15483               }
15484
15485             if (parm_variadic_p
15486                 && unify_pack_expansion (tparms, targs,
15487                                          parmvec, argvec,
15488                                          UNIFY_ALLOW_NONE,
15489                                          /*call_args_p=*/false,
15490                                          /*subr=*/false))
15491               return 1;
15492           }
15493           arg = TYPE_TI_TEMPLATE (arg);
15494
15495           /* Fall through to deduce template name.  */
15496         }
15497
15498       if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
15499           || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
15500         {
15501           /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>.  */
15502
15503           /* Simple cases: Value already set, does match or doesn't.  */
15504           if (targ != NULL_TREE && template_args_equal (targ, arg))
15505             return 0;
15506           else if (targ)
15507             return 1;
15508         }
15509       else
15510         {
15511           /* If PARM is `const T' and ARG is only `int', we don't have
15512              a match unless we are allowing additional qualification.
15513              If ARG is `const int' and PARM is just `T' that's OK;
15514              that binds `const int' to `T'.  */
15515           if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
15516                                          arg, parm))
15517             return 1;
15518
15519           /* Consider the case where ARG is `const volatile int' and
15520              PARM is `const T'.  Then, T should be `volatile int'.  */
15521           arg = cp_build_qualified_type_real
15522             (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
15523           if (arg == error_mark_node)
15524             return 1;
15525
15526           /* Simple cases: Value already set, does match or doesn't.  */
15527           if (targ != NULL_TREE && same_type_p (targ, arg))
15528             return 0;
15529           else if (targ)
15530             return 1;
15531
15532           /* Make sure that ARG is not a variable-sized array.  (Note
15533              that were talking about variable-sized arrays (like
15534              `int[n]'), rather than arrays of unknown size (like
15535              `int[]').)  We'll get very confused by such a type since
15536              the bound of the array will not be computable in an
15537              instantiation.  Besides, such types are not allowed in
15538              ISO C++, so we can do as we please here.  */
15539           if (variably_modified_type_p (arg, NULL_TREE))
15540             return 1;
15541
15542           /* Strip typedefs as in convert_template_argument.  */
15543           arg = strip_typedefs (arg);
15544         }
15545
15546       /* If ARG is a parameter pack or an expansion, we cannot unify
15547          against it unless PARM is also a parameter pack.  */
15548       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
15549           && !template_parameter_pack_p (parm))
15550         return 1;
15551
15552       /* If the argument deduction results is a METHOD_TYPE,
15553          then there is a problem.
15554          METHOD_TYPE doesn't map to any real C++ type the result of
15555          the deduction can not be of that type.  */
15556       if (TREE_CODE (arg) == METHOD_TYPE)
15557         return 1;
15558
15559       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
15560       return 0;
15561
15562     case TEMPLATE_PARM_INDEX:
15563       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
15564       if (tparm == error_mark_node)
15565         return 1;
15566
15567       if (TEMPLATE_PARM_LEVEL (parm)
15568           != template_decl_level (tparm))
15569         /* The PARM is not one we're trying to unify.  Just check
15570            to see if it matches ARG.  */
15571         return !(TREE_CODE (arg) == TREE_CODE (parm)
15572                  && cp_tree_equal (parm, arg));
15573
15574       idx = TEMPLATE_PARM_IDX (parm);
15575       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
15576
15577       if (targ)
15578         return !cp_tree_equal (targ, arg);
15579
15580       /* [temp.deduct.type] If, in the declaration of a function template
15581          with a non-type template-parameter, the non-type
15582          template-parameter is used in an expression in the function
15583          parameter-list and, if the corresponding template-argument is
15584          deduced, the template-argument type shall match the type of the
15585          template-parameter exactly, except that a template-argument
15586          deduced from an array bound may be of any integral type.
15587          The non-type parameter might use already deduced type parameters.  */
15588       tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
15589       if (!TREE_TYPE (arg))
15590         /* Template-parameter dependent expression.  Just accept it for now.
15591            It will later be processed in convert_template_argument.  */
15592         ;
15593       else if (same_type_p (TREE_TYPE (arg), tparm))
15594         /* OK */;
15595       else if ((strict & UNIFY_ALLOW_INTEGER)
15596                && (TREE_CODE (tparm) == INTEGER_TYPE
15597                    || TREE_CODE (tparm) == BOOLEAN_TYPE))
15598         /* Convert the ARG to the type of PARM; the deduced non-type
15599            template argument must exactly match the types of the
15600            corresponding parameter.  */
15601         arg = fold (build_nop (tparm, arg));
15602       else if (uses_template_parms (tparm))
15603         /* We haven't deduced the type of this parameter yet.  Try again
15604            later.  */
15605         return 0;
15606       else
15607         return 1;
15608
15609       /* If ARG is a parameter pack or an expansion, we cannot unify
15610          against it unless PARM is also a parameter pack.  */
15611       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
15612           && !TEMPLATE_PARM_PARAMETER_PACK (parm))
15613         return 1;
15614
15615       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
15616       return 0;
15617
15618     case PTRMEM_CST:
15619      {
15620         /* A pointer-to-member constant can be unified only with
15621          another constant.  */
15622       if (TREE_CODE (arg) != PTRMEM_CST)
15623         return 1;
15624
15625       /* Just unify the class member. It would be useless (and possibly
15626          wrong, depending on the strict flags) to unify also
15627          PTRMEM_CST_CLASS, because we want to be sure that both parm and
15628          arg refer to the same variable, even if through different
15629          classes. For instance:
15630
15631          struct A { int x; };
15632          struct B : A { };
15633
15634          Unification of &A::x and &B::x must succeed.  */
15635       return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
15636                     PTRMEM_CST_MEMBER (arg), strict);
15637      }
15638
15639     case POINTER_TYPE:
15640       {
15641         if (TREE_CODE (arg) != POINTER_TYPE)
15642           return 1;
15643
15644         /* [temp.deduct.call]
15645
15646            A can be another pointer or pointer to member type that can
15647            be converted to the deduced A via a qualification
15648            conversion (_conv.qual_).
15649
15650            We pass down STRICT here rather than UNIFY_ALLOW_NONE.
15651            This will allow for additional cv-qualification of the
15652            pointed-to types if appropriate.  */
15653
15654         if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
15655           /* The derived-to-base conversion only persists through one
15656              level of pointers.  */
15657           strict |= (strict_in & UNIFY_ALLOW_DERIVED);
15658
15659         return unify (tparms, targs, TREE_TYPE (parm),
15660                       TREE_TYPE (arg), strict);
15661       }
15662
15663     case REFERENCE_TYPE:
15664       if (TREE_CODE (arg) != REFERENCE_TYPE)
15665         return 1;
15666       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
15667                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
15668
15669     case ARRAY_TYPE:
15670       if (TREE_CODE (arg) != ARRAY_TYPE)
15671         return 1;
15672       if ((TYPE_DOMAIN (parm) == NULL_TREE)
15673           != (TYPE_DOMAIN (arg) == NULL_TREE))
15674         return 1;
15675       if (TYPE_DOMAIN (parm) != NULL_TREE)
15676         {
15677           tree parm_max;
15678           tree arg_max;
15679           bool parm_cst;
15680           bool arg_cst;
15681
15682           /* Our representation of array types uses "N - 1" as the
15683              TYPE_MAX_VALUE for an array with "N" elements, if "N" is
15684              not an integer constant.  We cannot unify arbitrarily
15685              complex expressions, so we eliminate the MINUS_EXPRs
15686              here.  */
15687           parm_max = TYPE_MAX_VALUE (TYPE_DOMAIN (parm));
15688           parm_cst = TREE_CODE (parm_max) == INTEGER_CST;
15689           if (!parm_cst)
15690             {
15691               gcc_assert (TREE_CODE (parm_max) == MINUS_EXPR);
15692               parm_max = TREE_OPERAND (parm_max, 0);
15693             }
15694           arg_max = TYPE_MAX_VALUE (TYPE_DOMAIN (arg));
15695           arg_cst = TREE_CODE (arg_max) == INTEGER_CST;
15696           if (!arg_cst)
15697             {
15698               /* The ARG_MAX may not be a simple MINUS_EXPR, if we are
15699                  trying to unify the type of a variable with the type
15700                  of a template parameter.  For example:
15701
15702                    template <unsigned int N>
15703                    void f (char (&) [N]);
15704                    int g(); 
15705                    void h(int i) {
15706                      char a[g(i)];
15707                      f(a); 
15708                    }
15709
15710                 Here, the type of the ARG will be "int [g(i)]", and
15711                 may be a SAVE_EXPR, etc.  */
15712               if (TREE_CODE (arg_max) != MINUS_EXPR)
15713                 return 1;
15714               arg_max = TREE_OPERAND (arg_max, 0);
15715             }
15716
15717           /* If only one of the bounds used a MINUS_EXPR, compensate
15718              by adding one to the other bound.  */
15719           if (parm_cst && !arg_cst)
15720             parm_max = fold_build2_loc (input_location, PLUS_EXPR,
15721                                     integer_type_node,
15722                                     parm_max,
15723                                     integer_one_node);
15724           else if (arg_cst && !parm_cst)
15725             arg_max = fold_build2_loc (input_location, PLUS_EXPR,
15726                                    integer_type_node,
15727                                    arg_max,
15728                                    integer_one_node);
15729
15730           if (unify (tparms, targs, parm_max, arg_max, UNIFY_ALLOW_INTEGER))
15731             return 1;
15732         }
15733       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
15734                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
15735
15736     case REAL_TYPE:
15737     case COMPLEX_TYPE:
15738     case VECTOR_TYPE:
15739     case INTEGER_TYPE:
15740     case BOOLEAN_TYPE:
15741     case ENUMERAL_TYPE:
15742     case VOID_TYPE:
15743       if (TREE_CODE (arg) != TREE_CODE (parm))
15744         return 1;
15745
15746       /* We have already checked cv-qualification at the top of the
15747          function.  */
15748       if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
15749         return 1;
15750
15751       /* As far as unification is concerned, this wins.  Later checks
15752          will invalidate it if necessary.  */
15753       return 0;
15754
15755       /* Types INTEGER_CST and MINUS_EXPR can come from array bounds.  */
15756       /* Type INTEGER_CST can come from ordinary constant template args.  */
15757     case INTEGER_CST:
15758       while (TREE_CODE (arg) == NOP_EXPR)
15759         arg = TREE_OPERAND (arg, 0);
15760
15761       if (TREE_CODE (arg) != INTEGER_CST)
15762         return 1;
15763       return !tree_int_cst_equal (parm, arg);
15764
15765     case TREE_VEC:
15766       {
15767         int i;
15768         if (TREE_CODE (arg) != TREE_VEC)
15769           return 1;
15770         if (TREE_VEC_LENGTH (parm) != TREE_VEC_LENGTH (arg))
15771           return 1;
15772         for (i = 0; i < TREE_VEC_LENGTH (parm); ++i)
15773           if (unify (tparms, targs,
15774                      TREE_VEC_ELT (parm, i), TREE_VEC_ELT (arg, i),
15775                      UNIFY_ALLOW_NONE))
15776             return 1;
15777         return 0;
15778       }
15779
15780     case RECORD_TYPE:
15781     case UNION_TYPE:
15782       if (TREE_CODE (arg) != TREE_CODE (parm))
15783         return 1;
15784
15785       if (TYPE_PTRMEMFUNC_P (parm))
15786         {
15787           if (!TYPE_PTRMEMFUNC_P (arg))
15788             return 1;
15789
15790           return unify (tparms, targs,
15791                         TYPE_PTRMEMFUNC_FN_TYPE (parm),
15792                         TYPE_PTRMEMFUNC_FN_TYPE (arg),
15793                         strict);
15794         }
15795
15796       if (CLASSTYPE_TEMPLATE_INFO (parm))
15797         {
15798           tree t = NULL_TREE;
15799
15800           if (strict_in & UNIFY_ALLOW_DERIVED)
15801             {
15802               /* First, we try to unify the PARM and ARG directly.  */
15803               t = try_class_unification (tparms, targs,
15804                                          parm, arg);
15805
15806               if (!t)
15807                 {
15808                   /* Fallback to the special case allowed in
15809                      [temp.deduct.call]:
15810
15811                        If P is a class, and P has the form
15812                        template-id, then A can be a derived class of
15813                        the deduced A.  Likewise, if P is a pointer to
15814                        a class of the form template-id, A can be a
15815                        pointer to a derived class pointed to by the
15816                        deduced A.  */
15817                   t = get_template_base (tparms, targs, parm, arg);
15818
15819                   if (!t)
15820                     return 1;
15821                 }
15822             }
15823           else if (CLASSTYPE_TEMPLATE_INFO (arg)
15824                    && (CLASSTYPE_TI_TEMPLATE (parm)
15825                        == CLASSTYPE_TI_TEMPLATE (arg)))
15826             /* Perhaps PARM is something like S<U> and ARG is S<int>.
15827                Then, we should unify `int' and `U'.  */
15828             t = arg;
15829           else
15830             /* There's no chance of unification succeeding.  */
15831             return 1;
15832
15833           return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
15834                         CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE);
15835         }
15836       else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
15837         return 1;
15838       return 0;
15839
15840     case METHOD_TYPE:
15841     case FUNCTION_TYPE:
15842       {
15843         unsigned int nargs;
15844         tree *args;
15845         tree a;
15846         unsigned int i;
15847
15848         if (TREE_CODE (arg) != TREE_CODE (parm))
15849           return 1;
15850
15851         /* CV qualifications for methods can never be deduced, they must
15852            match exactly.  We need to check them explicitly here,
15853            because type_unification_real treats them as any other
15854            cv-qualified parameter.  */
15855         if (TREE_CODE (parm) == METHOD_TYPE
15856             && (!check_cv_quals_for_unify
15857                 (UNIFY_ALLOW_NONE,
15858                  class_of_this_parm (arg),
15859                  class_of_this_parm (parm))))
15860           return 1;
15861
15862         if (unify (tparms, targs, TREE_TYPE (parm),
15863                    TREE_TYPE (arg), UNIFY_ALLOW_NONE))
15864           return 1;
15865
15866         nargs = list_length (TYPE_ARG_TYPES (arg));
15867         args = XALLOCAVEC (tree, nargs);
15868         for (a = TYPE_ARG_TYPES (arg), i = 0;
15869              a != NULL_TREE && a != void_list_node;
15870              a = TREE_CHAIN (a), ++i)
15871           args[i] = TREE_VALUE (a);
15872         nargs = i;
15873
15874         return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
15875                                       args, nargs, 1, DEDUCE_EXACT,
15876                                       LOOKUP_NORMAL);
15877       }
15878
15879     case OFFSET_TYPE:
15880       /* Unify a pointer to member with a pointer to member function, which
15881          deduces the type of the member as a function type. */
15882       if (TYPE_PTRMEMFUNC_P (arg))
15883         {
15884           tree method_type;
15885           tree fntype;
15886
15887           /* Check top-level cv qualifiers */
15888           if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
15889             return 1;
15890
15891           if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
15892                      TYPE_PTRMEMFUNC_OBJECT_TYPE (arg), UNIFY_ALLOW_NONE))
15893             return 1;
15894
15895           /* Determine the type of the function we are unifying against. */
15896           method_type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (arg));
15897           fntype =
15898             build_function_type (TREE_TYPE (method_type),
15899                                  TREE_CHAIN (TYPE_ARG_TYPES (method_type)));
15900
15901           /* Extract the cv-qualifiers of the member function from the
15902              implicit object parameter and place them on the function
15903              type to be restored later. */
15904           fntype = apply_memfn_quals (fntype, type_memfn_quals (method_type));
15905           return unify (tparms, targs, TREE_TYPE (parm), fntype, strict);
15906         }
15907
15908       if (TREE_CODE (arg) != OFFSET_TYPE)
15909         return 1;
15910       if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
15911                  TYPE_OFFSET_BASETYPE (arg), UNIFY_ALLOW_NONE))
15912         return 1;
15913       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
15914                     strict);
15915
15916     case CONST_DECL:
15917       if (DECL_TEMPLATE_PARM_P (parm))
15918         return unify (tparms, targs, DECL_INITIAL (parm), arg, strict);
15919       if (arg != integral_constant_value (parm))
15920         return 1;
15921       return 0;
15922
15923     case FIELD_DECL:
15924     case TEMPLATE_DECL:
15925       /* Matched cases are handled by the ARG == PARM test above.  */
15926       return 1;
15927
15928     case VAR_DECL:
15929       /* A non-type template parameter that is a variable should be a
15930          an integral constant, in which case, it whould have been
15931          folded into its (constant) value. So we should not be getting
15932          a variable here.  */
15933       gcc_unreachable ();
15934
15935     case TYPE_ARGUMENT_PACK:
15936     case NONTYPE_ARGUMENT_PACK:
15937       {
15938         tree packed_parms = ARGUMENT_PACK_ARGS (parm);
15939         tree packed_args = ARGUMENT_PACK_ARGS (arg);
15940         int i, len = TREE_VEC_LENGTH (packed_parms);
15941         int argslen = TREE_VEC_LENGTH (packed_args);
15942         int parm_variadic_p = 0;
15943
15944         for (i = 0; i < len; ++i)
15945           {
15946             if (PACK_EXPANSION_P (TREE_VEC_ELT (packed_parms, i)))
15947               {
15948                 if (i == len - 1)
15949                   /* We can unify against something with a trailing
15950                      parameter pack.  */
15951                   parm_variadic_p = 1;
15952                 else
15953                   /* Since there is something following the pack
15954                      expansion, we cannot unify this template argument
15955                      list.  */
15956                   return 0;
15957               }
15958           }
15959           
15960
15961         /* If we don't have enough arguments to satisfy the parameters
15962            (not counting the pack expression at the end), or we have
15963            too many arguments for a parameter list that doesn't end in
15964            a pack expression, we can't unify.  */
15965         if (argslen < (len - parm_variadic_p)
15966             || (argslen > len && !parm_variadic_p))
15967           return 1;
15968
15969         /* Unify all of the parameters that precede the (optional)
15970            pack expression.  */
15971         for (i = 0; i < len - parm_variadic_p; ++i)
15972           {
15973             if (unify (tparms, targs, TREE_VEC_ELT (packed_parms, i),
15974                        TREE_VEC_ELT (packed_args, i), strict))
15975               return 1;
15976           }
15977
15978         if (parm_variadic_p)
15979           return unify_pack_expansion (tparms, targs, 
15980                                        packed_parms, packed_args,
15981                                        strict, /*call_args_p=*/false,
15982                                        /*subr=*/false);
15983         return 0;
15984       }
15985
15986       break;
15987
15988     case TYPEOF_TYPE:
15989     case DECLTYPE_TYPE:
15990     case UNDERLYING_TYPE:
15991       /* Cannot deduce anything from TYPEOF_TYPE, DECLTYPE_TYPE,
15992          or UNDERLYING_TYPE nodes.  */
15993       return 0;
15994
15995     case ERROR_MARK:
15996       /* Unification fails if we hit an error node.  */
15997       return 1;
15998
15999     default:
16000       /* An unresolved overload is a nondeduced context.  */
16001       if (type_unknown_p (parm))
16002         return 0;
16003       gcc_assert (EXPR_P (parm));
16004
16005       /* We must be looking at an expression.  This can happen with
16006          something like:
16007
16008            template <int I>
16009            void foo(S<I>, S<I + 2>);
16010
16011          This is a "nondeduced context":
16012
16013            [deduct.type]
16014
16015            The nondeduced contexts are:
16016
16017            --A type that is a template-id in which one or more of
16018              the template-arguments is an expression that references
16019              a template-parameter.
16020
16021          In these cases, we assume deduction succeeded, but don't
16022          actually infer any unifications.  */
16023
16024       if (!uses_template_parms (parm)
16025           && !template_args_equal (parm, arg))
16026         return 1;
16027       else
16028         return 0;
16029     }
16030 }
16031 \f
16032 /* Note that DECL can be defined in this translation unit, if
16033    required.  */
16034
16035 static void
16036 mark_definable (tree decl)
16037 {
16038   tree clone;
16039   DECL_NOT_REALLY_EXTERN (decl) = 1;
16040   FOR_EACH_CLONE (clone, decl)
16041     DECL_NOT_REALLY_EXTERN (clone) = 1;
16042 }
16043
16044 /* Called if RESULT is explicitly instantiated, or is a member of an
16045    explicitly instantiated class.  */
16046
16047 void
16048 mark_decl_instantiated (tree result, int extern_p)
16049 {
16050   SET_DECL_EXPLICIT_INSTANTIATION (result);
16051
16052   /* If this entity has already been written out, it's too late to
16053      make any modifications.  */
16054   if (TREE_ASM_WRITTEN (result))
16055     return;
16056
16057   if (TREE_CODE (result) != FUNCTION_DECL)
16058     /* The TREE_PUBLIC flag for function declarations will have been
16059        set correctly by tsubst.  */
16060     TREE_PUBLIC (result) = 1;
16061
16062   /* This might have been set by an earlier implicit instantiation.  */
16063   DECL_COMDAT (result) = 0;
16064
16065   if (extern_p)
16066     DECL_NOT_REALLY_EXTERN (result) = 0;
16067   else
16068     {
16069       mark_definable (result);
16070       /* Always make artificials weak.  */
16071       if (DECL_ARTIFICIAL (result) && flag_weak)
16072         comdat_linkage (result);
16073       /* For WIN32 we also want to put explicit instantiations in
16074          linkonce sections.  */
16075       else if (TREE_PUBLIC (result))
16076         maybe_make_one_only (result);
16077     }
16078
16079   /* If EXTERN_P, then this function will not be emitted -- unless
16080      followed by an explicit instantiation, at which point its linkage
16081      will be adjusted.  If !EXTERN_P, then this function will be
16082      emitted here.  In neither circumstance do we want
16083      import_export_decl to adjust the linkage.  */
16084   DECL_INTERFACE_KNOWN (result) = 1;
16085 }
16086
16087 /* Subroutine of more_specialized_fn: check whether TARGS is missing any
16088    important template arguments.  If any are missing, we check whether
16089    they're important by using error_mark_node for substituting into any
16090    args that were used for partial ordering (the ones between ARGS and END)
16091    and seeing if it bubbles up.  */
16092
16093 static bool
16094 check_undeduced_parms (tree targs, tree args, tree end)
16095 {
16096   bool found = false;
16097   int i;
16098   for (i = TREE_VEC_LENGTH (targs) - 1; i >= 0; --i)
16099     if (TREE_VEC_ELT (targs, i) == NULL_TREE)
16100       {
16101         found = true;
16102         TREE_VEC_ELT (targs, i) = error_mark_node;
16103       }
16104   if (found)
16105     {
16106       for (; args != end; args = TREE_CHAIN (args))
16107         {
16108           tree substed = tsubst (TREE_VALUE (args), targs, tf_none, NULL_TREE);
16109           if (substed == error_mark_node)
16110             return true;
16111         }
16112     }
16113   return false;
16114 }
16115
16116 /* Given two function templates PAT1 and PAT2, return:
16117
16118    1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
16119    -1 if PAT2 is more specialized than PAT1.
16120    0 if neither is more specialized.
16121
16122    LEN indicates the number of parameters we should consider
16123    (defaulted parameters should not be considered).
16124
16125    The 1998 std underspecified function template partial ordering, and
16126    DR214 addresses the issue.  We take pairs of arguments, one from
16127    each of the templates, and deduce them against each other.  One of
16128    the templates will be more specialized if all the *other*
16129    template's arguments deduce against its arguments and at least one
16130    of its arguments *does* *not* deduce against the other template's
16131    corresponding argument.  Deduction is done as for class templates.
16132    The arguments used in deduction have reference and top level cv
16133    qualifiers removed.  Iff both arguments were originally reference
16134    types *and* deduction succeeds in both directions, the template
16135    with the more cv-qualified argument wins for that pairing (if
16136    neither is more cv-qualified, they both are equal).  Unlike regular
16137    deduction, after all the arguments have been deduced in this way,
16138    we do *not* verify the deduced template argument values can be
16139    substituted into non-deduced contexts.
16140
16141    The logic can be a bit confusing here, because we look at deduce1 and
16142    targs1 to see if pat2 is at least as specialized, and vice versa; if we
16143    can find template arguments for pat1 to make arg1 look like arg2, that
16144    means that arg2 is at least as specialized as arg1.  */
16145
16146 int
16147 more_specialized_fn (tree pat1, tree pat2, int len)
16148 {
16149   tree decl1 = DECL_TEMPLATE_RESULT (pat1);
16150   tree decl2 = DECL_TEMPLATE_RESULT (pat2);
16151   tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
16152   tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
16153   tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
16154   tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
16155   tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
16156   tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
16157   tree origs1, origs2;
16158   bool lose1 = false;
16159   bool lose2 = false;
16160
16161   /* Remove the this parameter from non-static member functions.  If
16162      one is a non-static member function and the other is not a static
16163      member function, remove the first parameter from that function
16164      also.  This situation occurs for operator functions where we
16165      locate both a member function (with this pointer) and non-member
16166      operator (with explicit first operand).  */
16167   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
16168     {
16169       len--; /* LEN is the number of significant arguments for DECL1 */
16170       args1 = TREE_CHAIN (args1);
16171       if (!DECL_STATIC_FUNCTION_P (decl2))
16172         args2 = TREE_CHAIN (args2);
16173     }
16174   else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
16175     {
16176       args2 = TREE_CHAIN (args2);
16177       if (!DECL_STATIC_FUNCTION_P (decl1))
16178         {
16179           len--;
16180           args1 = TREE_CHAIN (args1);
16181         }
16182     }
16183
16184   /* If only one is a conversion operator, they are unordered.  */
16185   if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
16186     return 0;
16187
16188   /* Consider the return type for a conversion function */
16189   if (DECL_CONV_FN_P (decl1))
16190     {
16191       args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
16192       args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
16193       len++;
16194     }
16195
16196   processing_template_decl++;
16197
16198   origs1 = args1;
16199   origs2 = args2;
16200
16201   while (len--
16202          /* Stop when an ellipsis is seen.  */
16203          && args1 != NULL_TREE && args2 != NULL_TREE)
16204     {
16205       tree arg1 = TREE_VALUE (args1);
16206       tree arg2 = TREE_VALUE (args2);
16207       int deduce1, deduce2;
16208       int quals1 = -1;
16209       int quals2 = -1;
16210
16211       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
16212           && TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
16213         {
16214           /* When both arguments are pack expansions, we need only
16215              unify the patterns themselves.  */
16216           arg1 = PACK_EXPANSION_PATTERN (arg1);
16217           arg2 = PACK_EXPANSION_PATTERN (arg2);
16218
16219           /* This is the last comparison we need to do.  */
16220           len = 0;
16221         }
16222
16223       if (TREE_CODE (arg1) == REFERENCE_TYPE)
16224         {
16225           arg1 = TREE_TYPE (arg1);
16226           quals1 = cp_type_quals (arg1);
16227         }
16228
16229       if (TREE_CODE (arg2) == REFERENCE_TYPE)
16230         {
16231           arg2 = TREE_TYPE (arg2);
16232           quals2 = cp_type_quals (arg2);
16233         }
16234
16235       if ((quals1 < 0) != (quals2 < 0))
16236         {
16237           /* Only of the args is a reference, see if we should apply
16238              array/function pointer decay to it.  This is not part of
16239              DR214, but is, IMHO, consistent with the deduction rules
16240              for the function call itself, and with our earlier
16241              implementation of the underspecified partial ordering
16242              rules.  (nathan).  */
16243           if (quals1 >= 0)
16244             {
16245               switch (TREE_CODE (arg1))
16246                 {
16247                 case ARRAY_TYPE:
16248                   arg1 = TREE_TYPE (arg1);
16249                   /* FALLTHROUGH. */
16250                 case FUNCTION_TYPE:
16251                   arg1 = build_pointer_type (arg1);
16252                   break;
16253
16254                 default:
16255                   break;
16256                 }
16257             }
16258           else
16259             {
16260               switch (TREE_CODE (arg2))
16261                 {
16262                 case ARRAY_TYPE:
16263                   arg2 = TREE_TYPE (arg2);
16264                   /* FALLTHROUGH. */
16265                 case FUNCTION_TYPE:
16266                   arg2 = build_pointer_type (arg2);
16267                   break;
16268
16269                 default:
16270                   break;
16271                 }
16272             }
16273         }
16274
16275       arg1 = TYPE_MAIN_VARIANT (arg1);
16276       arg2 = TYPE_MAIN_VARIANT (arg2);
16277
16278       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION)
16279         {
16280           int i, len2 = list_length (args2);
16281           tree parmvec = make_tree_vec (1);
16282           tree argvec = make_tree_vec (len2);
16283           tree ta = args2;
16284
16285           /* Setup the parameter vector, which contains only ARG1.  */
16286           TREE_VEC_ELT (parmvec, 0) = arg1;
16287
16288           /* Setup the argument vector, which contains the remaining
16289              arguments.  */
16290           for (i = 0; i < len2; i++, ta = TREE_CHAIN (ta))
16291             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
16292
16293           deduce1 = !unify_pack_expansion (tparms1, targs1, parmvec, 
16294                                            argvec, UNIFY_ALLOW_NONE, 
16295                                            /*call_args_p=*/false, 
16296                                            /*subr=*/0);
16297
16298           /* We cannot deduce in the other direction, because ARG1 is
16299              a pack expansion but ARG2 is not.  */
16300           deduce2 = 0;
16301         }
16302       else if (TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
16303         {
16304           int i, len1 = list_length (args1);
16305           tree parmvec = make_tree_vec (1);
16306           tree argvec = make_tree_vec (len1);
16307           tree ta = args1;
16308
16309           /* Setup the parameter vector, which contains only ARG1.  */
16310           TREE_VEC_ELT (parmvec, 0) = arg2;
16311
16312           /* Setup the argument vector, which contains the remaining
16313              arguments.  */
16314           for (i = 0; i < len1; i++, ta = TREE_CHAIN (ta))
16315             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
16316
16317           deduce2 = !unify_pack_expansion (tparms2, targs2, parmvec, 
16318                                            argvec, UNIFY_ALLOW_NONE, 
16319                                            /*call_args_p=*/false, 
16320                                            /*subr=*/0);
16321
16322           /* We cannot deduce in the other direction, because ARG2 is
16323              a pack expansion but ARG1 is not.*/
16324           deduce1 = 0;
16325         }
16326
16327       else
16328         {
16329           /* The normal case, where neither argument is a pack
16330              expansion.  */
16331           deduce1 = !unify (tparms1, targs1, arg1, arg2, UNIFY_ALLOW_NONE);
16332           deduce2 = !unify (tparms2, targs2, arg2, arg1, UNIFY_ALLOW_NONE);
16333         }
16334
16335       /* If we couldn't deduce arguments for tparms1 to make arg1 match
16336          arg2, then arg2 is not as specialized as arg1.  */
16337       if (!deduce1)
16338         lose2 = true;
16339       if (!deduce2)
16340         lose1 = true;
16341
16342       /* "If, for a given type, deduction succeeds in both directions
16343          (i.e., the types are identical after the transformations above)
16344          and if the type from the argument template is more cv-qualified
16345          than the type from the parameter template (as described above)
16346          that type is considered to be more specialized than the other. If
16347          neither type is more cv-qualified than the other then neither type
16348          is more specialized than the other."  */
16349
16350       if (deduce1 && deduce2
16351           && quals1 != quals2 && quals1 >= 0 && quals2 >= 0)
16352         {
16353           if ((quals1 & quals2) == quals2)
16354             lose2 = true;
16355           if ((quals1 & quals2) == quals1)
16356             lose1 = true;
16357         }
16358
16359       if (lose1 && lose2)
16360         /* We've failed to deduce something in either direction.
16361            These must be unordered.  */
16362         break;
16363
16364       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
16365           || TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
16366         /* We have already processed all of the arguments in our
16367            handing of the pack expansion type.  */
16368         len = 0;
16369
16370       args1 = TREE_CHAIN (args1);
16371       args2 = TREE_CHAIN (args2);
16372     }
16373
16374   /* "In most cases, all template parameters must have values in order for
16375      deduction to succeed, but for partial ordering purposes a template
16376      parameter may remain without a value provided it is not used in the
16377      types being used for partial ordering."
16378
16379      Thus, if we are missing any of the targs1 we need to substitute into
16380      origs1, then pat2 is not as specialized as pat1.  This can happen when
16381      there is a nondeduced context.  */
16382   if (!lose2 && check_undeduced_parms (targs1, origs1, args1))
16383     lose2 = true;
16384   if (!lose1 && check_undeduced_parms (targs2, origs2, args2))
16385     lose1 = true;
16386
16387   processing_template_decl--;
16388
16389   /* All things being equal, if the next argument is a pack expansion
16390      for one function but not for the other, prefer the
16391      non-variadic function.  FIXME this is bogus; see c++/41958.  */
16392   if (lose1 == lose2
16393       && args1 && TREE_VALUE (args1)
16394       && args2 && TREE_VALUE (args2))
16395     {
16396       lose1 = TREE_CODE (TREE_VALUE (args1)) == TYPE_PACK_EXPANSION;
16397       lose2 = TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION;
16398     }
16399
16400   if (lose1 == lose2)
16401     return 0;
16402   else if (!lose1)
16403     return 1;
16404   else
16405     return -1;
16406 }
16407
16408 /* Determine which of two partial specializations is more specialized.
16409
16410    PAT1 is a TREE_LIST whose TREE_TYPE is the _TYPE node corresponding
16411    to the first partial specialization.  The TREE_VALUE is the
16412    innermost set of template parameters for the partial
16413    specialization.  PAT2 is similar, but for the second template.
16414
16415    Return 1 if the first partial specialization is more specialized;
16416    -1 if the second is more specialized; 0 if neither is more
16417    specialized.
16418
16419    See [temp.class.order] for information about determining which of
16420    two templates is more specialized.  */
16421
16422 static int
16423 more_specialized_class (tree pat1, tree pat2)
16424 {
16425   tree targs;
16426   tree tmpl1, tmpl2;
16427   int winner = 0;
16428   bool any_deductions = false;
16429
16430   tmpl1 = TREE_TYPE (pat1);
16431   tmpl2 = TREE_TYPE (pat2);
16432
16433   /* Just like what happens for functions, if we are ordering between
16434      different class template specializations, we may encounter dependent
16435      types in the arguments, and we need our dependency check functions
16436      to behave correctly.  */
16437   ++processing_template_decl;
16438   targs = get_class_bindings (TREE_VALUE (pat1),
16439                               CLASSTYPE_TI_ARGS (tmpl1),
16440                               CLASSTYPE_TI_ARGS (tmpl2));
16441   if (targs)
16442     {
16443       --winner;
16444       any_deductions = true;
16445     }
16446
16447   targs = get_class_bindings (TREE_VALUE (pat2),
16448                               CLASSTYPE_TI_ARGS (tmpl2),
16449                               CLASSTYPE_TI_ARGS (tmpl1));
16450   if (targs)
16451     {
16452       ++winner;
16453       any_deductions = true;
16454     }
16455   --processing_template_decl;
16456
16457   /* In the case of a tie where at least one of the class templates
16458      has a parameter pack at the end, the template with the most
16459      non-packed parameters wins.  */
16460   if (winner == 0
16461       && any_deductions
16462       && (template_args_variadic_p (TREE_PURPOSE (pat1))
16463           || template_args_variadic_p (TREE_PURPOSE (pat2))))
16464     {
16465       tree args1 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat1));
16466       tree args2 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat2));
16467       int len1 = TREE_VEC_LENGTH (args1);
16468       int len2 = TREE_VEC_LENGTH (args2);
16469
16470       /* We don't count the pack expansion at the end.  */
16471       if (template_args_variadic_p (TREE_PURPOSE (pat1)))
16472         --len1;
16473       if (template_args_variadic_p (TREE_PURPOSE (pat2)))
16474         --len2;
16475
16476       if (len1 > len2)
16477         return 1;
16478       else if (len1 < len2)
16479         return -1;
16480     }
16481
16482   return winner;
16483 }
16484
16485 /* Return the template arguments that will produce the function signature
16486    DECL from the function template FN, with the explicit template
16487    arguments EXPLICIT_ARGS.  If CHECK_RETTYPE is true, the return type must
16488    also match.  Return NULL_TREE if no satisfactory arguments could be
16489    found.  */
16490
16491 static tree
16492 get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
16493 {
16494   int ntparms = DECL_NTPARMS (fn);
16495   tree targs = make_tree_vec (ntparms);
16496   tree decl_type;
16497   tree decl_arg_types;
16498   tree *args;
16499   unsigned int nargs, ix;
16500   tree arg;
16501
16502   /* Substitute the explicit template arguments into the type of DECL.
16503      The call to fn_type_unification will handle substitution into the
16504      FN.  */
16505   decl_type = TREE_TYPE (decl);
16506   if (explicit_args && uses_template_parms (decl_type))
16507     {
16508       tree tmpl;
16509       tree converted_args;
16510
16511       if (DECL_TEMPLATE_INFO (decl))
16512         tmpl = DECL_TI_TEMPLATE (decl);
16513       else
16514         /* We can get here for some invalid specializations.  */
16515         return NULL_TREE;
16516
16517       converted_args
16518         = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
16519                                  explicit_args, NULL_TREE,
16520                                  tf_none,
16521                                  /*require_all_args=*/false,
16522                                  /*use_default_args=*/false);
16523       if (converted_args == error_mark_node)
16524         return NULL_TREE;
16525
16526       decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE);
16527       if (decl_type == error_mark_node)
16528         return NULL_TREE;
16529     }
16530
16531   /* Never do unification on the 'this' parameter.  */
16532   decl_arg_types = skip_artificial_parms_for (decl, 
16533                                               TYPE_ARG_TYPES (decl_type));
16534
16535   nargs = list_length (decl_arg_types);
16536   args = XALLOCAVEC (tree, nargs);
16537   for (arg = decl_arg_types, ix = 0;
16538        arg != NULL_TREE && arg != void_list_node;
16539        arg = TREE_CHAIN (arg), ++ix)
16540     args[ix] = TREE_VALUE (arg);
16541
16542   if (fn_type_unification (fn, explicit_args, targs,
16543                            args, ix,
16544                            (check_rettype || DECL_CONV_FN_P (fn)
16545                             ? TREE_TYPE (decl_type) : NULL_TREE),
16546                            DEDUCE_EXACT, LOOKUP_NORMAL))
16547     return NULL_TREE;
16548
16549   return targs;
16550 }
16551
16552 /* Return the innermost template arguments that, when applied to a
16553    template specialization whose innermost template parameters are
16554    TPARMS, and whose specialization arguments are SPEC_ARGS, yield the
16555    ARGS.
16556
16557    For example, suppose we have:
16558
16559      template <class T, class U> struct S {};
16560      template <class T> struct S<T*, int> {};
16561
16562    Then, suppose we want to get `S<double*, int>'.  The TPARMS will be
16563    {T}, the SPEC_ARGS will be {T*, int} and the ARGS will be {double*,
16564    int}.  The resulting vector will be {double}, indicating that `T'
16565    is bound to `double'.  */
16566
16567 static tree
16568 get_class_bindings (tree tparms, tree spec_args, tree args)
16569 {
16570   int i, ntparms = TREE_VEC_LENGTH (tparms);
16571   tree deduced_args;
16572   tree innermost_deduced_args;
16573
16574   innermost_deduced_args = make_tree_vec (ntparms);
16575   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
16576     {
16577       deduced_args = copy_node (args);
16578       SET_TMPL_ARGS_LEVEL (deduced_args,
16579                            TMPL_ARGS_DEPTH (deduced_args),
16580                            innermost_deduced_args);
16581     }
16582   else
16583     deduced_args = innermost_deduced_args;
16584
16585   if (unify (tparms, deduced_args,
16586              INNERMOST_TEMPLATE_ARGS (spec_args),
16587              INNERMOST_TEMPLATE_ARGS (args),
16588              UNIFY_ALLOW_NONE))
16589     return NULL_TREE;
16590
16591   for (i =  0; i < ntparms; ++i)
16592     if (! TREE_VEC_ELT (innermost_deduced_args, i))
16593       return NULL_TREE;
16594
16595   /* Verify that nondeduced template arguments agree with the type
16596      obtained from argument deduction.
16597
16598      For example:
16599
16600        struct A { typedef int X; };
16601        template <class T, class U> struct C {};
16602        template <class T> struct C<T, typename T::X> {};
16603
16604      Then with the instantiation `C<A, int>', we can deduce that
16605      `T' is `A' but unify () does not check whether `typename T::X'
16606      is `int'.  */
16607   spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
16608   if (spec_args == error_mark_node
16609       /* We only need to check the innermost arguments; the other
16610          arguments will always agree.  */
16611       || !comp_template_args (INNERMOST_TEMPLATE_ARGS (spec_args),
16612                               INNERMOST_TEMPLATE_ARGS (args)))
16613     return NULL_TREE;
16614
16615   /* Now that we have bindings for all of the template arguments,
16616      ensure that the arguments deduced for the template template
16617      parameters have compatible template parameter lists.  See the use
16618      of template_template_parm_bindings_ok_p in fn_type_unification
16619      for more information.  */
16620   if (!template_template_parm_bindings_ok_p (tparms, deduced_args))
16621     return NULL_TREE;
16622
16623   return deduced_args;
16624 }
16625
16626 /* TEMPLATES is a TREE_LIST.  Each TREE_VALUE is a TEMPLATE_DECL.
16627    Return the TREE_LIST node with the most specialized template, if
16628    any.  If there is no most specialized template, the error_mark_node
16629    is returned.
16630
16631    Note that this function does not look at, or modify, the
16632    TREE_PURPOSE or TREE_TYPE of any of the nodes.  Since the node
16633    returned is one of the elements of INSTANTIATIONS, callers may
16634    store information in the TREE_PURPOSE or TREE_TYPE of the nodes,
16635    and retrieve it from the value returned.  */
16636
16637 tree
16638 most_specialized_instantiation (tree templates)
16639 {
16640   tree fn, champ;
16641
16642   ++processing_template_decl;
16643
16644   champ = templates;
16645   for (fn = TREE_CHAIN (templates); fn; fn = TREE_CHAIN (fn))
16646     {
16647       int fate = 0;
16648
16649       if (get_bindings (TREE_VALUE (champ),
16650                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
16651                         NULL_TREE, /*check_ret=*/false))
16652         fate--;
16653
16654       if (get_bindings (TREE_VALUE (fn),
16655                         DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
16656                         NULL_TREE, /*check_ret=*/false))
16657         fate++;
16658
16659       if (fate == -1)
16660         champ = fn;
16661       else if (!fate)
16662         {
16663           /* Equally specialized, move to next function.  If there
16664              is no next function, nothing's most specialized.  */
16665           fn = TREE_CHAIN (fn);
16666           champ = fn;
16667           if (!fn)
16668             break;
16669         }
16670     }
16671
16672   if (champ)
16673     /* Now verify that champ is better than everything earlier in the
16674        instantiation list.  */
16675     for (fn = templates; fn != champ; fn = TREE_CHAIN (fn))
16676       if (get_bindings (TREE_VALUE (champ),
16677                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
16678                         NULL_TREE, /*check_ret=*/false)
16679           || !get_bindings (TREE_VALUE (fn),
16680                             DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
16681                             NULL_TREE, /*check_ret=*/false))
16682         {
16683           champ = NULL_TREE;
16684           break;
16685         }
16686
16687   processing_template_decl--;
16688
16689   if (!champ)
16690     return error_mark_node;
16691
16692   return champ;
16693 }
16694
16695 /* If DECL is a specialization of some template, return the most
16696    general such template.  Otherwise, returns NULL_TREE.
16697
16698    For example, given:
16699
16700      template <class T> struct S { template <class U> void f(U); };
16701
16702    if TMPL is `template <class U> void S<int>::f(U)' this will return
16703    the full template.  This function will not trace past partial
16704    specializations, however.  For example, given in addition:
16705
16706      template <class T> struct S<T*> { template <class U> void f(U); };
16707
16708    if TMPL is `template <class U> void S<int*>::f(U)' this will return
16709    `template <class T> template <class U> S<T*>::f(U)'.  */
16710
16711 tree
16712 most_general_template (tree decl)
16713 {
16714   /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
16715      an immediate specialization.  */
16716   if (TREE_CODE (decl) == FUNCTION_DECL)
16717     {
16718       if (DECL_TEMPLATE_INFO (decl)) {
16719         decl = DECL_TI_TEMPLATE (decl);
16720
16721         /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
16722            template friend.  */
16723         if (TREE_CODE (decl) != TEMPLATE_DECL)
16724           return NULL_TREE;
16725       } else
16726         return NULL_TREE;
16727     }
16728
16729   /* Look for more and more general templates.  */
16730   while (DECL_TEMPLATE_INFO (decl))
16731     {
16732       /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
16733          (See cp-tree.h for details.)  */
16734       if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
16735         break;
16736
16737       if (CLASS_TYPE_P (TREE_TYPE (decl))
16738           && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
16739         break;
16740
16741       /* Stop if we run into an explicitly specialized class template.  */
16742       if (!DECL_NAMESPACE_SCOPE_P (decl)
16743           && DECL_CONTEXT (decl)
16744           && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
16745         break;
16746
16747       decl = DECL_TI_TEMPLATE (decl);
16748     }
16749
16750   return decl;
16751 }
16752
16753 /* Return the most specialized of the class template partial
16754    specializations of TMPL which can produce TYPE, a specialization of
16755    TMPL.  The value returned is actually a TREE_LIST; the TREE_TYPE is
16756    a _TYPE node corresponding to the partial specialization, while the
16757    TREE_PURPOSE is the set of template arguments that must be
16758    substituted into the TREE_TYPE in order to generate TYPE.
16759
16760    If the choice of partial specialization is ambiguous, a diagnostic
16761    is issued, and the error_mark_node is returned.  If there are no
16762    partial specializations of TMPL matching TYPE, then NULL_TREE is
16763    returned.  */
16764
16765 static tree
16766 most_specialized_class (tree type, tree tmpl, tsubst_flags_t complain)
16767 {
16768   tree list = NULL_TREE;
16769   tree t;
16770   tree champ;
16771   int fate;
16772   bool ambiguous_p;
16773   tree args;
16774   tree outer_args = NULL_TREE;
16775
16776   tmpl = most_general_template (tmpl);
16777   args = CLASSTYPE_TI_ARGS (type);
16778
16779   /* For determining which partial specialization to use, only the
16780      innermost args are interesting.  */
16781   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
16782     {
16783       outer_args = strip_innermost_template_args (args, 1);
16784       args = INNERMOST_TEMPLATE_ARGS (args);
16785     }
16786
16787   for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
16788     {
16789       tree partial_spec_args;
16790       tree spec_args;
16791       tree parms = TREE_VALUE (t);
16792
16793       partial_spec_args = CLASSTYPE_TI_ARGS (TREE_TYPE (t));
16794
16795       ++processing_template_decl;
16796
16797       if (outer_args)
16798         {
16799           int i;
16800
16801           /* Discard the outer levels of args, and then substitute in the
16802              template args from the enclosing class.  */
16803           partial_spec_args = INNERMOST_TEMPLATE_ARGS (partial_spec_args);
16804           partial_spec_args = tsubst_template_args
16805             (partial_spec_args, outer_args, tf_none, NULL_TREE);
16806
16807           /* PARMS already refers to just the innermost parms, but the
16808              template parms in partial_spec_args had their levels lowered
16809              by tsubst, so we need to do the same for the parm list.  We
16810              can't just tsubst the TREE_VEC itself, as tsubst wants to
16811              treat a TREE_VEC as an argument vector.  */
16812           parms = copy_node (parms);
16813           for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
16814             TREE_VEC_ELT (parms, i) =
16815               tsubst (TREE_VEC_ELT (parms, i), outer_args, tf_none, NULL_TREE);
16816
16817         }
16818
16819       partial_spec_args =
16820           coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
16821                                  add_to_template_args (outer_args,
16822                                                        partial_spec_args),
16823                                  tmpl, tf_none,
16824                                  /*require_all_args=*/true,
16825                                  /*use_default_args=*/true);
16826
16827       --processing_template_decl;
16828
16829       if (partial_spec_args == error_mark_node)
16830         return error_mark_node;
16831
16832       spec_args = get_class_bindings (parms,
16833                                       partial_spec_args,
16834                                       args);
16835       if (spec_args)
16836         {
16837           if (outer_args)
16838             spec_args = add_to_template_args (outer_args, spec_args);
16839           list = tree_cons (spec_args, TREE_VALUE (t), list);
16840           TREE_TYPE (list) = TREE_TYPE (t);
16841         }
16842     }
16843
16844   if (! list)
16845     return NULL_TREE;
16846
16847   ambiguous_p = false;
16848   t = list;
16849   champ = t;
16850   t = TREE_CHAIN (t);
16851   for (; t; t = TREE_CHAIN (t))
16852     {
16853       fate = more_specialized_class (champ, t);
16854       if (fate == 1)
16855         ;
16856       else
16857         {
16858           if (fate == 0)
16859             {
16860               t = TREE_CHAIN (t);
16861               if (! t)
16862                 {
16863                   ambiguous_p = true;
16864                   break;
16865                 }
16866             }
16867           champ = t;
16868         }
16869     }
16870
16871   if (!ambiguous_p)
16872     for (t = list; t && t != champ; t = TREE_CHAIN (t))
16873       {
16874         fate = more_specialized_class (champ, t);
16875         if (fate != 1)
16876           {
16877             ambiguous_p = true;
16878             break;
16879           }
16880       }
16881
16882   if (ambiguous_p)
16883     {
16884       const char *str;
16885       char *spaces = NULL;
16886       if (!(complain & tf_error))
16887         return error_mark_node;
16888       error ("ambiguous class template instantiation for %q#T", type);
16889       str = ngettext ("candidate is:", "candidates are:", list_length (list));
16890       for (t = list; t; t = TREE_CHAIN (t))
16891         {
16892           error ("%s %+#T", spaces ? spaces : str, TREE_TYPE (t));
16893           spaces = spaces ? spaces : get_spaces (str);
16894         }
16895       free (spaces);
16896       return error_mark_node;
16897     }
16898
16899   return champ;
16900 }
16901
16902 /* Explicitly instantiate DECL.  */
16903
16904 void
16905 do_decl_instantiation (tree decl, tree storage)
16906 {
16907   tree result = NULL_TREE;
16908   int extern_p = 0;
16909
16910   if (!decl || decl == error_mark_node)
16911     /* An error occurred, for which grokdeclarator has already issued
16912        an appropriate message.  */
16913     return;
16914   else if (! DECL_LANG_SPECIFIC (decl))
16915     {
16916       error ("explicit instantiation of non-template %q#D", decl);
16917       return;
16918     }
16919   else if (TREE_CODE (decl) == VAR_DECL)
16920     {
16921       /* There is an asymmetry here in the way VAR_DECLs and
16922          FUNCTION_DECLs are handled by grokdeclarator.  In the case of
16923          the latter, the DECL we get back will be marked as a
16924          template instantiation, and the appropriate
16925          DECL_TEMPLATE_INFO will be set up.  This does not happen for
16926          VAR_DECLs so we do the lookup here.  Probably, grokdeclarator
16927          should handle VAR_DECLs as it currently handles
16928          FUNCTION_DECLs.  */
16929       if (!DECL_CLASS_SCOPE_P (decl))
16930         {
16931           error ("%qD is not a static data member of a class template", decl);
16932           return;
16933         }
16934       result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
16935       if (!result || TREE_CODE (result) != VAR_DECL)
16936         {
16937           error ("no matching template for %qD found", decl);
16938           return;
16939         }
16940       if (!same_type_p (TREE_TYPE (result), TREE_TYPE (decl)))
16941         {
16942           error ("type %qT for explicit instantiation %qD does not match "
16943                  "declared type %qT", TREE_TYPE (result), decl,
16944                  TREE_TYPE (decl));
16945           return;
16946         }
16947     }
16948   else if (TREE_CODE (decl) != FUNCTION_DECL)
16949     {
16950       error ("explicit instantiation of %q#D", decl);
16951       return;
16952     }
16953   else
16954     result = decl;
16955
16956   /* Check for various error cases.  Note that if the explicit
16957      instantiation is valid the RESULT will currently be marked as an
16958      *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
16959      until we get here.  */
16960
16961   if (DECL_TEMPLATE_SPECIALIZATION (result))
16962     {
16963       /* DR 259 [temp.spec].
16964
16965          Both an explicit instantiation and a declaration of an explicit
16966          specialization shall not appear in a program unless the explicit
16967          instantiation follows a declaration of the explicit specialization.
16968
16969          For a given set of template parameters, if an explicit
16970          instantiation of a template appears after a declaration of an
16971          explicit specialization for that template, the explicit
16972          instantiation has no effect.  */
16973       return;
16974     }
16975   else if (DECL_EXPLICIT_INSTANTIATION (result))
16976     {
16977       /* [temp.spec]
16978
16979          No program shall explicitly instantiate any template more
16980          than once.
16981
16982          We check DECL_NOT_REALLY_EXTERN so as not to complain when
16983          the first instantiation was `extern' and the second is not,
16984          and EXTERN_P for the opposite case.  */
16985       if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
16986         permerror (input_location, "duplicate explicit instantiation of %q#D", result);
16987       /* If an "extern" explicit instantiation follows an ordinary
16988          explicit instantiation, the template is instantiated.  */
16989       if (extern_p)
16990         return;
16991     }
16992   else if (!DECL_IMPLICIT_INSTANTIATION (result))
16993     {
16994       error ("no matching template for %qD found", result);
16995       return;
16996     }
16997   else if (!DECL_TEMPLATE_INFO (result))
16998     {
16999       permerror (input_location, "explicit instantiation of non-template %q#D", result);
17000       return;
17001     }
17002
17003   if (storage == NULL_TREE)
17004     ;
17005   else if (storage == ridpointers[(int) RID_EXTERN])
17006     {
17007       if (!in_system_header && (cxx_dialect == cxx98))
17008         pedwarn (input_location, OPT_pedantic, 
17009                  "ISO C++ 1998 forbids the use of %<extern%> on explicit "
17010                  "instantiations");
17011       extern_p = 1;
17012     }
17013   else
17014     error ("storage class %qD applied to template instantiation", storage);
17015
17016   check_explicit_instantiation_namespace (result);
17017   mark_decl_instantiated (result, extern_p);
17018   if (! extern_p)
17019     instantiate_decl (result, /*defer_ok=*/1,
17020                       /*expl_inst_class_mem_p=*/false);
17021 }
17022
17023 static void
17024 mark_class_instantiated (tree t, int extern_p)
17025 {
17026   SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
17027   SET_CLASSTYPE_INTERFACE_KNOWN (t);
17028   CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
17029   TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
17030   if (! extern_p)
17031     {
17032       CLASSTYPE_DEBUG_REQUESTED (t) = 1;
17033       rest_of_type_compilation (t, 1);
17034     }
17035 }
17036
17037 /* Called from do_type_instantiation through binding_table_foreach to
17038    do recursive instantiation for the type bound in ENTRY.  */
17039 static void
17040 bt_instantiate_type_proc (binding_entry entry, void *data)
17041 {
17042   tree storage = *(tree *) data;
17043
17044   if (MAYBE_CLASS_TYPE_P (entry->type)
17045       && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
17046     do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
17047 }
17048
17049 /* Called from do_type_instantiation to instantiate a member
17050    (a member function or a static member variable) of an
17051    explicitly instantiated class template.  */
17052 static void
17053 instantiate_class_member (tree decl, int extern_p)
17054 {
17055   mark_decl_instantiated (decl, extern_p);
17056   if (! extern_p)
17057     instantiate_decl (decl, /*defer_ok=*/1,
17058                       /*expl_inst_class_mem_p=*/true);
17059 }
17060
17061 /* Perform an explicit instantiation of template class T.  STORAGE, if
17062    non-null, is the RID for extern, inline or static.  COMPLAIN is
17063    nonzero if this is called from the parser, zero if called recursively,
17064    since the standard is unclear (as detailed below).  */
17065
17066 void
17067 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
17068 {
17069   int extern_p = 0;
17070   int nomem_p = 0;
17071   int static_p = 0;
17072   int previous_instantiation_extern_p = 0;
17073
17074   if (TREE_CODE (t) == TYPE_DECL)
17075     t = TREE_TYPE (t);
17076
17077   if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
17078     {
17079       error ("explicit instantiation of non-template type %qT", t);
17080       return;
17081     }
17082
17083   complete_type (t);
17084
17085   if (!COMPLETE_TYPE_P (t))
17086     {
17087       if (complain & tf_error)
17088         error ("explicit instantiation of %q#T before definition of template",
17089                t);
17090       return;
17091     }
17092
17093   if (storage != NULL_TREE)
17094     {
17095       if (!in_system_header)
17096         {
17097           if (storage == ridpointers[(int) RID_EXTERN])
17098             {
17099               if (cxx_dialect == cxx98)
17100                 pedwarn (input_location, OPT_pedantic, 
17101                          "ISO C++ 1998 forbids the use of %<extern%> on "
17102                          "explicit instantiations");
17103             }
17104           else
17105             pedwarn (input_location, OPT_pedantic, 
17106                      "ISO C++ forbids the use of %qE"
17107                      " on explicit instantiations", storage);
17108         }
17109
17110       if (storage == ridpointers[(int) RID_INLINE])
17111         nomem_p = 1;
17112       else if (storage == ridpointers[(int) RID_EXTERN])
17113         extern_p = 1;
17114       else if (storage == ridpointers[(int) RID_STATIC])
17115         static_p = 1;
17116       else
17117         {
17118           error ("storage class %qD applied to template instantiation",
17119                  storage);
17120           extern_p = 0;
17121         }
17122     }
17123
17124   if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
17125     {
17126       /* DR 259 [temp.spec].
17127
17128          Both an explicit instantiation and a declaration of an explicit
17129          specialization shall not appear in a program unless the explicit
17130          instantiation follows a declaration of the explicit specialization.
17131
17132          For a given set of template parameters, if an explicit
17133          instantiation of a template appears after a declaration of an
17134          explicit specialization for that template, the explicit
17135          instantiation has no effect.  */
17136       return;
17137     }
17138   else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
17139     {
17140       /* [temp.spec]
17141
17142          No program shall explicitly instantiate any template more
17143          than once.
17144
17145          If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
17146          instantiation was `extern'.  If EXTERN_P then the second is.
17147          These cases are OK.  */
17148       previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
17149
17150       if (!previous_instantiation_extern_p && !extern_p
17151           && (complain & tf_error))
17152         permerror (input_location, "duplicate explicit instantiation of %q#T", t);
17153
17154       /* If we've already instantiated the template, just return now.  */
17155       if (!CLASSTYPE_INTERFACE_ONLY (t))
17156         return;
17157     }
17158
17159   check_explicit_instantiation_namespace (TYPE_NAME (t));
17160   mark_class_instantiated (t, extern_p);
17161
17162   if (nomem_p)
17163     return;
17164
17165   {
17166     tree tmp;
17167
17168     /* In contrast to implicit instantiation, where only the
17169        declarations, and not the definitions, of members are
17170        instantiated, we have here:
17171
17172          [temp.explicit]
17173
17174          The explicit instantiation of a class template specialization
17175          implies the instantiation of all of its members not
17176          previously explicitly specialized in the translation unit
17177          containing the explicit instantiation.
17178
17179        Of course, we can't instantiate member template classes, since
17180        we don't have any arguments for them.  Note that the standard
17181        is unclear on whether the instantiation of the members are
17182        *explicit* instantiations or not.  However, the most natural
17183        interpretation is that it should be an explicit instantiation.  */
17184
17185     if (! static_p)
17186       for (tmp = TYPE_METHODS (t); tmp; tmp = DECL_CHAIN (tmp))
17187         if (TREE_CODE (tmp) == FUNCTION_DECL
17188             && DECL_TEMPLATE_INSTANTIATION (tmp))
17189           instantiate_class_member (tmp, extern_p);
17190
17191     for (tmp = TYPE_FIELDS (t); tmp; tmp = DECL_CHAIN (tmp))
17192       if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
17193         instantiate_class_member (tmp, extern_p);
17194
17195     if (CLASSTYPE_NESTED_UTDS (t))
17196       binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
17197                              bt_instantiate_type_proc, &storage);
17198   }
17199 }
17200
17201 /* Given a function DECL, which is a specialization of TMPL, modify
17202    DECL to be a re-instantiation of TMPL with the same template
17203    arguments.  TMPL should be the template into which tsubst'ing
17204    should occur for DECL, not the most general template.
17205
17206    One reason for doing this is a scenario like this:
17207
17208      template <class T>
17209      void f(const T&, int i);
17210
17211      void g() { f(3, 7); }
17212
17213      template <class T>
17214      void f(const T& t, const int i) { }
17215
17216    Note that when the template is first instantiated, with
17217    instantiate_template, the resulting DECL will have no name for the
17218    first parameter, and the wrong type for the second.  So, when we go
17219    to instantiate the DECL, we regenerate it.  */
17220
17221 static void
17222 regenerate_decl_from_template (tree decl, tree tmpl)
17223 {
17224   /* The arguments used to instantiate DECL, from the most general
17225      template.  */
17226   tree args;
17227   tree code_pattern;
17228
17229   args = DECL_TI_ARGS (decl);
17230   code_pattern = DECL_TEMPLATE_RESULT (tmpl);
17231
17232   /* Make sure that we can see identifiers, and compute access
17233      correctly.  */
17234   push_access_scope (decl);
17235
17236   if (TREE_CODE (decl) == FUNCTION_DECL)
17237     {
17238       tree decl_parm;
17239       tree pattern_parm;
17240       tree specs;
17241       int args_depth;
17242       int parms_depth;
17243
17244       args_depth = TMPL_ARGS_DEPTH (args);
17245       parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
17246       if (args_depth > parms_depth)
17247         args = get_innermost_template_args (args, parms_depth);
17248
17249       specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
17250                                               args, tf_error, NULL_TREE);
17251       if (specs)
17252         TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
17253                                                     specs);
17254
17255       /* Merge parameter declarations.  */
17256       decl_parm = skip_artificial_parms_for (decl,
17257                                              DECL_ARGUMENTS (decl));
17258       pattern_parm
17259         = skip_artificial_parms_for (code_pattern,
17260                                      DECL_ARGUMENTS (code_pattern));
17261       while (decl_parm && !FUNCTION_PARAMETER_PACK_P (pattern_parm))
17262         {
17263           tree parm_type;
17264           tree attributes;
17265           
17266           if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
17267             DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
17268           parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
17269                               NULL_TREE);
17270           parm_type = type_decays_to (parm_type);
17271           if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
17272             TREE_TYPE (decl_parm) = parm_type;
17273           attributes = DECL_ATTRIBUTES (pattern_parm);
17274           if (DECL_ATTRIBUTES (decl_parm) != attributes)
17275             {
17276               DECL_ATTRIBUTES (decl_parm) = attributes;
17277               cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
17278             }
17279           decl_parm = DECL_CHAIN (decl_parm);
17280           pattern_parm = DECL_CHAIN (pattern_parm);
17281         }
17282       /* Merge any parameters that match with the function parameter
17283          pack.  */
17284       if (pattern_parm && FUNCTION_PARAMETER_PACK_P (pattern_parm))
17285         {
17286           int i, len;
17287           tree expanded_types;
17288           /* Expand the TYPE_PACK_EXPANSION that provides the types for
17289              the parameters in this function parameter pack.  */
17290           expanded_types = tsubst_pack_expansion (TREE_TYPE (pattern_parm), 
17291                                                  args, tf_error, NULL_TREE);
17292           len = TREE_VEC_LENGTH (expanded_types);
17293           for (i = 0; i < len; i++)
17294             {
17295               tree parm_type;
17296               tree attributes;
17297           
17298               if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
17299                 /* Rename the parameter to include the index.  */
17300                 DECL_NAME (decl_parm) = 
17301                   make_ith_pack_parameter_name (DECL_NAME (pattern_parm), i);
17302               parm_type = TREE_VEC_ELT (expanded_types, i);
17303               parm_type = type_decays_to (parm_type);
17304               if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
17305                 TREE_TYPE (decl_parm) = parm_type;
17306               attributes = DECL_ATTRIBUTES (pattern_parm);
17307               if (DECL_ATTRIBUTES (decl_parm) != attributes)
17308                 {
17309                   DECL_ATTRIBUTES (decl_parm) = attributes;
17310                   cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
17311                 }
17312               decl_parm = DECL_CHAIN (decl_parm);
17313             }
17314         }
17315       /* Merge additional specifiers from the CODE_PATTERN.  */
17316       if (DECL_DECLARED_INLINE_P (code_pattern)
17317           && !DECL_DECLARED_INLINE_P (decl))
17318         DECL_DECLARED_INLINE_P (decl) = 1;
17319     }
17320   else if (TREE_CODE (decl) == VAR_DECL)
17321     {
17322       DECL_INITIAL (decl) =
17323         tsubst_expr (DECL_INITIAL (code_pattern), args,
17324                      tf_error, DECL_TI_TEMPLATE (decl),
17325                      /*integral_constant_expression_p=*/false);
17326       if (VAR_HAD_UNKNOWN_BOUND (decl))
17327         TREE_TYPE (decl) = tsubst (TREE_TYPE (code_pattern), args,
17328                                    tf_error, DECL_TI_TEMPLATE (decl));
17329     }
17330   else
17331     gcc_unreachable ();
17332
17333   pop_access_scope (decl);
17334 }
17335
17336 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
17337    substituted to get DECL.  */
17338
17339 tree
17340 template_for_substitution (tree decl)
17341 {
17342   tree tmpl = DECL_TI_TEMPLATE (decl);
17343
17344   /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
17345      for the instantiation.  This is not always the most general
17346      template.  Consider, for example:
17347
17348         template <class T>
17349         struct S { template <class U> void f();
17350                    template <> void f<int>(); };
17351
17352      and an instantiation of S<double>::f<int>.  We want TD to be the
17353      specialization S<T>::f<int>, not the more general S<T>::f<U>.  */
17354   while (/* An instantiation cannot have a definition, so we need a
17355             more general template.  */
17356          DECL_TEMPLATE_INSTANTIATION (tmpl)
17357            /* We must also deal with friend templates.  Given:
17358
17359                 template <class T> struct S {
17360                   template <class U> friend void f() {};
17361                 };
17362
17363               S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
17364               so far as the language is concerned, but that's still
17365               where we get the pattern for the instantiation from.  On
17366               other hand, if the definition comes outside the class, say:
17367
17368                 template <class T> struct S {
17369                   template <class U> friend void f();
17370                 };
17371                 template <class U> friend void f() {}
17372
17373               we don't need to look any further.  That's what the check for
17374               DECL_INITIAL is for.  */
17375           || (TREE_CODE (decl) == FUNCTION_DECL
17376               && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
17377               && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
17378     {
17379       /* The present template, TD, should not be a definition.  If it
17380          were a definition, we should be using it!  Note that we
17381          cannot restructure the loop to just keep going until we find
17382          a template with a definition, since that might go too far if
17383          a specialization was declared, but not defined.  */
17384       gcc_assert (TREE_CODE (decl) != VAR_DECL
17385                   || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl)));
17386
17387       /* Fetch the more general template.  */
17388       tmpl = DECL_TI_TEMPLATE (tmpl);
17389     }
17390
17391   return tmpl;
17392 }
17393
17394 /* Returns true if we need to instantiate this template instance even if we
17395    know we aren't going to emit it..  */
17396
17397 bool
17398 always_instantiate_p (tree decl)
17399 {
17400   /* We always instantiate inline functions so that we can inline them.  An
17401      explicit instantiation declaration prohibits implicit instantiation of
17402      non-inline functions.  With high levels of optimization, we would
17403      normally inline non-inline functions -- but we're not allowed to do
17404      that for "extern template" functions.  Therefore, we check
17405      DECL_DECLARED_INLINE_P, rather than possibly_inlined_p.  */
17406   return ((TREE_CODE (decl) == FUNCTION_DECL
17407            && DECL_DECLARED_INLINE_P (decl))
17408           /* And we need to instantiate static data members so that
17409              their initializers are available in integral constant
17410              expressions.  */
17411           || (TREE_CODE (decl) == VAR_DECL
17412               && decl_maybe_constant_var_p (decl)));
17413 }
17414
17415 /* Produce the definition of D, a _DECL generated from a template.  If
17416    DEFER_OK is nonzero, then we don't have to actually do the
17417    instantiation now; we just have to do it sometime.  Normally it is
17418    an error if this is an explicit instantiation but D is undefined.
17419    EXPL_INST_CLASS_MEM_P is true iff D is a member of an
17420    explicitly instantiated class template.  */
17421
17422 tree
17423 instantiate_decl (tree d, int defer_ok,
17424                   bool expl_inst_class_mem_p)
17425 {
17426   tree tmpl = DECL_TI_TEMPLATE (d);
17427   tree gen_args;
17428   tree args;
17429   tree td;
17430   tree code_pattern;
17431   tree spec;
17432   tree gen_tmpl;
17433   bool pattern_defined;
17434   int need_push;
17435   location_t saved_loc = input_location;
17436   bool external_p;
17437
17438   /* This function should only be used to instantiate templates for
17439      functions and static member variables.  */
17440   gcc_assert (TREE_CODE (d) == FUNCTION_DECL
17441               || TREE_CODE (d) == VAR_DECL);
17442
17443   /* Variables are never deferred; if instantiation is required, they
17444      are instantiated right away.  That allows for better code in the
17445      case that an expression refers to the value of the variable --
17446      if the variable has a constant value the referring expression can
17447      take advantage of that fact.  */
17448   if (TREE_CODE (d) == VAR_DECL
17449       || DECL_DECLARED_CONSTEXPR_P (d))
17450     defer_ok = 0;
17451
17452   /* Don't instantiate cloned functions.  Instead, instantiate the
17453      functions they cloned.  */
17454   if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
17455     d = DECL_CLONED_FUNCTION (d);
17456
17457   if (DECL_TEMPLATE_INSTANTIATED (d)
17458       || DECL_TEMPLATE_SPECIALIZATION (d))
17459     /* D has already been instantiated or explicitly specialized, so
17460        there's nothing for us to do here.
17461
17462        It might seem reasonable to check whether or not D is an explicit
17463        instantiation, and, if so, stop here.  But when an explicit
17464        instantiation is deferred until the end of the compilation,
17465        DECL_EXPLICIT_INSTANTIATION is set, even though we still need to do
17466        the instantiation.  */
17467     return d;
17468
17469   /* Check to see whether we know that this template will be
17470      instantiated in some other file, as with "extern template"
17471      extension.  */
17472   external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
17473
17474   /* In general, we do not instantiate such templates.  */
17475   if (external_p && !always_instantiate_p (d))
17476     return d;
17477
17478   gen_tmpl = most_general_template (tmpl);
17479   gen_args = DECL_TI_ARGS (d);
17480
17481   if (tmpl != gen_tmpl)
17482     /* We should already have the extra args.  */
17483     gcc_assert (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (gen_tmpl))
17484                 == TMPL_ARGS_DEPTH (gen_args));
17485   /* And what's in the hash table should match D.  */
17486   gcc_assert ((spec = retrieve_specialization (gen_tmpl, gen_args, 0)) == d
17487               || spec == NULL_TREE);
17488
17489   /* This needs to happen before any tsubsting.  */
17490   if (! push_tinst_level (d))
17491     return d;
17492
17493   timevar_push (TV_TEMPLATE_INST);
17494
17495   /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
17496      for the instantiation.  */
17497   td = template_for_substitution (d);
17498   code_pattern = DECL_TEMPLATE_RESULT (td);
17499
17500   /* We should never be trying to instantiate a member of a class
17501      template or partial specialization.  */
17502   gcc_assert (d != code_pattern);
17503
17504   if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
17505       || DECL_TEMPLATE_SPECIALIZATION (td))
17506     /* In the case of a friend template whose definition is provided
17507        outside the class, we may have too many arguments.  Drop the
17508        ones we don't need.  The same is true for specializations.  */
17509     args = get_innermost_template_args
17510       (gen_args, TMPL_PARMS_DEPTH  (DECL_TEMPLATE_PARMS (td)));
17511   else
17512     args = gen_args;
17513
17514   if (TREE_CODE (d) == FUNCTION_DECL)
17515     pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE
17516                        || DECL_DEFAULTED_OUTSIDE_CLASS_P (code_pattern));
17517   else
17518     pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
17519
17520   /* We may be in the middle of deferred access check.  Disable it now.  */
17521   push_deferring_access_checks (dk_no_deferred);
17522
17523   /* Unless an explicit instantiation directive has already determined
17524      the linkage of D, remember that a definition is available for
17525      this entity.  */
17526   if (pattern_defined
17527       && !DECL_INTERFACE_KNOWN (d)
17528       && !DECL_NOT_REALLY_EXTERN (d))
17529     mark_definable (d);
17530
17531   DECL_SOURCE_LOCATION (td) = DECL_SOURCE_LOCATION (code_pattern);
17532   DECL_SOURCE_LOCATION (d) = DECL_SOURCE_LOCATION (code_pattern);
17533   input_location = DECL_SOURCE_LOCATION (d);
17534
17535   /* If D is a member of an explicitly instantiated class template,
17536      and no definition is available, treat it like an implicit
17537      instantiation.  */
17538   if (!pattern_defined && expl_inst_class_mem_p
17539       && DECL_EXPLICIT_INSTANTIATION (d))
17540     {
17541       /* Leave linkage flags alone on instantiations with anonymous
17542          visibility.  */
17543       if (TREE_PUBLIC (d))
17544         {
17545           DECL_NOT_REALLY_EXTERN (d) = 0;
17546           DECL_INTERFACE_KNOWN (d) = 0;
17547         }
17548       SET_DECL_IMPLICIT_INSTANTIATION (d);
17549     }
17550
17551   /* Recheck the substitutions to obtain any warning messages
17552      about ignoring cv qualifiers.  Don't do this for artificial decls,
17553      as it breaks the context-sensitive substitution for lambda op(). */
17554   if (!defer_ok && !DECL_ARTIFICIAL (d))
17555     {
17556       tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
17557       tree type = TREE_TYPE (gen);
17558
17559       /* Make sure that we can see identifiers, and compute access
17560          correctly.  D is already the target FUNCTION_DECL with the
17561          right context.  */
17562       push_access_scope (d);
17563
17564       if (TREE_CODE (gen) == FUNCTION_DECL)
17565         {
17566           tsubst (DECL_ARGUMENTS (gen), gen_args, tf_warning_or_error, d);
17567           tsubst_exception_specification (type, gen_args, tf_warning_or_error,
17568                                           d);
17569           /* Don't simply tsubst the function type, as that will give
17570              duplicate warnings about poor parameter qualifications.
17571              The function arguments are the same as the decl_arguments
17572              without the top level cv qualifiers.  */
17573           type = TREE_TYPE (type);
17574         }
17575       tsubst (type, gen_args, tf_warning_or_error, d);
17576
17577       pop_access_scope (d);
17578     }
17579
17580   /* Defer all other templates, unless we have been explicitly
17581      forbidden from doing so.  */
17582   if (/* If there is no definition, we cannot instantiate the
17583          template.  */
17584       ! pattern_defined
17585       /* If it's OK to postpone instantiation, do so.  */
17586       || defer_ok
17587       /* If this is a static data member that will be defined
17588          elsewhere, we don't want to instantiate the entire data
17589          member, but we do want to instantiate the initializer so that
17590          we can substitute that elsewhere.  */
17591       || (external_p && TREE_CODE (d) == VAR_DECL))
17592     {
17593       /* The definition of the static data member is now required so
17594          we must substitute the initializer.  */
17595       if (TREE_CODE (d) == VAR_DECL
17596           && !DECL_INITIAL (d)
17597           && DECL_INITIAL (code_pattern))
17598         {
17599           tree ns;
17600           tree init;
17601           bool const_init = false;
17602
17603           ns = decl_namespace_context (d);
17604           push_nested_namespace (ns);
17605           push_nested_class (DECL_CONTEXT (d));
17606           init = tsubst_expr (DECL_INITIAL (code_pattern),
17607                               args,
17608                               tf_warning_or_error, NULL_TREE,
17609                               /*integral_constant_expression_p=*/false);
17610           /* Make sure the initializer is still constant, in case of
17611              circular dependency (template/instantiate6.C). */
17612           const_init
17613             = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (code_pattern);
17614           cp_finish_decl (d, init, /*init_const_expr_p=*/const_init,
17615                           /*asmspec_tree=*/NULL_TREE,
17616                           LOOKUP_ONLYCONVERTING);
17617           pop_nested_class ();
17618           pop_nested_namespace (ns);
17619         }
17620
17621       /* We restore the source position here because it's used by
17622          add_pending_template.  */
17623       input_location = saved_loc;
17624
17625       if (at_eof && !pattern_defined
17626           && DECL_EXPLICIT_INSTANTIATION (d)
17627           && DECL_NOT_REALLY_EXTERN (d))
17628         /* [temp.explicit]
17629
17630            The definition of a non-exported function template, a
17631            non-exported member function template, or a non-exported
17632            member function or static data member of a class template
17633            shall be present in every translation unit in which it is
17634            explicitly instantiated.  */
17635         permerror (input_location,  "explicit instantiation of %qD "
17636                    "but no definition available", d);
17637
17638       /* If we're in unevaluated context, we just wanted to get the
17639          constant value; this isn't an odr use, so don't queue
17640          a full instantiation.  */
17641       if (cp_unevaluated_operand != 0)
17642         goto out;
17643       /* ??? Historically, we have instantiated inline functions, even
17644          when marked as "extern template".  */
17645       if (!(external_p && TREE_CODE (d) == VAR_DECL))
17646         add_pending_template (d);
17647       goto out;
17648     }
17649   /* Tell the repository that D is available in this translation unit
17650      -- and see if it is supposed to be instantiated here.  */
17651   if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
17652     {
17653       /* In a PCH file, despite the fact that the repository hasn't
17654          requested instantiation in the PCH it is still possible that
17655          an instantiation will be required in a file that includes the
17656          PCH.  */
17657       if (pch_file)
17658         add_pending_template (d);
17659       /* Instantiate inline functions so that the inliner can do its
17660          job, even though we'll not be emitting a copy of this
17661          function.  */
17662       if (!(TREE_CODE (d) == FUNCTION_DECL && possibly_inlined_p (d)))
17663         goto out;
17664     }
17665
17666   need_push = !cfun || !global_bindings_p ();
17667   if (need_push)
17668     push_to_top_level ();
17669
17670   /* Mark D as instantiated so that recursive calls to
17671      instantiate_decl do not try to instantiate it again.  */
17672   DECL_TEMPLATE_INSTANTIATED (d) = 1;
17673
17674   /* Regenerate the declaration in case the template has been modified
17675      by a subsequent redeclaration.  */
17676   regenerate_decl_from_template (d, td);
17677
17678   /* We already set the file and line above.  Reset them now in case
17679      they changed as a result of calling regenerate_decl_from_template.  */
17680   input_location = DECL_SOURCE_LOCATION (d);
17681
17682   if (TREE_CODE (d) == VAR_DECL)
17683     {
17684       tree init;
17685       bool const_init = false;
17686
17687       /* Clear out DECL_RTL; whatever was there before may not be right
17688          since we've reset the type of the declaration.  */
17689       SET_DECL_RTL (d, NULL);
17690       DECL_IN_AGGR_P (d) = 0;
17691
17692       /* The initializer is placed in DECL_INITIAL by
17693          regenerate_decl_from_template so we don't need to
17694          push/pop_access_scope again here.  Pull it out so that
17695          cp_finish_decl can process it.  */
17696       init = DECL_INITIAL (d);
17697       DECL_INITIAL (d) = NULL_TREE;
17698       DECL_INITIALIZED_P (d) = 0;
17699
17700       /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
17701          initializer.  That function will defer actual emission until
17702          we have a chance to determine linkage.  */
17703       DECL_EXTERNAL (d) = 0;
17704
17705       /* Enter the scope of D so that access-checking works correctly.  */
17706       push_nested_class (DECL_CONTEXT (d));
17707       const_init = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (code_pattern);
17708       cp_finish_decl (d, init, const_init, NULL_TREE, 0);
17709       pop_nested_class ();
17710     }
17711   else if (TREE_CODE (d) == FUNCTION_DECL && DECL_DEFAULTED_FN (code_pattern))
17712     synthesize_method (d);
17713   else if (TREE_CODE (d) == FUNCTION_DECL)
17714     {
17715       htab_t saved_local_specializations;
17716       tree subst_decl;
17717       tree tmpl_parm;
17718       tree spec_parm;
17719
17720       /* Save away the current list, in case we are instantiating one
17721          template from within the body of another.  */
17722       saved_local_specializations = local_specializations;
17723
17724       /* Set up the list of local specializations.  */
17725       local_specializations = htab_create (37,
17726                                            hash_local_specialization,
17727                                            eq_local_specializations,
17728                                            NULL);
17729
17730       /* Set up context.  */
17731       start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
17732
17733       /* Create substitution entries for the parameters.  */
17734       subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
17735       tmpl_parm = DECL_ARGUMENTS (subst_decl);
17736       spec_parm = DECL_ARGUMENTS (d);
17737       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
17738         {
17739           register_local_specialization (spec_parm, tmpl_parm);
17740           spec_parm = skip_artificial_parms_for (d, spec_parm);
17741           tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
17742         }
17743       while (tmpl_parm && !FUNCTION_PARAMETER_PACK_P (tmpl_parm))
17744         {
17745           register_local_specialization (spec_parm, tmpl_parm);
17746           tmpl_parm = DECL_CHAIN (tmpl_parm);
17747           spec_parm = DECL_CHAIN (spec_parm);
17748         }
17749       if (tmpl_parm && FUNCTION_PARAMETER_PACK_P (tmpl_parm))
17750         {
17751           /* Register the (value) argument pack as a specialization of
17752              TMPL_PARM, then move on.  */
17753           tree argpack = make_fnparm_pack (spec_parm);
17754           register_local_specialization (argpack, tmpl_parm);
17755           tmpl_parm = DECL_CHAIN (tmpl_parm);
17756           spec_parm = NULL_TREE;
17757         }
17758       gcc_assert (!spec_parm);
17759
17760       /* Substitute into the body of the function.  */
17761       tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
17762                    tf_warning_or_error, tmpl,
17763                    /*integral_constant_expression_p=*/false);
17764
17765       /* Set the current input_location to the end of the function
17766          so that finish_function knows where we are.  */
17767       input_location = DECL_STRUCT_FUNCTION (code_pattern)->function_end_locus;
17768
17769       /* We don't need the local specializations any more.  */
17770       htab_delete (local_specializations);
17771       local_specializations = saved_local_specializations;
17772
17773       /* Finish the function.  */
17774       d = finish_function (0);
17775       expand_or_defer_fn (d);
17776     }
17777
17778   /* We're not deferring instantiation any more.  */
17779   TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
17780
17781   if (need_push)
17782     pop_from_top_level ();
17783
17784 out:
17785   input_location = saved_loc;
17786   pop_deferring_access_checks ();
17787   pop_tinst_level ();
17788
17789   timevar_pop (TV_TEMPLATE_INST);
17790
17791   return d;
17792 }
17793
17794 /* Run through the list of templates that we wish we could
17795    instantiate, and instantiate any we can.  RETRIES is the
17796    number of times we retry pending template instantiation.  */
17797
17798 void
17799 instantiate_pending_templates (int retries)
17800 {
17801   int reconsider;
17802   location_t saved_loc = input_location;
17803
17804   /* Instantiating templates may trigger vtable generation.  This in turn
17805      may require further template instantiations.  We place a limit here
17806      to avoid infinite loop.  */
17807   if (pending_templates && retries >= max_tinst_depth)
17808     {
17809       tree decl = pending_templates->tinst->decl;
17810
17811       error ("template instantiation depth exceeds maximum of %d"
17812              " instantiating %q+D, possibly from virtual table generation"
17813              " (use -ftemplate-depth= to increase the maximum)",
17814              max_tinst_depth, decl);
17815       if (TREE_CODE (decl) == FUNCTION_DECL)
17816         /* Pretend that we defined it.  */
17817         DECL_INITIAL (decl) = error_mark_node;
17818       return;
17819     }
17820
17821   do
17822     {
17823       struct pending_template **t = &pending_templates;
17824       struct pending_template *last = NULL;
17825       reconsider = 0;
17826       while (*t)
17827         {
17828           tree instantiation = reopen_tinst_level ((*t)->tinst);
17829           bool complete = false;
17830
17831           if (TYPE_P (instantiation))
17832             {
17833               tree fn;
17834
17835               if (!COMPLETE_TYPE_P (instantiation))
17836                 {
17837                   instantiate_class_template (instantiation);
17838                   if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
17839                     for (fn = TYPE_METHODS (instantiation);
17840                          fn;
17841                          fn = TREE_CHAIN (fn))
17842                       if (! DECL_ARTIFICIAL (fn))
17843                         instantiate_decl (fn,
17844                                           /*defer_ok=*/0,
17845                                           /*expl_inst_class_mem_p=*/false);
17846                   if (COMPLETE_TYPE_P (instantiation))
17847                     reconsider = 1;
17848                 }
17849
17850               complete = COMPLETE_TYPE_P (instantiation);
17851             }
17852           else
17853             {
17854               if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
17855                   && !DECL_TEMPLATE_INSTANTIATED (instantiation))
17856                 {
17857                   instantiation
17858                     = instantiate_decl (instantiation,
17859                                         /*defer_ok=*/0,
17860                                         /*expl_inst_class_mem_p=*/false);
17861                   if (DECL_TEMPLATE_INSTANTIATED (instantiation))
17862                     reconsider = 1;
17863                 }
17864
17865               complete = (DECL_TEMPLATE_SPECIALIZATION (instantiation)
17866                           || DECL_TEMPLATE_INSTANTIATED (instantiation));
17867             }
17868
17869           if (complete)
17870             /* If INSTANTIATION has been instantiated, then we don't
17871                need to consider it again in the future.  */
17872             *t = (*t)->next;
17873           else
17874             {
17875               last = *t;
17876               t = &(*t)->next;
17877             }
17878           tinst_depth = 0;
17879           current_tinst_level = NULL;
17880         }
17881       last_pending_template = last;
17882     }
17883   while (reconsider);
17884
17885   input_location = saved_loc;
17886 }
17887
17888 /* Substitute ARGVEC into T, which is a list of initializers for
17889    either base class or a non-static data member.  The TREE_PURPOSEs
17890    are DECLs, and the TREE_VALUEs are the initializer values.  Used by
17891    instantiate_decl.  */
17892
17893 static tree
17894 tsubst_initializer_list (tree t, tree argvec)
17895 {
17896   tree inits = NULL_TREE;
17897
17898   for (; t; t = TREE_CHAIN (t))
17899     {
17900       tree decl;
17901       tree init;
17902       tree expanded_bases = NULL_TREE;
17903       tree expanded_arguments = NULL_TREE;
17904       int i, len = 1;
17905
17906       if (TREE_CODE (TREE_PURPOSE (t)) == TYPE_PACK_EXPANSION)
17907         {
17908           tree expr;
17909           tree arg;
17910
17911           /* Expand the base class expansion type into separate base
17912              classes.  */
17913           expanded_bases = tsubst_pack_expansion (TREE_PURPOSE (t), argvec,
17914                                                  tf_warning_or_error,
17915                                                  NULL_TREE);
17916           if (expanded_bases == error_mark_node)
17917             continue;
17918           
17919           /* We'll be building separate TREE_LISTs of arguments for
17920              each base.  */
17921           len = TREE_VEC_LENGTH (expanded_bases);
17922           expanded_arguments = make_tree_vec (len);
17923           for (i = 0; i < len; i++)
17924             TREE_VEC_ELT (expanded_arguments, i) = NULL_TREE;
17925
17926           /* Build a dummy EXPR_PACK_EXPANSION that will be used to
17927              expand each argument in the TREE_VALUE of t.  */
17928           expr = make_node (EXPR_PACK_EXPANSION);
17929           PACK_EXPANSION_PARAMETER_PACKS (expr) =
17930             PACK_EXPANSION_PARAMETER_PACKS (TREE_PURPOSE (t));
17931
17932           if (TREE_VALUE (t) == void_type_node)
17933             /* VOID_TYPE_NODE is used to indicate
17934                value-initialization.  */
17935             {
17936               for (i = 0; i < len; i++)
17937                 TREE_VEC_ELT (expanded_arguments, i) = void_type_node;
17938             }
17939           else
17940             {
17941               /* Substitute parameter packs into each argument in the
17942                  TREE_LIST.  */
17943               in_base_initializer = 1;
17944               for (arg = TREE_VALUE (t); arg; arg = TREE_CHAIN (arg))
17945                 {
17946                   tree expanded_exprs;
17947
17948                   /* Expand the argument.  */
17949                   SET_PACK_EXPANSION_PATTERN (expr, TREE_VALUE (arg));
17950                   expanded_exprs 
17951                     = tsubst_pack_expansion (expr, argvec,
17952                                              tf_warning_or_error,
17953                                              NULL_TREE);
17954                   if (expanded_exprs == error_mark_node)
17955                     continue;
17956
17957                   /* Prepend each of the expanded expressions to the
17958                      corresponding TREE_LIST in EXPANDED_ARGUMENTS.  */
17959                   for (i = 0; i < len; i++)
17960                     {
17961                       TREE_VEC_ELT (expanded_arguments, i) = 
17962                         tree_cons (NULL_TREE, 
17963                                    TREE_VEC_ELT (expanded_exprs, i),
17964                                    TREE_VEC_ELT (expanded_arguments, i));
17965                     }
17966                 }
17967               in_base_initializer = 0;
17968
17969               /* Reverse all of the TREE_LISTs in EXPANDED_ARGUMENTS,
17970                  since we built them backwards.  */
17971               for (i = 0; i < len; i++)
17972                 {
17973                   TREE_VEC_ELT (expanded_arguments, i) = 
17974                     nreverse (TREE_VEC_ELT (expanded_arguments, i));
17975                 }
17976             }
17977         }
17978
17979       for (i = 0; i < len; ++i)
17980         {
17981           if (expanded_bases)
17982             {
17983               decl = TREE_VEC_ELT (expanded_bases, i);
17984               decl = expand_member_init (decl);
17985               init = TREE_VEC_ELT (expanded_arguments, i);
17986             }
17987           else
17988             {
17989               decl = tsubst_copy (TREE_PURPOSE (t), argvec, 
17990                                   tf_warning_or_error, NULL_TREE);
17991
17992               decl = expand_member_init (decl);
17993               if (decl && !DECL_P (decl))
17994                 in_base_initializer = 1;
17995
17996               init = TREE_VALUE (t);
17997               if (init != void_type_node)
17998                 init = tsubst_expr (init, argvec,
17999                                     tf_warning_or_error, NULL_TREE,
18000                                     /*integral_constant_expression_p=*/false);
18001               in_base_initializer = 0;
18002             }
18003
18004           if (decl)
18005             {
18006               init = build_tree_list (decl, init);
18007               TREE_CHAIN (init) = inits;
18008               inits = init;
18009             }
18010         }
18011     }
18012   return inits;
18013 }
18014
18015 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL.  */
18016
18017 static void
18018 set_current_access_from_decl (tree decl)
18019 {
18020   if (TREE_PRIVATE (decl))
18021     current_access_specifier = access_private_node;
18022   else if (TREE_PROTECTED (decl))
18023     current_access_specifier = access_protected_node;
18024   else
18025     current_access_specifier = access_public_node;
18026 }
18027
18028 /* Instantiate an enumerated type.  TAG is the template type, NEWTAG
18029    is the instantiation (which should have been created with
18030    start_enum) and ARGS are the template arguments to use.  */
18031
18032 static void
18033 tsubst_enum (tree tag, tree newtag, tree args)
18034 {
18035   tree e;
18036
18037   if (SCOPED_ENUM_P (newtag))
18038     begin_scope (sk_scoped_enum, newtag);
18039
18040   for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
18041     {
18042       tree value;
18043       tree decl;
18044
18045       decl = TREE_VALUE (e);
18046       /* Note that in a template enum, the TREE_VALUE is the
18047          CONST_DECL, not the corresponding INTEGER_CST.  */
18048       value = tsubst_expr (DECL_INITIAL (decl),
18049                            args, tf_warning_or_error, NULL_TREE,
18050                            /*integral_constant_expression_p=*/true);
18051
18052       /* Give this enumeration constant the correct access.  */
18053       set_current_access_from_decl (decl);
18054
18055       /* Actually build the enumerator itself.  */
18056       build_enumerator
18057         (DECL_NAME (decl), value, newtag, DECL_SOURCE_LOCATION (decl));
18058     }
18059
18060   if (SCOPED_ENUM_P (newtag))
18061     finish_scope ();
18062
18063   finish_enum_value_list (newtag);
18064   finish_enum (newtag);
18065
18066   DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
18067     = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
18068 }
18069
18070 /* DECL is a FUNCTION_DECL that is a template specialization.  Return
18071    its type -- but without substituting the innermost set of template
18072    arguments.  So, innermost set of template parameters will appear in
18073    the type.  */
18074
18075 tree
18076 get_mostly_instantiated_function_type (tree decl)
18077 {
18078   tree fn_type;
18079   tree tmpl;
18080   tree targs;
18081   tree tparms;
18082   int parm_depth;
18083
18084   tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
18085   targs = DECL_TI_ARGS (decl);
18086   tparms = DECL_TEMPLATE_PARMS (tmpl);
18087   parm_depth = TMPL_PARMS_DEPTH (tparms);
18088
18089   /* There should be as many levels of arguments as there are levels
18090      of parameters.  */
18091   gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
18092
18093   fn_type = TREE_TYPE (tmpl);
18094
18095   if (parm_depth == 1)
18096     /* No substitution is necessary.  */
18097     ;
18098   else
18099     {
18100       int i;
18101       tree partial_args;
18102
18103       /* Replace the innermost level of the TARGS with NULL_TREEs to
18104          let tsubst know not to substitute for those parameters.  */
18105       partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
18106       for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
18107         SET_TMPL_ARGS_LEVEL (partial_args, i,
18108                              TMPL_ARGS_LEVEL (targs, i));
18109       SET_TMPL_ARGS_LEVEL (partial_args,
18110                            TMPL_ARGS_DEPTH (targs),
18111                            make_tree_vec (DECL_NTPARMS (tmpl)));
18112
18113       /* Make sure that we can see identifiers, and compute access
18114          correctly.  */
18115       push_access_scope (decl);
18116
18117       ++processing_template_decl;
18118       /* Now, do the (partial) substitution to figure out the
18119          appropriate function type.  */
18120       fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
18121       --processing_template_decl;
18122
18123       /* Substitute into the template parameters to obtain the real
18124          innermost set of parameters.  This step is important if the
18125          innermost set of template parameters contains value
18126          parameters whose types depend on outer template parameters.  */
18127       TREE_VEC_LENGTH (partial_args)--;
18128       tparms = tsubst_template_parms (tparms, partial_args, tf_error);
18129
18130       pop_access_scope (decl);
18131     }
18132
18133   return fn_type;
18134 }
18135
18136 /* Return truthvalue if we're processing a template different from
18137    the last one involved in diagnostics.  */
18138 int
18139 problematic_instantiation_changed (void)
18140 {
18141   return last_template_error_tick != tinst_level_tick;
18142 }
18143
18144 /* Remember current template involved in diagnostics.  */
18145 void
18146 record_last_problematic_instantiation (void)
18147 {
18148   last_template_error_tick = tinst_level_tick;
18149 }
18150
18151 struct tinst_level *
18152 current_instantiation (void)
18153 {
18154   return current_tinst_level;
18155 }
18156
18157 /* [temp.param] Check that template non-type parm TYPE is of an allowable
18158    type. Return zero for ok, nonzero for disallowed. Issue error and
18159    warning messages under control of COMPLAIN.  */
18160
18161 static int
18162 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
18163 {
18164   if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
18165     return 0;
18166   else if (POINTER_TYPE_P (type))
18167     return 0;
18168   else if (TYPE_PTR_TO_MEMBER_P (type))
18169     return 0;
18170   else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
18171     return 0;
18172   else if (TREE_CODE (type) == TYPENAME_TYPE)
18173     return 0;
18174   else if (TREE_CODE (type) == DECLTYPE_TYPE)
18175     return 0;
18176
18177   if (complain & tf_error)
18178     error ("%q#T is not a valid type for a template constant parameter", type);
18179   return 1;
18180 }
18181
18182 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
18183    Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
18184
18185 static bool
18186 dependent_type_p_r (tree type)
18187 {
18188   tree scope;
18189
18190   /* [temp.dep.type]
18191
18192      A type is dependent if it is:
18193
18194      -- a template parameter. Template template parameters are types
18195         for us (since TYPE_P holds true for them) so we handle
18196         them here.  */
18197   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
18198       || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
18199     return true;
18200   /* -- a qualified-id with a nested-name-specifier which contains a
18201         class-name that names a dependent type or whose unqualified-id
18202         names a dependent type.  */
18203   if (TREE_CODE (type) == TYPENAME_TYPE)
18204     return true;
18205   /* -- a cv-qualified type where the cv-unqualified type is
18206         dependent.  */
18207   type = TYPE_MAIN_VARIANT (type);
18208   /* -- a compound type constructed from any dependent type.  */
18209   if (TYPE_PTR_TO_MEMBER_P (type))
18210     return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
18211             || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
18212                                            (type)));
18213   else if (TREE_CODE (type) == POINTER_TYPE
18214            || TREE_CODE (type) == REFERENCE_TYPE)
18215     return dependent_type_p (TREE_TYPE (type));
18216   else if (TREE_CODE (type) == FUNCTION_TYPE
18217            || TREE_CODE (type) == METHOD_TYPE)
18218     {
18219       tree arg_type;
18220
18221       if (dependent_type_p (TREE_TYPE (type)))
18222         return true;
18223       for (arg_type = TYPE_ARG_TYPES (type);
18224            arg_type;
18225            arg_type = TREE_CHAIN (arg_type))
18226         if (dependent_type_p (TREE_VALUE (arg_type)))
18227           return true;
18228       return false;
18229     }
18230   /* -- an array type constructed from any dependent type or whose
18231         size is specified by a constant expression that is
18232         value-dependent.
18233
18234         We checked for type- and value-dependence of the bounds in
18235         compute_array_index_type, so TYPE_DEPENDENT_P is already set.  */
18236   if (TREE_CODE (type) == ARRAY_TYPE)
18237     {
18238       if (TYPE_DOMAIN (type)
18239           && dependent_type_p (TYPE_DOMAIN (type)))
18240         return true;
18241       return dependent_type_p (TREE_TYPE (type));
18242     }
18243
18244   /* -- a template-id in which either the template name is a template
18245      parameter ...  */
18246   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
18247     return true;
18248   /* ... or any of the template arguments is a dependent type or
18249         an expression that is type-dependent or value-dependent.  */
18250   else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
18251            && (any_dependent_template_arguments_p
18252                (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
18253     return true;
18254
18255   /* All TYPEOF_TYPEs, DECLTYPE_TYPEs, and UNDERLYING_TYPEs are
18256      dependent; if the argument of the `typeof' expression is not
18257      type-dependent, then it should already been have resolved.  */
18258   if (TREE_CODE (type) == TYPEOF_TYPE
18259       || TREE_CODE (type) == DECLTYPE_TYPE
18260       || TREE_CODE (type) == UNDERLYING_TYPE)
18261     return true;
18262
18263   /* A template argument pack is dependent if any of its packed
18264      arguments are.  */
18265   if (TREE_CODE (type) == TYPE_ARGUMENT_PACK)
18266     {
18267       tree args = ARGUMENT_PACK_ARGS (type);
18268       int i, len = TREE_VEC_LENGTH (args);
18269       for (i = 0; i < len; ++i)
18270         if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
18271           return true;
18272     }
18273
18274   /* All TYPE_PACK_EXPANSIONs are dependent, because parameter packs must
18275      be template parameters.  */
18276   if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
18277     return true;
18278
18279   /* The standard does not specifically mention types that are local
18280      to template functions or local classes, but they should be
18281      considered dependent too.  For example:
18282
18283        template <int I> void f() {
18284          enum E { a = I };
18285          S<sizeof (E)> s;
18286        }
18287
18288      The size of `E' cannot be known until the value of `I' has been
18289      determined.  Therefore, `E' must be considered dependent.  */
18290   scope = TYPE_CONTEXT (type);
18291   if (scope && TYPE_P (scope))
18292     return dependent_type_p (scope);
18293   /* Don't use type_dependent_expression_p here, as it can lead
18294      to infinite recursion trying to determine whether a lambda
18295      nested in a lambda is dependent (c++/47687).  */
18296   else if (scope && TREE_CODE (scope) == FUNCTION_DECL
18297            && DECL_LANG_SPECIFIC (scope)
18298            && DECL_TEMPLATE_INFO (scope)
18299            && (any_dependent_template_arguments_p
18300                (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (scope)))))
18301     return true;
18302
18303   /* Other types are non-dependent.  */
18304   return false;
18305 }
18306
18307 /* Returns TRUE if TYPE is dependent, in the sense of
18308    [temp.dep.type].  Note that a NULL type is considered dependent.  */
18309
18310 bool
18311 dependent_type_p (tree type)
18312 {
18313   /* If there are no template parameters in scope, then there can't be
18314      any dependent types.  */
18315   if (!processing_template_decl)
18316     {
18317       /* If we are not processing a template, then nobody should be
18318          providing us with a dependent type.  */
18319       gcc_assert (type);
18320       gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM || is_auto (type));
18321       return false;
18322     }
18323
18324   /* If the type is NULL, we have not computed a type for the entity
18325      in question; in that case, the type is dependent.  */
18326   if (!type)
18327     return true;
18328
18329   /* Erroneous types can be considered non-dependent.  */
18330   if (type == error_mark_node)
18331     return false;
18332
18333   /* If we have not already computed the appropriate value for TYPE,
18334      do so now.  */
18335   if (!TYPE_DEPENDENT_P_VALID (type))
18336     {
18337       TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
18338       TYPE_DEPENDENT_P_VALID (type) = 1;
18339     }
18340
18341   return TYPE_DEPENDENT_P (type);
18342 }
18343
18344 /* Returns TRUE if SCOPE is a dependent scope, in which we can't do any
18345    lookup.  In other words, a dependent type that is not the current
18346    instantiation.  */
18347
18348 bool
18349 dependent_scope_p (tree scope)
18350 {
18351   return (scope && TYPE_P (scope) && dependent_type_p (scope)
18352           && !currently_open_class (scope));
18353 }
18354
18355 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
18356    [temp.dep.constexpr].  EXPRESSION is already known to be a constant
18357    expression.  */
18358
18359 /* Note that this predicate is not appropriate for general expressions;
18360    only constant expressions (that satisfy potential_constant_expression)
18361    can be tested for value dependence.
18362
18363    We should really also have a predicate for "instantiation-dependent".
18364
18365    fold_non_dependent_expr: fold if constant and not type-dependent and not value-dependent.
18366      (what about instantiation-dependent constant-expressions?)
18367    is_late_template_attribute: defer if instantiation-dependent.
18368    compute_array_index_type: proceed if constant and not t- or v-dependent
18369      if instantiation-dependent, need to remember full expression
18370    uses_template_parms: FIXME - need to audit callers
18371    tsubst_decl [function_decl]: Why is this using value_dependent_expression_p?
18372    dependent_type_p [array_type]: dependent if index type is dependent
18373      (or non-constant?)
18374    static_assert - instantiation-dependent */
18375
18376 bool
18377 value_dependent_expression_p (tree expression)
18378 {
18379   if (!processing_template_decl)
18380     return false;
18381
18382   /* A name declared with a dependent type.  */
18383   if (DECL_P (expression) && type_dependent_expression_p (expression))
18384     return true;
18385
18386   switch (TREE_CODE (expression))
18387     {
18388     case IDENTIFIER_NODE:
18389       /* A name that has not been looked up -- must be dependent.  */
18390       return true;
18391
18392     case TEMPLATE_PARM_INDEX:
18393       /* A non-type template parm.  */
18394       return true;
18395
18396     case CONST_DECL:
18397       /* A non-type template parm.  */
18398       if (DECL_TEMPLATE_PARM_P (expression))
18399         return true;
18400       return value_dependent_expression_p (DECL_INITIAL (expression));
18401
18402     case VAR_DECL:
18403        /* A constant with literal type and is initialized
18404           with an expression that is value-dependent.  */
18405       if (DECL_INITIAL (expression)
18406           && decl_constant_var_p (expression)
18407           && value_dependent_expression_p (DECL_INITIAL (expression)))
18408         return true;
18409       return false;
18410
18411     case DYNAMIC_CAST_EXPR:
18412     case STATIC_CAST_EXPR:
18413     case CONST_CAST_EXPR:
18414     case REINTERPRET_CAST_EXPR:
18415     case CAST_EXPR:
18416       /* These expressions are value-dependent if the type to which
18417          the cast occurs is dependent or the expression being casted
18418          is value-dependent.  */
18419       {
18420         tree type = TREE_TYPE (expression);
18421
18422         if (dependent_type_p (type))
18423           return true;
18424
18425         /* A functional cast has a list of operands.  */
18426         expression = TREE_OPERAND (expression, 0);
18427         if (!expression)
18428           {
18429             /* If there are no operands, it must be an expression such
18430                as "int()". This should not happen for aggregate types
18431                because it would form non-constant expressions.  */
18432             gcc_assert (cxx_dialect >= cxx0x
18433                         || INTEGRAL_OR_ENUMERATION_TYPE_P (type));
18434
18435             return false;
18436           }
18437
18438         if (TREE_CODE (expression) == TREE_LIST)
18439           return any_value_dependent_elements_p (expression);
18440
18441         return value_dependent_expression_p (expression);
18442       }
18443
18444     case SIZEOF_EXPR:
18445     case ALIGNOF_EXPR:
18446     case TYPEID_EXPR:
18447       /* A `sizeof' expression is value-dependent if the operand is
18448          type-dependent or is a pack expansion.  */
18449       expression = TREE_OPERAND (expression, 0);
18450       if (PACK_EXPANSION_P (expression))
18451         return true;
18452       else if (TYPE_P (expression))
18453         return dependent_type_p (expression);
18454       return type_dependent_expression_p (expression);
18455
18456     case AT_ENCODE_EXPR:
18457       /* An 'encode' expression is value-dependent if the operand is
18458          type-dependent.  */
18459       expression = TREE_OPERAND (expression, 0);
18460       return dependent_type_p (expression);
18461
18462     case NOEXCEPT_EXPR:
18463       expression = TREE_OPERAND (expression, 0);
18464       return type_dependent_expression_p (expression);
18465
18466     case SCOPE_REF:
18467       {
18468         tree name = TREE_OPERAND (expression, 1);
18469         return value_dependent_expression_p (name);
18470       }
18471
18472     case COMPONENT_REF:
18473       return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
18474               || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
18475
18476     case NONTYPE_ARGUMENT_PACK:
18477       /* A NONTYPE_ARGUMENT_PACK is value-dependent if any packed argument
18478          is value-dependent.  */
18479       {
18480         tree values = ARGUMENT_PACK_ARGS (expression);
18481         int i, len = TREE_VEC_LENGTH (values);
18482         
18483         for (i = 0; i < len; ++i)
18484           if (value_dependent_expression_p (TREE_VEC_ELT (values, i)))
18485             return true;
18486         
18487         return false;
18488       }
18489
18490     case TRAIT_EXPR:
18491       {
18492         tree type2 = TRAIT_EXPR_TYPE2 (expression);
18493         return (dependent_type_p (TRAIT_EXPR_TYPE1 (expression))
18494                 || (type2 ? dependent_type_p (type2) : false));
18495       }
18496
18497     case MODOP_EXPR:
18498       return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
18499               || (value_dependent_expression_p (TREE_OPERAND (expression, 2))));
18500
18501     case ARRAY_REF:
18502       return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
18503               || (value_dependent_expression_p (TREE_OPERAND (expression, 1))));
18504
18505     case ADDR_EXPR:
18506       {
18507         tree op = TREE_OPERAND (expression, 0);
18508         return (value_dependent_expression_p (op)
18509                 || has_value_dependent_address (op));
18510       }
18511
18512     case CALL_EXPR:
18513       {
18514         tree fn = get_callee_fndecl (expression);
18515         int i, nargs;
18516         if (!fn && value_dependent_expression_p (CALL_EXPR_FN (expression)))
18517           return true;
18518         nargs = call_expr_nargs (expression);
18519         for (i = 0; i < nargs; ++i)
18520           {
18521             tree op = CALL_EXPR_ARG (expression, i);
18522             /* In a call to a constexpr member function, look through the
18523                implicit ADDR_EXPR on the object argument so that it doesn't
18524                cause the call to be considered value-dependent.  We also
18525                look through it in potential_constant_expression.  */
18526             if (i == 0 && fn && DECL_DECLARED_CONSTEXPR_P (fn)
18527                 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
18528                 && TREE_CODE (op) == ADDR_EXPR)
18529               op = TREE_OPERAND (op, 0);
18530             if (value_dependent_expression_p (op))
18531               return true;
18532           }
18533         return false;
18534       }
18535
18536     case TEMPLATE_ID_EXPR:
18537       /* If a TEMPLATE_ID_EXPR involves a dependent name, it will be
18538          type-dependent.  */
18539       return type_dependent_expression_p (expression);
18540
18541     case CONSTRUCTOR:
18542       {
18543         unsigned ix;
18544         tree val;
18545         FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), ix, val)
18546           if (value_dependent_expression_p (val))
18547             return true;
18548         return false;
18549       }
18550
18551     default:
18552       /* A constant expression is value-dependent if any subexpression is
18553          value-dependent.  */
18554       switch (TREE_CODE_CLASS (TREE_CODE (expression)))
18555         {
18556         case tcc_reference:
18557         case tcc_unary:
18558         case tcc_comparison:
18559         case tcc_binary:
18560         case tcc_expression:
18561         case tcc_vl_exp:
18562           {
18563             int i, len = cp_tree_operand_length (expression);
18564
18565             for (i = 0; i < len; i++)
18566               {
18567                 tree t = TREE_OPERAND (expression, i);
18568
18569                 /* In some cases, some of the operands may be missing.l
18570                    (For example, in the case of PREDECREMENT_EXPR, the
18571                    amount to increment by may be missing.)  That doesn't
18572                    make the expression dependent.  */
18573                 if (t && value_dependent_expression_p (t))
18574                   return true;
18575               }
18576           }
18577           break;
18578         default:
18579           break;
18580         }
18581       break;
18582     }
18583
18584   /* The expression is not value-dependent.  */
18585   return false;
18586 }
18587
18588 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
18589    [temp.dep.expr].  Note that an expression with no type is
18590    considered dependent.  Other parts of the compiler arrange for an
18591    expression with type-dependent subexpressions to have no type, so
18592    this function doesn't have to be fully recursive.  */
18593
18594 bool
18595 type_dependent_expression_p (tree expression)
18596 {
18597   if (!processing_template_decl)
18598     return false;
18599
18600   if (expression == error_mark_node)
18601     return false;
18602
18603   /* An unresolved name is always dependent.  */
18604   if (TREE_CODE (expression) == IDENTIFIER_NODE
18605       || TREE_CODE (expression) == USING_DECL)
18606     return true;
18607
18608   /* Some expression forms are never type-dependent.  */
18609   if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
18610       || TREE_CODE (expression) == SIZEOF_EXPR
18611       || TREE_CODE (expression) == ALIGNOF_EXPR
18612       || TREE_CODE (expression) == AT_ENCODE_EXPR
18613       || TREE_CODE (expression) == NOEXCEPT_EXPR
18614       || TREE_CODE (expression) == TRAIT_EXPR
18615       || TREE_CODE (expression) == TYPEID_EXPR
18616       || TREE_CODE (expression) == DELETE_EXPR
18617       || TREE_CODE (expression) == VEC_DELETE_EXPR
18618       || TREE_CODE (expression) == THROW_EXPR)
18619     return false;
18620
18621   /* The types of these expressions depends only on the type to which
18622      the cast occurs.  */
18623   if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
18624       || TREE_CODE (expression) == STATIC_CAST_EXPR
18625       || TREE_CODE (expression) == CONST_CAST_EXPR
18626       || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
18627       || TREE_CODE (expression) == CAST_EXPR)
18628     return dependent_type_p (TREE_TYPE (expression));
18629
18630   /* The types of these expressions depends only on the type created
18631      by the expression.  */
18632   if (TREE_CODE (expression) == NEW_EXPR
18633       || TREE_CODE (expression) == VEC_NEW_EXPR)
18634     {
18635       /* For NEW_EXPR tree nodes created inside a template, either
18636          the object type itself or a TREE_LIST may appear as the
18637          operand 1.  */
18638       tree type = TREE_OPERAND (expression, 1);
18639       if (TREE_CODE (type) == TREE_LIST)
18640         /* This is an array type.  We need to check array dimensions
18641            as well.  */
18642         return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
18643                || value_dependent_expression_p
18644                     (TREE_OPERAND (TREE_VALUE (type), 1));
18645       else
18646         return dependent_type_p (type);
18647     }
18648
18649   if (TREE_CODE (expression) == SCOPE_REF)
18650     {
18651       tree scope = TREE_OPERAND (expression, 0);
18652       tree name = TREE_OPERAND (expression, 1);
18653
18654       /* 14.6.2.2 [temp.dep.expr]: An id-expression is type-dependent if it
18655          contains an identifier associated by name lookup with one or more
18656          declarations declared with a dependent type, or...a
18657          nested-name-specifier or qualified-id that names a member of an
18658          unknown specialization.  */
18659       return (type_dependent_expression_p (name)
18660               || dependent_scope_p (scope));
18661     }
18662
18663   if (TREE_CODE (expression) == FUNCTION_DECL
18664       && DECL_LANG_SPECIFIC (expression)
18665       && DECL_TEMPLATE_INFO (expression)
18666       && (any_dependent_template_arguments_p
18667           (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
18668     return true;
18669
18670   if (TREE_CODE (expression) == TEMPLATE_DECL
18671       && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
18672     return false;
18673
18674   if (TREE_CODE (expression) == STMT_EXPR)
18675     expression = stmt_expr_value_expr (expression);
18676
18677   if (BRACE_ENCLOSED_INITIALIZER_P (expression))
18678     {
18679       tree elt;
18680       unsigned i;
18681
18682       FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), i, elt)
18683         {
18684           if (type_dependent_expression_p (elt))
18685             return true;
18686         }
18687       return false;
18688     }
18689
18690   /* A static data member of the current instantiation with incomplete
18691      array type is type-dependent, as the definition and specializations
18692      can have different bounds.  */
18693   if (TREE_CODE (expression) == VAR_DECL
18694       && DECL_CLASS_SCOPE_P (expression)
18695       && dependent_type_p (DECL_CONTEXT (expression))
18696       && VAR_HAD_UNKNOWN_BOUND (expression))
18697     return true;
18698
18699   if (TREE_TYPE (expression) == unknown_type_node)
18700     {
18701       if (TREE_CODE (expression) == ADDR_EXPR)
18702         return type_dependent_expression_p (TREE_OPERAND (expression, 0));
18703       if (TREE_CODE (expression) == COMPONENT_REF
18704           || TREE_CODE (expression) == OFFSET_REF)
18705         {
18706           if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
18707             return true;
18708           expression = TREE_OPERAND (expression, 1);
18709           if (TREE_CODE (expression) == IDENTIFIER_NODE)
18710             return false;
18711         }
18712       /* SCOPE_REF with non-null TREE_TYPE is always non-dependent.  */
18713       if (TREE_CODE (expression) == SCOPE_REF)
18714         return false;
18715
18716       if (TREE_CODE (expression) == BASELINK)
18717         expression = BASELINK_FUNCTIONS (expression);
18718
18719       if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
18720         {
18721           if (any_dependent_template_arguments_p
18722               (TREE_OPERAND (expression, 1)))
18723             return true;
18724           expression = TREE_OPERAND (expression, 0);
18725         }
18726       gcc_assert (TREE_CODE (expression) == OVERLOAD
18727                   || TREE_CODE (expression) == FUNCTION_DECL);
18728
18729       while (expression)
18730         {
18731           if (type_dependent_expression_p (OVL_CURRENT (expression)))
18732             return true;
18733           expression = OVL_NEXT (expression);
18734         }
18735       return false;
18736     }
18737
18738   gcc_assert (TREE_CODE (expression) != TYPE_DECL);
18739
18740   return (dependent_type_p (TREE_TYPE (expression)));
18741 }
18742
18743 /* Like type_dependent_expression_p, but it also works while not processing
18744    a template definition, i.e. during substitution or mangling.  */
18745
18746 bool
18747 type_dependent_expression_p_push (tree expr)
18748 {
18749   bool b;
18750   ++processing_template_decl;
18751   b = type_dependent_expression_p (expr);
18752   --processing_template_decl;
18753   return b;
18754 }
18755
18756 /* Returns TRUE if ARGS contains a type-dependent expression.  */
18757
18758 bool
18759 any_type_dependent_arguments_p (const VEC(tree,gc) *args)
18760 {
18761   unsigned int i;
18762   tree arg;
18763
18764   FOR_EACH_VEC_ELT (tree, args, i, arg)
18765     {
18766       if (type_dependent_expression_p (arg))
18767         return true;
18768     }
18769   return false;
18770 }
18771
18772 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
18773    expressions) contains any type-dependent expressions.  */
18774
18775 bool
18776 any_type_dependent_elements_p (const_tree list)
18777 {
18778   for (; list; list = TREE_CHAIN (list))
18779     if (value_dependent_expression_p (TREE_VALUE (list)))
18780       return true;
18781
18782   return false;
18783 }
18784
18785 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
18786    expressions) contains any value-dependent expressions.  */
18787
18788 bool
18789 any_value_dependent_elements_p (const_tree list)
18790 {
18791   for (; list; list = TREE_CHAIN (list))
18792     if (value_dependent_expression_p (TREE_VALUE (list)))
18793       return true;
18794
18795   return false;
18796 }
18797
18798 /* Returns TRUE if the ARG (a template argument) is dependent.  */
18799
18800 bool
18801 dependent_template_arg_p (tree arg)
18802 {
18803   if (!processing_template_decl)
18804     return false;
18805
18806   /* Assume a template argument that was wrongly written by the user
18807      is dependent. This is consistent with what
18808      any_dependent_template_arguments_p [that calls this function]
18809      does.  */
18810   if (arg == error_mark_node)
18811     return true;
18812
18813   if (TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
18814     arg = ARGUMENT_PACK_SELECT_ARG (arg);
18815
18816   if (TREE_CODE (arg) == TEMPLATE_DECL
18817       || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
18818     return dependent_template_p (arg);
18819   else if (ARGUMENT_PACK_P (arg))
18820     {
18821       tree args = ARGUMENT_PACK_ARGS (arg);
18822       int i, len = TREE_VEC_LENGTH (args);
18823       for (i = 0; i < len; ++i)
18824         {
18825           if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
18826             return true;
18827         }
18828
18829       return false;
18830     }
18831   else if (TYPE_P (arg))
18832     return dependent_type_p (arg);
18833   else
18834     return (type_dependent_expression_p (arg)
18835             || value_dependent_expression_p (arg));
18836 }
18837
18838 /* Returns true if ARGS (a collection of template arguments) contains
18839    any types that require structural equality testing.  */
18840
18841 bool
18842 any_template_arguments_need_structural_equality_p (tree args)
18843 {
18844   int i;
18845   int j;
18846
18847   if (!args)
18848     return false;
18849   if (args == error_mark_node)
18850     return true;
18851
18852   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
18853     {
18854       tree level = TMPL_ARGS_LEVEL (args, i + 1);
18855       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
18856         {
18857           tree arg = TREE_VEC_ELT (level, j);
18858           tree packed_args = NULL_TREE;
18859           int k, len = 1;
18860
18861           if (ARGUMENT_PACK_P (arg))
18862             {
18863               /* Look inside the argument pack.  */
18864               packed_args = ARGUMENT_PACK_ARGS (arg);
18865               len = TREE_VEC_LENGTH (packed_args);
18866             }
18867
18868           for (k = 0; k < len; ++k)
18869             {
18870               if (packed_args)
18871                 arg = TREE_VEC_ELT (packed_args, k);
18872
18873               if (error_operand_p (arg))
18874                 return true;
18875               else if (TREE_CODE (arg) == TEMPLATE_DECL
18876                        || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
18877                 continue;
18878               else if (TYPE_P (arg) && TYPE_STRUCTURAL_EQUALITY_P (arg))
18879                 return true;
18880               else if (!TYPE_P (arg) && TREE_TYPE (arg)
18881                        && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (arg)))
18882                 return true;
18883             }
18884         }
18885     }
18886
18887   return false;
18888 }
18889
18890 /* Returns true if ARGS (a collection of template arguments) contains
18891    any dependent arguments.  */
18892
18893 bool
18894 any_dependent_template_arguments_p (const_tree args)
18895 {
18896   int i;
18897   int j;
18898
18899   if (!args)
18900     return false;
18901   if (args == error_mark_node)
18902     return true;
18903
18904   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
18905     {
18906       const_tree level = TMPL_ARGS_LEVEL (args, i + 1);
18907       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
18908         if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
18909           return true;
18910     }
18911
18912   return false;
18913 }
18914
18915 /* Returns TRUE if the template TMPL is dependent.  */
18916
18917 bool
18918 dependent_template_p (tree tmpl)
18919 {
18920   if (TREE_CODE (tmpl) == OVERLOAD)
18921     {
18922       while (tmpl)
18923         {
18924           if (dependent_template_p (OVL_CURRENT (tmpl)))
18925             return true;
18926           tmpl = OVL_NEXT (tmpl);
18927         }
18928       return false;
18929     }
18930
18931   /* Template template parameters are dependent.  */
18932   if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
18933       || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
18934     return true;
18935   /* So are names that have not been looked up.  */
18936   if (TREE_CODE (tmpl) == SCOPE_REF
18937       || TREE_CODE (tmpl) == IDENTIFIER_NODE)
18938     return true;
18939   /* So are member templates of dependent classes.  */
18940   if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
18941     return dependent_type_p (DECL_CONTEXT (tmpl));
18942   return false;
18943 }
18944
18945 /* Returns TRUE if the specialization TMPL<ARGS> is dependent.  */
18946
18947 bool
18948 dependent_template_id_p (tree tmpl, tree args)
18949 {
18950   return (dependent_template_p (tmpl)
18951           || any_dependent_template_arguments_p (args));
18952 }
18953
18954 /* Returns TRUE if OMP_FOR with DECLV, INITV, CONDV and INCRV vectors
18955    is dependent.  */
18956
18957 bool
18958 dependent_omp_for_p (tree declv, tree initv, tree condv, tree incrv)
18959 {
18960   int i;
18961
18962   if (!processing_template_decl)
18963     return false;
18964
18965   for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
18966     {
18967       tree decl = TREE_VEC_ELT (declv, i);
18968       tree init = TREE_VEC_ELT (initv, i);
18969       tree cond = TREE_VEC_ELT (condv, i);
18970       tree incr = TREE_VEC_ELT (incrv, i);
18971
18972       if (type_dependent_expression_p (decl))
18973         return true;
18974
18975       if (init && type_dependent_expression_p (init))
18976         return true;
18977
18978       if (type_dependent_expression_p (cond))
18979         return true;
18980
18981       if (COMPARISON_CLASS_P (cond)
18982           && (type_dependent_expression_p (TREE_OPERAND (cond, 0))
18983               || type_dependent_expression_p (TREE_OPERAND (cond, 1))))
18984         return true;
18985
18986       if (TREE_CODE (incr) == MODOP_EXPR)
18987         {
18988           if (type_dependent_expression_p (TREE_OPERAND (incr, 0))
18989               || type_dependent_expression_p (TREE_OPERAND (incr, 2)))
18990             return true;
18991         }
18992       else if (type_dependent_expression_p (incr))
18993         return true;
18994       else if (TREE_CODE (incr) == MODIFY_EXPR)
18995         {
18996           if (type_dependent_expression_p (TREE_OPERAND (incr, 0)))
18997             return true;
18998           else if (BINARY_CLASS_P (TREE_OPERAND (incr, 1)))
18999             {
19000               tree t = TREE_OPERAND (incr, 1);
19001               if (type_dependent_expression_p (TREE_OPERAND (t, 0))
19002                   || type_dependent_expression_p (TREE_OPERAND (t, 1)))
19003                 return true;
19004             }
19005         }
19006     }
19007
19008   return false;
19009 }
19010
19011 /* TYPE is a TYPENAME_TYPE.  Returns the ordinary TYPE to which the
19012    TYPENAME_TYPE corresponds.  Returns the original TYPENAME_TYPE if
19013    no such TYPE can be found.  Note that this function peers inside
19014    uninstantiated templates and therefore should be used only in
19015    extremely limited situations.  ONLY_CURRENT_P restricts this
19016    peering to the currently open classes hierarchy (which is required
19017    when comparing types).  */
19018
19019 tree
19020 resolve_typename_type (tree type, bool only_current_p)
19021 {
19022   tree scope;
19023   tree name;
19024   tree decl;
19025   int quals;
19026   tree pushed_scope;
19027   tree result;
19028
19029   gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
19030
19031   scope = TYPE_CONTEXT (type);
19032   /* Usually the non-qualified identifier of a TYPENAME_TYPE is
19033      TYPE_IDENTIFIER (type). But when 'type' is a typedef variant of
19034      a TYPENAME_TYPE node, then TYPE_NAME (type) is set to the TYPE_DECL representing
19035      the typedef. In that case TYPE_IDENTIFIER (type) is not the non-qualified
19036      identifier  of the TYPENAME_TYPE anymore.
19037      So by getting the TYPE_IDENTIFIER of the _main declaration_ of the
19038      TYPENAME_TYPE instead, we avoid messing up with a possible
19039      typedef variant case.  */
19040   name = TYPE_IDENTIFIER (TYPE_MAIN_VARIANT (type));
19041
19042   /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
19043      it first before we can figure out what NAME refers to.  */
19044   if (TREE_CODE (scope) == TYPENAME_TYPE)
19045     scope = resolve_typename_type (scope, only_current_p);
19046   /* If we don't know what SCOPE refers to, then we cannot resolve the
19047      TYPENAME_TYPE.  */
19048   if (TREE_CODE (scope) == TYPENAME_TYPE)
19049     return type;
19050   /* If the SCOPE is a template type parameter, we have no way of
19051      resolving the name.  */
19052   if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
19053     return type;
19054   /* If the SCOPE is not the current instantiation, there's no reason
19055      to look inside it.  */
19056   if (only_current_p && !currently_open_class (scope))
19057     return type;
19058   /* If this is a typedef, we don't want to look inside (c++/11987).  */
19059   if (typedef_variant_p (type))
19060     return type;
19061   /* If SCOPE isn't the template itself, it will not have a valid
19062      TYPE_FIELDS list.  */
19063   if (same_type_p (scope, CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope)))
19064     /* scope is either the template itself or a compatible instantiation
19065        like X<T>, so look up the name in the original template.  */
19066     scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
19067   else
19068     /* scope is a partial instantiation, so we can't do the lookup or we
19069        will lose the template arguments.  */
19070     return type;
19071   /* Enter the SCOPE so that name lookup will be resolved as if we
19072      were in the class definition.  In particular, SCOPE will no
19073      longer be considered a dependent type.  */
19074   pushed_scope = push_scope (scope);
19075   /* Look up the declaration.  */
19076   decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true);
19077
19078   result = NULL_TREE;
19079   
19080   /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
19081      find a TEMPLATE_DECL.  Otherwise, we want to find a TYPE_DECL.  */
19082   if (!decl)
19083     /*nop*/;
19084   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
19085            && TREE_CODE (decl) == TYPE_DECL)
19086     {
19087       result = TREE_TYPE (decl);
19088       if (result == error_mark_node)
19089         result = NULL_TREE;
19090     }
19091   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
19092            && DECL_CLASS_TEMPLATE_P (decl))
19093     {
19094       tree tmpl;
19095       tree args;
19096       /* Obtain the template and the arguments.  */
19097       tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
19098       args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
19099       /* Instantiate the template.  */
19100       result = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
19101                                       /*entering_scope=*/0,
19102                                       tf_error | tf_user);
19103       if (result == error_mark_node)
19104         result = NULL_TREE;
19105     }
19106   
19107   /* Leave the SCOPE.  */
19108   if (pushed_scope)
19109     pop_scope (pushed_scope);
19110
19111   /* If we failed to resolve it, return the original typename.  */
19112   if (!result)
19113     return type;
19114   
19115   /* If lookup found a typename type, resolve that too.  */
19116   if (TREE_CODE (result) == TYPENAME_TYPE && !TYPENAME_IS_RESOLVING_P (result))
19117     {
19118       /* Ill-formed programs can cause infinite recursion here, so we
19119          must catch that.  */
19120       TYPENAME_IS_RESOLVING_P (type) = 1;
19121       result = resolve_typename_type (result, only_current_p);
19122       TYPENAME_IS_RESOLVING_P (type) = 0;
19123     }
19124   
19125   /* Qualify the resulting type.  */
19126   quals = cp_type_quals (type);
19127   if (quals)
19128     result = cp_build_qualified_type (result, cp_type_quals (result) | quals);
19129
19130   return result;
19131 }
19132
19133 /* EXPR is an expression which is not type-dependent.  Return a proxy
19134    for EXPR that can be used to compute the types of larger
19135    expressions containing EXPR.  */
19136
19137 tree
19138 build_non_dependent_expr (tree expr)
19139 {
19140   tree inner_expr;
19141
19142 #ifdef ENABLE_CHECKING
19143   /* Try to get a constant value for all non-type-dependent expressions in
19144       order to expose bugs in *_dependent_expression_p and constexpr.  */
19145   if (cxx_dialect >= cxx0x)
19146     maybe_constant_value (fold_non_dependent_expr (expr));
19147 #endif
19148
19149   /* Preserve OVERLOADs; the functions must be available to resolve
19150      types.  */
19151   inner_expr = expr;
19152   if (TREE_CODE (inner_expr) == STMT_EXPR)
19153     inner_expr = stmt_expr_value_expr (inner_expr);
19154   if (TREE_CODE (inner_expr) == ADDR_EXPR)
19155     inner_expr = TREE_OPERAND (inner_expr, 0);
19156   if (TREE_CODE (inner_expr) == COMPONENT_REF)
19157     inner_expr = TREE_OPERAND (inner_expr, 1);
19158   if (is_overloaded_fn (inner_expr)
19159       || TREE_CODE (inner_expr) == OFFSET_REF)
19160     return expr;
19161   /* There is no need to return a proxy for a variable.  */
19162   if (TREE_CODE (expr) == VAR_DECL)
19163     return expr;
19164   /* Preserve string constants; conversions from string constants to
19165      "char *" are allowed, even though normally a "const char *"
19166      cannot be used to initialize a "char *".  */
19167   if (TREE_CODE (expr) == STRING_CST)
19168     return expr;
19169   /* Preserve arithmetic constants, as an optimization -- there is no
19170      reason to create a new node.  */
19171   if (TREE_CODE (expr) == INTEGER_CST || TREE_CODE (expr) == REAL_CST)
19172     return expr;
19173   /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
19174      There is at least one place where we want to know that a
19175      particular expression is a throw-expression: when checking a ?:
19176      expression, there are special rules if the second or third
19177      argument is a throw-expression.  */
19178   if (TREE_CODE (expr) == THROW_EXPR)
19179     return expr;
19180
19181   if (TREE_CODE (expr) == COND_EXPR)
19182     return build3 (COND_EXPR,
19183                    TREE_TYPE (expr),
19184                    TREE_OPERAND (expr, 0),
19185                    (TREE_OPERAND (expr, 1)
19186                     ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
19187                     : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
19188                    build_non_dependent_expr (TREE_OPERAND (expr, 2)));
19189   if (TREE_CODE (expr) == COMPOUND_EXPR
19190       && !COMPOUND_EXPR_OVERLOADED (expr))
19191     return build2 (COMPOUND_EXPR,
19192                    TREE_TYPE (expr),
19193                    TREE_OPERAND (expr, 0),
19194                    build_non_dependent_expr (TREE_OPERAND (expr, 1)));
19195
19196   /* If the type is unknown, it can't really be non-dependent */
19197   gcc_assert (TREE_TYPE (expr) != unknown_type_node);
19198
19199   /* Otherwise, build a NON_DEPENDENT_EXPR.  */
19200   return build1 (NON_DEPENDENT_EXPR, TREE_TYPE (expr), expr);
19201 }
19202
19203 /* ARGS is a vector of expressions as arguments to a function call.
19204    Replace the arguments with equivalent non-dependent expressions.
19205    This modifies ARGS in place.  */
19206
19207 void
19208 make_args_non_dependent (VEC(tree,gc) *args)
19209 {
19210   unsigned int ix;
19211   tree arg;
19212
19213   FOR_EACH_VEC_ELT (tree, args, ix, arg)
19214     {
19215       tree newarg = build_non_dependent_expr (arg);
19216       if (newarg != arg)
19217         VEC_replace (tree, args, ix, newarg);
19218     }
19219 }
19220
19221 /* Returns a type which represents 'auto'.  We use a TEMPLATE_TYPE_PARM
19222    with a level one deeper than the actual template parms.  */
19223
19224 tree
19225 make_auto (void)
19226 {
19227   tree au = cxx_make_type (TEMPLATE_TYPE_PARM);
19228   TYPE_NAME (au) = build_decl (BUILTINS_LOCATION,
19229                                TYPE_DECL, get_identifier ("auto"), au);
19230   TYPE_STUB_DECL (au) = TYPE_NAME (au);
19231   TEMPLATE_TYPE_PARM_INDEX (au) = build_template_parm_index
19232     (0, processing_template_decl + 1, processing_template_decl + 1,
19233      0, TYPE_NAME (au), NULL_TREE);
19234   TYPE_CANONICAL (au) = canonical_type_parameter (au);
19235   DECL_ARTIFICIAL (TYPE_NAME (au)) = 1;
19236   SET_DECL_TEMPLATE_PARM_P (TYPE_NAME (au));
19237
19238   return au;
19239 }
19240
19241 /* Given type ARG, return std::initializer_list<ARG>.  */
19242
19243 static tree
19244 listify (tree arg)
19245 {
19246   tree std_init_list = namespace_binding
19247     (get_identifier ("initializer_list"), std_node);
19248   tree argvec;
19249   if (!std_init_list || !DECL_CLASS_TEMPLATE_P (std_init_list))
19250     {    
19251       error ("deducing from brace-enclosed initializer list requires "
19252              "#include <initializer_list>");
19253       return error_mark_node;
19254     }
19255   argvec = make_tree_vec (1);
19256   TREE_VEC_ELT (argvec, 0) = arg;
19257   return lookup_template_class (std_init_list, argvec, NULL_TREE,
19258                                 NULL_TREE, 0, tf_warning_or_error);
19259 }
19260
19261 /* Replace auto in TYPE with std::initializer_list<auto>.  */
19262
19263 static tree
19264 listify_autos (tree type, tree auto_node)
19265 {
19266   tree init_auto = listify (auto_node);
19267   tree argvec = make_tree_vec (1);
19268   TREE_VEC_ELT (argvec, 0) = init_auto;
19269   if (processing_template_decl)
19270     argvec = add_to_template_args (current_template_args (), argvec);
19271   return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
19272 }
19273
19274 /* walk_tree helper for do_auto_deduction.  */
19275
19276 static tree
19277 contains_auto_r (tree *tp, int *walk_subtrees ATTRIBUTE_UNUSED,
19278                  void *type)
19279 {
19280   /* Is this a variable with the type we're looking for?  */
19281   if (DECL_P (*tp)
19282       && TREE_TYPE (*tp) == type)
19283     return *tp;
19284   else
19285     return NULL_TREE;
19286 }
19287
19288 /* Replace occurrences of 'auto' in TYPE with the appropriate type deduced
19289    from INIT.  AUTO_NODE is the TEMPLATE_TYPE_PARM used for 'auto' in TYPE.  */
19290
19291 tree
19292 do_auto_deduction (tree type, tree init, tree auto_node)
19293 {
19294   tree parms, tparms, targs;
19295   tree args[1];
19296   tree decl;
19297   int val;
19298
19299   /* The name of the object being declared shall not appear in the
19300      initializer expression.  */
19301   decl = cp_walk_tree_without_duplicates (&init, contains_auto_r, type);
19302   if (decl)
19303     {
19304       error ("variable %q#D with %<auto%> type used in its own "
19305              "initializer", decl);
19306       return error_mark_node;
19307     }
19308
19309   /* [dcl.spec.auto]: Obtain P from T by replacing the occurrences of auto
19310      with either a new invented type template parameter U or, if the
19311      initializer is a braced-init-list (8.5.4), with
19312      std::initializer_list<U>.  */
19313   if (BRACE_ENCLOSED_INITIALIZER_P (init))
19314     type = listify_autos (type, auto_node);
19315
19316   init = resolve_nondeduced_context (init);
19317
19318   parms = build_tree_list (NULL_TREE, type);
19319   args[0] = init;
19320   tparms = make_tree_vec (1);
19321   targs = make_tree_vec (1);
19322   TREE_VEC_ELT (tparms, 0)
19323     = build_tree_list (NULL_TREE, TYPE_NAME (auto_node));
19324   val = type_unification_real (tparms, targs, parms, args, 1, 0,
19325                                DEDUCE_CALL, LOOKUP_NORMAL);
19326   if (val > 0)
19327     {
19328       if (type && type != error_mark_node)
19329         /* If type is error_mark_node a diagnostic must have been
19330            emitted by now.  Also, having a mention to '<type error>'
19331            in the diagnostic is not really useful to the user.  */
19332         error ("unable to deduce %qT from %qE", type, init);
19333       return error_mark_node;
19334     }
19335
19336   /* If the list of declarators contains more than one declarator, the type
19337      of each declared variable is determined as described above. If the
19338      type deduced for the template parameter U is not the same in each
19339      deduction, the program is ill-formed.  */
19340   if (TREE_TYPE (auto_node)
19341       && !same_type_p (TREE_TYPE (auto_node), TREE_VEC_ELT (targs, 0)))
19342     {
19343       error ("inconsistent deduction for %qT: %qT and then %qT",
19344              auto_node, TREE_TYPE (auto_node), TREE_VEC_ELT (targs, 0));
19345       return error_mark_node;
19346     }
19347   TREE_TYPE (auto_node) = TREE_VEC_ELT (targs, 0);
19348
19349   if (processing_template_decl)
19350     targs = add_to_template_args (current_template_args (), targs);
19351   return tsubst (type, targs, tf_warning_or_error, NULL_TREE);
19352 }
19353
19354 /* Substitutes LATE_RETURN_TYPE for 'auto' in TYPE and returns the
19355    result.  */
19356
19357 tree
19358 splice_late_return_type (tree type, tree late_return_type)
19359 {
19360   tree argvec;
19361
19362   if (late_return_type == NULL_TREE)
19363     return type;
19364   argvec = make_tree_vec (1);
19365   TREE_VEC_ELT (argvec, 0) = late_return_type;
19366   if (processing_template_parmlist)
19367     /* For a late-specified return type in a template type-parameter, we
19368        need to add a dummy argument level for its parmlist.  */
19369     argvec = add_to_template_args
19370       (make_tree_vec (processing_template_parmlist), argvec);
19371   if (current_template_parms)
19372     argvec = add_to_template_args (current_template_args (), argvec);
19373   return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
19374 }
19375
19376 /* Returns true iff TYPE is a TEMPLATE_TYPE_PARM representing 'auto'.  */
19377
19378 bool
19379 is_auto (const_tree type)
19380 {
19381   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
19382       && TYPE_IDENTIFIER (type) == get_identifier ("auto"))
19383     return true;
19384   else
19385     return false;
19386 }
19387
19388 /* Returns true iff TYPE contains a use of 'auto'.  Since auto can only
19389    appear as a type-specifier for the declaration in question, we don't
19390    have to look through the whole type.  */
19391
19392 tree
19393 type_uses_auto (tree type)
19394 {
19395   enum tree_code code;
19396   if (is_auto (type))
19397     return type;
19398
19399   code = TREE_CODE (type);
19400
19401   if (code == POINTER_TYPE || code == REFERENCE_TYPE
19402       || code == OFFSET_TYPE || code == FUNCTION_TYPE
19403       || code == METHOD_TYPE || code == ARRAY_TYPE)
19404     return type_uses_auto (TREE_TYPE (type));
19405
19406   if (TYPE_PTRMEMFUNC_P (type))
19407     return type_uses_auto (TREE_TYPE (TREE_TYPE
19408                                    (TYPE_PTRMEMFUNC_FN_TYPE (type))));
19409
19410   return NULL_TREE;
19411 }
19412
19413 /* For a given template T, return the vector of typedefs referenced
19414    in T for which access check is needed at T instantiation time.
19415    T is either  a FUNCTION_DECL or a RECORD_TYPE.
19416    Those typedefs were added to T by the function
19417    append_type_to_template_for_access_check.  */
19418
19419 VEC(qualified_typedef_usage_t,gc)*
19420 get_types_needing_access_check (tree t)
19421 {
19422   tree ti;
19423   VEC(qualified_typedef_usage_t,gc) *result = NULL;
19424
19425   if (!t || t == error_mark_node)
19426     return NULL;
19427
19428   if (!(ti = get_template_info (t)))
19429     return NULL;
19430
19431   if (CLASS_TYPE_P (t)
19432       || TREE_CODE (t) == FUNCTION_DECL)
19433     {
19434       if (!TI_TEMPLATE (ti))
19435         return NULL;
19436
19437       result = TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti);
19438     }
19439
19440   return result;
19441 }
19442
19443 /* Append the typedef TYPE_DECL used in template T to a list of typedefs
19444    tied to T. That list of typedefs will be access checked at
19445    T instantiation time.
19446    T is either a FUNCTION_DECL or a RECORD_TYPE.
19447    TYPE_DECL is a TYPE_DECL node representing a typedef.
19448    SCOPE is the scope through which TYPE_DECL is accessed.
19449    LOCATION is the location of the usage point of TYPE_DECL.
19450
19451    This function is a subroutine of
19452    append_type_to_template_for_access_check.  */
19453
19454 static void
19455 append_type_to_template_for_access_check_1 (tree t,
19456                                             tree type_decl,
19457                                             tree scope,
19458                                             location_t location)
19459 {
19460   qualified_typedef_usage_t typedef_usage;
19461   tree ti;
19462
19463   if (!t || t == error_mark_node)
19464     return;
19465
19466   gcc_assert ((TREE_CODE (t) == FUNCTION_DECL
19467                || CLASS_TYPE_P (t))
19468               && type_decl
19469               && TREE_CODE (type_decl) == TYPE_DECL
19470               && scope);
19471
19472   if (!(ti = get_template_info (t)))
19473     return;
19474
19475   gcc_assert (TI_TEMPLATE (ti));
19476
19477   typedef_usage.typedef_decl = type_decl;
19478   typedef_usage.context = scope;
19479   typedef_usage.locus = location;
19480
19481   VEC_safe_push (qualified_typedef_usage_t, gc,
19482                  TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti),
19483                  &typedef_usage);
19484 }
19485
19486 /* Append TYPE_DECL to the template TEMPL.
19487    TEMPL is either a class type, a FUNCTION_DECL or a a TEMPLATE_DECL.
19488    At TEMPL instanciation time, TYPE_DECL will be checked to see
19489    if it can be accessed through SCOPE.
19490    LOCATION is the location of the usage point of TYPE_DECL.
19491
19492    e.g. consider the following code snippet:
19493
19494      class C
19495      {
19496        typedef int myint;
19497      };
19498
19499      template<class U> struct S
19500      {
19501        C::myint mi; // <-- usage point of the typedef C::myint
19502      };
19503
19504      S<char> s;
19505
19506    At S<char> instantiation time, we need to check the access of C::myint
19507    In other words, we need to check the access of the myint typedef through
19508    the C scope. For that purpose, this function will add the myint typedef
19509    and the scope C through which its being accessed to a list of typedefs
19510    tied to the template S. That list will be walked at template instantiation
19511    time and access check performed on each typedefs it contains.
19512    Note that this particular code snippet should yield an error because
19513    myint is private to C.  */
19514
19515 void
19516 append_type_to_template_for_access_check (tree templ,
19517                                           tree type_decl,
19518                                           tree scope,
19519                                           location_t location)
19520 {
19521   qualified_typedef_usage_t *iter;
19522   int i;
19523
19524   gcc_assert (type_decl && (TREE_CODE (type_decl) == TYPE_DECL));
19525
19526   /* Make sure we don't append the type to the template twice.  */
19527   FOR_EACH_VEC_ELT (qualified_typedef_usage_t,
19528                     get_types_needing_access_check (templ),
19529                     i, iter)
19530     if (iter->typedef_decl == type_decl && scope == iter->context)
19531       return;
19532
19533   append_type_to_template_for_access_check_1 (templ, type_decl,
19534                                               scope, location);
19535 }
19536
19537 /* Set up the hash tables for template instantiations.  */
19538
19539 void
19540 init_template_processing (void)
19541 {
19542   decl_specializations = htab_create_ggc (37,
19543                                           hash_specialization,
19544                                           eq_specializations,
19545                                           ggc_free);
19546   type_specializations = htab_create_ggc (37,
19547                                           hash_specialization,
19548                                           eq_specializations,
19549                                           ggc_free);
19550 }
19551
19552 /* Print stats about the template hash tables for -fstats.  */
19553
19554 void
19555 print_template_statistics (void)
19556 {
19557   fprintf (stderr, "decl_specializations: size %ld, %ld elements, "
19558            "%f collisions\n", (long) htab_size (decl_specializations),
19559            (long) htab_elements (decl_specializations),
19560            htab_collisions (decl_specializations));
19561   fprintf (stderr, "type_specializations: size %ld, %ld elements, "
19562            "%f collisions\n", (long) htab_size (type_specializations),
19563            (long) htab_elements (type_specializations),
19564            htab_collisions (type_specializations));
19565   if (current_deduction_htab)
19566     fprintf (stderr, "current_deduction_htab: size %ld, %ld elements, "
19567              "%f collisions\n", (long) htab_size (current_deduction_htab),
19568              (long) htab_elements (current_deduction_htab),
19569              htab_collisions (current_deduction_htab));
19570 }
19571
19572 #include "gt-cp-pt.h"