remove unused files
[platform/upstream/gcc48.git] / gcc / cp / pt.c
1 /* Handle parameterized types (templates) for GNU C++.
2    Copyright (C) 1992-2013 Free Software Foundation, Inc.
3    Written by Ken Raeburn (raeburn@cygnus.com) while at Watchmaker Computing.
4    Rewritten by Jason Merrill (jason@cygnus.com).
5
6 This file is part of GCC.
7
8 GCC is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3, or (at your option)
11 any later version.
12
13 GCC is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3.  If not see
20 <http://www.gnu.org/licenses/>.  */
21
22 /* Known bugs or deficiencies include:
23
24      all methods must be provided in header files; can't use a source
25      file that contains only the method templates and "just win".  */
26
27 #include "config.h"
28 #include "system.h"
29 #include "coretypes.h"
30 #include "tm.h"
31 #include "tree.h"
32 #include "intl.h"
33 #include "pointer-set.h"
34 #include "flags.h"
35 #include "cp-tree.h"
36 #include "c-family/c-common.h"
37 #include "c-family/c-objc.h"
38 #include "cp-objcp-common.h"
39 #include "tree-inline.h"
40 #include "decl.h"
41 #include "toplev.h"
42 #include "timevar.h"
43 #include "tree-iterator.h"
44
45 /* The type of functions taking a tree, and some additional data, and
46    returning an int.  */
47 typedef int (*tree_fn_t) (tree, void*);
48
49 /* The PENDING_TEMPLATES is a TREE_LIST of templates whose
50    instantiations have been deferred, either because their definitions
51    were not yet available, or because we were putting off doing the work.  */
52 struct GTY ((chain_next ("%h.next"))) pending_template {
53   struct pending_template *next;
54   struct tinst_level *tinst;
55 };
56
57 static GTY(()) struct pending_template *pending_templates;
58 static GTY(()) struct pending_template *last_pending_template;
59
60 int processing_template_parmlist;
61 static int template_header_count;
62
63 static GTY(()) tree saved_trees;
64 static vec<int> inline_parm_levels;
65
66 static GTY(()) struct tinst_level *current_tinst_level;
67
68 static GTY(()) tree saved_access_scope;
69
70 /* Live only within one (recursive) call to tsubst_expr.  We use
71    this to pass the statement expression node from the STMT_EXPR
72    to the EXPR_STMT that is its result.  */
73 static tree cur_stmt_expr;
74
75 /* A map from local variable declarations in the body of the template
76    presently being instantiated to the corresponding instantiated
77    local variables.  */
78 static struct pointer_map_t *local_specializations;
79
80 /* True if we've recursed into fn_type_unification too many times.  */
81 static bool excessive_deduction_depth;
82
83 typedef struct GTY(()) spec_entry
84 {
85   tree tmpl;
86   tree args;
87   tree spec;
88 } spec_entry;
89
90 static GTY ((param_is (spec_entry)))
91   htab_t decl_specializations;
92
93 static GTY ((param_is (spec_entry)))
94   htab_t type_specializations;
95
96 /* Contains canonical template parameter types. The vector is indexed by
97    the TEMPLATE_TYPE_IDX of the template parameter. Each element is a
98    TREE_LIST, whose TREE_VALUEs contain the canonical template
99    parameters of various types and levels.  */
100 static GTY(()) vec<tree, va_gc> *canonical_template_parms;
101
102 #define UNIFY_ALLOW_NONE 0
103 #define UNIFY_ALLOW_MORE_CV_QUAL 1
104 #define UNIFY_ALLOW_LESS_CV_QUAL 2
105 #define UNIFY_ALLOW_DERIVED 4
106 #define UNIFY_ALLOW_INTEGER 8
107 #define UNIFY_ALLOW_OUTER_LEVEL 16
108 #define UNIFY_ALLOW_OUTER_MORE_CV_QUAL 32
109 #define UNIFY_ALLOW_OUTER_LESS_CV_QUAL 64
110
111 enum template_base_result {
112   tbr_incomplete_type,
113   tbr_ambiguous_baseclass,
114   tbr_success
115 };
116
117 static void push_access_scope (tree);
118 static void pop_access_scope (tree);
119 static bool resolve_overloaded_unification (tree, tree, tree, tree,
120                                             unification_kind_t, int,
121                                             bool);
122 static int try_one_overload (tree, tree, tree, tree, tree,
123                              unification_kind_t, int, bool, bool);
124 static int unify (tree, tree, tree, tree, int, bool);
125 static void add_pending_template (tree);
126 static tree reopen_tinst_level (struct tinst_level *);
127 static tree tsubst_initializer_list (tree, tree);
128 static tree get_class_bindings (tree, tree, tree, tree);
129 static tree coerce_template_parms (tree, tree, tree, tsubst_flags_t,
130                                    bool, bool);
131 static tree coerce_innermost_template_parms (tree, tree, tree, tsubst_flags_t,
132                                               bool, bool);
133 static void tsubst_enum (tree, tree, tree);
134 static tree add_to_template_args (tree, tree);
135 static tree add_outermost_template_args (tree, tree);
136 static bool check_instantiated_args (tree, tree, tsubst_flags_t);
137 static int maybe_adjust_types_for_deduction (unification_kind_t, tree*, tree*,
138                                              tree);
139 static int type_unification_real (tree, tree, tree, const tree *,
140                                   unsigned int, int, unification_kind_t, int,
141                                   vec<deferred_access_check, va_gc> **,
142                                   bool);
143 static void note_template_header (int);
144 static tree convert_nontype_argument_function (tree, tree);
145 static tree convert_nontype_argument (tree, tree, tsubst_flags_t);
146 static tree convert_template_argument (tree, tree, tree,
147                                        tsubst_flags_t, int, tree);
148 static int for_each_template_parm (tree, tree_fn_t, void*,
149                                    struct pointer_set_t*, bool);
150 static tree expand_template_argument_pack (tree);
151 static tree build_template_parm_index (int, int, int, tree, tree);
152 static bool inline_needs_template_parms (tree);
153 static void push_inline_template_parms_recursive (tree, int);
154 static tree retrieve_local_specialization (tree);
155 static void register_local_specialization (tree, tree);
156 static hashval_t hash_specialization (const void *p);
157 static tree reduce_template_parm_level (tree, tree, int, tree, tsubst_flags_t);
158 static int mark_template_parm (tree, void *);
159 static int template_parm_this_level_p (tree, void *);
160 static tree tsubst_friend_function (tree, tree);
161 static tree tsubst_friend_class (tree, tree);
162 static int can_complete_type_without_circularity (tree);
163 static tree get_bindings (tree, tree, tree, bool);
164 static int template_decl_level (tree);
165 static int check_cv_quals_for_unify (int, tree, tree);
166 static void template_parm_level_and_index (tree, int*, int*);
167 static int unify_pack_expansion (tree, tree, tree,
168                                  tree, unification_kind_t, bool, bool);
169 static tree tsubst_template_arg (tree, tree, tsubst_flags_t, tree);
170 static tree tsubst_template_args (tree, tree, tsubst_flags_t, tree);
171 static tree tsubst_template_parms (tree, tree, tsubst_flags_t);
172 static void regenerate_decl_from_template (tree, tree);
173 static tree most_specialized_class (tree, tree, tsubst_flags_t);
174 static tree tsubst_aggr_type (tree, tree, tsubst_flags_t, tree, int);
175 static tree tsubst_arg_types (tree, tree, tree, tsubst_flags_t, tree);
176 static tree tsubst_function_type (tree, tree, tsubst_flags_t, tree);
177 static bool check_specialization_scope (void);
178 static tree process_partial_specialization (tree);
179 static void set_current_access_from_decl (tree);
180 static enum template_base_result get_template_base (tree, tree, tree, tree,
181                                                     bool , tree *);
182 static tree try_class_unification (tree, tree, tree, tree, bool);
183 static int coerce_template_template_parms (tree, tree, tsubst_flags_t,
184                                            tree, tree);
185 static bool template_template_parm_bindings_ok_p (tree, tree);
186 static int template_args_equal (tree, tree);
187 static void tsubst_default_arguments (tree, tsubst_flags_t);
188 static tree for_each_template_parm_r (tree *, int *, void *);
189 static tree copy_default_args_to_explicit_spec_1 (tree, tree);
190 static void copy_default_args_to_explicit_spec (tree);
191 static int invalid_nontype_parm_type_p (tree, tsubst_flags_t);
192 static bool dependent_template_arg_p (tree);
193 static bool any_template_arguments_need_structural_equality_p (tree);
194 static bool dependent_type_p_r (tree);
195 static tree tsubst_expr (tree, tree, tsubst_flags_t, tree, bool);
196 static tree tsubst_copy (tree, tree, tsubst_flags_t, tree);
197 static tree tsubst_pack_expansion (tree, tree, tsubst_flags_t, tree);
198 static tree tsubst_decl (tree, tree, tsubst_flags_t);
199 static void perform_typedefs_access_check (tree tmpl, tree targs);
200 static void append_type_to_template_for_access_check_1 (tree, tree, tree,
201                                                         location_t);
202 static tree listify (tree);
203 static tree listify_autos (tree, tree);
204 static tree template_parm_to_arg (tree t);
205 static tree current_template_args (void);
206 static tree tsubst_template_parm (tree, tree, tsubst_flags_t);
207 static tree instantiate_alias_template (tree, tree, tsubst_flags_t);
208
209 /* Make the current scope suitable for access checking when we are
210    processing T.  T can be FUNCTION_DECL for instantiated function
211    template, VAR_DECL for static member variable, or TYPE_DECL for
212    alias template (needed by instantiate_decl).  */
213
214 static void
215 push_access_scope (tree t)
216 {
217   gcc_assert (TREE_CODE (t) == FUNCTION_DECL
218               || TREE_CODE (t) == TYPE_DECL
219               || TREE_CODE (t) == VAR_DECL);
220
221   if (DECL_FRIEND_CONTEXT (t))
222     push_nested_class (DECL_FRIEND_CONTEXT (t));
223   else if (DECL_CLASS_SCOPE_P (t))
224     push_nested_class (DECL_CONTEXT (t));
225   else
226     push_to_top_level ();
227
228   if (TREE_CODE (t) == FUNCTION_DECL)
229     {
230       saved_access_scope = tree_cons
231         (NULL_TREE, current_function_decl, saved_access_scope);
232       current_function_decl = t;
233     }
234 }
235
236 /* Restore the scope set up by push_access_scope.  T is the node we
237    are processing.  */
238
239 static void
240 pop_access_scope (tree t)
241 {
242   if (TREE_CODE (t) == FUNCTION_DECL)
243     {
244       current_function_decl = TREE_VALUE (saved_access_scope);
245       saved_access_scope = TREE_CHAIN (saved_access_scope);
246     }
247
248   if (DECL_FRIEND_CONTEXT (t) || DECL_CLASS_SCOPE_P (t))
249     pop_nested_class ();
250   else
251     pop_from_top_level ();
252 }
253
254 /* Do any processing required when DECL (a member template
255    declaration) is finished.  Returns the TEMPLATE_DECL corresponding
256    to DECL, unless it is a specialization, in which case the DECL
257    itself is returned.  */
258
259 tree
260 finish_member_template_decl (tree decl)
261 {
262   if (decl == error_mark_node)
263     return error_mark_node;
264
265   gcc_assert (DECL_P (decl));
266
267   if (TREE_CODE (decl) == TYPE_DECL)
268     {
269       tree type;
270
271       type = TREE_TYPE (decl);
272       if (type == error_mark_node)
273         return error_mark_node;
274       if (MAYBE_CLASS_TYPE_P (type)
275           && CLASSTYPE_TEMPLATE_INFO (type)
276           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
277         {
278           tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
279           check_member_template (tmpl);
280           return tmpl;
281         }
282       return NULL_TREE;
283     }
284   else if (TREE_CODE (decl) == FIELD_DECL)
285     error ("data member %qD cannot be a member template", decl);
286   else if (DECL_TEMPLATE_INFO (decl))
287     {
288       if (!DECL_TEMPLATE_SPECIALIZATION (decl))
289         {
290           check_member_template (DECL_TI_TEMPLATE (decl));
291           return DECL_TI_TEMPLATE (decl);
292         }
293       else
294         return decl;
295     }
296   else
297     error ("invalid member template declaration %qD", decl);
298
299   return error_mark_node;
300 }
301
302 /* Create a template info node.  */
303
304 tree
305 build_template_info (tree template_decl, tree template_args)
306 {
307   tree result = make_node (TEMPLATE_INFO);
308   TI_TEMPLATE (result) = template_decl;
309   TI_ARGS (result) = template_args;
310   return result;
311 }
312
313 /* Return the template info node corresponding to T, whatever T is.  */
314
315 tree
316 get_template_info (const_tree t)
317 {
318   tree tinfo = NULL_TREE;
319
320   if (!t || t == error_mark_node)
321     return NULL;
322
323   if (DECL_P (t) && DECL_LANG_SPECIFIC (t))
324     tinfo = DECL_TEMPLATE_INFO (t);
325
326   if (!tinfo && DECL_IMPLICIT_TYPEDEF_P (t))
327     t = TREE_TYPE (t);
328
329   if (TAGGED_TYPE_P (t))
330     tinfo = TYPE_TEMPLATE_INFO (t);
331   else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
332     tinfo = TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t);
333
334   return tinfo;
335 }
336
337 /* Returns the template nesting level of the indicated class TYPE.
338
339    For example, in:
340      template <class T>
341      struct A
342      {
343        template <class U>
344        struct B {};
345      };
346
347    A<T>::B<U> has depth two, while A<T> has depth one.
348    Both A<T>::B<int> and A<int>::B<U> have depth one, if
349    they are instantiations, not specializations.
350
351    This function is guaranteed to return 0 if passed NULL_TREE so
352    that, for example, `template_class_depth (current_class_type)' is
353    always safe.  */
354
355 int
356 template_class_depth (tree type)
357 {
358   int depth;
359
360   for (depth = 0;
361        type && TREE_CODE (type) != NAMESPACE_DECL;
362        type = (TREE_CODE (type) == FUNCTION_DECL)
363          ? CP_DECL_CONTEXT (type) : CP_TYPE_CONTEXT (type))
364     {
365       tree tinfo = get_template_info (type);
366
367       if (tinfo && PRIMARY_TEMPLATE_P (TI_TEMPLATE (tinfo))
368           && uses_template_parms (INNERMOST_TEMPLATE_ARGS (TI_ARGS (tinfo))))
369         ++depth;
370     }
371
372   return depth;
373 }
374
375 /* Subroutine of maybe_begin_member_template_processing.
376    Returns true if processing DECL needs us to push template parms.  */
377
378 static bool
379 inline_needs_template_parms (tree decl)
380 {
381   if (! DECL_TEMPLATE_INFO (decl))
382     return false;
383
384   return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (most_general_template (decl)))
385           > (processing_template_decl + DECL_TEMPLATE_SPECIALIZATION (decl)));
386 }
387
388 /* Subroutine of maybe_begin_member_template_processing.
389    Push the template parms in PARMS, starting from LEVELS steps into the
390    chain, and ending at the beginning, since template parms are listed
391    innermost first.  */
392
393 static void
394 push_inline_template_parms_recursive (tree parmlist, int levels)
395 {
396   tree parms = TREE_VALUE (parmlist);
397   int i;
398
399   if (levels > 1)
400     push_inline_template_parms_recursive (TREE_CHAIN (parmlist), levels - 1);
401
402   ++processing_template_decl;
403   current_template_parms
404     = tree_cons (size_int (processing_template_decl),
405                  parms, current_template_parms);
406   TEMPLATE_PARMS_FOR_INLINE (current_template_parms) = 1;
407
408   begin_scope (TREE_VEC_LENGTH (parms) ? sk_template_parms : sk_template_spec,
409                NULL);
410   for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
411     {
412       tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
413
414       if (parm == error_mark_node)
415         continue;
416
417       gcc_assert (DECL_P (parm));
418
419       switch (TREE_CODE (parm))
420         {
421         case TYPE_DECL:
422         case TEMPLATE_DECL:
423           pushdecl (parm);
424           break;
425
426         case PARM_DECL:
427           {
428             /* Make a CONST_DECL as is done in process_template_parm.
429                It is ugly that we recreate this here; the original
430                version built in process_template_parm is no longer
431                available.  */
432             tree decl = build_decl (DECL_SOURCE_LOCATION (parm),
433                                     CONST_DECL, DECL_NAME (parm),
434                                     TREE_TYPE (parm));
435             DECL_ARTIFICIAL (decl) = 1;
436             TREE_CONSTANT (decl) = 1;
437             TREE_READONLY (decl) = 1;
438             DECL_INITIAL (decl) = DECL_INITIAL (parm);
439             SET_DECL_TEMPLATE_PARM_P (decl);
440             pushdecl (decl);
441           }
442           break;
443
444         default:
445           gcc_unreachable ();
446         }
447     }
448 }
449
450 /* Restore the template parameter context for a member template or
451    a friend template defined in a class definition.  */
452
453 void
454 maybe_begin_member_template_processing (tree decl)
455 {
456   tree parms;
457   int levels = 0;
458
459   if (inline_needs_template_parms (decl))
460     {
461       parms = DECL_TEMPLATE_PARMS (most_general_template (decl));
462       levels = TMPL_PARMS_DEPTH (parms) - processing_template_decl;
463
464       if (DECL_TEMPLATE_SPECIALIZATION (decl))
465         {
466           --levels;
467           parms = TREE_CHAIN (parms);
468         }
469
470       push_inline_template_parms_recursive (parms, levels);
471     }
472
473   /* Remember how many levels of template parameters we pushed so that
474      we can pop them later.  */
475   inline_parm_levels.safe_push (levels);
476 }
477
478 /* Undo the effects of maybe_begin_member_template_processing.  */
479
480 void
481 maybe_end_member_template_processing (void)
482 {
483   int i;
484   int last;
485
486   if (inline_parm_levels.length () == 0)
487     return;
488
489   last = inline_parm_levels.pop ();
490   for (i = 0; i < last; ++i)
491     {
492       --processing_template_decl;
493       current_template_parms = TREE_CHAIN (current_template_parms);
494       poplevel (0, 0, 0);
495     }
496 }
497
498 /* Return a new template argument vector which contains all of ARGS,
499    but has as its innermost set of arguments the EXTRA_ARGS.  */
500
501 static tree
502 add_to_template_args (tree args, tree extra_args)
503 {
504   tree new_args;
505   int extra_depth;
506   int i;
507   int j;
508
509   if (args == NULL_TREE || extra_args == error_mark_node)
510     return extra_args;
511
512   extra_depth = TMPL_ARGS_DEPTH (extra_args);
513   new_args = make_tree_vec (TMPL_ARGS_DEPTH (args) + extra_depth);
514
515   for (i = 1; i <= TMPL_ARGS_DEPTH (args); ++i)
516     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (args, i));
517
518   for (j = 1; j <= extra_depth; ++j, ++i)
519     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (extra_args, j));
520
521   return new_args;
522 }
523
524 /* Like add_to_template_args, but only the outermost ARGS are added to
525    the EXTRA_ARGS.  In particular, all but TMPL_ARGS_DEPTH
526    (EXTRA_ARGS) levels are added.  This function is used to combine
527    the template arguments from a partial instantiation with the
528    template arguments used to attain the full instantiation from the
529    partial instantiation.  */
530
531 static tree
532 add_outermost_template_args (tree args, tree extra_args)
533 {
534   tree new_args;
535
536   /* If there are more levels of EXTRA_ARGS than there are ARGS,
537      something very fishy is going on.  */
538   gcc_assert (TMPL_ARGS_DEPTH (args) >= TMPL_ARGS_DEPTH (extra_args));
539
540   /* If *all* the new arguments will be the EXTRA_ARGS, just return
541      them.  */
542   if (TMPL_ARGS_DEPTH (args) == TMPL_ARGS_DEPTH (extra_args))
543     return extra_args;
544
545   /* For the moment, we make ARGS look like it contains fewer levels.  */
546   TREE_VEC_LENGTH (args) -= TMPL_ARGS_DEPTH (extra_args);
547
548   new_args = add_to_template_args (args, extra_args);
549
550   /* Now, we restore ARGS to its full dimensions.  */
551   TREE_VEC_LENGTH (args) += TMPL_ARGS_DEPTH (extra_args);
552
553   return new_args;
554 }
555
556 /* Return the N levels of innermost template arguments from the ARGS.  */
557
558 tree
559 get_innermost_template_args (tree args, int n)
560 {
561   tree new_args;
562   int extra_levels;
563   int i;
564
565   gcc_assert (n >= 0);
566
567   /* If N is 1, just return the innermost set of template arguments.  */
568   if (n == 1)
569     return TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args));
570
571   /* If we're not removing anything, just return the arguments we were
572      given.  */
573   extra_levels = TMPL_ARGS_DEPTH (args) - n;
574   gcc_assert (extra_levels >= 0);
575   if (extra_levels == 0)
576     return args;
577
578   /* Make a new set of arguments, not containing the outer arguments.  */
579   new_args = make_tree_vec (n);
580   for (i = 1; i <= n; ++i)
581     SET_TMPL_ARGS_LEVEL (new_args, i,
582                          TMPL_ARGS_LEVEL (args, i + extra_levels));
583
584   return new_args;
585 }
586
587 /* The inverse of get_innermost_template_args: Return all but the innermost
588    EXTRA_LEVELS levels of template arguments from the ARGS.  */
589
590 static tree
591 strip_innermost_template_args (tree args, int extra_levels)
592 {
593   tree new_args;
594   int n = TMPL_ARGS_DEPTH (args) - extra_levels;
595   int i;
596
597   gcc_assert (n >= 0);
598
599   /* If N is 1, just return the outermost set of template arguments.  */
600   if (n == 1)
601     return TMPL_ARGS_LEVEL (args, 1);
602
603   /* If we're not removing anything, just return the arguments we were
604      given.  */
605   gcc_assert (extra_levels >= 0);
606   if (extra_levels == 0)
607     return args;
608
609   /* Make a new set of arguments, not containing the inner arguments.  */
610   new_args = make_tree_vec (n);
611   for (i = 1; i <= n; ++i)
612     SET_TMPL_ARGS_LEVEL (new_args, i,
613                          TMPL_ARGS_LEVEL (args, i));
614
615   return new_args;
616 }
617
618 /* We've got a template header coming up; push to a new level for storing
619    the parms.  */
620
621 void
622 begin_template_parm_list (void)
623 {
624   /* We use a non-tag-transparent scope here, which causes pushtag to
625      put tags in this scope, rather than in the enclosing class or
626      namespace scope.  This is the right thing, since we want
627      TEMPLATE_DECLS, and not TYPE_DECLS for template classes.  For a
628      global template class, push_template_decl handles putting the
629      TEMPLATE_DECL into top-level scope.  For a nested template class,
630      e.g.:
631
632        template <class T> struct S1 {
633          template <class T> struct S2 {};
634        };
635
636      pushtag contains special code to call pushdecl_with_scope on the
637      TEMPLATE_DECL for S2.  */
638   begin_scope (sk_template_parms, NULL);
639   ++processing_template_decl;
640   ++processing_template_parmlist;
641   note_template_header (0);
642 }
643
644 /* This routine is called when a specialization is declared.  If it is
645    invalid to declare a specialization here, an error is reported and
646    false is returned, otherwise this routine will return true.  */
647
648 static bool
649 check_specialization_scope (void)
650 {
651   tree scope = current_scope ();
652
653   /* [temp.expl.spec]
654
655      An explicit specialization shall be declared in the namespace of
656      which the template is a member, or, for member templates, in the
657      namespace of which the enclosing class or enclosing class
658      template is a member.  An explicit specialization of a member
659      function, member class or static data member of a class template
660      shall be declared in the namespace of which the class template
661      is a member.  */
662   if (scope && TREE_CODE (scope) != NAMESPACE_DECL)
663     {
664       error ("explicit specialization in non-namespace scope %qD", scope);
665       return false;
666     }
667
668   /* [temp.expl.spec]
669
670      In an explicit specialization declaration for a member of a class
671      template or a member template that appears in namespace scope,
672      the member template and some of its enclosing class templates may
673      remain unspecialized, except that the declaration shall not
674      explicitly specialize a class member template if its enclosing
675      class templates are not explicitly specialized as well.  */
676   if (current_template_parms)
677     {
678       error ("enclosing class templates are not explicitly specialized");
679       return false;
680     }
681
682   return true;
683 }
684
685 /* We've just seen template <>.  */
686
687 bool
688 begin_specialization (void)
689 {
690   begin_scope (sk_template_spec, NULL);
691   note_template_header (1);
692   return check_specialization_scope ();
693 }
694
695 /* Called at then end of processing a declaration preceded by
696    template<>.  */
697
698 void
699 end_specialization (void)
700 {
701   finish_scope ();
702   reset_specialization ();
703 }
704
705 /* Any template <>'s that we have seen thus far are not referring to a
706    function specialization.  */
707
708 void
709 reset_specialization (void)
710 {
711   processing_specialization = 0;
712   template_header_count = 0;
713 }
714
715 /* We've just seen a template header.  If SPECIALIZATION is nonzero,
716    it was of the form template <>.  */
717
718 static void
719 note_template_header (int specialization)
720 {
721   processing_specialization = specialization;
722   template_header_count++;
723 }
724
725 /* We're beginning an explicit instantiation.  */
726
727 void
728 begin_explicit_instantiation (void)
729 {
730   gcc_assert (!processing_explicit_instantiation);
731   processing_explicit_instantiation = true;
732 }
733
734
735 void
736 end_explicit_instantiation (void)
737 {
738   gcc_assert (processing_explicit_instantiation);
739   processing_explicit_instantiation = false;
740 }
741
742 /* An explicit specialization or partial specialization of TMPL is being
743    declared.  Check that the namespace in which the specialization is
744    occurring is permissible.  Returns false iff it is invalid to
745    specialize TMPL in the current namespace.  */
746
747 static bool
748 check_specialization_namespace (tree tmpl)
749 {
750   tree tpl_ns = decl_namespace_context (tmpl);
751
752   /* [tmpl.expl.spec]
753
754      An explicit specialization shall be declared in the namespace of
755      which the template is a member, or, for member templates, in the
756      namespace of which the enclosing class or enclosing class
757      template is a member.  An explicit specialization of a member
758      function, member class or static data member of a class template
759      shall be declared in the namespace of which the class template is
760      a member.  */
761   if (current_scope() != DECL_CONTEXT (tmpl)
762       && !at_namespace_scope_p ())
763     {
764       error ("specialization of %qD must appear at namespace scope", tmpl);
765       return false;
766     }
767   if (is_associated_namespace (current_namespace, tpl_ns))
768     /* Same or super-using namespace.  */
769     return true;
770   else
771     {
772       permerror (input_location, "specialization of %qD in different namespace", tmpl);
773       permerror (input_location, "  from definition of %q+#D", tmpl);
774       return false;
775     }
776 }
777
778 /* SPEC is an explicit instantiation.  Check that it is valid to
779    perform this explicit instantiation in the current namespace.  */
780
781 static void
782 check_explicit_instantiation_namespace (tree spec)
783 {
784   tree ns;
785
786   /* DR 275: An explicit instantiation shall appear in an enclosing
787      namespace of its template.  */
788   ns = decl_namespace_context (spec);
789   if (!is_ancestor (current_namespace, ns))
790     permerror (input_location, "explicit instantiation of %qD in namespace %qD "
791                "(which does not enclose namespace %qD)",
792                spec, current_namespace, ns);
793 }
794
795 /* The TYPE is being declared.  If it is a template type, that means it
796    is a partial specialization.  Do appropriate error-checking.  */
797
798 tree
799 maybe_process_partial_specialization (tree type)
800 {
801   tree context;
802
803   if (type == error_mark_node)
804     return error_mark_node;
805
806   /* A lambda that appears in specialization context is not itself a
807      specialization.  */
808   if (CLASS_TYPE_P (type) && CLASSTYPE_LAMBDA_EXPR (type))
809     return type;
810
811   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
812     {
813       error ("name of class shadows template template parameter %qD",
814              TYPE_NAME (type));
815       return error_mark_node;
816     }
817
818   context = TYPE_CONTEXT (type);
819
820   if (TYPE_ALIAS_P (type))
821     {
822       if (TYPE_TEMPLATE_INFO (type)
823           && DECL_ALIAS_TEMPLATE_P (TYPE_TI_TEMPLATE (type)))
824         error ("specialization of alias template %qD",
825                TYPE_TI_TEMPLATE (type));
826       else
827         error ("explicit specialization of non-template %qT", type);
828       return error_mark_node;
829     }
830   else if (CLASS_TYPE_P (type) && CLASSTYPE_USE_TEMPLATE (type))
831     {
832       /* This is for ordinary explicit specialization and partial
833          specialization of a template class such as:
834
835            template <> class C<int>;
836
837          or:
838
839            template <class T> class C<T*>;
840
841          Make sure that `C<int>' and `C<T*>' are implicit instantiations.  */
842
843       if (CLASSTYPE_IMPLICIT_INSTANTIATION (type)
844           && !COMPLETE_TYPE_P (type))
845         {
846           check_specialization_namespace (CLASSTYPE_TI_TEMPLATE (type));
847           SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
848           DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)) = input_location;
849           if (processing_template_decl)
850             {
851               if (push_template_decl (TYPE_MAIN_DECL (type))
852                   == error_mark_node)
853                 return error_mark_node;
854             }
855         }
856       else if (CLASSTYPE_TEMPLATE_INSTANTIATION (type))
857         error ("specialization of %qT after instantiation", type);
858       else if (errorcount && !processing_specialization
859                 && CLASSTYPE_TEMPLATE_SPECIALIZATION (type)
860                && !uses_template_parms (CLASSTYPE_TI_ARGS (type)))
861         /* Trying to define a specialization either without a template<> header
862            or in an inappropriate place.  We've already given an error, so just
863            bail now so we don't actually define the specialization.  */
864         return error_mark_node;
865     }
866   else if (CLASS_TYPE_P (type)
867            && !CLASSTYPE_USE_TEMPLATE (type)
868            && CLASSTYPE_TEMPLATE_INFO (type)
869            && context && CLASS_TYPE_P (context)
870            && CLASSTYPE_TEMPLATE_INFO (context))
871     {
872       /* This is for an explicit specialization of member class
873          template according to [temp.expl.spec/18]:
874
875            template <> template <class U> class C<int>::D;
876
877          The context `C<int>' must be an implicit instantiation.
878          Otherwise this is just a member class template declared
879          earlier like:
880
881            template <> class C<int> { template <class U> class D; };
882            template <> template <class U> class C<int>::D;
883
884          In the first case, `C<int>::D' is a specialization of `C<T>::D'
885          while in the second case, `C<int>::D' is a primary template
886          and `C<T>::D' may not exist.  */
887
888       if (CLASSTYPE_IMPLICIT_INSTANTIATION (context)
889           && !COMPLETE_TYPE_P (type))
890         {
891           tree t;
892           tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
893
894           if (current_namespace
895               != decl_namespace_context (tmpl))
896             {
897               permerror (input_location, "specializing %q#T in different namespace", type);
898               permerror (input_location, "  from definition of %q+#D", tmpl);
899             }
900
901           /* Check for invalid specialization after instantiation:
902
903                template <> template <> class C<int>::D<int>;
904                template <> template <class U> class C<int>::D;  */
905
906           for (t = DECL_TEMPLATE_INSTANTIATIONS (tmpl);
907                t; t = TREE_CHAIN (t))
908             {
909               tree inst = TREE_VALUE (t);
910               if (CLASSTYPE_TEMPLATE_SPECIALIZATION (inst))
911                 {
912                   /* We already have a full specialization of this partial
913                      instantiation.  Reassign it to the new member
914                      specialization template.  */
915                   spec_entry elt;
916                   spec_entry *entry;
917                   void **slot;
918
919                   elt.tmpl = most_general_template (tmpl);
920                   elt.args = CLASSTYPE_TI_ARGS (inst);
921                   elt.spec = inst;
922
923                   htab_remove_elt (type_specializations, &elt);
924
925                   elt.tmpl = tmpl;
926                   elt.args = INNERMOST_TEMPLATE_ARGS (elt.args);
927
928                   slot = htab_find_slot (type_specializations, &elt, INSERT);
929                   entry = ggc_alloc_spec_entry ();
930                   *entry = elt;
931                   *slot = entry;
932                 }
933               else if (COMPLETE_OR_OPEN_TYPE_P (inst))
934                 /* But if we've had an implicit instantiation, that's a
935                    problem ([temp.expl.spec]/6).  */
936                 error ("specialization %qT after instantiation %qT",
937                        type, inst);
938             }
939
940           /* Mark TYPE as a specialization.  And as a result, we only
941              have one level of template argument for the innermost
942              class template.  */
943           SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
944           DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)) = input_location;
945           CLASSTYPE_TI_ARGS (type)
946             = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type));
947         }
948     }
949   else if (processing_specialization)
950     {
951        /* Someday C++0x may allow for enum template specialization.  */
952       if (cxx_dialect > cxx98 && TREE_CODE (type) == ENUMERAL_TYPE
953           && CLASS_TYPE_P (context) && CLASSTYPE_USE_TEMPLATE (context))
954         pedwarn (input_location, OPT_Wpedantic, "template specialization "
955                  "of %qD not allowed by ISO C++", type);
956       else
957         {
958           error ("explicit specialization of non-template %qT", type);
959           return error_mark_node;
960         }
961     }
962
963   return type;
964 }
965
966 /* Returns nonzero if we can optimize the retrieval of specializations
967    for TMPL, a TEMPLATE_DECL.  In particular, for such a template, we
968    do not use DECL_TEMPLATE_SPECIALIZATIONS at all.  */
969
970 static inline bool
971 optimize_specialization_lookup_p (tree tmpl)
972 {
973   return (DECL_FUNCTION_TEMPLATE_P (tmpl)
974           && DECL_CLASS_SCOPE_P (tmpl)
975           /* DECL_CLASS_SCOPE_P holds of T::f even if T is a template
976              parameter.  */
977           && CLASS_TYPE_P (DECL_CONTEXT (tmpl))
978           /* The optimized lookup depends on the fact that the
979              template arguments for the member function template apply
980              purely to the containing class, which is not true if the
981              containing class is an explicit or partial
982              specialization.  */
983           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (tmpl))
984           && !DECL_MEMBER_TEMPLATE_P (tmpl)
985           && !DECL_CONV_FN_P (tmpl)
986           /* It is possible to have a template that is not a member
987              template and is not a member of a template class:
988
989              template <typename T>
990              struct S { friend A::f(); };
991
992              Here, the friend function is a template, but the context does
993              not have template information.  The optimized lookup relies
994              on having ARGS be the template arguments for both the class
995              and the function template.  */
996           && !DECL_FRIEND_P (DECL_TEMPLATE_RESULT (tmpl)));
997 }
998
999 /* Retrieve the specialization (in the sense of [temp.spec] - a
1000    specialization is either an instantiation or an explicit
1001    specialization) of TMPL for the given template ARGS.  If there is
1002    no such specialization, return NULL_TREE.  The ARGS are a vector of
1003    arguments, or a vector of vectors of arguments, in the case of
1004    templates with more than one level of parameters.
1005
1006    If TMPL is a type template and CLASS_SPECIALIZATIONS_P is true,
1007    then we search for a partial specialization matching ARGS.  This
1008    parameter is ignored if TMPL is not a class template.  */
1009
1010 static tree
1011 retrieve_specialization (tree tmpl, tree args, hashval_t hash)
1012 {
1013   if (args == error_mark_node)
1014     return NULL_TREE;
1015
1016   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
1017
1018   /* There should be as many levels of arguments as there are
1019      levels of parameters.  */
1020   gcc_assert (TMPL_ARGS_DEPTH (args)
1021               == TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl)));
1022
1023   if (optimize_specialization_lookup_p (tmpl))
1024     {
1025       tree class_template;
1026       tree class_specialization;
1027       vec<tree, va_gc> *methods;
1028       tree fns;
1029       int idx;
1030
1031       /* The template arguments actually apply to the containing
1032          class.  Find the class specialization with those
1033          arguments.  */
1034       class_template = CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (tmpl));
1035       class_specialization
1036         = retrieve_specialization (class_template, args, 0);
1037       if (!class_specialization)
1038         return NULL_TREE;
1039       /* Now, find the appropriate entry in the CLASSTYPE_METHOD_VEC
1040          for the specialization.  */
1041       idx = class_method_index_for_fn (class_specialization, tmpl);
1042       if (idx == -1)
1043         return NULL_TREE;
1044       /* Iterate through the methods with the indicated name, looking
1045          for the one that has an instance of TMPL.  */
1046       methods = CLASSTYPE_METHOD_VEC (class_specialization);
1047       for (fns = (*methods)[idx]; fns; fns = OVL_NEXT (fns))
1048         {
1049           tree fn = OVL_CURRENT (fns);
1050           if (DECL_TEMPLATE_INFO (fn) && DECL_TI_TEMPLATE (fn) == tmpl
1051               /* using-declarations can add base methods to the method vec,
1052                  and we don't want those here.  */
1053               && DECL_CONTEXT (fn) == class_specialization)
1054             return fn;
1055         }
1056       return NULL_TREE;
1057     }
1058   else
1059     {
1060       spec_entry *found;
1061       spec_entry elt;
1062       htab_t specializations;
1063
1064       elt.tmpl = tmpl;
1065       elt.args = args;
1066       elt.spec = NULL_TREE;
1067
1068       if (DECL_CLASS_TEMPLATE_P (tmpl))
1069         specializations = type_specializations;
1070       else
1071         specializations = decl_specializations;
1072
1073       if (hash == 0)
1074         hash = hash_specialization (&elt);
1075       found = (spec_entry *) htab_find_with_hash (specializations, &elt, hash);
1076       if (found)
1077         return found->spec;
1078     }
1079
1080   return NULL_TREE;
1081 }
1082
1083 /* Like retrieve_specialization, but for local declarations.  */
1084
1085 static tree
1086 retrieve_local_specialization (tree tmpl)
1087 {
1088   void **slot;
1089
1090   if (local_specializations == NULL)
1091     return NULL_TREE;
1092
1093   slot = pointer_map_contains (local_specializations, tmpl);
1094   return slot ? (tree) *slot : NULL_TREE;
1095 }
1096
1097 /* Returns nonzero iff DECL is a specialization of TMPL.  */
1098
1099 int
1100 is_specialization_of (tree decl, tree tmpl)
1101 {
1102   tree t;
1103
1104   if (TREE_CODE (decl) == FUNCTION_DECL)
1105     {
1106       for (t = decl;
1107            t != NULL_TREE;
1108            t = DECL_TEMPLATE_INFO (t) ? DECL_TI_TEMPLATE (t) : NULL_TREE)
1109         if (t == tmpl)
1110           return 1;
1111     }
1112   else
1113     {
1114       gcc_assert (TREE_CODE (decl) == TYPE_DECL);
1115
1116       for (t = TREE_TYPE (decl);
1117            t != NULL_TREE;
1118            t = CLASSTYPE_USE_TEMPLATE (t)
1119              ? TREE_TYPE (CLASSTYPE_TI_TEMPLATE (t)) : NULL_TREE)
1120         if (same_type_ignoring_top_level_qualifiers_p (t, TREE_TYPE (tmpl)))
1121           return 1;
1122     }
1123
1124   return 0;
1125 }
1126
1127 /* Returns nonzero iff DECL is a specialization of friend declaration
1128    FRIEND_DECL according to [temp.friend].  */
1129
1130 bool
1131 is_specialization_of_friend (tree decl, tree friend_decl)
1132 {
1133   bool need_template = true;
1134   int template_depth;
1135
1136   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
1137               || TREE_CODE (decl) == TYPE_DECL);
1138
1139   /* For [temp.friend/6] when FRIEND_DECL is an ordinary member function
1140      of a template class, we want to check if DECL is a specialization
1141      if this.  */
1142   if (TREE_CODE (friend_decl) == FUNCTION_DECL
1143       && DECL_TEMPLATE_INFO (friend_decl)
1144       && !DECL_USE_TEMPLATE (friend_decl))
1145     {
1146       /* We want a TEMPLATE_DECL for `is_specialization_of'.  */
1147       friend_decl = DECL_TI_TEMPLATE (friend_decl);
1148       need_template = false;
1149     }
1150   else if (TREE_CODE (friend_decl) == TEMPLATE_DECL
1151            && !PRIMARY_TEMPLATE_P (friend_decl))
1152     need_template = false;
1153
1154   /* There is nothing to do if this is not a template friend.  */
1155   if (TREE_CODE (friend_decl) != TEMPLATE_DECL)
1156     return false;
1157
1158   if (is_specialization_of (decl, friend_decl))
1159     return true;
1160
1161   /* [temp.friend/6]
1162      A member of a class template may be declared to be a friend of a
1163      non-template class.  In this case, the corresponding member of
1164      every specialization of the class template is a friend of the
1165      class granting friendship.
1166
1167      For example, given a template friend declaration
1168
1169        template <class T> friend void A<T>::f();
1170
1171      the member function below is considered a friend
1172
1173        template <> struct A<int> {
1174          void f();
1175        };
1176
1177      For this type of template friend, TEMPLATE_DEPTH below will be
1178      nonzero.  To determine if DECL is a friend of FRIEND, we first
1179      check if the enclosing class is a specialization of another.  */
1180
1181   template_depth = template_class_depth (CP_DECL_CONTEXT (friend_decl));
1182   if (template_depth
1183       && DECL_CLASS_SCOPE_P (decl)
1184       && is_specialization_of (TYPE_NAME (DECL_CONTEXT (decl)),
1185                                CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (friend_decl))))
1186     {
1187       /* Next, we check the members themselves.  In order to handle
1188          a few tricky cases, such as when FRIEND_DECL's are
1189
1190            template <class T> friend void A<T>::g(T t);
1191            template <class T> template <T t> friend void A<T>::h();
1192
1193          and DECL's are
1194
1195            void A<int>::g(int);
1196            template <int> void A<int>::h();
1197
1198          we need to figure out ARGS, the template arguments from
1199          the context of DECL.  This is required for template substitution
1200          of `T' in the function parameter of `g' and template parameter
1201          of `h' in the above examples.  Here ARGS corresponds to `int'.  */
1202
1203       tree context = DECL_CONTEXT (decl);
1204       tree args = NULL_TREE;
1205       int current_depth = 0;
1206
1207       while (current_depth < template_depth)
1208         {
1209           if (CLASSTYPE_TEMPLATE_INFO (context))
1210             {
1211               if (current_depth == 0)
1212                 args = TYPE_TI_ARGS (context);
1213               else
1214                 args = add_to_template_args (TYPE_TI_ARGS (context), args);
1215               current_depth++;
1216             }
1217           context = TYPE_CONTEXT (context);
1218         }
1219
1220       if (TREE_CODE (decl) == FUNCTION_DECL)
1221         {
1222           bool is_template;
1223           tree friend_type;
1224           tree decl_type;
1225           tree friend_args_type;
1226           tree decl_args_type;
1227
1228           /* Make sure that both DECL and FRIEND_DECL are templates or
1229              non-templates.  */
1230           is_template = DECL_TEMPLATE_INFO (decl)
1231                         && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl));
1232           if (need_template ^ is_template)
1233             return false;
1234           else if (is_template)
1235             {
1236               /* If both are templates, check template parameter list.  */
1237               tree friend_parms
1238                 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1239                                          args, tf_none);
1240               if (!comp_template_parms
1241                      (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (decl)),
1242                       friend_parms))
1243                 return false;
1244
1245               decl_type = TREE_TYPE (DECL_TI_TEMPLATE (decl));
1246             }
1247           else
1248             decl_type = TREE_TYPE (decl);
1249
1250           friend_type = tsubst_function_type (TREE_TYPE (friend_decl), args,
1251                                               tf_none, NULL_TREE);
1252           if (friend_type == error_mark_node)
1253             return false;
1254
1255           /* Check if return types match.  */
1256           if (!same_type_p (TREE_TYPE (decl_type), TREE_TYPE (friend_type)))
1257             return false;
1258
1259           /* Check if function parameter types match, ignoring the
1260              `this' parameter.  */
1261           friend_args_type = TYPE_ARG_TYPES (friend_type);
1262           decl_args_type = TYPE_ARG_TYPES (decl_type);
1263           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (friend_decl))
1264             friend_args_type = TREE_CHAIN (friend_args_type);
1265           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1266             decl_args_type = TREE_CHAIN (decl_args_type);
1267
1268           return compparms (decl_args_type, friend_args_type);
1269         }
1270       else
1271         {
1272           /* DECL is a TYPE_DECL */
1273           bool is_template;
1274           tree decl_type = TREE_TYPE (decl);
1275
1276           /* Make sure that both DECL and FRIEND_DECL are templates or
1277              non-templates.  */
1278           is_template
1279             = CLASSTYPE_TEMPLATE_INFO (decl_type)
1280               && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (decl_type));
1281
1282           if (need_template ^ is_template)
1283             return false;
1284           else if (is_template)
1285             {
1286               tree friend_parms;
1287               /* If both are templates, check the name of the two
1288                  TEMPLATE_DECL's first because is_friend didn't.  */
1289               if (DECL_NAME (CLASSTYPE_TI_TEMPLATE (decl_type))
1290                   != DECL_NAME (friend_decl))
1291                 return false;
1292
1293               /* Now check template parameter list.  */
1294               friend_parms
1295                 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1296                                          args, tf_none);
1297               return comp_template_parms
1298                 (DECL_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (decl_type)),
1299                  friend_parms);
1300             }
1301           else
1302             return (DECL_NAME (decl)
1303                     == DECL_NAME (friend_decl));
1304         }
1305     }
1306   return false;
1307 }
1308
1309 /* Register the specialization SPEC as a specialization of TMPL with
1310    the indicated ARGS.  IS_FRIEND indicates whether the specialization
1311    is actually just a friend declaration.  Returns SPEC, or an
1312    equivalent prior declaration, if available.  */
1313
1314 static tree
1315 register_specialization (tree spec, tree tmpl, tree args, bool is_friend,
1316                          hashval_t hash)
1317 {
1318   tree fn;
1319   void **slot = NULL;
1320   spec_entry elt;
1321
1322   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL && DECL_P (spec));
1323
1324   if (TREE_CODE (spec) == FUNCTION_DECL
1325       && uses_template_parms (DECL_TI_ARGS (spec)))
1326     /* This is the FUNCTION_DECL for a partial instantiation.  Don't
1327        register it; we want the corresponding TEMPLATE_DECL instead.
1328        We use `uses_template_parms (DECL_TI_ARGS (spec))' rather than
1329        the more obvious `uses_template_parms (spec)' to avoid problems
1330        with default function arguments.  In particular, given
1331        something like this:
1332
1333           template <class T> void f(T t1, T t = T())
1334
1335        the default argument expression is not substituted for in an
1336        instantiation unless and until it is actually needed.  */
1337     return spec;
1338
1339   if (optimize_specialization_lookup_p (tmpl))
1340     /* We don't put these specializations in the hash table, but we might
1341        want to give an error about a mismatch.  */
1342     fn = retrieve_specialization (tmpl, args, 0);
1343   else
1344     {
1345       elt.tmpl = tmpl;
1346       elt.args = args;
1347       elt.spec = spec;
1348
1349       if (hash == 0)
1350         hash = hash_specialization (&elt);
1351
1352       slot =
1353         htab_find_slot_with_hash (decl_specializations, &elt, hash, INSERT);
1354       if (*slot)
1355         fn = ((spec_entry *) *slot)->spec;
1356       else
1357         fn = NULL_TREE;
1358     }
1359
1360   /* We can sometimes try to re-register a specialization that we've
1361      already got.  In particular, regenerate_decl_from_template calls
1362      duplicate_decls which will update the specialization list.  But,
1363      we'll still get called again here anyhow.  It's more convenient
1364      to simply allow this than to try to prevent it.  */
1365   if (fn == spec)
1366     return spec;
1367   else if (fn && DECL_TEMPLATE_SPECIALIZATION (spec))
1368     {
1369       if (DECL_TEMPLATE_INSTANTIATION (fn))
1370         {
1371           if (DECL_ODR_USED (fn)
1372               || DECL_EXPLICIT_INSTANTIATION (fn))
1373             {
1374               error ("specialization of %qD after instantiation",
1375                      fn);
1376               return error_mark_node;
1377             }
1378           else
1379             {
1380               tree clone;
1381               /* This situation should occur only if the first
1382                  specialization is an implicit instantiation, the
1383                  second is an explicit specialization, and the
1384                  implicit instantiation has not yet been used.  That
1385                  situation can occur if we have implicitly
1386                  instantiated a member function and then specialized
1387                  it later.
1388
1389                  We can also wind up here if a friend declaration that
1390                  looked like an instantiation turns out to be a
1391                  specialization:
1392
1393                    template <class T> void foo(T);
1394                    class S { friend void foo<>(int) };
1395                    template <> void foo(int);
1396
1397                  We transform the existing DECL in place so that any
1398                  pointers to it become pointers to the updated
1399                  declaration.
1400
1401                  If there was a definition for the template, but not
1402                  for the specialization, we want this to look as if
1403                  there were no definition, and vice versa.  */
1404               DECL_INITIAL (fn) = NULL_TREE;
1405               duplicate_decls (spec, fn, is_friend);
1406               /* The call to duplicate_decls will have applied
1407                  [temp.expl.spec]:
1408
1409                    An explicit specialization of a function template
1410                    is inline only if it is explicitly declared to be,
1411                    and independently of whether its function template
1412                    is.
1413
1414                 to the primary function; now copy the inline bits to
1415                 the various clones.  */
1416               FOR_EACH_CLONE (clone, fn)
1417                 {
1418                   DECL_DECLARED_INLINE_P (clone)
1419                     = DECL_DECLARED_INLINE_P (fn);
1420                   DECL_SOURCE_LOCATION (clone)
1421                     = DECL_SOURCE_LOCATION (fn);
1422                 }
1423               check_specialization_namespace (tmpl);
1424
1425               return fn;
1426             }
1427         }
1428       else if (DECL_TEMPLATE_SPECIALIZATION (fn))
1429         {
1430           if (!duplicate_decls (spec, fn, is_friend) && DECL_INITIAL (spec))
1431             /* Dup decl failed, but this is a new definition. Set the
1432                line number so any errors match this new
1433                definition.  */
1434             DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (spec);
1435
1436           return fn;
1437         }
1438     }
1439   else if (fn)
1440     return duplicate_decls (spec, fn, is_friend);
1441
1442   /* A specialization must be declared in the same namespace as the
1443      template it is specializing.  */
1444   if (DECL_TEMPLATE_SPECIALIZATION (spec)
1445       && !check_specialization_namespace (tmpl))
1446     DECL_CONTEXT (spec) = DECL_CONTEXT (tmpl);
1447
1448   if (slot != NULL /* !optimize_specialization_lookup_p (tmpl) */)
1449     {
1450       spec_entry *entry = ggc_alloc_spec_entry ();
1451       gcc_assert (tmpl && args && spec);
1452       *entry = elt;
1453       *slot = entry;
1454       if (TREE_CODE (spec) == FUNCTION_DECL && DECL_NAMESPACE_SCOPE_P (spec)
1455           && PRIMARY_TEMPLATE_P (tmpl)
1456           && DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (tmpl)) == NULL_TREE)
1457         /* TMPL is a forward declaration of a template function; keep a list
1458            of all specializations in case we need to reassign them to a friend
1459            template later in tsubst_friend_function.  */
1460         DECL_TEMPLATE_INSTANTIATIONS (tmpl)
1461           = tree_cons (args, spec, DECL_TEMPLATE_INSTANTIATIONS (tmpl));
1462     }
1463
1464   return spec;
1465 }
1466
1467 /* Returns true iff two spec_entry nodes are equivalent.  Only compares the
1468    TMPL and ARGS members, ignores SPEC.  */
1469
1470 int comparing_specializations;
1471
1472 static int
1473 eq_specializations (const void *p1, const void *p2)
1474 {
1475   const spec_entry *e1 = (const spec_entry *)p1;
1476   const spec_entry *e2 = (const spec_entry *)p2;
1477   int equal;
1478
1479   ++comparing_specializations;
1480   equal = (e1->tmpl == e2->tmpl
1481            && comp_template_args (e1->args, e2->args));
1482   --comparing_specializations;
1483
1484   return equal;
1485 }
1486
1487 /* Returns a hash for a template TMPL and template arguments ARGS.  */
1488
1489 static hashval_t
1490 hash_tmpl_and_args (tree tmpl, tree args)
1491 {
1492   hashval_t val = DECL_UID (tmpl);
1493   return iterative_hash_template_arg (args, val);
1494 }
1495
1496 /* Returns a hash for a spec_entry node based on the TMPL and ARGS members,
1497    ignoring SPEC.  */
1498
1499 static hashval_t
1500 hash_specialization (const void *p)
1501 {
1502   const spec_entry *e = (const spec_entry *)p;
1503   return hash_tmpl_and_args (e->tmpl, e->args);
1504 }
1505
1506 /* Recursively calculate a hash value for a template argument ARG, for use
1507    in the hash tables of template specializations.  */
1508
1509 hashval_t
1510 iterative_hash_template_arg (tree arg, hashval_t val)
1511 {
1512   unsigned HOST_WIDE_INT i;
1513   enum tree_code code;
1514   char tclass;
1515
1516   if (arg == NULL_TREE)
1517     return iterative_hash_object (arg, val);
1518
1519   if (!TYPE_P (arg))
1520     STRIP_NOPS (arg);
1521
1522   if (TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
1523     /* We can get one of these when re-hashing a previous entry in the middle
1524        of substituting into a pack expansion.  Just look through it.  */
1525     arg = ARGUMENT_PACK_SELECT_FROM_PACK (arg);
1526
1527   code = TREE_CODE (arg);
1528   tclass = TREE_CODE_CLASS (code);
1529
1530   val = iterative_hash_object (code, val);
1531
1532   switch (code)
1533     {
1534     case ERROR_MARK:
1535       return val;
1536
1537     case IDENTIFIER_NODE:
1538       return iterative_hash_object (IDENTIFIER_HASH_VALUE (arg), val);
1539
1540     case TREE_VEC:
1541       {
1542         int i, len = TREE_VEC_LENGTH (arg);
1543         for (i = 0; i < len; ++i)
1544           val = iterative_hash_template_arg (TREE_VEC_ELT (arg, i), val);
1545         return val;
1546       }
1547
1548     case TYPE_PACK_EXPANSION:
1549     case EXPR_PACK_EXPANSION:
1550       val = iterative_hash_template_arg (PACK_EXPANSION_PATTERN (arg), val);
1551       return iterative_hash_template_arg (PACK_EXPANSION_EXTRA_ARGS (arg), val);
1552
1553     case TYPE_ARGUMENT_PACK:
1554     case NONTYPE_ARGUMENT_PACK:
1555       return iterative_hash_template_arg (ARGUMENT_PACK_ARGS (arg), val);
1556
1557     case TREE_LIST:
1558       for (; arg; arg = TREE_CHAIN (arg))
1559         val = iterative_hash_template_arg (TREE_VALUE (arg), val);
1560       return val;
1561
1562     case OVERLOAD:
1563       for (; arg; arg = OVL_NEXT (arg))
1564         val = iterative_hash_template_arg (OVL_CURRENT (arg), val);
1565       return val;
1566
1567     case CONSTRUCTOR:
1568       {
1569         tree field, value;
1570         FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (arg), i, field, value)
1571           {
1572             val = iterative_hash_template_arg (field, val);
1573             val = iterative_hash_template_arg (value, val);
1574           }
1575         return val;
1576       }
1577
1578     case PARM_DECL:
1579       if (!DECL_ARTIFICIAL (arg))
1580         {
1581           val = iterative_hash_object (DECL_PARM_INDEX (arg), val);
1582           val = iterative_hash_object (DECL_PARM_LEVEL (arg), val);
1583         }
1584       return iterative_hash_template_arg (TREE_TYPE (arg), val);
1585
1586     case TARGET_EXPR:
1587       return iterative_hash_template_arg (TARGET_EXPR_INITIAL (arg), val);
1588
1589     case PTRMEM_CST:
1590       val = iterative_hash_template_arg (PTRMEM_CST_CLASS (arg), val);
1591       return iterative_hash_template_arg (PTRMEM_CST_MEMBER (arg), val);
1592
1593     case TEMPLATE_PARM_INDEX:
1594       val = iterative_hash_template_arg
1595         (TREE_TYPE (TEMPLATE_PARM_DECL (arg)), val);
1596       val = iterative_hash_object (TEMPLATE_PARM_LEVEL (arg), val);
1597       return iterative_hash_object (TEMPLATE_PARM_IDX (arg), val);
1598
1599     case TRAIT_EXPR:
1600       val = iterative_hash_object (TRAIT_EXPR_KIND (arg), val);
1601       val = iterative_hash_template_arg (TRAIT_EXPR_TYPE1 (arg), val);
1602       return iterative_hash_template_arg (TRAIT_EXPR_TYPE2 (arg), val);
1603
1604     case BASELINK:
1605       val = iterative_hash_template_arg (BINFO_TYPE (BASELINK_BINFO (arg)),
1606                                          val);
1607       return iterative_hash_template_arg (DECL_NAME (get_first_fn (arg)),
1608                                           val);
1609
1610     case MODOP_EXPR:
1611       val = iterative_hash_template_arg (TREE_OPERAND (arg, 0), val);
1612       code = TREE_CODE (TREE_OPERAND (arg, 1));
1613       val = iterative_hash_object (code, val);
1614       return iterative_hash_template_arg (TREE_OPERAND (arg, 2), val);
1615
1616     case LAMBDA_EXPR:
1617       /* A lambda can't appear in a template arg, but don't crash on
1618          erroneous input.  */
1619       gcc_assert (seen_error ());
1620       return val;
1621
1622     case CAST_EXPR:
1623     case IMPLICIT_CONV_EXPR:
1624     case STATIC_CAST_EXPR:
1625     case REINTERPRET_CAST_EXPR:
1626     case CONST_CAST_EXPR:
1627     case DYNAMIC_CAST_EXPR:
1628     case NEW_EXPR:
1629       val = iterative_hash_template_arg (TREE_TYPE (arg), val);
1630       /* Now hash operands as usual.  */
1631       break;
1632
1633     default:
1634       break;
1635     }
1636
1637   switch (tclass)
1638     {
1639     case tcc_type:
1640       if (TYPE_CANONICAL (arg))
1641         return iterative_hash_object (TYPE_HASH (TYPE_CANONICAL (arg)),
1642                                       val);
1643       else if (TREE_CODE (arg) == DECLTYPE_TYPE)
1644         return iterative_hash_template_arg (DECLTYPE_TYPE_EXPR (arg), val);
1645       /* Otherwise just compare the types during lookup.  */
1646       return val;
1647
1648     case tcc_declaration:
1649     case tcc_constant:
1650       return iterative_hash_expr (arg, val);
1651
1652     default:
1653       gcc_assert (IS_EXPR_CODE_CLASS (tclass));
1654       {
1655         unsigned n = cp_tree_operand_length (arg);
1656         for (i = 0; i < n; ++i)
1657           val = iterative_hash_template_arg (TREE_OPERAND (arg, i), val);
1658         return val;
1659       }
1660     }
1661   gcc_unreachable ();
1662   return 0;
1663 }
1664
1665 /* Unregister the specialization SPEC as a specialization of TMPL.
1666    Replace it with NEW_SPEC, if NEW_SPEC is non-NULL.  Returns true
1667    if the SPEC was listed as a specialization of TMPL.
1668
1669    Note that SPEC has been ggc_freed, so we can't look inside it.  */
1670
1671 bool
1672 reregister_specialization (tree spec, tree tinfo, tree new_spec)
1673 {
1674   spec_entry *entry;
1675   spec_entry elt;
1676
1677   elt.tmpl = most_general_template (TI_TEMPLATE (tinfo));
1678   elt.args = TI_ARGS (tinfo);
1679   elt.spec = NULL_TREE;
1680
1681   entry = (spec_entry *) htab_find (decl_specializations, &elt);
1682   if (entry != NULL)
1683     {
1684       gcc_assert (entry->spec == spec || entry->spec == new_spec);
1685       gcc_assert (new_spec != NULL_TREE);
1686       entry->spec = new_spec;
1687       return 1;
1688     }
1689
1690   return 0;
1691 }
1692
1693 /* Like register_specialization, but for local declarations.  We are
1694    registering SPEC, an instantiation of TMPL.  */
1695
1696 static void
1697 register_local_specialization (tree spec, tree tmpl)
1698 {
1699   void **slot;
1700
1701   slot = pointer_map_insert (local_specializations, tmpl);
1702   *slot = spec;
1703 }
1704
1705 /* TYPE is a class type.  Returns true if TYPE is an explicitly
1706    specialized class.  */
1707
1708 bool
1709 explicit_class_specialization_p (tree type)
1710 {
1711   if (!CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
1712     return false;
1713   return !uses_template_parms (CLASSTYPE_TI_ARGS (type));
1714 }
1715
1716 /* Print the list of functions at FNS, going through all the overloads
1717    for each element of the list.  Alternatively, FNS can not be a
1718    TREE_LIST, in which case it will be printed together with all the
1719    overloads.
1720
1721    MORE and *STR should respectively be FALSE and NULL when the function
1722    is called from the outside.  They are used internally on recursive
1723    calls.  print_candidates manages the two parameters and leaves NULL
1724    in *STR when it ends.  */
1725
1726 static void
1727 print_candidates_1 (tree fns, bool more, const char **str)
1728 {
1729   tree fn, fn2;
1730   char *spaces = NULL;
1731
1732   for (fn = fns; fn; fn = OVL_NEXT (fn))
1733     if (TREE_CODE (fn) == TREE_LIST)
1734       {
1735         for (fn2 = fn; fn2 != NULL_TREE; fn2 = TREE_CHAIN (fn2))
1736           print_candidates_1 (TREE_VALUE (fn2),
1737                               TREE_CHAIN (fn2) || more, str);
1738       }
1739     else
1740       {
1741         tree cand = OVL_CURRENT (fn);
1742         if (!*str)
1743           {
1744             /* Pick the prefix string.  */
1745             if (!more && !OVL_NEXT (fns))
1746               {
1747                 inform (DECL_SOURCE_LOCATION (cand),
1748                         "candidate is: %#D", cand);
1749                 continue;
1750               }
1751
1752             *str = _("candidates are:");
1753             spaces = get_spaces (*str);
1754           }
1755         inform (DECL_SOURCE_LOCATION (cand), "%s %#D", *str, cand);
1756         *str = spaces ? spaces : *str;
1757       }
1758
1759   if (!more)
1760     {
1761       free (spaces);
1762       *str = NULL;
1763     }
1764 }
1765
1766 /* Print the list of candidate FNS in an error message.  FNS can also
1767    be a TREE_LIST of non-functions in the case of an ambiguous lookup.  */
1768
1769 void
1770 print_candidates (tree fns)
1771 {
1772   const char *str = NULL;
1773   print_candidates_1 (fns, false, &str);
1774   gcc_assert (str == NULL);
1775 }
1776
1777 /* Returns the template (one of the functions given by TEMPLATE_ID)
1778    which can be specialized to match the indicated DECL with the
1779    explicit template args given in TEMPLATE_ID.  The DECL may be
1780    NULL_TREE if none is available.  In that case, the functions in
1781    TEMPLATE_ID are non-members.
1782
1783    If NEED_MEMBER_TEMPLATE is nonzero the function is known to be a
1784    specialization of a member template.
1785
1786    The TEMPLATE_COUNT is the number of references to qualifying
1787    template classes that appeared in the name of the function. See
1788    check_explicit_specialization for a more accurate description.
1789
1790    TSK indicates what kind of template declaration (if any) is being
1791    declared.  TSK_TEMPLATE indicates that the declaration given by
1792    DECL, though a FUNCTION_DECL, has template parameters, and is
1793    therefore a template function.
1794
1795    The template args (those explicitly specified and those deduced)
1796    are output in a newly created vector *TARGS_OUT.
1797
1798    If it is impossible to determine the result, an error message is
1799    issued.  The error_mark_node is returned to indicate failure.  */
1800
1801 static tree
1802 determine_specialization (tree template_id,
1803                           tree decl,
1804                           tree* targs_out,
1805                           int need_member_template,
1806                           int template_count,
1807                           tmpl_spec_kind tsk)
1808 {
1809   tree fns;
1810   tree targs;
1811   tree explicit_targs;
1812   tree candidates = NULL_TREE;
1813   /* A TREE_LIST of templates of which DECL may be a specialization.
1814      The TREE_VALUE of each node is a TEMPLATE_DECL.  The
1815      corresponding TREE_PURPOSE is the set of template arguments that,
1816      when used to instantiate the template, would produce a function
1817      with the signature of DECL.  */
1818   tree templates = NULL_TREE;
1819   int header_count;
1820   cp_binding_level *b;
1821
1822   *targs_out = NULL_TREE;
1823
1824   if (template_id == error_mark_node || decl == error_mark_node)
1825     return error_mark_node;
1826
1827   /* We shouldn't be specializing a member template of an
1828      unspecialized class template; we already gave an error in
1829      check_specialization_scope, now avoid crashing.  */
1830   if (template_count && DECL_CLASS_SCOPE_P (decl)
1831       && template_class_depth (DECL_CONTEXT (decl)) > 0)
1832     {
1833       gcc_assert (errorcount);
1834       return error_mark_node;
1835     }
1836
1837   fns = TREE_OPERAND (template_id, 0);
1838   explicit_targs = TREE_OPERAND (template_id, 1);
1839
1840   if (fns == error_mark_node)
1841     return error_mark_node;
1842
1843   /* Check for baselinks.  */
1844   if (BASELINK_P (fns))
1845     fns = BASELINK_FUNCTIONS (fns);
1846
1847   if (!is_overloaded_fn (fns))
1848     {
1849       error ("%qD is not a function template", fns);
1850       return error_mark_node;
1851     }
1852
1853   /* Count the number of template headers specified for this
1854      specialization.  */
1855   header_count = 0;
1856   for (b = current_binding_level;
1857        b->kind == sk_template_parms;
1858        b = b->level_chain)
1859     ++header_count;
1860
1861   for (; fns; fns = OVL_NEXT (fns))
1862     {
1863       tree fn = OVL_CURRENT (fns);
1864
1865       if (TREE_CODE (fn) == TEMPLATE_DECL)
1866         {
1867           tree decl_arg_types;
1868           tree fn_arg_types;
1869           tree insttype;
1870
1871           /* In case of explicit specialization, we need to check if
1872              the number of template headers appearing in the specialization
1873              is correct. This is usually done in check_explicit_specialization,
1874              but the check done there cannot be exhaustive when specializing
1875              member functions. Consider the following code:
1876
1877              template <> void A<int>::f(int);
1878              template <> template <> void A<int>::f(int);
1879
1880              Assuming that A<int> is not itself an explicit specialization
1881              already, the first line specializes "f" which is a non-template
1882              member function, whilst the second line specializes "f" which
1883              is a template member function. So both lines are syntactically
1884              correct, and check_explicit_specialization does not reject
1885              them.
1886
1887              Here, we can do better, as we are matching the specialization
1888              against the declarations. We count the number of template
1889              headers, and we check if they match TEMPLATE_COUNT + 1
1890              (TEMPLATE_COUNT is the number of qualifying template classes,
1891              plus there must be another header for the member template
1892              itself).
1893
1894              Notice that if header_count is zero, this is not a
1895              specialization but rather a template instantiation, so there
1896              is no check we can perform here.  */
1897           if (header_count && header_count != template_count + 1)
1898             continue;
1899
1900           /* Check that the number of template arguments at the
1901              innermost level for DECL is the same as for FN.  */
1902           if (current_binding_level->kind == sk_template_parms
1903               && !current_binding_level->explicit_spec_p
1904               && (TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (fn))
1905                   != TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS
1906                                       (current_template_parms))))
1907             continue;
1908
1909           /* DECL might be a specialization of FN.  */
1910           decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1911           fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
1912
1913           /* For a non-static member function, we need to make sure
1914              that the const qualification is the same.  Since
1915              get_bindings does not try to merge the "this" parameter,
1916              we must do the comparison explicitly.  */
1917           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1918               && !same_type_p (TREE_VALUE (fn_arg_types),
1919                                TREE_VALUE (decl_arg_types)))
1920             continue;
1921
1922           /* Skip the "this" parameter and, for constructors of
1923              classes with virtual bases, the VTT parameter.  A
1924              full specialization of a constructor will have a VTT
1925              parameter, but a template never will.  */ 
1926           decl_arg_types 
1927             = skip_artificial_parms_for (decl, decl_arg_types);
1928           fn_arg_types 
1929             = skip_artificial_parms_for (fn, fn_arg_types);
1930
1931           /* Function templates cannot be specializations; there are
1932              no partial specializations of functions.  Therefore, if
1933              the type of DECL does not match FN, there is no
1934              match.  */
1935           if (tsk == tsk_template)
1936             {
1937               if (compparms (fn_arg_types, decl_arg_types))
1938                 candidates = tree_cons (NULL_TREE, fn, candidates);
1939               continue;
1940             }
1941
1942           /* See whether this function might be a specialization of this
1943              template.  Suppress access control because we might be trying
1944              to make this specialization a friend, and we have already done
1945              access control for the declaration of the specialization.  */
1946           push_deferring_access_checks (dk_no_check);
1947           targs = get_bindings (fn, decl, explicit_targs, /*check_ret=*/true);
1948           pop_deferring_access_checks ();
1949
1950           if (!targs)
1951             /* We cannot deduce template arguments that when used to
1952                specialize TMPL will produce DECL.  */
1953             continue;
1954
1955           /* Make sure that the deduced arguments actually work.  */
1956           insttype = tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE);
1957           if (insttype == error_mark_node)
1958             continue;
1959           fn_arg_types
1960             = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (insttype));
1961           if (!compparms (fn_arg_types, decl_arg_types))
1962             continue;
1963
1964           /* Save this template, and the arguments deduced.  */
1965           templates = tree_cons (targs, fn, templates);
1966         }
1967       else if (need_member_template)
1968         /* FN is an ordinary member function, and we need a
1969            specialization of a member template.  */
1970         ;
1971       else if (TREE_CODE (fn) != FUNCTION_DECL)
1972         /* We can get IDENTIFIER_NODEs here in certain erroneous
1973            cases.  */
1974         ;
1975       else if (!DECL_FUNCTION_MEMBER_P (fn))
1976         /* This is just an ordinary non-member function.  Nothing can
1977            be a specialization of that.  */
1978         ;
1979       else if (DECL_ARTIFICIAL (fn))
1980         /* Cannot specialize functions that are created implicitly.  */
1981         ;
1982       else
1983         {
1984           tree decl_arg_types;
1985
1986           /* This is an ordinary member function.  However, since
1987              we're here, we can assume it's enclosing class is a
1988              template class.  For example,
1989
1990                template <typename T> struct S { void f(); };
1991                template <> void S<int>::f() {}
1992
1993              Here, S<int>::f is a non-template, but S<int> is a
1994              template class.  If FN has the same type as DECL, we
1995              might be in business.  */
1996
1997           if (!DECL_TEMPLATE_INFO (fn))
1998             /* Its enclosing class is an explicit specialization
1999                of a template class.  This is not a candidate.  */
2000             continue;
2001
2002           if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
2003                             TREE_TYPE (TREE_TYPE (fn))))
2004             /* The return types differ.  */
2005             continue;
2006
2007           /* Adjust the type of DECL in case FN is a static member.  */
2008           decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
2009           if (DECL_STATIC_FUNCTION_P (fn)
2010               && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2011             decl_arg_types = TREE_CHAIN (decl_arg_types);
2012
2013           if (compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
2014                          decl_arg_types))
2015             /* They match!  */
2016             candidates = tree_cons (NULL_TREE, fn, candidates);
2017         }
2018     }
2019
2020   if (templates && TREE_CHAIN (templates))
2021     {
2022       /* We have:
2023
2024            [temp.expl.spec]
2025
2026            It is possible for a specialization with a given function
2027            signature to be instantiated from more than one function
2028            template.  In such cases, explicit specification of the
2029            template arguments must be used to uniquely identify the
2030            function template specialization being specialized.
2031
2032          Note that here, there's no suggestion that we're supposed to
2033          determine which of the candidate templates is most
2034          specialized.  However, we, also have:
2035
2036            [temp.func.order]
2037
2038            Partial ordering of overloaded function template
2039            declarations is used in the following contexts to select
2040            the function template to which a function template
2041            specialization refers:
2042
2043            -- when an explicit specialization refers to a function
2044               template.
2045
2046          So, we do use the partial ordering rules, at least for now.
2047          This extension can only serve to make invalid programs valid,
2048          so it's safe.  And, there is strong anecdotal evidence that
2049          the committee intended the partial ordering rules to apply;
2050          the EDG front end has that behavior, and John Spicer claims
2051          that the committee simply forgot to delete the wording in
2052          [temp.expl.spec].  */
2053       tree tmpl = most_specialized_instantiation (templates);
2054       if (tmpl != error_mark_node)
2055         {
2056           templates = tmpl;
2057           TREE_CHAIN (templates) = NULL_TREE;
2058         }
2059     }
2060
2061   if (templates == NULL_TREE && candidates == NULL_TREE)
2062     {
2063       error ("template-id %qD for %q+D does not match any template "
2064              "declaration", template_id, decl);
2065       if (header_count && header_count != template_count + 1)
2066         inform (input_location, "saw %d %<template<>%>, need %d for "
2067                 "specializing a member function template",
2068                 header_count, template_count + 1);
2069       return error_mark_node;
2070     }
2071   else if ((templates && TREE_CHAIN (templates))
2072            || (candidates && TREE_CHAIN (candidates))
2073            || (templates && candidates))
2074     {
2075       error ("ambiguous template specialization %qD for %q+D",
2076              template_id, decl);
2077       candidates = chainon (candidates, templates);
2078       print_candidates (candidates);
2079       return error_mark_node;
2080     }
2081
2082   /* We have one, and exactly one, match.  */
2083   if (candidates)
2084     {
2085       tree fn = TREE_VALUE (candidates);
2086       *targs_out = copy_node (DECL_TI_ARGS (fn));
2087       /* DECL is a re-declaration or partial instantiation of a template
2088          function.  */
2089       if (TREE_CODE (fn) == TEMPLATE_DECL)
2090         return fn;
2091       /* It was a specialization of an ordinary member function in a
2092          template class.  */
2093       return DECL_TI_TEMPLATE (fn);
2094     }
2095
2096   /* It was a specialization of a template.  */
2097   targs = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (TREE_VALUE (templates)));
2098   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (targs))
2099     {
2100       *targs_out = copy_node (targs);
2101       SET_TMPL_ARGS_LEVEL (*targs_out,
2102                            TMPL_ARGS_DEPTH (*targs_out),
2103                            TREE_PURPOSE (templates));
2104     }
2105   else
2106     *targs_out = TREE_PURPOSE (templates);
2107   return TREE_VALUE (templates);
2108 }
2109
2110 /* Returns a chain of parameter types, exactly like the SPEC_TYPES,
2111    but with the default argument values filled in from those in the
2112    TMPL_TYPES.  */
2113
2114 static tree
2115 copy_default_args_to_explicit_spec_1 (tree spec_types,
2116                                       tree tmpl_types)
2117 {
2118   tree new_spec_types;
2119
2120   if (!spec_types)
2121     return NULL_TREE;
2122
2123   if (spec_types == void_list_node)
2124     return void_list_node;
2125
2126   /* Substitute into the rest of the list.  */
2127   new_spec_types =
2128     copy_default_args_to_explicit_spec_1 (TREE_CHAIN (spec_types),
2129                                           TREE_CHAIN (tmpl_types));
2130
2131   /* Add the default argument for this parameter.  */
2132   return hash_tree_cons (TREE_PURPOSE (tmpl_types),
2133                          TREE_VALUE (spec_types),
2134                          new_spec_types);
2135 }
2136
2137 /* DECL is an explicit specialization.  Replicate default arguments
2138    from the template it specializes.  (That way, code like:
2139
2140      template <class T> void f(T = 3);
2141      template <> void f(double);
2142      void g () { f (); }
2143
2144    works, as required.)  An alternative approach would be to look up
2145    the correct default arguments at the call-site, but this approach
2146    is consistent with how implicit instantiations are handled.  */
2147
2148 static void
2149 copy_default_args_to_explicit_spec (tree decl)
2150 {
2151   tree tmpl;
2152   tree spec_types;
2153   tree tmpl_types;
2154   tree new_spec_types;
2155   tree old_type;
2156   tree new_type;
2157   tree t;
2158   tree object_type = NULL_TREE;
2159   tree in_charge = NULL_TREE;
2160   tree vtt = NULL_TREE;
2161
2162   /* See if there's anything we need to do.  */
2163   tmpl = DECL_TI_TEMPLATE (decl);
2164   tmpl_types = TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (tmpl)));
2165   for (t = tmpl_types; t; t = TREE_CHAIN (t))
2166     if (TREE_PURPOSE (t))
2167       break;
2168   if (!t)
2169     return;
2170
2171   old_type = TREE_TYPE (decl);
2172   spec_types = TYPE_ARG_TYPES (old_type);
2173
2174   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2175     {
2176       /* Remove the this pointer, but remember the object's type for
2177          CV quals.  */
2178       object_type = TREE_TYPE (TREE_VALUE (spec_types));
2179       spec_types = TREE_CHAIN (spec_types);
2180       tmpl_types = TREE_CHAIN (tmpl_types);
2181
2182       if (DECL_HAS_IN_CHARGE_PARM_P (decl))
2183         {
2184           /* DECL may contain more parameters than TMPL due to the extra
2185              in-charge parameter in constructors and destructors.  */
2186           in_charge = spec_types;
2187           spec_types = TREE_CHAIN (spec_types);
2188         }
2189       if (DECL_HAS_VTT_PARM_P (decl))
2190         {
2191           vtt = spec_types;
2192           spec_types = TREE_CHAIN (spec_types);
2193         }
2194     }
2195
2196   /* Compute the merged default arguments.  */
2197   new_spec_types =
2198     copy_default_args_to_explicit_spec_1 (spec_types, tmpl_types);
2199
2200   /* Compute the new FUNCTION_TYPE.  */
2201   if (object_type)
2202     {
2203       if (vtt)
2204         new_spec_types = hash_tree_cons (TREE_PURPOSE (vtt),
2205                                          TREE_VALUE (vtt),
2206                                          new_spec_types);
2207
2208       if (in_charge)
2209         /* Put the in-charge parameter back.  */
2210         new_spec_types = hash_tree_cons (TREE_PURPOSE (in_charge),
2211                                          TREE_VALUE (in_charge),
2212                                          new_spec_types);
2213
2214       new_type = build_method_type_directly (object_type,
2215                                              TREE_TYPE (old_type),
2216                                              new_spec_types);
2217     }
2218   else
2219     new_type = build_function_type (TREE_TYPE (old_type),
2220                                     new_spec_types);
2221   new_type = cp_build_type_attribute_variant (new_type,
2222                                               TYPE_ATTRIBUTES (old_type));
2223   new_type = build_exception_variant (new_type,
2224                                       TYPE_RAISES_EXCEPTIONS (old_type));
2225   TREE_TYPE (decl) = new_type;
2226 }
2227
2228 /* Return the number of template headers we expect to see for a definition
2229    or specialization of CTYPE or one of its non-template members.  */
2230
2231 int
2232 num_template_headers_for_class (tree ctype)
2233 {
2234   int num_templates = 0;
2235
2236   while (ctype && CLASS_TYPE_P (ctype))
2237     {
2238       /* You're supposed to have one `template <...>' for every
2239          template class, but you don't need one for a full
2240          specialization.  For example:
2241
2242          template <class T> struct S{};
2243          template <> struct S<int> { void f(); };
2244          void S<int>::f () {}
2245
2246          is correct; there shouldn't be a `template <>' for the
2247          definition of `S<int>::f'.  */
2248       if (!CLASSTYPE_TEMPLATE_INFO (ctype))
2249         /* If CTYPE does not have template information of any
2250            kind,  then it is not a template, nor is it nested
2251            within a template.  */
2252         break;
2253       if (explicit_class_specialization_p (ctype))
2254         break;
2255       if (PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (ctype)))
2256         ++num_templates;
2257
2258       ctype = TYPE_CONTEXT (ctype);
2259     }
2260
2261   return num_templates;
2262 }
2263
2264 /* Do a simple sanity check on the template headers that precede the
2265    variable declaration DECL.  */
2266
2267 void
2268 check_template_variable (tree decl)
2269 {
2270   tree ctx = CP_DECL_CONTEXT (decl);
2271   int wanted = num_template_headers_for_class (ctx);
2272   if (!TYPE_P (ctx) || !CLASSTYPE_TEMPLATE_INFO (ctx))
2273     permerror (DECL_SOURCE_LOCATION (decl),
2274                "%qD is not a static data member of a class template", decl);
2275   else if (template_header_count > wanted)
2276     {
2277       pedwarn (DECL_SOURCE_LOCATION (decl), 0,
2278                "too many template headers for %D (should be %d)",
2279                decl, wanted);
2280       if (CLASSTYPE_TEMPLATE_SPECIALIZATION (ctx))
2281         inform (DECL_SOURCE_LOCATION (decl),
2282                 "members of an explicitly specialized class are defined "
2283                 "without a template header");
2284     }
2285 }
2286
2287 /* Check to see if the function just declared, as indicated in
2288    DECLARATOR, and in DECL, is a specialization of a function
2289    template.  We may also discover that the declaration is an explicit
2290    instantiation at this point.
2291
2292    Returns DECL, or an equivalent declaration that should be used
2293    instead if all goes well.  Issues an error message if something is
2294    amiss.  Returns error_mark_node if the error is not easily
2295    recoverable.
2296
2297    FLAGS is a bitmask consisting of the following flags:
2298
2299    2: The function has a definition.
2300    4: The function is a friend.
2301
2302    The TEMPLATE_COUNT is the number of references to qualifying
2303    template classes that appeared in the name of the function.  For
2304    example, in
2305
2306      template <class T> struct S { void f(); };
2307      void S<int>::f();
2308
2309    the TEMPLATE_COUNT would be 1.  However, explicitly specialized
2310    classes are not counted in the TEMPLATE_COUNT, so that in
2311
2312      template <class T> struct S {};
2313      template <> struct S<int> { void f(); }
2314      template <> void S<int>::f();
2315
2316    the TEMPLATE_COUNT would be 0.  (Note that this declaration is
2317    invalid; there should be no template <>.)
2318
2319    If the function is a specialization, it is marked as such via
2320    DECL_TEMPLATE_SPECIALIZATION.  Furthermore, its DECL_TEMPLATE_INFO
2321    is set up correctly, and it is added to the list of specializations
2322    for that template.  */
2323
2324 tree
2325 check_explicit_specialization (tree declarator,
2326                                tree decl,
2327                                int template_count,
2328                                int flags)
2329 {
2330   int have_def = flags & 2;
2331   int is_friend = flags & 4;
2332   int specialization = 0;
2333   int explicit_instantiation = 0;
2334   int member_specialization = 0;
2335   tree ctype = DECL_CLASS_CONTEXT (decl);
2336   tree dname = DECL_NAME (decl);
2337   tmpl_spec_kind tsk;
2338
2339   if (is_friend)
2340     {
2341       if (!processing_specialization)
2342         tsk = tsk_none;
2343       else
2344         tsk = tsk_excessive_parms;
2345     }
2346   else
2347     tsk = current_tmpl_spec_kind (template_count);
2348
2349   switch (tsk)
2350     {
2351     case tsk_none:
2352       if (processing_specialization)
2353         {
2354           specialization = 1;
2355           SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2356         }
2357       else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
2358         {
2359           if (is_friend)
2360             /* This could be something like:
2361
2362                template <class T> void f(T);
2363                class S { friend void f<>(int); }  */
2364             specialization = 1;
2365           else
2366             {
2367               /* This case handles bogus declarations like template <>
2368                  template <class T> void f<int>(); */
2369
2370               error ("template-id %qD in declaration of primary template",
2371                      declarator);
2372               return decl;
2373             }
2374         }
2375       break;
2376
2377     case tsk_invalid_member_spec:
2378       /* The error has already been reported in
2379          check_specialization_scope.  */
2380       return error_mark_node;
2381
2382     case tsk_invalid_expl_inst:
2383       error ("template parameter list used in explicit instantiation");
2384
2385       /* Fall through.  */
2386
2387     case tsk_expl_inst:
2388       if (have_def)
2389         error ("definition provided for explicit instantiation");
2390
2391       explicit_instantiation = 1;
2392       break;
2393
2394     case tsk_excessive_parms:
2395     case tsk_insufficient_parms:
2396       if (tsk == tsk_excessive_parms)
2397         error ("too many template parameter lists in declaration of %qD",
2398                decl);
2399       else if (template_header_count)
2400         error("too few template parameter lists in declaration of %qD", decl);
2401       else
2402         error("explicit specialization of %qD must be introduced by "
2403               "%<template <>%>", decl);
2404
2405       /* Fall through.  */
2406     case tsk_expl_spec:
2407       SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2408       if (ctype)
2409         member_specialization = 1;
2410       else
2411         specialization = 1;
2412       break;
2413
2414     case tsk_template:
2415       if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
2416         {
2417           /* This case handles bogus declarations like template <>
2418              template <class T> void f<int>(); */
2419
2420           if (uses_template_parms (declarator))
2421             error ("function template partial specialization %qD "
2422                    "is not allowed", declarator);
2423           else
2424             error ("template-id %qD in declaration of primary template",
2425                    declarator);
2426           return decl;
2427         }
2428
2429       if (ctype && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype))
2430         /* This is a specialization of a member template, without
2431            specialization the containing class.  Something like:
2432
2433              template <class T> struct S {
2434                template <class U> void f (U);
2435              };
2436              template <> template <class U> void S<int>::f(U) {}
2437
2438            That's a specialization -- but of the entire template.  */
2439         specialization = 1;
2440       break;
2441
2442     default:
2443       gcc_unreachable ();
2444     }
2445
2446   if (specialization || member_specialization)
2447     {
2448       tree t = TYPE_ARG_TYPES (TREE_TYPE (decl));
2449       for (; t; t = TREE_CHAIN (t))
2450         if (TREE_PURPOSE (t))
2451           {
2452             permerror (input_location, 
2453                        "default argument specified in explicit specialization");
2454             break;
2455           }
2456     }
2457
2458   if (specialization || member_specialization || explicit_instantiation)
2459     {
2460       tree tmpl = NULL_TREE;
2461       tree targs = NULL_TREE;
2462
2463       /* Make sure that the declarator is a TEMPLATE_ID_EXPR.  */
2464       if (TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
2465         {
2466           tree fns;
2467
2468           gcc_assert (TREE_CODE (declarator) == IDENTIFIER_NODE);
2469           if (ctype)
2470             fns = dname;
2471           else
2472             {
2473               /* If there is no class context, the explicit instantiation
2474                  must be at namespace scope.  */
2475               gcc_assert (DECL_NAMESPACE_SCOPE_P (decl));
2476
2477               /* Find the namespace binding, using the declaration
2478                  context.  */
2479               fns = lookup_qualified_name (CP_DECL_CONTEXT (decl), dname,
2480                                            false, true);
2481               if (fns == error_mark_node || !is_overloaded_fn (fns))
2482                 {
2483                   error ("%qD is not a template function", dname);
2484                   fns = error_mark_node;
2485                 }
2486               else
2487                 {
2488                   tree fn = OVL_CURRENT (fns);
2489                   if (!is_associated_namespace (CP_DECL_CONTEXT (decl),
2490                                                 CP_DECL_CONTEXT (fn)))
2491                     error ("%qD is not declared in %qD",
2492                            decl, current_namespace);
2493                 }
2494             }
2495
2496           declarator = lookup_template_function (fns, NULL_TREE);
2497         }
2498
2499       if (declarator == error_mark_node)
2500         return error_mark_node;
2501
2502       if (ctype != NULL_TREE && TYPE_BEING_DEFINED (ctype))
2503         {
2504           if (!explicit_instantiation)
2505             /* A specialization in class scope.  This is invalid,
2506                but the error will already have been flagged by
2507                check_specialization_scope.  */
2508             return error_mark_node;
2509           else
2510             {
2511               /* It's not valid to write an explicit instantiation in
2512                  class scope, e.g.:
2513
2514                    class C { template void f(); }
2515
2516                    This case is caught by the parser.  However, on
2517                    something like:
2518
2519                    template class C { void f(); };
2520
2521                    (which is invalid) we can get here.  The error will be
2522                    issued later.  */
2523               ;
2524             }
2525
2526           return decl;
2527         }
2528       else if (ctype != NULL_TREE
2529                && (TREE_CODE (TREE_OPERAND (declarator, 0)) ==
2530                    IDENTIFIER_NODE))
2531         {
2532           /* Find the list of functions in ctype that have the same
2533              name as the declared function.  */
2534           tree name = TREE_OPERAND (declarator, 0);
2535           tree fns = NULL_TREE;
2536           int idx;
2537
2538           if (constructor_name_p (name, ctype))
2539             {
2540               int is_constructor = DECL_CONSTRUCTOR_P (decl);
2541
2542               if (is_constructor ? !TYPE_HAS_USER_CONSTRUCTOR (ctype)
2543                   : !CLASSTYPE_DESTRUCTORS (ctype))
2544                 {
2545                   /* From [temp.expl.spec]:
2546
2547                      If such an explicit specialization for the member
2548                      of a class template names an implicitly-declared
2549                      special member function (clause _special_), the
2550                      program is ill-formed.
2551
2552                      Similar language is found in [temp.explicit].  */
2553                   error ("specialization of implicitly-declared special member function");
2554                   return error_mark_node;
2555                 }
2556
2557               name = is_constructor ? ctor_identifier : dtor_identifier;
2558             }
2559
2560           if (!DECL_CONV_FN_P (decl))
2561             {
2562               idx = lookup_fnfields_1 (ctype, name);
2563               if (idx >= 0)
2564                 fns = (*CLASSTYPE_METHOD_VEC (ctype))[idx];
2565             }
2566           else
2567             {
2568               vec<tree, va_gc> *methods;
2569               tree ovl;
2570
2571               /* For a type-conversion operator, we cannot do a
2572                  name-based lookup.  We might be looking for `operator
2573                  int' which will be a specialization of `operator T'.
2574                  So, we find *all* the conversion operators, and then
2575                  select from them.  */
2576               fns = NULL_TREE;
2577
2578               methods = CLASSTYPE_METHOD_VEC (ctype);
2579               if (methods)
2580                 for (idx = CLASSTYPE_FIRST_CONVERSION_SLOT;
2581                      methods->iterate (idx, &ovl);
2582                      ++idx)
2583                   {
2584                     if (!DECL_CONV_FN_P (OVL_CURRENT (ovl)))
2585                       /* There are no more conversion functions.  */
2586                       break;
2587
2588                     /* Glue all these conversion functions together
2589                        with those we already have.  */
2590                     for (; ovl; ovl = OVL_NEXT (ovl))
2591                       fns = ovl_cons (OVL_CURRENT (ovl), fns);
2592                   }
2593             }
2594
2595           if (fns == NULL_TREE)
2596             {
2597               error ("no member function %qD declared in %qT", name, ctype);
2598               return error_mark_node;
2599             }
2600           else
2601             TREE_OPERAND (declarator, 0) = fns;
2602         }
2603
2604       /* Figure out what exactly is being specialized at this point.
2605          Note that for an explicit instantiation, even one for a
2606          member function, we cannot tell apriori whether the
2607          instantiation is for a member template, or just a member
2608          function of a template class.  Even if a member template is
2609          being instantiated, the member template arguments may be
2610          elided if they can be deduced from the rest of the
2611          declaration.  */
2612       tmpl = determine_specialization (declarator, decl,
2613                                        &targs,
2614                                        member_specialization,
2615                                        template_count,
2616                                        tsk);
2617
2618       if (!tmpl || tmpl == error_mark_node)
2619         /* We couldn't figure out what this declaration was
2620            specializing.  */
2621         return error_mark_node;
2622       else
2623         {
2624           tree gen_tmpl = most_general_template (tmpl);
2625
2626           if (explicit_instantiation)
2627             {
2628               /* We don't set DECL_EXPLICIT_INSTANTIATION here; that
2629                  is done by do_decl_instantiation later.  */
2630
2631               int arg_depth = TMPL_ARGS_DEPTH (targs);
2632               int parm_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
2633
2634               if (arg_depth > parm_depth)
2635                 {
2636                   /* If TMPL is not the most general template (for
2637                      example, if TMPL is a friend template that is
2638                      injected into namespace scope), then there will
2639                      be too many levels of TARGS.  Remove some of them
2640                      here.  */
2641                   int i;
2642                   tree new_targs;
2643
2644                   new_targs = make_tree_vec (parm_depth);
2645                   for (i = arg_depth - parm_depth; i < arg_depth; ++i)
2646                     TREE_VEC_ELT (new_targs, i - (arg_depth - parm_depth))
2647                       = TREE_VEC_ELT (targs, i);
2648                   targs = new_targs;
2649                 }
2650
2651               return instantiate_template (tmpl, targs, tf_error);
2652             }
2653
2654           /* If we thought that the DECL was a member function, but it
2655              turns out to be specializing a static member function,
2656              make DECL a static member function as well.  */
2657           if (DECL_STATIC_FUNCTION_P (tmpl)
2658               && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2659             revert_static_member_fn (decl);
2660
2661           /* If this is a specialization of a member template of a
2662              template class, we want to return the TEMPLATE_DECL, not
2663              the specialization of it.  */
2664           if (tsk == tsk_template)
2665             {
2666               tree result = DECL_TEMPLATE_RESULT (tmpl);
2667               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
2668               DECL_INITIAL (result) = NULL_TREE;
2669               if (have_def)
2670                 {
2671                   tree parm;
2672                   DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
2673                   DECL_SOURCE_LOCATION (result)
2674                     = DECL_SOURCE_LOCATION (decl);
2675                   /* We want to use the argument list specified in the
2676                      definition, not in the original declaration.  */
2677                   DECL_ARGUMENTS (result) = DECL_ARGUMENTS (decl);
2678                   for (parm = DECL_ARGUMENTS (result); parm;
2679                        parm = DECL_CHAIN (parm))
2680                     DECL_CONTEXT (parm) = result;
2681                 }
2682               return register_specialization (tmpl, gen_tmpl, targs,
2683                                               is_friend, 0);
2684             }
2685
2686           /* Set up the DECL_TEMPLATE_INFO for DECL.  */
2687           DECL_TEMPLATE_INFO (decl) = build_template_info (tmpl, targs);
2688
2689           /* Inherit default function arguments from the template
2690              DECL is specializing.  */
2691           copy_default_args_to_explicit_spec (decl);
2692
2693           /* This specialization has the same protection as the
2694              template it specializes.  */
2695           TREE_PRIVATE (decl) = TREE_PRIVATE (gen_tmpl);
2696           TREE_PROTECTED (decl) = TREE_PROTECTED (gen_tmpl);
2697
2698           /* 7.1.1-1 [dcl.stc]
2699
2700              A storage-class-specifier shall not be specified in an
2701              explicit specialization...
2702
2703              The parser rejects these, so unless action is taken here,
2704              explicit function specializations will always appear with
2705              global linkage.
2706
2707              The action recommended by the C++ CWG in response to C++
2708              defect report 605 is to make the storage class and linkage
2709              of the explicit specialization match the templated function:
2710
2711              http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#605
2712            */
2713           if (tsk == tsk_expl_spec && DECL_FUNCTION_TEMPLATE_P (gen_tmpl))
2714             {
2715               tree tmpl_func = DECL_TEMPLATE_RESULT (gen_tmpl);
2716               gcc_assert (TREE_CODE (tmpl_func) == FUNCTION_DECL);
2717
2718               /* This specialization has the same linkage and visibility as
2719                  the function template it specializes.  */
2720               TREE_PUBLIC (decl) = TREE_PUBLIC (tmpl_func);
2721               if (! TREE_PUBLIC (decl))
2722                 {
2723                   DECL_INTERFACE_KNOWN (decl) = 1;
2724                   DECL_NOT_REALLY_EXTERN (decl) = 1;
2725                 }
2726               DECL_THIS_STATIC (decl) = DECL_THIS_STATIC (tmpl_func);
2727               if (DECL_VISIBILITY_SPECIFIED (tmpl_func))
2728                 {
2729                   DECL_VISIBILITY_SPECIFIED (decl) = 1;
2730                   DECL_VISIBILITY (decl) = DECL_VISIBILITY (tmpl_func);
2731                 }
2732             }
2733
2734           /* If DECL is a friend declaration, declared using an
2735              unqualified name, the namespace associated with DECL may
2736              have been set incorrectly.  For example, in:
2737
2738                template <typename T> void f(T);
2739                namespace N {
2740                  struct S { friend void f<int>(int); }
2741                }
2742
2743              we will have set the DECL_CONTEXT for the friend
2744              declaration to N, rather than to the global namespace.  */
2745           if (DECL_NAMESPACE_SCOPE_P (decl))
2746             DECL_CONTEXT (decl) = DECL_CONTEXT (tmpl);
2747
2748           if (is_friend && !have_def)
2749             /* This is not really a declaration of a specialization.
2750                It's just the name of an instantiation.  But, it's not
2751                a request for an instantiation, either.  */
2752             SET_DECL_IMPLICIT_INSTANTIATION (decl);
2753           else if (DECL_CONSTRUCTOR_P (decl) || DECL_DESTRUCTOR_P (decl))
2754             /* This is indeed a specialization.  In case of constructors
2755                and destructors, we need in-charge and not-in-charge
2756                versions in V3 ABI.  */
2757             clone_function_decl (decl, /*update_method_vec_p=*/0);
2758
2759           /* Register this specialization so that we can find it
2760              again.  */
2761           decl = register_specialization (decl, gen_tmpl, targs, is_friend, 0);
2762         }
2763     }
2764
2765   return decl;
2766 }
2767
2768 /* Returns 1 iff PARMS1 and PARMS2 are identical sets of template
2769    parameters.  These are represented in the same format used for
2770    DECL_TEMPLATE_PARMS.  */
2771
2772 int
2773 comp_template_parms (const_tree parms1, const_tree parms2)
2774 {
2775   const_tree p1;
2776   const_tree p2;
2777
2778   if (parms1 == parms2)
2779     return 1;
2780
2781   for (p1 = parms1, p2 = parms2;
2782        p1 != NULL_TREE && p2 != NULL_TREE;
2783        p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2))
2784     {
2785       tree t1 = TREE_VALUE (p1);
2786       tree t2 = TREE_VALUE (p2);
2787       int i;
2788
2789       gcc_assert (TREE_CODE (t1) == TREE_VEC);
2790       gcc_assert (TREE_CODE (t2) == TREE_VEC);
2791
2792       if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
2793         return 0;
2794
2795       for (i = 0; i < TREE_VEC_LENGTH (t2); ++i)
2796         {
2797           tree parm1 = TREE_VALUE (TREE_VEC_ELT (t1, i));
2798           tree parm2 = TREE_VALUE (TREE_VEC_ELT (t2, i));
2799
2800           /* If either of the template parameters are invalid, assume
2801              they match for the sake of error recovery. */
2802           if (parm1 == error_mark_node || parm2 == error_mark_node)
2803             return 1;
2804
2805           if (TREE_CODE (parm1) != TREE_CODE (parm2))
2806             return 0;
2807
2808           if (TREE_CODE (parm1) == TEMPLATE_TYPE_PARM
2809               && (TEMPLATE_TYPE_PARAMETER_PACK (parm1)
2810                   == TEMPLATE_TYPE_PARAMETER_PACK (parm2)))
2811             continue;
2812           else if (!same_type_p (TREE_TYPE (parm1), TREE_TYPE (parm2)))
2813             return 0;
2814         }
2815     }
2816
2817   if ((p1 != NULL_TREE) != (p2 != NULL_TREE))
2818     /* One set of parameters has more parameters lists than the
2819        other.  */
2820     return 0;
2821
2822   return 1;
2823 }
2824
2825 /* Determine whether PARM is a parameter pack.  */
2826
2827 bool 
2828 template_parameter_pack_p (const_tree parm)
2829 {
2830   /* Determine if we have a non-type template parameter pack.  */
2831   if (TREE_CODE (parm) == PARM_DECL)
2832     return (DECL_TEMPLATE_PARM_P (parm) 
2833             && TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)));
2834   if (TREE_CODE (parm) == TEMPLATE_PARM_INDEX)
2835     return TEMPLATE_PARM_PARAMETER_PACK (parm);
2836
2837   /* If this is a list of template parameters, we could get a
2838      TYPE_DECL or a TEMPLATE_DECL.  */ 
2839   if (TREE_CODE (parm) == TYPE_DECL || TREE_CODE (parm) == TEMPLATE_DECL)
2840     parm = TREE_TYPE (parm);
2841
2842   /* Otherwise it must be a type template parameter.  */
2843   return ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
2844            || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM)
2845           && TEMPLATE_TYPE_PARAMETER_PACK (parm));
2846 }
2847
2848 /* Determine if T is a function parameter pack.  */
2849
2850 bool
2851 function_parameter_pack_p (const_tree t)
2852 {
2853   if (t && TREE_CODE (t) == PARM_DECL)
2854     return FUNCTION_PARAMETER_PACK_P (t);
2855   return false;
2856 }
2857
2858 /* Return the function template declaration of PRIMARY_FUNC_TMPL_INST.
2859    PRIMARY_FUNC_TMPL_INST is a primary function template instantiation.  */
2860
2861 tree
2862 get_function_template_decl (const_tree primary_func_tmpl_inst)
2863 {
2864   if (! primary_func_tmpl_inst
2865       || TREE_CODE (primary_func_tmpl_inst) != FUNCTION_DECL
2866       || ! primary_template_instantiation_p (primary_func_tmpl_inst))
2867     return NULL;
2868
2869   return DECL_TEMPLATE_RESULT (DECL_TI_TEMPLATE (primary_func_tmpl_inst));
2870 }
2871
2872 /* Return true iff the function parameter PARAM_DECL was expanded
2873    from the function parameter pack PACK.  */
2874
2875 bool
2876 function_parameter_expanded_from_pack_p (tree param_decl, tree pack)
2877 {
2878   if (DECL_ARTIFICIAL (param_decl)
2879       || !function_parameter_pack_p (pack))
2880     return false;
2881
2882   /* The parameter pack and its pack arguments have the same
2883      DECL_PARM_INDEX.  */
2884   return DECL_PARM_INDEX (pack) == DECL_PARM_INDEX (param_decl);
2885 }
2886
2887 /* Determine whether ARGS describes a variadic template args list,
2888    i.e., one that is terminated by a template argument pack.  */
2889
2890 static bool 
2891 template_args_variadic_p (tree args)
2892 {
2893   int nargs;
2894   tree last_parm;
2895
2896   if (args == NULL_TREE)
2897     return false;
2898
2899   args = INNERMOST_TEMPLATE_ARGS (args);
2900   nargs = TREE_VEC_LENGTH (args);
2901
2902   if (nargs == 0)
2903     return false;
2904
2905   last_parm = TREE_VEC_ELT (args, nargs - 1);
2906
2907   return ARGUMENT_PACK_P (last_parm);
2908 }
2909
2910 /* Generate a new name for the parameter pack name NAME (an
2911    IDENTIFIER_NODE) that incorporates its */
2912
2913 static tree
2914 make_ith_pack_parameter_name (tree name, int i)
2915 {
2916   /* Munge the name to include the parameter index.  */
2917 #define NUMBUF_LEN 128
2918   char numbuf[NUMBUF_LEN];
2919   char* newname;
2920   int newname_len;
2921
2922   if (name == NULL_TREE)
2923     return name;
2924   snprintf (numbuf, NUMBUF_LEN, "%i", i);
2925   newname_len = IDENTIFIER_LENGTH (name)
2926                 + strlen (numbuf) + 2;
2927   newname = (char*)alloca (newname_len);
2928   snprintf (newname, newname_len,
2929             "%s#%i", IDENTIFIER_POINTER (name), i);
2930   return get_identifier (newname);
2931 }
2932
2933 /* Return true if T is a primary function, class or alias template
2934    instantiation.  */
2935
2936 bool
2937 primary_template_instantiation_p (const_tree t)
2938 {
2939   if (!t)
2940     return false;
2941
2942   if (TREE_CODE (t) == FUNCTION_DECL)
2943     return DECL_LANG_SPECIFIC (t)
2944            && DECL_TEMPLATE_INSTANTIATION (t)
2945            && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (t));
2946   else if (CLASS_TYPE_P (t) && !TYPE_DECL_ALIAS_P (TYPE_NAME (t)))
2947     return CLASSTYPE_TEMPLATE_INSTANTIATION (t)
2948            && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t));
2949   else if (alias_template_specialization_p (t))
2950     return true;
2951   return false;
2952 }
2953
2954 /* Return true if PARM is a template template parameter.  */
2955
2956 bool
2957 template_template_parameter_p (const_tree parm)
2958 {
2959   return DECL_TEMPLATE_TEMPLATE_PARM_P (parm);
2960 }
2961
2962 /* Return true iff PARM is a DECL representing a type template
2963    parameter.  */
2964
2965 bool
2966 template_type_parameter_p (const_tree parm)
2967 {
2968   return (parm
2969           && (TREE_CODE (parm) == TYPE_DECL
2970               || TREE_CODE (parm) == TEMPLATE_DECL)
2971           && DECL_TEMPLATE_PARM_P (parm));
2972 }
2973
2974 /* Return the template parameters of T if T is a
2975    primary template instantiation, NULL otherwise.  */
2976
2977 tree
2978 get_primary_template_innermost_parameters (const_tree t)
2979 {
2980   tree parms = NULL, template_info = NULL;
2981
2982   if ((template_info = get_template_info (t))
2983       && primary_template_instantiation_p (t))
2984     parms = INNERMOST_TEMPLATE_PARMS
2985         (DECL_TEMPLATE_PARMS (TI_TEMPLATE (template_info)));
2986
2987   return parms;
2988 }
2989
2990 /* Return the template parameters of the LEVELth level from the full list
2991    of template parameters PARMS.  */
2992
2993 tree
2994 get_template_parms_at_level (tree parms, int level)
2995 {
2996   tree p;
2997   if (!parms
2998       || TREE_CODE (parms) != TREE_LIST
2999       || level > TMPL_PARMS_DEPTH (parms))
3000     return NULL_TREE;
3001
3002   for (p = parms; p; p = TREE_CHAIN (p))
3003     if (TMPL_PARMS_DEPTH (p) == level)
3004       return p;
3005
3006   return NULL_TREE;
3007 }
3008
3009 /* Returns the template arguments of T if T is a template instantiation,
3010    NULL otherwise.  */
3011
3012 tree
3013 get_template_innermost_arguments (const_tree t)
3014 {
3015   tree args = NULL, template_info = NULL;
3016
3017   if ((template_info = get_template_info (t))
3018       && TI_ARGS (template_info))
3019     args = INNERMOST_TEMPLATE_ARGS (TI_ARGS (template_info));
3020
3021   return args;
3022 }
3023
3024 /* Return the argument pack elements of T if T is a template argument pack,
3025    NULL otherwise.  */
3026
3027 tree
3028 get_template_argument_pack_elems (const_tree t)
3029 {
3030   if (TREE_CODE (t) != TYPE_ARGUMENT_PACK
3031       && TREE_CODE (t) != NONTYPE_ARGUMENT_PACK)
3032     return NULL;
3033
3034   return ARGUMENT_PACK_ARGS (t);
3035 }
3036
3037 /* Structure used to track the progress of find_parameter_packs_r.  */
3038 struct find_parameter_pack_data 
3039 {
3040   /* TREE_LIST that will contain all of the parameter packs found by
3041      the traversal.  */
3042   tree* parameter_packs;
3043
3044   /* Set of AST nodes that have been visited by the traversal.  */
3045   struct pointer_set_t *visited;
3046 };
3047
3048 /* Identifies all of the argument packs that occur in a template
3049    argument and appends them to the TREE_LIST inside DATA, which is a
3050    find_parameter_pack_data structure. This is a subroutine of
3051    make_pack_expansion and uses_parameter_packs.  */
3052 static tree
3053 find_parameter_packs_r (tree *tp, int *walk_subtrees, void* data)
3054 {
3055   tree t = *tp;
3056   struct find_parameter_pack_data* ppd = 
3057     (struct find_parameter_pack_data*)data;
3058   bool parameter_pack_p = false;
3059
3060   /* Handle type aliases/typedefs.  */
3061   if (TYPE_P (t)
3062       && TYPE_NAME (t)
3063       && TREE_CODE (TYPE_NAME (t)) == TYPE_DECL
3064       && TYPE_DECL_ALIAS_P (TYPE_NAME (t)))
3065     {
3066       if (TYPE_TEMPLATE_INFO (t))
3067         cp_walk_tree (&TYPE_TI_ARGS (t),
3068                       &find_parameter_packs_r,
3069                       ppd, ppd->visited);
3070       *walk_subtrees = 0;
3071       return NULL_TREE;
3072     }
3073
3074   /* Identify whether this is a parameter pack or not.  */
3075   switch (TREE_CODE (t))
3076     {
3077     case TEMPLATE_PARM_INDEX:
3078       if (TEMPLATE_PARM_PARAMETER_PACK (t))
3079         parameter_pack_p = true;
3080       break;
3081
3082     case TEMPLATE_TYPE_PARM:
3083       t = TYPE_MAIN_VARIANT (t);
3084     case TEMPLATE_TEMPLATE_PARM:
3085       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
3086         parameter_pack_p = true;
3087       break;
3088
3089     case PARM_DECL:
3090       if (FUNCTION_PARAMETER_PACK_P (t))
3091         {
3092           /* We don't want to walk into the type of a PARM_DECL,
3093              because we don't want to see the type parameter pack.  */
3094           *walk_subtrees = 0;
3095           parameter_pack_p = true;
3096         }
3097       break;
3098
3099     case BASES:
3100       parameter_pack_p = true;
3101       break;
3102     default:
3103       /* Not a parameter pack.  */
3104       break;
3105     }
3106
3107   if (parameter_pack_p)
3108     {
3109       /* Add this parameter pack to the list.  */
3110       *ppd->parameter_packs = tree_cons (NULL_TREE, t, *ppd->parameter_packs);
3111     }
3112
3113   if (TYPE_P (t))
3114     cp_walk_tree (&TYPE_CONTEXT (t), 
3115                   &find_parameter_packs_r, ppd, ppd->visited);
3116
3117   /* This switch statement will return immediately if we don't find a
3118      parameter pack.  */
3119   switch (TREE_CODE (t)) 
3120     {
3121     case TEMPLATE_PARM_INDEX:
3122       return NULL_TREE;
3123
3124     case BOUND_TEMPLATE_TEMPLATE_PARM:
3125       /* Check the template itself.  */
3126       cp_walk_tree (&TREE_TYPE (TYPE_TI_TEMPLATE (t)), 
3127                     &find_parameter_packs_r, ppd, ppd->visited);
3128       /* Check the template arguments.  */
3129       cp_walk_tree (&TYPE_TI_ARGS (t), &find_parameter_packs_r, ppd, 
3130                     ppd->visited);
3131       *walk_subtrees = 0;
3132       return NULL_TREE;
3133
3134     case TEMPLATE_TYPE_PARM:
3135     case TEMPLATE_TEMPLATE_PARM:
3136       return NULL_TREE;
3137
3138     case PARM_DECL:
3139       return NULL_TREE;
3140
3141     case RECORD_TYPE:
3142       if (TYPE_PTRMEMFUNC_P (t))
3143         return NULL_TREE;
3144       /* Fall through.  */
3145
3146     case UNION_TYPE:
3147     case ENUMERAL_TYPE:
3148       if (TYPE_TEMPLATE_INFO (t))
3149         cp_walk_tree (&TI_ARGS (TYPE_TEMPLATE_INFO (t)),
3150                       &find_parameter_packs_r, ppd, ppd->visited);
3151
3152       *walk_subtrees = 0;
3153       return NULL_TREE;
3154
3155     case CONSTRUCTOR:
3156     case TEMPLATE_DECL:
3157       cp_walk_tree (&TREE_TYPE (t),
3158                     &find_parameter_packs_r, ppd, ppd->visited);
3159       return NULL_TREE;
3160  
3161     case TYPENAME_TYPE:
3162       cp_walk_tree (&TYPENAME_TYPE_FULLNAME (t), &find_parameter_packs_r,
3163                    ppd, ppd->visited);
3164       *walk_subtrees = 0;
3165       return NULL_TREE;
3166       
3167     case TYPE_PACK_EXPANSION:
3168     case EXPR_PACK_EXPANSION:
3169       *walk_subtrees = 0;
3170       return NULL_TREE;
3171
3172     case INTEGER_TYPE:
3173       cp_walk_tree (&TYPE_MAX_VALUE (t), &find_parameter_packs_r, 
3174                     ppd, ppd->visited);
3175       *walk_subtrees = 0;
3176       return NULL_TREE;
3177
3178     case IDENTIFIER_NODE:
3179       cp_walk_tree (&TREE_TYPE (t), &find_parameter_packs_r, ppd, 
3180                     ppd->visited);
3181       *walk_subtrees = 0;
3182       return NULL_TREE;
3183
3184     default:
3185       return NULL_TREE;
3186     }
3187
3188   return NULL_TREE;
3189 }
3190
3191 /* Determines if the expression or type T uses any parameter packs.  */
3192 bool
3193 uses_parameter_packs (tree t)
3194 {
3195   tree parameter_packs = NULL_TREE;
3196   struct find_parameter_pack_data ppd;
3197   ppd.parameter_packs = &parameter_packs;
3198   ppd.visited = pointer_set_create ();
3199   cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
3200   pointer_set_destroy (ppd.visited);
3201   return parameter_packs != NULL_TREE;
3202 }
3203
3204 /* Turn ARG, which may be an expression, type, or a TREE_LIST
3205    representation a base-class initializer into a parameter pack
3206    expansion. If all goes well, the resulting node will be an
3207    EXPR_PACK_EXPANSION, TYPE_PACK_EXPANSION, or TREE_LIST,
3208    respectively.  */
3209 tree 
3210 make_pack_expansion (tree arg)
3211 {
3212   tree result;
3213   tree parameter_packs = NULL_TREE;
3214   bool for_types = false;
3215   struct find_parameter_pack_data ppd;
3216
3217   if (!arg || arg == error_mark_node)
3218     return arg;
3219
3220   if (TREE_CODE (arg) == TREE_LIST)
3221     {
3222       /* The only time we will see a TREE_LIST here is for a base
3223          class initializer.  In this case, the TREE_PURPOSE will be a
3224          _TYPE node (representing the base class expansion we're
3225          initializing) and the TREE_VALUE will be a TREE_LIST
3226          containing the initialization arguments. 
3227
3228          The resulting expansion looks somewhat different from most
3229          expansions. Rather than returning just one _EXPANSION, we
3230          return a TREE_LIST whose TREE_PURPOSE is a
3231          TYPE_PACK_EXPANSION containing the bases that will be
3232          initialized.  The TREE_VALUE will be identical to the
3233          original TREE_VALUE, which is a list of arguments that will
3234          be passed to each base.  We do not introduce any new pack
3235          expansion nodes into the TREE_VALUE (although it is possible
3236          that some already exist), because the TREE_PURPOSE and
3237          TREE_VALUE all need to be expanded together with the same
3238          _EXPANSION node.  Note that the TYPE_PACK_EXPANSION in the
3239          resulting TREE_PURPOSE will mention the parameter packs in
3240          both the bases and the arguments to the bases.  */
3241       tree purpose;
3242       tree value;
3243       tree parameter_packs = NULL_TREE;
3244
3245       /* Determine which parameter packs will be used by the base
3246          class expansion.  */
3247       ppd.visited = pointer_set_create ();
3248       ppd.parameter_packs = &parameter_packs;
3249       cp_walk_tree (&TREE_PURPOSE (arg), &find_parameter_packs_r, 
3250                     &ppd, ppd.visited);
3251
3252       if (parameter_packs == NULL_TREE)
3253         {
3254           error ("base initializer expansion %<%T%> contains no parameter packs", arg);
3255           pointer_set_destroy (ppd.visited);
3256           return error_mark_node;
3257         }
3258
3259       if (TREE_VALUE (arg) != void_type_node)
3260         {
3261           /* Collect the sets of parameter packs used in each of the
3262              initialization arguments.  */
3263           for (value = TREE_VALUE (arg); value; value = TREE_CHAIN (value))
3264             {
3265               /* Determine which parameter packs will be expanded in this
3266                  argument.  */
3267               cp_walk_tree (&TREE_VALUE (value), &find_parameter_packs_r, 
3268                             &ppd, ppd.visited);
3269             }
3270         }
3271
3272       pointer_set_destroy (ppd.visited);
3273
3274       /* Create the pack expansion type for the base type.  */
3275       purpose = cxx_make_type (TYPE_PACK_EXPANSION);
3276       SET_PACK_EXPANSION_PATTERN (purpose, TREE_PURPOSE (arg));
3277       PACK_EXPANSION_PARAMETER_PACKS (purpose) = parameter_packs;
3278
3279       /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
3280          they will rarely be compared to anything.  */
3281       SET_TYPE_STRUCTURAL_EQUALITY (purpose);
3282
3283       return tree_cons (purpose, TREE_VALUE (arg), NULL_TREE);
3284     }
3285
3286   if (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL)
3287     for_types = true;
3288
3289   /* Build the PACK_EXPANSION_* node.  */
3290   result = for_types
3291      ? cxx_make_type (TYPE_PACK_EXPANSION)
3292      : make_node (EXPR_PACK_EXPANSION);
3293   SET_PACK_EXPANSION_PATTERN (result, arg);
3294   if (TREE_CODE (result) == EXPR_PACK_EXPANSION)
3295     {
3296       /* Propagate type and const-expression information.  */
3297       TREE_TYPE (result) = TREE_TYPE (arg);
3298       TREE_CONSTANT (result) = TREE_CONSTANT (arg);
3299     }
3300   else
3301     /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
3302        they will rarely be compared to anything.  */
3303     SET_TYPE_STRUCTURAL_EQUALITY (result);
3304
3305   /* Determine which parameter packs will be expanded.  */
3306   ppd.parameter_packs = &parameter_packs;
3307   ppd.visited = pointer_set_create ();
3308   cp_walk_tree (&arg, &find_parameter_packs_r, &ppd, ppd.visited);
3309   pointer_set_destroy (ppd.visited);
3310
3311   /* Make sure we found some parameter packs.  */
3312   if (parameter_packs == NULL_TREE)
3313     {
3314       if (TYPE_P (arg))
3315         error ("expansion pattern %<%T%> contains no argument packs", arg);
3316       else
3317         error ("expansion pattern %<%E%> contains no argument packs", arg);
3318       return error_mark_node;
3319     }
3320   PACK_EXPANSION_PARAMETER_PACKS (result) = parameter_packs;
3321
3322   PACK_EXPANSION_LOCAL_P (result) = at_function_scope_p ();
3323
3324   return result;
3325 }
3326
3327 /* Checks T for any "bare" parameter packs, which have not yet been
3328    expanded, and issues an error if any are found. This operation can
3329    only be done on full expressions or types (e.g., an expression
3330    statement, "if" condition, etc.), because we could have expressions like:
3331
3332      foo(f(g(h(args)))...)
3333
3334    where "args" is a parameter pack. check_for_bare_parameter_packs
3335    should not be called for the subexpressions args, h(args),
3336    g(h(args)), or f(g(h(args))), because we would produce erroneous
3337    error messages. 
3338
3339    Returns TRUE and emits an error if there were bare parameter packs,
3340    returns FALSE otherwise.  */
3341 bool 
3342 check_for_bare_parameter_packs (tree t)
3343 {
3344   tree parameter_packs = NULL_TREE;
3345   struct find_parameter_pack_data ppd;
3346
3347   if (!processing_template_decl || !t || t == error_mark_node)
3348     return false;
3349
3350   if (TREE_CODE (t) == TYPE_DECL)
3351     t = TREE_TYPE (t);
3352
3353   ppd.parameter_packs = &parameter_packs;
3354   ppd.visited = pointer_set_create ();
3355   cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
3356   pointer_set_destroy (ppd.visited);
3357
3358   if (parameter_packs) 
3359     {
3360       error ("parameter packs not expanded with %<...%>:");
3361       while (parameter_packs)
3362         {
3363           tree pack = TREE_VALUE (parameter_packs);
3364           tree name = NULL_TREE;
3365
3366           if (TREE_CODE (pack) == TEMPLATE_TYPE_PARM
3367               || TREE_CODE (pack) == TEMPLATE_TEMPLATE_PARM)
3368             name = TYPE_NAME (pack);
3369           else if (TREE_CODE (pack) == TEMPLATE_PARM_INDEX)
3370             name = DECL_NAME (TEMPLATE_PARM_DECL (pack));
3371           else
3372             name = DECL_NAME (pack);
3373
3374           if (name)
3375             inform (input_location, "        %qD", name);
3376           else
3377             inform (input_location, "        <anonymous>");
3378
3379           parameter_packs = TREE_CHAIN (parameter_packs);
3380         }
3381
3382       return true;
3383     }
3384
3385   return false;
3386 }
3387
3388 /* Expand any parameter packs that occur in the template arguments in
3389    ARGS.  */
3390 tree
3391 expand_template_argument_pack (tree args)
3392 {
3393   tree result_args = NULL_TREE;
3394   int in_arg, out_arg = 0, nargs = args ? TREE_VEC_LENGTH (args) : 0;
3395   int num_result_args = -1;
3396   int non_default_args_count = -1;
3397
3398   /* First, determine if we need to expand anything, and the number of
3399      slots we'll need.  */
3400   for (in_arg = 0; in_arg < nargs; ++in_arg)
3401     {
3402       tree arg = TREE_VEC_ELT (args, in_arg);
3403       if (arg == NULL_TREE)
3404         return args;
3405       if (ARGUMENT_PACK_P (arg))
3406         {
3407           int num_packed = TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg));
3408           if (num_result_args < 0)
3409             num_result_args = in_arg + num_packed;
3410           else
3411             num_result_args += num_packed;
3412         }
3413       else
3414         {
3415           if (num_result_args >= 0)
3416             num_result_args++;
3417         }
3418     }
3419
3420   /* If no expansion is necessary, we're done.  */
3421   if (num_result_args < 0)
3422     return args;
3423
3424   /* Expand arguments.  */
3425   result_args = make_tree_vec (num_result_args);
3426   if (NON_DEFAULT_TEMPLATE_ARGS_COUNT (args))
3427     non_default_args_count =
3428       GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (args);
3429   for (in_arg = 0; in_arg < nargs; ++in_arg)
3430     {
3431       tree arg = TREE_VEC_ELT (args, in_arg);
3432       if (ARGUMENT_PACK_P (arg))
3433         {
3434           tree packed = ARGUMENT_PACK_ARGS (arg);
3435           int i, num_packed = TREE_VEC_LENGTH (packed);
3436           for (i = 0; i < num_packed; ++i, ++out_arg)
3437             TREE_VEC_ELT (result_args, out_arg) = TREE_VEC_ELT(packed, i);
3438           if (non_default_args_count > 0)
3439             non_default_args_count += num_packed;
3440         }
3441       else
3442         {
3443           TREE_VEC_ELT (result_args, out_arg) = arg;
3444           ++out_arg;
3445         }
3446     }
3447   if (non_default_args_count >= 0)
3448     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (result_args, non_default_args_count);
3449   return result_args;
3450 }
3451
3452 /* Checks if DECL shadows a template parameter.
3453
3454    [temp.local]: A template-parameter shall not be redeclared within its
3455    scope (including nested scopes).
3456
3457    Emits an error and returns TRUE if the DECL shadows a parameter,
3458    returns FALSE otherwise.  */
3459
3460 bool
3461 check_template_shadow (tree decl)
3462 {
3463   tree olddecl;
3464
3465   /* If we're not in a template, we can't possibly shadow a template
3466      parameter.  */
3467   if (!current_template_parms)
3468     return true;
3469
3470   /* Figure out what we're shadowing.  */
3471   if (TREE_CODE (decl) == OVERLOAD)
3472     decl = OVL_CURRENT (decl);
3473   olddecl = innermost_non_namespace_value (DECL_NAME (decl));
3474
3475   /* If there's no previous binding for this name, we're not shadowing
3476      anything, let alone a template parameter.  */
3477   if (!olddecl)
3478     return true;
3479
3480   /* If we're not shadowing a template parameter, we're done.  Note
3481      that OLDDECL might be an OVERLOAD (or perhaps even an
3482      ERROR_MARK), so we can't just blithely assume it to be a _DECL
3483      node.  */
3484   if (!DECL_P (olddecl) || !DECL_TEMPLATE_PARM_P (olddecl))
3485     return true;
3486
3487   /* We check for decl != olddecl to avoid bogus errors for using a
3488      name inside a class.  We check TPFI to avoid duplicate errors for
3489      inline member templates.  */
3490   if (decl == olddecl
3491       || TEMPLATE_PARMS_FOR_INLINE (current_template_parms))
3492     return true;
3493
3494   error ("declaration of %q+#D", decl);
3495   error (" shadows template parm %q+#D", olddecl);
3496   return false;
3497 }
3498
3499 /* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
3500    ORIG_LEVEL, DECL, and TYPE.  */
3501
3502 static tree
3503 build_template_parm_index (int index,
3504                            int level,
3505                            int orig_level,
3506                            tree decl,
3507                            tree type)
3508 {
3509   tree t = make_node (TEMPLATE_PARM_INDEX);
3510   TEMPLATE_PARM_IDX (t) = index;
3511   TEMPLATE_PARM_LEVEL (t) = level;
3512   TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
3513   TEMPLATE_PARM_DECL (t) = decl;
3514   TREE_TYPE (t) = type;
3515   TREE_CONSTANT (t) = TREE_CONSTANT (decl);
3516   TREE_READONLY (t) = TREE_READONLY (decl);
3517
3518   return t;
3519 }
3520
3521 /* Find the canonical type parameter for the given template type
3522    parameter.  Returns the canonical type parameter, which may be TYPE
3523    if no such parameter existed.  */
3524
3525 static tree
3526 canonical_type_parameter (tree type)
3527 {
3528   tree list;
3529   int idx = TEMPLATE_TYPE_IDX (type);
3530   if (!canonical_template_parms)
3531     vec_alloc (canonical_template_parms, idx+1);
3532
3533   while (canonical_template_parms->length () <= (unsigned)idx)
3534     vec_safe_push (canonical_template_parms, NULL_TREE);
3535
3536   list = (*canonical_template_parms)[idx];
3537   while (list && !comptypes (type, TREE_VALUE (list), COMPARE_STRUCTURAL))
3538     list = TREE_CHAIN (list);
3539
3540   if (list)
3541     return TREE_VALUE (list);
3542   else
3543     {
3544       (*canonical_template_parms)[idx]
3545                 = tree_cons (NULL_TREE, type,
3546                              (*canonical_template_parms)[idx]);
3547       return type;
3548     }
3549 }
3550
3551 /* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
3552    TEMPLATE_PARM_LEVEL has been decreased by LEVELS.  If such a
3553    TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
3554    new one is created.  */
3555
3556 static tree
3557 reduce_template_parm_level (tree index, tree type, int levels, tree args,
3558                             tsubst_flags_t complain)
3559 {
3560   if (TEMPLATE_PARM_DESCENDANTS (index) == NULL_TREE
3561       || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
3562           != TEMPLATE_PARM_LEVEL (index) - levels)
3563       || !same_type_p (type, TREE_TYPE (TEMPLATE_PARM_DESCENDANTS (index))))
3564     {
3565       tree orig_decl = TEMPLATE_PARM_DECL (index);
3566       tree decl, t;
3567
3568       decl = build_decl (DECL_SOURCE_LOCATION (orig_decl),
3569                          TREE_CODE (orig_decl), DECL_NAME (orig_decl), type);
3570       TREE_CONSTANT (decl) = TREE_CONSTANT (orig_decl);
3571       TREE_READONLY (decl) = TREE_READONLY (orig_decl);
3572       DECL_ARTIFICIAL (decl) = 1;
3573       SET_DECL_TEMPLATE_PARM_P (decl);
3574
3575       t = build_template_parm_index (TEMPLATE_PARM_IDX (index),
3576                                      TEMPLATE_PARM_LEVEL (index) - levels,
3577                                      TEMPLATE_PARM_ORIG_LEVEL (index),
3578                                      decl, type);
3579       TEMPLATE_PARM_DESCENDANTS (index) = t;
3580       TEMPLATE_PARM_PARAMETER_PACK (t) 
3581         = TEMPLATE_PARM_PARAMETER_PACK (index);
3582
3583         /* Template template parameters need this.  */
3584       if (TREE_CODE (decl) == TEMPLATE_DECL)
3585         DECL_TEMPLATE_PARMS (decl) = tsubst_template_parms
3586           (DECL_TEMPLATE_PARMS (TEMPLATE_PARM_DECL (index)),
3587            args, complain);
3588     }
3589
3590   return TEMPLATE_PARM_DESCENDANTS (index);
3591 }
3592
3593 /* Process information from new template parameter PARM and append it
3594    to the LIST being built.  This new parameter is a non-type
3595    parameter iff IS_NON_TYPE is true. This new parameter is a
3596    parameter pack iff IS_PARAMETER_PACK is true.  The location of PARM
3597    is in PARM_LOC. NUM_TEMPLATE_PARMS is the size of the template
3598    parameter list PARM belongs to. This is used used to create a
3599    proper canonical type for the type of PARM that is to be created,
3600    iff PARM is a type.  If the size is not known, this parameter shall
3601    be set to 0.  */
3602
3603 tree
3604 process_template_parm (tree list, location_t parm_loc, tree parm,
3605                        bool is_non_type, bool is_parameter_pack)
3606 {
3607   tree decl = 0;
3608   tree defval;
3609   tree err_parm_list;
3610   int idx = 0;
3611
3612   gcc_assert (TREE_CODE (parm) == TREE_LIST);
3613   defval = TREE_PURPOSE (parm);
3614
3615   if (list)
3616     {
3617       tree p = tree_last (list);
3618
3619       if (p && TREE_VALUE (p) != error_mark_node)
3620         {
3621           p = TREE_VALUE (p);
3622           if (TREE_CODE (p) == TYPE_DECL || TREE_CODE (p) == TEMPLATE_DECL)
3623             idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
3624           else
3625             idx = TEMPLATE_PARM_IDX (DECL_INITIAL (p));
3626         }
3627
3628       ++idx;
3629     }
3630   else
3631     idx = 0;
3632
3633   if (is_non_type)
3634     {
3635       parm = TREE_VALUE (parm);
3636
3637       SET_DECL_TEMPLATE_PARM_P (parm);
3638
3639       if (TREE_TYPE (parm) == error_mark_node)
3640         {
3641           err_parm_list = build_tree_list (defval, parm);
3642           TREE_VALUE (err_parm_list) = error_mark_node;
3643            return chainon (list, err_parm_list);
3644         }
3645       else
3646       {
3647         /* [temp.param]
3648
3649            The top-level cv-qualifiers on the template-parameter are
3650            ignored when determining its type.  */
3651         TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
3652         if (invalid_nontype_parm_type_p (TREE_TYPE (parm), 1))
3653           {
3654             err_parm_list = build_tree_list (defval, parm);
3655             TREE_VALUE (err_parm_list) = error_mark_node;
3656              return chainon (list, err_parm_list);
3657           }
3658
3659         if (uses_parameter_packs (TREE_TYPE (parm)) && !is_parameter_pack)
3660           {
3661             /* This template parameter is not a parameter pack, but it
3662                should be. Complain about "bare" parameter packs.  */
3663             check_for_bare_parameter_packs (TREE_TYPE (parm));
3664             
3665             /* Recover by calling this a parameter pack.  */
3666             is_parameter_pack = true;
3667           }
3668       }
3669
3670       /* A template parameter is not modifiable.  */
3671       TREE_CONSTANT (parm) = 1;
3672       TREE_READONLY (parm) = 1;
3673       decl = build_decl (parm_loc,
3674                          CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
3675       TREE_CONSTANT (decl) = 1;
3676       TREE_READONLY (decl) = 1;
3677       DECL_INITIAL (parm) = DECL_INITIAL (decl)
3678         = build_template_parm_index (idx, processing_template_decl,
3679                                      processing_template_decl,
3680                                      decl, TREE_TYPE (parm));
3681
3682       TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)) 
3683         = is_parameter_pack;
3684     }
3685   else
3686     {
3687       tree t;
3688       parm = TREE_VALUE (TREE_VALUE (parm));
3689
3690       if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
3691         {
3692           t = cxx_make_type (TEMPLATE_TEMPLATE_PARM);
3693           /* This is for distinguishing between real templates and template
3694              template parameters */
3695           TREE_TYPE (parm) = t;
3696           TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
3697           decl = parm;
3698         }
3699       else
3700         {
3701           t = cxx_make_type (TEMPLATE_TYPE_PARM);
3702           /* parm is either IDENTIFIER_NODE or NULL_TREE.  */
3703           decl = build_decl (parm_loc,
3704                              TYPE_DECL, parm, t);
3705         }
3706
3707       TYPE_NAME (t) = decl;
3708       TYPE_STUB_DECL (t) = decl;
3709       parm = decl;
3710       TEMPLATE_TYPE_PARM_INDEX (t)
3711         = build_template_parm_index (idx, processing_template_decl,
3712                                      processing_template_decl,
3713                                      decl, TREE_TYPE (parm));
3714       TEMPLATE_TYPE_PARAMETER_PACK (t) = is_parameter_pack;
3715       TYPE_CANONICAL (t) = canonical_type_parameter (t);
3716     }
3717   DECL_ARTIFICIAL (decl) = 1;
3718   SET_DECL_TEMPLATE_PARM_P (decl);
3719   pushdecl (decl);
3720   parm = build_tree_list (defval, parm);
3721   return chainon (list, parm);
3722 }
3723
3724 /* The end of a template parameter list has been reached.  Process the
3725    tree list into a parameter vector, converting each parameter into a more
3726    useful form.  Type parameters are saved as IDENTIFIER_NODEs, and others
3727    as PARM_DECLs.  */
3728
3729 tree
3730 end_template_parm_list (tree parms)
3731 {
3732   int nparms;
3733   tree parm, next;
3734   tree saved_parmlist = make_tree_vec (list_length (parms));
3735
3736   current_template_parms
3737     = tree_cons (size_int (processing_template_decl),
3738                  saved_parmlist, current_template_parms);
3739
3740   for (parm = parms, nparms = 0; parm; parm = next, nparms++)
3741     {
3742       next = TREE_CHAIN (parm);
3743       TREE_VEC_ELT (saved_parmlist, nparms) = parm;
3744       TREE_CHAIN (parm) = NULL_TREE;
3745     }
3746
3747   --processing_template_parmlist;
3748
3749   return saved_parmlist;
3750 }
3751
3752 /* end_template_decl is called after a template declaration is seen.  */
3753
3754 void
3755 end_template_decl (void)
3756 {
3757   reset_specialization ();
3758
3759   if (! processing_template_decl)
3760     return;
3761
3762   /* This matches the pushlevel in begin_template_parm_list.  */
3763   finish_scope ();
3764
3765   --processing_template_decl;
3766   current_template_parms = TREE_CHAIN (current_template_parms);
3767 }
3768
3769 /* Takes a TREE_LIST representing a template parameter and convert it
3770    into an argument suitable to be passed to the type substitution
3771    functions.  Note that If the TREE_LIST contains an error_mark
3772    node, the returned argument is error_mark_node.  */
3773
3774 static tree
3775 template_parm_to_arg (tree t)
3776 {
3777
3778   if (t == NULL_TREE
3779       || TREE_CODE (t) != TREE_LIST)
3780     return t;
3781
3782   if (error_operand_p (TREE_VALUE (t)))
3783     return error_mark_node;
3784
3785   t = TREE_VALUE (t);
3786
3787   if (TREE_CODE (t) == TYPE_DECL
3788       || TREE_CODE (t) == TEMPLATE_DECL)
3789     {
3790       t = TREE_TYPE (t);
3791
3792       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
3793         {
3794           /* Turn this argument into a TYPE_ARGUMENT_PACK
3795              with a single element, which expands T.  */
3796           tree vec = make_tree_vec (1);
3797 #ifdef ENABLE_CHECKING
3798           SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT
3799             (vec, TREE_VEC_LENGTH (vec));
3800 #endif
3801           TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3802
3803           t = cxx_make_type (TYPE_ARGUMENT_PACK);
3804           SET_ARGUMENT_PACK_ARGS (t, vec);
3805         }
3806     }
3807   else
3808     {
3809       t = DECL_INITIAL (t);
3810
3811       if (TEMPLATE_PARM_PARAMETER_PACK (t))
3812         {
3813           /* Turn this argument into a NONTYPE_ARGUMENT_PACK
3814              with a single element, which expands T.  */
3815           tree vec = make_tree_vec (1);
3816           tree type = TREE_TYPE (TEMPLATE_PARM_DECL (t));
3817 #ifdef ENABLE_CHECKING
3818           SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT
3819             (vec, TREE_VEC_LENGTH (vec));
3820 #endif
3821           TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3822
3823           t  = make_node (NONTYPE_ARGUMENT_PACK);
3824           SET_ARGUMENT_PACK_ARGS (t, vec);
3825           TREE_TYPE (t) = type;
3826         }
3827     }
3828   return t;
3829 }
3830
3831 /* Given a set of template parameters, return them as a set of template
3832    arguments.  The template parameters are represented as a TREE_VEC, in
3833    the form documented in cp-tree.h for template arguments.  */
3834
3835 static tree
3836 template_parms_to_args (tree parms)
3837 {
3838   tree header;
3839   tree args = NULL_TREE;
3840   int length = TMPL_PARMS_DEPTH (parms);
3841   int l = length;
3842
3843   /* If there is only one level of template parameters, we do not
3844      create a TREE_VEC of TREE_VECs.  Instead, we return a single
3845      TREE_VEC containing the arguments.  */
3846   if (length > 1)
3847     args = make_tree_vec (length);
3848
3849   for (header = parms; header; header = TREE_CHAIN (header))
3850     {
3851       tree a = copy_node (TREE_VALUE (header));
3852       int i;
3853
3854       TREE_TYPE (a) = NULL_TREE;
3855       for (i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
3856         TREE_VEC_ELT (a, i) = template_parm_to_arg (TREE_VEC_ELT (a, i));
3857
3858 #ifdef ENABLE_CHECKING
3859       SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (a, TREE_VEC_LENGTH (a));
3860 #endif
3861
3862       if (length > 1)
3863         TREE_VEC_ELT (args, --l) = a;
3864       else
3865         args = a;
3866     }
3867
3868     if (length > 1 && TREE_VEC_ELT (args, 0) == NULL_TREE)
3869       /* This can happen for template parms of a template template
3870          parameter, e.g:
3871
3872          template<template<class T, class U> class TT> struct S;
3873
3874          Consider the level of the parms of TT; T and U both have
3875          level 2; TT has no template parm of level 1. So in this case
3876          the first element of full_template_args is NULL_TREE. If we
3877          leave it like this TMPL_ARG_DEPTH on args returns 1 instead
3878          of 2. This will make tsubst wrongly consider that T and U
3879          have level 1. Instead, let's create a dummy vector as the
3880          first element of full_template_args so that TMPL_ARG_DEPTH
3881          returns the correct depth for args.  */
3882       TREE_VEC_ELT (args, 0) = make_tree_vec (1);
3883   return args;
3884 }
3885
3886 /* Within the declaration of a template, return the currently active
3887    template parameters as an argument TREE_VEC.  */
3888
3889 static tree
3890 current_template_args (void)
3891 {
3892   return template_parms_to_args (current_template_parms);
3893 }
3894
3895 /* Update the declared TYPE by doing any lookups which were thought to be
3896    dependent, but are not now that we know the SCOPE of the declarator.  */
3897
3898 tree
3899 maybe_update_decl_type (tree orig_type, tree scope)
3900 {
3901   tree type = orig_type;
3902
3903   if (type == NULL_TREE)
3904     return type;
3905
3906   if (TREE_CODE (orig_type) == TYPE_DECL)
3907     type = TREE_TYPE (type);
3908
3909   if (scope && TYPE_P (scope) && dependent_type_p (scope)
3910       && dependent_type_p (type)
3911       /* Don't bother building up the args in this case.  */
3912       && TREE_CODE (type) != TEMPLATE_TYPE_PARM)
3913     {
3914       /* tsubst in the args corresponding to the template parameters,
3915          including auto if present.  Most things will be unchanged, but
3916          make_typename_type and tsubst_qualified_id will resolve
3917          TYPENAME_TYPEs and SCOPE_REFs that were previously dependent.  */
3918       tree args = current_template_args ();
3919       tree auto_node = type_uses_auto (type);
3920       tree pushed;
3921       if (auto_node)
3922         {
3923           tree auto_vec = make_tree_vec (1);
3924           TREE_VEC_ELT (auto_vec, 0) = auto_node;
3925           args = add_to_template_args (args, auto_vec);
3926         }
3927       pushed = push_scope (scope);
3928       type = tsubst (type, args, tf_warning_or_error, NULL_TREE);
3929       if (pushed)
3930         pop_scope (scope);
3931     }
3932
3933   if (type == error_mark_node)
3934     return orig_type;
3935
3936   if (TREE_CODE (orig_type) == TYPE_DECL)
3937     {
3938       if (same_type_p (type, TREE_TYPE (orig_type)))
3939         type = orig_type;
3940       else
3941         type = TYPE_NAME (type);
3942     }
3943   return type;
3944 }
3945
3946 /* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
3947    template PARMS.  If MEMBER_TEMPLATE_P is true, the new template is
3948    a member template.  Used by push_template_decl below.  */
3949
3950 static tree
3951 build_template_decl (tree decl, tree parms, bool member_template_p)
3952 {
3953   tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
3954   DECL_TEMPLATE_PARMS (tmpl) = parms;
3955   DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
3956   DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
3957   DECL_MEMBER_TEMPLATE_P (tmpl) = member_template_p;
3958
3959   return tmpl;
3960 }
3961
3962 struct template_parm_data
3963 {
3964   /* The level of the template parameters we are currently
3965      processing.  */
3966   int level;
3967
3968   /* The index of the specialization argument we are currently
3969      processing.  */
3970   int current_arg;
3971
3972   /* An array whose size is the number of template parameters.  The
3973      elements are nonzero if the parameter has been used in any one
3974      of the arguments processed so far.  */
3975   int* parms;
3976
3977   /* An array whose size is the number of template arguments.  The
3978      elements are nonzero if the argument makes use of template
3979      parameters of this level.  */
3980   int* arg_uses_template_parms;
3981 };
3982
3983 /* Subroutine of push_template_decl used to see if each template
3984    parameter in a partial specialization is used in the explicit
3985    argument list.  If T is of the LEVEL given in DATA (which is
3986    treated as a template_parm_data*), then DATA->PARMS is marked
3987    appropriately.  */
3988
3989 static int
3990 mark_template_parm (tree t, void* data)
3991 {
3992   int level;
3993   int idx;
3994   struct template_parm_data* tpd = (struct template_parm_data*) data;
3995
3996   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
3997     {
3998       level = TEMPLATE_PARM_LEVEL (t);
3999       idx = TEMPLATE_PARM_IDX (t);
4000     }
4001   else
4002     {
4003       level = TEMPLATE_TYPE_LEVEL (t);
4004       idx = TEMPLATE_TYPE_IDX (t);
4005     }
4006
4007   if (level == tpd->level)
4008     {
4009       tpd->parms[idx] = 1;
4010       tpd->arg_uses_template_parms[tpd->current_arg] = 1;
4011     }
4012
4013   /* Return zero so that for_each_template_parm will continue the
4014      traversal of the tree; we want to mark *every* template parm.  */
4015   return 0;
4016 }
4017
4018 /* Process the partial specialization DECL.  */
4019
4020 static tree
4021 process_partial_specialization (tree decl)
4022 {
4023   tree type = TREE_TYPE (decl);
4024   tree maintmpl = CLASSTYPE_TI_TEMPLATE (type);
4025   tree specargs = CLASSTYPE_TI_ARGS (type);
4026   tree inner_args = INNERMOST_TEMPLATE_ARGS (specargs);
4027   tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
4028   tree inner_parms;
4029   tree inst;
4030   int nargs = TREE_VEC_LENGTH (inner_args);
4031   int ntparms;
4032   int  i;
4033   bool did_error_intro = false;
4034   struct template_parm_data tpd;
4035   struct template_parm_data tpd2;
4036
4037   gcc_assert (current_template_parms);
4038
4039   inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
4040   ntparms = TREE_VEC_LENGTH (inner_parms);
4041
4042   /* We check that each of the template parameters given in the
4043      partial specialization is used in the argument list to the
4044      specialization.  For example:
4045
4046        template <class T> struct S;
4047        template <class T> struct S<T*>;
4048
4049      The second declaration is OK because `T*' uses the template
4050      parameter T, whereas
4051
4052        template <class T> struct S<int>;
4053
4054      is no good.  Even trickier is:
4055
4056        template <class T>
4057        struct S1
4058        {
4059           template <class U>
4060           struct S2;
4061           template <class U>
4062           struct S2<T>;
4063        };
4064
4065      The S2<T> declaration is actually invalid; it is a
4066      full-specialization.  Of course,
4067
4068           template <class U>
4069           struct S2<T (*)(U)>;
4070
4071      or some such would have been OK.  */
4072   tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
4073   tpd.parms = XALLOCAVEC (int, ntparms);
4074   memset (tpd.parms, 0, sizeof (int) * ntparms);
4075
4076   tpd.arg_uses_template_parms = XALLOCAVEC (int, nargs);
4077   memset (tpd.arg_uses_template_parms, 0, sizeof (int) * nargs);
4078   for (i = 0; i < nargs; ++i)
4079     {
4080       tpd.current_arg = i;
4081       for_each_template_parm (TREE_VEC_ELT (inner_args, i),
4082                               &mark_template_parm,
4083                               &tpd,
4084                               NULL,
4085                               /*include_nondeduced_p=*/false);
4086     }
4087   for (i = 0; i < ntparms; ++i)
4088     if (tpd.parms[i] == 0)
4089       {
4090         /* One of the template parms was not used in the
4091            specialization.  */
4092         if (!did_error_intro)
4093           {
4094             error ("template parameters not used in partial specialization:");
4095             did_error_intro = true;
4096           }
4097
4098         error ("        %qD", TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
4099       }
4100
4101   if (did_error_intro)
4102     return error_mark_node;
4103
4104   /* [temp.class.spec]
4105
4106      The argument list of the specialization shall not be identical to
4107      the implicit argument list of the primary template.  */
4108   if (comp_template_args
4109       (inner_args,
4110        INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE
4111                                                    (maintmpl)))))
4112     error ("partial specialization %qT does not specialize any template arguments", type);
4113
4114   /* A partial specialization that replaces multiple parameters of the
4115      primary template with a pack expansion is less specialized for those
4116      parameters.  */
4117   if (nargs < DECL_NTPARMS (maintmpl))
4118     {
4119       error ("partial specialization is not more specialized than the "
4120              "primary template because it replaces multiple parameters "
4121              "with a pack expansion");
4122       inform (DECL_SOURCE_LOCATION (maintmpl), "primary template here");
4123       return decl;
4124     }
4125
4126   /* [temp.class.spec]
4127
4128      A partially specialized non-type argument expression shall not
4129      involve template parameters of the partial specialization except
4130      when the argument expression is a simple identifier.
4131
4132      The type of a template parameter corresponding to a specialized
4133      non-type argument shall not be dependent on a parameter of the
4134      specialization. 
4135
4136      Also, we verify that pack expansions only occur at the
4137      end of the argument list.  */
4138   gcc_assert (nargs == DECL_NTPARMS (maintmpl));
4139   tpd2.parms = 0;
4140   for (i = 0; i < nargs; ++i)
4141     {
4142       tree parm = TREE_VALUE (TREE_VEC_ELT (main_inner_parms, i));
4143       tree arg = TREE_VEC_ELT (inner_args, i);
4144       tree packed_args = NULL_TREE;
4145       int j, len = 1;
4146
4147       if (ARGUMENT_PACK_P (arg))
4148         {
4149           /* Extract the arguments from the argument pack. We'll be
4150              iterating over these in the following loop.  */
4151           packed_args = ARGUMENT_PACK_ARGS (arg);
4152           len = TREE_VEC_LENGTH (packed_args);
4153         }
4154
4155       for (j = 0; j < len; j++)
4156         {
4157           if (packed_args)
4158             /* Get the Jth argument in the parameter pack.  */
4159             arg = TREE_VEC_ELT (packed_args, j);
4160
4161           if (PACK_EXPANSION_P (arg))
4162             {
4163               /* Pack expansions must come at the end of the
4164                  argument list.  */
4165               if ((packed_args && j < len - 1)
4166                   || (!packed_args && i < nargs - 1))
4167                 {
4168                   if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
4169                     error ("parameter pack argument %qE must be at the "
4170                            "end of the template argument list", arg);
4171                   else
4172                     error ("parameter pack argument %qT must be at the "
4173                            "end of the template argument list", arg);
4174                 }
4175             }
4176
4177           if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
4178             /* We only care about the pattern.  */
4179             arg = PACK_EXPANSION_PATTERN (arg);
4180
4181           if (/* These first two lines are the `non-type' bit.  */
4182               !TYPE_P (arg)
4183               && TREE_CODE (arg) != TEMPLATE_DECL
4184               /* This next line is the `argument expression is not just a
4185                  simple identifier' condition and also the `specialized
4186                  non-type argument' bit.  */
4187               && TREE_CODE (arg) != TEMPLATE_PARM_INDEX)
4188             {
4189               if ((!packed_args && tpd.arg_uses_template_parms[i])
4190                   || (packed_args && uses_template_parms (arg)))
4191                 error ("template argument %qE involves template parameter(s)",
4192                        arg);
4193               else 
4194                 {
4195                   /* Look at the corresponding template parameter,
4196                      marking which template parameters its type depends
4197                      upon.  */
4198                   tree type = TREE_TYPE (parm);
4199
4200                   if (!tpd2.parms)
4201                     {
4202                       /* We haven't yet initialized TPD2.  Do so now.  */
4203                       tpd2.arg_uses_template_parms = XALLOCAVEC (int, nargs);
4204                       /* The number of parameters here is the number in the
4205                          main template, which, as checked in the assertion
4206                          above, is NARGS.  */
4207                       tpd2.parms = XALLOCAVEC (int, nargs);
4208                       tpd2.level = 
4209                         TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
4210                     }
4211
4212                   /* Mark the template parameters.  But this time, we're
4213                      looking for the template parameters of the main
4214                      template, not in the specialization.  */
4215                   tpd2.current_arg = i;
4216                   tpd2.arg_uses_template_parms[i] = 0;
4217                   memset (tpd2.parms, 0, sizeof (int) * nargs);
4218                   for_each_template_parm (type,
4219                                           &mark_template_parm,
4220                                           &tpd2,
4221                                           NULL,
4222                                           /*include_nondeduced_p=*/false);
4223
4224                   if (tpd2.arg_uses_template_parms [i])
4225                     {
4226                       /* The type depended on some template parameters.
4227                          If they are fully specialized in the
4228                          specialization, that's OK.  */
4229                       int j;
4230                       int count = 0;
4231                       for (j = 0; j < nargs; ++j)
4232                         if (tpd2.parms[j] != 0
4233                             && tpd.arg_uses_template_parms [j])
4234                           ++count;
4235                       if (count != 0)
4236                         error_n (input_location, count,
4237                                  "type %qT of template argument %qE depends "
4238                                  "on a template parameter",
4239                                  "type %qT of template argument %qE depends "
4240                                  "on template parameters",
4241                                  type,
4242                                  arg);
4243                     }
4244                 }
4245             }
4246         }
4247     }
4248
4249   /* We should only get here once.  */
4250   gcc_assert (!COMPLETE_TYPE_P (type));
4251
4252   DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
4253     = tree_cons (specargs, inner_parms,
4254                  DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
4255   TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
4256
4257   for (inst = DECL_TEMPLATE_INSTANTIATIONS (maintmpl); inst;
4258        inst = TREE_CHAIN (inst))
4259     {
4260       tree inst_type = TREE_VALUE (inst);
4261       if (COMPLETE_TYPE_P (inst_type)
4262           && CLASSTYPE_IMPLICIT_INSTANTIATION (inst_type))
4263         {
4264           tree spec = most_specialized_class (inst_type, maintmpl, tf_none);
4265           if (spec && TREE_TYPE (spec) == type)
4266             permerror (input_location,
4267                        "partial specialization of %qT after instantiation "
4268                        "of %qT", type, inst_type);
4269         }
4270     }
4271
4272   return decl;
4273 }
4274
4275 /* Check that a template declaration's use of default arguments and
4276    parameter packs is not invalid.  Here, PARMS are the template
4277    parameters.  IS_PRIMARY is true if DECL is the thing declared by
4278    a primary template.  IS_PARTIAL is true if DECL is a partial
4279    specialization.
4280
4281    IS_FRIEND_DECL is nonzero if DECL is a friend function template
4282    declaration (but not a definition); 1 indicates a declaration, 2
4283    indicates a redeclaration. When IS_FRIEND_DECL=2, no errors are
4284    emitted for extraneous default arguments.
4285
4286    Returns TRUE if there were no errors found, FALSE otherwise. */
4287
4288 bool
4289 check_default_tmpl_args (tree decl, tree parms, bool is_primary,
4290                          bool is_partial, int is_friend_decl)
4291 {
4292   const char *msg;
4293   int last_level_to_check;
4294   tree parm_level;
4295   bool no_errors = true;
4296
4297   /* [temp.param]
4298
4299      A default template-argument shall not be specified in a
4300      function template declaration or a function template definition, nor
4301      in the template-parameter-list of the definition of a member of a
4302      class template.  */
4303
4304   if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
4305     /* You can't have a function template declaration in a local
4306        scope, nor you can you define a member of a class template in a
4307        local scope.  */
4308     return true;
4309
4310   if (TREE_CODE (decl) == TYPE_DECL
4311       && TREE_TYPE (decl)
4312       && LAMBDA_TYPE_P (TREE_TYPE (decl)))
4313     /* A lambda doesn't have an explicit declaration; don't complain
4314        about the parms of the enclosing class.  */
4315     return true;
4316
4317   if (current_class_type
4318       && !TYPE_BEING_DEFINED (current_class_type)
4319       && DECL_LANG_SPECIFIC (decl)
4320       && DECL_DECLARES_FUNCTION_P (decl)
4321       /* If this is either a friend defined in the scope of the class
4322          or a member function.  */
4323       && (DECL_FUNCTION_MEMBER_P (decl)
4324           ? same_type_p (DECL_CONTEXT (decl), current_class_type)
4325           : DECL_FRIEND_CONTEXT (decl)
4326           ? same_type_p (DECL_FRIEND_CONTEXT (decl), current_class_type)
4327           : false)
4328       /* And, if it was a member function, it really was defined in
4329          the scope of the class.  */
4330       && (!DECL_FUNCTION_MEMBER_P (decl)
4331           || DECL_INITIALIZED_IN_CLASS_P (decl)))
4332     /* We already checked these parameters when the template was
4333        declared, so there's no need to do it again now.  This function
4334        was defined in class scope, but we're processing it's body now
4335        that the class is complete.  */
4336     return true;
4337
4338   /* Core issue 226 (C++0x only): the following only applies to class
4339      templates.  */
4340   if (is_primary
4341       && ((cxx_dialect == cxx98) || TREE_CODE (decl) != FUNCTION_DECL))
4342     {
4343       /* [temp.param]
4344
4345          If a template-parameter has a default template-argument, all
4346          subsequent template-parameters shall have a default
4347          template-argument supplied.  */
4348       for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
4349         {
4350           tree inner_parms = TREE_VALUE (parm_level);
4351           int ntparms = TREE_VEC_LENGTH (inner_parms);
4352           int seen_def_arg_p = 0;
4353           int i;
4354
4355           for (i = 0; i < ntparms; ++i)
4356             {
4357               tree parm = TREE_VEC_ELT (inner_parms, i);
4358
4359               if (parm == error_mark_node)
4360                 continue;
4361
4362               if (TREE_PURPOSE (parm))
4363                 seen_def_arg_p = 1;
4364               else if (seen_def_arg_p
4365                        && !template_parameter_pack_p (TREE_VALUE (parm)))
4366                 {
4367                   error ("no default argument for %qD", TREE_VALUE (parm));
4368                   /* For better subsequent error-recovery, we indicate that
4369                      there should have been a default argument.  */
4370                   TREE_PURPOSE (parm) = error_mark_node;
4371                   no_errors = false;
4372                 }
4373               else if (!is_partial
4374                        && !is_friend_decl
4375                        /* Don't complain about an enclosing partial
4376                           specialization.  */
4377                        && parm_level == parms
4378                        && TREE_CODE (decl) == TYPE_DECL
4379                        && i < ntparms - 1
4380                        && template_parameter_pack_p (TREE_VALUE (parm)))
4381                 {
4382                   /* A primary class template can only have one
4383                      parameter pack, at the end of the template
4384                      parameter list.  */
4385
4386                   if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL)
4387                     error ("parameter pack %qE must be at the end of the"
4388                            " template parameter list", TREE_VALUE (parm));
4389                   else
4390                     error ("parameter pack %qT must be at the end of the"
4391                            " template parameter list", 
4392                            TREE_TYPE (TREE_VALUE (parm)));
4393
4394                   TREE_VALUE (TREE_VEC_ELT (inner_parms, i)) 
4395                     = error_mark_node;
4396                   no_errors = false;
4397                 }
4398             }
4399         }
4400     }
4401
4402   if (((cxx_dialect == cxx98) && TREE_CODE (decl) != TYPE_DECL)
4403       || is_partial 
4404       || !is_primary
4405       || is_friend_decl)
4406     /* For an ordinary class template, default template arguments are
4407        allowed at the innermost level, e.g.:
4408          template <class T = int>
4409          struct S {};
4410        but, in a partial specialization, they're not allowed even
4411        there, as we have in [temp.class.spec]:
4412
4413          The template parameter list of a specialization shall not
4414          contain default template argument values.
4415
4416        So, for a partial specialization, or for a function template
4417        (in C++98/C++03), we look at all of them.  */
4418     ;
4419   else
4420     /* But, for a primary class template that is not a partial
4421        specialization we look at all template parameters except the
4422        innermost ones.  */
4423     parms = TREE_CHAIN (parms);
4424
4425   /* Figure out what error message to issue.  */
4426   if (is_friend_decl == 2)
4427     msg = G_("default template arguments may not be used in function template "
4428              "friend re-declaration");
4429   else if (is_friend_decl)
4430     msg = G_("default template arguments may not be used in function template "
4431              "friend declarations");
4432   else if (TREE_CODE (decl) == FUNCTION_DECL && (cxx_dialect == cxx98))
4433     msg = G_("default template arguments may not be used in function templates "
4434              "without -std=c++11 or -std=gnu++11");
4435   else if (is_partial)
4436     msg = G_("default template arguments may not be used in "
4437              "partial specializations");
4438   else
4439     msg = G_("default argument for template parameter for class enclosing %qD");
4440
4441   if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
4442     /* If we're inside a class definition, there's no need to
4443        examine the parameters to the class itself.  On the one
4444        hand, they will be checked when the class is defined, and,
4445        on the other, default arguments are valid in things like:
4446          template <class T = double>
4447          struct S { template <class U> void f(U); };
4448        Here the default argument for `S' has no bearing on the
4449        declaration of `f'.  */
4450     last_level_to_check = template_class_depth (current_class_type) + 1;
4451   else
4452     /* Check everything.  */
4453     last_level_to_check = 0;
4454
4455   for (parm_level = parms;
4456        parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check;
4457        parm_level = TREE_CHAIN (parm_level))
4458     {
4459       tree inner_parms = TREE_VALUE (parm_level);
4460       int i;
4461       int ntparms;
4462
4463       ntparms = TREE_VEC_LENGTH (inner_parms);
4464       for (i = 0; i < ntparms; ++i)
4465         {
4466           if (TREE_VEC_ELT (inner_parms, i) == error_mark_node)
4467             continue;
4468
4469           if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
4470             {
4471               if (msg)
4472                 {
4473                   no_errors = false;
4474                   if (is_friend_decl == 2)
4475                     return no_errors;
4476
4477                   error (msg, decl);
4478                   msg = 0;
4479                 }
4480
4481               /* Clear out the default argument so that we are not
4482                  confused later.  */
4483               TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
4484             }
4485         }
4486
4487       /* At this point, if we're still interested in issuing messages,
4488          they must apply to classes surrounding the object declared.  */
4489       if (msg)
4490         msg = G_("default argument for template parameter for class "
4491                  "enclosing %qD");
4492     }
4493
4494   return no_errors;
4495 }
4496
4497 /* Worker for push_template_decl_real, called via
4498    for_each_template_parm.  DATA is really an int, indicating the
4499    level of the parameters we are interested in.  If T is a template
4500    parameter of that level, return nonzero.  */
4501
4502 static int
4503 template_parm_this_level_p (tree t, void* data)
4504 {
4505   int this_level = *(int *)data;
4506   int level;
4507
4508   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
4509     level = TEMPLATE_PARM_LEVEL (t);
4510   else
4511     level = TEMPLATE_TYPE_LEVEL (t);
4512   return level == this_level;
4513 }
4514
4515 /* Creates a TEMPLATE_DECL for the indicated DECL using the template
4516    parameters given by current_template_args, or reuses a
4517    previously existing one, if appropriate.  Returns the DECL, or an
4518    equivalent one, if it is replaced via a call to duplicate_decls.
4519
4520    If IS_FRIEND is true, DECL is a friend declaration.  */
4521
4522 tree
4523 push_template_decl_real (tree decl, bool is_friend)
4524 {
4525   tree tmpl;
4526   tree args;
4527   tree info;
4528   tree ctx;
4529   bool is_primary;
4530   bool is_partial;
4531   int new_template_p = 0;
4532   /* True if the template is a member template, in the sense of
4533      [temp.mem].  */
4534   bool member_template_p = false;
4535
4536   if (decl == error_mark_node || !current_template_parms)
4537     return error_mark_node;
4538
4539   /* See if this is a partial specialization.  */
4540   is_partial = (DECL_IMPLICIT_TYPEDEF_P (decl)
4541                 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
4542                 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)));
4543
4544   if (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl))
4545     is_friend = true;
4546
4547   if (is_friend)
4548     /* For a friend, we want the context of the friend function, not
4549        the type of which it is a friend.  */
4550     ctx = CP_DECL_CONTEXT (decl);
4551   else if (CP_DECL_CONTEXT (decl)
4552            && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
4553     /* In the case of a virtual function, we want the class in which
4554        it is defined.  */
4555     ctx = CP_DECL_CONTEXT (decl);
4556   else
4557     /* Otherwise, if we're currently defining some class, the DECL
4558        is assumed to be a member of the class.  */
4559     ctx = current_scope ();
4560
4561   if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
4562     ctx = NULL_TREE;
4563
4564   if (!DECL_CONTEXT (decl))
4565     DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
4566
4567   /* See if this is a primary template.  */
4568   if (is_friend && ctx)
4569     /* A friend template that specifies a class context, i.e.
4570          template <typename T> friend void A<T>::f();
4571        is not primary.  */
4572     is_primary = false;
4573   else
4574     is_primary = template_parm_scope_p ();
4575
4576   if (is_primary)
4577     {
4578       if (DECL_CLASS_SCOPE_P (decl))
4579         member_template_p = true;
4580       if (TREE_CODE (decl) == TYPE_DECL
4581           && ANON_AGGRNAME_P (DECL_NAME (decl)))
4582         {
4583           error ("template class without a name");
4584           return error_mark_node;
4585         }
4586       else if (TREE_CODE (decl) == FUNCTION_DECL)
4587         {
4588           if (DECL_DESTRUCTOR_P (decl))
4589             {
4590               /* [temp.mem]
4591
4592                  A destructor shall not be a member template.  */
4593               error ("destructor %qD declared as member template", decl);
4594               return error_mark_node;
4595             }
4596           if (NEW_DELETE_OPNAME_P (DECL_NAME (decl))
4597               && (!prototype_p (TREE_TYPE (decl))
4598                   || TYPE_ARG_TYPES (TREE_TYPE (decl)) == void_list_node
4599                   || !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
4600                   || (TREE_CHAIN (TYPE_ARG_TYPES ((TREE_TYPE (decl))))
4601                       == void_list_node)))
4602             {
4603               /* [basic.stc.dynamic.allocation]
4604
4605                  An allocation function can be a function
4606                  template. ... Template allocation functions shall
4607                  have two or more parameters.  */
4608               error ("invalid template declaration of %qD", decl);
4609               return error_mark_node;
4610             }
4611         }
4612       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
4613                && CLASS_TYPE_P (TREE_TYPE (decl)))
4614         /* OK */;
4615       else if (TREE_CODE (decl) == TYPE_DECL
4616                && TYPE_DECL_ALIAS_P (decl))
4617         /* alias-declaration */
4618         gcc_assert (!DECL_ARTIFICIAL (decl));
4619       else
4620         {
4621           error ("template declaration of %q#D", decl);
4622           return error_mark_node;
4623         }
4624     }
4625
4626   /* Check to see that the rules regarding the use of default
4627      arguments are not being violated.  */
4628   check_default_tmpl_args (decl, current_template_parms,
4629                            is_primary, is_partial, /*is_friend_decl=*/0);
4630
4631   /* Ensure that there are no parameter packs in the type of this
4632      declaration that have not been expanded.  */
4633   if (TREE_CODE (decl) == FUNCTION_DECL)
4634     {
4635       /* Check each of the arguments individually to see if there are
4636          any bare parameter packs.  */
4637       tree type = TREE_TYPE (decl);
4638       tree arg = DECL_ARGUMENTS (decl);
4639       tree argtype = TYPE_ARG_TYPES (type);
4640
4641       while (arg && argtype)
4642         {
4643           if (!FUNCTION_PARAMETER_PACK_P (arg)
4644               && check_for_bare_parameter_packs (TREE_TYPE (arg)))
4645             {
4646             /* This is a PARM_DECL that contains unexpanded parameter
4647                packs. We have already complained about this in the
4648                check_for_bare_parameter_packs call, so just replace
4649                these types with ERROR_MARK_NODE.  */
4650               TREE_TYPE (arg) = error_mark_node;
4651               TREE_VALUE (argtype) = error_mark_node;
4652             }
4653
4654           arg = DECL_CHAIN (arg);
4655           argtype = TREE_CHAIN (argtype);
4656         }
4657
4658       /* Check for bare parameter packs in the return type and the
4659          exception specifiers.  */
4660       if (check_for_bare_parameter_packs (TREE_TYPE (type)))
4661         /* Errors were already issued, set return type to int
4662            as the frontend doesn't expect error_mark_node as
4663            the return type.  */
4664         TREE_TYPE (type) = integer_type_node;
4665       if (check_for_bare_parameter_packs (TYPE_RAISES_EXCEPTIONS (type)))
4666         TYPE_RAISES_EXCEPTIONS (type) = NULL_TREE;
4667     }
4668   else if (check_for_bare_parameter_packs ((TREE_CODE (decl) == TYPE_DECL
4669                                             && TYPE_DECL_ALIAS_P (decl))
4670                                            ? DECL_ORIGINAL_TYPE (decl)
4671                                            : TREE_TYPE (decl)))
4672     {
4673       TREE_TYPE (decl) = error_mark_node;
4674       return error_mark_node;
4675     }
4676
4677   if (is_partial)
4678     return process_partial_specialization (decl);
4679
4680   args = current_template_args ();
4681
4682   if (!ctx
4683       || TREE_CODE (ctx) == FUNCTION_DECL
4684       || (CLASS_TYPE_P (ctx) && TYPE_BEING_DEFINED (ctx))
4685       || (TREE_CODE (decl) == TYPE_DECL
4686           && LAMBDA_TYPE_P (TREE_TYPE (decl)))
4687       || (is_friend && !DECL_TEMPLATE_INFO (decl)))
4688     {
4689       if (DECL_LANG_SPECIFIC (decl)
4690           && DECL_TEMPLATE_INFO (decl)
4691           && DECL_TI_TEMPLATE (decl))
4692         tmpl = DECL_TI_TEMPLATE (decl);
4693       /* If DECL is a TYPE_DECL for a class-template, then there won't
4694          be DECL_LANG_SPECIFIC.  The information equivalent to
4695          DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead.  */
4696       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
4697                && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
4698                && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
4699         {
4700           /* Since a template declaration already existed for this
4701              class-type, we must be redeclaring it here.  Make sure
4702              that the redeclaration is valid.  */
4703           redeclare_class_template (TREE_TYPE (decl),
4704                                     current_template_parms);
4705           /* We don't need to create a new TEMPLATE_DECL; just use the
4706              one we already had.  */
4707           tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
4708         }
4709       else
4710         {
4711           tmpl = build_template_decl (decl, current_template_parms,
4712                                       member_template_p);
4713           new_template_p = 1;
4714
4715           if (DECL_LANG_SPECIFIC (decl)
4716               && DECL_TEMPLATE_SPECIALIZATION (decl))
4717             {
4718               /* A specialization of a member template of a template
4719                  class.  */
4720               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
4721               DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
4722               DECL_TEMPLATE_INFO (decl) = NULL_TREE;
4723             }
4724         }
4725     }
4726   else
4727     {
4728       tree a, t, current, parms;
4729       int i;
4730       tree tinfo = get_template_info (decl);
4731
4732       if (!tinfo)
4733         {
4734           error ("template definition of non-template %q#D", decl);
4735           return error_mark_node;
4736         }
4737
4738       tmpl = TI_TEMPLATE (tinfo);
4739
4740       if (DECL_FUNCTION_TEMPLATE_P (tmpl)
4741           && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
4742           && DECL_TEMPLATE_SPECIALIZATION (decl)
4743           && DECL_MEMBER_TEMPLATE_P (tmpl))
4744         {
4745           tree new_tmpl;
4746
4747           /* The declaration is a specialization of a member
4748              template, declared outside the class.  Therefore, the
4749              innermost template arguments will be NULL, so we
4750              replace them with the arguments determined by the
4751              earlier call to check_explicit_specialization.  */
4752           args = DECL_TI_ARGS (decl);
4753
4754           new_tmpl
4755             = build_template_decl (decl, current_template_parms,
4756                                    member_template_p);
4757           DECL_TEMPLATE_RESULT (new_tmpl) = decl;
4758           TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
4759           DECL_TI_TEMPLATE (decl) = new_tmpl;
4760           SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
4761           DECL_TEMPLATE_INFO (new_tmpl)
4762             = build_template_info (tmpl, args);
4763
4764           register_specialization (new_tmpl,
4765                                    most_general_template (tmpl),
4766                                    args,
4767                                    is_friend, 0);
4768           return decl;
4769         }
4770
4771       /* Make sure the template headers we got make sense.  */
4772
4773       parms = DECL_TEMPLATE_PARMS (tmpl);
4774       i = TMPL_PARMS_DEPTH (parms);
4775       if (TMPL_ARGS_DEPTH (args) != i)
4776         {
4777           error ("expected %d levels of template parms for %q#D, got %d",
4778                  i, decl, TMPL_ARGS_DEPTH (args));
4779         }
4780       else
4781         for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
4782           {
4783             a = TMPL_ARGS_LEVEL (args, i);
4784             t = INNERMOST_TEMPLATE_PARMS (parms);
4785
4786             if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
4787               {
4788                 if (current == decl)
4789                   error ("got %d template parameters for %q#D",
4790                          TREE_VEC_LENGTH (a), decl);
4791                 else
4792                   error ("got %d template parameters for %q#T",
4793                          TREE_VEC_LENGTH (a), current);
4794                 error ("  but %d required", TREE_VEC_LENGTH (t));
4795                 /* Avoid crash in import_export_decl.  */
4796                 DECL_INTERFACE_KNOWN (decl) = 1;
4797                 return error_mark_node;
4798               }
4799
4800             if (current == decl)
4801               current = ctx;
4802             else if (current == NULL_TREE)
4803               /* Can happen in erroneous input.  */
4804               break;
4805             else
4806               current = (TYPE_P (current)
4807                          ? TYPE_CONTEXT (current)
4808                          : DECL_CONTEXT (current));
4809           }
4810
4811       /* Check that the parms are used in the appropriate qualifying scopes
4812          in the declarator.  */
4813       if (!comp_template_args
4814           (TI_ARGS (tinfo),
4815            TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (tmpl)))))
4816         {
4817           error ("\
4818 template arguments to %qD do not match original template %qD",
4819                  decl, DECL_TEMPLATE_RESULT (tmpl));
4820           if (!uses_template_parms (TI_ARGS (tinfo)))
4821             inform (input_location, "use template<> for an explicit specialization");
4822           /* Avoid crash in import_export_decl.  */
4823           DECL_INTERFACE_KNOWN (decl) = 1;
4824           return error_mark_node;
4825         }
4826     }
4827
4828   DECL_TEMPLATE_RESULT (tmpl) = decl;
4829   TREE_TYPE (tmpl) = TREE_TYPE (decl);
4830
4831   /* Push template declarations for global functions and types.  Note
4832      that we do not try to push a global template friend declared in a
4833      template class; such a thing may well depend on the template
4834      parameters of the class.  */
4835   if (new_template_p && !ctx
4836       && !(is_friend && template_class_depth (current_class_type) > 0))
4837     {
4838       tmpl = pushdecl_namespace_level (tmpl, is_friend);
4839       if (tmpl == error_mark_node)
4840         return error_mark_node;
4841
4842       /* Hide template friend classes that haven't been declared yet.  */
4843       if (is_friend && TREE_CODE (decl) == TYPE_DECL)
4844         {
4845           DECL_ANTICIPATED (tmpl) = 1;
4846           DECL_FRIEND_P (tmpl) = 1;
4847         }
4848     }
4849
4850   if (is_primary)
4851     {
4852       tree parms = DECL_TEMPLATE_PARMS (tmpl);
4853       int i;
4854
4855       DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
4856       if (DECL_CONV_FN_P (tmpl))
4857         {
4858           int depth = TMPL_PARMS_DEPTH (parms);
4859
4860           /* It is a conversion operator. See if the type converted to
4861              depends on innermost template operands.  */
4862
4863           if (uses_template_parms_level (TREE_TYPE (TREE_TYPE (tmpl)),
4864                                          depth))
4865             DECL_TEMPLATE_CONV_FN_P (tmpl) = 1;
4866         }
4867
4868       /* Give template template parms a DECL_CONTEXT of the template
4869          for which they are a parameter.  */
4870       parms = INNERMOST_TEMPLATE_PARMS (parms);
4871       for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
4872         {
4873           tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
4874           if (TREE_CODE (parm) == TEMPLATE_DECL)
4875             DECL_CONTEXT (parm) = tmpl;
4876         }
4877     }
4878
4879   /* The DECL_TI_ARGS of DECL contains full set of arguments referring
4880      back to its most general template.  If TMPL is a specialization,
4881      ARGS may only have the innermost set of arguments.  Add the missing
4882      argument levels if necessary.  */
4883   if (DECL_TEMPLATE_INFO (tmpl))
4884     args = add_outermost_template_args (DECL_TI_ARGS (tmpl), args);
4885
4886   info = build_template_info (tmpl, args);
4887
4888   if (DECL_IMPLICIT_TYPEDEF_P (decl))
4889     SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
4890   else
4891     {
4892       if (is_primary && !DECL_LANG_SPECIFIC (decl))
4893         retrofit_lang_decl (decl);
4894       if (DECL_LANG_SPECIFIC (decl))
4895         DECL_TEMPLATE_INFO (decl) = info;
4896     }
4897
4898   return DECL_TEMPLATE_RESULT (tmpl);
4899 }
4900
4901 tree
4902 push_template_decl (tree decl)
4903 {
4904   return push_template_decl_real (decl, false);
4905 }
4906
4907 /* FN is an inheriting constructor that inherits from the constructor
4908    template INHERITED; turn FN into a constructor template with a matching
4909    template header.  */
4910
4911 tree
4912 add_inherited_template_parms (tree fn, tree inherited)
4913 {
4914   tree inner_parms
4915     = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (inherited));
4916   inner_parms = copy_node (inner_parms);
4917   tree parms
4918     = tree_cons (size_int (processing_template_decl + 1),
4919                  inner_parms, current_template_parms);
4920   tree tmpl = build_template_decl (fn, parms, /*member*/true);
4921   tree args = template_parms_to_args (parms);
4922   DECL_TEMPLATE_INFO (fn) = build_template_info (tmpl, args);
4923   TREE_TYPE (tmpl) = TREE_TYPE (fn);
4924   DECL_TEMPLATE_RESULT (tmpl) = fn;
4925   DECL_ARTIFICIAL (tmpl) = true;
4926   DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
4927   return tmpl;
4928 }
4929
4930 /* Called when a class template TYPE is redeclared with the indicated
4931    template PARMS, e.g.:
4932
4933      template <class T> struct S;
4934      template <class T> struct S {};  */
4935
4936 bool
4937 redeclare_class_template (tree type, tree parms)
4938 {
4939   tree tmpl;
4940   tree tmpl_parms;
4941   int i;
4942
4943   if (!TYPE_TEMPLATE_INFO (type))
4944     {
4945       error ("%qT is not a template type", type);
4946       return false;
4947     }
4948
4949   tmpl = TYPE_TI_TEMPLATE (type);
4950   if (!PRIMARY_TEMPLATE_P (tmpl))
4951     /* The type is nested in some template class.  Nothing to worry
4952        about here; there are no new template parameters for the nested
4953        type.  */
4954     return true;
4955
4956   if (!parms)
4957     {
4958       error ("template specifiers not specified in declaration of %qD",
4959              tmpl);
4960       return false;
4961     }
4962
4963   parms = INNERMOST_TEMPLATE_PARMS (parms);
4964   tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
4965
4966   if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
4967     {
4968       error_n (input_location, TREE_VEC_LENGTH (parms),
4969                "redeclared with %d template parameter",
4970                "redeclared with %d template parameters",
4971                TREE_VEC_LENGTH (parms));
4972       inform_n (input_location, TREE_VEC_LENGTH (tmpl_parms),
4973                 "previous declaration %q+D used %d template parameter",
4974                 "previous declaration %q+D used %d template parameters",
4975                 tmpl, TREE_VEC_LENGTH (tmpl_parms));
4976       return false;
4977     }
4978
4979   for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
4980     {
4981       tree tmpl_parm;
4982       tree parm;
4983       tree tmpl_default;
4984       tree parm_default;
4985
4986       if (TREE_VEC_ELT (tmpl_parms, i) == error_mark_node
4987           || TREE_VEC_ELT (parms, i) == error_mark_node)
4988         continue;
4989
4990       tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
4991       if (tmpl_parm == error_mark_node)
4992         return false;
4993
4994       parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
4995       tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
4996       parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
4997
4998       /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
4999          TEMPLATE_DECL.  */
5000       if (TREE_CODE (tmpl_parm) != TREE_CODE (parm)
5001           || (TREE_CODE (tmpl_parm) != TYPE_DECL
5002               && !same_type_p (TREE_TYPE (tmpl_parm), TREE_TYPE (parm)))
5003           || (TREE_CODE (tmpl_parm) != PARM_DECL
5004               && (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (tmpl_parm))
5005                   != TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm))))
5006           || (TREE_CODE (tmpl_parm) == PARM_DECL
5007               && (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (tmpl_parm))
5008                   != TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))))
5009         {
5010           error ("template parameter %q+#D", tmpl_parm);
5011           error ("redeclared here as %q#D", parm);
5012           return false;
5013         }
5014
5015       if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
5016         {
5017           /* We have in [temp.param]:
5018
5019              A template-parameter may not be given default arguments
5020              by two different declarations in the same scope.  */
5021           error_at (input_location, "redefinition of default argument for %q#D", parm);
5022           inform (DECL_SOURCE_LOCATION (tmpl_parm),
5023                   "original definition appeared here");
5024           return false;
5025         }
5026
5027       if (parm_default != NULL_TREE)
5028         /* Update the previous template parameters (which are the ones
5029            that will really count) with the new default value.  */
5030         TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
5031       else if (tmpl_default != NULL_TREE)
5032         /* Update the new parameters, too; they'll be used as the
5033            parameters for any members.  */
5034         TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
5035     }
5036
5037     return true;
5038 }
5039
5040 /* Simplify EXPR if it is a non-dependent expression.  Returns the
5041    (possibly simplified) expression.  */
5042
5043 tree
5044 fold_non_dependent_expr_sfinae (tree expr, tsubst_flags_t complain)
5045 {
5046   if (expr == NULL_TREE)
5047     return NULL_TREE;
5048
5049   /* If we're in a template, but EXPR isn't value dependent, simplify
5050      it.  We're supposed to treat:
5051
5052        template <typename T> void f(T[1 + 1]);
5053        template <typename T> void f(T[2]);
5054
5055      as two declarations of the same function, for example.  */
5056   if (processing_template_decl
5057       && !type_dependent_expression_p (expr)
5058       && potential_constant_expression (expr)
5059       && !value_dependent_expression_p (expr))
5060     {
5061       HOST_WIDE_INT saved_processing_template_decl;
5062
5063       saved_processing_template_decl = processing_template_decl;
5064       processing_template_decl = 0;
5065       expr = tsubst_copy_and_build (expr,
5066                                     /*args=*/NULL_TREE,
5067                                     complain,
5068                                     /*in_decl=*/NULL_TREE,
5069                                     /*function_p=*/false,
5070                                     /*integral_constant_expression_p=*/true);
5071       processing_template_decl = saved_processing_template_decl;
5072     }
5073   return expr;
5074 }
5075
5076 tree
5077 fold_non_dependent_expr (tree expr)
5078 {
5079   return fold_non_dependent_expr_sfinae (expr, tf_error);
5080 }
5081
5082 /* Return TRUE iff T is a type alias, a TEMPLATE_DECL for an alias
5083    template declaration, or a TYPE_DECL for an alias declaration.  */
5084
5085 bool
5086 alias_type_or_template_p (tree t)
5087 {
5088   if (t == NULL_TREE)
5089     return false;
5090   return ((TREE_CODE (t) == TYPE_DECL && TYPE_DECL_ALIAS_P (t))
5091           || (TYPE_P (t)
5092               && TYPE_NAME (t)
5093               && TYPE_DECL_ALIAS_P (TYPE_NAME (t)))
5094           || DECL_ALIAS_TEMPLATE_P (t));
5095 }
5096
5097 /* Return TRUE iff is a specialization of an alias template.  */
5098
5099 bool
5100 alias_template_specialization_p (const_tree t)
5101 {
5102   if (t == NULL_TREE)
5103     return false;
5104   
5105   return (TYPE_P (t)
5106           && TYPE_TEMPLATE_INFO (t)
5107           && PRIMARY_TEMPLATE_P (TYPE_TI_TEMPLATE (t))
5108           && DECL_ALIAS_TEMPLATE_P (TYPE_TI_TEMPLATE (t)));
5109 }
5110
5111 /* Subroutine of convert_nontype_argument. Converts EXPR to TYPE, which
5112    must be a function or a pointer-to-function type, as specified
5113    in [temp.arg.nontype]: disambiguate EXPR if it is an overload set,
5114    and check that the resulting function has external linkage.  */
5115
5116 static tree
5117 convert_nontype_argument_function (tree type, tree expr)
5118 {
5119   tree fns = expr;
5120   tree fn, fn_no_ptr;
5121   linkage_kind linkage;
5122
5123   fn = instantiate_type (type, fns, tf_none);
5124   if (fn == error_mark_node)
5125     return error_mark_node;
5126
5127   fn_no_ptr = fn;
5128   if (TREE_CODE (fn_no_ptr) == ADDR_EXPR)
5129     fn_no_ptr = TREE_OPERAND (fn_no_ptr, 0);
5130   if (BASELINK_P (fn_no_ptr))
5131     fn_no_ptr = BASELINK_FUNCTIONS (fn_no_ptr);
5132  
5133   /* [temp.arg.nontype]/1
5134
5135      A template-argument for a non-type, non-template template-parameter
5136      shall be one of:
5137      [...]
5138      -- the address of an object or function with external [C++11: or
5139         internal] linkage.  */
5140
5141   if (TREE_CODE (fn_no_ptr) != FUNCTION_DECL)
5142     {
5143       error ("%qE is not a valid template argument for type %qT", expr, type);
5144       if (TREE_CODE (type) == POINTER_TYPE)
5145         error ("it must be the address of a function with external linkage");
5146       else
5147         error ("it must be the name of a function with external linkage");
5148       return NULL_TREE;
5149     }
5150
5151   linkage = decl_linkage (fn_no_ptr);
5152   if (cxx_dialect >= cxx0x ? linkage == lk_none : linkage != lk_external)
5153     {
5154       if (cxx_dialect >= cxx0x)
5155         error ("%qE is not a valid template argument for type %qT "
5156                "because %qD has no linkage",
5157                expr, type, fn_no_ptr);
5158       else
5159         error ("%qE is not a valid template argument for type %qT "
5160                "because %qD does not have external linkage",
5161                expr, type, fn_no_ptr);
5162       return NULL_TREE;
5163     }
5164
5165   return fn;
5166 }
5167
5168 /* Subroutine of convert_nontype_argument.
5169    Check if EXPR of type TYPE is a valid pointer-to-member constant.
5170    Emit an error otherwise.  */
5171
5172 static bool
5173 check_valid_ptrmem_cst_expr (tree type, tree expr,
5174                              tsubst_flags_t complain)
5175 {
5176   STRIP_NOPS (expr);
5177   if (expr && (null_ptr_cst_p (expr) || TREE_CODE (expr) == PTRMEM_CST))
5178     return true;
5179   if (cxx_dialect >= cxx0x && null_member_pointer_value_p (expr))
5180     return true;
5181   if (complain & tf_error)
5182     {
5183       error ("%qE is not a valid template argument for type %qT",
5184              expr, type);
5185       error ("it must be a pointer-to-member of the form %<&X::Y%>");
5186     }
5187   return false;
5188 }
5189
5190 /* Returns TRUE iff the address of OP is value-dependent.
5191
5192    14.6.2.4 [temp.dep.temp]:
5193    A non-integral non-type template-argument is dependent if its type is
5194    dependent or it has either of the following forms
5195      qualified-id
5196      & qualified-id
5197    and contains a nested-name-specifier which specifies a class-name that
5198    names a dependent type.
5199
5200    We generalize this to just say that the address of a member of a
5201    dependent class is value-dependent; the above doesn't cover the
5202    address of a static data member named with an unqualified-id.  */
5203
5204 static bool
5205 has_value_dependent_address (tree op)
5206 {
5207   /* We could use get_inner_reference here, but there's no need;
5208      this is only relevant for template non-type arguments, which
5209      can only be expressed as &id-expression.  */
5210   if (DECL_P (op))
5211     {
5212       tree ctx = CP_DECL_CONTEXT (op);
5213       if (TYPE_P (ctx) && dependent_type_p (ctx))
5214         return true;
5215     }
5216
5217   return false;
5218 }
5219
5220 /* The next set of functions are used for providing helpful explanatory
5221    diagnostics for failed overload resolution.  Their messages should be
5222    indented by two spaces for consistency with the messages in
5223    call.c  */
5224
5225 static int
5226 unify_success (bool /*explain_p*/)
5227 {
5228   return 0;
5229 }
5230
5231 static int
5232 unify_parameter_deduction_failure (bool explain_p, tree parm)
5233 {
5234   if (explain_p)
5235     inform (input_location,
5236             "  couldn't deduce template parameter %qD", parm);
5237   return 1;
5238 }
5239
5240 static int
5241 unify_invalid (bool /*explain_p*/)
5242 {
5243   return 1;
5244 }
5245
5246 static int
5247 unify_cv_qual_mismatch (bool explain_p, tree parm, tree arg)
5248 {
5249   if (explain_p)
5250     inform (input_location,
5251             "  types %qT and %qT have incompatible cv-qualifiers",
5252             parm, arg);
5253   return 1;
5254 }
5255
5256 static int
5257 unify_type_mismatch (bool explain_p, tree parm, tree arg)
5258 {
5259   if (explain_p)
5260     inform (input_location, "  mismatched types %qT and %qT", parm, arg);
5261   return 1;
5262 }
5263
5264 static int
5265 unify_parameter_pack_mismatch (bool explain_p, tree parm, tree arg)
5266 {
5267   if (explain_p)
5268     inform (input_location,
5269             "  template parameter %qD is not a parameter pack, but "
5270             "argument %qD is",
5271             parm, arg);
5272   return 1;
5273 }
5274
5275 static int
5276 unify_ptrmem_cst_mismatch (bool explain_p, tree parm, tree arg)
5277 {
5278   if (explain_p)
5279     inform (input_location,
5280             "  template argument %qE does not match "
5281             "pointer-to-member constant %qE",
5282             arg, parm);
5283   return 1;
5284 }
5285
5286 static int
5287 unify_expression_unequal (bool explain_p, tree parm, tree arg)
5288 {
5289   if (explain_p)
5290     inform (input_location, "  %qE is not equivalent to %qE", parm, arg);
5291   return 1;
5292 }
5293
5294 static int
5295 unify_parameter_pack_inconsistent (bool explain_p, tree old_arg, tree new_arg)
5296 {
5297   if (explain_p)
5298     inform (input_location,
5299             "  inconsistent parameter pack deduction with %qT and %qT",
5300             old_arg, new_arg);
5301   return 1;
5302 }
5303
5304 static int
5305 unify_inconsistency (bool explain_p, tree parm, tree first, tree second)
5306 {
5307   if (explain_p)
5308     {
5309       if (TYPE_P (parm))
5310         inform (input_location,
5311                 "  deduced conflicting types for parameter %qT (%qT and %qT)",
5312                 parm, first, second);
5313       else
5314         inform (input_location,
5315                 "  deduced conflicting values for non-type parameter "
5316                 "%qE (%qE and %qE)", parm, first, second);
5317     }
5318   return 1;
5319 }
5320
5321 static int
5322 unify_vla_arg (bool explain_p, tree arg)
5323 {
5324   if (explain_p)
5325     inform (input_location,
5326             "  variable-sized array type %qT is not "
5327             "a valid template argument",
5328             arg);
5329   return 1;
5330 }
5331
5332 static int
5333 unify_method_type_error (bool explain_p, tree arg)
5334 {
5335   if (explain_p)
5336     inform (input_location,
5337             "  member function type %qT is not a valid template argument",
5338             arg);
5339   return 1;
5340 }
5341
5342 static int
5343 unify_arity (bool explain_p, int have, int wanted)
5344 {
5345   if (explain_p)
5346     inform_n (input_location, wanted,
5347               "  candidate expects %d argument, %d provided",
5348               "  candidate expects %d arguments, %d provided",
5349               wanted, have);
5350   return 1;
5351 }
5352
5353 static int
5354 unify_too_many_arguments (bool explain_p, int have, int wanted)
5355 {
5356   return unify_arity (explain_p, have, wanted);
5357 }
5358
5359 static int
5360 unify_too_few_arguments (bool explain_p, int have, int wanted)
5361 {
5362   return unify_arity (explain_p, have, wanted);
5363 }
5364
5365 static int
5366 unify_arg_conversion (bool explain_p, tree to_type,
5367                       tree from_type, tree arg)
5368 {
5369   if (explain_p)
5370     inform (input_location, "  cannot convert %qE (type %qT) to type %qT",
5371             arg, from_type, to_type);
5372   return 1;
5373 }
5374
5375 static int
5376 unify_no_common_base (bool explain_p, enum template_base_result r,
5377                       tree parm, tree arg)
5378 {
5379   if (explain_p)
5380     switch (r)
5381       {
5382       case tbr_ambiguous_baseclass:
5383         inform (input_location, "  %qT is an ambiguous base class of %qT",
5384                 arg, parm);
5385         break;
5386       default:
5387         inform (input_location, "  %qT is not derived from %qT", arg, parm);
5388         break;
5389       }
5390   return 1;
5391 }
5392
5393 static int
5394 unify_inconsistent_template_template_parameters (bool explain_p)
5395 {
5396   if (explain_p)
5397     inform (input_location,
5398             "  template parameters of a template template argument are "
5399             "inconsistent with other deduced template arguments");
5400   return 1;
5401 }
5402
5403 static int
5404 unify_template_deduction_failure (bool explain_p, tree parm, tree arg)
5405 {
5406   if (explain_p)
5407     inform (input_location,
5408             "  can't deduce a template for %qT from non-template type %qT",
5409             parm, arg);
5410   return 1;
5411 }
5412
5413 static int
5414 unify_template_argument_mismatch (bool explain_p, tree parm, tree arg)
5415 {
5416   if (explain_p)
5417     inform (input_location,
5418             "  template argument %qE does not match %qD", arg, parm);
5419   return 1;
5420 }
5421
5422 static int
5423 unify_overload_resolution_failure (bool explain_p, tree arg)
5424 {
5425   if (explain_p)
5426     inform (input_location,
5427             "  could not resolve address from overloaded function %qE",
5428             arg);
5429   return 1;
5430 }
5431
5432 /* Attempt to convert the non-type template parameter EXPR to the
5433    indicated TYPE.  If the conversion is successful, return the
5434    converted value.  If the conversion is unsuccessful, return
5435    NULL_TREE if we issued an error message, or error_mark_node if we
5436    did not.  We issue error messages for out-and-out bad template
5437    parameters, but not simply because the conversion failed, since we
5438    might be just trying to do argument deduction.  Both TYPE and EXPR
5439    must be non-dependent.
5440
5441    The conversion follows the special rules described in
5442    [temp.arg.nontype], and it is much more strict than an implicit
5443    conversion.
5444
5445    This function is called twice for each template argument (see
5446    lookup_template_class for a more accurate description of this
5447    problem). This means that we need to handle expressions which
5448    are not valid in a C++ source, but can be created from the
5449    first call (for instance, casts to perform conversions). These
5450    hacks can go away after we fix the double coercion problem.  */
5451
5452 static tree
5453 convert_nontype_argument (tree type, tree expr, tsubst_flags_t complain)
5454 {
5455   tree expr_type;
5456
5457   /* Detect immediately string literals as invalid non-type argument.
5458      This special-case is not needed for correctness (we would easily
5459      catch this later), but only to provide better diagnostic for this
5460      common user mistake. As suggested by DR 100, we do not mention
5461      linkage issues in the diagnostic as this is not the point.  */
5462   /* FIXME we're making this OK.  */
5463   if (TREE_CODE (expr) == STRING_CST)
5464     {
5465       if (complain & tf_error)
5466         error ("%qE is not a valid template argument for type %qT "
5467                "because string literals can never be used in this context",
5468                expr, type);
5469       return NULL_TREE;
5470     }
5471
5472   /* Add the ADDR_EXPR now for the benefit of
5473      value_dependent_expression_p.  */
5474   if (TYPE_PTROBV_P (type)
5475       && TREE_CODE (TREE_TYPE (expr)) == ARRAY_TYPE)
5476     {
5477       expr = decay_conversion (expr, complain);
5478       if (expr == error_mark_node)
5479         return error_mark_node;
5480     }
5481
5482   /* If we are in a template, EXPR may be non-dependent, but still
5483      have a syntactic, rather than semantic, form.  For example, EXPR
5484      might be a SCOPE_REF, rather than the VAR_DECL to which the
5485      SCOPE_REF refers.  Preserving the qualifying scope is necessary
5486      so that access checking can be performed when the template is
5487      instantiated -- but here we need the resolved form so that we can
5488      convert the argument.  */
5489   if (TYPE_REF_OBJ_P (type)
5490       && has_value_dependent_address (expr))
5491     /* If we want the address and it's value-dependent, don't fold.  */;
5492   else if (!type_unknown_p (expr))
5493     expr = fold_non_dependent_expr_sfinae (expr, complain);
5494   if (error_operand_p (expr))
5495     return error_mark_node;
5496   expr_type = TREE_TYPE (expr);
5497   if (TREE_CODE (type) == REFERENCE_TYPE)
5498     expr = mark_lvalue_use (expr);
5499   else
5500     expr = mark_rvalue_use (expr);
5501
5502   /* 14.3.2/5: The null pointer{,-to-member} conversion is applied
5503      to a non-type argument of "nullptr".  */
5504   if (expr == nullptr_node && TYPE_PTR_OR_PTRMEM_P (type))
5505     expr = convert (type, expr);
5506
5507   /* In C++11, integral or enumeration non-type template arguments can be
5508      arbitrary constant expressions.  Pointer and pointer to
5509      member arguments can be general constant expressions that evaluate
5510      to a null value, but otherwise still need to be of a specific form.  */
5511   if (cxx_dialect >= cxx0x)
5512     {
5513       if (TREE_CODE (expr) == PTRMEM_CST)
5514         /* A PTRMEM_CST is already constant, and a valid template
5515            argument for a parameter of pointer to member type, we just want
5516            to leave it in that form rather than lower it to a
5517            CONSTRUCTOR.  */;
5518       else if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
5519         expr = maybe_constant_value (expr);
5520       else if (TYPE_PTR_OR_PTRMEM_P (type))
5521         {
5522           tree folded = maybe_constant_value (expr);
5523           if (TYPE_PTR_P (type) ? integer_zerop (folded)
5524               : null_member_pointer_value_p (folded))
5525             expr = folded;
5526         }
5527     }
5528
5529   /* HACK: Due to double coercion, we can get a
5530      NOP_EXPR<REFERENCE_TYPE>(ADDR_EXPR<POINTER_TYPE> (arg)) here,
5531      which is the tree that we built on the first call (see
5532      below when coercing to reference to object or to reference to
5533      function). We just strip everything and get to the arg.
5534      See g++.old-deja/g++.oliva/template4.C and g++.dg/template/nontype9.C
5535      for examples.  */
5536   if (TYPE_REF_OBJ_P (type) || TYPE_REFFN_P (type))
5537     {
5538       tree probe_type, probe = expr;
5539       if (REFERENCE_REF_P (probe))
5540         probe = TREE_OPERAND (probe, 0);
5541       probe_type = TREE_TYPE (probe);
5542       if (TREE_CODE (probe) == NOP_EXPR)
5543         {
5544           /* ??? Maybe we could use convert_from_reference here, but we
5545              would need to relax its constraints because the NOP_EXPR
5546              could actually change the type to something more cv-qualified,
5547              and this is not folded by convert_from_reference.  */
5548           tree addr = TREE_OPERAND (probe, 0);
5549           if (TREE_CODE (probe_type) == REFERENCE_TYPE
5550               && TREE_CODE (addr) == ADDR_EXPR
5551               && TREE_CODE (TREE_TYPE (addr)) == POINTER_TYPE
5552               && (same_type_ignoring_top_level_qualifiers_p
5553                   (TREE_TYPE (probe_type),
5554                    TREE_TYPE (TREE_TYPE (addr)))))
5555             {
5556               expr = TREE_OPERAND (addr, 0);
5557               expr_type = TREE_TYPE (expr);
5558             }
5559         }
5560     }
5561
5562   /* We could also generate a NOP_EXPR(ADDR_EXPR()) when the
5563      parameter is a pointer to object, through decay and
5564      qualification conversion. Let's strip everything.  */
5565   else if (TREE_CODE (expr) == NOP_EXPR && TYPE_PTROBV_P (type))
5566     {
5567       STRIP_NOPS (expr);
5568       gcc_assert (TREE_CODE (expr) == ADDR_EXPR);
5569       gcc_assert (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE);
5570       /* Skip the ADDR_EXPR only if it is part of the decay for
5571          an array. Otherwise, it is part of the original argument
5572          in the source code.  */
5573       if (TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == ARRAY_TYPE)
5574         expr = TREE_OPERAND (expr, 0);
5575       expr_type = TREE_TYPE (expr);
5576     }
5577
5578   /* [temp.arg.nontype]/5, bullet 1
5579
5580      For a non-type template-parameter of integral or enumeration type,
5581      integral promotions (_conv.prom_) and integral conversions
5582      (_conv.integral_) are applied.  */
5583   if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
5584     {
5585       tree t = build_integral_nontype_arg_conv (type, expr, complain);
5586       t = maybe_constant_value (t);
5587       if (t != error_mark_node)
5588         expr = t;
5589
5590       if (!same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (expr)))
5591         return error_mark_node;
5592
5593       /* Notice that there are constant expressions like '4 % 0' which
5594          do not fold into integer constants.  */
5595       if (TREE_CODE (expr) != INTEGER_CST)
5596         {
5597           if (complain & tf_error)
5598             {
5599               int errs = errorcount, warns = warningcount;
5600               if (processing_template_decl
5601                   && !require_potential_constant_expression (expr))
5602                 return NULL_TREE;
5603               expr = cxx_constant_value (expr);
5604               if (errorcount > errs || warningcount > warns)
5605                 inform (EXPR_LOC_OR_HERE (expr),
5606                         "in template argument for type %qT ", type);
5607               if (expr == error_mark_node)
5608                 return NULL_TREE;
5609               /* else cxx_constant_value complained but gave us
5610                  a real constant, so go ahead.  */
5611               gcc_assert (TREE_CODE (expr) == INTEGER_CST);
5612             }
5613           else
5614             return NULL_TREE;
5615         }
5616
5617       /* Avoid typedef problems.  */
5618       if (TREE_TYPE (expr) != type)
5619         expr = fold_convert (type, expr);
5620     }
5621   /* [temp.arg.nontype]/5, bullet 2
5622
5623      For a non-type template-parameter of type pointer to object,
5624      qualification conversions (_conv.qual_) and the array-to-pointer
5625      conversion (_conv.array_) are applied.  */
5626   else if (TYPE_PTROBV_P (type))
5627     {
5628       /* [temp.arg.nontype]/1  (TC1 version, DR 49):
5629
5630          A template-argument for a non-type, non-template template-parameter
5631          shall be one of: [...]
5632
5633          -- the name of a non-type template-parameter;
5634          -- the address of an object or function with external linkage, [...]
5635             expressed as "& id-expression" where the & is optional if the name
5636             refers to a function or array, or if the corresponding
5637             template-parameter is a reference.
5638
5639         Here, we do not care about functions, as they are invalid anyway
5640         for a parameter of type pointer-to-object.  */
5641
5642       if (DECL_P (expr) && DECL_TEMPLATE_PARM_P (expr))
5643         /* Non-type template parameters are OK.  */
5644         ;
5645       else if (cxx_dialect >= cxx0x && integer_zerop (expr))
5646         /* Null pointer values are OK in C++11.  */;
5647       else if (TREE_CODE (expr) != ADDR_EXPR
5648                && TREE_CODE (expr_type) != ARRAY_TYPE)
5649         {
5650           if (TREE_CODE (expr) == VAR_DECL)
5651             {
5652               error ("%qD is not a valid template argument "
5653                      "because %qD is a variable, not the address of "
5654                      "a variable",
5655                      expr, expr);
5656               return NULL_TREE;
5657             }
5658           /* Other values, like integer constants, might be valid
5659              non-type arguments of some other type.  */
5660           return error_mark_node;
5661         }
5662       else
5663         {
5664           tree decl;
5665
5666           decl = ((TREE_CODE (expr) == ADDR_EXPR)
5667                   ? TREE_OPERAND (expr, 0) : expr);
5668           if (TREE_CODE (decl) != VAR_DECL)
5669             {
5670               error ("%qE is not a valid template argument of type %qT "
5671                      "because %qE is not a variable",
5672                      expr, type, decl);
5673               return NULL_TREE;
5674             }
5675           else if (cxx_dialect < cxx0x && !DECL_EXTERNAL_LINKAGE_P (decl))
5676             {
5677               error ("%qE is not a valid template argument of type %qT "
5678                      "because %qD does not have external linkage",
5679                      expr, type, decl);
5680               return NULL_TREE;
5681             }
5682           else if (cxx_dialect >= cxx0x && decl_linkage (decl) == lk_none)
5683             {
5684               error ("%qE is not a valid template argument of type %qT "
5685                      "because %qD has no linkage",
5686                      expr, type, decl);
5687               return NULL_TREE;
5688             }
5689         }
5690
5691       expr = decay_conversion (expr, complain);
5692       if (expr == error_mark_node)
5693         return error_mark_node;
5694
5695       expr = perform_qualification_conversions (type, expr);
5696       if (expr == error_mark_node)
5697         return error_mark_node;
5698     }
5699   /* [temp.arg.nontype]/5, bullet 3
5700
5701      For a non-type template-parameter of type reference to object, no
5702      conversions apply. The type referred to by the reference may be more
5703      cv-qualified than the (otherwise identical) type of the
5704      template-argument. The template-parameter is bound directly to the
5705      template-argument, which must be an lvalue.  */
5706   else if (TYPE_REF_OBJ_P (type))
5707     {
5708       if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type),
5709                                                       expr_type))
5710         return error_mark_node;
5711
5712       if (!at_least_as_qualified_p (TREE_TYPE (type), expr_type))
5713         {
5714           error ("%qE is not a valid template argument for type %qT "
5715                  "because of conflicts in cv-qualification", expr, type);
5716           return NULL_TREE;
5717         }
5718
5719       if (!real_lvalue_p (expr))
5720         {
5721           error ("%qE is not a valid template argument for type %qT "
5722                  "because it is not an lvalue", expr, type);
5723           return NULL_TREE;
5724         }
5725
5726       /* [temp.arg.nontype]/1
5727
5728          A template-argument for a non-type, non-template template-parameter
5729          shall be one of: [...]
5730
5731          -- the address of an object or function with external linkage.  */
5732       if (TREE_CODE (expr) == INDIRECT_REF
5733           && TYPE_REF_OBJ_P (TREE_TYPE (TREE_OPERAND (expr, 0))))
5734         {
5735           expr = TREE_OPERAND (expr, 0);
5736           if (DECL_P (expr))
5737             {
5738               error ("%q#D is not a valid template argument for type %qT "
5739                      "because a reference variable does not have a constant "
5740                      "address", expr, type);
5741               return NULL_TREE;
5742             }
5743         }
5744
5745       if (!DECL_P (expr))
5746         {
5747           error ("%qE is not a valid template argument for type %qT "
5748                  "because it is not an object with external linkage",
5749                  expr, type);
5750           return NULL_TREE;
5751         }
5752
5753       if (!DECL_EXTERNAL_LINKAGE_P (expr))
5754         {
5755           error ("%qE is not a valid template argument for type %qT "
5756                  "because object %qD has not external linkage",
5757                  expr, type, expr);
5758           return NULL_TREE;
5759         }
5760
5761       expr = build_nop (type, build_address (expr));
5762     }
5763   /* [temp.arg.nontype]/5, bullet 4
5764
5765      For a non-type template-parameter of type pointer to function, only
5766      the function-to-pointer conversion (_conv.func_) is applied. If the
5767      template-argument represents a set of overloaded functions (or a
5768      pointer to such), the matching function is selected from the set
5769      (_over.over_).  */
5770   else if (TYPE_PTRFN_P (type))
5771     {
5772       /* If the argument is a template-id, we might not have enough
5773          context information to decay the pointer.  */
5774       if (!type_unknown_p (expr_type))
5775         {
5776           expr = decay_conversion (expr, complain);
5777           if (expr == error_mark_node)
5778             return error_mark_node;
5779         }
5780
5781       if (cxx_dialect >= cxx0x && integer_zerop (expr))
5782         /* Null pointer values are OK in C++11.  */
5783         return perform_qualification_conversions (type, expr);
5784
5785       expr = convert_nontype_argument_function (type, expr);
5786       if (!expr || expr == error_mark_node)
5787         return expr;
5788     }
5789   /* [temp.arg.nontype]/5, bullet 5
5790
5791      For a non-type template-parameter of type reference to function, no
5792      conversions apply. If the template-argument represents a set of
5793      overloaded functions, the matching function is selected from the set
5794      (_over.over_).  */
5795   else if (TYPE_REFFN_P (type))
5796     {
5797       if (TREE_CODE (expr) == ADDR_EXPR)
5798         {
5799           error ("%qE is not a valid template argument for type %qT "
5800                  "because it is a pointer", expr, type);
5801           inform (input_location, "try using %qE instead", TREE_OPERAND (expr, 0));
5802           return NULL_TREE;
5803         }
5804
5805       expr = convert_nontype_argument_function (TREE_TYPE (type), expr);
5806       if (!expr || expr == error_mark_node)
5807         return expr;
5808
5809       expr = build_nop (type, build_address (expr));
5810     }
5811   /* [temp.arg.nontype]/5, bullet 6
5812
5813      For a non-type template-parameter of type pointer to member function,
5814      no conversions apply. If the template-argument represents a set of
5815      overloaded member functions, the matching member function is selected
5816      from the set (_over.over_).  */
5817   else if (TYPE_PTRMEMFUNC_P (type))
5818     {
5819       expr = instantiate_type (type, expr, tf_none);
5820       if (expr == error_mark_node)
5821         return error_mark_node;
5822
5823       /* [temp.arg.nontype] bullet 1 says the pointer to member
5824          expression must be a pointer-to-member constant.  */
5825       if (!check_valid_ptrmem_cst_expr (type, expr, complain))
5826         return error_mark_node;
5827
5828       /* There is no way to disable standard conversions in
5829          resolve_address_of_overloaded_function (called by
5830          instantiate_type). It is possible that the call succeeded by
5831          converting &B::I to &D::I (where B is a base of D), so we need
5832          to reject this conversion here.
5833
5834          Actually, even if there was a way to disable standard conversions,
5835          it would still be better to reject them here so that we can
5836          provide a superior diagnostic.  */
5837       if (!same_type_p (TREE_TYPE (expr), type))
5838         {
5839           error ("%qE is not a valid template argument for type %qT "
5840                  "because it is of type %qT", expr, type,
5841                  TREE_TYPE (expr));
5842           /* If we are just one standard conversion off, explain.  */
5843           if (can_convert (type, TREE_TYPE (expr), complain))
5844             inform (input_location,
5845                     "standard conversions are not allowed in this context");
5846           return NULL_TREE;
5847         }
5848     }
5849   /* [temp.arg.nontype]/5, bullet 7
5850
5851      For a non-type template-parameter of type pointer to data member,
5852      qualification conversions (_conv.qual_) are applied.  */
5853   else if (TYPE_PTRDATAMEM_P (type))
5854     {
5855       /* [temp.arg.nontype] bullet 1 says the pointer to member
5856          expression must be a pointer-to-member constant.  */
5857       if (!check_valid_ptrmem_cst_expr (type, expr, complain))
5858         return error_mark_node;
5859
5860       expr = perform_qualification_conversions (type, expr);
5861       if (expr == error_mark_node)
5862         return expr;
5863     }
5864   else if (NULLPTR_TYPE_P (type))
5865     {
5866       if (expr != nullptr_node)
5867         {
5868           error ("%qE is not a valid template argument for type %qT "
5869                  "because it is of type %qT", expr, type, TREE_TYPE (expr));
5870           return NULL_TREE;
5871         }
5872       return expr;
5873     }
5874   /* A template non-type parameter must be one of the above.  */
5875   else
5876     gcc_unreachable ();
5877
5878   /* Sanity check: did we actually convert the argument to the
5879      right type?  */
5880   gcc_assert (same_type_ignoring_top_level_qualifiers_p
5881               (type, TREE_TYPE (expr)));
5882   return expr;
5883 }
5884
5885 /* Subroutine of coerce_template_template_parms, which returns 1 if
5886    PARM_PARM and ARG_PARM match using the rule for the template
5887    parameters of template template parameters. Both PARM and ARG are
5888    template parameters; the rest of the arguments are the same as for
5889    coerce_template_template_parms.
5890  */
5891 static int
5892 coerce_template_template_parm (tree parm,
5893                               tree arg,
5894                               tsubst_flags_t complain,
5895                               tree in_decl,
5896                               tree outer_args)
5897 {
5898   if (arg == NULL_TREE || arg == error_mark_node
5899       || parm == NULL_TREE || parm == error_mark_node)
5900     return 0;
5901   
5902   if (TREE_CODE (arg) != TREE_CODE (parm))
5903     return 0;
5904   
5905   switch (TREE_CODE (parm))
5906     {
5907     case TEMPLATE_DECL:
5908       /* We encounter instantiations of templates like
5909          template <template <template <class> class> class TT>
5910          class C;  */
5911       {
5912         tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
5913         tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
5914         
5915         if (!coerce_template_template_parms
5916             (parmparm, argparm, complain, in_decl, outer_args))
5917           return 0;
5918       }
5919       /* Fall through.  */
5920       
5921     case TYPE_DECL:
5922       if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (arg))
5923           && !TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
5924         /* Argument is a parameter pack but parameter is not.  */
5925         return 0;
5926       break;
5927       
5928     case PARM_DECL:
5929       /* The tsubst call is used to handle cases such as
5930          
5931            template <int> class C {};
5932            template <class T, template <T> class TT> class D {};
5933            D<int, C> d;
5934
5935          i.e. the parameter list of TT depends on earlier parameters.  */
5936       if (!uses_template_parms (TREE_TYPE (arg))
5937           && !same_type_p
5938                 (tsubst (TREE_TYPE (parm), outer_args, complain, in_decl),
5939                  TREE_TYPE (arg)))
5940         return 0;
5941       
5942       if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (arg))
5943           && !TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
5944         /* Argument is a parameter pack but parameter is not.  */
5945         return 0;
5946       
5947       break;
5948
5949     default:
5950       gcc_unreachable ();
5951     }
5952
5953   return 1;
5954 }
5955
5956
5957 /* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
5958    template template parameters.  Both PARM_PARMS and ARG_PARMS are
5959    vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
5960    or PARM_DECL.
5961
5962    Consider the example:
5963      template <class T> class A;
5964      template<template <class U> class TT> class B;
5965
5966    For B<A>, PARM_PARMS are the parameters to TT, while ARG_PARMS are
5967    the parameters to A, and OUTER_ARGS contains A.  */
5968
5969 static int
5970 coerce_template_template_parms (tree parm_parms,
5971                                 tree arg_parms,
5972                                 tsubst_flags_t complain,
5973                                 tree in_decl,
5974                                 tree outer_args)
5975 {
5976   int nparms, nargs, i;
5977   tree parm, arg;
5978   int variadic_p = 0;
5979
5980   gcc_assert (TREE_CODE (parm_parms) == TREE_VEC);
5981   gcc_assert (TREE_CODE (arg_parms) == TREE_VEC);
5982
5983   nparms = TREE_VEC_LENGTH (parm_parms);
5984   nargs = TREE_VEC_LENGTH (arg_parms);
5985
5986   /* Determine whether we have a parameter pack at the end of the
5987      template template parameter's template parameter list.  */
5988   if (TREE_VEC_ELT (parm_parms, nparms - 1) != error_mark_node)
5989     {
5990       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, nparms - 1));
5991       
5992       if (parm == error_mark_node)
5993         return 0;
5994
5995       switch (TREE_CODE (parm))
5996         {
5997         case TEMPLATE_DECL:
5998         case TYPE_DECL:
5999           if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
6000             variadic_p = 1;
6001           break;
6002           
6003         case PARM_DECL:
6004           if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
6005             variadic_p = 1;
6006           break;
6007           
6008         default:
6009           gcc_unreachable ();
6010         }
6011     }
6012  
6013   if (nargs != nparms
6014       && !(variadic_p && nargs >= nparms - 1))
6015     return 0;
6016
6017   /* Check all of the template parameters except the parameter pack at
6018      the end (if any).  */
6019   for (i = 0; i < nparms - variadic_p; ++i)
6020     {
6021       if (TREE_VEC_ELT (parm_parms, i) == error_mark_node
6022           || TREE_VEC_ELT (arg_parms, i) == error_mark_node)
6023         continue;
6024
6025       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
6026       arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
6027
6028       if (!coerce_template_template_parm (parm, arg, complain, in_decl,
6029                                           outer_args))
6030         return 0;
6031
6032     }
6033
6034   if (variadic_p)
6035     {
6036       /* Check each of the template parameters in the template
6037          argument against the template parameter pack at the end of
6038          the template template parameter.  */
6039       if (TREE_VEC_ELT (parm_parms, i) == error_mark_node)
6040         return 0;
6041
6042       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
6043
6044       for (; i < nargs; ++i)
6045         {
6046           if (TREE_VEC_ELT (arg_parms, i) == error_mark_node)
6047             continue;
6048  
6049           arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
6050  
6051           if (!coerce_template_template_parm (parm, arg, complain, in_decl,
6052                                               outer_args))
6053             return 0;
6054         }
6055     }
6056
6057   return 1;
6058 }
6059
6060 /* Verifies that the deduced template arguments (in TARGS) for the
6061    template template parameters (in TPARMS) represent valid bindings,
6062    by comparing the template parameter list of each template argument
6063    to the template parameter list of its corresponding template
6064    template parameter, in accordance with DR150. This
6065    routine can only be called after all template arguments have been
6066    deduced. It will return TRUE if all of the template template
6067    parameter bindings are okay, FALSE otherwise.  */
6068 bool 
6069 template_template_parm_bindings_ok_p (tree tparms, tree targs)
6070 {
6071   int i, ntparms = TREE_VEC_LENGTH (tparms);
6072   bool ret = true;
6073
6074   /* We're dealing with template parms in this process.  */
6075   ++processing_template_decl;
6076
6077   targs = INNERMOST_TEMPLATE_ARGS (targs);
6078
6079   for (i = 0; i < ntparms; ++i)
6080     {
6081       tree tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
6082       tree targ = TREE_VEC_ELT (targs, i);
6083
6084       if (TREE_CODE (tparm) == TEMPLATE_DECL && targ)
6085         {
6086           tree packed_args = NULL_TREE;
6087           int idx, len = 1;
6088
6089           if (ARGUMENT_PACK_P (targ))
6090             {
6091               /* Look inside the argument pack.  */
6092               packed_args = ARGUMENT_PACK_ARGS (targ);
6093               len = TREE_VEC_LENGTH (packed_args);
6094             }
6095
6096           for (idx = 0; idx < len; ++idx)
6097             {
6098               tree targ_parms = NULL_TREE;
6099
6100               if (packed_args)
6101                 /* Extract the next argument from the argument
6102                    pack.  */
6103                 targ = TREE_VEC_ELT (packed_args, idx);
6104
6105               if (PACK_EXPANSION_P (targ))
6106                 /* Look at the pattern of the pack expansion.  */
6107                 targ = PACK_EXPANSION_PATTERN (targ);
6108
6109               /* Extract the template parameters from the template
6110                  argument.  */
6111               if (TREE_CODE (targ) == TEMPLATE_DECL)
6112                 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (targ);
6113               else if (TREE_CODE (targ) == TEMPLATE_TEMPLATE_PARM)
6114                 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_NAME (targ));
6115
6116               /* Verify that we can coerce the template template
6117                  parameters from the template argument to the template
6118                  parameter.  This requires an exact match.  */
6119               if (targ_parms
6120                   && !coerce_template_template_parms
6121                        (DECL_INNERMOST_TEMPLATE_PARMS (tparm),
6122                         targ_parms,
6123                         tf_none,
6124                         tparm,
6125                         targs))
6126                 {
6127                   ret = false;
6128                   goto out;
6129                 }
6130             }
6131         }
6132     }
6133
6134  out:
6135
6136   --processing_template_decl;
6137   return ret;
6138 }
6139
6140 /* Since type attributes aren't mangled, we need to strip them from
6141    template type arguments.  */
6142
6143 static tree
6144 canonicalize_type_argument (tree arg, tsubst_flags_t complain)
6145 {
6146   tree mv;
6147   if (!arg || arg == error_mark_node || arg == TYPE_CANONICAL (arg))
6148     return arg;
6149   mv = TYPE_MAIN_VARIANT (arg);
6150   arg = strip_typedefs (arg);
6151   if (TYPE_ALIGN (arg) != TYPE_ALIGN (mv)
6152       || TYPE_ATTRIBUTES (arg) != TYPE_ATTRIBUTES (mv))
6153     {
6154       if (complain & tf_warning)
6155         warning (0, "ignoring attributes on template argument %qT", arg);
6156       arg = build_aligned_type (arg, TYPE_ALIGN (mv));
6157       arg = cp_build_type_attribute_variant (arg, TYPE_ATTRIBUTES (mv));
6158     }
6159   return arg;
6160 }
6161
6162 /* Convert the indicated template ARG as necessary to match the
6163    indicated template PARM.  Returns the converted ARG, or
6164    error_mark_node if the conversion was unsuccessful.  Error and
6165    warning messages are issued under control of COMPLAIN.  This
6166    conversion is for the Ith parameter in the parameter list.  ARGS is
6167    the full set of template arguments deduced so far.  */
6168
6169 static tree
6170 convert_template_argument (tree parm,
6171                            tree arg,
6172                            tree args,
6173                            tsubst_flags_t complain,
6174                            int i,
6175                            tree in_decl)
6176 {
6177   tree orig_arg;
6178   tree val;
6179   int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
6180
6181   if (TREE_CODE (arg) == TREE_LIST
6182       && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
6183     {
6184       /* The template argument was the name of some
6185          member function.  That's usually
6186          invalid, but static members are OK.  In any
6187          case, grab the underlying fields/functions
6188          and issue an error later if required.  */
6189       orig_arg = TREE_VALUE (arg);
6190       TREE_TYPE (arg) = unknown_type_node;
6191     }
6192
6193   orig_arg = arg;
6194
6195   requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
6196   requires_type = (TREE_CODE (parm) == TYPE_DECL
6197                    || requires_tmpl_type);
6198
6199   /* When determining whether an argument pack expansion is a template,
6200      look at the pattern.  */
6201   if (TREE_CODE (arg) == TYPE_PACK_EXPANSION)
6202     arg = PACK_EXPANSION_PATTERN (arg);
6203
6204   /* Deal with an injected-class-name used as a template template arg.  */
6205   if (requires_tmpl_type && CLASS_TYPE_P (arg))
6206     {
6207       tree t = maybe_get_template_decl_from_type_decl (TYPE_NAME (arg));
6208       if (TREE_CODE (t) == TEMPLATE_DECL)
6209         {
6210           if (cxx_dialect >= cxx0x)
6211             /* OK under DR 1004.  */;
6212           else if (complain & tf_warning_or_error)
6213             pedwarn (input_location, OPT_Wpedantic, "injected-class-name %qD"
6214                      " used as template template argument", TYPE_NAME (arg));
6215           else if (flag_pedantic_errors)
6216             t = arg;
6217
6218           arg = t;
6219         }
6220     }
6221
6222   is_tmpl_type = 
6223     ((TREE_CODE (arg) == TEMPLATE_DECL
6224       && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
6225      || (requires_tmpl_type && TREE_CODE (arg) == TYPE_ARGUMENT_PACK)
6226      || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
6227      || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
6228
6229   if (is_tmpl_type
6230       && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
6231           || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
6232     arg = TYPE_STUB_DECL (arg);
6233
6234   is_type = TYPE_P (arg) || is_tmpl_type;
6235
6236   if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
6237       && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
6238     {
6239       if (TREE_CODE (TREE_OPERAND (arg, 1)) == BIT_NOT_EXPR)
6240         {
6241           if (complain & tf_error)
6242             error ("invalid use of destructor %qE as a type", orig_arg);
6243           return error_mark_node;
6244         }
6245
6246       permerror (input_location,
6247                  "to refer to a type member of a template parameter, "
6248                  "use %<typename %E%>", orig_arg);
6249
6250       orig_arg = make_typename_type (TREE_OPERAND (arg, 0),
6251                                      TREE_OPERAND (arg, 1),
6252                                      typename_type,
6253                                      complain);
6254       arg = orig_arg;
6255       is_type = 1;
6256     }
6257   if (is_type != requires_type)
6258     {
6259       if (in_decl)
6260         {
6261           if (complain & tf_error)
6262             {
6263               error ("type/value mismatch at argument %d in template "
6264                      "parameter list for %qD",
6265                      i + 1, in_decl);
6266               if (is_type)
6267                 error ("  expected a constant of type %qT, got %qT",
6268                        TREE_TYPE (parm),
6269                        (DECL_P (arg) ? DECL_NAME (arg) : orig_arg));
6270               else if (requires_tmpl_type)
6271                 error ("  expected a class template, got %qE", orig_arg);
6272               else
6273                 error ("  expected a type, got %qE", orig_arg);
6274             }
6275         }
6276       return error_mark_node;
6277     }
6278   if (is_tmpl_type ^ requires_tmpl_type)
6279     {
6280       if (in_decl && (complain & tf_error))
6281         {
6282           error ("type/value mismatch at argument %d in template "
6283                  "parameter list for %qD",
6284                  i + 1, in_decl);
6285           if (is_tmpl_type)
6286             error ("  expected a type, got %qT", DECL_NAME (arg));
6287           else
6288             error ("  expected a class template, got %qT", orig_arg);
6289         }
6290       return error_mark_node;
6291     }
6292
6293   if (is_type)
6294     {
6295       if (requires_tmpl_type)
6296         {
6297           if (template_parameter_pack_p (parm) && ARGUMENT_PACK_P (orig_arg))
6298             val = orig_arg;
6299           else if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
6300             /* The number of argument required is not known yet.
6301                Just accept it for now.  */
6302             val = TREE_TYPE (arg);
6303           else
6304             {
6305               tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
6306               tree argparm;
6307
6308               argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
6309
6310               if (coerce_template_template_parms (parmparm, argparm,
6311                                                   complain, in_decl,
6312                                                   args))
6313                 {
6314                   val = arg;
6315
6316                   /* TEMPLATE_TEMPLATE_PARM node is preferred over
6317                      TEMPLATE_DECL.  */
6318                   if (val != error_mark_node)
6319                     {
6320                       if (DECL_TEMPLATE_TEMPLATE_PARM_P (val))
6321                         val = TREE_TYPE (val);
6322                       if (TREE_CODE (orig_arg) == TYPE_PACK_EXPANSION)
6323                         val = make_pack_expansion (val);
6324                     }
6325                 }
6326               else
6327                 {
6328                   if (in_decl && (complain & tf_error))
6329                     {
6330                       error ("type/value mismatch at argument %d in "
6331                              "template parameter list for %qD",
6332                              i + 1, in_decl);
6333                       error ("  expected a template of type %qD, got %qT",
6334                              parm, orig_arg);
6335                     }
6336
6337                   val = error_mark_node;
6338                 }
6339             }
6340         }
6341       else
6342         val = orig_arg;
6343       /* We only form one instance of each template specialization.
6344          Therefore, if we use a non-canonical variant (i.e., a
6345          typedef), any future messages referring to the type will use
6346          the typedef, which is confusing if those future uses do not
6347          themselves also use the typedef.  */
6348       if (TYPE_P (val))
6349         val = canonicalize_type_argument (val, complain);
6350     }
6351   else
6352     {
6353       tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
6354
6355       if (invalid_nontype_parm_type_p (t, complain))
6356         return error_mark_node;
6357
6358       if (template_parameter_pack_p (parm) && ARGUMENT_PACK_P (orig_arg))
6359         {
6360           if (same_type_p (t, TREE_TYPE (orig_arg)))
6361             val = orig_arg;
6362           else
6363             {
6364               /* Not sure if this is reachable, but it doesn't hurt
6365                  to be robust.  */
6366               error ("type mismatch in nontype parameter pack");
6367               val = error_mark_node;
6368             }
6369         }
6370       else if (!dependent_template_arg_p (orig_arg)
6371                && !uses_template_parms (t))
6372         /* We used to call digest_init here.  However, digest_init
6373            will report errors, which we don't want when complain
6374            is zero.  More importantly, digest_init will try too
6375            hard to convert things: for example, `0' should not be
6376            converted to pointer type at this point according to
6377            the standard.  Accepting this is not merely an
6378            extension, since deciding whether or not these
6379            conversions can occur is part of determining which
6380            function template to call, or whether a given explicit
6381            argument specification is valid.  */
6382         val = convert_nontype_argument (t, orig_arg, complain);
6383       else
6384         val = strip_typedefs_expr (orig_arg);
6385
6386       if (val == NULL_TREE)
6387         val = error_mark_node;
6388       else if (val == error_mark_node && (complain & tf_error))
6389         error ("could not convert template argument %qE to %qT",  orig_arg, t);
6390
6391       if (TREE_CODE (val) == SCOPE_REF)
6392         {
6393           /* Strip typedefs from the SCOPE_REF.  */
6394           tree type = canonicalize_type_argument (TREE_TYPE (val), complain);
6395           tree scope = canonicalize_type_argument (TREE_OPERAND (val, 0),
6396                                                    complain);
6397           val = build_qualified_name (type, scope, TREE_OPERAND (val, 1),
6398                                       QUALIFIED_NAME_IS_TEMPLATE (val));
6399         }
6400     }
6401
6402   return val;
6403 }
6404
6405 /* Coerces the remaining template arguments in INNER_ARGS (from
6406    ARG_IDX to the end) into the parameter pack at PARM_IDX in PARMS.
6407    Returns the coerced argument pack. PARM_IDX is the position of this
6408    parameter in the template parameter list. ARGS is the original
6409    template argument list.  */
6410 static tree
6411 coerce_template_parameter_pack (tree parms,
6412                                 int parm_idx,
6413                                 tree args,
6414                                 tree inner_args,
6415                                 int arg_idx,
6416                                 tree new_args,
6417                                 int* lost,
6418                                 tree in_decl,
6419                                 tsubst_flags_t complain)
6420 {
6421   tree parm = TREE_VEC_ELT (parms, parm_idx);
6422   int nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
6423   tree packed_args;
6424   tree argument_pack;
6425   tree packed_types = NULL_TREE;
6426
6427   if (arg_idx > nargs)
6428     arg_idx = nargs;
6429
6430   packed_args = make_tree_vec (nargs - arg_idx);
6431
6432   if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL
6433       && uses_parameter_packs (TREE_TYPE (TREE_VALUE (parm))))
6434     {
6435       /* When the template parameter is a non-type template
6436          parameter pack whose type uses parameter packs, we need
6437          to look at each of the template arguments
6438          separately. Build a vector of the types for these
6439          non-type template parameters in PACKED_TYPES.  */
6440       tree expansion 
6441         = make_pack_expansion (TREE_TYPE (TREE_VALUE (parm)));
6442       packed_types = tsubst_pack_expansion (expansion, args,
6443                                             complain, in_decl);
6444
6445       if (packed_types == error_mark_node)
6446         return error_mark_node;
6447
6448       /* Check that we have the right number of arguments.  */
6449       if (arg_idx < nargs
6450           && !PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx))
6451           && nargs - arg_idx != TREE_VEC_LENGTH (packed_types))
6452         {
6453           int needed_parms 
6454             = TREE_VEC_LENGTH (parms) - 1 + TREE_VEC_LENGTH (packed_types);
6455           error ("wrong number of template arguments (%d, should be %d)",
6456                  nargs, needed_parms);
6457           return error_mark_node;
6458         }
6459
6460       /* If we aren't able to check the actual arguments now
6461          (because they haven't been expanded yet), we can at least
6462          verify that all of the types used for the non-type
6463          template parameter pack are, in fact, valid for non-type
6464          template parameters.  */
6465       if (arg_idx < nargs 
6466           && PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx)))
6467         {
6468           int j, len = TREE_VEC_LENGTH (packed_types);
6469           for (j = 0; j < len; ++j)
6470             {
6471               tree t = TREE_VEC_ELT (packed_types, j);
6472               if (invalid_nontype_parm_type_p (t, complain))
6473                 return error_mark_node;
6474             }
6475         }
6476     }
6477
6478   /* Convert the remaining arguments, which will be a part of the
6479      parameter pack "parm".  */
6480   for (; arg_idx < nargs; ++arg_idx)
6481     {
6482       tree arg = TREE_VEC_ELT (inner_args, arg_idx);
6483       tree actual_parm = TREE_VALUE (parm);
6484
6485       if (packed_types && !PACK_EXPANSION_P (arg))
6486         {
6487           /* When we have a vector of types (corresponding to the
6488              non-type template parameter pack that uses parameter
6489              packs in its type, as mention above), and the
6490              argument is not an expansion (which expands to a
6491              currently unknown number of arguments), clone the
6492              parm and give it the next type in PACKED_TYPES.  */
6493           actual_parm = copy_node (actual_parm);
6494           TREE_TYPE (actual_parm) = 
6495             TREE_VEC_ELT (packed_types, arg_idx - parm_idx);
6496         }
6497
6498       if (arg == error_mark_node)
6499         {
6500           if (complain & tf_error)
6501             error ("template argument %d is invalid", arg_idx + 1);
6502         }
6503       else
6504         arg = convert_template_argument (actual_parm, 
6505                                          arg, new_args, complain, parm_idx,
6506                                          in_decl);
6507       if (arg == error_mark_node)
6508         (*lost)++;
6509       TREE_VEC_ELT (packed_args, arg_idx - parm_idx) = arg; 
6510     }
6511
6512   if (TREE_CODE (TREE_VALUE (parm)) == TYPE_DECL
6513       || TREE_CODE (TREE_VALUE (parm)) == TEMPLATE_DECL)
6514     argument_pack = cxx_make_type (TYPE_ARGUMENT_PACK);
6515   else
6516     {
6517       argument_pack = make_node (NONTYPE_ARGUMENT_PACK);
6518       TREE_TYPE (argument_pack) 
6519         = tsubst (TREE_TYPE (TREE_VALUE (parm)), new_args, complain, in_decl);
6520       TREE_CONSTANT (argument_pack) = 1;
6521     }
6522
6523   SET_ARGUMENT_PACK_ARGS (argument_pack, packed_args);
6524 #ifdef ENABLE_CHECKING
6525   SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (packed_args,
6526                                        TREE_VEC_LENGTH (packed_args));
6527 #endif
6528   return argument_pack;
6529 }
6530
6531 /* Returns true if the template argument vector ARGS contains
6532    any pack expansions, false otherwise.  */
6533
6534 static bool
6535 any_pack_expanson_args_p (tree args)
6536 {
6537   int i;
6538   if (args)
6539     for (i = 0; i < TREE_VEC_LENGTH (args); ++i)
6540       if (PACK_EXPANSION_P (TREE_VEC_ELT (args, i)))
6541         return true;
6542   return false;
6543 }
6544
6545 /* Convert all template arguments to their appropriate types, and
6546    return a vector containing the innermost resulting template
6547    arguments.  If any error occurs, return error_mark_node. Error and
6548    warning messages are issued under control of COMPLAIN.
6549
6550    If REQUIRE_ALL_ARGS is false, argument deduction will be performed
6551    for arguments not specified in ARGS.  Otherwise, if
6552    USE_DEFAULT_ARGS is true, default arguments will be used to fill in
6553    unspecified arguments.  If REQUIRE_ALL_ARGS is true, but
6554    USE_DEFAULT_ARGS is false, then all arguments must be specified in
6555    ARGS.  */
6556
6557 static tree
6558 coerce_template_parms (tree parms,
6559                        tree args,
6560                        tree in_decl,
6561                        tsubst_flags_t complain,
6562                        bool require_all_args,
6563                        bool use_default_args)
6564 {
6565   int nparms, nargs, parm_idx, arg_idx, lost = 0;
6566   tree inner_args;
6567   tree new_args;
6568   tree new_inner_args;
6569   int saved_unevaluated_operand;
6570   int saved_inhibit_evaluation_warnings;
6571
6572   /* When used as a boolean value, indicates whether this is a
6573      variadic template parameter list. Since it's an int, we can also
6574      subtract it from nparms to get the number of non-variadic
6575      parameters.  */
6576   int variadic_p = 0;
6577   int post_variadic_parms = 0;
6578
6579   if (args == error_mark_node)
6580     return error_mark_node;
6581
6582   nparms = TREE_VEC_LENGTH (parms);
6583
6584   /* Determine if there are any parameter packs.  */
6585   for (parm_idx = 0; parm_idx < nparms; ++parm_idx)
6586     {
6587       tree tparm = TREE_VALUE (TREE_VEC_ELT (parms, parm_idx));
6588       if (variadic_p)
6589         ++post_variadic_parms;
6590       if (template_parameter_pack_p (tparm))
6591         ++variadic_p;
6592     }
6593
6594   inner_args = INNERMOST_TEMPLATE_ARGS (args);
6595   /* If there are no parameters that follow a parameter pack, we need to
6596      expand any argument packs so that we can deduce a parameter pack from
6597      some non-packed args followed by an argument pack, as in variadic85.C.
6598      If there are such parameters, we need to leave argument packs intact
6599      so the arguments are assigned properly.  This can happen when dealing
6600      with a nested class inside a partial specialization of a class
6601      template, as in variadic92.C, or when deducing a template parameter pack
6602      from a sub-declarator, as in variadic114.C.  */
6603   if (!post_variadic_parms)
6604     inner_args = expand_template_argument_pack (inner_args);
6605
6606   nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
6607   if ((nargs > nparms && !variadic_p)
6608       || (nargs < nparms - variadic_p
6609           && require_all_args
6610           && !any_pack_expanson_args_p (inner_args)
6611           && (!use_default_args
6612               || (TREE_VEC_ELT (parms, nargs) != error_mark_node
6613                   && !TREE_PURPOSE (TREE_VEC_ELT (parms, nargs))))))
6614     {
6615       if (complain & tf_error)
6616         {
6617           if (variadic_p)
6618             {
6619               nparms -= variadic_p;
6620               error ("wrong number of template arguments "
6621                      "(%d, should be %d or more)", nargs, nparms);
6622             }
6623           else
6624              error ("wrong number of template arguments "
6625                     "(%d, should be %d)", nargs, nparms);
6626
6627           if (in_decl)
6628             error ("provided for %q+D", in_decl);
6629         }
6630
6631       return error_mark_node;
6632     }
6633
6634   /* We need to evaluate the template arguments, even though this
6635      template-id may be nested within a "sizeof".  */
6636   saved_unevaluated_operand = cp_unevaluated_operand;
6637   cp_unevaluated_operand = 0;
6638   saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
6639   c_inhibit_evaluation_warnings = 0;
6640   new_inner_args = make_tree_vec (nparms);
6641   new_args = add_outermost_template_args (args, new_inner_args);
6642   for (parm_idx = 0, arg_idx = 0; parm_idx < nparms; parm_idx++, arg_idx++)
6643     {
6644       tree arg;
6645       tree parm;
6646
6647       /* Get the Ith template parameter.  */
6648       parm = TREE_VEC_ELT (parms, parm_idx);
6649  
6650       if (parm == error_mark_node)
6651       {
6652         TREE_VEC_ELT (new_inner_args, arg_idx) = error_mark_node;
6653         continue;
6654       }
6655
6656       /* Calculate the next argument.  */
6657       if (arg_idx < nargs)
6658         arg = TREE_VEC_ELT (inner_args, arg_idx);
6659       else
6660         arg = NULL_TREE;
6661
6662       if (template_parameter_pack_p (TREE_VALUE (parm))
6663           && !(arg && ARGUMENT_PACK_P (arg)))
6664         {
6665           /* All remaining arguments will be placed in the
6666              template parameter pack PARM.  */
6667           arg = coerce_template_parameter_pack (parms, parm_idx, args, 
6668                                                 inner_args, arg_idx,
6669                                                 new_args, &lost,
6670                                                 in_decl, complain);
6671
6672           /* Store this argument.  */
6673           if (arg == error_mark_node)
6674             lost++;
6675           TREE_VEC_ELT (new_inner_args, parm_idx) = arg;
6676
6677           /* We are done with all of the arguments.  */
6678           arg_idx = nargs;
6679           
6680           continue;
6681         }
6682       else if (arg)
6683         {
6684           if (PACK_EXPANSION_P (arg))
6685             {
6686               /* We don't know how many args we have yet, just
6687                  use the unconverted ones for now.  */
6688               new_inner_args = inner_args;
6689               break;
6690             }
6691         }
6692       else if (require_all_args)
6693         {
6694           /* There must be a default arg in this case.  */
6695           arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
6696                                      complain, in_decl);
6697           /* The position of the first default template argument,
6698              is also the number of non-defaulted arguments in NEW_INNER_ARGS.
6699              Record that.  */
6700           if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args))
6701             SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args, arg_idx);
6702         }
6703       else
6704         break;
6705
6706       if (arg == error_mark_node)
6707         {
6708           if (complain & tf_error)
6709             error ("template argument %d is invalid", arg_idx + 1);
6710         }
6711       else if (!arg)
6712         /* This only occurs if there was an error in the template
6713            parameter list itself (which we would already have
6714            reported) that we are trying to recover from, e.g., a class
6715            template with a parameter list such as
6716            template<typename..., typename>.  */
6717         ++lost;
6718       else
6719         arg = convert_template_argument (TREE_VALUE (parm),
6720                                          arg, new_args, complain, 
6721                                          parm_idx, in_decl);
6722
6723       if (arg == error_mark_node)
6724         lost++;
6725       TREE_VEC_ELT (new_inner_args, arg_idx) = arg;
6726     }
6727   cp_unevaluated_operand = saved_unevaluated_operand;
6728   c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
6729
6730   if (lost)
6731     return error_mark_node;
6732
6733 #ifdef ENABLE_CHECKING
6734   if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args))
6735     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args,
6736                                          TREE_VEC_LENGTH (new_inner_args));
6737 #endif
6738
6739   return new_inner_args;
6740 }
6741
6742 /* Like coerce_template_parms.  If PARMS represents all template
6743    parameters levels, this function returns a vector of vectors
6744    representing all the resulting argument levels.  Note that in this
6745    case, only the innermost arguments are coerced because the
6746    outermost ones are supposed to have been coerced already.
6747
6748    Otherwise, if PARMS represents only (the innermost) vector of
6749    parameters, this function returns a vector containing just the
6750    innermost resulting arguments.  */
6751
6752 static tree
6753 coerce_innermost_template_parms (tree parms,
6754                                   tree args,
6755                                   tree in_decl,
6756                                   tsubst_flags_t complain,
6757                                   bool require_all_args,
6758                                   bool use_default_args)
6759 {
6760   int parms_depth = TMPL_PARMS_DEPTH (parms);
6761   int args_depth = TMPL_ARGS_DEPTH (args);
6762   tree coerced_args;
6763
6764   if (parms_depth > 1)
6765     {
6766       coerced_args = make_tree_vec (parms_depth);
6767       tree level;
6768       int cur_depth;
6769
6770       for (level = parms, cur_depth = parms_depth;
6771            parms_depth > 0 && level != NULL_TREE;
6772            level = TREE_CHAIN (level), --cur_depth)
6773         {
6774           tree l;
6775           if (cur_depth == args_depth)
6776             l = coerce_template_parms (TREE_VALUE (level),
6777                                        args, in_decl, complain,
6778                                        require_all_args,
6779                                        use_default_args);
6780           else
6781             l = TMPL_ARGS_LEVEL (args, cur_depth);
6782
6783           if (l == error_mark_node)
6784             return error_mark_node;
6785
6786           SET_TMPL_ARGS_LEVEL (coerced_args, cur_depth, l);
6787         }
6788     }
6789   else
6790     coerced_args = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parms),
6791                                           args, in_decl, complain,
6792                                           require_all_args,
6793                                           use_default_args);
6794   return coerced_args;
6795 }
6796
6797 /* Returns 1 if template args OT and NT are equivalent.  */
6798
6799 static int
6800 template_args_equal (tree ot, tree nt)
6801 {
6802   if (nt == ot)
6803     return 1;
6804   if (nt == NULL_TREE || ot == NULL_TREE)
6805     return false;
6806
6807   if (TREE_CODE (nt) == TREE_VEC)
6808     /* For member templates */
6809     return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
6810   else if (PACK_EXPANSION_P (ot))
6811     return (PACK_EXPANSION_P (nt)
6812             && template_args_equal (PACK_EXPANSION_PATTERN (ot),
6813                                     PACK_EXPANSION_PATTERN (nt))
6814             && template_args_equal (PACK_EXPANSION_EXTRA_ARGS (ot),
6815                                     PACK_EXPANSION_EXTRA_ARGS (nt)));
6816   else if (ARGUMENT_PACK_P (ot))
6817     {
6818       int i, len;
6819       tree opack, npack;
6820
6821       if (!ARGUMENT_PACK_P (nt))
6822         return 0;
6823
6824       opack = ARGUMENT_PACK_ARGS (ot);
6825       npack = ARGUMENT_PACK_ARGS (nt);
6826       len = TREE_VEC_LENGTH (opack);
6827       if (TREE_VEC_LENGTH (npack) != len)
6828         return 0;
6829       for (i = 0; i < len; ++i)
6830         if (!template_args_equal (TREE_VEC_ELT (opack, i),
6831                                   TREE_VEC_ELT (npack, i)))
6832           return 0;
6833       return 1;
6834     }
6835   else if (ot && TREE_CODE (ot) == ARGUMENT_PACK_SELECT)
6836     {
6837       /* We get here probably because we are in the middle of substituting
6838          into the pattern of a pack expansion. In that case the
6839          ARGUMENT_PACK_SELECT temporarily replaces the pack argument we are
6840          interested in. So we want to use the initial pack argument for
6841          the comparison.  */
6842       ot = ARGUMENT_PACK_SELECT_FROM_PACK (ot);
6843       if (nt && TREE_CODE (nt) == ARGUMENT_PACK_SELECT)
6844         nt = ARGUMENT_PACK_SELECT_FROM_PACK (nt);
6845       return template_args_equal (ot, nt);
6846     }
6847   else if (TYPE_P (nt))
6848     return TYPE_P (ot) && same_type_p (ot, nt);
6849   else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
6850     return 0;
6851   else
6852     return cp_tree_equal (ot, nt);
6853 }
6854
6855 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets of
6856    template arguments.  Returns 0 otherwise, and updates OLDARG_PTR and
6857    NEWARG_PTR with the offending arguments if they are non-NULL.  */
6858
6859 static int
6860 comp_template_args_with_info (tree oldargs, tree newargs,
6861                               tree *oldarg_ptr, tree *newarg_ptr)
6862 {
6863   int i;
6864
6865   if (oldargs == newargs)
6866     return 1;
6867
6868   if (!oldargs || !newargs)
6869     return 0;
6870
6871   if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
6872     return 0;
6873
6874   for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
6875     {
6876       tree nt = TREE_VEC_ELT (newargs, i);
6877       tree ot = TREE_VEC_ELT (oldargs, i);
6878
6879       if (! template_args_equal (ot, nt))
6880         {
6881           if (oldarg_ptr != NULL)
6882             *oldarg_ptr = ot;
6883           if (newarg_ptr != NULL)
6884             *newarg_ptr = nt;
6885           return 0;
6886         }
6887     }
6888   return 1;
6889 }
6890
6891 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
6892    of template arguments.  Returns 0 otherwise.  */
6893
6894 int
6895 comp_template_args (tree oldargs, tree newargs)
6896 {
6897   return comp_template_args_with_info (oldargs, newargs, NULL, NULL);
6898 }
6899
6900 static void
6901 add_pending_template (tree d)
6902 {
6903   tree ti = (TYPE_P (d)
6904              ? CLASSTYPE_TEMPLATE_INFO (d)
6905              : DECL_TEMPLATE_INFO (d));
6906   struct pending_template *pt;
6907   int level;
6908
6909   if (TI_PENDING_TEMPLATE_FLAG (ti))
6910     return;
6911
6912   /* We are called both from instantiate_decl, where we've already had a
6913      tinst_level pushed, and instantiate_template, where we haven't.
6914      Compensate.  */
6915   level = !current_tinst_level || current_tinst_level->decl != d;
6916
6917   if (level)
6918     push_tinst_level (d);
6919
6920   pt = ggc_alloc_pending_template ();
6921   pt->next = NULL;
6922   pt->tinst = current_tinst_level;
6923   if (last_pending_template)
6924     last_pending_template->next = pt;
6925   else
6926     pending_templates = pt;
6927
6928   last_pending_template = pt;
6929
6930   TI_PENDING_TEMPLATE_FLAG (ti) = 1;
6931
6932   if (level)
6933     pop_tinst_level ();
6934 }
6935
6936
6937 /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
6938    ARGLIST.  Valid choices for FNS are given in the cp-tree.def
6939    documentation for TEMPLATE_ID_EXPR.  */
6940
6941 tree
6942 lookup_template_function (tree fns, tree arglist)
6943 {
6944   tree type;
6945
6946   if (fns == error_mark_node || arglist == error_mark_node)
6947     return error_mark_node;
6948
6949   gcc_assert (!arglist || TREE_CODE (arglist) == TREE_VEC);
6950
6951   if (!is_overloaded_fn (fns) && TREE_CODE (fns) != IDENTIFIER_NODE)
6952     {
6953       error ("%q#D is not a function template", fns);
6954       return error_mark_node;
6955     }
6956
6957   if (BASELINK_P (fns))
6958     {
6959       BASELINK_FUNCTIONS (fns) = build2 (TEMPLATE_ID_EXPR,
6960                                          unknown_type_node,
6961                                          BASELINK_FUNCTIONS (fns),
6962                                          arglist);
6963       return fns;
6964     }
6965
6966   type = TREE_TYPE (fns);
6967   if (TREE_CODE (fns) == OVERLOAD || !type)
6968     type = unknown_type_node;
6969
6970   return build2 (TEMPLATE_ID_EXPR, type, fns, arglist);
6971 }
6972
6973 /* Within the scope of a template class S<T>, the name S gets bound
6974    (in build_self_reference) to a TYPE_DECL for the class, not a
6975    TEMPLATE_DECL.  If DECL is a TYPE_DECL for current_class_type,
6976    or one of its enclosing classes, and that type is a template,
6977    return the associated TEMPLATE_DECL.  Otherwise, the original
6978    DECL is returned.
6979
6980    Also handle the case when DECL is a TREE_LIST of ambiguous
6981    injected-class-names from different bases.  */
6982
6983 tree
6984 maybe_get_template_decl_from_type_decl (tree decl)
6985 {
6986   if (decl == NULL_TREE)
6987     return decl;
6988
6989   /* DR 176: A lookup that finds an injected-class-name (10.2
6990      [class.member.lookup]) can result in an ambiguity in certain cases
6991      (for example, if it is found in more than one base class). If all of
6992      the injected-class-names that are found refer to specializations of
6993      the same class template, and if the name is followed by a
6994      template-argument-list, the reference refers to the class template
6995      itself and not a specialization thereof, and is not ambiguous.  */
6996   if (TREE_CODE (decl) == TREE_LIST)
6997     {
6998       tree t, tmpl = NULL_TREE;
6999       for (t = decl; t; t = TREE_CHAIN (t))
7000         {
7001           tree elt = maybe_get_template_decl_from_type_decl (TREE_VALUE (t));
7002           if (!tmpl)
7003             tmpl = elt;
7004           else if (tmpl != elt)
7005             break;
7006         }
7007       if (tmpl && t == NULL_TREE)
7008         return tmpl;
7009       else
7010         return decl;
7011     }
7012
7013   return (decl != NULL_TREE
7014           && DECL_SELF_REFERENCE_P (decl)
7015           && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
7016     ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
7017 }
7018
7019 /* Given an IDENTIFIER_NODE (or type TEMPLATE_DECL) and a chain of
7020    parameters, find the desired type.
7021
7022    D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
7023
7024    IN_DECL, if non-NULL, is the template declaration we are trying to
7025    instantiate.
7026
7027    If ENTERING_SCOPE is nonzero, we are about to enter the scope of
7028    the class we are looking up.
7029
7030    Issue error and warning messages under control of COMPLAIN.
7031
7032    If the template class is really a local class in a template
7033    function, then the FUNCTION_CONTEXT is the function in which it is
7034    being instantiated.
7035
7036    ??? Note that this function is currently called *twice* for each
7037    template-id: the first time from the parser, while creating the
7038    incomplete type (finish_template_type), and the second type during the
7039    real instantiation (instantiate_template_class). This is surely something
7040    that we want to avoid. It also causes some problems with argument
7041    coercion (see convert_nontype_argument for more information on this).  */
7042
7043 static tree
7044 lookup_template_class_1 (tree d1, tree arglist, tree in_decl, tree context,
7045                          int entering_scope, tsubst_flags_t complain)
7046 {
7047   tree templ = NULL_TREE, parmlist;
7048   tree t;
7049   void **slot;
7050   spec_entry *entry;
7051   spec_entry elt;
7052   hashval_t hash;
7053
7054   if (TREE_CODE (d1) == IDENTIFIER_NODE)
7055     {
7056       tree value = innermost_non_namespace_value (d1);
7057       if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
7058         templ = value;
7059       else
7060         {
7061           if (context)
7062             push_decl_namespace (context);
7063           templ = lookup_name (d1);
7064           templ = maybe_get_template_decl_from_type_decl (templ);
7065           if (context)
7066             pop_decl_namespace ();
7067         }
7068       if (templ)
7069         context = DECL_CONTEXT (templ);
7070     }
7071   else if (TREE_CODE (d1) == TYPE_DECL && MAYBE_CLASS_TYPE_P (TREE_TYPE (d1)))
7072     {
7073       tree type = TREE_TYPE (d1);
7074
7075       /* If we are declaring a constructor, say A<T>::A<T>, we will get
7076          an implicit typename for the second A.  Deal with it.  */
7077       if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
7078         type = TREE_TYPE (type);
7079
7080       if (CLASSTYPE_TEMPLATE_INFO (type))
7081         {
7082           templ = CLASSTYPE_TI_TEMPLATE (type);
7083           d1 = DECL_NAME (templ);
7084         }
7085     }
7086   else if (TREE_CODE (d1) == ENUMERAL_TYPE
7087            || (TYPE_P (d1) && MAYBE_CLASS_TYPE_P (d1)))
7088     {
7089       templ = TYPE_TI_TEMPLATE (d1);
7090       d1 = DECL_NAME (templ);
7091     }
7092   else if (TREE_CODE (d1) == TEMPLATE_DECL
7093            && DECL_TEMPLATE_RESULT (d1)
7094            && TREE_CODE (DECL_TEMPLATE_RESULT (d1)) == TYPE_DECL)
7095     {
7096       templ = d1;
7097       d1 = DECL_NAME (templ);
7098       context = DECL_CONTEXT (templ);
7099     }
7100   else if (DECL_TEMPLATE_TEMPLATE_PARM_P (d1))
7101     {
7102       templ = d1;
7103       d1 = DECL_NAME (templ);
7104     }
7105
7106   /* Issue an error message if we didn't find a template.  */
7107   if (! templ)
7108     {
7109       if (complain & tf_error)
7110         error ("%qT is not a template", d1);
7111       return error_mark_node;
7112     }
7113
7114   if (TREE_CODE (templ) != TEMPLATE_DECL
7115          /* Make sure it's a user visible template, if it was named by
7116             the user.  */
7117       || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (templ)
7118           && !PRIMARY_TEMPLATE_P (templ)))
7119     {
7120       if (complain & tf_error)
7121         {
7122           error ("non-template type %qT used as a template", d1);
7123           if (in_decl)
7124             error ("for template declaration %q+D", in_decl);
7125         }
7126       return error_mark_node;
7127     }
7128
7129   complain &= ~tf_user;
7130
7131   if (DECL_TEMPLATE_TEMPLATE_PARM_P (templ))
7132     {
7133       /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
7134          template arguments */
7135
7136       tree parm;
7137       tree arglist2;
7138       tree outer;
7139
7140       parmlist = DECL_INNERMOST_TEMPLATE_PARMS (templ);
7141
7142       /* Consider an example where a template template parameter declared as
7143
7144            template <class T, class U = std::allocator<T> > class TT
7145
7146          The template parameter level of T and U are one level larger than
7147          of TT.  To proper process the default argument of U, say when an
7148          instantiation `TT<int>' is seen, we need to build the full
7149          arguments containing {int} as the innermost level.  Outer levels,
7150          available when not appearing as default template argument, can be
7151          obtained from the arguments of the enclosing template.
7152
7153          Suppose that TT is later substituted with std::vector.  The above
7154          instantiation is `TT<int, std::allocator<T> >' with TT at
7155          level 1, and T at level 2, while the template arguments at level 1
7156          becomes {std::vector} and the inner level 2 is {int}.  */
7157
7158       outer = DECL_CONTEXT (templ);
7159       if (outer)
7160         outer = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (outer)));
7161       else if (current_template_parms)
7162         /* This is an argument of the current template, so we haven't set
7163            DECL_CONTEXT yet.  */
7164         outer = current_template_args ();
7165
7166       if (outer)
7167         arglist = add_to_template_args (outer, arglist);
7168
7169       arglist2 = coerce_template_parms (parmlist, arglist, templ,
7170                                         complain,
7171                                         /*require_all_args=*/true,
7172                                         /*use_default_args=*/true);
7173       if (arglist2 == error_mark_node
7174           || (!uses_template_parms (arglist2)
7175               && check_instantiated_args (templ, arglist2, complain)))
7176         return error_mark_node;
7177
7178       parm = bind_template_template_parm (TREE_TYPE (templ), arglist2);
7179       return parm;
7180     }
7181   else
7182     {
7183       tree template_type = TREE_TYPE (templ);
7184       tree gen_tmpl;
7185       tree type_decl;
7186       tree found = NULL_TREE;
7187       int arg_depth;
7188       int parm_depth;
7189       int is_dependent_type;
7190       int use_partial_inst_tmpl = false;
7191
7192       if (template_type == error_mark_node)
7193         /* An error occured while building the template TEMPL, and a
7194            diagnostic has most certainly been emitted for that
7195            already.  Let's propagate that error.  */
7196         return error_mark_node;
7197
7198       gen_tmpl = most_general_template (templ);
7199       parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
7200       parm_depth = TMPL_PARMS_DEPTH (parmlist);
7201       arg_depth = TMPL_ARGS_DEPTH (arglist);
7202
7203       if (arg_depth == 1 && parm_depth > 1)
7204         {
7205           /* We've been given an incomplete set of template arguments.
7206              For example, given:
7207
7208                template <class T> struct S1 {
7209                  template <class U> struct S2 {};
7210                  template <class U> struct S2<U*> {};
7211                 };
7212
7213              we will be called with an ARGLIST of `U*', but the
7214              TEMPLATE will be `template <class T> template
7215              <class U> struct S1<T>::S2'.  We must fill in the missing
7216              arguments.  */
7217           arglist
7218             = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (templ)),
7219                                            arglist);
7220           arg_depth = TMPL_ARGS_DEPTH (arglist);
7221         }
7222
7223       /* Now we should have enough arguments.  */
7224       gcc_assert (parm_depth == arg_depth);
7225
7226       /* From here on, we're only interested in the most general
7227          template.  */
7228
7229       /* Calculate the BOUND_ARGS.  These will be the args that are
7230          actually tsubst'd into the definition to create the
7231          instantiation.  */
7232       if (parm_depth > 1)
7233         {
7234           /* We have multiple levels of arguments to coerce, at once.  */
7235           int i;
7236           int saved_depth = TMPL_ARGS_DEPTH (arglist);
7237
7238           tree bound_args = make_tree_vec (parm_depth);
7239
7240           for (i = saved_depth,
7241                  t = DECL_TEMPLATE_PARMS (gen_tmpl);
7242                i > 0 && t != NULL_TREE;
7243                --i, t = TREE_CHAIN (t))
7244             {
7245               tree a;
7246               if (i == saved_depth)
7247                 a = coerce_template_parms (TREE_VALUE (t),
7248                                            arglist, gen_tmpl,
7249                                            complain,
7250                                            /*require_all_args=*/true,
7251                                            /*use_default_args=*/true);
7252               else
7253                 /* Outer levels should have already been coerced.  */
7254                 a = TMPL_ARGS_LEVEL (arglist, i);
7255
7256               /* Don't process further if one of the levels fails.  */
7257               if (a == error_mark_node)
7258                 {
7259                   /* Restore the ARGLIST to its full size.  */
7260                   TREE_VEC_LENGTH (arglist) = saved_depth;
7261                   return error_mark_node;
7262                 }
7263
7264               SET_TMPL_ARGS_LEVEL (bound_args, i, a);
7265
7266               /* We temporarily reduce the length of the ARGLIST so
7267                  that coerce_template_parms will see only the arguments
7268                  corresponding to the template parameters it is
7269                  examining.  */
7270               TREE_VEC_LENGTH (arglist)--;
7271             }
7272
7273           /* Restore the ARGLIST to its full size.  */
7274           TREE_VEC_LENGTH (arglist) = saved_depth;
7275
7276           arglist = bound_args;
7277         }
7278       else
7279         arglist
7280           = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
7281                                    INNERMOST_TEMPLATE_ARGS (arglist),
7282                                    gen_tmpl,
7283                                    complain,
7284                                    /*require_all_args=*/true,
7285                                    /*use_default_args=*/true);
7286
7287       if (arglist == error_mark_node)
7288         /* We were unable to bind the arguments.  */
7289         return error_mark_node;
7290
7291       /* In the scope of a template class, explicit references to the
7292          template class refer to the type of the template, not any
7293          instantiation of it.  For example, in:
7294
7295            template <class T> class C { void f(C<T>); }
7296
7297          the `C<T>' is just the same as `C'.  Outside of the
7298          class, however, such a reference is an instantiation.  */
7299       if ((entering_scope
7300            || !PRIMARY_TEMPLATE_P (gen_tmpl)
7301            || currently_open_class (template_type))
7302           /* comp_template_args is expensive, check it last.  */
7303           && comp_template_args (TYPE_TI_ARGS (template_type),
7304                                  arglist))
7305         return template_type;
7306
7307       /* If we already have this specialization, return it.  */
7308       elt.tmpl = gen_tmpl;
7309       elt.args = arglist;
7310       hash = hash_specialization (&elt);
7311       entry = (spec_entry *) htab_find_with_hash (type_specializations,
7312                                                   &elt, hash);
7313
7314       if (entry)
7315         return entry->spec;
7316
7317       is_dependent_type = uses_template_parms (arglist);
7318
7319       /* If the deduced arguments are invalid, then the binding
7320          failed.  */
7321       if (!is_dependent_type
7322           && check_instantiated_args (gen_tmpl,
7323                                       INNERMOST_TEMPLATE_ARGS (arglist),
7324                                       complain))
7325         return error_mark_node;
7326
7327       if (!is_dependent_type
7328           && !PRIMARY_TEMPLATE_P (gen_tmpl)
7329           && !LAMBDA_TYPE_P (TREE_TYPE (gen_tmpl))
7330           && TREE_CODE (CP_DECL_CONTEXT (gen_tmpl)) == NAMESPACE_DECL)
7331         {
7332           found = xref_tag_from_type (TREE_TYPE (gen_tmpl),
7333                                       DECL_NAME (gen_tmpl),
7334                                       /*tag_scope=*/ts_global);
7335           return found;
7336         }
7337
7338       context = tsubst (DECL_CONTEXT (gen_tmpl), arglist,
7339                         complain, in_decl);
7340       if (context == error_mark_node)
7341         return error_mark_node;
7342
7343       if (!context)
7344         context = global_namespace;
7345
7346       /* Create the type.  */
7347       if (TREE_CODE (template_type) == ENUMERAL_TYPE)
7348         {
7349           if (!is_dependent_type)
7350             {
7351               set_current_access_from_decl (TYPE_NAME (template_type));
7352               t = start_enum (TYPE_IDENTIFIER (template_type), NULL_TREE,
7353                               tsubst (ENUM_UNDERLYING_TYPE (template_type),
7354                                       arglist, complain, in_decl),
7355                               SCOPED_ENUM_P (template_type), NULL);
7356             }
7357           else
7358             {
7359               /* We don't want to call start_enum for this type, since
7360                  the values for the enumeration constants may involve
7361                  template parameters.  And, no one should be interested
7362                  in the enumeration constants for such a type.  */
7363               t = cxx_make_type (ENUMERAL_TYPE);
7364               SET_SCOPED_ENUM_P (t, SCOPED_ENUM_P (template_type));
7365             }
7366           SET_OPAQUE_ENUM_P (t, OPAQUE_ENUM_P (template_type));
7367           ENUM_FIXED_UNDERLYING_TYPE_P (t)
7368             = ENUM_FIXED_UNDERLYING_TYPE_P (template_type);
7369         }
7370       else if (DECL_ALIAS_TEMPLATE_P (gen_tmpl))
7371         {
7372           /* The user referred to a specialization of an alias
7373             template represented by GEN_TMPL.
7374
7375             [temp.alias]/2 says:
7376
7377                 When a template-id refers to the specialization of an
7378                 alias template, it is equivalent to the associated
7379                 type obtained by substitution of its
7380                 template-arguments for the template-parameters in the
7381                 type-id of the alias template.  */
7382
7383           t = tsubst (TREE_TYPE (gen_tmpl), arglist, complain, in_decl);
7384           /* Note that the call above (by indirectly calling
7385              register_specialization in tsubst_decl) registers the
7386              TYPE_DECL representing the specialization of the alias
7387              template.  So next time someone substitutes ARGLIST for
7388              the template parms into the alias template (GEN_TMPL),
7389              she'll get that TYPE_DECL back.  */
7390
7391           if (t == error_mark_node)
7392             return t;
7393         }
7394       else if (CLASS_TYPE_P (template_type))
7395         {
7396           t = make_class_type (TREE_CODE (template_type));
7397           CLASSTYPE_DECLARED_CLASS (t)
7398             = CLASSTYPE_DECLARED_CLASS (template_type);
7399           SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
7400           TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
7401
7402           /* A local class.  Make sure the decl gets registered properly.  */
7403           if (context == current_function_decl)
7404             pushtag (DECL_NAME (gen_tmpl), t, /*tag_scope=*/ts_current);
7405
7406           if (comp_template_args (CLASSTYPE_TI_ARGS (template_type), arglist))
7407             /* This instantiation is another name for the primary
7408                template type. Set the TYPE_CANONICAL field
7409                appropriately. */
7410             TYPE_CANONICAL (t) = template_type;
7411           else if (any_template_arguments_need_structural_equality_p (arglist))
7412             /* Some of the template arguments require structural
7413                equality testing, so this template class requires
7414                structural equality testing. */
7415             SET_TYPE_STRUCTURAL_EQUALITY (t);
7416         }
7417       else
7418         gcc_unreachable ();
7419
7420       /* If we called start_enum or pushtag above, this information
7421          will already be set up.  */
7422       if (!TYPE_NAME (t))
7423         {
7424           TYPE_CONTEXT (t) = FROB_CONTEXT (context);
7425
7426           type_decl = create_implicit_typedef (DECL_NAME (gen_tmpl), t);
7427           DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
7428           DECL_SOURCE_LOCATION (type_decl)
7429             = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
7430         }
7431       else
7432         type_decl = TYPE_NAME (t);
7433
7434       if (CLASS_TYPE_P (template_type))
7435         {
7436           TREE_PRIVATE (type_decl)
7437             = TREE_PRIVATE (TYPE_MAIN_DECL (template_type));
7438           TREE_PROTECTED (type_decl)
7439             = TREE_PROTECTED (TYPE_MAIN_DECL (template_type));
7440           if (CLASSTYPE_VISIBILITY_SPECIFIED (template_type))
7441             {
7442               DECL_VISIBILITY_SPECIFIED (type_decl) = 1;
7443               DECL_VISIBILITY (type_decl) = CLASSTYPE_VISIBILITY (template_type);
7444             }
7445         }
7446
7447       /* Let's consider the explicit specialization of a member
7448          of a class template specialization that is implicitely instantiated,
7449          e.g.:
7450              template<class T>
7451              struct S
7452              {
7453                template<class U> struct M {}; //#0
7454              };
7455
7456              template<>
7457              template<>
7458              struct S<int>::M<char> //#1
7459              {
7460                int i;
7461              };
7462         [temp.expl.spec]/4 says this is valid.
7463
7464         In this case, when we write:
7465         S<int>::M<char> m;
7466
7467         M is instantiated from the CLASSTYPE_TI_TEMPLATE of #1, not from
7468         the one of #0.
7469
7470         When we encounter #1, we want to store the partial instantiation
7471         of M (template<class T> S<int>::M<T>) in it's CLASSTYPE_TI_TEMPLATE.
7472
7473         For all cases other than this "explicit specialization of member of a
7474         class template", we just want to store the most general template into
7475         the CLASSTYPE_TI_TEMPLATE of M.
7476
7477         This case of "explicit specialization of member of a class template"
7478         only happens when:
7479         1/ the enclosing class is an instantiation of, and therefore not
7480         the same as, the context of the most general template, and
7481         2/ we aren't looking at the partial instantiation itself, i.e.
7482         the innermost arguments are not the same as the innermost parms of
7483         the most general template.
7484
7485         So it's only when 1/ and 2/ happens that we want to use the partial
7486         instantiation of the member template in lieu of its most general
7487         template.  */
7488
7489       if (PRIMARY_TEMPLATE_P (gen_tmpl)
7490           && TMPL_ARGS_HAVE_MULTIPLE_LEVELS (arglist)
7491           /* the enclosing class must be an instantiation...  */
7492           && CLASS_TYPE_P (context)
7493           && !same_type_p (context, DECL_CONTEXT (gen_tmpl)))
7494         {
7495           tree partial_inst_args;
7496           TREE_VEC_LENGTH (arglist)--;
7497           ++processing_template_decl;
7498           partial_inst_args =
7499             tsubst (INNERMOST_TEMPLATE_ARGS
7500                         (TYPE_TI_ARGS (TREE_TYPE (gen_tmpl))),
7501                     arglist, complain, NULL_TREE);
7502           --processing_template_decl;
7503           TREE_VEC_LENGTH (arglist)++;
7504           use_partial_inst_tmpl =
7505             /*...and we must not be looking at the partial instantiation
7506              itself. */
7507             !comp_template_args (INNERMOST_TEMPLATE_ARGS (arglist),
7508                                  partial_inst_args);
7509         }
7510
7511       if (!use_partial_inst_tmpl)
7512         /* This case is easy; there are no member templates involved.  */
7513         found = gen_tmpl;
7514       else
7515         {
7516           /* This is a full instantiation of a member template.  Find
7517              the partial instantiation of which this is an instance.  */
7518
7519           /* Temporarily reduce by one the number of levels in the ARGLIST
7520              so as to avoid comparing the last set of arguments.  */
7521           TREE_VEC_LENGTH (arglist)--;
7522           found = tsubst (gen_tmpl, arglist, complain, NULL_TREE);
7523           TREE_VEC_LENGTH (arglist)++;
7524           /* FOUND is either a proper class type, or an alias
7525              template specialization.  In the later case, it's a
7526              TYPE_DECL, resulting from the substituting of arguments
7527              for parameters in the TYPE_DECL of the alias template
7528              done earlier.  So be careful while getting the template
7529              of FOUND.  */
7530           found = TREE_CODE (found) == TYPE_DECL
7531             ? TYPE_TI_TEMPLATE (TREE_TYPE (found))
7532             : CLASSTYPE_TI_TEMPLATE (found);
7533         }
7534
7535       SET_TYPE_TEMPLATE_INFO (t, build_template_info (found, arglist));
7536
7537       elt.spec = t;
7538       slot = htab_find_slot_with_hash (type_specializations,
7539                                        &elt, hash, INSERT);
7540       entry = ggc_alloc_spec_entry ();
7541       *entry = elt;
7542       *slot = entry;
7543
7544       /* Note this use of the partial instantiation so we can check it
7545          later in maybe_process_partial_specialization.  */
7546       DECL_TEMPLATE_INSTANTIATIONS (templ)
7547         = tree_cons (arglist, t,
7548                      DECL_TEMPLATE_INSTANTIATIONS (templ));
7549
7550       if (TREE_CODE (template_type) == ENUMERAL_TYPE && !is_dependent_type)
7551         /* Now that the type has been registered on the instantiations
7552            list, we set up the enumerators.  Because the enumeration
7553            constants may involve the enumeration type itself, we make
7554            sure to register the type first, and then create the
7555            constants.  That way, doing tsubst_expr for the enumeration
7556            constants won't result in recursive calls here; we'll find
7557            the instantiation and exit above.  */
7558         tsubst_enum (template_type, t, arglist);
7559
7560       if (CLASS_TYPE_P (template_type) && is_dependent_type)
7561         /* If the type makes use of template parameters, the
7562            code that generates debugging information will crash.  */
7563         DECL_IGNORED_P (TYPE_STUB_DECL (t)) = 1;
7564
7565       /* Possibly limit visibility based on template args.  */
7566       TREE_PUBLIC (type_decl) = 1;
7567       determine_visibility (type_decl);
7568
7569       return t;
7570     }
7571 }
7572
7573 /* Wrapper for lookup_template_class_1.  */
7574
7575 tree
7576 lookup_template_class (tree d1, tree arglist, tree in_decl, tree context,
7577                        int entering_scope, tsubst_flags_t complain)
7578 {
7579   tree ret;
7580   timevar_push (TV_TEMPLATE_INST);
7581   ret = lookup_template_class_1 (d1, arglist, in_decl, context,
7582                                  entering_scope, complain);
7583   timevar_pop (TV_TEMPLATE_INST);
7584   return ret;
7585 }
7586 \f
7587 struct pair_fn_data
7588 {
7589   tree_fn_t fn;
7590   void *data;
7591   /* True when we should also visit template parameters that occur in
7592      non-deduced contexts.  */
7593   bool include_nondeduced_p;
7594   struct pointer_set_t *visited;
7595 };
7596
7597 /* Called from for_each_template_parm via walk_tree.  */
7598
7599 static tree
7600 for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
7601 {
7602   tree t = *tp;
7603   struct pair_fn_data *pfd = (struct pair_fn_data *) d;
7604   tree_fn_t fn = pfd->fn;
7605   void *data = pfd->data;
7606
7607   if (TYPE_P (t)
7608       && (pfd->include_nondeduced_p || TREE_CODE (t) != TYPENAME_TYPE)
7609       && for_each_template_parm (TYPE_CONTEXT (t), fn, data, pfd->visited,
7610                                  pfd->include_nondeduced_p))
7611     return error_mark_node;
7612
7613   switch (TREE_CODE (t))
7614     {
7615     case RECORD_TYPE:
7616       if (TYPE_PTRMEMFUNC_P (t))
7617         break;
7618       /* Fall through.  */
7619
7620     case UNION_TYPE:
7621     case ENUMERAL_TYPE:
7622       if (!TYPE_TEMPLATE_INFO (t))
7623         *walk_subtrees = 0;
7624       else if (for_each_template_parm (TI_ARGS (TYPE_TEMPLATE_INFO (t)),
7625                                        fn, data, pfd->visited, 
7626                                        pfd->include_nondeduced_p))
7627         return error_mark_node;
7628       break;
7629
7630     case INTEGER_TYPE:
7631       if (for_each_template_parm (TYPE_MIN_VALUE (t),
7632                                   fn, data, pfd->visited, 
7633                                   pfd->include_nondeduced_p)
7634           || for_each_template_parm (TYPE_MAX_VALUE (t),
7635                                      fn, data, pfd->visited,
7636                                      pfd->include_nondeduced_p))
7637         return error_mark_node;
7638       break;
7639
7640     case METHOD_TYPE:
7641       /* Since we're not going to walk subtrees, we have to do this
7642          explicitly here.  */
7643       if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data,
7644                                   pfd->visited, pfd->include_nondeduced_p))
7645         return error_mark_node;
7646       /* Fall through.  */
7647
7648     case FUNCTION_TYPE:
7649       /* Check the return type.  */
7650       if (for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
7651                                   pfd->include_nondeduced_p))
7652         return error_mark_node;
7653
7654       /* Check the parameter types.  Since default arguments are not
7655          instantiated until they are needed, the TYPE_ARG_TYPES may
7656          contain expressions that involve template parameters.  But,
7657          no-one should be looking at them yet.  And, once they're
7658          instantiated, they don't contain template parameters, so
7659          there's no point in looking at them then, either.  */
7660       {
7661         tree parm;
7662
7663         for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
7664           if (for_each_template_parm (TREE_VALUE (parm), fn, data,
7665                                       pfd->visited, pfd->include_nondeduced_p))
7666             return error_mark_node;
7667
7668         /* Since we've already handled the TYPE_ARG_TYPES, we don't
7669            want walk_tree walking into them itself.  */
7670         *walk_subtrees = 0;
7671       }
7672       break;
7673
7674     case TYPEOF_TYPE:
7675     case UNDERLYING_TYPE:
7676       if (pfd->include_nondeduced_p
7677           && for_each_template_parm (TYPE_FIELDS (t), fn, data,
7678                                      pfd->visited, 
7679                                      pfd->include_nondeduced_p))
7680         return error_mark_node;
7681       break;
7682
7683     case FUNCTION_DECL:
7684     case VAR_DECL:
7685       if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
7686           && for_each_template_parm (DECL_TI_ARGS (t), fn, data,
7687                                      pfd->visited, pfd->include_nondeduced_p))
7688         return error_mark_node;
7689       /* Fall through.  */
7690
7691     case PARM_DECL:
7692     case CONST_DECL:
7693       if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t)
7694           && for_each_template_parm (DECL_INITIAL (t), fn, data,
7695                                      pfd->visited, pfd->include_nondeduced_p))
7696         return error_mark_node;
7697       if (DECL_CONTEXT (t)
7698           && pfd->include_nondeduced_p
7699           && for_each_template_parm (DECL_CONTEXT (t), fn, data,
7700                                      pfd->visited, pfd->include_nondeduced_p))
7701         return error_mark_node;
7702       break;
7703
7704     case BOUND_TEMPLATE_TEMPLATE_PARM:
7705       /* Record template parameters such as `T' inside `TT<T>'.  */
7706       if (for_each_template_parm (TYPE_TI_ARGS (t), fn, data, pfd->visited,
7707                                   pfd->include_nondeduced_p))
7708         return error_mark_node;
7709       /* Fall through.  */
7710
7711     case TEMPLATE_TEMPLATE_PARM:
7712     case TEMPLATE_TYPE_PARM:
7713     case TEMPLATE_PARM_INDEX:
7714       if (fn && (*fn)(t, data))
7715         return error_mark_node;
7716       else if (!fn)
7717         return error_mark_node;
7718       break;
7719
7720     case TEMPLATE_DECL:
7721       /* A template template parameter is encountered.  */
7722       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
7723           && for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
7724                                      pfd->include_nondeduced_p))
7725         return error_mark_node;
7726
7727       /* Already substituted template template parameter */
7728       *walk_subtrees = 0;
7729       break;
7730
7731     case TYPENAME_TYPE:
7732       if (!fn
7733           || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn,
7734                                      data, pfd->visited, 
7735                                      pfd->include_nondeduced_p))
7736         return error_mark_node;
7737       break;
7738
7739     case CONSTRUCTOR:
7740       if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
7741           && pfd->include_nondeduced_p
7742           && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
7743                                      (TREE_TYPE (t)), fn, data,
7744                                      pfd->visited, pfd->include_nondeduced_p))
7745         return error_mark_node;
7746       break;
7747
7748     case INDIRECT_REF:
7749     case COMPONENT_REF:
7750       /* If there's no type, then this thing must be some expression
7751          involving template parameters.  */
7752       if (!fn && !TREE_TYPE (t))
7753         return error_mark_node;
7754       break;
7755
7756     case MODOP_EXPR:
7757     case CAST_EXPR:
7758     case IMPLICIT_CONV_EXPR:
7759     case REINTERPRET_CAST_EXPR:
7760     case CONST_CAST_EXPR:
7761     case STATIC_CAST_EXPR:
7762     case DYNAMIC_CAST_EXPR:
7763     case ARROW_EXPR:
7764     case DOTSTAR_EXPR:
7765     case TYPEID_EXPR:
7766     case PSEUDO_DTOR_EXPR:
7767       if (!fn)
7768         return error_mark_node;
7769       break;
7770
7771     default:
7772       break;
7773     }
7774
7775   /* We didn't find any template parameters we liked.  */
7776   return NULL_TREE;
7777 }
7778
7779 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
7780    BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
7781    call FN with the parameter and the DATA.
7782    If FN returns nonzero, the iteration is terminated, and
7783    for_each_template_parm returns 1.  Otherwise, the iteration
7784    continues.  If FN never returns a nonzero value, the value
7785    returned by for_each_template_parm is 0.  If FN is NULL, it is
7786    considered to be the function which always returns 1.
7787
7788    If INCLUDE_NONDEDUCED_P, then this routine will also visit template
7789    parameters that occur in non-deduced contexts.  When false, only
7790    visits those template parameters that can be deduced.  */
7791
7792 static int
7793 for_each_template_parm (tree t, tree_fn_t fn, void* data,
7794                         struct pointer_set_t *visited,
7795                         bool include_nondeduced_p)
7796 {
7797   struct pair_fn_data pfd;
7798   int result;
7799
7800   /* Set up.  */
7801   pfd.fn = fn;
7802   pfd.data = data;
7803   pfd.include_nondeduced_p = include_nondeduced_p;
7804
7805   /* Walk the tree.  (Conceptually, we would like to walk without
7806      duplicates, but for_each_template_parm_r recursively calls
7807      for_each_template_parm, so we would need to reorganize a fair
7808      bit to use walk_tree_without_duplicates, so we keep our own
7809      visited list.)  */
7810   if (visited)
7811     pfd.visited = visited;
7812   else
7813     pfd.visited = pointer_set_create ();
7814   result = cp_walk_tree (&t,
7815                          for_each_template_parm_r,
7816                          &pfd,
7817                          pfd.visited) != NULL_TREE;
7818
7819   /* Clean up.  */
7820   if (!visited)
7821     {
7822       pointer_set_destroy (pfd.visited);
7823       pfd.visited = 0;
7824     }
7825
7826   return result;
7827 }
7828
7829 /* Returns true if T depends on any template parameter.  */
7830
7831 int
7832 uses_template_parms (tree t)
7833 {
7834   bool dependent_p;
7835   int saved_processing_template_decl;
7836
7837   saved_processing_template_decl = processing_template_decl;
7838   if (!saved_processing_template_decl)
7839     processing_template_decl = 1;
7840   if (TYPE_P (t))
7841     dependent_p = dependent_type_p (t);
7842   else if (TREE_CODE (t) == TREE_VEC)
7843     dependent_p = any_dependent_template_arguments_p (t);
7844   else if (TREE_CODE (t) == TREE_LIST)
7845     dependent_p = (uses_template_parms (TREE_VALUE (t))
7846                    || uses_template_parms (TREE_CHAIN (t)));
7847   else if (TREE_CODE (t) == TYPE_DECL)
7848     dependent_p = dependent_type_p (TREE_TYPE (t));
7849   else if (DECL_P (t)
7850            || EXPR_P (t)
7851            || TREE_CODE (t) == TEMPLATE_PARM_INDEX
7852            || TREE_CODE (t) == OVERLOAD
7853            || BASELINK_P (t)
7854            || TREE_CODE (t) == IDENTIFIER_NODE
7855            || TREE_CODE (t) == TRAIT_EXPR
7856            || TREE_CODE (t) == CONSTRUCTOR
7857            || CONSTANT_CLASS_P (t))
7858     dependent_p = (type_dependent_expression_p (t)
7859                    || value_dependent_expression_p (t));
7860   else
7861     {
7862       gcc_assert (t == error_mark_node);
7863       dependent_p = false;
7864     }
7865
7866   processing_template_decl = saved_processing_template_decl;
7867
7868   return dependent_p;
7869 }
7870
7871 /* Returns true iff current_function_decl is an incompletely instantiated
7872    template.  Useful instead of processing_template_decl because the latter
7873    is set to 0 during fold_non_dependent_expr.  */
7874
7875 bool
7876 in_template_function (void)
7877 {
7878   tree fn = current_function_decl;
7879   bool ret;
7880   ++processing_template_decl;
7881   ret = (fn && DECL_LANG_SPECIFIC (fn)
7882          && DECL_TEMPLATE_INFO (fn)
7883          && any_dependent_template_arguments_p (DECL_TI_ARGS (fn)));
7884   --processing_template_decl;
7885   return ret;
7886 }
7887
7888 /* Returns true if T depends on any template parameter with level LEVEL.  */
7889
7890 int
7891 uses_template_parms_level (tree t, int level)
7892 {
7893   return for_each_template_parm (t, template_parm_this_level_p, &level, NULL,
7894                                  /*include_nondeduced_p=*/true);
7895 }
7896
7897 /* Returns TRUE iff INST is an instantiation we don't need to do in an
7898    ill-formed translation unit, i.e. a variable or function that isn't
7899    usable in a constant expression.  */
7900
7901 static inline bool
7902 neglectable_inst_p (tree d)
7903 {
7904   return (DECL_P (d)
7905           && !(TREE_CODE (d) == FUNCTION_DECL ? DECL_DECLARED_CONSTEXPR_P (d)
7906                : decl_maybe_constant_var_p (d)));
7907 }
7908
7909 /* Returns TRUE iff we should refuse to instantiate DECL because it's
7910    neglectable and instantiated from within an erroneous instantiation.  */
7911
7912 static bool
7913 limit_bad_template_recursion (tree decl)
7914 {
7915   struct tinst_level *lev = current_tinst_level;
7916   int errs = errorcount + sorrycount;
7917   if (lev == NULL || errs == 0 || !neglectable_inst_p (decl))
7918     return false;
7919
7920   for (; lev; lev = lev->next)
7921     if (neglectable_inst_p (lev->decl))
7922       break;
7923
7924   return (lev && errs > lev->errors);
7925 }
7926
7927 static int tinst_depth;
7928 extern int max_tinst_depth;
7929 int depth_reached;
7930
7931 static GTY(()) struct tinst_level *last_error_tinst_level;
7932
7933 /* We're starting to instantiate D; record the template instantiation context
7934    for diagnostics and to restore it later.  */
7935
7936 int
7937 push_tinst_level (tree d)
7938 {
7939   struct tinst_level *new_level;
7940
7941   if (tinst_depth >= max_tinst_depth)
7942     {
7943       last_error_tinst_level = current_tinst_level;
7944       if (TREE_CODE (d) == TREE_LIST)
7945         error ("template instantiation depth exceeds maximum of %d (use "
7946                "-ftemplate-depth= to increase the maximum) substituting %qS",
7947                max_tinst_depth, d);
7948       else
7949         error ("template instantiation depth exceeds maximum of %d (use "
7950                "-ftemplate-depth= to increase the maximum) instantiating %qD",
7951                max_tinst_depth, d);
7952
7953       print_instantiation_context ();
7954
7955       return 0;
7956     }
7957
7958   /* If the current instantiation caused problems, don't let it instantiate
7959      anything else.  Do allow deduction substitution and decls usable in
7960      constant expressions.  */
7961   if (limit_bad_template_recursion (d))
7962     return 0;
7963
7964   new_level = ggc_alloc_tinst_level ();
7965   new_level->decl = d;
7966   new_level->locus = input_location;
7967   new_level->errors = errorcount+sorrycount;
7968   new_level->in_system_header_p = in_system_header;
7969   new_level->next = current_tinst_level;
7970   current_tinst_level = new_level;
7971
7972   ++tinst_depth;
7973   if (GATHER_STATISTICS && (tinst_depth > depth_reached))
7974     depth_reached = tinst_depth;
7975
7976   return 1;
7977 }
7978
7979 /* We're done instantiating this template; return to the instantiation
7980    context.  */
7981
7982 void
7983 pop_tinst_level (void)
7984 {
7985   /* Restore the filename and line number stashed away when we started
7986      this instantiation.  */
7987   input_location = current_tinst_level->locus;
7988   current_tinst_level = current_tinst_level->next;
7989   --tinst_depth;
7990 }
7991
7992 /* We're instantiating a deferred template; restore the template
7993    instantiation context in which the instantiation was requested, which
7994    is one step out from LEVEL.  Return the corresponding DECL or TYPE.  */
7995
7996 static tree
7997 reopen_tinst_level (struct tinst_level *level)
7998 {
7999   struct tinst_level *t;
8000
8001   tinst_depth = 0;
8002   for (t = level; t; t = t->next)
8003     ++tinst_depth;
8004
8005   current_tinst_level = level;
8006   pop_tinst_level ();
8007   if (current_tinst_level)
8008     current_tinst_level->errors = errorcount+sorrycount;
8009   return level->decl;
8010 }
8011
8012 /* Returns the TINST_LEVEL which gives the original instantiation
8013    context.  */
8014
8015 struct tinst_level *
8016 outermost_tinst_level (void)
8017 {
8018   struct tinst_level *level = current_tinst_level;
8019   if (level)
8020     while (level->next)
8021       level = level->next;
8022   return level;
8023 }
8024
8025 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL.  ARGS is the
8026    vector of template arguments, as for tsubst.
8027
8028    Returns an appropriate tsubst'd friend declaration.  */
8029
8030 static tree
8031 tsubst_friend_function (tree decl, tree args)
8032 {
8033   tree new_friend;
8034
8035   if (TREE_CODE (decl) == FUNCTION_DECL
8036       && DECL_TEMPLATE_INSTANTIATION (decl)
8037       && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
8038     /* This was a friend declared with an explicit template
8039        argument list, e.g.:
8040
8041        friend void f<>(T);
8042
8043        to indicate that f was a template instantiation, not a new
8044        function declaration.  Now, we have to figure out what
8045        instantiation of what template.  */
8046     {
8047       tree template_id, arglist, fns;
8048       tree new_args;
8049       tree tmpl;
8050       tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
8051
8052       /* Friend functions are looked up in the containing namespace scope.
8053          We must enter that scope, to avoid finding member functions of the
8054          current class with same name.  */
8055       push_nested_namespace (ns);
8056       fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
8057                          tf_warning_or_error, NULL_TREE,
8058                          /*integral_constant_expression_p=*/false);
8059       pop_nested_namespace (ns);
8060       arglist = tsubst (DECL_TI_ARGS (decl), args,
8061                         tf_warning_or_error, NULL_TREE);
8062       template_id = lookup_template_function (fns, arglist);
8063
8064       new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
8065       tmpl = determine_specialization (template_id, new_friend,
8066                                        &new_args,
8067                                        /*need_member_template=*/0,
8068                                        TREE_VEC_LENGTH (args),
8069                                        tsk_none);
8070       return instantiate_template (tmpl, new_args, tf_error);
8071     }
8072
8073   new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
8074
8075   /* The NEW_FRIEND will look like an instantiation, to the
8076      compiler, but is not an instantiation from the point of view of
8077      the language.  For example, we might have had:
8078
8079      template <class T> struct S {
8080        template <class U> friend void f(T, U);
8081      };
8082
8083      Then, in S<int>, template <class U> void f(int, U) is not an
8084      instantiation of anything.  */
8085   if (new_friend == error_mark_node)
8086     return error_mark_node;
8087
8088   DECL_USE_TEMPLATE (new_friend) = 0;
8089   if (TREE_CODE (decl) == TEMPLATE_DECL)
8090     {
8091       DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
8092       DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
8093         = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
8094     }
8095
8096   /* The mangled name for the NEW_FRIEND is incorrect.  The function
8097      is not a template instantiation and should not be mangled like
8098      one.  Therefore, we forget the mangling here; we'll recompute it
8099      later if we need it.  */
8100   if (TREE_CODE (new_friend) != TEMPLATE_DECL)
8101     {
8102       SET_DECL_RTL (new_friend, NULL);
8103       SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
8104     }
8105
8106   if (DECL_NAMESPACE_SCOPE_P (new_friend))
8107     {
8108       tree old_decl;
8109       tree new_friend_template_info;
8110       tree new_friend_result_template_info;
8111       tree ns;
8112       int  new_friend_is_defn;
8113
8114       /* We must save some information from NEW_FRIEND before calling
8115          duplicate decls since that function will free NEW_FRIEND if
8116          possible.  */
8117       new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
8118       new_friend_is_defn =
8119             (DECL_INITIAL (DECL_TEMPLATE_RESULT
8120                            (template_for_substitution (new_friend)))
8121              != NULL_TREE);
8122       if (TREE_CODE (new_friend) == TEMPLATE_DECL)
8123         {
8124           /* This declaration is a `primary' template.  */
8125           DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
8126
8127           new_friend_result_template_info
8128             = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
8129         }
8130       else
8131         new_friend_result_template_info = NULL_TREE;
8132
8133       /* Make the init_value nonzero so pushdecl knows this is a defn.  */
8134       if (new_friend_is_defn)
8135         DECL_INITIAL (new_friend) = error_mark_node;
8136
8137       /* Inside pushdecl_namespace_level, we will push into the
8138          current namespace. However, the friend function should go
8139          into the namespace of the template.  */
8140       ns = decl_namespace_context (new_friend);
8141       push_nested_namespace (ns);
8142       old_decl = pushdecl_namespace_level (new_friend, /*is_friend=*/true);
8143       pop_nested_namespace (ns);
8144
8145       if (old_decl == error_mark_node)
8146         return error_mark_node;
8147
8148       if (old_decl != new_friend)
8149         {
8150           /* This new friend declaration matched an existing
8151              declaration.  For example, given:
8152
8153                template <class T> void f(T);
8154                template <class U> class C {
8155                  template <class T> friend void f(T) {}
8156                };
8157
8158              the friend declaration actually provides the definition
8159              of `f', once C has been instantiated for some type.  So,
8160              old_decl will be the out-of-class template declaration,
8161              while new_friend is the in-class definition.
8162
8163              But, if `f' was called before this point, the
8164              instantiation of `f' will have DECL_TI_ARGS corresponding
8165              to `T' but not to `U', references to which might appear
8166              in the definition of `f'.  Previously, the most general
8167              template for an instantiation of `f' was the out-of-class
8168              version; now it is the in-class version.  Therefore, we
8169              run through all specialization of `f', adding to their
8170              DECL_TI_ARGS appropriately.  In particular, they need a
8171              new set of outer arguments, corresponding to the
8172              arguments for this class instantiation.
8173
8174              The same situation can arise with something like this:
8175
8176                friend void f(int);
8177                template <class T> class C {
8178                  friend void f(T) {}
8179                };
8180
8181              when `C<int>' is instantiated.  Now, `f(int)' is defined
8182              in the class.  */
8183
8184           if (!new_friend_is_defn)
8185             /* On the other hand, if the in-class declaration does
8186                *not* provide a definition, then we don't want to alter
8187                existing definitions.  We can just leave everything
8188                alone.  */
8189             ;
8190           else
8191             {
8192               tree new_template = TI_TEMPLATE (new_friend_template_info);
8193               tree new_args = TI_ARGS (new_friend_template_info);
8194
8195               /* Overwrite whatever template info was there before, if
8196                  any, with the new template information pertaining to
8197                  the declaration.  */
8198               DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
8199
8200               if (TREE_CODE (old_decl) != TEMPLATE_DECL)
8201                 {
8202                   /* We should have called reregister_specialization in
8203                      duplicate_decls.  */
8204                   gcc_assert (retrieve_specialization (new_template,
8205                                                        new_args, 0)
8206                               == old_decl);
8207
8208                   /* Instantiate it if the global has already been used.  */
8209                   if (DECL_ODR_USED (old_decl))
8210                     instantiate_decl (old_decl, /*defer_ok=*/true,
8211                                       /*expl_inst_class_mem_p=*/false);
8212                 }
8213               else
8214                 {
8215                   tree t;
8216
8217                   /* Indicate that the old function template is a partial
8218                      instantiation.  */
8219                   DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
8220                     = new_friend_result_template_info;
8221
8222                   gcc_assert (new_template
8223                               == most_general_template (new_template));
8224                   gcc_assert (new_template != old_decl);
8225
8226                   /* Reassign any specializations already in the hash table
8227                      to the new more general template, and add the
8228                      additional template args.  */
8229                   for (t = DECL_TEMPLATE_INSTANTIATIONS (old_decl);
8230                        t != NULL_TREE;
8231                        t = TREE_CHAIN (t))
8232                     {
8233                       tree spec = TREE_VALUE (t);
8234                       spec_entry elt;
8235
8236                       elt.tmpl = old_decl;
8237                       elt.args = DECL_TI_ARGS (spec);
8238                       elt.spec = NULL_TREE;
8239
8240                       htab_remove_elt (decl_specializations, &elt);
8241
8242                       DECL_TI_ARGS (spec)
8243                         = add_outermost_template_args (new_args,
8244                                                        DECL_TI_ARGS (spec));
8245
8246                       register_specialization
8247                         (spec, new_template, DECL_TI_ARGS (spec), true, 0);
8248
8249                     }
8250                   DECL_TEMPLATE_INSTANTIATIONS (old_decl) = NULL_TREE;
8251                 }
8252             }
8253
8254           /* The information from NEW_FRIEND has been merged into OLD_DECL
8255              by duplicate_decls.  */
8256           new_friend = old_decl;
8257         }
8258     }
8259   else
8260     {
8261       tree context = DECL_CONTEXT (new_friend);
8262       bool dependent_p;
8263
8264       /* In the code
8265            template <class T> class C {
8266              template <class U> friend void C1<U>::f (); // case 1
8267              friend void C2<T>::f ();                    // case 2
8268            };
8269          we only need to make sure CONTEXT is a complete type for
8270          case 2.  To distinguish between the two cases, we note that
8271          CONTEXT of case 1 remains dependent type after tsubst while
8272          this isn't true for case 2.  */
8273       ++processing_template_decl;
8274       dependent_p = dependent_type_p (context);
8275       --processing_template_decl;
8276
8277       if (!dependent_p
8278           && !complete_type_or_else (context, NULL_TREE))
8279         return error_mark_node;
8280
8281       if (COMPLETE_TYPE_P (context))
8282         {
8283           /* Check to see that the declaration is really present, and,
8284              possibly obtain an improved declaration.  */
8285           tree fn = check_classfn (context,
8286                                    new_friend, NULL_TREE);
8287
8288           if (fn)
8289             new_friend = fn;
8290         }
8291     }
8292
8293   return new_friend;
8294 }
8295
8296 /* FRIEND_TMPL is a friend TEMPLATE_DECL.  ARGS is the vector of
8297    template arguments, as for tsubst.
8298
8299    Returns an appropriate tsubst'd friend type or error_mark_node on
8300    failure.  */
8301
8302 static tree
8303 tsubst_friend_class (tree friend_tmpl, tree args)
8304 {
8305   tree friend_type;
8306   tree tmpl;
8307   tree context;
8308
8309   if (DECL_TEMPLATE_TEMPLATE_PARM_P (friend_tmpl))
8310     {
8311       tree t = tsubst (TREE_TYPE (friend_tmpl), args, tf_none, NULL_TREE);
8312       return TREE_TYPE (t);
8313     }
8314
8315   context = CP_DECL_CONTEXT (friend_tmpl);
8316
8317   if (context != global_namespace)
8318     {
8319       if (TREE_CODE (context) == NAMESPACE_DECL)
8320         push_nested_namespace (context);
8321       else
8322         push_nested_class (tsubst (context, args, tf_none, NULL_TREE));
8323     }
8324
8325   /* Look for a class template declaration.  We look for hidden names
8326      because two friend declarations of the same template are the
8327      same.  For example, in:
8328
8329        struct A { 
8330          template <typename> friend class F;
8331        };
8332        template <typename> struct B { 
8333          template <typename> friend class F;
8334        };
8335
8336      both F templates are the same.  */
8337   tmpl = lookup_name_real (DECL_NAME (friend_tmpl), 0, 0,
8338                            /*block_p=*/true, 0, LOOKUP_HIDDEN);
8339
8340   /* But, if we don't find one, it might be because we're in a
8341      situation like this:
8342
8343        template <class T>
8344        struct S {
8345          template <class U>
8346          friend struct S;
8347        };
8348
8349      Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
8350      for `S<int>', not the TEMPLATE_DECL.  */
8351   if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
8352     {
8353       tmpl = lookup_name_prefer_type (DECL_NAME (friend_tmpl), 1);
8354       tmpl = maybe_get_template_decl_from_type_decl (tmpl);
8355     }
8356
8357   if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
8358     {
8359       /* The friend template has already been declared.  Just
8360          check to see that the declarations match, and install any new
8361          default parameters.  We must tsubst the default parameters,
8362          of course.  We only need the innermost template parameters
8363          because that is all that redeclare_class_template will look
8364          at.  */
8365       if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
8366           > TMPL_ARGS_DEPTH (args))
8367         {
8368           tree parms;
8369           location_t saved_input_location;
8370           parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
8371                                          args, tf_warning_or_error);
8372
8373           saved_input_location = input_location;
8374           input_location = DECL_SOURCE_LOCATION (friend_tmpl);
8375           redeclare_class_template (TREE_TYPE (tmpl), parms);
8376           input_location = saved_input_location;
8377           
8378         }
8379
8380       friend_type = TREE_TYPE (tmpl);
8381     }
8382   else
8383     {
8384       /* The friend template has not already been declared.  In this
8385          case, the instantiation of the template class will cause the
8386          injection of this template into the global scope.  */
8387       tmpl = tsubst (friend_tmpl, args, tf_warning_or_error, NULL_TREE);
8388       if (tmpl == error_mark_node)
8389         return error_mark_node;
8390
8391       /* The new TMPL is not an instantiation of anything, so we
8392          forget its origins.  We don't reset CLASSTYPE_TI_TEMPLATE for
8393          the new type because that is supposed to be the corresponding
8394          template decl, i.e., TMPL.  */
8395       DECL_USE_TEMPLATE (tmpl) = 0;
8396       DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
8397       CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
8398       CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
8399         = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
8400
8401       /* Inject this template into the global scope.  */
8402       friend_type = TREE_TYPE (pushdecl_top_level_maybe_friend (tmpl, true));
8403     }
8404
8405   if (context != global_namespace)
8406     {
8407       if (TREE_CODE (context) == NAMESPACE_DECL)
8408         pop_nested_namespace (context);
8409       else
8410         pop_nested_class ();
8411     }
8412
8413   return friend_type;
8414 }
8415
8416 /* Returns zero if TYPE cannot be completed later due to circularity.
8417    Otherwise returns one.  */
8418
8419 static int
8420 can_complete_type_without_circularity (tree type)
8421 {
8422   if (type == NULL_TREE || type == error_mark_node)
8423     return 0;
8424   else if (COMPLETE_TYPE_P (type))
8425     return 1;
8426   else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
8427     return can_complete_type_without_circularity (TREE_TYPE (type));
8428   else if (CLASS_TYPE_P (type)
8429            && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
8430     return 0;
8431   else
8432     return 1;
8433 }
8434
8435 /* Apply any attributes which had to be deferred until instantiation
8436    time.  DECL_P, ATTRIBUTES and ATTR_FLAGS are as cplus_decl_attributes;
8437    ARGS, COMPLAIN, IN_DECL are as tsubst.  */
8438
8439 static void
8440 apply_late_template_attributes (tree *decl_p, tree attributes, int attr_flags,
8441                                 tree args, tsubst_flags_t complain, tree in_decl)
8442 {
8443   tree last_dep = NULL_TREE;
8444   tree t;
8445   tree *p;
8446
8447   for (t = attributes; t; t = TREE_CHAIN (t))
8448     if (ATTR_IS_DEPENDENT (t))
8449       {
8450         last_dep = t;
8451         attributes = copy_list (attributes);
8452         break;
8453       }
8454
8455   if (DECL_P (*decl_p))
8456     {
8457       if (TREE_TYPE (*decl_p) == error_mark_node)
8458         return;
8459       p = &DECL_ATTRIBUTES (*decl_p);
8460     }
8461   else
8462     p = &TYPE_ATTRIBUTES (*decl_p);
8463
8464   if (last_dep)
8465     {
8466       tree late_attrs = NULL_TREE;
8467       tree *q = &late_attrs;
8468
8469       for (*p = attributes; *p; )
8470         {
8471           t = *p;
8472           if (ATTR_IS_DEPENDENT (t))
8473             {
8474               *p = TREE_CHAIN (t);
8475               TREE_CHAIN (t) = NULL_TREE;
8476               /* If the first attribute argument is an identifier, don't
8477                  pass it through tsubst.  Attributes like mode, format,
8478                  cleanup and several target specific attributes expect it
8479                  unmodified.  */
8480               if (TREE_VALUE (t)
8481                   && TREE_CODE (TREE_VALUE (t)) == TREE_LIST
8482                   && TREE_VALUE (TREE_VALUE (t))
8483                   && (TREE_CODE (TREE_VALUE (TREE_VALUE (t)))
8484                       == IDENTIFIER_NODE))
8485                 {
8486                   tree chain
8487                     = tsubst_expr (TREE_CHAIN (TREE_VALUE (t)), args, complain,
8488                                    in_decl,
8489                                    /*integral_constant_expression_p=*/false);
8490                   if (chain != TREE_CHAIN (TREE_VALUE (t)))
8491                     TREE_VALUE (t)
8492                       = tree_cons (NULL_TREE, TREE_VALUE (TREE_VALUE (t)),
8493                                    chain);
8494                 }
8495               else
8496                 TREE_VALUE (t)
8497                   = tsubst_expr (TREE_VALUE (t), args, complain, in_decl,
8498                                  /*integral_constant_expression_p=*/false);
8499               *q = t;
8500               q = &TREE_CHAIN (t);
8501             }
8502           else
8503             p = &TREE_CHAIN (t);
8504         }
8505
8506       cplus_decl_attributes (decl_p, late_attrs, attr_flags);
8507     }
8508 }
8509
8510 /* Perform (or defer) access check for typedefs that were referenced
8511    from within the template TMPL code.
8512    This is a subroutine of instantiate_decl and instantiate_class_template.
8513    TMPL is the template to consider and TARGS is the list of arguments of
8514    that template.  */
8515
8516 static void
8517 perform_typedefs_access_check (tree tmpl, tree targs)
8518 {
8519   location_t saved_location;
8520   unsigned i;
8521   qualified_typedef_usage_t *iter;
8522
8523   if (!tmpl
8524       || (!CLASS_TYPE_P (tmpl)
8525           && TREE_CODE (tmpl) != FUNCTION_DECL))
8526     return;
8527
8528   saved_location = input_location;
8529   FOR_EACH_VEC_SAFE_ELT (get_types_needing_access_check (tmpl), i, iter)
8530     {
8531       tree type_decl = iter->typedef_decl;
8532       tree type_scope = iter->context;
8533
8534       if (!type_decl || !type_scope || !CLASS_TYPE_P (type_scope))
8535         continue;
8536
8537       if (uses_template_parms (type_decl))
8538         type_decl = tsubst (type_decl, targs, tf_error, NULL_TREE);
8539       if (uses_template_parms (type_scope))
8540         type_scope = tsubst (type_scope, targs, tf_error, NULL_TREE);
8541
8542       /* Make access check error messages point to the location
8543          of the use of the typedef.  */
8544       input_location = iter->locus;
8545       perform_or_defer_access_check (TYPE_BINFO (type_scope),
8546                                      type_decl, type_decl,
8547                                      tf_warning_or_error);
8548     }
8549     input_location = saved_location;
8550 }
8551
8552 static tree
8553 instantiate_class_template_1 (tree type)
8554 {
8555   tree templ, args, pattern, t, member;
8556   tree typedecl;
8557   tree pbinfo;
8558   tree base_list;
8559   unsigned int saved_maximum_field_alignment;
8560   tree fn_context;
8561
8562   if (type == error_mark_node)
8563     return error_mark_node;
8564
8565   if (COMPLETE_OR_OPEN_TYPE_P (type)
8566       || uses_template_parms (type))
8567     return type;
8568
8569   /* Figure out which template is being instantiated.  */
8570   templ = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
8571   gcc_assert (TREE_CODE (templ) == TEMPLATE_DECL);
8572
8573   /* Determine what specialization of the original template to
8574      instantiate.  */
8575   t = most_specialized_class (type, templ, tf_warning_or_error);
8576   if (t == error_mark_node)
8577     {
8578       TYPE_BEING_DEFINED (type) = 1;
8579       return error_mark_node;
8580     }
8581   else if (t)
8582     {
8583       /* This TYPE is actually an instantiation of a partial
8584          specialization.  We replace the innermost set of ARGS with
8585          the arguments appropriate for substitution.  For example,
8586          given:
8587
8588            template <class T> struct S {};
8589            template <class T> struct S<T*> {};
8590
8591          and supposing that we are instantiating S<int*>, ARGS will
8592          presently be {int*} -- but we need {int}.  */
8593       pattern = TREE_TYPE (t);
8594       args = TREE_PURPOSE (t);
8595     }
8596   else
8597     {
8598       pattern = TREE_TYPE (templ);
8599       args = CLASSTYPE_TI_ARGS (type);
8600     }
8601
8602   /* If the template we're instantiating is incomplete, then clearly
8603      there's nothing we can do.  */
8604   if (!COMPLETE_TYPE_P (pattern))
8605     return type;
8606
8607   /* If we've recursively instantiated too many templates, stop.  */
8608   if (! push_tinst_level (type))
8609     return type;
8610
8611   /* Now we're really doing the instantiation.  Mark the type as in
8612      the process of being defined.  */
8613   TYPE_BEING_DEFINED (type) = 1;
8614
8615   /* We may be in the middle of deferred access check.  Disable
8616      it now.  */
8617   push_deferring_access_checks (dk_no_deferred);
8618
8619   fn_context = decl_function_context (TYPE_MAIN_DECL (type));
8620   if (!fn_context)
8621     push_to_top_level ();
8622   /* Use #pragma pack from the template context.  */
8623   saved_maximum_field_alignment = maximum_field_alignment;
8624   maximum_field_alignment = TYPE_PRECISION (pattern);
8625
8626   SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
8627
8628   /* Set the input location to the most specialized template definition.
8629      This is needed if tsubsting causes an error.  */
8630   typedecl = TYPE_MAIN_DECL (pattern);
8631   input_location = DECL_SOURCE_LOCATION (TYPE_NAME (type)) =
8632     DECL_SOURCE_LOCATION (typedecl);
8633
8634   TYPE_PACKED (type) = TYPE_PACKED (pattern);
8635   TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
8636   TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
8637   TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
8638   if (ANON_AGGR_TYPE_P (pattern))
8639     SET_ANON_AGGR_TYPE_P (type);
8640   if (CLASSTYPE_VISIBILITY_SPECIFIED (pattern))
8641     {
8642       CLASSTYPE_VISIBILITY_SPECIFIED (type) = 1;
8643       CLASSTYPE_VISIBILITY (type) = CLASSTYPE_VISIBILITY (pattern);
8644       /* Adjust visibility for template arguments.  */
8645       determine_visibility (TYPE_MAIN_DECL (type));
8646     }
8647   CLASSTYPE_FINAL (type) = CLASSTYPE_FINAL (pattern);
8648
8649   pbinfo = TYPE_BINFO (pattern);
8650
8651   /* We should never instantiate a nested class before its enclosing
8652      class; we need to look up the nested class by name before we can
8653      instantiate it, and that lookup should instantiate the enclosing
8654      class.  */
8655   gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
8656               || COMPLETE_OR_OPEN_TYPE_P (TYPE_CONTEXT (type)));
8657
8658   base_list = NULL_TREE;
8659   if (BINFO_N_BASE_BINFOS (pbinfo))
8660     {
8661       tree pbase_binfo;
8662       tree pushed_scope;
8663       int i;
8664
8665       /* We must enter the scope containing the type, as that is where
8666          the accessibility of types named in dependent bases are
8667          looked up from.  */
8668       pushed_scope = push_scope (CP_TYPE_CONTEXT (type));
8669
8670       /* Substitute into each of the bases to determine the actual
8671          basetypes.  */
8672       for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
8673         {
8674           tree base;
8675           tree access = BINFO_BASE_ACCESS (pbinfo, i);
8676           tree expanded_bases = NULL_TREE;
8677           int idx, len = 1;
8678
8679           if (PACK_EXPANSION_P (BINFO_TYPE (pbase_binfo)))
8680             {
8681               expanded_bases = 
8682                 tsubst_pack_expansion (BINFO_TYPE (pbase_binfo),
8683                                        args, tf_error, NULL_TREE);
8684               if (expanded_bases == error_mark_node)
8685                 continue;
8686
8687               len = TREE_VEC_LENGTH (expanded_bases);
8688             }
8689
8690           for (idx = 0; idx < len; idx++)
8691             {
8692               if (expanded_bases)
8693                 /* Extract the already-expanded base class.  */
8694                 base = TREE_VEC_ELT (expanded_bases, idx);
8695               else
8696                 /* Substitute to figure out the base class.  */
8697                 base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error, 
8698                                NULL_TREE);
8699
8700               if (base == error_mark_node)
8701                 continue;
8702
8703               base_list = tree_cons (access, base, base_list);
8704               if (BINFO_VIRTUAL_P (pbase_binfo))
8705                 TREE_TYPE (base_list) = integer_type_node;
8706             }
8707         }
8708
8709       /* The list is now in reverse order; correct that.  */
8710       base_list = nreverse (base_list);
8711
8712       if (pushed_scope)
8713         pop_scope (pushed_scope);
8714     }
8715   /* Now call xref_basetypes to set up all the base-class
8716      information.  */
8717   xref_basetypes (type, base_list);
8718
8719   apply_late_template_attributes (&type, TYPE_ATTRIBUTES (pattern),
8720                                   (int) ATTR_FLAG_TYPE_IN_PLACE,
8721                                   args, tf_error, NULL_TREE);
8722   fixup_attribute_variants (type);
8723
8724   /* Now that our base classes are set up, enter the scope of the
8725      class, so that name lookups into base classes, etc. will work
8726      correctly.  This is precisely analogous to what we do in
8727      begin_class_definition when defining an ordinary non-template
8728      class, except we also need to push the enclosing classes.  */
8729   push_nested_class (type);
8730
8731   /* Now members are processed in the order of declaration.  */
8732   for (member = CLASSTYPE_DECL_LIST (pattern);
8733        member; member = TREE_CHAIN (member))
8734     {
8735       tree t = TREE_VALUE (member);
8736
8737       if (TREE_PURPOSE (member))
8738         {
8739           if (TYPE_P (t))
8740             {
8741               /* Build new CLASSTYPE_NESTED_UTDS.  */
8742
8743               tree newtag;
8744               bool class_template_p;
8745
8746               class_template_p = (TREE_CODE (t) != ENUMERAL_TYPE
8747                                   && TYPE_LANG_SPECIFIC (t)
8748                                   && CLASSTYPE_IS_TEMPLATE (t));
8749               /* If the member is a class template, then -- even after
8750                  substitution -- there may be dependent types in the
8751                  template argument list for the class.  We increment
8752                  PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
8753                  that function will assume that no types are dependent
8754                  when outside of a template.  */
8755               if (class_template_p)
8756                 ++processing_template_decl;
8757               newtag = tsubst (t, args, tf_error, NULL_TREE);
8758               if (class_template_p)
8759                 --processing_template_decl;
8760               if (newtag == error_mark_node)
8761                 continue;
8762
8763               if (TREE_CODE (newtag) != ENUMERAL_TYPE)
8764                 {
8765                   tree name = TYPE_IDENTIFIER (t);
8766
8767                   if (class_template_p)
8768                     /* Unfortunately, lookup_template_class sets
8769                        CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
8770                        instantiation (i.e., for the type of a member
8771                        template class nested within a template class.)
8772                        This behavior is required for
8773                        maybe_process_partial_specialization to work
8774                        correctly, but is not accurate in this case;
8775                        the TAG is not an instantiation of anything.
8776                        (The corresponding TEMPLATE_DECL is an
8777                        instantiation, but the TYPE is not.) */
8778                     CLASSTYPE_USE_TEMPLATE (newtag) = 0;
8779
8780                   /* Now, we call pushtag to put this NEWTAG into the scope of
8781                      TYPE.  We first set up the IDENTIFIER_TYPE_VALUE to avoid
8782                      pushtag calling push_template_decl.  We don't have to do
8783                      this for enums because it will already have been done in
8784                      tsubst_enum.  */
8785                   if (name)
8786                     SET_IDENTIFIER_TYPE_VALUE (name, newtag);
8787                   pushtag (name, newtag, /*tag_scope=*/ts_current);
8788                 }
8789             }
8790           else if (TREE_CODE (t) == FUNCTION_DECL
8791                    || DECL_FUNCTION_TEMPLATE_P (t))
8792             {
8793               /* Build new TYPE_METHODS.  */
8794               tree r;
8795
8796               if (TREE_CODE (t) == TEMPLATE_DECL)
8797                 ++processing_template_decl;
8798               r = tsubst (t, args, tf_error, NULL_TREE);
8799               if (TREE_CODE (t) == TEMPLATE_DECL)
8800                 --processing_template_decl;
8801               set_current_access_from_decl (r);
8802               finish_member_declaration (r);
8803               /* Instantiate members marked with attribute used.  */
8804               if (r != error_mark_node && DECL_PRESERVE_P (r))
8805                 mark_used (r);
8806             }
8807           else
8808             {
8809               /* Build new TYPE_FIELDS.  */
8810               if (TREE_CODE (t) == STATIC_ASSERT)
8811                 {
8812                   tree condition;
8813  
8814                   ++c_inhibit_evaluation_warnings;
8815                   condition =
8816                     tsubst_expr (STATIC_ASSERT_CONDITION (t), args, 
8817                                  tf_warning_or_error, NULL_TREE,
8818                                  /*integral_constant_expression_p=*/true);
8819                   --c_inhibit_evaluation_warnings;
8820
8821                   finish_static_assert (condition,
8822                                         STATIC_ASSERT_MESSAGE (t), 
8823                                         STATIC_ASSERT_SOURCE_LOCATION (t),
8824                                         /*member_p=*/true);
8825                 }
8826               else if (TREE_CODE (t) != CONST_DECL)
8827                 {
8828                   tree r;
8829
8830                   /* The file and line for this declaration, to
8831                      assist in error message reporting.  Since we
8832                      called push_tinst_level above, we don't need to
8833                      restore these.  */
8834                   input_location = DECL_SOURCE_LOCATION (t);
8835
8836                   if (TREE_CODE (t) == TEMPLATE_DECL)
8837                     ++processing_template_decl;
8838                   r = tsubst (t, args, tf_warning_or_error, NULL_TREE);
8839                   if (TREE_CODE (t) == TEMPLATE_DECL)
8840                     --processing_template_decl;
8841                   if (TREE_CODE (r) == VAR_DECL)
8842                     {
8843                       /* In [temp.inst]:
8844
8845                            [t]he initialization (and any associated
8846                            side-effects) of a static data member does
8847                            not occur unless the static data member is
8848                            itself used in a way that requires the
8849                            definition of the static data member to
8850                            exist.
8851
8852                          Therefore, we do not substitute into the
8853                          initialized for the static data member here.  */
8854                       finish_static_data_member_decl
8855                         (r,
8856                          /*init=*/NULL_TREE,
8857                          /*init_const_expr_p=*/false,
8858                          /*asmspec_tree=*/NULL_TREE,
8859                          /*flags=*/0);
8860                       /* Instantiate members marked with attribute used.  */
8861                       if (r != error_mark_node && DECL_PRESERVE_P (r))
8862                         mark_used (r);
8863                     }
8864                   else if (TREE_CODE (r) == FIELD_DECL)
8865                     {
8866                       /* Determine whether R has a valid type and can be
8867                          completed later.  If R is invalid, then it is
8868                          replaced by error_mark_node so that it will not be
8869                          added to TYPE_FIELDS.  */
8870                       tree rtype = TREE_TYPE (r);
8871                       if (can_complete_type_without_circularity (rtype))
8872                         complete_type (rtype);
8873
8874                       if (!COMPLETE_TYPE_P (rtype))
8875                         {
8876                           cxx_incomplete_type_error (r, rtype);
8877                           r = error_mark_node;
8878                         }
8879                     }
8880
8881                   /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
8882                      such a thing will already have been added to the field
8883                      list by tsubst_enum in finish_member_declaration in the
8884                      CLASSTYPE_NESTED_UTDS case above.  */
8885                   if (!(TREE_CODE (r) == TYPE_DECL
8886                         && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
8887                         && DECL_ARTIFICIAL (r)))
8888                     {
8889                       set_current_access_from_decl (r);
8890                       finish_member_declaration (r);
8891                     }
8892                 }
8893             }
8894         }
8895       else
8896         {
8897           if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t)
8898               || DECL_TEMPLATE_TEMPLATE_PARM_P (t))
8899             {
8900               /* Build new CLASSTYPE_FRIEND_CLASSES.  */
8901
8902               tree friend_type = t;
8903               bool adjust_processing_template_decl = false;
8904
8905               if (TREE_CODE (friend_type) == TEMPLATE_DECL)
8906                 {
8907                   /* template <class T> friend class C;  */
8908                   friend_type = tsubst_friend_class (friend_type, args);
8909                   adjust_processing_template_decl = true;
8910                 }
8911               else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
8912                 {
8913                   /* template <class T> friend class C::D;  */
8914                   friend_type = tsubst (friend_type, args,
8915                                         tf_warning_or_error, NULL_TREE);
8916                   if (TREE_CODE (friend_type) == TEMPLATE_DECL)
8917                     friend_type = TREE_TYPE (friend_type);
8918                   adjust_processing_template_decl = true;
8919                 }
8920               else if (TREE_CODE (friend_type) == TYPENAME_TYPE
8921                        || TREE_CODE (friend_type) == TEMPLATE_TYPE_PARM)
8922                 {
8923                   /* This could be either
8924
8925                        friend class T::C;
8926
8927                      when dependent_type_p is false or
8928
8929                        template <class U> friend class T::C;
8930
8931                      otherwise.  */
8932                   friend_type = tsubst (friend_type, args,
8933                                         tf_warning_or_error, NULL_TREE);
8934                   /* Bump processing_template_decl for correct
8935                      dependent_type_p calculation.  */
8936                   ++processing_template_decl;
8937                   if (dependent_type_p (friend_type))
8938                     adjust_processing_template_decl = true;
8939                   --processing_template_decl;
8940                 }
8941               else if (!CLASSTYPE_USE_TEMPLATE (friend_type)
8942                        && hidden_name_p (TYPE_NAME (friend_type)))
8943                 {
8944                   /* friend class C;
8945
8946                      where C hasn't been declared yet.  Let's lookup name
8947                      from namespace scope directly, bypassing any name that
8948                      come from dependent base class.  */
8949                   tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
8950
8951                   /* The call to xref_tag_from_type does injection for friend
8952                      classes.  */
8953                   push_nested_namespace (ns);
8954                   friend_type =
8955                     xref_tag_from_type (friend_type, NULL_TREE,
8956                                         /*tag_scope=*/ts_current);
8957                   pop_nested_namespace (ns);
8958                 }
8959               else if (uses_template_parms (friend_type))
8960                 /* friend class C<T>;  */
8961                 friend_type = tsubst (friend_type, args,
8962                                       tf_warning_or_error, NULL_TREE);
8963               /* Otherwise it's
8964
8965                    friend class C;
8966
8967                  where C is already declared or
8968
8969                    friend class C<int>;
8970
8971                  We don't have to do anything in these cases.  */
8972
8973               if (adjust_processing_template_decl)
8974                 /* Trick make_friend_class into realizing that the friend
8975                    we're adding is a template, not an ordinary class.  It's
8976                    important that we use make_friend_class since it will
8977                    perform some error-checking and output cross-reference
8978                    information.  */
8979                 ++processing_template_decl;
8980
8981               if (friend_type != error_mark_node)
8982                 make_friend_class (type, friend_type, /*complain=*/false);
8983
8984               if (adjust_processing_template_decl)
8985                 --processing_template_decl;
8986             }
8987           else
8988             {
8989               /* Build new DECL_FRIENDLIST.  */
8990               tree r;
8991
8992               /* The file and line for this declaration, to
8993                  assist in error message reporting.  Since we
8994                  called push_tinst_level above, we don't need to
8995                  restore these.  */
8996               input_location = DECL_SOURCE_LOCATION (t);
8997
8998               if (TREE_CODE (t) == TEMPLATE_DECL)
8999                 {
9000                   ++processing_template_decl;
9001                   push_deferring_access_checks (dk_no_check);
9002                 }
9003
9004               r = tsubst_friend_function (t, args);
9005               add_friend (type, r, /*complain=*/false);
9006               if (TREE_CODE (t) == TEMPLATE_DECL)
9007                 {
9008                   pop_deferring_access_checks ();
9009                   --processing_template_decl;
9010                 }
9011             }
9012         }
9013     }
9014
9015   if (tree expr = CLASSTYPE_LAMBDA_EXPR (type))
9016     {
9017       tree decl = lambda_function (type);
9018       if (decl)
9019         {
9020           instantiate_decl (decl, false, false);
9021
9022           /* We need to instantiate the capture list from the template
9023              after we've instantiated the closure members, but before we
9024              consider adding the conversion op.  Also keep any captures
9025              that may have been added during instantiation of the op().  */
9026           tree tmpl_expr = CLASSTYPE_LAMBDA_EXPR (pattern);
9027           tree tmpl_cap
9028             = tsubst_copy_and_build (LAMBDA_EXPR_CAPTURE_LIST (tmpl_expr),
9029                                      args, tf_warning_or_error, NULL_TREE,
9030                                      false, false);
9031
9032           LAMBDA_EXPR_CAPTURE_LIST (expr)
9033             = chainon (tmpl_cap, nreverse (LAMBDA_EXPR_CAPTURE_LIST (expr)));
9034
9035           maybe_add_lambda_conv_op (type);
9036         }
9037       else
9038         gcc_assert (errorcount);
9039     }
9040
9041   /* Set the file and line number information to whatever is given for
9042      the class itself.  This puts error messages involving generated
9043      implicit functions at a predictable point, and the same point
9044      that would be used for non-template classes.  */
9045   input_location = DECL_SOURCE_LOCATION (typedecl);
9046
9047   unreverse_member_declarations (type);
9048   finish_struct_1 (type);
9049   TYPE_BEING_DEFINED (type) = 0;
9050
9051   /* We don't instantiate default arguments for member functions.  14.7.1:
9052
9053      The implicit instantiation of a class template specialization causes
9054      the implicit instantiation of the declarations, but not of the
9055      definitions or default arguments, of the class member functions,
9056      member classes, static data members and member templates....  */
9057
9058   /* Some typedefs referenced from within the template code need to be access
9059      checked at template instantiation time, i.e now. These types were
9060      added to the template at parsing time. Let's get those and perform
9061      the access checks then.  */
9062   perform_typedefs_access_check (pattern, args);
9063   perform_deferred_access_checks (tf_warning_or_error);
9064   pop_nested_class ();
9065   maximum_field_alignment = saved_maximum_field_alignment;
9066   if (!fn_context)
9067     pop_from_top_level ();
9068   pop_deferring_access_checks ();
9069   pop_tinst_level ();
9070
9071   /* The vtable for a template class can be emitted in any translation
9072      unit in which the class is instantiated.  When there is no key
9073      method, however, finish_struct_1 will already have added TYPE to
9074      the keyed_classes list.  */
9075   if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
9076     keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
9077
9078   return type;
9079 }
9080
9081 /* Wrapper for instantiate_class_template_1.  */
9082
9083 tree
9084 instantiate_class_template (tree type)
9085 {
9086   tree ret;
9087   timevar_push (TV_TEMPLATE_INST);
9088   ret = instantiate_class_template_1 (type);
9089   timevar_pop (TV_TEMPLATE_INST);
9090   return ret;
9091 }
9092
9093 static tree
9094 tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
9095 {
9096   tree r;
9097
9098   if (!t)
9099     r = t;
9100   else if (TYPE_P (t))
9101     r = tsubst (t, args, complain, in_decl);
9102   else
9103     {
9104       if (!(complain & tf_warning))
9105         ++c_inhibit_evaluation_warnings;
9106       r = tsubst_expr (t, args, complain, in_decl,
9107                        /*integral_constant_expression_p=*/true);
9108       if (!(complain & tf_warning))
9109         --c_inhibit_evaluation_warnings;
9110       /* Preserve the raw-reference nature of T.  */
9111       if (TREE_TYPE (t) && TREE_CODE (TREE_TYPE (t)) == REFERENCE_TYPE
9112           && REFERENCE_REF_P (r))
9113         r = TREE_OPERAND (r, 0);
9114     }
9115   return r;
9116 }
9117
9118 /* Given a function parameter pack TMPL_PARM and some function parameters
9119    instantiated from it at *SPEC_P, return a NONTYPE_ARGUMENT_PACK of them
9120    and set *SPEC_P to point at the next point in the list.  */
9121
9122 static tree
9123 extract_fnparm_pack (tree tmpl_parm, tree *spec_p)
9124 {
9125   /* Collect all of the extra "packed" parameters into an
9126      argument pack.  */
9127   tree parmvec;
9128   tree parmtypevec;
9129   tree argpack = make_node (NONTYPE_ARGUMENT_PACK);
9130   tree argtypepack = cxx_make_type (TYPE_ARGUMENT_PACK);
9131   tree spec_parm = *spec_p;
9132   int i, len;
9133
9134   for (len = 0; spec_parm; ++len, spec_parm = TREE_CHAIN (spec_parm))
9135     if (tmpl_parm
9136         && !function_parameter_expanded_from_pack_p (spec_parm, tmpl_parm))
9137       break;
9138
9139   /* Fill in PARMVEC and PARMTYPEVEC with all of the parameters.  */
9140   parmvec = make_tree_vec (len);
9141   parmtypevec = make_tree_vec (len);
9142   spec_parm = *spec_p;
9143   for (i = 0; i < len; i++, spec_parm = DECL_CHAIN (spec_parm))
9144     {
9145       TREE_VEC_ELT (parmvec, i) = spec_parm;
9146       TREE_VEC_ELT (parmtypevec, i) = TREE_TYPE (spec_parm);
9147     }
9148
9149   /* Build the argument packs.  */
9150   SET_ARGUMENT_PACK_ARGS (argpack, parmvec);
9151   SET_ARGUMENT_PACK_ARGS (argtypepack, parmtypevec);
9152   TREE_TYPE (argpack) = argtypepack;
9153   *spec_p = spec_parm;
9154
9155   return argpack;
9156 }
9157
9158 /* Give a chain SPEC_PARM of PARM_DECLs, pack them into a
9159    NONTYPE_ARGUMENT_PACK.  */
9160
9161 static tree
9162 make_fnparm_pack (tree spec_parm)
9163 {
9164   return extract_fnparm_pack (NULL_TREE, &spec_parm);
9165 }
9166
9167 /* Return true iff the Ith element of the argument pack ARG_PACK is a
9168    pack expansion.  */
9169
9170 static bool
9171 argument_pack_element_is_expansion_p (tree arg_pack, int i)
9172 {
9173   tree vec = ARGUMENT_PACK_ARGS (arg_pack);
9174   if (i >= TREE_VEC_LENGTH (vec))
9175     return false;
9176   return PACK_EXPANSION_P (TREE_VEC_ELT (vec, i));
9177 }
9178
9179
9180 /* Creates and return an ARGUMENT_PACK_SELECT tree node.  */
9181
9182 static tree
9183 make_argument_pack_select (tree arg_pack, unsigned index)
9184 {
9185   tree aps = make_node (ARGUMENT_PACK_SELECT);
9186
9187   ARGUMENT_PACK_SELECT_FROM_PACK (aps) = arg_pack;
9188   ARGUMENT_PACK_SELECT_INDEX (aps) = index;
9189
9190   return aps;
9191 }
9192
9193 /*  This is a subroutine of tsubst_pack_expansion.
9194
9195     It returns TRUE if we need to use the PACK_EXPANSION_EXTRA_ARGS
9196     mechanism to store the (non complete list of) arguments of the
9197     substitution and return a non substituted pack expansion, in order
9198     to wait for when we have enough arguments to really perform the
9199     substitution.  */
9200
9201 static bool
9202 use_pack_expansion_extra_args_p (tree parm_packs,
9203                                  int arg_pack_len,
9204                                  bool has_empty_arg)
9205 {
9206   /* If one pack has an expansion and another pack has a normal
9207      argument or if one pack has an empty argument and an another
9208      one hasn't then tsubst_pack_expansion cannot perform the
9209      substitution and need to fall back on the
9210      PACK_EXPANSION_EXTRA mechanism.  */
9211   if (parm_packs == NULL_TREE)
9212     return false;
9213   else if (has_empty_arg)
9214     return true;
9215
9216   bool has_expansion_arg = false;
9217   for (int i = 0 ; i < arg_pack_len; ++i)
9218     {
9219       bool has_non_expansion_arg = false;
9220       for (tree parm_pack = parm_packs;
9221            parm_pack;
9222            parm_pack = TREE_CHAIN (parm_pack))
9223         {
9224           tree arg = TREE_VALUE (parm_pack);
9225
9226           if (argument_pack_element_is_expansion_p (arg, i))
9227             has_expansion_arg = true;
9228           else
9229             has_non_expansion_arg = true;
9230         }
9231
9232       if (has_expansion_arg && has_non_expansion_arg)
9233         return true;
9234     }
9235   return false;
9236 }
9237
9238 /* [temp.variadic]/6 says that:
9239
9240        The instantiation of a pack expansion [...]
9241        produces a list E1,E2, ..., En, where N is the number of elements
9242        in the pack expansion parameters.
9243
9244    This subroutine of tsubst_pack_expansion produces one of these Ei.
9245
9246    PATTERN is the pattern of the pack expansion.  PARM_PACKS is a
9247    TREE_LIST in which each TREE_PURPOSE is a parameter pack of
9248    PATTERN, and each TREE_VALUE is its corresponding argument pack.
9249    INDEX is the index 'i' of the element Ei to produce.  ARGS,
9250    COMPLAIN, and IN_DECL are the same parameters as for the
9251    tsubst_pack_expansion function.
9252
9253    The function returns the resulting Ei upon successful completion,
9254    or error_mark_node.
9255
9256    Note that this function possibly modifies the ARGS parameter, so
9257    it's the responsibility of the caller to restore it.  */
9258
9259 static tree
9260 gen_elem_of_pack_expansion_instantiation (tree pattern,
9261                                           tree parm_packs,
9262                                           unsigned index,
9263                                           tree args /* This parm gets
9264                                                        modified.  */,
9265                                           tsubst_flags_t complain,
9266                                           tree in_decl)
9267 {
9268   tree t;
9269   bool ith_elem_is_expansion = false;
9270
9271   /* For each parameter pack, change the substitution of the parameter
9272      pack to the ith argument in its argument pack, then expand the
9273      pattern.  */
9274   for (tree pack = parm_packs; pack; pack = TREE_CHAIN (pack))
9275     {
9276       tree parm = TREE_PURPOSE (pack);
9277       tree arg_pack = TREE_VALUE (pack);
9278       tree aps;                 /* instance of ARGUMENT_PACK_SELECT.  */
9279
9280       ith_elem_is_expansion |=
9281         argument_pack_element_is_expansion_p (arg_pack, index);
9282
9283       /* Select the Ith argument from the pack.  */
9284       if (TREE_CODE (parm) == PARM_DECL)
9285         {
9286           if (index == 0)
9287             {
9288               aps = make_argument_pack_select (arg_pack, index);
9289               mark_used (parm);
9290               register_local_specialization (aps, parm);
9291             }
9292           else
9293             aps = retrieve_local_specialization (parm);
9294         }
9295       else
9296         {
9297           int idx, level;
9298           template_parm_level_and_index (parm, &level, &idx);
9299
9300           if (index == 0)
9301             {
9302               aps = make_argument_pack_select (arg_pack, index);
9303               /* Update the corresponding argument.  */
9304               TMPL_ARG (args, level, idx) = aps;
9305             }
9306           else
9307             /* Re-use the ARGUMENT_PACK_SELECT.  */
9308             aps = TMPL_ARG (args, level, idx);
9309         }
9310       ARGUMENT_PACK_SELECT_INDEX (aps) = index;
9311     }
9312
9313   /* Substitute into the PATTERN with the (possibly altered)
9314      arguments.  */
9315   if (!TYPE_P (pattern))
9316     t = tsubst_expr (pattern, args, complain, in_decl,
9317                      /*integral_constant_expression_p=*/false);
9318   else
9319     t = tsubst (pattern, args, complain, in_decl);
9320
9321   /*  If the Ith argument pack element is a pack expansion, then
9322       the Ith element resulting from the substituting is going to
9323       be a pack expansion as well.  */
9324   if (ith_elem_is_expansion)
9325     t = make_pack_expansion (t);
9326
9327   return t;
9328 }
9329
9330 /* Substitute ARGS into T, which is an pack expansion
9331    (i.e. TYPE_PACK_EXPANSION or EXPR_PACK_EXPANSION). Returns a
9332    TREE_VEC with the substituted arguments, a PACK_EXPANSION_* node
9333    (if only a partial substitution could be performed) or
9334    ERROR_MARK_NODE if there was an error.  */
9335 tree
9336 tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
9337                        tree in_decl)
9338 {
9339   tree pattern;
9340   tree pack, packs = NULL_TREE;
9341   bool unsubstituted_packs = false;
9342   int i, len = -1;
9343   tree result;
9344   struct pointer_map_t *saved_local_specializations = NULL;
9345   bool need_local_specializations = false;
9346   int levels;
9347
9348   gcc_assert (PACK_EXPANSION_P (t));
9349   pattern = PACK_EXPANSION_PATTERN (t);
9350
9351   /* Add in any args remembered from an earlier partial instantiation.  */
9352   args = add_to_template_args (PACK_EXPANSION_EXTRA_ARGS (t), args);
9353
9354   levels = TMPL_ARGS_DEPTH (args);
9355
9356   /* Determine the argument packs that will instantiate the parameter
9357      packs used in the expansion expression. While we're at it,
9358      compute the number of arguments to be expanded and make sure it
9359      is consistent.  */
9360   for (pack = PACK_EXPANSION_PARAMETER_PACKS (t); pack; 
9361        pack = TREE_CHAIN (pack))
9362     {
9363       tree parm_pack = TREE_VALUE (pack);
9364       tree arg_pack = NULL_TREE;
9365       tree orig_arg = NULL_TREE;
9366       int level = 0;
9367
9368       if (TREE_CODE (parm_pack) == BASES)
9369        {
9370          if (BASES_DIRECT (parm_pack))
9371            return calculate_direct_bases (tsubst_expr (BASES_TYPE (parm_pack),
9372                                                         args, complain, in_decl, false));
9373          else
9374            return calculate_bases (tsubst_expr (BASES_TYPE (parm_pack),
9375                                                  args, complain, in_decl, false));
9376        }
9377       if (TREE_CODE (parm_pack) == PARM_DECL)
9378         {
9379           if (PACK_EXPANSION_LOCAL_P (t))
9380             arg_pack = retrieve_local_specialization (parm_pack);
9381           else
9382             {
9383               /* We can't rely on local_specializations for a parameter
9384                  name used later in a function declaration (such as in a
9385                  late-specified return type).  Even if it exists, it might
9386                  have the wrong value for a recursive call.  Just make a
9387                  dummy decl, since it's only used for its type.  */
9388               arg_pack = tsubst_decl (parm_pack, args, complain);
9389               if (arg_pack && FUNCTION_PARAMETER_PACK_P (arg_pack))
9390                 /* Partial instantiation of the parm_pack, we can't build
9391                    up an argument pack yet.  */
9392                 arg_pack = NULL_TREE;
9393               else
9394                 arg_pack = make_fnparm_pack (arg_pack);
9395               need_local_specializations = true;
9396             }
9397         }
9398       else
9399         {
9400           int idx;
9401           template_parm_level_and_index (parm_pack, &level, &idx);
9402
9403           if (level <= levels)
9404             arg_pack = TMPL_ARG (args, level, idx);
9405         }
9406
9407       orig_arg = arg_pack;
9408       if (arg_pack && TREE_CODE (arg_pack) == ARGUMENT_PACK_SELECT)
9409         arg_pack = ARGUMENT_PACK_SELECT_FROM_PACK (arg_pack);
9410       
9411       if (arg_pack && !ARGUMENT_PACK_P (arg_pack))
9412         /* This can only happen if we forget to expand an argument
9413            pack somewhere else. Just return an error, silently.  */
9414         {
9415           result = make_tree_vec (1);
9416           TREE_VEC_ELT (result, 0) = error_mark_node;
9417           return result;
9418         }
9419
9420       if (arg_pack)
9421         {
9422           int my_len = 
9423             TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack));
9424
9425           /* Don't bother trying to do a partial substitution with
9426              incomplete packs; we'll try again after deduction.  */
9427           if (ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
9428             return t;
9429
9430           if (len < 0)
9431             len = my_len;
9432           else if (len != my_len)
9433             {
9434               if (!(complain & tf_error))
9435                 /* Fail quietly.  */;
9436               else if (TREE_CODE (t) == TYPE_PACK_EXPANSION)
9437                 error ("mismatched argument pack lengths while expanding "
9438                        "%<%T%>",
9439                        pattern);
9440               else
9441                 error ("mismatched argument pack lengths while expanding "
9442                        "%<%E%>",
9443                        pattern);
9444               return error_mark_node;
9445             }
9446
9447           /* Keep track of the parameter packs and their corresponding
9448              argument packs.  */
9449           packs = tree_cons (parm_pack, arg_pack, packs);
9450           TREE_TYPE (packs) = orig_arg;
9451         }
9452       else
9453         {
9454           /* We can't substitute for this parameter pack.  We use a flag as
9455              well as the missing_level counter because function parameter
9456              packs don't have a level.  */
9457           unsubstituted_packs = true;
9458         }
9459     }
9460
9461   /* We cannot expand this expansion expression, because we don't have
9462      all of the argument packs we need.  */
9463   if (use_pack_expansion_extra_args_p (packs, len, unsubstituted_packs))
9464     {
9465       /* We got some full packs, but we can't substitute them in until we
9466          have values for all the packs.  So remember these until then.  */
9467
9468       t = make_pack_expansion (pattern);
9469       PACK_EXPANSION_EXTRA_ARGS (t) = args;
9470       return t;
9471     }
9472   else if (unsubstituted_packs)
9473     {
9474       /* There were no real arguments, we're just replacing a parameter
9475          pack with another version of itself. Substitute into the
9476          pattern and return a PACK_EXPANSION_*. The caller will need to
9477          deal with that.  */
9478       if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
9479         t = tsubst_expr (pattern, args, complain, in_decl,
9480                          /*integral_constant_expression_p=*/false);
9481       else
9482         t = tsubst (pattern, args, complain, in_decl);
9483       t = make_pack_expansion (t);
9484       return t;
9485     }
9486
9487   gcc_assert (len >= 0);
9488
9489   if (need_local_specializations)
9490     {
9491       /* We're in a late-specified return type, so create our own local
9492          specializations map; the current map is either NULL or (in the
9493          case of recursive unification) might have bindings that we don't
9494          want to use or alter.  */
9495       saved_local_specializations = local_specializations;
9496       local_specializations = pointer_map_create ();
9497     }
9498
9499   /* For each argument in each argument pack, substitute into the
9500      pattern.  */
9501   result = make_tree_vec (len);
9502   for (i = 0; i < len; ++i)
9503     {
9504       t = gen_elem_of_pack_expansion_instantiation (pattern, packs,
9505                                                     i,
9506                                                     args, complain,
9507                                                     in_decl);
9508       TREE_VEC_ELT (result, i) = t;
9509       if (t == error_mark_node)
9510         {
9511           result = error_mark_node;
9512           break;
9513         }
9514     }
9515
9516   /* Update ARGS to restore the substitution from parameter packs to
9517      their argument packs.  */
9518   for (pack = packs; pack; pack = TREE_CHAIN (pack))
9519     {
9520       tree parm = TREE_PURPOSE (pack);
9521
9522       if (TREE_CODE (parm) == PARM_DECL)
9523         register_local_specialization (TREE_TYPE (pack), parm);
9524       else
9525         {
9526           int idx, level;
9527
9528           if (TREE_VALUE (pack) == NULL_TREE)
9529             continue;
9530
9531           template_parm_level_and_index (parm, &level, &idx);
9532           
9533           /* Update the corresponding argument.  */
9534           if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
9535             TREE_VEC_ELT (TREE_VEC_ELT (args, level -1 ), idx) =
9536               TREE_TYPE (pack);
9537           else
9538             TREE_VEC_ELT (args, idx) = TREE_TYPE (pack);
9539         }
9540     }
9541
9542   if (need_local_specializations)
9543     {
9544       pointer_map_destroy (local_specializations);
9545       local_specializations = saved_local_specializations;
9546     }
9547   
9548   return result;
9549 }
9550
9551 /* Given PARM_DECL PARM, find the corresponding PARM_DECL in the template
9552    TMPL.  We do this using DECL_PARM_INDEX, which should work even with
9553    parameter packs; all parms generated from a function parameter pack will
9554    have the same DECL_PARM_INDEX.  */
9555
9556 tree
9557 get_pattern_parm (tree parm, tree tmpl)
9558 {
9559   tree pattern = DECL_TEMPLATE_RESULT (tmpl);
9560   tree patparm;
9561
9562   if (DECL_ARTIFICIAL (parm))
9563     {
9564       for (patparm = DECL_ARGUMENTS (pattern);
9565            patparm; patparm = DECL_CHAIN (patparm))
9566         if (DECL_ARTIFICIAL (patparm)
9567             && DECL_NAME (parm) == DECL_NAME (patparm))
9568           break;
9569     }
9570   else
9571     {
9572       patparm = FUNCTION_FIRST_USER_PARM (DECL_TEMPLATE_RESULT (tmpl));
9573       patparm = chain_index (DECL_PARM_INDEX (parm)-1, patparm);
9574       gcc_assert (DECL_PARM_INDEX (patparm)
9575                   == DECL_PARM_INDEX (parm));
9576     }
9577
9578   return patparm;
9579 }
9580
9581 /* Substitute ARGS into the vector or list of template arguments T.  */
9582
9583 static tree
9584 tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
9585 {
9586   tree orig_t = t;
9587   int len, need_new = 0, i, expanded_len_adjust = 0, out;
9588   tree *elts;
9589
9590   if (t == error_mark_node)
9591     return error_mark_node;
9592
9593   len = TREE_VEC_LENGTH (t);
9594   elts = XALLOCAVEC (tree, len);
9595
9596   for (i = 0; i < len; i++)
9597     {
9598       tree orig_arg = TREE_VEC_ELT (t, i);
9599       tree new_arg;
9600
9601       if (TREE_CODE (orig_arg) == TREE_VEC)
9602         new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
9603       else if (PACK_EXPANSION_P (orig_arg))
9604         {
9605           /* Substitute into an expansion expression.  */
9606           new_arg = tsubst_pack_expansion (orig_arg, args, complain, in_decl);
9607
9608           if (TREE_CODE (new_arg) == TREE_VEC)
9609             /* Add to the expanded length adjustment the number of
9610                expanded arguments. We subtract one from this
9611                measurement, because the argument pack expression
9612                itself is already counted as 1 in
9613                LEN. EXPANDED_LEN_ADJUST can actually be negative, if
9614                the argument pack is empty.  */
9615             expanded_len_adjust += TREE_VEC_LENGTH (new_arg) - 1;
9616         }
9617       else if (ARGUMENT_PACK_P (orig_arg))
9618         {
9619           /* Substitute into each of the arguments.  */
9620           new_arg = TYPE_P (orig_arg)
9621             ? cxx_make_type (TREE_CODE (orig_arg))
9622             : make_node (TREE_CODE (orig_arg));
9623           
9624           SET_ARGUMENT_PACK_ARGS (
9625             new_arg,
9626             tsubst_template_args (ARGUMENT_PACK_ARGS (orig_arg),
9627                                   args, complain, in_decl));
9628
9629           if (ARGUMENT_PACK_ARGS (new_arg) == error_mark_node)
9630             new_arg = error_mark_node;
9631
9632           if (TREE_CODE (new_arg) == NONTYPE_ARGUMENT_PACK) {
9633             TREE_TYPE (new_arg) = tsubst (TREE_TYPE (orig_arg), args,
9634                                           complain, in_decl);
9635             TREE_CONSTANT (new_arg) = TREE_CONSTANT (orig_arg);
9636
9637             if (TREE_TYPE (new_arg) == error_mark_node)
9638               new_arg = error_mark_node;
9639           }
9640         }
9641       else
9642         new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
9643
9644       if (new_arg == error_mark_node)
9645         return error_mark_node;
9646
9647       elts[i] = new_arg;
9648       if (new_arg != orig_arg)
9649         need_new = 1;
9650     }
9651
9652   if (!need_new)
9653     return t;
9654
9655   /* Make space for the expanded arguments coming from template
9656      argument packs.  */
9657   t = make_tree_vec (len + expanded_len_adjust);
9658   /* ORIG_T can contain TREE_VECs. That happens if ORIG_T contains the
9659      arguments for a member template.
9660      In that case each TREE_VEC in ORIG_T represents a level of template
9661      arguments, and ORIG_T won't carry any non defaulted argument count.
9662      It will rather be the nested TREE_VECs that will carry one.
9663      In other words, ORIG_T carries a non defaulted argument count only
9664      if it doesn't contain any nested TREE_VEC.  */
9665   if (NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t))
9666     {
9667       int count = GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t);
9668       count += expanded_len_adjust;
9669       SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (t, count);
9670     }
9671   for (i = 0, out = 0; i < len; i++)
9672     {
9673       if ((PACK_EXPANSION_P (TREE_VEC_ELT (orig_t, i))
9674            || ARGUMENT_PACK_P (TREE_VEC_ELT (orig_t, i)))
9675           && TREE_CODE (elts[i]) == TREE_VEC)
9676         {
9677           int idx;
9678
9679           /* Now expand the template argument pack "in place".  */
9680           for (idx = 0; idx < TREE_VEC_LENGTH (elts[i]); idx++, out++)
9681             TREE_VEC_ELT (t, out) = TREE_VEC_ELT (elts[i], idx);
9682         }
9683       else
9684         {
9685           TREE_VEC_ELT (t, out) = elts[i];
9686           out++;
9687         }
9688     }
9689
9690   return t;
9691 }
9692
9693 /* Return the result of substituting ARGS into the template parameters
9694    given by PARMS.  If there are m levels of ARGS and m + n levels of
9695    PARMS, then the result will contain n levels of PARMS.  For
9696    example, if PARMS is `template <class T> template <class U>
9697    template <T*, U, class V>' and ARGS is {{int}, {double}} then the
9698    result will be `template <int*, double, class V>'.  */
9699
9700 static tree
9701 tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
9702 {
9703   tree r = NULL_TREE;
9704   tree* new_parms;
9705
9706   /* When substituting into a template, we must set
9707      PROCESSING_TEMPLATE_DECL as the template parameters may be
9708      dependent if they are based on one-another, and the dependency
9709      predicates are short-circuit outside of templates.  */
9710   ++processing_template_decl;
9711
9712   for (new_parms = &r;
9713        parms && TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
9714        new_parms = &(TREE_CHAIN (*new_parms)),
9715          parms = TREE_CHAIN (parms))
9716     {
9717       tree new_vec =
9718         make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
9719       int i;
9720
9721       for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
9722         {
9723           tree tuple;
9724
9725           if (parms == error_mark_node)
9726             continue;
9727
9728           tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
9729
9730           if (tuple == error_mark_node)
9731             continue;
9732
9733           TREE_VEC_ELT (new_vec, i) =
9734             tsubst_template_parm (tuple, args, complain);
9735         }
9736
9737       *new_parms =
9738         tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
9739                              - TMPL_ARGS_DEPTH (args)),
9740                    new_vec, NULL_TREE);
9741     }
9742
9743   --processing_template_decl;
9744
9745   return r;
9746 }
9747
9748 /* Return the result of substituting ARGS into one template parameter
9749    given by T. T Must be a TREE_LIST which TREE_VALUE is the template
9750    parameter and which TREE_PURPOSE is the default argument of the
9751    template parameter.  */
9752
9753 static tree
9754 tsubst_template_parm (tree t, tree args, tsubst_flags_t complain)
9755 {
9756   tree default_value, parm_decl;
9757
9758   if (args == NULL_TREE
9759       || t == NULL_TREE
9760       || t == error_mark_node)
9761     return t;
9762
9763   gcc_assert (TREE_CODE (t) == TREE_LIST);
9764
9765   default_value = TREE_PURPOSE (t);
9766   parm_decl = TREE_VALUE (t);
9767
9768   parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
9769   if (TREE_CODE (parm_decl) == PARM_DECL
9770       && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl), complain))
9771     parm_decl = error_mark_node;
9772   default_value = tsubst_template_arg (default_value, args,
9773                                        complain, NULL_TREE);
9774
9775   return build_tree_list (default_value, parm_decl);
9776 }
9777
9778 /* Substitute the ARGS into the indicated aggregate (or enumeration)
9779    type T.  If T is not an aggregate or enumeration type, it is
9780    handled as if by tsubst.  IN_DECL is as for tsubst.  If
9781    ENTERING_SCOPE is nonzero, T is the context for a template which
9782    we are presently tsubst'ing.  Return the substituted value.  */
9783
9784 static tree
9785 tsubst_aggr_type (tree t,
9786                   tree args,
9787                   tsubst_flags_t complain,
9788                   tree in_decl,
9789                   int entering_scope)
9790 {
9791   if (t == NULL_TREE)
9792     return NULL_TREE;
9793
9794   switch (TREE_CODE (t))
9795     {
9796     case RECORD_TYPE:
9797       if (TYPE_PTRMEMFUNC_P (t))
9798         return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
9799
9800       /* Else fall through.  */
9801     case ENUMERAL_TYPE:
9802     case UNION_TYPE:
9803       if (TYPE_TEMPLATE_INFO (t) && uses_template_parms (t))
9804         {
9805           tree argvec;
9806           tree context;
9807           tree r;
9808           int saved_unevaluated_operand;
9809           int saved_inhibit_evaluation_warnings;
9810
9811           /* In "sizeof(X<I>)" we need to evaluate "I".  */
9812           saved_unevaluated_operand = cp_unevaluated_operand;
9813           cp_unevaluated_operand = 0;
9814           saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
9815           c_inhibit_evaluation_warnings = 0;
9816
9817           /* First, determine the context for the type we are looking
9818              up.  */
9819           context = TYPE_CONTEXT (t);
9820           if (context && TYPE_P (context))
9821             {
9822               context = tsubst_aggr_type (context, args, complain,
9823                                           in_decl, /*entering_scope=*/1);
9824               /* If context is a nested class inside a class template,
9825                  it may still need to be instantiated (c++/33959).  */
9826               context = complete_type (context);
9827             }
9828
9829           /* Then, figure out what arguments are appropriate for the
9830              type we are trying to find.  For example, given:
9831
9832                template <class T> struct S;
9833                template <class T, class U> void f(T, U) { S<U> su; }
9834
9835              and supposing that we are instantiating f<int, double>,
9836              then our ARGS will be {int, double}, but, when looking up
9837              S we only want {double}.  */
9838           argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
9839                                          complain, in_decl);
9840           if (argvec == error_mark_node)
9841             r = error_mark_node;
9842           else
9843             {
9844               r = lookup_template_class (t, argvec, in_decl, context,
9845                                          entering_scope, complain);
9846               r = cp_build_qualified_type_real (r, cp_type_quals (t), complain);
9847             }
9848
9849           cp_unevaluated_operand = saved_unevaluated_operand;
9850           c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
9851
9852           return r;
9853         }
9854       else
9855         /* This is not a template type, so there's nothing to do.  */
9856         return t;
9857
9858     default:
9859       return tsubst (t, args, complain, in_decl);
9860     }
9861 }
9862
9863 /* Substitute into the default argument ARG (a default argument for
9864    FN), which has the indicated TYPE.  */
9865
9866 tree
9867 tsubst_default_argument (tree fn, tree type, tree arg, tsubst_flags_t complain)
9868 {
9869   tree saved_class_ptr = NULL_TREE;
9870   tree saved_class_ref = NULL_TREE;
9871   int errs = errorcount + sorrycount;
9872
9873   /* This can happen in invalid code.  */
9874   if (TREE_CODE (arg) == DEFAULT_ARG)
9875     return arg;
9876
9877   /* This default argument came from a template.  Instantiate the
9878      default argument here, not in tsubst.  In the case of
9879      something like:
9880
9881        template <class T>
9882        struct S {
9883          static T t();
9884          void f(T = t());
9885        };
9886
9887      we must be careful to do name lookup in the scope of S<T>,
9888      rather than in the current class.  */
9889   push_access_scope (fn);
9890   /* The "this" pointer is not valid in a default argument.  */
9891   if (cfun)
9892     {
9893       saved_class_ptr = current_class_ptr;
9894       cp_function_chain->x_current_class_ptr = NULL_TREE;
9895       saved_class_ref = current_class_ref;
9896       cp_function_chain->x_current_class_ref = NULL_TREE;
9897     }
9898
9899   push_deferring_access_checks(dk_no_deferred);
9900   /* The default argument expression may cause implicitly defined
9901      member functions to be synthesized, which will result in garbage
9902      collection.  We must treat this situation as if we were within
9903      the body of function so as to avoid collecting live data on the
9904      stack.  */
9905   ++function_depth;
9906   arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
9907                      complain, NULL_TREE,
9908                      /*integral_constant_expression_p=*/false);
9909   --function_depth;
9910   pop_deferring_access_checks();
9911
9912   /* Restore the "this" pointer.  */
9913   if (cfun)
9914     {
9915       cp_function_chain->x_current_class_ptr = saved_class_ptr;
9916       cp_function_chain->x_current_class_ref = saved_class_ref;
9917     }
9918
9919   if (errorcount+sorrycount > errs
9920       && (complain & tf_warning_or_error))
9921     inform (input_location,
9922             "  when instantiating default argument for call to %D", fn);
9923
9924   /* Make sure the default argument is reasonable.  */
9925   arg = check_default_argument (type, arg, complain);
9926
9927   pop_access_scope (fn);
9928
9929   return arg;
9930 }
9931
9932 /* Substitute into all the default arguments for FN.  */
9933
9934 static void
9935 tsubst_default_arguments (tree fn, tsubst_flags_t complain)
9936 {
9937   tree arg;
9938   tree tmpl_args;
9939
9940   tmpl_args = DECL_TI_ARGS (fn);
9941
9942   /* If this function is not yet instantiated, we certainly don't need
9943      its default arguments.  */
9944   if (uses_template_parms (tmpl_args))
9945     return;
9946   /* Don't do this again for clones.  */
9947   if (DECL_CLONED_FUNCTION_P (fn))
9948     return;
9949
9950   for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
9951        arg;
9952        arg = TREE_CHAIN (arg))
9953     if (TREE_PURPOSE (arg))
9954       TREE_PURPOSE (arg) = tsubst_default_argument (fn,
9955                                                     TREE_VALUE (arg),
9956                                                     TREE_PURPOSE (arg),
9957                                                     complain);
9958 }
9959
9960 /* Substitute the ARGS into the T, which is a _DECL.  Return the
9961    result of the substitution.  Issue error and warning messages under
9962    control of COMPLAIN.  */
9963
9964 static tree
9965 tsubst_decl (tree t, tree args, tsubst_flags_t complain)
9966 {
9967 #define RETURN(EXP) do { r = (EXP); goto out; } while(0)
9968   location_t saved_loc;
9969   tree r = NULL_TREE;
9970   tree in_decl = t;
9971   hashval_t hash = 0;
9972
9973   /* Set the filename and linenumber to improve error-reporting.  */
9974   saved_loc = input_location;
9975   input_location = DECL_SOURCE_LOCATION (t);
9976
9977   switch (TREE_CODE (t))
9978     {
9979     case TEMPLATE_DECL:
9980       {
9981         /* We can get here when processing a member function template,
9982            member class template, or template template parameter.  */
9983         tree decl = DECL_TEMPLATE_RESULT (t);
9984         tree spec;
9985         tree tmpl_args;
9986         tree full_args;
9987
9988         if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
9989           {
9990             /* Template template parameter is treated here.  */
9991             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9992             if (new_type == error_mark_node)
9993               RETURN (error_mark_node);
9994             /* If we get a real template back, return it.  This can happen in
9995                the context of most_specialized_class.  */
9996             if (TREE_CODE (new_type) == TEMPLATE_DECL)
9997               return new_type;
9998
9999             r = copy_decl (t);
10000             DECL_CHAIN (r) = NULL_TREE;
10001             TREE_TYPE (r) = new_type;
10002             DECL_TEMPLATE_RESULT (r)
10003               = build_decl (DECL_SOURCE_LOCATION (decl),
10004                             TYPE_DECL, DECL_NAME (decl), new_type);
10005             DECL_TEMPLATE_PARMS (r)
10006               = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
10007                                        complain);
10008             TYPE_NAME (new_type) = r;
10009             break;
10010           }
10011
10012         /* We might already have an instance of this template.
10013            The ARGS are for the surrounding class type, so the
10014            full args contain the tsubst'd args for the context,
10015            plus the innermost args from the template decl.  */
10016         tmpl_args = DECL_CLASS_TEMPLATE_P (t)
10017           ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
10018           : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
10019         /* Because this is a template, the arguments will still be
10020            dependent, even after substitution.  If
10021            PROCESSING_TEMPLATE_DECL is not set, the dependency
10022            predicates will short-circuit.  */
10023         ++processing_template_decl;
10024         full_args = tsubst_template_args (tmpl_args, args,
10025                                           complain, in_decl);
10026         --processing_template_decl;
10027         if (full_args == error_mark_node)
10028           RETURN (error_mark_node);
10029
10030         /* If this is a default template template argument,
10031            tsubst might not have changed anything.  */
10032         if (full_args == tmpl_args)
10033           RETURN (t);
10034
10035         hash = hash_tmpl_and_args (t, full_args);
10036         spec = retrieve_specialization (t, full_args, hash);
10037         if (spec != NULL_TREE)
10038           {
10039             r = spec;
10040             break;
10041           }
10042
10043         /* Make a new template decl.  It will be similar to the
10044            original, but will record the current template arguments.
10045            We also create a new function declaration, which is just
10046            like the old one, but points to this new template, rather
10047            than the old one.  */
10048         r = copy_decl (t);
10049         gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
10050         DECL_CHAIN (r) = NULL_TREE;
10051
10052         DECL_TEMPLATE_INFO (r) = build_template_info (t, args);
10053
10054         if (TREE_CODE (decl) == TYPE_DECL
10055             && !TYPE_DECL_ALIAS_P (decl))
10056           {
10057             tree new_type;
10058             ++processing_template_decl;
10059             new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10060             --processing_template_decl;
10061             if (new_type == error_mark_node)
10062               RETURN (error_mark_node);
10063
10064             TREE_TYPE (r) = new_type;
10065             CLASSTYPE_TI_TEMPLATE (new_type) = r;
10066             DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
10067             DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
10068             DECL_CONTEXT (r) = TYPE_CONTEXT (new_type);
10069           }
10070         else
10071           {
10072             tree new_decl;
10073             ++processing_template_decl;
10074             new_decl = tsubst (decl, args, complain, in_decl);
10075             --processing_template_decl;
10076             if (new_decl == error_mark_node)
10077               RETURN (error_mark_node);
10078
10079             DECL_TEMPLATE_RESULT (r) = new_decl;
10080             DECL_TI_TEMPLATE (new_decl) = r;
10081             TREE_TYPE (r) = TREE_TYPE (new_decl);
10082             DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
10083             DECL_CONTEXT (r) = DECL_CONTEXT (new_decl);
10084           }
10085
10086         SET_DECL_IMPLICIT_INSTANTIATION (r);
10087         DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
10088         DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
10089
10090         /* The template parameters for this new template are all the
10091            template parameters for the old template, except the
10092            outermost level of parameters.  */
10093         DECL_TEMPLATE_PARMS (r)
10094           = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
10095                                    complain);
10096
10097         if (PRIMARY_TEMPLATE_P (t))
10098           DECL_PRIMARY_TEMPLATE (r) = r;
10099
10100         if (TREE_CODE (decl) != TYPE_DECL)
10101           /* Record this non-type partial instantiation.  */
10102           register_specialization (r, t,
10103                                    DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)),
10104                                    false, hash);
10105       }
10106       break;
10107
10108     case FUNCTION_DECL:
10109       {
10110         tree ctx;
10111         tree argvec = NULL_TREE;
10112         tree *friends;
10113         tree gen_tmpl;
10114         tree type;
10115         int member;
10116         int args_depth;
10117         int parms_depth;
10118
10119         /* Nobody should be tsubst'ing into non-template functions.  */
10120         gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
10121
10122         if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
10123           {
10124             tree spec;
10125             bool dependent_p;
10126
10127             /* If T is not dependent, just return it.  We have to
10128                increment PROCESSING_TEMPLATE_DECL because
10129                value_dependent_expression_p assumes that nothing is
10130                dependent when PROCESSING_TEMPLATE_DECL is zero.  */
10131             ++processing_template_decl;
10132             dependent_p = value_dependent_expression_p (t);
10133             --processing_template_decl;
10134             if (!dependent_p)
10135               RETURN (t);
10136
10137             /* Calculate the most general template of which R is a
10138                specialization, and the complete set of arguments used to
10139                specialize R.  */
10140             gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
10141             argvec = tsubst_template_args (DECL_TI_ARGS
10142                                           (DECL_TEMPLATE_RESULT
10143                                                  (DECL_TI_TEMPLATE (t))),
10144                                            args, complain, in_decl);
10145             if (argvec == error_mark_node)
10146               RETURN (error_mark_node);
10147
10148             /* Check to see if we already have this specialization.  */
10149             hash = hash_tmpl_and_args (gen_tmpl, argvec);
10150             spec = retrieve_specialization (gen_tmpl, argvec, hash);
10151
10152             if (spec)
10153               {
10154                 r = spec;
10155                 break;
10156               }
10157
10158             /* We can see more levels of arguments than parameters if
10159                there was a specialization of a member template, like
10160                this:
10161
10162                  template <class T> struct S { template <class U> void f(); }
10163                  template <> template <class U> void S<int>::f(U);
10164
10165                Here, we'll be substituting into the specialization,
10166                because that's where we can find the code we actually
10167                want to generate, but we'll have enough arguments for
10168                the most general template.
10169
10170                We also deal with the peculiar case:
10171
10172                  template <class T> struct S {
10173                    template <class U> friend void f();
10174                  };
10175                  template <class U> void f() {}
10176                  template S<int>;
10177                  template void f<double>();
10178
10179                Here, the ARGS for the instantiation of will be {int,
10180                double}.  But, we only need as many ARGS as there are
10181                levels of template parameters in CODE_PATTERN.  We are
10182                careful not to get fooled into reducing the ARGS in
10183                situations like:
10184
10185                  template <class T> struct S { template <class U> void f(U); }
10186                  template <class T> template <> void S<T>::f(int) {}
10187
10188                which we can spot because the pattern will be a
10189                specialization in this case.  */
10190             args_depth = TMPL_ARGS_DEPTH (args);
10191             parms_depth =
10192               TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
10193             if (args_depth > parms_depth
10194                 && !DECL_TEMPLATE_SPECIALIZATION (t))
10195               args = get_innermost_template_args (args, parms_depth);
10196           }
10197         else
10198           {
10199             /* This special case arises when we have something like this:
10200
10201                  template <class T> struct S {
10202                    friend void f<int>(int, double);
10203                  };
10204
10205                Here, the DECL_TI_TEMPLATE for the friend declaration
10206                will be an IDENTIFIER_NODE.  We are being called from
10207                tsubst_friend_function, and we want only to create a
10208                new decl (R) with appropriate types so that we can call
10209                determine_specialization.  */
10210             gen_tmpl = NULL_TREE;
10211           }
10212
10213         if (DECL_CLASS_SCOPE_P (t))
10214           {
10215             if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
10216               member = 2;
10217             else
10218               member = 1;
10219             ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
10220                                     complain, t, /*entering_scope=*/1);
10221           }
10222         else
10223           {
10224             member = 0;
10225             ctx = DECL_CONTEXT (t);
10226           }
10227         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10228         if (type == error_mark_node)
10229           RETURN (error_mark_node);
10230
10231         /* If we hit excessive deduction depth, the type is bogus even if
10232            it isn't error_mark_node, so don't build a decl.  */
10233         if (excessive_deduction_depth)
10234           RETURN (error_mark_node);
10235
10236         /* We do NOT check for matching decls pushed separately at this
10237            point, as they may not represent instantiations of this
10238            template, and in any case are considered separate under the
10239            discrete model.  */
10240         r = copy_decl (t);
10241         DECL_USE_TEMPLATE (r) = 0;
10242         TREE_TYPE (r) = type;
10243         /* Clear out the mangled name and RTL for the instantiation.  */
10244         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
10245         SET_DECL_RTL (r, NULL);
10246         /* Leave DECL_INITIAL set on deleted instantiations.  */
10247         if (!DECL_DELETED_FN (r))
10248           DECL_INITIAL (r) = NULL_TREE;
10249         DECL_CONTEXT (r) = ctx;
10250
10251         if (member && DECL_CONV_FN_P (r))
10252           /* Type-conversion operator.  Reconstruct the name, in
10253              case it's the name of one of the template's parameters.  */
10254           DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
10255
10256         DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
10257                                      complain, t);
10258         DECL_RESULT (r) = NULL_TREE;
10259
10260         TREE_STATIC (r) = 0;
10261         TREE_PUBLIC (r) = TREE_PUBLIC (t);
10262         DECL_EXTERNAL (r) = 1;
10263         /* If this is an instantiation of a function with internal
10264            linkage, we already know what object file linkage will be
10265            assigned to the instantiation.  */
10266         DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
10267         DECL_DEFER_OUTPUT (r) = 0;
10268         DECL_CHAIN (r) = NULL_TREE;
10269         DECL_PENDING_INLINE_INFO (r) = 0;
10270         DECL_PENDING_INLINE_P (r) = 0;
10271         DECL_SAVED_TREE (r) = NULL_TREE;
10272         DECL_STRUCT_FUNCTION (r) = NULL;
10273         TREE_USED (r) = 0;
10274         /* We'll re-clone as appropriate in instantiate_template.  */
10275         DECL_CLONED_FUNCTION (r) = NULL_TREE;
10276
10277         /* If we aren't complaining now, return on error before we register
10278            the specialization so that we'll complain eventually.  */
10279         if ((complain & tf_error) == 0
10280             && IDENTIFIER_OPNAME_P (DECL_NAME (r))
10281             && !grok_op_properties (r, /*complain=*/false))
10282           RETURN (error_mark_node);
10283
10284         /* Set up the DECL_TEMPLATE_INFO for R.  There's no need to do
10285            this in the special friend case mentioned above where
10286            GEN_TMPL is NULL.  */
10287         if (gen_tmpl)
10288           {
10289             DECL_TEMPLATE_INFO (r)
10290               = build_template_info (gen_tmpl, argvec);
10291             SET_DECL_IMPLICIT_INSTANTIATION (r);
10292             register_specialization (r, gen_tmpl, argvec, false, hash);
10293
10294             /* We're not supposed to instantiate default arguments
10295                until they are called, for a template.  But, for a
10296                declaration like:
10297
10298                  template <class T> void f ()
10299                  { extern void g(int i = T()); }
10300
10301                we should do the substitution when the template is
10302                instantiated.  We handle the member function case in
10303                instantiate_class_template since the default arguments
10304                might refer to other members of the class.  */
10305             if (!member
10306                 && !PRIMARY_TEMPLATE_P (gen_tmpl)
10307                 && !uses_template_parms (argvec))
10308               tsubst_default_arguments (r, complain);
10309           }
10310         else
10311           DECL_TEMPLATE_INFO (r) = NULL_TREE;
10312
10313         /* Copy the list of befriending classes.  */
10314         for (friends = &DECL_BEFRIENDING_CLASSES (r);
10315              *friends;
10316              friends = &TREE_CHAIN (*friends))
10317           {
10318             *friends = copy_node (*friends);
10319             TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
10320                                             args, complain,
10321                                             in_decl);
10322           }
10323
10324         if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
10325           {
10326             maybe_retrofit_in_chrg (r);
10327             if (DECL_CONSTRUCTOR_P (r))
10328               grok_ctor_properties (ctx, r);
10329             if (DECL_INHERITED_CTOR_BASE (r))
10330               deduce_inheriting_ctor (r);
10331             /* If this is an instantiation of a member template, clone it.
10332                If it isn't, that'll be handled by
10333                clone_constructors_and_destructors.  */
10334             if (PRIMARY_TEMPLATE_P (gen_tmpl))
10335               clone_function_decl (r, /*update_method_vec_p=*/0);
10336           }
10337         else if ((complain & tf_error) != 0
10338                  && IDENTIFIER_OPNAME_P (DECL_NAME (r))
10339                  && !grok_op_properties (r, /*complain=*/true))
10340           RETURN (error_mark_node);
10341
10342         if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
10343           SET_DECL_FRIEND_CONTEXT (r,
10344                                    tsubst (DECL_FRIEND_CONTEXT (t),
10345                                             args, complain, in_decl));
10346
10347         /* Possibly limit visibility based on template args.  */
10348         DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
10349         if (DECL_VISIBILITY_SPECIFIED (t))
10350           {
10351             DECL_VISIBILITY_SPECIFIED (r) = 0;
10352             DECL_ATTRIBUTES (r)
10353               = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
10354           }
10355         determine_visibility (r);
10356         if (DECL_DEFAULTED_OUTSIDE_CLASS_P (r)
10357             && !processing_template_decl)
10358           defaulted_late_check (r);
10359
10360         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
10361                                         args, complain, in_decl);
10362       }
10363       break;
10364
10365     case PARM_DECL:
10366       {
10367         tree type = NULL_TREE;
10368         int i, len = 1;
10369         tree expanded_types = NULL_TREE;
10370         tree prev_r = NULL_TREE;
10371         tree first_r = NULL_TREE;
10372
10373         if (FUNCTION_PARAMETER_PACK_P (t))
10374           {
10375             /* If there is a local specialization that isn't a
10376                parameter pack, it means that we're doing a "simple"
10377                substitution from inside tsubst_pack_expansion. Just
10378                return the local specialization (which will be a single
10379                parm).  */
10380             tree spec = retrieve_local_specialization (t);
10381             if (spec 
10382                 && TREE_CODE (spec) == PARM_DECL
10383                 && TREE_CODE (TREE_TYPE (spec)) != TYPE_PACK_EXPANSION)
10384               RETURN (spec);
10385
10386             /* Expand the TYPE_PACK_EXPANSION that provides the types for
10387                the parameters in this function parameter pack.  */
10388             expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
10389                                                     complain, in_decl);
10390             if (TREE_CODE (expanded_types) == TREE_VEC)
10391               {
10392                 len = TREE_VEC_LENGTH (expanded_types);
10393
10394                 /* Zero-length parameter packs are boring. Just substitute
10395                    into the chain.  */
10396                 if (len == 0)
10397                   RETURN (tsubst (TREE_CHAIN (t), args, complain,
10398                                   TREE_CHAIN (t)));
10399               }
10400             else
10401               {
10402                 /* All we did was update the type. Make a note of that.  */
10403                 type = expanded_types;
10404                 expanded_types = NULL_TREE;
10405               }
10406           }
10407
10408         /* Loop through all of the parameter's we'll build. When T is
10409            a function parameter pack, LEN is the number of expanded
10410            types in EXPANDED_TYPES; otherwise, LEN is 1.  */
10411         r = NULL_TREE;
10412         for (i = 0; i < len; ++i)
10413           {
10414             prev_r = r;
10415             r = copy_node (t);
10416             if (DECL_TEMPLATE_PARM_P (t))
10417               SET_DECL_TEMPLATE_PARM_P (r);
10418
10419             if (expanded_types)
10420               /* We're on the Ith parameter of the function parameter
10421                  pack.  */
10422               {
10423                 /* An argument of a function parameter pack is not a parameter
10424                    pack.  */
10425                 FUNCTION_PARAMETER_PACK_P (r) = false;
10426
10427                 /* Get the Ith type.  */
10428                 type = TREE_VEC_ELT (expanded_types, i);
10429
10430                 /* Rename the parameter to include the index.  */
10431                 DECL_NAME (r)
10432                   = make_ith_pack_parameter_name (DECL_NAME (r), i);
10433               }
10434             else if (!type)
10435               /* We're dealing with a normal parameter.  */
10436               type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10437
10438             type = type_decays_to (type);
10439             TREE_TYPE (r) = type;
10440             cp_apply_type_quals_to_decl (cp_type_quals (type), r);
10441
10442             if (DECL_INITIAL (r))
10443               {
10444                 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
10445                   DECL_INITIAL (r) = TREE_TYPE (r);
10446                 else
10447                   DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
10448                                              complain, in_decl);
10449               }
10450
10451             DECL_CONTEXT (r) = NULL_TREE;
10452
10453             if (!DECL_TEMPLATE_PARM_P (r))
10454               DECL_ARG_TYPE (r) = type_passed_as (type);
10455
10456             apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
10457                                             args, complain, in_decl);
10458
10459             /* Keep track of the first new parameter we
10460                generate. That's what will be returned to the
10461                caller.  */
10462             if (!first_r)
10463               first_r = r;
10464
10465             /* Build a proper chain of parameters when substituting
10466                into a function parameter pack.  */
10467             if (prev_r)
10468               DECL_CHAIN (prev_r) = r;
10469           }
10470
10471         /* If cp_unevaluated_operand is set, we're just looking for a
10472            single dummy parameter, so don't keep going.  */
10473         if (DECL_CHAIN (t) && !cp_unevaluated_operand)
10474           DECL_CHAIN (r) = tsubst (DECL_CHAIN (t), args,
10475                                    complain, DECL_CHAIN (t));
10476
10477         /* FIRST_R contains the start of the chain we've built.  */
10478         r = first_r;
10479       }
10480       break;
10481
10482     case FIELD_DECL:
10483       {
10484         tree type;
10485
10486         r = copy_decl (t);
10487         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10488         if (type == error_mark_node)
10489           RETURN (error_mark_node);
10490         TREE_TYPE (r) = type;
10491         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
10492
10493         if (DECL_C_BIT_FIELD (r))
10494           /* For bit-fields, DECL_INITIAL gives the number of bits.  For
10495              non-bit-fields DECL_INITIAL is a non-static data member
10496              initializer, which gets deferred instantiation.  */
10497           DECL_INITIAL (r)
10498             = tsubst_expr (DECL_INITIAL (t), args,
10499                            complain, in_decl,
10500                            /*integral_constant_expression_p=*/true);
10501         else if (DECL_INITIAL (t))
10502           {
10503             /* Set up DECL_TEMPLATE_INFO so that we can get at the
10504                NSDMI in perform_member_init.  Still set DECL_INITIAL
10505                so that we know there is one.  */
10506             DECL_INITIAL (r) = void_zero_node;
10507             gcc_assert (DECL_LANG_SPECIFIC (r) == NULL);
10508             retrofit_lang_decl (r);
10509             DECL_TEMPLATE_INFO (r) = build_template_info (t, args);
10510           }
10511         /* We don't have to set DECL_CONTEXT here; it is set by
10512            finish_member_declaration.  */
10513         DECL_CHAIN (r) = NULL_TREE;
10514         if (VOID_TYPE_P (type))
10515           error ("instantiation of %q+D as type %qT", r, type);
10516
10517         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
10518                                         args, complain, in_decl);
10519       }
10520       break;
10521
10522     case USING_DECL:
10523       /* We reach here only for member using decls.  We also need to check
10524          uses_template_parms because DECL_DEPENDENT_P is not set for a
10525          using-declaration that designates a member of the current
10526          instantiation (c++/53549).  */
10527       if (DECL_DEPENDENT_P (t)
10528           || uses_template_parms (USING_DECL_SCOPE (t)))
10529         {
10530           tree inst_scope = tsubst_copy (USING_DECL_SCOPE (t), args,
10531                                          complain, in_decl);
10532           tree name = tsubst_copy (DECL_NAME (t), args, complain, in_decl);
10533           r = do_class_using_decl (inst_scope, name);
10534           if (!r)
10535             r = error_mark_node;
10536           else
10537             {
10538               TREE_PROTECTED (r) = TREE_PROTECTED (t);
10539               TREE_PRIVATE (r) = TREE_PRIVATE (t);
10540             }
10541         }
10542       else
10543         {
10544           r = copy_node (t);
10545           DECL_CHAIN (r) = NULL_TREE;
10546         }
10547       break;
10548
10549     case TYPE_DECL:
10550     case VAR_DECL:
10551       {
10552         tree argvec = NULL_TREE;
10553         tree gen_tmpl = NULL_TREE;
10554         tree spec;
10555         tree tmpl = NULL_TREE;
10556         tree ctx;
10557         tree type = NULL_TREE;
10558         bool local_p;
10559
10560         if (TREE_CODE (t) == TYPE_DECL
10561             && t == TYPE_MAIN_DECL (TREE_TYPE (t)))
10562           {
10563             /* If this is the canonical decl, we don't have to
10564                mess with instantiations, and often we can't (for
10565                typename, template type parms and such).  Note that
10566                TYPE_NAME is not correct for the above test if
10567                we've copied the type for a typedef.  */
10568             type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10569             if (type == error_mark_node)
10570               RETURN (error_mark_node);
10571             r = TYPE_NAME (type);
10572             break;
10573           }
10574
10575         /* Check to see if we already have the specialization we
10576            need.  */
10577         spec = NULL_TREE;
10578         if (DECL_CLASS_SCOPE_P (t) || DECL_NAMESPACE_SCOPE_P (t))
10579           {
10580             /* T is a static data member or namespace-scope entity.
10581                We have to substitute into namespace-scope variables
10582                (even though such entities are never templates) because
10583                of cases like:
10584                
10585                  template <class T> void f() { extern T t; }
10586
10587                where the entity referenced is not known until
10588                instantiation time.  */
10589             local_p = false;
10590             ctx = DECL_CONTEXT (t);
10591             if (DECL_CLASS_SCOPE_P (t))
10592               {
10593                 ctx = tsubst_aggr_type (ctx, args,
10594                                         complain,
10595                                         in_decl, /*entering_scope=*/1);
10596                 /* If CTX is unchanged, then T is in fact the
10597                    specialization we want.  That situation occurs when
10598                    referencing a static data member within in its own
10599                    class.  We can use pointer equality, rather than
10600                    same_type_p, because DECL_CONTEXT is always
10601                    canonical...  */
10602                 if (ctx == DECL_CONTEXT (t)
10603                     && (TREE_CODE (t) != TYPE_DECL
10604                         /* ... unless T is a member template; in which
10605                            case our caller can be willing to create a
10606                            specialization of that template represented
10607                            by T.  */
10608                         || !(DECL_TI_TEMPLATE (t)
10609                              && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (t)))))
10610                   spec = t;
10611               }
10612
10613             if (!spec)
10614               {
10615                 tmpl = DECL_TI_TEMPLATE (t);
10616                 gen_tmpl = most_general_template (tmpl);
10617                 argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
10618                 if (argvec == error_mark_node)
10619                   RETURN (error_mark_node);
10620                 hash = hash_tmpl_and_args (gen_tmpl, argvec);
10621                 spec = retrieve_specialization (gen_tmpl, argvec, hash);
10622               }
10623           }
10624         else
10625           {
10626             /* A local variable.  */
10627             local_p = true;
10628             /* Subsequent calls to pushdecl will fill this in.  */
10629             ctx = NULL_TREE;
10630             spec = retrieve_local_specialization (t);
10631           }
10632         /* If we already have the specialization we need, there is
10633            nothing more to do.  */ 
10634         if (spec)
10635           {
10636             r = spec;
10637             break;
10638           }
10639
10640         if (TREE_CODE (t) == VAR_DECL && DECL_ANON_UNION_VAR_P (t))
10641           {
10642             /* Just use name lookup to find a member alias for an anonymous
10643                union, but then add it to the hash table.  */
10644             r = lookup_name (DECL_NAME (t));
10645             gcc_assert (DECL_ANON_UNION_VAR_P (r));
10646             register_local_specialization (r, t);
10647             break;
10648           }
10649
10650         /* Create a new node for the specialization we need.  */
10651         r = copy_decl (t);
10652         if (type == NULL_TREE)
10653           {
10654             if (is_typedef_decl (t))
10655               type = DECL_ORIGINAL_TYPE (t);
10656             else
10657               type = TREE_TYPE (t);
10658             if (TREE_CODE (t) == VAR_DECL
10659                 && VAR_HAD_UNKNOWN_BOUND (t)
10660                 && type != error_mark_node)
10661               type = strip_array_domain (type);
10662             type = tsubst (type, args, complain, in_decl);
10663           }
10664         if (TREE_CODE (r) == VAR_DECL)
10665           {
10666             /* Even if the original location is out of scope, the
10667                newly substituted one is not.  */
10668             DECL_DEAD_FOR_LOCAL (r) = 0;
10669             DECL_INITIALIZED_P (r) = 0;
10670             DECL_TEMPLATE_INSTANTIATED (r) = 0;
10671             if (type == error_mark_node)
10672               RETURN (error_mark_node);
10673             if (TREE_CODE (type) == FUNCTION_TYPE)
10674               {
10675                 /* It may seem that this case cannot occur, since:
10676
10677                      typedef void f();
10678                      void g() { f x; }
10679
10680                    declares a function, not a variable.  However:
10681       
10682                      typedef void f();
10683                      template <typename T> void g() { T t; }
10684                      template void g<f>();
10685
10686                    is an attempt to declare a variable with function
10687                    type.  */
10688                 error ("variable %qD has function type",
10689                        /* R is not yet sufficiently initialized, so we
10690                           just use its name.  */
10691                        DECL_NAME (r));
10692                 RETURN (error_mark_node);
10693               }
10694             type = complete_type (type);
10695             /* Wait until cp_finish_decl to set this again, to handle
10696                circular dependency (template/instantiate6.C). */
10697             DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r) = 0;
10698             type = check_var_type (DECL_NAME (r), type);
10699
10700             if (DECL_HAS_VALUE_EXPR_P (t))
10701               {
10702                 tree ve = DECL_VALUE_EXPR (t);
10703                 ve = tsubst_expr (ve, args, complain, in_decl,
10704                                   /*constant_expression_p=*/false);
10705                 if (REFERENCE_REF_P (ve))
10706                   {
10707                     gcc_assert (TREE_CODE (type) == REFERENCE_TYPE);
10708                     ve = TREE_OPERAND (ve, 0);
10709                   }
10710                 SET_DECL_VALUE_EXPR (r, ve);
10711               }
10712           }
10713         else if (DECL_SELF_REFERENCE_P (t))
10714           SET_DECL_SELF_REFERENCE_P (r);
10715         TREE_TYPE (r) = type;
10716         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
10717         DECL_CONTEXT (r) = ctx;
10718         /* Clear out the mangled name and RTL for the instantiation.  */
10719         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
10720         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
10721           SET_DECL_RTL (r, NULL);
10722         /* The initializer must not be expanded until it is required;
10723            see [temp.inst].  */
10724         DECL_INITIAL (r) = NULL_TREE;
10725         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
10726           SET_DECL_RTL (r, NULL);
10727         DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
10728         if (TREE_CODE (r) == VAR_DECL)
10729           {
10730             /* Possibly limit visibility based on template args.  */
10731             DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
10732             if (DECL_VISIBILITY_SPECIFIED (t))
10733               {
10734                 DECL_VISIBILITY_SPECIFIED (r) = 0;
10735                 DECL_ATTRIBUTES (r)
10736                   = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
10737               }
10738             determine_visibility (r);
10739           }
10740
10741         if (!local_p)
10742           {
10743             /* A static data member declaration is always marked
10744                external when it is declared in-class, even if an
10745                initializer is present.  We mimic the non-template
10746                processing here.  */
10747             DECL_EXTERNAL (r) = 1;
10748
10749             register_specialization (r, gen_tmpl, argvec, false, hash);
10750             DECL_TEMPLATE_INFO (r) = build_template_info (tmpl, argvec);
10751             SET_DECL_IMPLICIT_INSTANTIATION (r);
10752           }
10753         else if (cp_unevaluated_operand)
10754           {
10755             /* We're substituting this var in a decltype outside of its
10756                scope, such as for a lambda return type.  Don't add it to
10757                local_specializations, do perform auto deduction.  */
10758             tree auto_node = type_uses_auto (type);
10759             if (auto_node)
10760               {
10761                 tree init
10762                   = tsubst_expr (DECL_INITIAL (t), args, complain, in_decl,
10763                                  /*constant_expression_p=*/false);
10764                 init = resolve_nondeduced_context (init);
10765                 TREE_TYPE (r) = type
10766                   = do_auto_deduction (type, init, auto_node);
10767               }
10768           }
10769         else
10770           register_local_specialization (r, t);
10771
10772         DECL_CHAIN (r) = NULL_TREE;
10773
10774         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r),
10775                                         /*flags=*/0,
10776                                         args, complain, in_decl);
10777
10778         /* Preserve a typedef that names a type.  */
10779         if (is_typedef_decl (r))
10780           {
10781             DECL_ORIGINAL_TYPE (r) = NULL_TREE;
10782             set_underlying_type (r);
10783           }
10784
10785         layout_decl (r, 0);
10786       }
10787       break;
10788
10789     default:
10790       gcc_unreachable ();
10791     }
10792 #undef RETURN
10793
10794  out:
10795   /* Restore the file and line information.  */
10796   input_location = saved_loc;
10797
10798   return r;
10799 }
10800
10801 /* Substitute into the ARG_TYPES of a function type.
10802    If END is a TREE_CHAIN, leave it and any following types
10803    un-substituted.  */
10804
10805 static tree
10806 tsubst_arg_types (tree arg_types,
10807                   tree args,
10808                   tree end,
10809                   tsubst_flags_t complain,
10810                   tree in_decl)
10811 {
10812   tree remaining_arg_types;
10813   tree type = NULL_TREE;
10814   int i = 1;
10815   tree expanded_args = NULL_TREE;
10816   tree default_arg;
10817
10818   if (!arg_types || arg_types == void_list_node || arg_types == end)
10819     return arg_types;
10820
10821   remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
10822                                           args, end, complain, in_decl);
10823   if (remaining_arg_types == error_mark_node)
10824     return error_mark_node;
10825
10826   if (PACK_EXPANSION_P (TREE_VALUE (arg_types)))
10827     {
10828       /* For a pack expansion, perform substitution on the
10829          entire expression. Later on, we'll handle the arguments
10830          one-by-one.  */
10831       expanded_args = tsubst_pack_expansion (TREE_VALUE (arg_types),
10832                                             args, complain, in_decl);
10833
10834       if (TREE_CODE (expanded_args) == TREE_VEC)
10835         /* So that we'll spin through the parameters, one by one.  */
10836         i = TREE_VEC_LENGTH (expanded_args);
10837       else
10838         {
10839           /* We only partially substituted into the parameter
10840              pack. Our type is TYPE_PACK_EXPANSION.  */
10841           type = expanded_args;
10842           expanded_args = NULL_TREE;
10843         }
10844     }
10845
10846   while (i > 0) {
10847     --i;
10848     
10849     if (expanded_args)
10850       type = TREE_VEC_ELT (expanded_args, i);
10851     else if (!type)
10852       type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
10853
10854     if (type == error_mark_node)
10855       return error_mark_node;
10856     if (VOID_TYPE_P (type))
10857       {
10858         if (complain & tf_error)
10859           {
10860             error ("invalid parameter type %qT", type);
10861             if (in_decl)
10862               error ("in declaration %q+D", in_decl);
10863           }
10864         return error_mark_node;
10865     }
10866     /* DR 657. */
10867     if (abstract_virtuals_error_sfinae (NULL_TREE, type, complain))
10868       return error_mark_node;
10869     
10870     /* Do array-to-pointer, function-to-pointer conversion, and ignore
10871        top-level qualifiers as required.  */
10872     type = cv_unqualified (type_decays_to (type));
10873
10874     /* We do not substitute into default arguments here.  The standard
10875        mandates that they be instantiated only when needed, which is
10876        done in build_over_call.  */
10877     default_arg = TREE_PURPOSE (arg_types);
10878
10879     if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
10880       {
10881         /* We've instantiated a template before its default arguments
10882            have been parsed.  This can happen for a nested template
10883            class, and is not an error unless we require the default
10884            argument in a call of this function.  */
10885         remaining_arg_types = 
10886           tree_cons (default_arg, type, remaining_arg_types);
10887         vec_safe_push (DEFARG_INSTANTIATIONS(default_arg), remaining_arg_types);
10888       }
10889     else
10890       remaining_arg_types = 
10891         hash_tree_cons (default_arg, type, remaining_arg_types);
10892   }
10893         
10894   return remaining_arg_types;
10895 }
10896
10897 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE.  This routine does
10898    *not* handle the exception-specification for FNTYPE, because the
10899    initial substitution of explicitly provided template parameters
10900    during argument deduction forbids substitution into the
10901    exception-specification:
10902
10903      [temp.deduct]
10904
10905      All references in the function type of the function template to  the
10906      corresponding template parameters are replaced by the specified tem-
10907      plate argument values.  If a substitution in a template parameter or
10908      in  the function type of the function template results in an invalid
10909      type, type deduction fails.  [Note: The equivalent  substitution  in
10910      exception specifications is done only when the function is instanti-
10911      ated, at which point a program is  ill-formed  if  the  substitution
10912      results in an invalid type.]  */
10913
10914 static tree
10915 tsubst_function_type (tree t,
10916                       tree args,
10917                       tsubst_flags_t complain,
10918                       tree in_decl)
10919 {
10920   tree return_type;
10921   tree arg_types;
10922   tree fntype;
10923
10924   /* The TYPE_CONTEXT is not used for function/method types.  */
10925   gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
10926
10927   /* Substitute the return type.  */
10928   return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10929   if (return_type == error_mark_node)
10930     return error_mark_node;
10931   /* DR 486 clarifies that creation of a function type with an
10932      invalid return type is a deduction failure.  */
10933   if (TREE_CODE (return_type) == ARRAY_TYPE
10934       || TREE_CODE (return_type) == FUNCTION_TYPE)
10935     {
10936       if (complain & tf_error)
10937         {
10938           if (TREE_CODE (return_type) == ARRAY_TYPE)
10939             error ("function returning an array");
10940           else
10941             error ("function returning a function");
10942         }
10943       return error_mark_node;
10944     }
10945   /* And DR 657. */
10946   if (abstract_virtuals_error_sfinae (NULL_TREE, return_type, complain))
10947     return error_mark_node;
10948
10949   /* Substitute the argument types.  */
10950   arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args, NULL_TREE,
10951                                 complain, in_decl);
10952   if (arg_types == error_mark_node)
10953     return error_mark_node;
10954
10955   /* Construct a new type node and return it.  */
10956   if (TREE_CODE (t) == FUNCTION_TYPE)
10957     {
10958       fntype = build_function_type (return_type, arg_types);
10959       fntype = apply_memfn_quals (fntype,
10960                                   type_memfn_quals (t),
10961                                   type_memfn_rqual (t));
10962     }
10963   else
10964     {
10965       tree r = TREE_TYPE (TREE_VALUE (arg_types));
10966       if (! MAYBE_CLASS_TYPE_P (r))
10967         {
10968           /* [temp.deduct]
10969
10970              Type deduction may fail for any of the following
10971              reasons:
10972
10973              -- Attempting to create "pointer to member of T" when T
10974              is not a class type.  */
10975           if (complain & tf_error)
10976             error ("creating pointer to member function of non-class type %qT",
10977                       r);
10978           return error_mark_node;
10979         }
10980
10981       fntype = build_method_type_directly (r, return_type,
10982                                            TREE_CHAIN (arg_types));
10983       fntype = build_ref_qualified_type (fntype, type_memfn_rqual (t));
10984     }
10985   fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
10986
10987   return fntype;
10988 }
10989
10990 /* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE.  Substitute the template
10991    ARGS into that specification, and return the substituted
10992    specification.  If there is no specification, return NULL_TREE.  */
10993
10994 static tree
10995 tsubst_exception_specification (tree fntype,
10996                                 tree args,
10997                                 tsubst_flags_t complain,
10998                                 tree in_decl,
10999                                 bool defer_ok)
11000 {
11001   tree specs;
11002   tree new_specs;
11003
11004   specs = TYPE_RAISES_EXCEPTIONS (fntype);
11005   new_specs = NULL_TREE;
11006   if (specs && TREE_PURPOSE (specs))
11007     {
11008       /* A noexcept-specifier.  */
11009       tree expr = TREE_PURPOSE (specs);
11010       if (TREE_CODE (expr) == INTEGER_CST)
11011         new_specs = expr;
11012       else if (defer_ok)
11013         {
11014           /* Defer instantiation of noexcept-specifiers to avoid
11015              excessive instantiations (c++/49107).  */
11016           new_specs = make_node (DEFERRED_NOEXCEPT);
11017           if (DEFERRED_NOEXCEPT_SPEC_P (specs))
11018             {
11019               /* We already partially instantiated this member template,
11020                  so combine the new args with the old.  */
11021               DEFERRED_NOEXCEPT_PATTERN (new_specs)
11022                 = DEFERRED_NOEXCEPT_PATTERN (expr);
11023               DEFERRED_NOEXCEPT_ARGS (new_specs)
11024                 = add_to_template_args (DEFERRED_NOEXCEPT_ARGS (expr), args);
11025             }
11026           else
11027             {
11028               DEFERRED_NOEXCEPT_PATTERN (new_specs) = expr;
11029               DEFERRED_NOEXCEPT_ARGS (new_specs) = args;
11030             }
11031         }
11032       else
11033         new_specs = tsubst_copy_and_build
11034           (expr, args, complain, in_decl, /*function_p=*/false,
11035            /*integral_constant_expression_p=*/true);
11036       new_specs = build_noexcept_spec (new_specs, complain);
11037     }
11038   else if (specs)
11039     {
11040       if (! TREE_VALUE (specs))
11041         new_specs = specs;
11042       else
11043         while (specs)
11044           {
11045             tree spec;
11046             int i, len = 1;
11047             tree expanded_specs = NULL_TREE;
11048
11049             if (PACK_EXPANSION_P (TREE_VALUE (specs)))
11050               {
11051                 /* Expand the pack expansion type.  */
11052                 expanded_specs = tsubst_pack_expansion (TREE_VALUE (specs),
11053                                                        args, complain,
11054                                                        in_decl);
11055
11056                 if (expanded_specs == error_mark_node)
11057                   return error_mark_node;
11058                 else if (TREE_CODE (expanded_specs) == TREE_VEC)
11059                   len = TREE_VEC_LENGTH (expanded_specs);
11060                 else
11061                   {
11062                     /* We're substituting into a member template, so
11063                        we got a TYPE_PACK_EXPANSION back.  Add that
11064                        expansion and move on.  */
11065                     gcc_assert (TREE_CODE (expanded_specs) 
11066                                 == TYPE_PACK_EXPANSION);
11067                     new_specs = add_exception_specifier (new_specs,
11068                                                          expanded_specs,
11069                                                          complain);
11070                     specs = TREE_CHAIN (specs);
11071                     continue;
11072                   }
11073               }
11074
11075             for (i = 0; i < len; ++i)
11076               {
11077                 if (expanded_specs)
11078                   spec = TREE_VEC_ELT (expanded_specs, i);
11079                 else
11080                   spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
11081                 if (spec == error_mark_node)
11082                   return spec;
11083                 new_specs = add_exception_specifier (new_specs, spec, 
11084                                                      complain);
11085               }
11086
11087             specs = TREE_CHAIN (specs);
11088           }
11089     }
11090   return new_specs;
11091 }
11092
11093 /* Take the tree structure T and replace template parameters used
11094    therein with the argument vector ARGS.  IN_DECL is an associated
11095    decl for diagnostics.  If an error occurs, returns ERROR_MARK_NODE.
11096    Issue error and warning messages under control of COMPLAIN.  Note
11097    that we must be relatively non-tolerant of extensions here, in
11098    order to preserve conformance; if we allow substitutions that
11099    should not be allowed, we may allow argument deductions that should
11100    not succeed, and therefore report ambiguous overload situations
11101    where there are none.  In theory, we could allow the substitution,
11102    but indicate that it should have failed, and allow our caller to
11103    make sure that the right thing happens, but we don't try to do this
11104    yet.
11105
11106    This function is used for dealing with types, decls and the like;
11107    for expressions, use tsubst_expr or tsubst_copy.  */
11108
11109 tree
11110 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
11111 {
11112   enum tree_code code;
11113   tree type, r = NULL_TREE;
11114
11115   if (t == NULL_TREE || t == error_mark_node
11116       || t == integer_type_node
11117       || t == void_type_node
11118       || t == char_type_node
11119       || t == unknown_type_node
11120       || TREE_CODE (t) == NAMESPACE_DECL
11121       || TREE_CODE (t) == TRANSLATION_UNIT_DECL)
11122     return t;
11123
11124   if (DECL_P (t))
11125     return tsubst_decl (t, args, complain);
11126
11127   if (args == NULL_TREE)
11128     return t;
11129
11130   code = TREE_CODE (t);
11131
11132   if (code == IDENTIFIER_NODE)
11133     type = IDENTIFIER_TYPE_VALUE (t);
11134   else
11135     type = TREE_TYPE (t);
11136
11137   gcc_assert (type != unknown_type_node);
11138
11139   /* Reuse typedefs.  We need to do this to handle dependent attributes,
11140      such as attribute aligned.  */
11141   if (TYPE_P (t)
11142       && typedef_variant_p (t))
11143     {
11144       tree decl = TYPE_NAME (t);
11145
11146       if (alias_template_specialization_p (t))
11147         {
11148           /* DECL represents an alias template and we want to
11149              instantiate it.  */
11150           tree tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
11151           tree gen_args = tsubst (DECL_TI_ARGS (decl), args, complain, in_decl);
11152           r = instantiate_alias_template (tmpl, gen_args, complain);
11153         }
11154       else if (DECL_CLASS_SCOPE_P (decl)
11155                && CLASSTYPE_TEMPLATE_INFO (DECL_CONTEXT (decl))
11156                && uses_template_parms (DECL_CONTEXT (decl)))
11157         {
11158           tree tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
11159           tree gen_args = tsubst (DECL_TI_ARGS (decl), args, complain, in_decl);
11160           r = retrieve_specialization (tmpl, gen_args, 0);
11161         }
11162       else if (DECL_FUNCTION_SCOPE_P (decl)
11163                && DECL_TEMPLATE_INFO (DECL_CONTEXT (decl))
11164                && uses_template_parms (DECL_TI_ARGS (DECL_CONTEXT (decl))))
11165         r = retrieve_local_specialization (decl);
11166       else
11167         /* The typedef is from a non-template context.  */
11168         return t;
11169
11170       if (r)
11171         {
11172           r = TREE_TYPE (r);
11173           r = cp_build_qualified_type_real
11174             (r, cp_type_quals (t) | cp_type_quals (r),
11175              complain | tf_ignore_bad_quals);
11176           return r;
11177         }
11178       else
11179         {
11180           /* We don't have an instantiation yet, so drop the typedef.  */
11181           int quals = cp_type_quals (t);
11182           t = DECL_ORIGINAL_TYPE (decl);
11183           t = cp_build_qualified_type_real (t, quals,
11184                                             complain | tf_ignore_bad_quals);
11185         }
11186     }
11187
11188   if (type
11189       && code != TYPENAME_TYPE
11190       && code != TEMPLATE_TYPE_PARM
11191       && code != IDENTIFIER_NODE
11192       && code != FUNCTION_TYPE
11193       && code != METHOD_TYPE)
11194     type = tsubst (type, args, complain, in_decl);
11195   if (type == error_mark_node)
11196     return error_mark_node;
11197
11198   switch (code)
11199     {
11200     case RECORD_TYPE:
11201     case UNION_TYPE:
11202     case ENUMERAL_TYPE:
11203       return tsubst_aggr_type (t, args, complain, in_decl,
11204                                /*entering_scope=*/0);
11205
11206     case ERROR_MARK:
11207     case IDENTIFIER_NODE:
11208     case VOID_TYPE:
11209     case REAL_TYPE:
11210     case COMPLEX_TYPE:
11211     case VECTOR_TYPE:
11212     case BOOLEAN_TYPE:
11213     case NULLPTR_TYPE:
11214     case LANG_TYPE:
11215       return t;
11216
11217     case INTEGER_TYPE:
11218       if (t == integer_type_node)
11219         return t;
11220
11221       if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
11222           && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
11223         return t;
11224
11225       {
11226         tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
11227
11228         max = tsubst_expr (omax, args, complain, in_decl,
11229                            /*integral_constant_expression_p=*/false);
11230
11231         /* Fix up type of the magic NOP_EXPR with TREE_SIDE_EFFECTS if
11232            needed.  */
11233         if (TREE_CODE (max) == NOP_EXPR
11234             && TREE_SIDE_EFFECTS (omax)
11235             && !TREE_TYPE (max))
11236           TREE_TYPE (max) = TREE_TYPE (TREE_OPERAND (max, 0));
11237
11238         /* If we're in a partial instantiation, preserve the magic NOP_EXPR
11239            with TREE_SIDE_EFFECTS that indicates this is not an integral
11240            constant expression.  */
11241         if (processing_template_decl
11242             && TREE_SIDE_EFFECTS (omax) && TREE_CODE (omax) == NOP_EXPR)
11243           {
11244             gcc_assert (TREE_CODE (max) == NOP_EXPR);
11245             TREE_SIDE_EFFECTS (max) = 1;
11246           }
11247
11248         return compute_array_index_type (NULL_TREE, max, complain);
11249       }
11250
11251     case TEMPLATE_TYPE_PARM:
11252     case TEMPLATE_TEMPLATE_PARM:
11253     case BOUND_TEMPLATE_TEMPLATE_PARM:
11254     case TEMPLATE_PARM_INDEX:
11255       {
11256         int idx;
11257         int level;
11258         int levels;
11259         tree arg = NULL_TREE;
11260
11261         r = NULL_TREE;
11262
11263         gcc_assert (TREE_VEC_LENGTH (args) > 0);
11264         template_parm_level_and_index (t, &level, &idx); 
11265
11266         levels = TMPL_ARGS_DEPTH (args);
11267         if (level <= levels)
11268           {
11269             arg = TMPL_ARG (args, level, idx);
11270
11271             if (arg && TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
11272               {
11273                 /* See through ARGUMENT_PACK_SELECT arguments. */
11274                 arg = ARGUMENT_PACK_SELECT_ARG (arg);
11275                 /* If the selected argument is an expansion E, that most
11276                    likely means we were called from
11277                    gen_elem_of_pack_expansion_instantiation during the
11278                    substituting of pack an argument pack (which Ith
11279                    element is a pack expansion, where I is
11280                    ARGUMENT_PACK_SELECT_INDEX) into a pack expansion.
11281                    In this case, the Ith element resulting from this
11282                    substituting is going to be a pack expansion, which
11283                    pattern is the pattern of E.  Let's return the
11284                    pattern of E, and
11285                    gen_elem_of_pack_expansion_instantiation will
11286                    build the resulting pack expansion from it.  */
11287                 if (PACK_EXPANSION_P (arg))
11288                   arg = PACK_EXPANSION_PATTERN (arg);
11289               }
11290           }
11291
11292         if (arg == error_mark_node)
11293           return error_mark_node;
11294         else if (arg != NULL_TREE)
11295           {
11296             if (ARGUMENT_PACK_P (arg))
11297               /* If ARG is an argument pack, we don't actually want to
11298                  perform a substitution here, because substitutions
11299                  for argument packs are only done
11300                  element-by-element. We can get to this point when
11301                  substituting the type of a non-type template
11302                  parameter pack, when that type actually contains
11303                  template parameter packs from an outer template, e.g.,
11304
11305                  template<typename... Types> struct A {
11306                    template<Types... Values> struct B { };
11307                  };  */
11308               return t;
11309
11310             if (code == TEMPLATE_TYPE_PARM)
11311               {
11312                 int quals;
11313                 gcc_assert (TYPE_P (arg));
11314
11315                 quals = cp_type_quals (arg) | cp_type_quals (t);
11316                   
11317                 return cp_build_qualified_type_real
11318                   (arg, quals, complain | tf_ignore_bad_quals);
11319               }
11320             else if (code == BOUND_TEMPLATE_TEMPLATE_PARM)
11321               {
11322                 /* We are processing a type constructed from a
11323                    template template parameter.  */
11324                 tree argvec = tsubst (TYPE_TI_ARGS (t),
11325                                       args, complain, in_decl);
11326                 if (argvec == error_mark_node)
11327                   return error_mark_node;
11328
11329                 gcc_assert (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
11330                             || TREE_CODE (arg) == TEMPLATE_DECL
11331                             || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
11332
11333                 if (TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE)
11334                   /* Consider this code:
11335
11336                         template <template <class> class Template>
11337                         struct Internal {
11338                         template <class Arg> using Bind = Template<Arg>;
11339                         };
11340
11341                         template <template <class> class Template, class Arg>
11342                         using Instantiate = Template<Arg>; //#0
11343
11344                         template <template <class> class Template,
11345                                   class Argument>
11346                         using Bind =
11347                           Instantiate<Internal<Template>::template Bind,
11348                                       Argument>; //#1
11349
11350                      When #1 is parsed, the
11351                      BOUND_TEMPLATE_TEMPLATE_PARM representing the
11352                      parameter `Template' in #0 matches the
11353                      UNBOUND_CLASS_TEMPLATE representing the argument
11354                      `Internal<Template>::template Bind'; We then want
11355                      to assemble the type `Bind<Argument>' that can't
11356                      be fully created right now, because
11357                      `Internal<Template>' not being complete, the Bind
11358                      template cannot be looked up in that context.  So
11359                      we need to "store" `Bind<Argument>' for later
11360                      when the context of Bind becomes complete.  Let's
11361                      store that in a TYPENAME_TYPE.  */
11362                   return make_typename_type (TYPE_CONTEXT (arg),
11363                                              build_nt (TEMPLATE_ID_EXPR,
11364                                                        TYPE_IDENTIFIER (arg),
11365                                                        argvec),
11366                                              typename_type,
11367                                              complain);
11368
11369                 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
11370                    are resolving nested-types in the signature of a
11371                    member function templates.  Otherwise ARG is a
11372                    TEMPLATE_DECL and is the real template to be
11373                    instantiated.  */
11374                 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
11375                   arg = TYPE_NAME (arg);
11376
11377                 r = lookup_template_class (arg,
11378                                            argvec, in_decl,
11379                                            DECL_CONTEXT (arg),
11380                                             /*entering_scope=*/0,
11381                                            complain);
11382                 return cp_build_qualified_type_real
11383                   (r, cp_type_quals (t), complain);
11384               }
11385             else
11386               /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX.  */
11387               return convert_from_reference (unshare_expr (arg));
11388           }
11389
11390         if (level == 1)
11391           /* This can happen during the attempted tsubst'ing in
11392              unify.  This means that we don't yet have any information
11393              about the template parameter in question.  */
11394           return t;
11395
11396         /* Early in template argument deduction substitution, we don't
11397            want to reduce the level of 'auto', or it will be confused
11398            with a normal template parm in subsequent deduction.  */
11399         if (is_auto (t) && (complain & tf_partial))
11400           return t;
11401
11402         /* If we get here, we must have been looking at a parm for a
11403            more deeply nested template.  Make a new version of this
11404            template parameter, but with a lower level.  */
11405         switch (code)
11406           {
11407           case TEMPLATE_TYPE_PARM:
11408           case TEMPLATE_TEMPLATE_PARM:
11409           case BOUND_TEMPLATE_TEMPLATE_PARM:
11410             if (cp_type_quals (t))
11411               {
11412                 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
11413                 r = cp_build_qualified_type_real
11414                   (r, cp_type_quals (t),
11415                    complain | (code == TEMPLATE_TYPE_PARM
11416                                ? tf_ignore_bad_quals : 0));
11417               }
11418             else
11419               {
11420                 r = copy_type (t);
11421                 TEMPLATE_TYPE_PARM_INDEX (r)
11422                   = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
11423                                                 r, levels, args, complain);
11424                 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
11425                 TYPE_MAIN_VARIANT (r) = r;
11426                 TYPE_POINTER_TO (r) = NULL_TREE;
11427                 TYPE_REFERENCE_TO (r) = NULL_TREE;
11428
11429                 if (TREE_CODE (r) == TEMPLATE_TEMPLATE_PARM)
11430                   /* We have reduced the level of the template
11431                      template parameter, but not the levels of its
11432                      template parameters, so canonical_type_parameter
11433                      will not be able to find the canonical template
11434                      template parameter for this level. Thus, we
11435                      require structural equality checking to compare
11436                      TEMPLATE_TEMPLATE_PARMs. */
11437                   SET_TYPE_STRUCTURAL_EQUALITY (r);
11438                 else if (TYPE_STRUCTURAL_EQUALITY_P (t))
11439                   SET_TYPE_STRUCTURAL_EQUALITY (r);
11440                 else
11441                   TYPE_CANONICAL (r) = canonical_type_parameter (r);
11442
11443                 if (code == BOUND_TEMPLATE_TEMPLATE_PARM)
11444                   {
11445                     tree argvec = tsubst (TYPE_TI_ARGS (t), args,
11446                                           complain, in_decl);
11447                     if (argvec == error_mark_node)
11448                       return error_mark_node;
11449
11450                     TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
11451                       = build_template_info (TYPE_TI_TEMPLATE (t), argvec);
11452                   }
11453               }
11454             break;
11455
11456           case TEMPLATE_PARM_INDEX:
11457             r = reduce_template_parm_level (t, type, levels, args, complain);
11458             break;
11459
11460           default:
11461             gcc_unreachable ();
11462           }
11463
11464         return r;
11465       }
11466
11467     case TREE_LIST:
11468       {
11469         tree purpose, value, chain;
11470
11471         if (t == void_list_node)
11472           return t;
11473
11474         purpose = TREE_PURPOSE (t);
11475         if (purpose)
11476           {
11477             purpose = tsubst (purpose, args, complain, in_decl);
11478             if (purpose == error_mark_node)
11479               return error_mark_node;
11480           }
11481         value = TREE_VALUE (t);
11482         if (value)
11483           {
11484             value = tsubst (value, args, complain, in_decl);
11485             if (value == error_mark_node)
11486               return error_mark_node;
11487           }
11488         chain = TREE_CHAIN (t);
11489         if (chain && chain != void_type_node)
11490           {
11491             chain = tsubst (chain, args, complain, in_decl);
11492             if (chain == error_mark_node)
11493               return error_mark_node;
11494           }
11495         if (purpose == TREE_PURPOSE (t)
11496             && value == TREE_VALUE (t)
11497             && chain == TREE_CHAIN (t))
11498           return t;
11499         return hash_tree_cons (purpose, value, chain);
11500       }
11501
11502     case TREE_BINFO:
11503       /* We should never be tsubsting a binfo.  */
11504       gcc_unreachable ();
11505
11506     case TREE_VEC:
11507       /* A vector of template arguments.  */
11508       gcc_assert (!type);
11509       return tsubst_template_args (t, args, complain, in_decl);
11510
11511     case POINTER_TYPE:
11512     case REFERENCE_TYPE:
11513       {
11514         if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
11515           return t;
11516
11517         /* [temp.deduct]
11518
11519            Type deduction may fail for any of the following
11520            reasons:
11521
11522            -- Attempting to create a pointer to reference type.
11523            -- Attempting to create a reference to a reference type or
11524               a reference to void.
11525
11526           Core issue 106 says that creating a reference to a reference
11527           during instantiation is no longer a cause for failure. We
11528           only enforce this check in strict C++98 mode.  */
11529         if ((TREE_CODE (type) == REFERENCE_TYPE
11530              && (((cxx_dialect == cxx98) && flag_iso) || code != REFERENCE_TYPE))
11531             || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
11532           {
11533             static location_t last_loc;
11534
11535             /* We keep track of the last time we issued this error
11536                message to avoid spewing a ton of messages during a
11537                single bad template instantiation.  */
11538             if (complain & tf_error
11539                 && last_loc != input_location)
11540               {
11541                 if (TREE_CODE (type) == VOID_TYPE)
11542                   error ("forming reference to void");
11543                else if (code == POINTER_TYPE)
11544                  error ("forming pointer to reference type %qT", type);
11545                else
11546                   error ("forming reference to reference type %qT", type);
11547                 last_loc = input_location;
11548               }
11549
11550             return error_mark_node;
11551           }
11552         else if (code == POINTER_TYPE)
11553           {
11554             r = build_pointer_type (type);
11555             if (TREE_CODE (type) == METHOD_TYPE)
11556               r = build_ptrmemfunc_type (r);
11557           }
11558         else if (TREE_CODE (type) == REFERENCE_TYPE)
11559           /* In C++0x, during template argument substitution, when there is an
11560              attempt to create a reference to a reference type, reference
11561              collapsing is applied as described in [14.3.1/4 temp.arg.type]:
11562
11563              "If a template-argument for a template-parameter T names a type
11564              that is a reference to a type A, an attempt to create the type
11565              'lvalue reference to cv T' creates the type 'lvalue reference to
11566              A,' while an attempt to create the type type rvalue reference to
11567              cv T' creates the type T"
11568           */
11569           r = cp_build_reference_type
11570               (TREE_TYPE (type),
11571                TYPE_REF_IS_RVALUE (t) && TYPE_REF_IS_RVALUE (type));
11572         else
11573           r = cp_build_reference_type (type, TYPE_REF_IS_RVALUE (t));
11574         r = cp_build_qualified_type_real (r, cp_type_quals (t), complain);
11575
11576         if (r != error_mark_node)
11577           /* Will this ever be needed for TYPE_..._TO values?  */
11578           layout_type (r);
11579
11580         return r;
11581       }
11582     case OFFSET_TYPE:
11583       {
11584         r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
11585         if (r == error_mark_node || !MAYBE_CLASS_TYPE_P (r))
11586           {
11587             /* [temp.deduct]
11588
11589                Type deduction may fail for any of the following
11590                reasons:
11591
11592                -- Attempting to create "pointer to member of T" when T
11593                   is not a class type.  */
11594             if (complain & tf_error)
11595               error ("creating pointer to member of non-class type %qT", r);
11596             return error_mark_node;
11597           }
11598         if (TREE_CODE (type) == REFERENCE_TYPE)
11599           {
11600             if (complain & tf_error)
11601               error ("creating pointer to member reference type %qT", type);
11602             return error_mark_node;
11603           }
11604         if (TREE_CODE (type) == VOID_TYPE)
11605           {
11606             if (complain & tf_error)
11607               error ("creating pointer to member of type void");
11608             return error_mark_node;
11609           }
11610         gcc_assert (TREE_CODE (type) != METHOD_TYPE);
11611         if (TREE_CODE (type) == FUNCTION_TYPE)
11612           {
11613             /* The type of the implicit object parameter gets its
11614                cv-qualifiers from the FUNCTION_TYPE. */
11615             tree memptr;
11616             tree method_type
11617               = build_memfn_type (type, r, type_memfn_quals (type),
11618                                   type_memfn_rqual (type));
11619             memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
11620             return cp_build_qualified_type_real (memptr, cp_type_quals (t),
11621                                                  complain);
11622           }
11623         else
11624           return cp_build_qualified_type_real (build_ptrmem_type (r, type),
11625                                                cp_type_quals (t),
11626                                                complain);
11627       }
11628     case FUNCTION_TYPE:
11629     case METHOD_TYPE:
11630       {
11631         tree fntype;
11632         tree specs;
11633         fntype = tsubst_function_type (t, args, complain, in_decl);
11634         if (fntype == error_mark_node)
11635           return error_mark_node;
11636
11637         /* Substitute the exception specification.  */
11638         specs = tsubst_exception_specification (t, args, complain,
11639                                                 in_decl, /*defer_ok*/true);
11640         if (specs == error_mark_node)
11641           return error_mark_node;
11642         if (specs)
11643           fntype = build_exception_variant (fntype, specs);
11644         return fntype;
11645       }
11646     case ARRAY_TYPE:
11647       {
11648         tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
11649         if (domain == error_mark_node)
11650           return error_mark_node;
11651
11652         /* As an optimization, we avoid regenerating the array type if
11653            it will obviously be the same as T.  */
11654         if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
11655           return t;
11656
11657         /* These checks should match the ones in grokdeclarator.
11658
11659            [temp.deduct]
11660
11661            The deduction may fail for any of the following reasons:
11662
11663            -- Attempting to create an array with an element type that
11664               is void, a function type, or a reference type, or [DR337]
11665               an abstract class type.  */
11666         if (TREE_CODE (type) == VOID_TYPE
11667             || TREE_CODE (type) == FUNCTION_TYPE
11668             || TREE_CODE (type) == REFERENCE_TYPE)
11669           {
11670             if (complain & tf_error)
11671               error ("creating array of %qT", type);
11672             return error_mark_node;
11673           }
11674         if (ABSTRACT_CLASS_TYPE_P (type))
11675           {
11676             if (complain & tf_error)
11677               error ("creating array of %qT, which is an abstract class type",
11678                      type);
11679             return error_mark_node;
11680           }
11681
11682         r = build_cplus_array_type (type, domain);
11683
11684         if (TYPE_USER_ALIGN (t))
11685           {
11686             TYPE_ALIGN (r) = TYPE_ALIGN (t);
11687             TYPE_USER_ALIGN (r) = 1;
11688           }
11689
11690         return r;
11691       }
11692
11693     case TYPENAME_TYPE:
11694       {
11695         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
11696                                      in_decl, /*entering_scope=*/1);
11697         tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
11698                               complain, in_decl);
11699
11700         if (ctx == error_mark_node || f == error_mark_node)
11701           return error_mark_node;
11702
11703         if (!MAYBE_CLASS_TYPE_P (ctx))
11704           {
11705             if (complain & tf_error)
11706               error ("%qT is not a class, struct, or union type", ctx);
11707             return error_mark_node;
11708           }
11709         else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
11710           {
11711             /* Normally, make_typename_type does not require that the CTX
11712                have complete type in order to allow things like:
11713
11714                  template <class T> struct S { typename S<T>::X Y; };
11715
11716                But, such constructs have already been resolved by this
11717                point, so here CTX really should have complete type, unless
11718                it's a partial instantiation.  */
11719             ctx = complete_type (ctx);
11720             if (!COMPLETE_TYPE_P (ctx))
11721               {
11722                 if (complain & tf_error)
11723                   cxx_incomplete_type_error (NULL_TREE, ctx);
11724                 return error_mark_node;
11725               }
11726           }
11727
11728         f = make_typename_type (ctx, f, typename_type,
11729                                 complain | tf_keep_type_decl);
11730         if (f == error_mark_node)
11731           return f;
11732         if (TREE_CODE (f) == TYPE_DECL)
11733           {
11734             complain |= tf_ignore_bad_quals;
11735             f = TREE_TYPE (f);
11736           }
11737
11738         if (TREE_CODE (f) != TYPENAME_TYPE)
11739           {
11740             if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
11741               {
11742                 if (complain & tf_error)
11743                   error ("%qT resolves to %qT, which is not an enumeration type",
11744                          t, f);
11745                 else
11746                   return error_mark_node;
11747               }
11748             else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
11749               {
11750                 if (complain & tf_error)
11751                   error ("%qT resolves to %qT, which is is not a class type",
11752                          t, f);
11753                 else
11754                   return error_mark_node;
11755               }
11756           }
11757
11758         return cp_build_qualified_type_real
11759           (f, cp_type_quals (f) | cp_type_quals (t), complain);
11760       }
11761
11762     case UNBOUND_CLASS_TEMPLATE:
11763       {
11764         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
11765                                      in_decl, /*entering_scope=*/1);
11766         tree name = TYPE_IDENTIFIER (t);
11767         tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
11768
11769         if (ctx == error_mark_node || name == error_mark_node)
11770           return error_mark_node;
11771
11772         if (parm_list)
11773           parm_list = tsubst_template_parms (parm_list, args, complain);
11774         return make_unbound_class_template (ctx, name, parm_list, complain);
11775       }
11776
11777     case TYPEOF_TYPE:
11778       {
11779         tree type;
11780
11781         ++cp_unevaluated_operand;
11782         ++c_inhibit_evaluation_warnings;
11783
11784         type = tsubst_expr (TYPEOF_TYPE_EXPR (t), args,
11785                             complain, in_decl,
11786                             /*integral_constant_expression_p=*/false);
11787
11788         --cp_unevaluated_operand;
11789         --c_inhibit_evaluation_warnings;
11790
11791         type = finish_typeof (type);
11792         return cp_build_qualified_type_real (type,
11793                                              cp_type_quals (t)
11794                                              | cp_type_quals (type),
11795                                              complain);
11796       }
11797
11798     case DECLTYPE_TYPE:
11799       {
11800         tree type;
11801
11802         ++cp_unevaluated_operand;
11803         ++c_inhibit_evaluation_warnings;
11804
11805         type = tsubst_expr (DECLTYPE_TYPE_EXPR (t), args,
11806                             complain|tf_decltype, in_decl,
11807                             /*integral_constant_expression_p=*/false);
11808
11809         --cp_unevaluated_operand;
11810         --c_inhibit_evaluation_warnings;
11811
11812         if (DECLTYPE_FOR_LAMBDA_CAPTURE (t))
11813           type = lambda_capture_field_type (type);
11814         else if (DECLTYPE_FOR_LAMBDA_PROXY (t))
11815           type = lambda_proxy_type (type);
11816         else
11817           {
11818             bool id = DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t);
11819             if (id && TREE_CODE (DECLTYPE_TYPE_EXPR (t)) == BIT_NOT_EXPR
11820                 && EXPR_P (type))
11821               /* In a template ~id could be either a complement expression
11822                  or an unqualified-id naming a destructor; if instantiating
11823                  it produces an expression, it's not an id-expression or
11824                  member access.  */
11825               id = false;
11826             type = finish_decltype_type (type, id, complain);
11827           }
11828         return cp_build_qualified_type_real (type,
11829                                              cp_type_quals (t)
11830                                              | cp_type_quals (type),
11831                                              complain);
11832       }
11833
11834     case UNDERLYING_TYPE:
11835       {
11836         tree type = tsubst (UNDERLYING_TYPE_TYPE (t), args,
11837                             complain, in_decl);
11838         return finish_underlying_type (type);
11839       }
11840
11841     case TYPE_ARGUMENT_PACK:
11842     case NONTYPE_ARGUMENT_PACK:
11843       {
11844         tree r = TYPE_P (t) ? cxx_make_type (code) : make_node (code);
11845         tree packed_out = 
11846           tsubst_template_args (ARGUMENT_PACK_ARGS (t), 
11847                                 args,
11848                                 complain,
11849                                 in_decl);
11850         SET_ARGUMENT_PACK_ARGS (r, packed_out);
11851
11852         /* For template nontype argument packs, also substitute into
11853            the type.  */
11854         if (code == NONTYPE_ARGUMENT_PACK)
11855           TREE_TYPE (r) = tsubst (TREE_TYPE (t), args, complain, in_decl);
11856
11857         return r;
11858       }
11859       break;
11860
11861     case INTEGER_CST:
11862     case REAL_CST:
11863     case STRING_CST:
11864     case PLUS_EXPR:
11865     case MINUS_EXPR:
11866     case NEGATE_EXPR:
11867     case NOP_EXPR:
11868     case INDIRECT_REF:
11869     case ADDR_EXPR:
11870     case CALL_EXPR:
11871     case ARRAY_REF:
11872     case SCOPE_REF:
11873       /* We should use one of the expression tsubsts for these codes.  */
11874       gcc_unreachable ();
11875
11876     default:
11877       sorry ("use of %qs in template", tree_code_name [(int) code]);
11878       return error_mark_node;
11879     }
11880 }
11881
11882 /* Like tsubst_expr for a BASELINK.  OBJECT_TYPE, if non-NULL, is the
11883    type of the expression on the left-hand side of the "." or "->"
11884    operator.  */
11885
11886 static tree
11887 tsubst_baselink (tree baselink, tree object_type,
11888                  tree args, tsubst_flags_t complain, tree in_decl)
11889 {
11890     tree name;
11891     tree qualifying_scope;
11892     tree fns;
11893     tree optype;
11894     tree template_args = 0;
11895     bool template_id_p = false;
11896     bool qualified = BASELINK_QUALIFIED_P (baselink);
11897
11898     /* A baselink indicates a function from a base class.  Both the
11899        BASELINK_ACCESS_BINFO and the base class referenced may
11900        indicate bases of the template class, rather than the
11901        instantiated class.  In addition, lookups that were not
11902        ambiguous before may be ambiguous now.  Therefore, we perform
11903        the lookup again.  */
11904     qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
11905     qualifying_scope = tsubst (qualifying_scope, args,
11906                                complain, in_decl);
11907     fns = BASELINK_FUNCTIONS (baselink);
11908     optype = tsubst (BASELINK_OPTYPE (baselink), args, complain, in_decl);
11909     if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
11910       {
11911         template_id_p = true;
11912         template_args = TREE_OPERAND (fns, 1);
11913         fns = TREE_OPERAND (fns, 0);
11914         if (template_args)
11915           template_args = tsubst_template_args (template_args, args,
11916                                                 complain, in_decl);
11917       }
11918     name = DECL_NAME (get_first_fn (fns));
11919     if (IDENTIFIER_TYPENAME_P (name))
11920       name = mangle_conv_op_name_for_type (optype);
11921     baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
11922     if (!baselink)
11923       return error_mark_node;
11924
11925     /* If lookup found a single function, mark it as used at this
11926        point.  (If it lookup found multiple functions the one selected
11927        later by overload resolution will be marked as used at that
11928        point.)  */
11929     if (BASELINK_P (baselink))
11930       fns = BASELINK_FUNCTIONS (baselink);
11931     if (!template_id_p && !really_overloaded_fn (fns))
11932       mark_used (OVL_CURRENT (fns));
11933
11934     /* Add back the template arguments, if present.  */
11935     if (BASELINK_P (baselink) && template_id_p)
11936       BASELINK_FUNCTIONS (baselink)
11937         = build_nt (TEMPLATE_ID_EXPR,
11938                     BASELINK_FUNCTIONS (baselink),
11939                     template_args);
11940     /* Update the conversion operator type.  */
11941     BASELINK_OPTYPE (baselink) = optype;
11942
11943     if (!object_type)
11944       object_type = current_class_type;
11945
11946     if (qualified)
11947       baselink = adjust_result_of_qualified_name_lookup (baselink,
11948                                                          qualifying_scope,
11949                                                          object_type);
11950     return baselink;
11951 }
11952
11953 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID.  DONE is
11954    true if the qualified-id will be a postfix-expression in-and-of
11955    itself; false if more of the postfix-expression follows the
11956    QUALIFIED_ID.  ADDRESS_P is true if the qualified-id is the operand
11957    of "&".  */
11958
11959 static tree
11960 tsubst_qualified_id (tree qualified_id, tree args,
11961                      tsubst_flags_t complain, tree in_decl,
11962                      bool done, bool address_p)
11963 {
11964   tree expr;
11965   tree scope;
11966   tree name;
11967   bool is_template;
11968   tree template_args;
11969   location_t loc = UNKNOWN_LOCATION;
11970
11971   gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
11972
11973   /* Figure out what name to look up.  */
11974   name = TREE_OPERAND (qualified_id, 1);
11975   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
11976     {
11977       is_template = true;
11978       loc = EXPR_LOCATION (name);
11979       template_args = TREE_OPERAND (name, 1);
11980       if (template_args)
11981         template_args = tsubst_template_args (template_args, args,
11982                                               complain, in_decl);
11983       name = TREE_OPERAND (name, 0);
11984     }
11985   else
11986     {
11987       is_template = false;
11988       template_args = NULL_TREE;
11989     }
11990
11991   /* Substitute into the qualifying scope.  When there are no ARGS, we
11992      are just trying to simplify a non-dependent expression.  In that
11993      case the qualifying scope may be dependent, and, in any case,
11994      substituting will not help.  */
11995   scope = TREE_OPERAND (qualified_id, 0);
11996   if (args)
11997     {
11998       scope = tsubst (scope, args, complain, in_decl);
11999       expr = tsubst_copy (name, args, complain, in_decl);
12000     }
12001   else
12002     expr = name;
12003
12004   if (dependent_scope_p (scope))
12005     {
12006       if (is_template)
12007         expr = build_min_nt_loc (loc, TEMPLATE_ID_EXPR, expr, template_args);
12008       return build_qualified_name (NULL_TREE, scope, expr,
12009                                    QUALIFIED_NAME_IS_TEMPLATE (qualified_id));
12010     }
12011
12012   if (!BASELINK_P (name) && !DECL_P (expr))
12013     {
12014       if (TREE_CODE (expr) == BIT_NOT_EXPR)
12015         {
12016           /* A BIT_NOT_EXPR is used to represent a destructor.  */
12017           if (!check_dtor_name (scope, TREE_OPERAND (expr, 0)))
12018             {
12019               error ("qualifying type %qT does not match destructor name ~%qT",
12020                      scope, TREE_OPERAND (expr, 0));
12021               expr = error_mark_node;
12022             }
12023           else
12024             expr = lookup_qualified_name (scope, complete_dtor_identifier,
12025                                           /*is_type_p=*/0, false);
12026         }
12027       else
12028         expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
12029       if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
12030                      ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
12031         {
12032           if (complain & tf_error)
12033             {
12034               error ("dependent-name %qE is parsed as a non-type, but "
12035                      "instantiation yields a type", qualified_id);
12036               inform (input_location, "say %<typename %E%> if a type is meant", qualified_id);
12037             }
12038           return error_mark_node;
12039         }
12040     }
12041
12042   if (DECL_P (expr))
12043     {
12044       check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
12045                                            scope);
12046       /* Remember that there was a reference to this entity.  */
12047       mark_used (expr);
12048     }
12049
12050   if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
12051     {
12052       if (complain & tf_error)
12053         qualified_name_lookup_error (scope,
12054                                      TREE_OPERAND (qualified_id, 1),
12055                                      expr, input_location);
12056       return error_mark_node;
12057     }
12058
12059   if (is_template)
12060     expr = lookup_template_function (expr, template_args);
12061
12062   if (expr == error_mark_node && complain & tf_error)
12063     qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
12064                                  expr, input_location);
12065   else if (TYPE_P (scope))
12066     {
12067       expr = (adjust_result_of_qualified_name_lookup
12068               (expr, scope, current_nonlambda_class_type ()));
12069       expr = (finish_qualified_id_expr
12070               (scope, expr, done, address_p && PTRMEM_OK_P (qualified_id),
12071                QUALIFIED_NAME_IS_TEMPLATE (qualified_id),
12072                /*template_arg_p=*/false, complain));
12073     }
12074
12075   /* Expressions do not generally have reference type.  */
12076   if (TREE_CODE (expr) != SCOPE_REF
12077       /* However, if we're about to form a pointer-to-member, we just
12078          want the referenced member referenced.  */
12079       && TREE_CODE (expr) != OFFSET_REF)
12080     expr = convert_from_reference (expr);
12081
12082   return expr;
12083 }
12084
12085 /* Like tsubst, but deals with expressions.  This function just replaces
12086    template parms; to finish processing the resultant expression, use
12087    tsubst_copy_and_build or tsubst_expr.  */
12088
12089 static tree
12090 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
12091 {
12092   enum tree_code code;
12093   tree r;
12094
12095   if (t == NULL_TREE || t == error_mark_node || args == NULL_TREE)
12096     return t;
12097
12098   code = TREE_CODE (t);
12099
12100   switch (code)
12101     {
12102     case PARM_DECL:
12103       r = retrieve_local_specialization (t);
12104
12105       if (r == NULL_TREE)
12106         {
12107           /* We get here for a use of 'this' in an NSDMI.  */
12108           if (DECL_NAME (t) == this_identifier
12109               && at_function_scope_p ()
12110               && DECL_CONSTRUCTOR_P (current_function_decl))
12111             return current_class_ptr;
12112
12113           /* This can happen for a parameter name used later in a function
12114              declaration (such as in a late-specified return type).  Just
12115              make a dummy decl, since it's only used for its type.  */
12116           gcc_assert (cp_unevaluated_operand != 0);
12117           r = tsubst_decl (t, args, complain);
12118           /* Give it the template pattern as its context; its true context
12119              hasn't been instantiated yet and this is good enough for
12120              mangling.  */
12121           DECL_CONTEXT (r) = DECL_CONTEXT (t);
12122         }
12123       
12124       if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
12125         r = ARGUMENT_PACK_SELECT_ARG (r);
12126       mark_used (r);
12127       return r;
12128
12129     case CONST_DECL:
12130       {
12131         tree enum_type;
12132         tree v;
12133
12134         if (DECL_TEMPLATE_PARM_P (t))
12135           return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
12136         /* There is no need to substitute into namespace-scope
12137            enumerators.  */
12138         if (DECL_NAMESPACE_SCOPE_P (t))
12139           return t;
12140         /* If ARGS is NULL, then T is known to be non-dependent.  */
12141         if (args == NULL_TREE)
12142           return integral_constant_value (t);
12143
12144         /* Unfortunately, we cannot just call lookup_name here.
12145            Consider:
12146
12147              template <int I> int f() {
12148              enum E { a = I };
12149              struct S { void g() { E e = a; } };
12150              };
12151
12152            When we instantiate f<7>::S::g(), say, lookup_name is not
12153            clever enough to find f<7>::a.  */
12154         enum_type
12155           = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
12156                               /*entering_scope=*/0);
12157
12158         for (v = TYPE_VALUES (enum_type);
12159              v != NULL_TREE;
12160              v = TREE_CHAIN (v))
12161           if (TREE_PURPOSE (v) == DECL_NAME (t))
12162             return TREE_VALUE (v);
12163
12164           /* We didn't find the name.  That should never happen; if
12165              name-lookup found it during preliminary parsing, we
12166              should find it again here during instantiation.  */
12167         gcc_unreachable ();
12168       }
12169       return t;
12170
12171     case FIELD_DECL:
12172       if (DECL_CONTEXT (t))
12173         {
12174           tree ctx;
12175
12176           ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
12177                                   /*entering_scope=*/1);
12178           if (ctx != DECL_CONTEXT (t))
12179             {
12180               tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
12181               if (!r)
12182                 {
12183                   if (complain & tf_error)
12184                     error ("using invalid field %qD", t);
12185                   return error_mark_node;
12186                 }
12187               return r;
12188             }
12189         }
12190
12191       return t;
12192
12193     case VAR_DECL:
12194     case FUNCTION_DECL:
12195       if ((DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
12196           || local_variable_p (t))
12197         t = tsubst (t, args, complain, in_decl);
12198       mark_used (t);
12199       return t;
12200
12201     case NAMESPACE_DECL:
12202       return t;
12203
12204     case OVERLOAD:
12205       /* An OVERLOAD will always be a non-dependent overload set; an
12206          overload set from function scope will just be represented with an
12207          IDENTIFIER_NODE, and from class scope with a BASELINK.  */
12208       gcc_assert (!uses_template_parms (t));
12209       return t;
12210
12211     case BASELINK:
12212       return tsubst_baselink (t, current_class_type, args, complain, in_decl);
12213
12214     case TEMPLATE_DECL:
12215       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
12216         return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
12217                        args, complain, in_decl);
12218       else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
12219         return tsubst (t, args, complain, in_decl);
12220       else if (DECL_CLASS_SCOPE_P (t)
12221                && uses_template_parms (DECL_CONTEXT (t)))
12222         {
12223           /* Template template argument like the following example need
12224              special treatment:
12225
12226                template <template <class> class TT> struct C {};
12227                template <class T> struct D {
12228                  template <class U> struct E {};
12229                  C<E> c;                                // #1
12230                };
12231                D<int> d;                                // #2
12232
12233              We are processing the template argument `E' in #1 for
12234              the template instantiation #2.  Originally, `E' is a
12235              TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT.  Now we
12236              have to substitute this with one having context `D<int>'.  */
12237
12238           tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
12239           return lookup_field (context, DECL_NAME(t), 0, false);
12240         }
12241       else
12242         /* Ordinary template template argument.  */
12243         return t;
12244
12245     case CAST_EXPR:
12246     case REINTERPRET_CAST_EXPR:
12247     case CONST_CAST_EXPR:
12248     case STATIC_CAST_EXPR:
12249     case DYNAMIC_CAST_EXPR:
12250     case IMPLICIT_CONV_EXPR:
12251     case CONVERT_EXPR:
12252     case NOP_EXPR:
12253       return build1
12254         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
12255          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
12256
12257     case SIZEOF_EXPR:
12258       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
12259         {
12260
12261           tree expanded, op = TREE_OPERAND (t, 0);
12262           int len = 0;
12263
12264           if (SIZEOF_EXPR_TYPE_P (t))
12265             op = TREE_TYPE (op);
12266
12267           ++cp_unevaluated_operand;
12268           ++c_inhibit_evaluation_warnings;
12269           /* We only want to compute the number of arguments.  */
12270           expanded = tsubst_pack_expansion (op, args, complain, in_decl);
12271           --cp_unevaluated_operand;
12272           --c_inhibit_evaluation_warnings;
12273
12274           if (TREE_CODE (expanded) == TREE_VEC)
12275             len = TREE_VEC_LENGTH (expanded);
12276
12277           if (expanded == error_mark_node)
12278             return error_mark_node;
12279           else if (PACK_EXPANSION_P (expanded)
12280                    || (TREE_CODE (expanded) == TREE_VEC
12281                        && len > 0
12282                        && PACK_EXPANSION_P (TREE_VEC_ELT (expanded, len-1))))
12283             {
12284               if (TREE_CODE (expanded) == TREE_VEC)
12285                 expanded = TREE_VEC_ELT (expanded, len - 1);
12286
12287               if (TYPE_P (expanded))
12288                 return cxx_sizeof_or_alignof_type (expanded, SIZEOF_EXPR, 
12289                                                    complain & tf_error);
12290               else
12291                 return cxx_sizeof_or_alignof_expr (expanded, SIZEOF_EXPR,
12292                                                    complain & tf_error);
12293             }
12294           else
12295             return build_int_cst (size_type_node, len);
12296         }
12297       if (SIZEOF_EXPR_TYPE_P (t))
12298         {
12299           r = tsubst (TREE_TYPE (TREE_OPERAND (t, 0)),
12300                       args, complain, in_decl);
12301           r = build1 (NOP_EXPR, r, error_mark_node);
12302           r = build1 (SIZEOF_EXPR,
12303                       tsubst (TREE_TYPE (t), args, complain, in_decl), r);
12304           SIZEOF_EXPR_TYPE_P (r) = 1;
12305           return r;
12306         }
12307       /* Fall through */
12308
12309     case INDIRECT_REF:
12310     case NEGATE_EXPR:
12311     case TRUTH_NOT_EXPR:
12312     case BIT_NOT_EXPR:
12313     case ADDR_EXPR:
12314     case UNARY_PLUS_EXPR:      /* Unary + */
12315     case ALIGNOF_EXPR:
12316     case AT_ENCODE_EXPR:
12317     case ARROW_EXPR:
12318     case THROW_EXPR:
12319     case TYPEID_EXPR:
12320     case REALPART_EXPR:
12321     case IMAGPART_EXPR:
12322       return build1
12323         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
12324          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
12325
12326     case COMPONENT_REF:
12327       {
12328         tree object;
12329         tree name;
12330
12331         object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
12332         name = TREE_OPERAND (t, 1);
12333         if (TREE_CODE (name) == BIT_NOT_EXPR)
12334           {
12335             name = tsubst_copy (TREE_OPERAND (name, 0), args,
12336                                 complain, in_decl);
12337             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
12338           }
12339         else if (TREE_CODE (name) == SCOPE_REF
12340                  && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
12341           {
12342             tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
12343                                      complain, in_decl);
12344             name = TREE_OPERAND (name, 1);
12345             name = tsubst_copy (TREE_OPERAND (name, 0), args,
12346                                 complain, in_decl);
12347             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
12348             name = build_qualified_name (/*type=*/NULL_TREE,
12349                                          base, name,
12350                                          /*template_p=*/false);
12351           }
12352         else if (BASELINK_P (name))
12353           name = tsubst_baselink (name,
12354                                   non_reference (TREE_TYPE (object)),
12355                                   args, complain,
12356                                   in_decl);
12357         else
12358           name = tsubst_copy (name, args, complain, in_decl);
12359         return build_nt (COMPONENT_REF, object, name, NULL_TREE);
12360       }
12361
12362     case PLUS_EXPR:
12363     case MINUS_EXPR:
12364     case MULT_EXPR:
12365     case TRUNC_DIV_EXPR:
12366     case CEIL_DIV_EXPR:
12367     case FLOOR_DIV_EXPR:
12368     case ROUND_DIV_EXPR:
12369     case EXACT_DIV_EXPR:
12370     case BIT_AND_EXPR:
12371     case BIT_IOR_EXPR:
12372     case BIT_XOR_EXPR:
12373     case TRUNC_MOD_EXPR:
12374     case FLOOR_MOD_EXPR:
12375     case TRUTH_ANDIF_EXPR:
12376     case TRUTH_ORIF_EXPR:
12377     case TRUTH_AND_EXPR:
12378     case TRUTH_OR_EXPR:
12379     case RSHIFT_EXPR:
12380     case LSHIFT_EXPR:
12381     case RROTATE_EXPR:
12382     case LROTATE_EXPR:
12383     case EQ_EXPR:
12384     case NE_EXPR:
12385     case MAX_EXPR:
12386     case MIN_EXPR:
12387     case LE_EXPR:
12388     case GE_EXPR:
12389     case LT_EXPR:
12390     case GT_EXPR:
12391     case COMPOUND_EXPR:
12392     case DOTSTAR_EXPR:
12393     case MEMBER_REF:
12394     case PREDECREMENT_EXPR:
12395     case PREINCREMENT_EXPR:
12396     case POSTDECREMENT_EXPR:
12397     case POSTINCREMENT_EXPR:
12398       return build_nt
12399         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12400          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
12401
12402     case SCOPE_REF:
12403       return build_qualified_name (/*type=*/NULL_TREE,
12404                                    tsubst_copy (TREE_OPERAND (t, 0),
12405                                                 args, complain, in_decl),
12406                                    tsubst_copy (TREE_OPERAND (t, 1),
12407                                                 args, complain, in_decl),
12408                                    QUALIFIED_NAME_IS_TEMPLATE (t));
12409
12410     case ARRAY_REF:
12411       return build_nt
12412         (ARRAY_REF,
12413          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12414          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
12415          NULL_TREE, NULL_TREE);
12416
12417     case CALL_EXPR:
12418       {
12419         int n = VL_EXP_OPERAND_LENGTH (t);
12420         tree result = build_vl_exp (CALL_EXPR, n);
12421         int i;
12422         for (i = 0; i < n; i++)
12423           TREE_OPERAND (t, i) = tsubst_copy (TREE_OPERAND (t, i), args,
12424                                              complain, in_decl);
12425         return result;
12426       }
12427
12428     case COND_EXPR:
12429     case MODOP_EXPR:
12430     case PSEUDO_DTOR_EXPR:
12431       {
12432         r = build_nt
12433           (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12434            tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
12435            tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
12436         TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
12437         return r;
12438       }
12439
12440     case NEW_EXPR:
12441       {
12442         r = build_nt
12443         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12444          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
12445          tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
12446         NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
12447         return r;
12448       }
12449
12450     case DELETE_EXPR:
12451       {
12452         r = build_nt
12453         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12454          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
12455         DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
12456         DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
12457         return r;
12458       }
12459
12460     case TEMPLATE_ID_EXPR:
12461       {
12462         /* Substituted template arguments */
12463         tree fn = TREE_OPERAND (t, 0);
12464         tree targs = TREE_OPERAND (t, 1);
12465
12466         fn = tsubst_copy (fn, args, complain, in_decl);
12467         if (targs)
12468           targs = tsubst_template_args (targs, args, complain, in_decl);
12469
12470         return lookup_template_function (fn, targs);
12471       }
12472
12473     case TREE_LIST:
12474       {
12475         tree purpose, value, chain;
12476
12477         if (t == void_list_node)
12478           return t;
12479
12480         purpose = TREE_PURPOSE (t);
12481         if (purpose)
12482           purpose = tsubst_copy (purpose, args, complain, in_decl);
12483         value = TREE_VALUE (t);
12484         if (value)
12485           value = tsubst_copy (value, args, complain, in_decl);
12486         chain = TREE_CHAIN (t);
12487         if (chain && chain != void_type_node)
12488           chain = tsubst_copy (chain, args, complain, in_decl);
12489         if (purpose == TREE_PURPOSE (t)
12490             && value == TREE_VALUE (t)
12491             && chain == TREE_CHAIN (t))
12492           return t;
12493         return tree_cons (purpose, value, chain);
12494       }
12495
12496     case RECORD_TYPE:
12497     case UNION_TYPE:
12498     case ENUMERAL_TYPE:
12499     case INTEGER_TYPE:
12500     case TEMPLATE_TYPE_PARM:
12501     case TEMPLATE_TEMPLATE_PARM:
12502     case BOUND_TEMPLATE_TEMPLATE_PARM:
12503     case TEMPLATE_PARM_INDEX:
12504     case POINTER_TYPE:
12505     case REFERENCE_TYPE:
12506     case OFFSET_TYPE:
12507     case FUNCTION_TYPE:
12508     case METHOD_TYPE:
12509     case ARRAY_TYPE:
12510     case TYPENAME_TYPE:
12511     case UNBOUND_CLASS_TEMPLATE:
12512     case TYPEOF_TYPE:
12513     case DECLTYPE_TYPE:
12514     case TYPE_DECL:
12515       return tsubst (t, args, complain, in_decl);
12516
12517     case USING_DECL:
12518       t = DECL_NAME (t);
12519       /* Fall through.  */
12520     case IDENTIFIER_NODE:
12521       if (IDENTIFIER_TYPENAME_P (t))
12522         {
12523           tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
12524           return mangle_conv_op_name_for_type (new_type);
12525         }
12526       else
12527         return t;
12528
12529     case CONSTRUCTOR:
12530       /* This is handled by tsubst_copy_and_build.  */
12531       gcc_unreachable ();
12532
12533     case VA_ARG_EXPR:
12534       return build_x_va_arg (EXPR_LOCATION (t),
12535                              tsubst_copy (TREE_OPERAND (t, 0), args, complain,
12536                                           in_decl),
12537                              tsubst (TREE_TYPE (t), args, complain, in_decl));
12538
12539     case CLEANUP_POINT_EXPR:
12540       /* We shouldn't have built any of these during initial template
12541          generation.  Instead, they should be built during instantiation
12542          in response to the saved STMT_IS_FULL_EXPR_P setting.  */
12543       gcc_unreachable ();
12544
12545     case OFFSET_REF:
12546       r = build2
12547         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
12548          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12549          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
12550       PTRMEM_OK_P (r) = PTRMEM_OK_P (t);
12551       mark_used (TREE_OPERAND (r, 1));
12552       return r;
12553
12554     case EXPR_PACK_EXPANSION:
12555       error ("invalid use of pack expansion expression");
12556       return error_mark_node;
12557
12558     case NONTYPE_ARGUMENT_PACK:
12559       error ("use %<...%> to expand argument pack");
12560       return error_mark_node;
12561
12562     case INTEGER_CST:
12563     case REAL_CST:
12564     case STRING_CST:
12565     case COMPLEX_CST:
12566       {
12567         /* Instantiate any typedefs in the type.  */
12568         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
12569         r = fold_convert (type, t);
12570         gcc_assert (TREE_CODE (r) == code);
12571         return r;
12572       }
12573
12574     case PTRMEM_CST:
12575       /* These can sometimes show up in a partial instantiation, but never
12576          involve template parms.  */
12577       gcc_assert (!uses_template_parms (t));
12578       return t;
12579
12580     default:
12581       /* We shouldn't get here, but keep going if !ENABLE_CHECKING.  */
12582       gcc_checking_assert (false);
12583       return t;
12584     }
12585 }
12586
12587 /* Like tsubst_copy, but specifically for OpenMP clauses.  */
12588
12589 static tree
12590 tsubst_omp_clauses (tree clauses, tree args, tsubst_flags_t complain,
12591                     tree in_decl)
12592 {
12593   tree new_clauses = NULL, nc, oc;
12594
12595   for (oc = clauses; oc ; oc = OMP_CLAUSE_CHAIN (oc))
12596     {
12597       nc = copy_node (oc);
12598       OMP_CLAUSE_CHAIN (nc) = new_clauses;
12599       new_clauses = nc;
12600
12601       switch (OMP_CLAUSE_CODE (nc))
12602         {
12603         case OMP_CLAUSE_LASTPRIVATE:
12604           if (OMP_CLAUSE_LASTPRIVATE_STMT (oc))
12605             {
12606               OMP_CLAUSE_LASTPRIVATE_STMT (nc) = push_stmt_list ();
12607               tsubst_expr (OMP_CLAUSE_LASTPRIVATE_STMT (oc), args, complain,
12608                            in_decl, /*integral_constant_expression_p=*/false);
12609               OMP_CLAUSE_LASTPRIVATE_STMT (nc)
12610                 = pop_stmt_list (OMP_CLAUSE_LASTPRIVATE_STMT (nc));
12611             }
12612           /* FALLTHRU */
12613         case OMP_CLAUSE_PRIVATE:
12614         case OMP_CLAUSE_SHARED:
12615         case OMP_CLAUSE_FIRSTPRIVATE:
12616         case OMP_CLAUSE_REDUCTION:
12617         case OMP_CLAUSE_COPYIN:
12618         case OMP_CLAUSE_COPYPRIVATE:
12619         case OMP_CLAUSE_IF:
12620         case OMP_CLAUSE_NUM_THREADS:
12621         case OMP_CLAUSE_SCHEDULE:
12622         case OMP_CLAUSE_COLLAPSE:
12623         case OMP_CLAUSE_FINAL:
12624           OMP_CLAUSE_OPERAND (nc, 0)
12625             = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain, 
12626                            in_decl, /*integral_constant_expression_p=*/false);
12627           break;
12628         case OMP_CLAUSE_NOWAIT:
12629         case OMP_CLAUSE_ORDERED:
12630         case OMP_CLAUSE_DEFAULT:
12631         case OMP_CLAUSE_UNTIED:
12632         case OMP_CLAUSE_MERGEABLE:
12633           break;
12634         default:
12635           gcc_unreachable ();
12636         }
12637     }
12638
12639   return finish_omp_clauses (nreverse (new_clauses));
12640 }
12641
12642 /* Like tsubst_copy_and_build, but unshare TREE_LIST nodes.  */
12643
12644 static tree
12645 tsubst_copy_asm_operands (tree t, tree args, tsubst_flags_t complain,
12646                           tree in_decl)
12647 {
12648 #define RECUR(t) tsubst_copy_asm_operands (t, args, complain, in_decl)
12649
12650   tree purpose, value, chain;
12651
12652   if (t == NULL)
12653     return t;
12654
12655   if (TREE_CODE (t) != TREE_LIST)
12656     return tsubst_copy_and_build (t, args, complain, in_decl,
12657                                   /*function_p=*/false,
12658                                   /*integral_constant_expression_p=*/false);
12659
12660   if (t == void_list_node)
12661     return t;
12662
12663   purpose = TREE_PURPOSE (t);
12664   if (purpose)
12665     purpose = RECUR (purpose);
12666   value = TREE_VALUE (t);
12667   if (value)
12668     {
12669       if (TREE_CODE (value) != LABEL_DECL)
12670         value = RECUR (value);
12671       else
12672         {
12673           value = lookup_label (DECL_NAME (value));
12674           gcc_assert (TREE_CODE (value) == LABEL_DECL);
12675           TREE_USED (value) = 1;
12676         }
12677     }
12678   chain = TREE_CHAIN (t);
12679   if (chain && chain != void_type_node)
12680     chain = RECUR (chain);
12681   return tree_cons (purpose, value, chain);
12682 #undef RECUR
12683 }
12684
12685 /* Substitute one OMP_FOR iterator.  */
12686
12687 static void
12688 tsubst_omp_for_iterator (tree t, int i, tree declv, tree initv,
12689                          tree condv, tree incrv, tree *clauses,
12690                          tree args, tsubst_flags_t complain, tree in_decl,
12691                          bool integral_constant_expression_p)
12692 {
12693 #define RECUR(NODE)                             \
12694   tsubst_expr ((NODE), args, complain, in_decl, \
12695                integral_constant_expression_p)
12696   tree decl, init, cond, incr;
12697   bool init_decl;
12698
12699   init = TREE_VEC_ELT (OMP_FOR_INIT (t), i);
12700   gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
12701   decl = TREE_OPERAND (init, 0);
12702   init = TREE_OPERAND (init, 1);
12703   /* Do this before substituting into decl to handle 'auto'.  */
12704   init_decl = (init && TREE_CODE (init) == DECL_EXPR);
12705   init = RECUR (init);
12706   decl = RECUR (decl);
12707   if (init_decl)
12708     {
12709       gcc_assert (!processing_template_decl);
12710       init = DECL_INITIAL (decl);
12711       DECL_INITIAL (decl) = NULL_TREE;
12712     }
12713
12714   gcc_assert (!type_dependent_expression_p (decl));
12715
12716   if (!CLASS_TYPE_P (TREE_TYPE (decl)))
12717     {
12718       cond = RECUR (TREE_VEC_ELT (OMP_FOR_COND (t), i));
12719       incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
12720       if (TREE_CODE (incr) == MODIFY_EXPR)
12721         incr = build_x_modify_expr (EXPR_LOCATION (incr),
12722                                     RECUR (TREE_OPERAND (incr, 0)), NOP_EXPR,
12723                                     RECUR (TREE_OPERAND (incr, 1)),
12724                                     complain);
12725       else
12726         incr = RECUR (incr);
12727       TREE_VEC_ELT (declv, i) = decl;
12728       TREE_VEC_ELT (initv, i) = init;
12729       TREE_VEC_ELT (condv, i) = cond;
12730       TREE_VEC_ELT (incrv, i) = incr;
12731       return;
12732     }
12733
12734   if (init && !init_decl)
12735     {
12736       tree c;
12737       for (c = *clauses; c ; c = OMP_CLAUSE_CHAIN (c))
12738         {
12739           if ((OMP_CLAUSE_CODE (c) == OMP_CLAUSE_PRIVATE
12740                || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE)
12741               && OMP_CLAUSE_DECL (c) == decl)
12742             break;
12743           else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FIRSTPRIVATE
12744                    && OMP_CLAUSE_DECL (c) == decl)
12745             error ("iteration variable %qD should not be firstprivate", decl);
12746           else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION
12747                    && OMP_CLAUSE_DECL (c) == decl)
12748             error ("iteration variable %qD should not be reduction", decl);
12749         }
12750       if (c == NULL)
12751         {
12752           c = build_omp_clause (input_location, OMP_CLAUSE_PRIVATE);
12753           OMP_CLAUSE_DECL (c) = decl;
12754           c = finish_omp_clauses (c);
12755           if (c)
12756             {
12757               OMP_CLAUSE_CHAIN (c) = *clauses;
12758               *clauses = c;
12759             }
12760         }
12761     }
12762   cond = TREE_VEC_ELT (OMP_FOR_COND (t), i);
12763   if (COMPARISON_CLASS_P (cond))
12764     cond = build2 (TREE_CODE (cond), boolean_type_node,
12765                    RECUR (TREE_OPERAND (cond, 0)),
12766                    RECUR (TREE_OPERAND (cond, 1)));
12767   else
12768     cond = RECUR (cond);
12769   incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
12770   switch (TREE_CODE (incr))
12771     {
12772     case PREINCREMENT_EXPR:
12773     case PREDECREMENT_EXPR:
12774     case POSTINCREMENT_EXPR:
12775     case POSTDECREMENT_EXPR:
12776       incr = build2 (TREE_CODE (incr), TREE_TYPE (decl),
12777                      RECUR (TREE_OPERAND (incr, 0)), NULL_TREE);
12778       break;
12779     case MODIFY_EXPR:
12780       if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
12781           || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
12782         {
12783           tree rhs = TREE_OPERAND (incr, 1);
12784           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl),
12785                          RECUR (TREE_OPERAND (incr, 0)),
12786                          build2 (TREE_CODE (rhs), TREE_TYPE (decl),
12787                                  RECUR (TREE_OPERAND (rhs, 0)),
12788                                  RECUR (TREE_OPERAND (rhs, 1))));
12789         }
12790       else
12791         incr = RECUR (incr);
12792       break;
12793     case MODOP_EXPR:
12794       if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
12795           || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
12796         {
12797           tree lhs = RECUR (TREE_OPERAND (incr, 0));
12798           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl), lhs,
12799                          build2 (TREE_CODE (TREE_OPERAND (incr, 1)),
12800                                  TREE_TYPE (decl), lhs,
12801                                  RECUR (TREE_OPERAND (incr, 2))));
12802         }
12803       else if (TREE_CODE (TREE_OPERAND (incr, 1)) == NOP_EXPR
12804                && (TREE_CODE (TREE_OPERAND (incr, 2)) == PLUS_EXPR
12805                    || (TREE_CODE (TREE_OPERAND (incr, 2)) == MINUS_EXPR)))
12806         {
12807           tree rhs = TREE_OPERAND (incr, 2);
12808           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl),
12809                          RECUR (TREE_OPERAND (incr, 0)),
12810                          build2 (TREE_CODE (rhs), TREE_TYPE (decl),
12811                                  RECUR (TREE_OPERAND (rhs, 0)),
12812                                  RECUR (TREE_OPERAND (rhs, 1))));
12813         }
12814       else
12815         incr = RECUR (incr);
12816       break;
12817     default:
12818       incr = RECUR (incr);
12819       break;
12820     }
12821
12822   TREE_VEC_ELT (declv, i) = decl;
12823   TREE_VEC_ELT (initv, i) = init;
12824   TREE_VEC_ELT (condv, i) = cond;
12825   TREE_VEC_ELT (incrv, i) = incr;
12826 #undef RECUR
12827 }
12828
12829 /* Like tsubst_copy for expressions, etc. but also does semantic
12830    processing.  */
12831
12832 static tree
12833 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
12834              bool integral_constant_expression_p)
12835 {
12836 #define RETURN(EXP) do { r = (EXP); goto out; } while(0)
12837 #define RECUR(NODE)                             \
12838   tsubst_expr ((NODE), args, complain, in_decl, \
12839                integral_constant_expression_p)
12840
12841   tree stmt, tmp;
12842   tree r;
12843   location_t loc;
12844
12845   if (t == NULL_TREE || t == error_mark_node)
12846     return t;
12847
12848   loc = input_location;
12849   if (EXPR_HAS_LOCATION (t))
12850     input_location = EXPR_LOCATION (t);
12851   if (STATEMENT_CODE_P (TREE_CODE (t)))
12852     current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
12853
12854   switch (TREE_CODE (t))
12855     {
12856     case STATEMENT_LIST:
12857       {
12858         tree_stmt_iterator i;
12859         for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
12860           RECUR (tsi_stmt (i));
12861         break;
12862       }
12863
12864     case CTOR_INITIALIZER:
12865       finish_mem_initializers (tsubst_initializer_list
12866                                (TREE_OPERAND (t, 0), args));
12867       break;
12868
12869     case RETURN_EXPR:
12870       finish_return_stmt (RECUR (TREE_OPERAND (t, 0)));
12871       break;
12872
12873     case EXPR_STMT:
12874       tmp = RECUR (EXPR_STMT_EXPR (t));
12875       if (EXPR_STMT_STMT_EXPR_RESULT (t))
12876         finish_stmt_expr_expr (tmp, cur_stmt_expr);
12877       else
12878         finish_expr_stmt (tmp);
12879       break;
12880
12881     case USING_STMT:
12882       do_using_directive (USING_STMT_NAMESPACE (t));
12883       break;
12884
12885     case DECL_EXPR:
12886       {
12887         tree decl, pattern_decl;
12888         tree init;
12889
12890         pattern_decl = decl = DECL_EXPR_DECL (t);
12891         if (TREE_CODE (decl) == LABEL_DECL)
12892           finish_label_decl (DECL_NAME (decl));
12893         else if (TREE_CODE (decl) == USING_DECL)
12894           {
12895             tree scope = USING_DECL_SCOPE (decl);
12896             tree name = DECL_NAME (decl);
12897             tree decl;
12898
12899             scope = tsubst (scope, args, complain, in_decl);
12900             decl = lookup_qualified_name (scope, name,
12901                                           /*is_type_p=*/false,
12902                                           /*complain=*/false);
12903             if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
12904               qualified_name_lookup_error (scope, name, decl, input_location);
12905             else
12906               do_local_using_decl (decl, scope, name);
12907           }
12908         else
12909           {
12910             init = DECL_INITIAL (decl);
12911             decl = tsubst (decl, args, complain, in_decl);
12912             if (decl != error_mark_node)
12913               {
12914                 /* By marking the declaration as instantiated, we avoid
12915                    trying to instantiate it.  Since instantiate_decl can't
12916                    handle local variables, and since we've already done
12917                    all that needs to be done, that's the right thing to
12918                    do.  */
12919                 if (TREE_CODE (decl) == VAR_DECL)
12920                   DECL_TEMPLATE_INSTANTIATED (decl) = 1;
12921                 if (TREE_CODE (decl) == VAR_DECL
12922                     && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
12923                   /* Anonymous aggregates are a special case.  */
12924                   finish_anon_union (decl);
12925                 else if (is_capture_proxy (DECL_EXPR_DECL (t)))
12926                   {
12927                     DECL_CONTEXT (decl) = current_function_decl;
12928                     if (DECL_NAME (decl) == this_identifier)
12929                       {
12930                         tree lam = DECL_CONTEXT (current_function_decl);
12931                         lam = CLASSTYPE_LAMBDA_EXPR (lam);
12932                         LAMBDA_EXPR_THIS_CAPTURE (lam) = decl;
12933                       }
12934                     insert_capture_proxy (decl);
12935                   }
12936                 else if (DECL_IMPLICIT_TYPEDEF_P (t))
12937                   /* We already did a pushtag.  */;
12938                 else
12939                   {
12940                     int const_init = false;
12941                     maybe_push_decl (decl);
12942                     if (TREE_CODE (decl) == VAR_DECL
12943                         && DECL_PRETTY_FUNCTION_P (decl))
12944                       {
12945                         /* For __PRETTY_FUNCTION__ we have to adjust the
12946                            initializer.  */
12947                         const char *const name
12948                           = cxx_printable_name (current_function_decl, 2);
12949                         init = cp_fname_init (name, &TREE_TYPE (decl));
12950                       }
12951                     else
12952                       {
12953                         tree t = RECUR (init);
12954
12955                         if (init && !t)
12956                           {
12957                             /* If we had an initializer but it
12958                                instantiated to nothing,
12959                                value-initialize the object.  This will
12960                                only occur when the initializer was a
12961                                pack expansion where the parameter packs
12962                                used in that expansion were of length
12963                                zero.  */
12964                             init = build_value_init (TREE_TYPE (decl),
12965                                                      complain);
12966                             if (TREE_CODE (init) == AGGR_INIT_EXPR)
12967                               init = get_target_expr_sfinae (init, complain);
12968                           }
12969                         else
12970                           init = t;
12971                       }
12972
12973                     if (TREE_CODE (decl) == VAR_DECL)
12974                       const_init = (DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P
12975                                     (pattern_decl));
12976                     cp_finish_decl (decl, init, const_init, NULL_TREE, 0);
12977                   }
12978               }
12979           }
12980
12981         break;
12982       }
12983
12984     case FOR_STMT:
12985       stmt = begin_for_stmt (NULL_TREE, NULL_TREE);
12986       RECUR (FOR_INIT_STMT (t));
12987       finish_for_init_stmt (stmt);
12988       tmp = RECUR (FOR_COND (t));
12989       finish_for_cond (tmp, stmt);
12990       tmp = RECUR (FOR_EXPR (t));
12991       finish_for_expr (tmp, stmt);
12992       RECUR (FOR_BODY (t));
12993       finish_for_stmt (stmt);
12994       break;
12995
12996     case RANGE_FOR_STMT:
12997       {
12998         tree decl, expr;
12999         stmt = begin_for_stmt (NULL_TREE, NULL_TREE);
13000         decl = RANGE_FOR_DECL (t);
13001         decl = tsubst (decl, args, complain, in_decl);
13002         maybe_push_decl (decl);
13003         expr = RECUR (RANGE_FOR_EXPR (t));
13004         stmt = cp_convert_range_for (stmt, decl, expr);
13005         RECUR (RANGE_FOR_BODY (t));
13006         finish_for_stmt (stmt);
13007       }
13008       break;
13009
13010     case WHILE_STMT:
13011       stmt = begin_while_stmt ();
13012       tmp = RECUR (WHILE_COND (t));
13013       finish_while_stmt_cond (tmp, stmt);
13014       RECUR (WHILE_BODY (t));
13015       finish_while_stmt (stmt);
13016       break;
13017
13018     case DO_STMT:
13019       stmt = begin_do_stmt ();
13020       RECUR (DO_BODY (t));
13021       finish_do_body (stmt);
13022       tmp = RECUR (DO_COND (t));
13023       finish_do_stmt (tmp, stmt);
13024       break;
13025
13026     case IF_STMT:
13027       stmt = begin_if_stmt ();
13028       tmp = RECUR (IF_COND (t));
13029       finish_if_stmt_cond (tmp, stmt);
13030       RECUR (THEN_CLAUSE (t));
13031       finish_then_clause (stmt);
13032
13033       if (ELSE_CLAUSE (t))
13034         {
13035           begin_else_clause (stmt);
13036           RECUR (ELSE_CLAUSE (t));
13037           finish_else_clause (stmt);
13038         }
13039
13040       finish_if_stmt (stmt);
13041       break;
13042
13043     case BIND_EXPR:
13044       if (BIND_EXPR_BODY_BLOCK (t))
13045         stmt = begin_function_body ();
13046       else
13047         stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
13048                                     ? BCS_TRY_BLOCK : 0);
13049
13050       RECUR (BIND_EXPR_BODY (t));
13051
13052       if (BIND_EXPR_BODY_BLOCK (t))
13053         finish_function_body (stmt);
13054       else
13055         finish_compound_stmt (stmt);
13056       break;
13057
13058     case BREAK_STMT:
13059       finish_break_stmt ();
13060       break;
13061
13062     case CONTINUE_STMT:
13063       finish_continue_stmt ();
13064       break;
13065
13066     case SWITCH_STMT:
13067       stmt = begin_switch_stmt ();
13068       tmp = RECUR (SWITCH_STMT_COND (t));
13069       finish_switch_cond (tmp, stmt);
13070       RECUR (SWITCH_STMT_BODY (t));
13071       finish_switch_stmt (stmt);
13072       break;
13073
13074     case CASE_LABEL_EXPR:
13075       finish_case_label (EXPR_LOCATION (t),
13076                          RECUR (CASE_LOW (t)),
13077                          RECUR (CASE_HIGH (t)));
13078       break;
13079
13080     case LABEL_EXPR:
13081       {
13082         tree decl = LABEL_EXPR_LABEL (t);
13083         tree label;
13084
13085         label = finish_label_stmt (DECL_NAME (decl));
13086         if (DECL_ATTRIBUTES (decl) != NULL_TREE)
13087           cplus_decl_attributes (&label, DECL_ATTRIBUTES (decl), 0);
13088       }
13089       break;
13090
13091     case GOTO_EXPR:
13092       tmp = GOTO_DESTINATION (t);
13093       if (TREE_CODE (tmp) != LABEL_DECL)
13094         /* Computed goto's must be tsubst'd into.  On the other hand,
13095            non-computed gotos must not be; the identifier in question
13096            will have no binding.  */
13097         tmp = RECUR (tmp);
13098       else
13099         tmp = DECL_NAME (tmp);
13100       finish_goto_stmt (tmp);
13101       break;
13102
13103     case ASM_EXPR:
13104       tmp = finish_asm_stmt
13105         (ASM_VOLATILE_P (t),
13106          RECUR (ASM_STRING (t)),
13107          tsubst_copy_asm_operands (ASM_OUTPUTS (t), args, complain, in_decl),
13108          tsubst_copy_asm_operands (ASM_INPUTS (t), args, complain, in_decl),
13109          tsubst_copy_asm_operands (ASM_CLOBBERS (t), args, complain, in_decl),
13110          tsubst_copy_asm_operands (ASM_LABELS (t), args, complain, in_decl));
13111       {
13112         tree asm_expr = tmp;
13113         if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
13114           asm_expr = TREE_OPERAND (asm_expr, 0);
13115         ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
13116       }
13117       break;
13118
13119     case TRY_BLOCK:
13120       if (CLEANUP_P (t))
13121         {
13122           stmt = begin_try_block ();
13123           RECUR (TRY_STMTS (t));
13124           finish_cleanup_try_block (stmt);
13125           finish_cleanup (RECUR (TRY_HANDLERS (t)), stmt);
13126         }
13127       else
13128         {
13129           tree compound_stmt = NULL_TREE;
13130
13131           if (FN_TRY_BLOCK_P (t))
13132             stmt = begin_function_try_block (&compound_stmt);
13133           else
13134             stmt = begin_try_block ();
13135
13136           RECUR (TRY_STMTS (t));
13137
13138           if (FN_TRY_BLOCK_P (t))
13139             finish_function_try_block (stmt);
13140           else
13141             finish_try_block (stmt);
13142
13143           RECUR (TRY_HANDLERS (t));
13144           if (FN_TRY_BLOCK_P (t))
13145             finish_function_handler_sequence (stmt, compound_stmt);
13146           else
13147             finish_handler_sequence (stmt);
13148         }
13149       break;
13150
13151     case HANDLER:
13152       {
13153         tree decl = HANDLER_PARMS (t);
13154
13155         if (decl)
13156           {
13157             decl = tsubst (decl, args, complain, in_decl);
13158             /* Prevent instantiate_decl from trying to instantiate
13159                this variable.  We've already done all that needs to be
13160                done.  */
13161             if (decl != error_mark_node)
13162               DECL_TEMPLATE_INSTANTIATED (decl) = 1;
13163           }
13164         stmt = begin_handler ();
13165         finish_handler_parms (decl, stmt);
13166         RECUR (HANDLER_BODY (t));
13167         finish_handler (stmt);
13168       }
13169       break;
13170
13171     case TAG_DEFN:
13172       tmp = tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
13173       if (CLASS_TYPE_P (tmp))
13174         {
13175           /* Local classes are not independent templates; they are
13176              instantiated along with their containing function.  And this
13177              way we don't have to deal with pushing out of one local class
13178              to instantiate a member of another local class.  */
13179           tree fn;
13180           /* Closures are handled by the LAMBDA_EXPR.  */
13181           gcc_assert (!LAMBDA_TYPE_P (TREE_TYPE (t)));
13182           complete_type (tmp);
13183           for (fn = TYPE_METHODS (tmp); fn; fn = DECL_CHAIN (fn))
13184             if (!DECL_ARTIFICIAL (fn))
13185               instantiate_decl (fn, /*defer_ok*/0, /*expl_inst_class*/false);
13186         }
13187       break;
13188
13189     case STATIC_ASSERT:
13190       {
13191         tree condition;
13192
13193         ++c_inhibit_evaluation_warnings;
13194         condition = 
13195           tsubst_expr (STATIC_ASSERT_CONDITION (t), 
13196                        args,
13197                        complain, in_decl,
13198                        /*integral_constant_expression_p=*/true);
13199         --c_inhibit_evaluation_warnings;
13200
13201         finish_static_assert (condition,
13202                               STATIC_ASSERT_MESSAGE (t),
13203                               STATIC_ASSERT_SOURCE_LOCATION (t),
13204                               /*member_p=*/false);
13205       }
13206       break;
13207
13208     case OMP_PARALLEL:
13209       tmp = tsubst_omp_clauses (OMP_PARALLEL_CLAUSES (t),
13210                                 args, complain, in_decl);
13211       stmt = begin_omp_parallel ();
13212       RECUR (OMP_PARALLEL_BODY (t));
13213       OMP_PARALLEL_COMBINED (finish_omp_parallel (tmp, stmt))
13214         = OMP_PARALLEL_COMBINED (t);
13215       break;
13216
13217     case OMP_TASK:
13218       tmp = tsubst_omp_clauses (OMP_TASK_CLAUSES (t),
13219                                 args, complain, in_decl);
13220       stmt = begin_omp_task ();
13221       RECUR (OMP_TASK_BODY (t));
13222       finish_omp_task (tmp, stmt);
13223       break;
13224
13225     case OMP_FOR:
13226       {
13227         tree clauses, body, pre_body;
13228         tree declv, initv, condv, incrv;
13229         int i;
13230
13231         clauses = tsubst_omp_clauses (OMP_FOR_CLAUSES (t),
13232                                       args, complain, in_decl);
13233         declv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
13234         initv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
13235         condv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
13236         incrv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
13237
13238         stmt = begin_omp_structured_block ();
13239
13240         for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INIT (t)); i++)
13241           tsubst_omp_for_iterator (t, i, declv, initv, condv, incrv,
13242                                    &clauses, args, complain, in_decl,
13243                                    integral_constant_expression_p);
13244
13245         pre_body = push_stmt_list ();
13246         RECUR (OMP_FOR_PRE_BODY (t));
13247         pre_body = pop_stmt_list (pre_body);
13248
13249         body = push_stmt_list ();
13250         RECUR (OMP_FOR_BODY (t));
13251         body = pop_stmt_list (body);
13252
13253         t = finish_omp_for (EXPR_LOCATION (t), declv, initv, condv, incrv,
13254                             body, pre_body, clauses);
13255
13256         add_stmt (finish_omp_structured_block (stmt));
13257       }
13258       break;
13259
13260     case OMP_SECTIONS:
13261     case OMP_SINGLE:
13262       tmp = tsubst_omp_clauses (OMP_CLAUSES (t), args, complain, in_decl);
13263       stmt = push_stmt_list ();
13264       RECUR (OMP_BODY (t));
13265       stmt = pop_stmt_list (stmt);
13266
13267       t = copy_node (t);
13268       OMP_BODY (t) = stmt;
13269       OMP_CLAUSES (t) = tmp;
13270       add_stmt (t);
13271       break;
13272
13273     case OMP_SECTION:
13274     case OMP_CRITICAL:
13275     case OMP_MASTER:
13276     case OMP_ORDERED:
13277       stmt = push_stmt_list ();
13278       RECUR (OMP_BODY (t));
13279       stmt = pop_stmt_list (stmt);
13280
13281       t = copy_node (t);
13282       OMP_BODY (t) = stmt;
13283       add_stmt (t);
13284       break;
13285
13286     case OMP_ATOMIC:
13287       gcc_assert (OMP_ATOMIC_DEPENDENT_P (t));
13288       if (TREE_CODE (TREE_OPERAND (t, 1)) != MODIFY_EXPR)
13289         {
13290           tree op1 = TREE_OPERAND (t, 1);
13291           tree rhs1 = NULL_TREE;
13292           tree lhs, rhs;
13293           if (TREE_CODE (op1) == COMPOUND_EXPR)
13294             {
13295               rhs1 = RECUR (TREE_OPERAND (op1, 0));
13296               op1 = TREE_OPERAND (op1, 1);
13297             }
13298           lhs = RECUR (TREE_OPERAND (op1, 0));
13299           rhs = RECUR (TREE_OPERAND (op1, 1));
13300           finish_omp_atomic (OMP_ATOMIC, TREE_CODE (op1), lhs, rhs,
13301                              NULL_TREE, NULL_TREE, rhs1);
13302         }
13303       else
13304         {
13305           tree op1 = TREE_OPERAND (t, 1);
13306           tree v = NULL_TREE, lhs, rhs = NULL_TREE, lhs1 = NULL_TREE;
13307           tree rhs1 = NULL_TREE;
13308           enum tree_code code = TREE_CODE (TREE_OPERAND (op1, 1));
13309           enum tree_code opcode = NOP_EXPR;
13310           if (code == OMP_ATOMIC_READ)
13311             {
13312               v = RECUR (TREE_OPERAND (op1, 0));
13313               lhs = RECUR (TREE_OPERAND (TREE_OPERAND (op1, 1), 0));
13314             }
13315           else if (code == OMP_ATOMIC_CAPTURE_OLD
13316                    || code == OMP_ATOMIC_CAPTURE_NEW)
13317             {
13318               tree op11 = TREE_OPERAND (TREE_OPERAND (op1, 1), 1);
13319               v = RECUR (TREE_OPERAND (op1, 0));
13320               lhs1 = RECUR (TREE_OPERAND (TREE_OPERAND (op1, 1), 0));
13321               if (TREE_CODE (op11) == COMPOUND_EXPR)
13322                 {
13323                   rhs1 = RECUR (TREE_OPERAND (op11, 0));
13324                   op11 = TREE_OPERAND (op11, 1);
13325                 }
13326               lhs = RECUR (TREE_OPERAND (op11, 0));
13327               rhs = RECUR (TREE_OPERAND (op11, 1));
13328               opcode = TREE_CODE (op11);
13329             }
13330           else
13331             {
13332               code = OMP_ATOMIC;
13333               lhs = RECUR (TREE_OPERAND (op1, 0));
13334               rhs = RECUR (TREE_OPERAND (op1, 1));
13335             }
13336           finish_omp_atomic (code, opcode, lhs, rhs, v, lhs1, rhs1);
13337         }
13338       break;
13339
13340     case TRANSACTION_EXPR:
13341       {
13342         int flags = 0;
13343         flags |= (TRANSACTION_EXPR_OUTER (t) ? TM_STMT_ATTR_OUTER : 0);
13344         flags |= (TRANSACTION_EXPR_RELAXED (t) ? TM_STMT_ATTR_RELAXED : 0);
13345
13346         if (TRANSACTION_EXPR_IS_STMT (t))
13347           {
13348             tree body = TRANSACTION_EXPR_BODY (t);
13349             tree noex = NULL_TREE;
13350             if (TREE_CODE (body) == MUST_NOT_THROW_EXPR)
13351               {
13352                 noex = MUST_NOT_THROW_COND (body);
13353                 if (noex == NULL_TREE)
13354                   noex = boolean_true_node;
13355                 body = TREE_OPERAND (body, 0);
13356               }
13357             stmt = begin_transaction_stmt (input_location, NULL, flags);
13358             RECUR (body);
13359             finish_transaction_stmt (stmt, NULL, flags, RECUR (noex));
13360           }
13361         else
13362           {
13363             stmt = build_transaction_expr (EXPR_LOCATION (t),
13364                                            RECUR (TRANSACTION_EXPR_BODY (t)),
13365                                            flags, NULL_TREE);
13366             RETURN (stmt);
13367           }
13368       }
13369       break;
13370
13371     case MUST_NOT_THROW_EXPR:
13372       RETURN (build_must_not_throw_expr (RECUR (TREE_OPERAND (t, 0)),
13373                                         RECUR (MUST_NOT_THROW_COND (t))));
13374
13375     case EXPR_PACK_EXPANSION:
13376       error ("invalid use of pack expansion expression");
13377       RETURN (error_mark_node);
13378
13379     case NONTYPE_ARGUMENT_PACK:
13380       error ("use %<...%> to expand argument pack");
13381       RETURN (error_mark_node);
13382
13383     case COMPOUND_EXPR:
13384       tmp = RECUR (TREE_OPERAND (t, 0));
13385       if (tmp == NULL_TREE)
13386         /* If the first operand was a statement, we're done with it.  */
13387         RETURN (RECUR (TREE_OPERAND (t, 1)));
13388       RETURN (build_x_compound_expr (EXPR_LOCATION (t), tmp,
13389                                     RECUR (TREE_OPERAND (t, 1)),
13390                                     complain));
13391
13392     default:
13393       gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
13394
13395       RETURN (tsubst_copy_and_build (t, args, complain, in_decl,
13396                                     /*function_p=*/false,
13397                                     integral_constant_expression_p));
13398     }
13399
13400   RETURN (NULL_TREE);
13401  out:
13402   input_location = loc;
13403   return r;
13404 #undef RECUR
13405 #undef RETURN
13406 }
13407
13408 /* T is a postfix-expression that is not being used in a function
13409    call.  Return the substituted version of T.  */
13410
13411 static tree
13412 tsubst_non_call_postfix_expression (tree t, tree args,
13413                                     tsubst_flags_t complain,
13414                                     tree in_decl)
13415 {
13416   if (TREE_CODE (t) == SCOPE_REF)
13417     t = tsubst_qualified_id (t, args, complain, in_decl,
13418                              /*done=*/false, /*address_p=*/false);
13419   else
13420     t = tsubst_copy_and_build (t, args, complain, in_decl,
13421                                /*function_p=*/false,
13422                                /*integral_constant_expression_p=*/false);
13423
13424   return t;
13425 }
13426
13427 /* Like tsubst but deals with expressions and performs semantic
13428    analysis.  FUNCTION_P is true if T is the "F" in "F (ARGS)".  */
13429
13430 tree
13431 tsubst_copy_and_build (tree t,
13432                        tree args,
13433                        tsubst_flags_t complain,
13434                        tree in_decl,
13435                        bool function_p,
13436                        bool integral_constant_expression_p)
13437 {
13438 #define RETURN(EXP) do { retval = (EXP); goto out; } while(0)
13439 #define RECUR(NODE)                                             \
13440   tsubst_copy_and_build (NODE, args, complain, in_decl,         \
13441                          /*function_p=*/false,                  \
13442                          integral_constant_expression_p)
13443
13444   tree retval, op1;
13445   location_t loc;
13446
13447   if (t == NULL_TREE || t == error_mark_node)
13448     return t;
13449
13450   loc = input_location;
13451   if (EXPR_HAS_LOCATION (t))
13452     input_location = EXPR_LOCATION (t);
13453
13454   /* N3276 decltype magic only applies to calls at the top level or on the
13455      right side of a comma.  */
13456   tsubst_flags_t decltype_flag = (complain & tf_decltype);
13457   complain &= ~tf_decltype;
13458
13459   switch (TREE_CODE (t))
13460     {
13461     case USING_DECL:
13462       t = DECL_NAME (t);
13463       /* Fall through.  */
13464     case IDENTIFIER_NODE:
13465       {
13466         tree decl;
13467         cp_id_kind idk;
13468         bool non_integral_constant_expression_p;
13469         const char *error_msg;
13470
13471         if (IDENTIFIER_TYPENAME_P (t))
13472           {
13473             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13474             t = mangle_conv_op_name_for_type (new_type);
13475           }
13476
13477         /* Look up the name.  */
13478         decl = lookup_name (t);
13479
13480         /* By convention, expressions use ERROR_MARK_NODE to indicate
13481            failure, not NULL_TREE.  */
13482         if (decl == NULL_TREE)
13483           decl = error_mark_node;
13484
13485         decl = finish_id_expression (t, decl, NULL_TREE,
13486                                      &idk,
13487                                      integral_constant_expression_p,
13488           /*allow_non_integral_constant_expression_p=*/(cxx_dialect >= cxx0x),
13489                                      &non_integral_constant_expression_p,
13490                                      /*template_p=*/false,
13491                                      /*done=*/true,
13492                                      /*address_p=*/false,
13493                                      /*template_arg_p=*/false,
13494                                      &error_msg,
13495                                      input_location);
13496         if (error_msg)
13497           error (error_msg);
13498         if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
13499           {
13500             if (complain & tf_error)
13501               unqualified_name_lookup_error (decl);
13502             decl = error_mark_node;
13503           }
13504         RETURN (decl);
13505       }
13506
13507     case TEMPLATE_ID_EXPR:
13508       {
13509         tree object;
13510         tree templ = RECUR (TREE_OPERAND (t, 0));
13511         tree targs = TREE_OPERAND (t, 1);
13512
13513         if (targs)
13514           targs = tsubst_template_args (targs, args, complain, in_decl);
13515
13516         if (TREE_CODE (templ) == COMPONENT_REF)
13517           {
13518             object = TREE_OPERAND (templ, 0);
13519             templ = TREE_OPERAND (templ, 1);
13520           }
13521         else
13522           object = NULL_TREE;
13523         templ = lookup_template_function (templ, targs);
13524
13525         if (object)
13526           RETURN (build3 (COMPONENT_REF, TREE_TYPE (templ),
13527                          object, templ, NULL_TREE));
13528         else
13529           RETURN (baselink_for_fns (templ));
13530       }
13531
13532     case INDIRECT_REF:
13533       {
13534         tree r = RECUR (TREE_OPERAND (t, 0));
13535
13536         if (REFERENCE_REF_P (t))
13537           {
13538             /* A type conversion to reference type will be enclosed in
13539                such an indirect ref, but the substitution of the cast
13540                will have also added such an indirect ref.  */
13541             if (TREE_CODE (TREE_TYPE (r)) == REFERENCE_TYPE)
13542               r = convert_from_reference (r);
13543           }
13544         else
13545           r = build_x_indirect_ref (input_location, r, RO_UNARY_STAR,
13546                                     complain|decltype_flag);
13547         RETURN (r);
13548       }
13549
13550     case NOP_EXPR:
13551       RETURN (build_nop
13552         (tsubst (TREE_TYPE (t), args, complain, in_decl),
13553          RECUR (TREE_OPERAND (t, 0))));
13554
13555     case IMPLICIT_CONV_EXPR:
13556       {
13557         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13558         tree expr = RECUR (TREE_OPERAND (t, 0));
13559         int flags = LOOKUP_IMPLICIT;
13560         if (IMPLICIT_CONV_EXPR_DIRECT_INIT (t))
13561           flags = LOOKUP_NORMAL;
13562         RETURN (perform_implicit_conversion_flags (type, expr, complain,
13563                                                   flags));
13564       }
13565
13566     case CONVERT_EXPR:
13567       RETURN (build1
13568         (CONVERT_EXPR,
13569          tsubst (TREE_TYPE (t), args, complain, in_decl),
13570          RECUR (TREE_OPERAND (t, 0))));
13571
13572     case CAST_EXPR:
13573     case REINTERPRET_CAST_EXPR:
13574     case CONST_CAST_EXPR:
13575     case DYNAMIC_CAST_EXPR:
13576     case STATIC_CAST_EXPR:
13577       {
13578         tree type;
13579         tree op, r = NULL_TREE;
13580
13581         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13582         if (integral_constant_expression_p
13583             && !cast_valid_in_integral_constant_expression_p (type))
13584           {
13585             if (complain & tf_error)
13586               error ("a cast to a type other than an integral or "
13587                      "enumeration type cannot appear in a constant-expression");
13588             RETURN (error_mark_node);
13589           }
13590
13591         op = RECUR (TREE_OPERAND (t, 0));
13592
13593         ++c_inhibit_evaluation_warnings;
13594         switch (TREE_CODE (t))
13595           {
13596           case CAST_EXPR:
13597             r = build_functional_cast (type, op, complain);
13598             break;
13599           case REINTERPRET_CAST_EXPR:
13600             r = build_reinterpret_cast (type, op, complain);
13601             break;
13602           case CONST_CAST_EXPR:
13603             r = build_const_cast (type, op, complain);
13604             break;
13605           case DYNAMIC_CAST_EXPR:
13606             r = build_dynamic_cast (type, op, complain);
13607             break;
13608           case STATIC_CAST_EXPR:
13609             r = build_static_cast (type, op, complain);
13610             break;
13611           default:
13612             gcc_unreachable ();
13613           }
13614         --c_inhibit_evaluation_warnings;
13615
13616         RETURN (r);
13617       }
13618
13619     case POSTDECREMENT_EXPR:
13620     case POSTINCREMENT_EXPR:
13621       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
13622                                                 args, complain, in_decl);
13623       RETURN (build_x_unary_op (input_location, TREE_CODE (t), op1,
13624                                 complain|decltype_flag));
13625
13626     case PREDECREMENT_EXPR:
13627     case PREINCREMENT_EXPR:
13628     case NEGATE_EXPR:
13629     case BIT_NOT_EXPR:
13630     case ABS_EXPR:
13631     case TRUTH_NOT_EXPR:
13632     case UNARY_PLUS_EXPR:  /* Unary + */
13633     case REALPART_EXPR:
13634     case IMAGPART_EXPR:
13635       RETURN (build_x_unary_op (input_location, TREE_CODE (t),
13636                                RECUR (TREE_OPERAND (t, 0)),
13637                                 complain|decltype_flag));
13638
13639     case FIX_TRUNC_EXPR:
13640       RETURN (cp_build_unary_op (FIX_TRUNC_EXPR, RECUR (TREE_OPERAND (t, 0)),
13641                                 0, complain));
13642
13643     case ADDR_EXPR:
13644       op1 = TREE_OPERAND (t, 0);
13645       if (TREE_CODE (op1) == LABEL_DECL)
13646         RETURN (finish_label_address_expr (DECL_NAME (op1),
13647                                           EXPR_LOCATION (op1)));
13648       if (TREE_CODE (op1) == SCOPE_REF)
13649         op1 = tsubst_qualified_id (op1, args, complain, in_decl,
13650                                    /*done=*/true, /*address_p=*/true);
13651       else
13652         op1 = tsubst_non_call_postfix_expression (op1, args, complain,
13653                                                   in_decl);
13654       RETURN (build_x_unary_op (input_location, ADDR_EXPR, op1,
13655                                 complain|decltype_flag));
13656
13657     case PLUS_EXPR:
13658     case MINUS_EXPR:
13659     case MULT_EXPR:
13660     case TRUNC_DIV_EXPR:
13661     case CEIL_DIV_EXPR:
13662     case FLOOR_DIV_EXPR:
13663     case ROUND_DIV_EXPR:
13664     case EXACT_DIV_EXPR:
13665     case BIT_AND_EXPR:
13666     case BIT_IOR_EXPR:
13667     case BIT_XOR_EXPR:
13668     case TRUNC_MOD_EXPR:
13669     case FLOOR_MOD_EXPR:
13670     case TRUTH_ANDIF_EXPR:
13671     case TRUTH_ORIF_EXPR:
13672     case TRUTH_AND_EXPR:
13673     case TRUTH_OR_EXPR:
13674     case RSHIFT_EXPR:
13675     case LSHIFT_EXPR:
13676     case RROTATE_EXPR:
13677     case LROTATE_EXPR:
13678     case EQ_EXPR:
13679     case NE_EXPR:
13680     case MAX_EXPR:
13681     case MIN_EXPR:
13682     case LE_EXPR:
13683     case GE_EXPR:
13684     case LT_EXPR:
13685     case GT_EXPR:
13686     case MEMBER_REF:
13687     case DOTSTAR_EXPR:
13688       {
13689         tree r;
13690
13691         ++c_inhibit_evaluation_warnings;
13692
13693         r = build_x_binary_op
13694           (input_location, TREE_CODE (t),
13695            RECUR (TREE_OPERAND (t, 0)),
13696            (TREE_NO_WARNING (TREE_OPERAND (t, 0))
13697             ? ERROR_MARK
13698             : TREE_CODE (TREE_OPERAND (t, 0))),
13699            RECUR (TREE_OPERAND (t, 1)),
13700            (TREE_NO_WARNING (TREE_OPERAND (t, 1))
13701             ? ERROR_MARK
13702             : TREE_CODE (TREE_OPERAND (t, 1))),
13703            /*overload=*/NULL,
13704            complain|decltype_flag);
13705         if (EXPR_P (r) && TREE_NO_WARNING (t))
13706           TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
13707
13708         --c_inhibit_evaluation_warnings;
13709
13710         RETURN (r);
13711       }
13712
13713     case SCOPE_REF:
13714       RETURN (tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
13715                                   /*address_p=*/false));
13716     case ARRAY_REF:
13717       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
13718                                                 args, complain, in_decl);
13719       RETURN (build_x_array_ref (EXPR_LOCATION (t), op1,
13720                                  RECUR (TREE_OPERAND (t, 1)),
13721                                  complain|decltype_flag));
13722
13723     case SIZEOF_EXPR:
13724       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
13725         RETURN (tsubst_copy (t, args, complain, in_decl));
13726       /* Fall through */
13727       
13728     case ALIGNOF_EXPR:
13729       {
13730         tree r;
13731
13732         op1 = TREE_OPERAND (t, 0);
13733         if (TREE_CODE (t) == SIZEOF_EXPR && SIZEOF_EXPR_TYPE_P (t))
13734           op1 = TREE_TYPE (op1);
13735         if (!args)
13736           {
13737             /* When there are no ARGS, we are trying to evaluate a
13738                non-dependent expression from the parser.  Trying to do
13739                the substitutions may not work.  */
13740             if (!TYPE_P (op1))
13741               op1 = TREE_TYPE (op1);
13742           }
13743         else
13744           {
13745             ++cp_unevaluated_operand;
13746             ++c_inhibit_evaluation_warnings;
13747             if (TYPE_P (op1))
13748               op1 = tsubst (op1, args, complain, in_decl);
13749             else
13750               op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
13751                                            /*function_p=*/false,
13752                                            /*integral_constant_expression_p=*/
13753                                            false);
13754             --cp_unevaluated_operand;
13755             --c_inhibit_evaluation_warnings;
13756           }
13757         if (TYPE_P (op1))
13758           r = cxx_sizeof_or_alignof_type (op1, TREE_CODE (t),
13759                                           complain & tf_error);
13760         else
13761           r = cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t),
13762                                           complain & tf_error);
13763         if (TREE_CODE (t) == SIZEOF_EXPR && r != error_mark_node)
13764           {
13765             if (TREE_CODE (r) != SIZEOF_EXPR || TYPE_P (op1))
13766               {
13767                 if (!processing_template_decl && TYPE_P (op1))
13768                   {
13769                     r = build_min (SIZEOF_EXPR, size_type_node,
13770                                    build1 (NOP_EXPR, op1, error_mark_node));
13771                     SIZEOF_EXPR_TYPE_P (r) = 1;
13772                   }
13773                 else
13774                   r = build_min (SIZEOF_EXPR, size_type_node, op1);
13775                 TREE_SIDE_EFFECTS (r) = 0;
13776                 TREE_READONLY (r) = 1;
13777               }
13778             SET_EXPR_LOCATION (r, EXPR_LOCATION (t));
13779           }
13780         RETURN (r);
13781       }
13782
13783     case AT_ENCODE_EXPR:
13784       {
13785         op1 = TREE_OPERAND (t, 0);
13786         ++cp_unevaluated_operand;
13787         ++c_inhibit_evaluation_warnings;
13788         op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
13789                                      /*function_p=*/false,
13790                                      /*integral_constant_expression_p=*/false);
13791         --cp_unevaluated_operand;
13792         --c_inhibit_evaluation_warnings;
13793         RETURN (objc_build_encode_expr (op1));
13794       }
13795
13796     case NOEXCEPT_EXPR:
13797       op1 = TREE_OPERAND (t, 0);
13798       ++cp_unevaluated_operand;
13799       ++c_inhibit_evaluation_warnings;
13800       op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
13801                                    /*function_p=*/false,
13802                                    /*integral_constant_expression_p=*/false);
13803       --cp_unevaluated_operand;
13804       --c_inhibit_evaluation_warnings;
13805       RETURN (finish_noexcept_expr (op1, complain));
13806
13807     case MODOP_EXPR:
13808       {
13809         tree r = build_x_modify_expr
13810           (EXPR_LOCATION (t),
13811            RECUR (TREE_OPERAND (t, 0)),
13812            TREE_CODE (TREE_OPERAND (t, 1)),
13813            RECUR (TREE_OPERAND (t, 2)),
13814            complain|decltype_flag);
13815         /* TREE_NO_WARNING must be set if either the expression was
13816            parenthesized or it uses an operator such as >>= rather
13817            than plain assignment.  In the former case, it was already
13818            set and must be copied.  In the latter case,
13819            build_x_modify_expr sets it and it must not be reset
13820            here.  */
13821         if (TREE_NO_WARNING (t))
13822           TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
13823         RETURN (r);
13824       }
13825
13826     case ARROW_EXPR:
13827       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
13828                                                 args, complain, in_decl);
13829       /* Remember that there was a reference to this entity.  */
13830       if (DECL_P (op1))
13831         mark_used (op1);
13832       RETURN (build_x_arrow (input_location, op1, complain));
13833
13834     case NEW_EXPR:
13835       {
13836         tree placement = RECUR (TREE_OPERAND (t, 0));
13837         tree init = RECUR (TREE_OPERAND (t, 3));
13838         vec<tree, va_gc> *placement_vec;
13839         vec<tree, va_gc> *init_vec;
13840         tree ret;
13841
13842         if (placement == NULL_TREE)
13843           placement_vec = NULL;
13844         else
13845           {
13846             placement_vec = make_tree_vector ();
13847             for (; placement != NULL_TREE; placement = TREE_CHAIN (placement))
13848               vec_safe_push (placement_vec, TREE_VALUE (placement));
13849           }
13850
13851         /* If there was an initializer in the original tree, but it
13852            instantiated to an empty list, then we should pass a
13853            non-NULL empty vector to tell build_new that it was an
13854            empty initializer() rather than no initializer.  This can
13855            only happen when the initializer is a pack expansion whose
13856            parameter packs are of length zero.  */
13857         if (init == NULL_TREE && TREE_OPERAND (t, 3) == NULL_TREE)
13858           init_vec = NULL;
13859         else
13860           {
13861             init_vec = make_tree_vector ();
13862             if (init == void_zero_node)
13863               gcc_assert (init_vec != NULL);
13864             else
13865               {
13866                 for (; init != NULL_TREE; init = TREE_CHAIN (init))
13867                   vec_safe_push (init_vec, TREE_VALUE (init));
13868               }
13869           }
13870
13871         ret = build_new (&placement_vec,
13872                          tsubst (TREE_OPERAND (t, 1), args, complain, in_decl),
13873                          RECUR (TREE_OPERAND (t, 2)),
13874                          &init_vec,
13875                          NEW_EXPR_USE_GLOBAL (t),
13876                          complain);
13877
13878         if (placement_vec != NULL)
13879           release_tree_vector (placement_vec);
13880         if (init_vec != NULL)
13881           release_tree_vector (init_vec);
13882
13883         RETURN (ret);
13884       }
13885
13886     case DELETE_EXPR:
13887      RETURN (delete_sanity
13888        (RECUR (TREE_OPERAND (t, 0)),
13889         RECUR (TREE_OPERAND (t, 1)),
13890         DELETE_EXPR_USE_VEC (t),
13891         DELETE_EXPR_USE_GLOBAL (t),
13892         complain));
13893
13894     case COMPOUND_EXPR:
13895       {
13896         tree op0 = tsubst_copy_and_build (TREE_OPERAND (t, 0), args,
13897                                           complain & ~tf_decltype, in_decl,
13898                                           /*function_p=*/false,
13899                                           integral_constant_expression_p);
13900         RETURN (build_x_compound_expr (EXPR_LOCATION (t),
13901                                        op0,
13902                                        RECUR (TREE_OPERAND (t, 1)),
13903                                        complain|decltype_flag));
13904       }
13905
13906     case CALL_EXPR:
13907       {
13908         tree function;
13909         vec<tree, va_gc> *call_args;
13910         unsigned int nargs, i;
13911         bool qualified_p;
13912         bool koenig_p;
13913         tree ret;
13914
13915         function = CALL_EXPR_FN (t);
13916         /* When we parsed the expression,  we determined whether or
13917            not Koenig lookup should be performed.  */
13918         koenig_p = KOENIG_LOOKUP_P (t);
13919         if (TREE_CODE (function) == SCOPE_REF)
13920           {
13921             qualified_p = true;
13922             function = tsubst_qualified_id (function, args, complain, in_decl,
13923                                             /*done=*/false,
13924                                             /*address_p=*/false);
13925           }
13926         else if (koenig_p && TREE_CODE (function) == IDENTIFIER_NODE)
13927           {
13928             /* Do nothing; calling tsubst_copy_and_build on an identifier
13929                would incorrectly perform unqualified lookup again.
13930
13931                Note that we can also have an IDENTIFIER_NODE if the earlier
13932                unqualified lookup found a member function; in that case
13933                koenig_p will be false and we do want to do the lookup
13934                again to find the instantiated member function.
13935
13936                FIXME but doing that causes c++/15272, so we need to stop
13937                using IDENTIFIER_NODE in that situation.  */
13938             qualified_p = false;
13939           }
13940         else
13941           {
13942             if (TREE_CODE (function) == COMPONENT_REF)
13943               {
13944                 tree op = TREE_OPERAND (function, 1);
13945
13946                 qualified_p = (TREE_CODE (op) == SCOPE_REF
13947                                || (BASELINK_P (op)
13948                                    && BASELINK_QUALIFIED_P (op)));
13949               }
13950             else
13951               qualified_p = false;
13952
13953             if (TREE_CODE (function) == ADDR_EXPR
13954                 && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL)
13955               /* Avoid error about taking the address of a constructor.  */
13956               function = TREE_OPERAND (function, 0);
13957
13958             function = tsubst_copy_and_build (function, args, complain,
13959                                               in_decl,
13960                                               !qualified_p,
13961                                               integral_constant_expression_p);
13962
13963             if (BASELINK_P (function))
13964               qualified_p = true;
13965           }
13966
13967         nargs = call_expr_nargs (t);
13968         call_args = make_tree_vector ();
13969         for (i = 0; i < nargs; ++i)
13970           {
13971             tree arg = CALL_EXPR_ARG (t, i);
13972
13973             if (!PACK_EXPANSION_P (arg))
13974               vec_safe_push (call_args, RECUR (CALL_EXPR_ARG (t, i)));
13975             else
13976               {
13977                 /* Expand the pack expansion and push each entry onto
13978                    CALL_ARGS.  */
13979                 arg = tsubst_pack_expansion (arg, args, complain, in_decl);
13980                 if (TREE_CODE (arg) == TREE_VEC)
13981                   {
13982                     unsigned int len, j;
13983
13984                     len = TREE_VEC_LENGTH (arg);
13985                     for (j = 0; j < len; ++j)
13986                       {
13987                         tree value = TREE_VEC_ELT (arg, j);
13988                         if (value != NULL_TREE)
13989                           value = convert_from_reference (value);
13990                         vec_safe_push (call_args, value);
13991                       }
13992                   }
13993                 else
13994                   {
13995                     /* A partial substitution.  Add one entry.  */
13996                     vec_safe_push (call_args, arg);
13997                   }
13998               }
13999           }
14000
14001         /* We do not perform argument-dependent lookup if normal
14002            lookup finds a non-function, in accordance with the
14003            expected resolution of DR 218.  */
14004         if (koenig_p
14005             && ((is_overloaded_fn (function)
14006                  /* If lookup found a member function, the Koenig lookup is
14007                     not appropriate, even if an unqualified-name was used
14008                     to denote the function.  */
14009                  && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
14010                 || TREE_CODE (function) == IDENTIFIER_NODE)
14011             /* Only do this when substitution turns a dependent call
14012                into a non-dependent call.  */
14013             && type_dependent_expression_p_push (t)
14014             && !any_type_dependent_arguments_p (call_args))
14015           function = perform_koenig_lookup (function, call_args, false,
14016                                             tf_none);
14017
14018         if (TREE_CODE (function) == IDENTIFIER_NODE
14019             && !any_type_dependent_arguments_p (call_args))
14020           {
14021             if (koenig_p && (complain & tf_warning_or_error))
14022               {
14023                 /* For backwards compatibility and good diagnostics, try
14024                    the unqualified lookup again if we aren't in SFINAE
14025                    context.  */
14026                 tree unq = (tsubst_copy_and_build
14027                             (function, args, complain, in_decl, true,
14028                              integral_constant_expression_p));
14029                 if (unq == error_mark_node)
14030                   RETURN (error_mark_node);
14031
14032                 if (unq != function)
14033                   {
14034                     tree fn = unq;
14035                     if (TREE_CODE (fn) == INDIRECT_REF)
14036                       fn = TREE_OPERAND (fn, 0);
14037                     if (TREE_CODE (fn) == COMPONENT_REF)
14038                       fn = TREE_OPERAND (fn, 1);
14039                     if (is_overloaded_fn (fn))
14040                       fn = get_first_fn (fn);
14041                     permerror (EXPR_LOC_OR_HERE (t),
14042                                "%qD was not declared in this scope, "
14043                                "and no declarations were found by "
14044                                "argument-dependent lookup at the point "
14045                                "of instantiation", function);
14046                     if (!DECL_P (fn))
14047                       /* Can't say anything more.  */;
14048                     else if (DECL_CLASS_SCOPE_P (fn))
14049                       {
14050                         inform (EXPR_LOC_OR_HERE (t),
14051                                 "declarations in dependent base %qT are "
14052                                 "not found by unqualified lookup",
14053                                 DECL_CLASS_CONTEXT (fn));
14054                         if (current_class_ptr)
14055                           inform (EXPR_LOC_OR_HERE (t),
14056                                   "use %<this->%D%> instead", function);
14057                         else
14058                           inform (EXPR_LOC_OR_HERE (t),
14059                                   "use %<%T::%D%> instead",
14060                                   current_class_name, function);
14061                       }
14062                     else
14063                       inform (0, "%q+D declared here, later in the "
14064                                 "translation unit", fn);
14065                     function = unq;
14066                   }
14067               }
14068             if (TREE_CODE (function) == IDENTIFIER_NODE)
14069               {
14070                 if (complain & tf_error)
14071                   unqualified_name_lookup_error (function);
14072                 release_tree_vector (call_args);
14073                 RETURN (error_mark_node);
14074               }
14075           }
14076
14077         /* Remember that there was a reference to this entity.  */
14078         if (DECL_P (function))
14079           mark_used (function);
14080
14081         /* Put back tf_decltype for the actual call.  */
14082         complain |= decltype_flag;
14083
14084         if (TREE_CODE (function) == OFFSET_REF)
14085           ret = build_offset_ref_call_from_tree (function, &call_args,
14086                                                  complain);
14087         else if (TREE_CODE (function) == COMPONENT_REF)
14088           {
14089             tree instance = TREE_OPERAND (function, 0);
14090             tree fn = TREE_OPERAND (function, 1);
14091
14092             if (processing_template_decl
14093                 && (type_dependent_expression_p (instance)
14094                     || (!BASELINK_P (fn)
14095                         && TREE_CODE (fn) != FIELD_DECL)
14096                     || type_dependent_expression_p (fn)
14097                     || any_type_dependent_arguments_p (call_args)))
14098               ret = build_nt_call_vec (function, call_args);
14099             else if (!BASELINK_P (fn))
14100               ret = finish_call_expr (function, &call_args,
14101                                        /*disallow_virtual=*/false,
14102                                        /*koenig_p=*/false,
14103                                        complain);
14104             else
14105               ret = (build_new_method_call
14106                       (instance, fn,
14107                        &call_args, NULL_TREE,
14108                        qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL,
14109                        /*fn_p=*/NULL,
14110                        complain));
14111           }
14112         else
14113           ret = finish_call_expr (function, &call_args,
14114                                   /*disallow_virtual=*/qualified_p,
14115                                   koenig_p,
14116                                   complain);
14117
14118         release_tree_vector (call_args);
14119
14120         RETURN (ret);
14121       }
14122
14123     case COND_EXPR:
14124       {
14125         tree cond = RECUR (TREE_OPERAND (t, 0));
14126         tree exp1, exp2;
14127
14128         if (TREE_CODE (cond) == INTEGER_CST)
14129           {
14130             if (integer_zerop (cond))
14131               {
14132                 ++c_inhibit_evaluation_warnings;
14133                 exp1 = RECUR (TREE_OPERAND (t, 1));
14134                 --c_inhibit_evaluation_warnings;
14135                 exp2 = RECUR (TREE_OPERAND (t, 2));
14136               }
14137             else
14138               {
14139                 exp1 = RECUR (TREE_OPERAND (t, 1));
14140                 ++c_inhibit_evaluation_warnings;
14141                 exp2 = RECUR (TREE_OPERAND (t, 2));
14142                 --c_inhibit_evaluation_warnings;
14143               }
14144           }
14145         else
14146           {
14147             exp1 = RECUR (TREE_OPERAND (t, 1));
14148             exp2 = RECUR (TREE_OPERAND (t, 2));
14149           }
14150
14151         RETURN (build_x_conditional_expr (EXPR_LOCATION (t),
14152                                          cond, exp1, exp2, complain));
14153       }
14154
14155     case PSEUDO_DTOR_EXPR:
14156       RETURN (finish_pseudo_destructor_expr
14157         (RECUR (TREE_OPERAND (t, 0)),
14158          RECUR (TREE_OPERAND (t, 1)),
14159          tsubst (TREE_OPERAND (t, 2), args, complain, in_decl)));
14160
14161     case TREE_LIST:
14162       {
14163         tree purpose, value, chain;
14164
14165         if (t == void_list_node)
14166           RETURN (t);
14167
14168         if ((TREE_PURPOSE (t) && PACK_EXPANSION_P (TREE_PURPOSE (t)))
14169             || (TREE_VALUE (t) && PACK_EXPANSION_P (TREE_VALUE (t))))
14170           {
14171             /* We have pack expansions, so expand those and
14172                create a new list out of it.  */
14173             tree purposevec = NULL_TREE;
14174             tree valuevec = NULL_TREE;
14175             tree chain;
14176             int i, len = -1;
14177
14178             /* Expand the argument expressions.  */
14179             if (TREE_PURPOSE (t))
14180               purposevec = tsubst_pack_expansion (TREE_PURPOSE (t), args,
14181                                                  complain, in_decl);
14182             if (TREE_VALUE (t))
14183               valuevec = tsubst_pack_expansion (TREE_VALUE (t), args,
14184                                                complain, in_decl);
14185
14186             /* Build the rest of the list.  */
14187             chain = TREE_CHAIN (t);
14188             if (chain && chain != void_type_node)
14189               chain = RECUR (chain);
14190
14191             /* Determine the number of arguments.  */
14192             if (purposevec && TREE_CODE (purposevec) == TREE_VEC)
14193               {
14194                 len = TREE_VEC_LENGTH (purposevec);
14195                 gcc_assert (!valuevec || len == TREE_VEC_LENGTH (valuevec));
14196               }
14197             else if (TREE_CODE (valuevec) == TREE_VEC)
14198               len = TREE_VEC_LENGTH (valuevec);
14199             else
14200               {
14201                 /* Since we only performed a partial substitution into
14202                    the argument pack, we only RETURN (a single list
14203                    node.  */
14204                 if (purposevec == TREE_PURPOSE (t)
14205                     && valuevec == TREE_VALUE (t)
14206                     && chain == TREE_CHAIN (t))
14207                   RETURN (t);
14208
14209                 RETURN (tree_cons (purposevec, valuevec, chain));
14210               }
14211             
14212             /* Convert the argument vectors into a TREE_LIST */
14213             i = len;
14214             while (i > 0)
14215               {
14216                 /* Grab the Ith values.  */
14217                 i--;
14218                 purpose = purposevec ? TREE_VEC_ELT (purposevec, i) 
14219                                      : NULL_TREE;
14220                 value 
14221                   = valuevec ? convert_from_reference (TREE_VEC_ELT (valuevec, i)) 
14222                              : NULL_TREE;
14223
14224                 /* Build the list (backwards).  */
14225                 chain = tree_cons (purpose, value, chain);
14226               }
14227
14228             RETURN (chain);
14229           }
14230
14231         purpose = TREE_PURPOSE (t);
14232         if (purpose)
14233           purpose = RECUR (purpose);
14234         value = TREE_VALUE (t);
14235         if (value)
14236           value = RECUR (value);
14237         chain = TREE_CHAIN (t);
14238         if (chain && chain != void_type_node)
14239           chain = RECUR (chain);
14240         if (purpose == TREE_PURPOSE (t)
14241             && value == TREE_VALUE (t)
14242             && chain == TREE_CHAIN (t))
14243           RETURN (t);
14244         RETURN (tree_cons (purpose, value, chain));
14245       }
14246
14247     case COMPONENT_REF:
14248       {
14249         tree object;
14250         tree object_type;
14251         tree member;
14252
14253         object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
14254                                                      args, complain, in_decl);
14255         /* Remember that there was a reference to this entity.  */
14256         if (DECL_P (object))
14257           mark_used (object);
14258         object_type = TREE_TYPE (object);
14259
14260         member = TREE_OPERAND (t, 1);
14261         if (BASELINK_P (member))
14262           member = tsubst_baselink (member,
14263                                     non_reference (TREE_TYPE (object)),
14264                                     args, complain, in_decl);
14265         else
14266           member = tsubst_copy (member, args, complain, in_decl);
14267         if (member == error_mark_node)
14268           RETURN (error_mark_node);
14269
14270         if (type_dependent_expression_p (object))
14271           /* We can't do much here.  */;
14272         else if (!CLASS_TYPE_P (object_type))
14273           {
14274             if (scalarish_type_p (object_type))
14275               {
14276                 tree s = NULL_TREE;
14277                 tree dtor = member;
14278
14279                 if (TREE_CODE (dtor) == SCOPE_REF)
14280                   {
14281                     s = TREE_OPERAND (dtor, 0);
14282                     dtor = TREE_OPERAND (dtor, 1);
14283                   }
14284                 if (TREE_CODE (dtor) == BIT_NOT_EXPR)
14285                   {
14286                     dtor = TREE_OPERAND (dtor, 0);
14287                     if (TYPE_P (dtor))
14288                       RETURN (finish_pseudo_destructor_expr (object, s, dtor));
14289                   }
14290               }
14291           }
14292         else if (TREE_CODE (member) == SCOPE_REF
14293                  && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
14294           {
14295             /* Lookup the template functions now that we know what the
14296                scope is.  */
14297             tree scope = TREE_OPERAND (member, 0);
14298             tree tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
14299             tree args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
14300             member = lookup_qualified_name (scope, tmpl,
14301                                             /*is_type_p=*/false,
14302                                             /*complain=*/false);
14303             if (BASELINK_P (member))
14304               {
14305                 BASELINK_FUNCTIONS (member)
14306                   = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
14307                               args);
14308                 member = (adjust_result_of_qualified_name_lookup
14309                           (member, BINFO_TYPE (BASELINK_BINFO (member)),
14310                            object_type));
14311               }
14312             else
14313               {
14314                 qualified_name_lookup_error (scope, tmpl, member,
14315                                              input_location);
14316                 RETURN (error_mark_node);
14317               }
14318           }
14319         else if (TREE_CODE (member) == SCOPE_REF
14320                  && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
14321                  && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
14322           {
14323             if (complain & tf_error)
14324               {
14325                 if (TYPE_P (TREE_OPERAND (member, 0)))
14326                   error ("%qT is not a class or namespace",
14327                          TREE_OPERAND (member, 0));
14328                 else
14329                   error ("%qD is not a class or namespace",
14330                          TREE_OPERAND (member, 0));
14331               }
14332             RETURN (error_mark_node);
14333           }
14334         else if (TREE_CODE (member) == FIELD_DECL)
14335           RETURN (finish_non_static_data_member (member, object, NULL_TREE));
14336
14337         RETURN (finish_class_member_access_expr (object, member,
14338                                                 /*template_p=*/false,
14339                                                 complain));
14340       }
14341
14342     case THROW_EXPR:
14343       RETURN (build_throw
14344         (RECUR (TREE_OPERAND (t, 0))));
14345
14346     case CONSTRUCTOR:
14347       {
14348         vec<constructor_elt, va_gc> *n;
14349         constructor_elt *ce;
14350         unsigned HOST_WIDE_INT idx;
14351         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
14352         bool process_index_p;
14353         int newlen;
14354         bool need_copy_p = false;
14355         tree r;
14356
14357         if (type == error_mark_node)
14358           RETURN (error_mark_node);
14359
14360         /* digest_init will do the wrong thing if we let it.  */
14361         if (type && TYPE_PTRMEMFUNC_P (type))
14362           RETURN (t);
14363
14364         /* We do not want to process the index of aggregate
14365            initializers as they are identifier nodes which will be
14366            looked up by digest_init.  */
14367         process_index_p = !(type && MAYBE_CLASS_TYPE_P (type));
14368
14369         n = vec_safe_copy (CONSTRUCTOR_ELTS (t));
14370         newlen = vec_safe_length (n);
14371         FOR_EACH_VEC_SAFE_ELT (n, idx, ce)
14372           {
14373             if (ce->index && process_index_p
14374                 /* An identifier index is looked up in the type
14375                    being initialized, not the current scope.  */
14376                 && TREE_CODE (ce->index) != IDENTIFIER_NODE)
14377               ce->index = RECUR (ce->index);
14378
14379             if (PACK_EXPANSION_P (ce->value))
14380               {
14381                 /* Substitute into the pack expansion.  */
14382                 ce->value = tsubst_pack_expansion (ce->value, args, complain,
14383                                                   in_decl);
14384
14385                 if (ce->value == error_mark_node
14386                     || PACK_EXPANSION_P (ce->value))
14387                   ;
14388                 else if (TREE_VEC_LENGTH (ce->value) == 1)
14389                   /* Just move the argument into place.  */
14390                   ce->value = TREE_VEC_ELT (ce->value, 0);
14391                 else
14392                   {
14393                     /* Update the length of the final CONSTRUCTOR
14394                        arguments vector, and note that we will need to
14395                        copy.*/
14396                     newlen = newlen + TREE_VEC_LENGTH (ce->value) - 1;
14397                     need_copy_p = true;
14398                   }
14399               }
14400             else
14401               ce->value = RECUR (ce->value);
14402           }
14403
14404         if (need_copy_p)
14405           {
14406             vec<constructor_elt, va_gc> *old_n = n;
14407
14408             vec_alloc (n, newlen);
14409             FOR_EACH_VEC_ELT (*old_n, idx, ce)
14410               {
14411                 if (TREE_CODE (ce->value) == TREE_VEC)
14412                   {
14413                     int i, len = TREE_VEC_LENGTH (ce->value);
14414                     for (i = 0; i < len; ++i)
14415                       CONSTRUCTOR_APPEND_ELT (n, 0,
14416                                               TREE_VEC_ELT (ce->value, i));
14417                   }
14418                 else
14419                   CONSTRUCTOR_APPEND_ELT (n, 0, ce->value);
14420               }
14421           }
14422
14423         r = build_constructor (init_list_type_node, n);
14424         CONSTRUCTOR_IS_DIRECT_INIT (r) = CONSTRUCTOR_IS_DIRECT_INIT (t);
14425
14426         if (TREE_HAS_CONSTRUCTOR (t))
14427           RETURN (finish_compound_literal (type, r, complain));
14428
14429         TREE_TYPE (r) = type;
14430         RETURN (r);
14431       }
14432
14433     case TYPEID_EXPR:
14434       {
14435         tree operand_0 = TREE_OPERAND (t, 0);
14436         if (TYPE_P (operand_0))
14437           {
14438             operand_0 = tsubst (operand_0, args, complain, in_decl);
14439             RETURN (get_typeid (operand_0, complain));
14440           }
14441         else
14442           {
14443             operand_0 = RECUR (operand_0);
14444             RETURN (build_typeid (operand_0, complain));
14445           }
14446       }
14447
14448     case VAR_DECL:
14449       if (!args)
14450         RETURN (t);
14451       /* Fall through */
14452
14453     case PARM_DECL:
14454       {
14455         tree r = tsubst_copy (t, args, complain, in_decl);
14456
14457         if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
14458           /* If the original type was a reference, we'll be wrapped in
14459              the appropriate INDIRECT_REF.  */
14460           r = convert_from_reference (r);
14461         RETURN (r);
14462       }
14463
14464     case VA_ARG_EXPR:
14465       RETURN (build_x_va_arg (EXPR_LOCATION (t),
14466                              RECUR (TREE_OPERAND (t, 0)),
14467                              tsubst (TREE_TYPE (t), args, complain, in_decl)));
14468
14469     case OFFSETOF_EXPR:
14470       RETURN (finish_offsetof (RECUR (TREE_OPERAND (t, 0))));
14471
14472     case TRAIT_EXPR:
14473       {
14474         tree type1 = tsubst_copy (TRAIT_EXPR_TYPE1 (t), args,
14475                                   complain, in_decl);
14476
14477         tree type2 = TRAIT_EXPR_TYPE2 (t);
14478         if (type2)
14479           type2 = tsubst_copy (type2, args, complain, in_decl);
14480         
14481         RETURN (finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2));
14482       }
14483
14484     case STMT_EXPR:
14485       {
14486         tree old_stmt_expr = cur_stmt_expr;
14487         tree stmt_expr = begin_stmt_expr ();
14488
14489         cur_stmt_expr = stmt_expr;
14490         tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl,
14491                      integral_constant_expression_p);
14492         stmt_expr = finish_stmt_expr (stmt_expr, false);
14493         cur_stmt_expr = old_stmt_expr;
14494
14495         /* If the resulting list of expression statement is empty,
14496            fold it further into void_zero_node.  */
14497         if (empty_expr_stmt_p (stmt_expr))
14498           stmt_expr = void_zero_node;
14499
14500         RETURN (stmt_expr);
14501       }
14502
14503     case LAMBDA_EXPR:
14504       {
14505         tree r = build_lambda_expr ();
14506
14507         tree type = tsubst (LAMBDA_EXPR_CLOSURE (t), args, complain, NULL_TREE);
14508         LAMBDA_EXPR_CLOSURE (r) = type;
14509         CLASSTYPE_LAMBDA_EXPR (type) = r;
14510
14511         LAMBDA_EXPR_LOCATION (r)
14512           = LAMBDA_EXPR_LOCATION (t);
14513         LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (r)
14514           = LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (t);
14515         LAMBDA_EXPR_MUTABLE_P (r) = LAMBDA_EXPR_MUTABLE_P (t);
14516         LAMBDA_EXPR_DISCRIMINATOR (r)
14517           = (LAMBDA_EXPR_DISCRIMINATOR (t));
14518         /* For a function scope, we want to use tsubst so that we don't
14519            complain about referring to an auto function before its return
14520            type has been deduced.  Otherwise, we want to use tsubst_copy so
14521            that we look up the existing field/parameter/variable rather
14522            than build a new one.  */
14523         tree scope = LAMBDA_EXPR_EXTRA_SCOPE (t);
14524         if (scope && TREE_CODE (scope) == FUNCTION_DECL)
14525           scope = tsubst (scope, args, complain, in_decl);
14526         else if (scope && TREE_CODE (scope) == PARM_DECL)
14527           {
14528             /* Look up the parameter we want directly, as tsubst_copy
14529                doesn't do what we need.  */
14530             tree fn = tsubst (DECL_CONTEXT (scope), args, complain, in_decl);
14531             tree parm = FUNCTION_FIRST_USER_PARM (fn);
14532             while (DECL_PARM_INDEX (parm) != DECL_PARM_INDEX (scope))
14533               parm = DECL_CHAIN (parm);
14534             scope = parm;
14535             /* FIXME Work around the parm not having DECL_CONTEXT set.  */
14536             if (DECL_CONTEXT (scope) == NULL_TREE)
14537               DECL_CONTEXT (scope) = fn;
14538           }
14539         else
14540           scope = RECUR (scope);
14541         LAMBDA_EXPR_EXTRA_SCOPE (r) = scope;
14542         LAMBDA_EXPR_RETURN_TYPE (r)
14543           = tsubst (LAMBDA_EXPR_RETURN_TYPE (t), args, complain, in_decl);
14544
14545         gcc_assert (LAMBDA_EXPR_THIS_CAPTURE (t) == NULL_TREE
14546                     && LAMBDA_EXPR_PENDING_PROXIES (t) == NULL);
14547
14548         /* Do this again now that LAMBDA_EXPR_EXTRA_SCOPE is set.  */
14549         determine_visibility (TYPE_NAME (type));
14550         /* Now that we know visibility, instantiate the type so we have a
14551            declaration of the op() for later calls to lambda_function.  */
14552         complete_type (type);
14553
14554         LAMBDA_EXPR_THIS_CAPTURE (r) = NULL_TREE;
14555
14556         RETURN (build_lambda_object (r));
14557       }
14558
14559     case TARGET_EXPR:
14560       /* We can get here for a constant initializer of non-dependent type.
14561          FIXME stop folding in cp_parser_initializer_clause.  */
14562       {
14563         tree r = get_target_expr_sfinae (RECUR (TARGET_EXPR_INITIAL (t)),
14564                                          complain);
14565         RETURN (r);
14566       }
14567
14568     case TRANSACTION_EXPR:
14569       RETURN (tsubst_expr(t, args, complain, in_decl,
14570              integral_constant_expression_p));
14571
14572     default:
14573       /* Handle Objective-C++ constructs, if appropriate.  */
14574       {
14575         tree subst
14576           = objcp_tsubst_copy_and_build (t, args, complain,
14577                                          in_decl, /*function_p=*/false);
14578         if (subst)
14579           RETURN (subst);
14580       }
14581       RETURN (tsubst_copy (t, args, complain, in_decl));
14582     }
14583
14584 #undef RECUR
14585 #undef RETURN
14586  out:
14587   input_location = loc;
14588   return retval;
14589 }
14590
14591 /* Verify that the instantiated ARGS are valid. For type arguments,
14592    make sure that the type's linkage is ok. For non-type arguments,
14593    make sure they are constants if they are integral or enumerations.
14594    Emit an error under control of COMPLAIN, and return TRUE on error.  */
14595
14596 static bool
14597 check_instantiated_arg (tree tmpl, tree t, tsubst_flags_t complain)
14598 {
14599   if (dependent_template_arg_p (t))
14600     return false;
14601   if (ARGUMENT_PACK_P (t))
14602     {
14603       tree vec = ARGUMENT_PACK_ARGS (t);
14604       int len = TREE_VEC_LENGTH (vec);
14605       bool result = false;
14606       int i;
14607
14608       for (i = 0; i < len; ++i)
14609         if (check_instantiated_arg (tmpl, TREE_VEC_ELT (vec, i), complain))
14610           result = true;
14611       return result;
14612     }
14613   else if (TYPE_P (t))
14614     {
14615       /* [basic.link]: A name with no linkage (notably, the name
14616          of a class or enumeration declared in a local scope)
14617          shall not be used to declare an entity with linkage.
14618          This implies that names with no linkage cannot be used as
14619          template arguments
14620
14621          DR 757 relaxes this restriction for C++0x.  */
14622       tree nt = (cxx_dialect > cxx98 ? NULL_TREE
14623                  : no_linkage_check (t, /*relaxed_p=*/false));
14624
14625       if (nt)
14626         {
14627           /* DR 488 makes use of a type with no linkage cause
14628              type deduction to fail.  */
14629           if (complain & tf_error)
14630             {
14631               if (TYPE_ANONYMOUS_P (nt))
14632                 error ("%qT is/uses anonymous type", t);
14633               else
14634                 error ("template argument for %qD uses local type %qT",
14635                        tmpl, t);
14636             }
14637           return true;
14638         }
14639       /* In order to avoid all sorts of complications, we do not
14640          allow variably-modified types as template arguments.  */
14641       else if (variably_modified_type_p (t, NULL_TREE))
14642         {
14643           if (complain & tf_error)
14644             error ("%qT is a variably modified type", t);
14645           return true;
14646         }
14647     }
14648   /* Class template and alias template arguments should be OK.  */
14649   else if (DECL_TYPE_TEMPLATE_P (t))
14650     ;
14651   /* A non-type argument of integral or enumerated type must be a
14652      constant.  */
14653   else if (TREE_TYPE (t)
14654            && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
14655            && !TREE_CONSTANT (t))
14656     {
14657       if (complain & tf_error)
14658         error ("integral expression %qE is not constant", t);
14659       return true;
14660     }
14661   return false;
14662 }
14663
14664 static bool
14665 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
14666 {
14667   int ix, len = DECL_NTPARMS (tmpl);
14668   bool result = false;
14669
14670   for (ix = 0; ix != len; ix++)
14671     {
14672       if (check_instantiated_arg (tmpl, TREE_VEC_ELT (args, ix), complain))
14673         result = true;
14674     }
14675   if (result && (complain & tf_error))
14676     error ("  trying to instantiate %qD", tmpl);
14677   return result;
14678 }
14679
14680 /* We're out of SFINAE context now, so generate diagnostics for the access
14681    errors we saw earlier when instantiating D from TMPL and ARGS.  */
14682
14683 static void
14684 recheck_decl_substitution (tree d, tree tmpl, tree args)
14685 {
14686   tree pattern = DECL_TEMPLATE_RESULT (tmpl);
14687   tree type = TREE_TYPE (pattern);
14688   location_t loc = input_location;
14689
14690   push_access_scope (d);
14691   push_deferring_access_checks (dk_no_deferred);
14692   input_location = DECL_SOURCE_LOCATION (pattern);
14693   tsubst (type, args, tf_warning_or_error, d);
14694   input_location = loc;
14695   pop_deferring_access_checks ();
14696   pop_access_scope (d);
14697 }
14698
14699 /* Instantiate the indicated variable, function, or alias template TMPL with
14700    the template arguments in TARG_PTR.  */
14701
14702 static tree
14703 instantiate_template_1 (tree tmpl, tree orig_args, tsubst_flags_t complain)
14704 {
14705   tree targ_ptr = orig_args;
14706   tree fndecl;
14707   tree gen_tmpl;
14708   tree spec;
14709   bool access_ok = true;
14710
14711   if (tmpl == error_mark_node)
14712     return error_mark_node;
14713
14714   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
14715
14716   /* If this function is a clone, handle it specially.  */
14717   if (DECL_CLONED_FUNCTION_P (tmpl))
14718     {
14719       tree spec;
14720       tree clone;
14721
14722       /* Use DECL_ABSTRACT_ORIGIN because only FUNCTION_DECLs have
14723          DECL_CLONED_FUNCTION.  */
14724       spec = instantiate_template (DECL_ABSTRACT_ORIGIN (tmpl),
14725                                    targ_ptr, complain);
14726       if (spec == error_mark_node)
14727         return error_mark_node;
14728
14729       /* Look for the clone.  */
14730       FOR_EACH_CLONE (clone, spec)
14731         if (DECL_NAME (clone) == DECL_NAME (tmpl))
14732           return clone;
14733       /* We should always have found the clone by now.  */
14734       gcc_unreachable ();
14735       return NULL_TREE;
14736     }
14737
14738   /* Check to see if we already have this specialization.  */
14739   gen_tmpl = most_general_template (tmpl);
14740   if (tmpl != gen_tmpl)
14741     /* The TMPL is a partial instantiation.  To get a full set of
14742        arguments we must add the arguments used to perform the
14743        partial instantiation.  */
14744     targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
14745                                             targ_ptr);
14746
14747   /* It would be nice to avoid hashing here and then again in tsubst_decl,
14748      but it doesn't seem to be on the hot path.  */
14749   spec = retrieve_specialization (gen_tmpl, targ_ptr, 0);
14750
14751   gcc_assert (tmpl == gen_tmpl
14752               || ((fndecl = retrieve_specialization (tmpl, orig_args, 0))
14753                   == spec)
14754               || fndecl == NULL_TREE);
14755
14756   if (spec != NULL_TREE)
14757     {
14758       if (FNDECL_HAS_ACCESS_ERRORS (spec))
14759         {
14760           if (complain & tf_error)
14761             recheck_decl_substitution (spec, gen_tmpl, targ_ptr);
14762           return error_mark_node;
14763         }
14764       return spec;
14765     }
14766
14767   if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
14768                                complain))
14769     return error_mark_node;
14770
14771   /* We are building a FUNCTION_DECL, during which the access of its
14772      parameters and return types have to be checked.  However this
14773      FUNCTION_DECL which is the desired context for access checking
14774      is not built yet.  We solve this chicken-and-egg problem by
14775      deferring all checks until we have the FUNCTION_DECL.  */
14776   push_deferring_access_checks (dk_deferred);
14777
14778   /* Instantiation of the function happens in the context of the function
14779      template, not the context of the overload resolution we're doing.  */
14780   push_to_top_level ();
14781   /* If there are dependent arguments, e.g. because we're doing partial
14782      ordering, make sure processing_template_decl stays set.  */
14783   if (uses_template_parms (targ_ptr))
14784     ++processing_template_decl;
14785   if (DECL_CLASS_SCOPE_P (gen_tmpl))
14786     {
14787       tree ctx = tsubst (DECL_CONTEXT (gen_tmpl), targ_ptr,
14788                          complain, gen_tmpl);
14789       push_nested_class (ctx);
14790     }
14791   /* Substitute template parameters to obtain the specialization.  */
14792   fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
14793                    targ_ptr, complain, gen_tmpl);
14794   if (DECL_CLASS_SCOPE_P (gen_tmpl))
14795     pop_nested_class ();
14796   pop_from_top_level ();
14797
14798   if (fndecl == error_mark_node)
14799     {
14800       pop_deferring_access_checks ();
14801       return error_mark_node;
14802     }
14803
14804   /* The DECL_TI_TEMPLATE should always be the immediate parent
14805      template, not the most general template.  */
14806   DECL_TI_TEMPLATE (fndecl) = tmpl;
14807
14808   /* Now we know the specialization, compute access previously
14809      deferred.  */
14810   push_access_scope (fndecl);
14811   if (!perform_deferred_access_checks (complain))
14812     access_ok = false;
14813   pop_access_scope (fndecl);
14814   pop_deferring_access_checks ();
14815
14816   /* If we've just instantiated the main entry point for a function,
14817      instantiate all the alternate entry points as well.  We do this
14818      by cloning the instantiation of the main entry point, not by
14819      instantiating the template clones.  */
14820   if (DECL_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (DECL_CHAIN (gen_tmpl)))
14821     clone_function_decl (fndecl, /*update_method_vec_p=*/0);
14822
14823   if (!access_ok)
14824     {
14825       if (!(complain & tf_error))
14826         {
14827           /* Remember to reinstantiate when we're out of SFINAE so the user
14828              can see the errors.  */
14829           FNDECL_HAS_ACCESS_ERRORS (fndecl) = true;
14830         }
14831       return error_mark_node;
14832     }
14833   return fndecl;
14834 }
14835
14836 /* Wrapper for instantiate_template_1.  */
14837
14838 tree
14839 instantiate_template (tree tmpl, tree orig_args, tsubst_flags_t complain)
14840 {
14841   tree ret;
14842   timevar_push (TV_TEMPLATE_INST);
14843   ret = instantiate_template_1 (tmpl, orig_args,  complain);
14844   timevar_pop (TV_TEMPLATE_INST);
14845   return ret;
14846 }
14847
14848 /* Instantiate the alias template TMPL with ARGS.  Also push a template
14849    instantiation level, which instantiate_template doesn't do because
14850    functions and variables have sufficient context established by the
14851    callers.  */
14852
14853 static tree
14854 instantiate_alias_template (tree tmpl, tree args, tsubst_flags_t complain)
14855 {
14856   struct pending_template *old_last_pend = last_pending_template;
14857   struct tinst_level *old_error_tinst = last_error_tinst_level;
14858   if (tmpl == error_mark_node || args == error_mark_node)
14859     return error_mark_node;
14860   tree tinst = build_tree_list (tmpl, args);
14861   if (!push_tinst_level (tinst))
14862     {
14863       ggc_free (tinst);
14864       return error_mark_node;
14865     }
14866
14867   args =
14868     coerce_innermost_template_parms (DECL_TEMPLATE_PARMS (tmpl),
14869                                      args, tmpl, complain,
14870                                      /*require_all_args=*/true,
14871                                      /*use_default_args=*/true);
14872
14873   tree r = instantiate_template (tmpl, args, complain);
14874   pop_tinst_level ();
14875   /* We can't free this if a pending_template entry or last_error_tinst_level
14876      is pointing at it.  */
14877   if (last_pending_template == old_last_pend
14878       && last_error_tinst_level == old_error_tinst)
14879     ggc_free (tinst);
14880
14881   return r;
14882 }
14883
14884 /* PARM is a template parameter pack for FN.  Returns true iff
14885    PARM is used in a deducible way in the argument list of FN.  */
14886
14887 static bool
14888 pack_deducible_p (tree parm, tree fn)
14889 {
14890   tree t = FUNCTION_FIRST_USER_PARMTYPE (fn);
14891   for (; t; t = TREE_CHAIN (t))
14892     {
14893       tree type = TREE_VALUE (t);
14894       tree packs;
14895       if (!PACK_EXPANSION_P (type))
14896         continue;
14897       for (packs = PACK_EXPANSION_PARAMETER_PACKS (type);
14898            packs; packs = TREE_CHAIN (packs))
14899         if (TREE_VALUE (packs) == parm)
14900           {
14901             /* The template parameter pack is used in a function parameter
14902                pack.  If this is the end of the parameter list, the
14903                template parameter pack is deducible.  */
14904             if (TREE_CHAIN (t) == void_list_node)
14905               return true;
14906             else
14907               /* Otherwise, not.  Well, it could be deduced from
14908                  a non-pack parameter, but doing so would end up with
14909                  a deduction mismatch, so don't bother.  */
14910               return false;
14911           }
14912     }
14913   /* The template parameter pack isn't used in any function parameter
14914      packs, but it might be used deeper, e.g. tuple<Args...>.  */
14915   return true;
14916 }
14917
14918 /* The FN is a TEMPLATE_DECL for a function.  ARGS is an array with
14919    NARGS elements of the arguments that are being used when calling
14920    it.  TARGS is a vector into which the deduced template arguments
14921    are placed.
14922
14923    Return zero for success, 2 for an incomplete match that doesn't resolve
14924    all the types, and 1 for complete failure.  An error message will be
14925    printed only for an incomplete match.
14926
14927    If FN is a conversion operator, or we are trying to produce a specific
14928    specialization, RETURN_TYPE is the return type desired.
14929
14930    The EXPLICIT_TARGS are explicit template arguments provided via a
14931    template-id.
14932
14933    The parameter STRICT is one of:
14934
14935    DEDUCE_CALL:
14936      We are deducing arguments for a function call, as in
14937      [temp.deduct.call].
14938
14939    DEDUCE_CONV:
14940      We are deducing arguments for a conversion function, as in
14941      [temp.deduct.conv].
14942
14943    DEDUCE_EXACT:
14944      We are deducing arguments when doing an explicit instantiation
14945      as in [temp.explicit], when determining an explicit specialization
14946      as in [temp.expl.spec], or when taking the address of a function
14947      template, as in [temp.deduct.funcaddr].  */
14948
14949 tree
14950 fn_type_unification (tree fn,
14951                      tree explicit_targs,
14952                      tree targs,
14953                      const tree *args,
14954                      unsigned int nargs,
14955                      tree return_type,
14956                      unification_kind_t strict,
14957                      int flags,
14958                      bool explain_p)
14959 {
14960   tree parms;
14961   tree fntype;
14962   tree decl = NULL_TREE;
14963   tsubst_flags_t complain = (explain_p ? tf_warning_or_error : tf_none);
14964   bool ok;
14965   static int deduction_depth;
14966   struct pending_template *old_last_pend = last_pending_template;
14967   struct tinst_level *old_error_tinst = last_error_tinst_level;
14968   tree tparms = DECL_INNERMOST_TEMPLATE_PARMS (fn);
14969   tree tinst;
14970   tree r = error_mark_node;
14971
14972   /* In C++0x, it's possible to have a function template whose type depends
14973      on itself recursively.  This is most obvious with decltype, but can also
14974      occur with enumeration scope (c++/48969).  So we need to catch infinite
14975      recursion and reject the substitution at deduction time; this function
14976      will return error_mark_node for any repeated substitution.
14977
14978      This also catches excessive recursion such as when f<N> depends on
14979      f<N-1> across all integers, and returns error_mark_node for all the
14980      substitutions back up to the initial one.
14981
14982      This is, of course, not reentrant.  */
14983   if (excessive_deduction_depth)
14984     return error_mark_node;
14985   tinst = build_tree_list (fn, NULL_TREE);
14986   ++deduction_depth;
14987
14988   gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
14989
14990   fntype = TREE_TYPE (fn);
14991   if (explicit_targs)
14992     {
14993       /* [temp.deduct]
14994
14995          The specified template arguments must match the template
14996          parameters in kind (i.e., type, nontype, template), and there
14997          must not be more arguments than there are parameters;
14998          otherwise type deduction fails.
14999
15000          Nontype arguments must match the types of the corresponding
15001          nontype template parameters, or must be convertible to the
15002          types of the corresponding nontype parameters as specified in
15003          _temp.arg.nontype_, otherwise type deduction fails.
15004
15005          All references in the function type of the function template
15006          to the corresponding template parameters are replaced by the
15007          specified template argument values.  If a substitution in a
15008          template parameter or in the function type of the function
15009          template results in an invalid type, type deduction fails.  */
15010       int i, len = TREE_VEC_LENGTH (tparms);
15011       location_t loc = input_location;
15012       bool incomplete = false;
15013
15014       /* Adjust any explicit template arguments before entering the
15015          substitution context.  */
15016       explicit_targs
15017         = (coerce_template_parms (tparms, explicit_targs, NULL_TREE,
15018                                   complain,
15019                                   /*require_all_args=*/false,
15020                                   /*use_default_args=*/false));
15021       if (explicit_targs == error_mark_node)
15022         goto fail;
15023
15024       /* Substitute the explicit args into the function type.  This is
15025          necessary so that, for instance, explicitly declared function
15026          arguments can match null pointed constants.  If we were given
15027          an incomplete set of explicit args, we must not do semantic
15028          processing during substitution as we could create partial
15029          instantiations.  */
15030       for (i = 0; i < len; i++)
15031         {
15032           tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
15033           bool parameter_pack = false;
15034           tree targ = TREE_VEC_ELT (explicit_targs, i);
15035
15036           /* Dig out the actual parm.  */
15037           if (TREE_CODE (parm) == TYPE_DECL
15038               || TREE_CODE (parm) == TEMPLATE_DECL)
15039             {
15040               parm = TREE_TYPE (parm);
15041               parameter_pack = TEMPLATE_TYPE_PARAMETER_PACK (parm);
15042             }
15043           else if (TREE_CODE (parm) == PARM_DECL)
15044             {
15045               parm = DECL_INITIAL (parm);
15046               parameter_pack = TEMPLATE_PARM_PARAMETER_PACK (parm);
15047             }
15048
15049           if (!parameter_pack && targ == NULL_TREE)
15050             /* No explicit argument for this template parameter.  */
15051             incomplete = true;
15052
15053           if (parameter_pack && pack_deducible_p (parm, fn))
15054             {
15055               /* Mark the argument pack as "incomplete". We could
15056                  still deduce more arguments during unification.
15057                  We remove this mark in type_unification_real.  */
15058               if (targ)
15059                 {
15060                   ARGUMENT_PACK_INCOMPLETE_P(targ) = 1;
15061                   ARGUMENT_PACK_EXPLICIT_ARGS (targ) 
15062                     = ARGUMENT_PACK_ARGS (targ);
15063                 }
15064
15065               /* We have some incomplete argument packs.  */
15066               incomplete = true;
15067             }
15068         }
15069
15070       TREE_VALUE (tinst) = explicit_targs;
15071       if (!push_tinst_level (tinst))
15072         {
15073           excessive_deduction_depth = true;
15074           goto fail;
15075         }
15076       processing_template_decl += incomplete;
15077       input_location = DECL_SOURCE_LOCATION (fn);
15078       /* Ignore any access checks; we'll see them again in
15079          instantiate_template and they might have the wrong
15080          access path at this point.  */
15081       push_deferring_access_checks (dk_deferred);
15082       fntype = tsubst (TREE_TYPE (fn), explicit_targs,
15083                        complain | tf_partial, NULL_TREE);
15084       pop_deferring_access_checks ();
15085       input_location = loc;
15086       processing_template_decl -= incomplete;
15087       pop_tinst_level ();
15088
15089       if (fntype == error_mark_node)
15090         goto fail;
15091
15092       /* Place the explicitly specified arguments in TARGS.  */
15093       for (i = NUM_TMPL_ARGS (explicit_targs); i--;)
15094         TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (explicit_targs, i);
15095     }
15096
15097   /* Never do unification on the 'this' parameter.  */
15098   parms = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (fntype));
15099
15100   if (return_type)
15101     {
15102       tree *new_args;
15103
15104       parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
15105       new_args = XALLOCAVEC (tree, nargs + 1);
15106       new_args[0] = return_type;
15107       memcpy (new_args + 1, args, nargs * sizeof (tree));
15108       args = new_args;
15109       ++nargs;
15110     }
15111
15112   /* We allow incomplete unification without an error message here
15113      because the standard doesn't seem to explicitly prohibit it.  Our
15114      callers must be ready to deal with unification failures in any
15115      event.  */
15116
15117   /* type_unification_real will pass back any access checks from default
15118      template argument substitution.  */
15119   vec<deferred_access_check, va_gc> *checks;
15120   checks = NULL;
15121
15122   ok = !type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
15123                                targs, parms, args, nargs, /*subr=*/0,
15124                                strict, flags, &checks, explain_p);
15125
15126   if (!ok)
15127     goto fail;
15128
15129   /* Now that we have bindings for all of the template arguments,
15130      ensure that the arguments deduced for the template template
15131      parameters have compatible template parameter lists.  We cannot
15132      check this property before we have deduced all template
15133      arguments, because the template parameter types of a template
15134      template parameter might depend on prior template parameters
15135      deduced after the template template parameter.  The following
15136      ill-formed example illustrates this issue:
15137
15138        template<typename T, template<T> class C> void f(C<5>, T);
15139
15140        template<int N> struct X {};
15141
15142        void g() {
15143          f(X<5>(), 5l); // error: template argument deduction fails
15144        }
15145
15146      The template parameter list of 'C' depends on the template type
15147      parameter 'T', but 'C' is deduced to 'X' before 'T' is deduced to
15148      'long'.  Thus, we can't check that 'C' cannot bind to 'X' at the
15149      time that we deduce 'C'.  */
15150   if (!template_template_parm_bindings_ok_p
15151            (DECL_INNERMOST_TEMPLATE_PARMS (fn), targs))
15152     {
15153       unify_inconsistent_template_template_parameters (explain_p);
15154       goto fail;
15155     }
15156
15157   /* All is well so far.  Now, check:
15158
15159      [temp.deduct]
15160
15161      When all template arguments have been deduced, all uses of
15162      template parameters in nondeduced contexts are replaced with
15163      the corresponding deduced argument values.  If the
15164      substitution results in an invalid type, as described above,
15165      type deduction fails.  */
15166   TREE_VALUE (tinst) = targs;
15167   if (!push_tinst_level (tinst))
15168     {
15169       excessive_deduction_depth = true;
15170       goto fail;
15171     }
15172
15173   /* Also collect access checks from the instantiation.  */
15174   reopen_deferring_access_checks (checks);
15175
15176   decl = instantiate_template (fn, targs, complain);
15177
15178   checks = get_deferred_access_checks ();
15179   pop_deferring_access_checks ();
15180
15181   pop_tinst_level ();
15182
15183   if (decl == error_mark_node)
15184     goto fail;
15185
15186   /* Now perform any access checks encountered during substitution.  */
15187   push_access_scope (decl);
15188   ok = perform_access_checks (checks, complain);
15189   pop_access_scope (decl);
15190   if (!ok)
15191     goto fail;
15192
15193   /* If we're looking for an exact match, check that what we got
15194      is indeed an exact match.  It might not be if some template
15195      parameters are used in non-deduced contexts.  */
15196   if (strict == DEDUCE_EXACT)
15197     {
15198       tree substed = TREE_TYPE (decl);
15199       unsigned int i;
15200
15201       tree sarg
15202         = skip_artificial_parms_for (decl, TYPE_ARG_TYPES (substed));
15203       if (return_type)
15204         sarg = tree_cons (NULL_TREE, TREE_TYPE (substed), sarg);
15205       for (i = 0; i < nargs && sarg; ++i, sarg = TREE_CHAIN (sarg))
15206         if (!same_type_p (args[i], TREE_VALUE (sarg)))
15207           {
15208             unify_type_mismatch (explain_p, args[i],
15209                                  TREE_VALUE (sarg));
15210             goto fail;
15211           }
15212     }
15213
15214   r = decl;
15215
15216  fail:
15217   --deduction_depth;
15218   if (excessive_deduction_depth)
15219     {
15220       if (deduction_depth == 0)
15221         /* Reset once we're all the way out.  */
15222         excessive_deduction_depth = false;
15223     }
15224
15225   /* We can't free this if a pending_template entry or last_error_tinst_level
15226      is pointing at it.  */
15227   if (last_pending_template == old_last_pend
15228       && last_error_tinst_level == old_error_tinst)
15229     ggc_free (tinst);
15230
15231   return r;
15232 }
15233
15234 /* Adjust types before performing type deduction, as described in
15235    [temp.deduct.call] and [temp.deduct.conv].  The rules in these two
15236    sections are symmetric.  PARM is the type of a function parameter
15237    or the return type of the conversion function.  ARG is the type of
15238    the argument passed to the call, or the type of the value
15239    initialized with the result of the conversion function.
15240    ARG_EXPR is the original argument expression, which may be null.  */
15241
15242 static int
15243 maybe_adjust_types_for_deduction (unification_kind_t strict,
15244                                   tree* parm,
15245                                   tree* arg,
15246                                   tree arg_expr)
15247 {
15248   int result = 0;
15249
15250   switch (strict)
15251     {
15252     case DEDUCE_CALL:
15253       break;
15254
15255     case DEDUCE_CONV:
15256       {
15257         /* Swap PARM and ARG throughout the remainder of this
15258            function; the handling is precisely symmetric since PARM
15259            will initialize ARG rather than vice versa.  */
15260         tree* temp = parm;
15261         parm = arg;
15262         arg = temp;
15263         break;
15264       }
15265
15266     case DEDUCE_EXACT:
15267       /* Core issue #873: Do the DR606 thing (see below) for these cases,
15268          too, but here handle it by stripping the reference from PARM
15269          rather than by adding it to ARG.  */
15270       if (TREE_CODE (*parm) == REFERENCE_TYPE
15271           && TYPE_REF_IS_RVALUE (*parm)
15272           && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
15273           && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
15274           && TREE_CODE (*arg) == REFERENCE_TYPE
15275           && !TYPE_REF_IS_RVALUE (*arg))
15276         *parm = TREE_TYPE (*parm);
15277       /* Nothing else to do in this case.  */
15278       return 0;
15279
15280     default:
15281       gcc_unreachable ();
15282     }
15283
15284   if (TREE_CODE (*parm) != REFERENCE_TYPE)
15285     {
15286       /* [temp.deduct.call]
15287
15288          If P is not a reference type:
15289
15290          --If A is an array type, the pointer type produced by the
15291          array-to-pointer standard conversion (_conv.array_) is
15292          used in place of A for type deduction; otherwise,
15293
15294          --If A is a function type, the pointer type produced by
15295          the function-to-pointer standard conversion
15296          (_conv.func_) is used in place of A for type deduction;
15297          otherwise,
15298
15299          --If A is a cv-qualified type, the top level
15300          cv-qualifiers of A's type are ignored for type
15301          deduction.  */
15302       if (TREE_CODE (*arg) == ARRAY_TYPE)
15303         *arg = build_pointer_type (TREE_TYPE (*arg));
15304       else if (TREE_CODE (*arg) == FUNCTION_TYPE)
15305         *arg = build_pointer_type (*arg);
15306       else
15307         *arg = TYPE_MAIN_VARIANT (*arg);
15308     }
15309
15310   /* From C++0x [14.8.2.1/3 temp.deduct.call] (after DR606), "If P is
15311      of the form T&&, where T is a template parameter, and the argument
15312      is an lvalue, T is deduced as A& */
15313   if (TREE_CODE (*parm) == REFERENCE_TYPE
15314       && TYPE_REF_IS_RVALUE (*parm)
15315       && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
15316       && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
15317       && (arg_expr ? real_lvalue_p (arg_expr)
15318           /* try_one_overload doesn't provide an arg_expr, but
15319              functions are always lvalues.  */
15320           : TREE_CODE (*arg) == FUNCTION_TYPE))
15321     *arg = build_reference_type (*arg);
15322
15323   /* [temp.deduct.call]
15324
15325      If P is a cv-qualified type, the top level cv-qualifiers
15326      of P's type are ignored for type deduction.  If P is a
15327      reference type, the type referred to by P is used for
15328      type deduction.  */
15329   *parm = TYPE_MAIN_VARIANT (*parm);
15330   if (TREE_CODE (*parm) == REFERENCE_TYPE)
15331     {
15332       *parm = TREE_TYPE (*parm);
15333       result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
15334     }
15335
15336   /* DR 322. For conversion deduction, remove a reference type on parm
15337      too (which has been swapped into ARG).  */
15338   if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
15339     *arg = TREE_TYPE (*arg);
15340
15341   return result;
15342 }
15343
15344 /* Subroutine of unify_one_argument.  PARM is a function parameter of a
15345    template which does contain any deducible template parameters; check if
15346    ARG is a suitable match for it.  STRICT, FLAGS and EXPLAIN_P are as in
15347    unify_one_argument.  */
15348
15349 static int
15350 check_non_deducible_conversion (tree parm, tree arg, int strict,
15351                                 int flags, bool explain_p)
15352 {
15353   tree type;
15354
15355   if (!TYPE_P (arg))
15356     type = TREE_TYPE (arg);
15357   else
15358     type = arg;
15359
15360   if (same_type_p (parm, type))
15361     return unify_success (explain_p);
15362
15363   if (strict == DEDUCE_CONV)
15364     {
15365       if (can_convert_arg (type, parm, NULL_TREE, flags,
15366                            explain_p ? tf_warning_or_error : tf_none))
15367         return unify_success (explain_p);
15368     }
15369   else if (strict != DEDUCE_EXACT)
15370     {
15371       if (can_convert_arg (parm, type,
15372                            TYPE_P (arg) ? NULL_TREE : arg,
15373                            flags, explain_p ? tf_warning_or_error : tf_none))
15374         return unify_success (explain_p);
15375     }
15376
15377   if (strict == DEDUCE_EXACT)
15378     return unify_type_mismatch (explain_p, parm, arg);
15379   else
15380     return unify_arg_conversion (explain_p, parm, type, arg);
15381 }
15382
15383 /* Subroutine of type_unification_real and unify_pack_expansion to
15384    handle unification of a single P/A pair.  Parameters are as
15385    for those functions.  */
15386
15387 static int
15388 unify_one_argument (tree tparms, tree targs, tree parm, tree arg,
15389                     int subr, unification_kind_t strict, int flags,
15390                     bool explain_p)
15391 {
15392   tree arg_expr = NULL_TREE;
15393   int arg_strict;
15394
15395   if (arg == error_mark_node || parm == error_mark_node)
15396     return unify_invalid (explain_p);
15397   if (arg == unknown_type_node)
15398     /* We can't deduce anything from this, but we might get all the
15399        template args from other function args.  */
15400     return unify_success (explain_p);
15401
15402   /* FIXME uses_deducible_template_parms */
15403   if (TYPE_P (parm) && !uses_template_parms (parm))
15404     return check_non_deducible_conversion (parm, arg, strict, flags,
15405                                            explain_p);
15406
15407   switch (strict)
15408     {
15409     case DEDUCE_CALL:
15410       arg_strict = (UNIFY_ALLOW_OUTER_LEVEL
15411                     | UNIFY_ALLOW_MORE_CV_QUAL
15412                     | UNIFY_ALLOW_DERIVED);
15413       break;
15414
15415     case DEDUCE_CONV:
15416       arg_strict = UNIFY_ALLOW_LESS_CV_QUAL;
15417       break;
15418
15419     case DEDUCE_EXACT:
15420       arg_strict = UNIFY_ALLOW_NONE;
15421       break;
15422
15423     default:
15424       gcc_unreachable ();
15425     }
15426
15427   /* We only do these transformations if this is the top-level
15428      parameter_type_list in a call or declaration matching; in other
15429      situations (nested function declarators, template argument lists) we
15430      won't be comparing a type to an expression, and we don't do any type
15431      adjustments.  */
15432   if (!subr)
15433     {
15434       if (!TYPE_P (arg))
15435         {
15436           gcc_assert (TREE_TYPE (arg) != NULL_TREE);
15437           if (type_unknown_p (arg))
15438             {
15439               /* [temp.deduct.type] A template-argument can be
15440                  deduced from a pointer to function or pointer
15441                  to member function argument if the set of
15442                  overloaded functions does not contain function
15443                  templates and at most one of a set of
15444                  overloaded functions provides a unique
15445                  match.  */
15446
15447               if (resolve_overloaded_unification
15448                   (tparms, targs, parm, arg, strict,
15449                    arg_strict, explain_p))
15450                 return unify_success (explain_p);
15451               return unify_overload_resolution_failure (explain_p, arg);
15452             }
15453
15454           arg_expr = arg;
15455           arg = unlowered_expr_type (arg);
15456           if (arg == error_mark_node)
15457             return unify_invalid (explain_p);
15458         }
15459
15460       arg_strict |=
15461         maybe_adjust_types_for_deduction (strict, &parm, &arg, arg_expr);
15462     }
15463   else
15464     gcc_assert ((TYPE_P (parm) || TREE_CODE (parm) == TEMPLATE_DECL)
15465                 == (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL));
15466
15467   /* For deduction from an init-list we need the actual list.  */
15468   if (arg_expr && BRACE_ENCLOSED_INITIALIZER_P (arg_expr))
15469     arg = arg_expr;
15470   return unify (tparms, targs, parm, arg, arg_strict, explain_p);
15471 }
15472
15473 /* Most parms like fn_type_unification.
15474
15475    If SUBR is 1, we're being called recursively (to unify the
15476    arguments of a function or method parameter of a function
15477    template).
15478
15479    CHECKS is a pointer to a vector of access checks encountered while
15480    substituting default template arguments.  */
15481
15482 static int
15483 type_unification_real (tree tparms,
15484                        tree targs,
15485                        tree xparms,
15486                        const tree *xargs,
15487                        unsigned int xnargs,
15488                        int subr,
15489                        unification_kind_t strict,
15490                        int flags,
15491                        vec<deferred_access_check, va_gc> **checks,
15492                        bool explain_p)
15493 {
15494   tree parm, arg;
15495   int i;
15496   int ntparms = TREE_VEC_LENGTH (tparms);
15497   int saw_undeduced = 0;
15498   tree parms;
15499   const tree *args;
15500   unsigned int nargs;
15501   unsigned int ia;
15502
15503   gcc_assert (TREE_CODE (tparms) == TREE_VEC);
15504   gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
15505   gcc_assert (ntparms > 0);
15506
15507   /* Reset the number of non-defaulted template arguments contained
15508      in TARGS.  */
15509   NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs) = NULL_TREE;
15510
15511  again:
15512   parms = xparms;
15513   args = xargs;
15514   nargs = xnargs;
15515
15516   ia = 0;
15517   while (parms && parms != void_list_node
15518          && ia < nargs)
15519     {
15520       parm = TREE_VALUE (parms);
15521
15522       if (TREE_CODE (parm) == TYPE_PACK_EXPANSION
15523           && (!TREE_CHAIN (parms) || TREE_CHAIN (parms) == void_list_node))
15524         /* For a function parameter pack that occurs at the end of the
15525            parameter-declaration-list, the type A of each remaining
15526            argument of the call is compared with the type P of the
15527            declarator-id of the function parameter pack.  */
15528         break;
15529
15530       parms = TREE_CHAIN (parms);
15531
15532       if (TREE_CODE (parm) == TYPE_PACK_EXPANSION)
15533         /* For a function parameter pack that does not occur at the
15534            end of the parameter-declaration-list, the type of the
15535            parameter pack is a non-deduced context.  */
15536         continue;
15537
15538       arg = args[ia];
15539       ++ia;
15540
15541       if (unify_one_argument (tparms, targs, parm, arg, subr, strict,
15542                               flags, explain_p))
15543         return 1;
15544     }
15545
15546   if (parms 
15547       && parms != void_list_node
15548       && TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
15549     {
15550       /* Unify the remaining arguments with the pack expansion type.  */
15551       tree argvec;
15552       tree parmvec = make_tree_vec (1);
15553
15554       /* Allocate a TREE_VEC and copy in all of the arguments */ 
15555       argvec = make_tree_vec (nargs - ia);
15556       for (i = 0; ia < nargs; ++ia, ++i)
15557         TREE_VEC_ELT (argvec, i) = args[ia];
15558
15559       /* Copy the parameter into parmvec.  */
15560       TREE_VEC_ELT (parmvec, 0) = TREE_VALUE (parms);
15561       if (unify_pack_expansion (tparms, targs, parmvec, argvec, strict,
15562                                 /*subr=*/subr, explain_p))
15563         return 1;
15564
15565       /* Advance to the end of the list of parameters.  */
15566       parms = TREE_CHAIN (parms);
15567     }
15568
15569   /* Fail if we've reached the end of the parm list, and more args
15570      are present, and the parm list isn't variadic.  */
15571   if (ia < nargs && parms == void_list_node)
15572     return unify_too_many_arguments (explain_p, nargs, ia);
15573   /* Fail if parms are left and they don't have default values.  */
15574   if (parms && parms != void_list_node
15575       && TREE_PURPOSE (parms) == NULL_TREE)
15576     {
15577       unsigned int count = nargs;
15578       tree p = parms;
15579       while (p && p != void_list_node)
15580         {
15581           count++;
15582           p = TREE_CHAIN (p);
15583         }
15584       return unify_too_few_arguments (explain_p, ia, count);
15585     }
15586
15587   if (!subr)
15588     {
15589       tsubst_flags_t complain = (explain_p
15590                                  ? tf_warning_or_error
15591                                  : tf_none);
15592
15593       for (i = 0; i < ntparms; i++)
15594         {
15595           tree targ = TREE_VEC_ELT (targs, i);
15596           tree tparm = TREE_VEC_ELT (tparms, i);
15597
15598           /* Clear the "incomplete" flags on all argument packs now so that
15599              substituting them into later default arguments works.  */
15600           if (targ && ARGUMENT_PACK_P (targ))
15601             {
15602               ARGUMENT_PACK_INCOMPLETE_P (targ) = 0;
15603               ARGUMENT_PACK_EXPLICIT_ARGS (targ) = NULL_TREE;
15604             }
15605
15606           if (targ || tparm == error_mark_node)
15607             continue;
15608           tparm = TREE_VALUE (tparm);
15609
15610           /* If this is an undeduced nontype parameter that depends on
15611              a type parameter, try another pass; its type may have been
15612              deduced from a later argument than the one from which
15613              this parameter can be deduced.  */
15614           if (TREE_CODE (tparm) == PARM_DECL
15615               && uses_template_parms (TREE_TYPE (tparm))
15616               && !saw_undeduced++)
15617             goto again;
15618
15619           /* Core issue #226 (C++0x) [temp.deduct]:
15620
15621              If a template argument has not been deduced, its
15622              default template argument, if any, is used. 
15623
15624              When we are in C++98 mode, TREE_PURPOSE will either
15625              be NULL_TREE or ERROR_MARK_NODE, so we do not need
15626              to explicitly check cxx_dialect here.  */
15627           if (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)))
15628             {
15629               tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
15630               tree arg = TREE_PURPOSE (TREE_VEC_ELT (tparms, i));
15631               reopen_deferring_access_checks (*checks);
15632               location_t save_loc = input_location;
15633               if (DECL_P (parm))
15634                 input_location = DECL_SOURCE_LOCATION (parm);
15635               arg = tsubst_template_arg (arg, targs, complain, NULL_TREE);
15636               arg = convert_template_argument (parm, arg, targs, complain,
15637                                                i, NULL_TREE);
15638               input_location = save_loc;
15639               *checks = get_deferred_access_checks ();
15640               pop_deferring_access_checks ();
15641               if (arg == error_mark_node)
15642                 return 1;
15643               else
15644                 {
15645                   TREE_VEC_ELT (targs, i) = arg;
15646                   /* The position of the first default template argument,
15647                      is also the number of non-defaulted arguments in TARGS.
15648                      Record that.  */
15649                   if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
15650                     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, i);
15651                   continue;
15652                 }
15653             }
15654
15655           /* If the type parameter is a parameter pack, then it will
15656              be deduced to an empty parameter pack.  */
15657           if (template_parameter_pack_p (tparm))
15658             {
15659               tree arg;
15660
15661               if (TREE_CODE (tparm) == TEMPLATE_PARM_INDEX)
15662                 {
15663                   arg = make_node (NONTYPE_ARGUMENT_PACK);
15664                   TREE_TYPE (arg)  = TREE_TYPE (TEMPLATE_PARM_DECL (tparm));
15665                   TREE_CONSTANT (arg) = 1;
15666                 }
15667               else
15668                 arg = cxx_make_type (TYPE_ARGUMENT_PACK);
15669
15670               SET_ARGUMENT_PACK_ARGS (arg, make_tree_vec (0));
15671
15672               TREE_VEC_ELT (targs, i) = arg;
15673               continue;
15674             }
15675
15676           return unify_parameter_deduction_failure (explain_p, tparm);
15677         }
15678     }
15679 #ifdef ENABLE_CHECKING
15680   if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
15681     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, TREE_VEC_LENGTH (targs));
15682 #endif
15683
15684   return unify_success (explain_p);
15685 }
15686
15687 /* Subroutine of type_unification_real.  Args are like the variables
15688    at the call site.  ARG is an overloaded function (or template-id);
15689    we try deducing template args from each of the overloads, and if
15690    only one succeeds, we go with that.  Modifies TARGS and returns
15691    true on success.  */
15692
15693 static bool
15694 resolve_overloaded_unification (tree tparms,
15695                                 tree targs,
15696                                 tree parm,
15697                                 tree arg,
15698                                 unification_kind_t strict,
15699                                 int sub_strict,
15700                                 bool explain_p)
15701 {
15702   tree tempargs = copy_node (targs);
15703   int good = 0;
15704   tree goodfn = NULL_TREE;
15705   bool addr_p;
15706
15707   if (TREE_CODE (arg) == ADDR_EXPR)
15708     {
15709       arg = TREE_OPERAND (arg, 0);
15710       addr_p = true;
15711     }
15712   else
15713     addr_p = false;
15714
15715   if (TREE_CODE (arg) == COMPONENT_REF)
15716     /* Handle `&x' where `x' is some static or non-static member
15717        function name.  */
15718     arg = TREE_OPERAND (arg, 1);
15719
15720   if (TREE_CODE (arg) == OFFSET_REF)
15721     arg = TREE_OPERAND (arg, 1);
15722
15723   /* Strip baselink information.  */
15724   if (BASELINK_P (arg))
15725     arg = BASELINK_FUNCTIONS (arg);
15726
15727   if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
15728     {
15729       /* If we got some explicit template args, we need to plug them into
15730          the affected templates before we try to unify, in case the
15731          explicit args will completely resolve the templates in question.  */
15732
15733       int ok = 0;
15734       tree expl_subargs = TREE_OPERAND (arg, 1);
15735       arg = TREE_OPERAND (arg, 0);
15736
15737       for (; arg; arg = OVL_NEXT (arg))
15738         {
15739           tree fn = OVL_CURRENT (arg);
15740           tree subargs, elem;
15741
15742           if (TREE_CODE (fn) != TEMPLATE_DECL)
15743             continue;
15744
15745           subargs = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (fn),
15746                                            expl_subargs, NULL_TREE, tf_none,
15747                                            /*require_all_args=*/true,
15748                                            /*use_default_args=*/true);
15749           if (subargs != error_mark_node
15750               && !any_dependent_template_arguments_p (subargs))
15751             {
15752               elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
15753               if (try_one_overload (tparms, targs, tempargs, parm,
15754                                     elem, strict, sub_strict, addr_p, explain_p)
15755                   && (!goodfn || !same_type_p (goodfn, elem)))
15756                 {
15757                   goodfn = elem;
15758                   ++good;
15759                 }
15760             }
15761           else if (subargs)
15762             ++ok;
15763         }
15764       /* If no templates (or more than one) are fully resolved by the
15765          explicit arguments, this template-id is a non-deduced context; it
15766          could still be OK if we deduce all template arguments for the
15767          enclosing call through other arguments.  */
15768       if (good != 1)
15769         good = ok;
15770     }
15771   else if (TREE_CODE (arg) != OVERLOAD
15772            && TREE_CODE (arg) != FUNCTION_DECL)
15773     /* If ARG is, for example, "(0, &f)" then its type will be unknown
15774        -- but the deduction does not succeed because the expression is
15775        not just the function on its own.  */
15776     return false;
15777   else
15778     for (; arg; arg = OVL_NEXT (arg))
15779       if (try_one_overload (tparms, targs, tempargs, parm,
15780                             TREE_TYPE (OVL_CURRENT (arg)),
15781                             strict, sub_strict, addr_p, explain_p)
15782           && (!goodfn || !decls_match (goodfn, OVL_CURRENT (arg))))
15783         {
15784           goodfn = OVL_CURRENT (arg);
15785           ++good;
15786         }
15787
15788   /* [temp.deduct.type] A template-argument can be deduced from a pointer
15789      to function or pointer to member function argument if the set of
15790      overloaded functions does not contain function templates and at most
15791      one of a set of overloaded functions provides a unique match.
15792
15793      So if we found multiple possibilities, we return success but don't
15794      deduce anything.  */
15795
15796   if (good == 1)
15797     {
15798       int i = TREE_VEC_LENGTH (targs);
15799       for (; i--; )
15800         if (TREE_VEC_ELT (tempargs, i))
15801           TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
15802     }
15803   if (good)
15804     return true;
15805
15806   return false;
15807 }
15808
15809 /* Core DR 115: In contexts where deduction is done and fails, or in
15810    contexts where deduction is not done, if a template argument list is
15811    specified and it, along with any default template arguments, identifies
15812    a single function template specialization, then the template-id is an
15813    lvalue for the function template specialization.  */
15814
15815 tree
15816 resolve_nondeduced_context (tree orig_expr)
15817 {
15818   tree expr, offset, baselink;
15819   bool addr;
15820
15821   if (!type_unknown_p (orig_expr))
15822     return orig_expr;
15823
15824   expr = orig_expr;
15825   addr = false;
15826   offset = NULL_TREE;
15827   baselink = NULL_TREE;
15828
15829   if (TREE_CODE (expr) == ADDR_EXPR)
15830     {
15831       expr = TREE_OPERAND (expr, 0);
15832       addr = true;
15833     }
15834   if (TREE_CODE (expr) == OFFSET_REF)
15835     {
15836       offset = expr;
15837       expr = TREE_OPERAND (expr, 1);
15838     }
15839   if (BASELINK_P (expr))
15840     {
15841       baselink = expr;
15842       expr = BASELINK_FUNCTIONS (expr);
15843     }
15844
15845   if (TREE_CODE (expr) == TEMPLATE_ID_EXPR)
15846     {
15847       int good = 0;
15848       tree goodfn = NULL_TREE;
15849
15850       /* If we got some explicit template args, we need to plug them into
15851          the affected templates before we try to unify, in case the
15852          explicit args will completely resolve the templates in question.  */
15853
15854       tree expl_subargs = TREE_OPERAND (expr, 1);
15855       tree arg = TREE_OPERAND (expr, 0);
15856       tree badfn = NULL_TREE;
15857       tree badargs = NULL_TREE;
15858
15859       for (; arg; arg = OVL_NEXT (arg))
15860         {
15861           tree fn = OVL_CURRENT (arg);
15862           tree subargs, elem;
15863
15864           if (TREE_CODE (fn) != TEMPLATE_DECL)
15865             continue;
15866
15867           subargs = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (fn),
15868                                            expl_subargs, NULL_TREE, tf_none,
15869                                            /*require_all_args=*/true,
15870                                            /*use_default_args=*/true);
15871           if (subargs != error_mark_node
15872               && !any_dependent_template_arguments_p (subargs))
15873             {
15874               elem = instantiate_template (fn, subargs, tf_none);
15875               if (elem == error_mark_node)
15876                 {
15877                   badfn = fn;
15878                   badargs = subargs;
15879                 }
15880               else if (elem && (!goodfn || !decls_match (goodfn, elem)))
15881                 {
15882                   goodfn = elem;
15883                   ++good;
15884                 }
15885             }
15886         }
15887       if (good == 1)
15888         {
15889           mark_used (goodfn);
15890           expr = goodfn;
15891           if (baselink)
15892             expr = build_baselink (BASELINK_BINFO (baselink),
15893                                    BASELINK_ACCESS_BINFO (baselink),
15894                                    expr, BASELINK_OPTYPE (baselink));
15895           if (offset)
15896             {
15897               tree base
15898                 = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (offset, 0)));
15899               expr = build_offset_ref (base, expr, addr, tf_warning_or_error);
15900             }
15901           if (addr)
15902             expr = cp_build_addr_expr (expr, tf_warning_or_error);
15903           return expr;
15904         }
15905       else if (good == 0 && badargs)
15906         /* There were no good options and at least one bad one, so let the
15907            user know what the problem is.  */
15908         instantiate_template (badfn, badargs, tf_warning_or_error);
15909     }
15910   return orig_expr;
15911 }
15912
15913 /* Subroutine of resolve_overloaded_unification; does deduction for a single
15914    overload.  Fills TARGS with any deduced arguments, or error_mark_node if
15915    different overloads deduce different arguments for a given parm.
15916    ADDR_P is true if the expression for which deduction is being
15917    performed was of the form "& fn" rather than simply "fn".
15918
15919    Returns 1 on success.  */
15920
15921 static int
15922 try_one_overload (tree tparms,
15923                   tree orig_targs,
15924                   tree targs,
15925                   tree parm,
15926                   tree arg,
15927                   unification_kind_t strict,
15928                   int sub_strict,
15929                   bool addr_p,
15930                   bool explain_p)
15931 {
15932   int nargs;
15933   tree tempargs;
15934   int i;
15935
15936   if (arg == error_mark_node)
15937     return 0;
15938
15939   /* [temp.deduct.type] A template-argument can be deduced from a pointer
15940      to function or pointer to member function argument if the set of
15941      overloaded functions does not contain function templates and at most
15942      one of a set of overloaded functions provides a unique match.
15943
15944      So if this is a template, just return success.  */
15945
15946   if (uses_template_parms (arg))
15947     return 1;
15948
15949   if (TREE_CODE (arg) == METHOD_TYPE)
15950     arg = build_ptrmemfunc_type (build_pointer_type (arg));
15951   else if (addr_p)
15952     arg = build_pointer_type (arg);
15953
15954   sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
15955
15956   /* We don't copy orig_targs for this because if we have already deduced
15957      some template args from previous args, unify would complain when we
15958      try to deduce a template parameter for the same argument, even though
15959      there isn't really a conflict.  */
15960   nargs = TREE_VEC_LENGTH (targs);
15961   tempargs = make_tree_vec (nargs);
15962
15963   if (unify (tparms, tempargs, parm, arg, sub_strict, explain_p))
15964     return 0;
15965
15966   /* First make sure we didn't deduce anything that conflicts with
15967      explicitly specified args.  */
15968   for (i = nargs; i--; )
15969     {
15970       tree elt = TREE_VEC_ELT (tempargs, i);
15971       tree oldelt = TREE_VEC_ELT (orig_targs, i);
15972
15973       if (!elt)
15974         /*NOP*/;
15975       else if (uses_template_parms (elt))
15976         /* Since we're unifying against ourselves, we will fill in
15977            template args used in the function parm list with our own
15978            template parms.  Discard them.  */
15979         TREE_VEC_ELT (tempargs, i) = NULL_TREE;
15980       else if (oldelt && !template_args_equal (oldelt, elt))
15981         return 0;
15982     }
15983
15984   for (i = nargs; i--; )
15985     {
15986       tree elt = TREE_VEC_ELT (tempargs, i);
15987
15988       if (elt)
15989         TREE_VEC_ELT (targs, i) = elt;
15990     }
15991
15992   return 1;
15993 }
15994
15995 /* PARM is a template class (perhaps with unbound template
15996    parameters).  ARG is a fully instantiated type.  If ARG can be
15997    bound to PARM, return ARG, otherwise return NULL_TREE.  TPARMS and
15998    TARGS are as for unify.  */
15999
16000 static tree
16001 try_class_unification (tree tparms, tree targs, tree parm, tree arg,
16002                        bool explain_p)
16003 {
16004   tree copy_of_targs;
16005
16006   if (!CLASSTYPE_TEMPLATE_INFO (arg)
16007       || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
16008           != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
16009     return NULL_TREE;
16010
16011   /* We need to make a new template argument vector for the call to
16012      unify.  If we used TARGS, we'd clutter it up with the result of
16013      the attempted unification, even if this class didn't work out.
16014      We also don't want to commit ourselves to all the unifications
16015      we've already done, since unification is supposed to be done on
16016      an argument-by-argument basis.  In other words, consider the
16017      following pathological case:
16018
16019        template <int I, int J, int K>
16020        struct S {};
16021
16022        template <int I, int J>
16023        struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
16024
16025        template <int I, int J, int K>
16026        void f(S<I, J, K>, S<I, I, I>);
16027
16028        void g() {
16029          S<0, 0, 0> s0;
16030          S<0, 1, 2> s2;
16031
16032          f(s0, s2);
16033        }
16034
16035      Now, by the time we consider the unification involving `s2', we
16036      already know that we must have `f<0, 0, 0>'.  But, even though
16037      `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
16038      because there are two ways to unify base classes of S<0, 1, 2>
16039      with S<I, I, I>.  If we kept the already deduced knowledge, we
16040      would reject the possibility I=1.  */
16041   copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
16042
16043   /* If unification failed, we're done.  */
16044   if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
16045              CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE, explain_p))
16046     return NULL_TREE;
16047
16048   return arg;
16049 }
16050
16051 /* Given a template type PARM and a class type ARG, find the unique
16052    base type in ARG that is an instance of PARM.  We do not examine
16053    ARG itself; only its base-classes.  If there is not exactly one
16054    appropriate base class, return NULL_TREE.  PARM may be the type of
16055    a partial specialization, as well as a plain template type.  Used
16056    by unify.  */
16057
16058 static enum template_base_result
16059 get_template_base (tree tparms, tree targs, tree parm, tree arg,
16060                    bool explain_p, tree *result)
16061 {
16062   tree rval = NULL_TREE;
16063   tree binfo;
16064
16065   gcc_assert (RECORD_OR_UNION_CODE_P (TREE_CODE (arg)));
16066
16067   binfo = TYPE_BINFO (complete_type (arg));
16068   if (!binfo)
16069     {
16070       /* The type could not be completed.  */
16071       *result = NULL_TREE;
16072       return tbr_incomplete_type;
16073     }
16074
16075   /* Walk in inheritance graph order.  The search order is not
16076      important, and this avoids multiple walks of virtual bases.  */
16077   for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
16078     {
16079       tree r = try_class_unification (tparms, targs, parm,
16080                                       BINFO_TYPE (binfo), explain_p);
16081
16082       if (r)
16083         {
16084           /* If there is more than one satisfactory baseclass, then:
16085
16086                [temp.deduct.call]
16087
16088               If they yield more than one possible deduced A, the type
16089               deduction fails.
16090
16091              applies.  */
16092           if (rval && !same_type_p (r, rval))
16093             {
16094               *result = NULL_TREE;
16095               return tbr_ambiguous_baseclass;
16096             }
16097
16098           rval = r;
16099         }
16100     }
16101
16102   *result = rval;
16103   return tbr_success;
16104 }
16105
16106 /* Returns the level of DECL, which declares a template parameter.  */
16107
16108 static int
16109 template_decl_level (tree decl)
16110 {
16111   switch (TREE_CODE (decl))
16112     {
16113     case TYPE_DECL:
16114     case TEMPLATE_DECL:
16115       return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
16116
16117     case PARM_DECL:
16118       return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
16119
16120     default:
16121       gcc_unreachable ();
16122     }
16123   return 0;
16124 }
16125
16126 /* Decide whether ARG can be unified with PARM, considering only the
16127    cv-qualifiers of each type, given STRICT as documented for unify.
16128    Returns nonzero iff the unification is OK on that basis.  */
16129
16130 static int
16131 check_cv_quals_for_unify (int strict, tree arg, tree parm)
16132 {
16133   int arg_quals = cp_type_quals (arg);
16134   int parm_quals = cp_type_quals (parm);
16135
16136   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
16137       && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
16138     {
16139       /*  Although a CVR qualifier is ignored when being applied to a
16140           substituted template parameter ([8.3.2]/1 for example), that
16141           does not allow us to unify "const T" with "int&" because both
16142           types are not of the form "cv-list T" [14.8.2.5 temp.deduct.type].
16143           It is ok when we're allowing additional CV qualifiers
16144           at the outer level [14.8.2.1]/3,1st bullet.  */
16145       if ((TREE_CODE (arg) == REFERENCE_TYPE
16146            || TREE_CODE (arg) == FUNCTION_TYPE
16147            || TREE_CODE (arg) == METHOD_TYPE)
16148           && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
16149         return 0;
16150
16151       if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
16152           && (parm_quals & TYPE_QUAL_RESTRICT))
16153         return 0;
16154     }
16155
16156   if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
16157       && (arg_quals & parm_quals) != parm_quals)
16158     return 0;
16159
16160   if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
16161       && (parm_quals & arg_quals) != arg_quals)
16162     return 0;
16163
16164   return 1;
16165 }
16166
16167 /* Determines the LEVEL and INDEX for the template parameter PARM.  */
16168 void 
16169 template_parm_level_and_index (tree parm, int* level, int* index)
16170 {
16171   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
16172       || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
16173       || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
16174     {
16175       *index = TEMPLATE_TYPE_IDX (parm);
16176       *level = TEMPLATE_TYPE_LEVEL (parm);
16177     }
16178   else
16179     {
16180       *index = TEMPLATE_PARM_IDX (parm);
16181       *level = TEMPLATE_PARM_LEVEL (parm);
16182     }
16183 }
16184
16185 #define RECUR_AND_CHECK_FAILURE(TP, TA, P, A, S, EP)                    \
16186   do {                                                                  \
16187     if (unify (TP, TA, P, A, S, EP))                                    \
16188       return 1;                                                         \
16189   } while (0);
16190
16191 /* Unifies the remaining arguments in PACKED_ARGS with the pack
16192    expansion at the end of PACKED_PARMS. Returns 0 if the type
16193    deduction succeeds, 1 otherwise. STRICT is the same as in
16194    unify. CALL_ARGS_P is true iff PACKED_ARGS is actually a function
16195    call argument list. We'll need to adjust the arguments to make them
16196    types. SUBR tells us if this is from a recursive call to
16197    type_unification_real, or for comparing two template argument
16198    lists. */
16199
16200 static int
16201 unify_pack_expansion (tree tparms, tree targs, tree packed_parms, 
16202                       tree packed_args, unification_kind_t strict,
16203                       bool subr, bool explain_p)
16204 {
16205   tree parm 
16206     = TREE_VEC_ELT (packed_parms, TREE_VEC_LENGTH (packed_parms) - 1);
16207   tree pattern = PACK_EXPANSION_PATTERN (parm);
16208   tree pack, packs = NULL_TREE;
16209   int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
16210   int len = TREE_VEC_LENGTH (packed_args);
16211
16212   /* Determine the parameter packs we will be deducing from the
16213      pattern, and record their current deductions.  */
16214   for (pack = PACK_EXPANSION_PARAMETER_PACKS (parm); 
16215        pack; pack = TREE_CHAIN (pack))
16216     {
16217       tree parm_pack = TREE_VALUE (pack);
16218       int idx, level;
16219
16220       /* Determine the index and level of this parameter pack.  */
16221       template_parm_level_and_index (parm_pack, &level, &idx);
16222
16223       /* Keep track of the parameter packs and their corresponding
16224          argument packs.  */
16225       packs = tree_cons (parm_pack, TMPL_ARG (targs, level, idx), packs);
16226       TREE_TYPE (packs) = make_tree_vec (len - start);
16227     }
16228   
16229   /* Loop through all of the arguments that have not yet been
16230      unified and unify each with the pattern.  */
16231   for (i = start; i < len; i++)
16232     {
16233       tree parm;
16234       bool any_explicit = false;
16235       tree arg = TREE_VEC_ELT (packed_args, i);
16236
16237       /* For each parameter pack, set its TMPL_ARG to either NULL_TREE
16238          or the element of its argument pack at the current index if
16239          this argument was explicitly specified.  */
16240       for (pack = packs; pack; pack = TREE_CHAIN (pack))
16241         {
16242           int idx, level;
16243           tree arg, pargs;
16244           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
16245
16246           arg = NULL_TREE;
16247           if (TREE_VALUE (pack)
16248               && (pargs = ARGUMENT_PACK_EXPLICIT_ARGS (TREE_VALUE (pack)))
16249               && (i - start < TREE_VEC_LENGTH (pargs)))
16250             {
16251               any_explicit = true;
16252               arg = TREE_VEC_ELT (pargs, i - start);
16253             }
16254           TMPL_ARG (targs, level, idx) = arg;
16255         }
16256
16257       /* If we had explicit template arguments, substitute them into the
16258          pattern before deduction.  */
16259       if (any_explicit)
16260         {
16261           /* Some arguments might still be unspecified or dependent.  */
16262           bool dependent;
16263           ++processing_template_decl;
16264           dependent = any_dependent_template_arguments_p (targs);
16265           if (!dependent)
16266             --processing_template_decl;
16267           parm = tsubst (pattern, targs,
16268                          explain_p ? tf_warning_or_error : tf_none,
16269                          NULL_TREE);
16270           if (dependent)
16271             --processing_template_decl;
16272           if (parm == error_mark_node)
16273             return 1;
16274         }
16275       else
16276         parm = pattern;
16277
16278       /* Unify the pattern with the current argument.  */
16279       if (unify_one_argument (tparms, targs, parm, arg, subr, strict,
16280                               LOOKUP_IMPLICIT, explain_p))
16281         return 1;
16282
16283       /* For each parameter pack, collect the deduced value.  */
16284       for (pack = packs; pack; pack = TREE_CHAIN (pack))
16285         {
16286           int idx, level;
16287           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
16288
16289           TREE_VEC_ELT (TREE_TYPE (pack), i - start) = 
16290             TMPL_ARG (targs, level, idx);
16291         }
16292     }
16293
16294   /* Verify that the results of unification with the parameter packs
16295      produce results consistent with what we've seen before, and make
16296      the deduced argument packs available.  */
16297   for (pack = packs; pack; pack = TREE_CHAIN (pack))
16298     {
16299       tree old_pack = TREE_VALUE (pack);
16300       tree new_args = TREE_TYPE (pack);
16301       int i, len = TREE_VEC_LENGTH (new_args);
16302       int idx, level;
16303       bool nondeduced_p = false;
16304
16305       /* By default keep the original deduced argument pack.
16306          If necessary, more specific code is going to update the
16307          resulting deduced argument later down in this function.  */
16308       template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
16309       TMPL_ARG (targs, level, idx) = old_pack;
16310
16311       /* If NEW_ARGS contains any NULL_TREE entries, we didn't
16312          actually deduce anything.  */
16313       for (i = 0; i < len && !nondeduced_p; ++i)
16314         if (TREE_VEC_ELT (new_args, i) == NULL_TREE)
16315           nondeduced_p = true;
16316       if (nondeduced_p)
16317         continue;
16318
16319       if (old_pack && ARGUMENT_PACK_INCOMPLETE_P (old_pack))
16320         {
16321           /* If we had fewer function args than explicit template args,
16322              just use the explicits.  */
16323           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
16324           int explicit_len = TREE_VEC_LENGTH (explicit_args);
16325           if (len < explicit_len)
16326             new_args = explicit_args;
16327         }
16328
16329       if (!old_pack)
16330         {
16331           tree result;
16332           /* Build the deduced *_ARGUMENT_PACK.  */
16333           if (TREE_CODE (TREE_PURPOSE (pack)) == TEMPLATE_PARM_INDEX)
16334             {
16335               result = make_node (NONTYPE_ARGUMENT_PACK);
16336               TREE_TYPE (result) = 
16337                 TREE_TYPE (TEMPLATE_PARM_DECL (TREE_PURPOSE (pack)));
16338               TREE_CONSTANT (result) = 1;
16339             }
16340           else
16341             result = cxx_make_type (TYPE_ARGUMENT_PACK);
16342
16343           SET_ARGUMENT_PACK_ARGS (result, new_args);
16344
16345           /* Note the deduced argument packs for this parameter
16346              pack.  */
16347           TMPL_ARG (targs, level, idx) = result;
16348         }
16349       else if (ARGUMENT_PACK_INCOMPLETE_P (old_pack)
16350                && (ARGUMENT_PACK_ARGS (old_pack) 
16351                    == ARGUMENT_PACK_EXPLICIT_ARGS (old_pack)))
16352         {
16353           /* We only had the explicitly-provided arguments before, but
16354              now we have a complete set of arguments.  */
16355           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
16356
16357           SET_ARGUMENT_PACK_ARGS (old_pack, new_args);
16358           ARGUMENT_PACK_INCOMPLETE_P (old_pack) = 1;
16359           ARGUMENT_PACK_EXPLICIT_ARGS (old_pack) = explicit_args;
16360         }
16361       else
16362         {
16363           tree bad_old_arg = NULL_TREE, bad_new_arg = NULL_TREE;
16364           tree old_args = ARGUMENT_PACK_ARGS (old_pack);
16365
16366           if (!comp_template_args_with_info (old_args, new_args,
16367                                              &bad_old_arg, &bad_new_arg))
16368             /* Inconsistent unification of this parameter pack.  */
16369             return unify_parameter_pack_inconsistent (explain_p,
16370                                                       bad_old_arg,
16371                                                       bad_new_arg);
16372         }
16373     }
16374
16375   return unify_success (explain_p);
16376 }
16377
16378 /* Deduce the value of template parameters.  TPARMS is the (innermost)
16379    set of template parameters to a template.  TARGS is the bindings
16380    for those template parameters, as determined thus far; TARGS may
16381    include template arguments for outer levels of template parameters
16382    as well.  PARM is a parameter to a template function, or a
16383    subcomponent of that parameter; ARG is the corresponding argument.
16384    This function attempts to match PARM with ARG in a manner
16385    consistent with the existing assignments in TARGS.  If more values
16386    are deduced, then TARGS is updated.
16387
16388    Returns 0 if the type deduction succeeds, 1 otherwise.  The
16389    parameter STRICT is a bitwise or of the following flags:
16390
16391      UNIFY_ALLOW_NONE:
16392        Require an exact match between PARM and ARG.
16393      UNIFY_ALLOW_MORE_CV_QUAL:
16394        Allow the deduced ARG to be more cv-qualified (by qualification
16395        conversion) than ARG.
16396      UNIFY_ALLOW_LESS_CV_QUAL:
16397        Allow the deduced ARG to be less cv-qualified than ARG.
16398      UNIFY_ALLOW_DERIVED:
16399        Allow the deduced ARG to be a template base class of ARG,
16400        or a pointer to a template base class of the type pointed to by
16401        ARG.
16402      UNIFY_ALLOW_INTEGER:
16403        Allow any integral type to be deduced.  See the TEMPLATE_PARM_INDEX
16404        case for more information.
16405      UNIFY_ALLOW_OUTER_LEVEL:
16406        This is the outermost level of a deduction. Used to determine validity
16407        of qualification conversions. A valid qualification conversion must
16408        have const qualified pointers leading up to the inner type which
16409        requires additional CV quals, except at the outer level, where const
16410        is not required [conv.qual]. It would be normal to set this flag in
16411        addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
16412      UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
16413        This is the outermost level of a deduction, and PARM can be more CV
16414        qualified at this point.
16415      UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
16416        This is the outermost level of a deduction, and PARM can be less CV
16417        qualified at this point.  */
16418
16419 static int
16420 unify (tree tparms, tree targs, tree parm, tree arg, int strict,
16421        bool explain_p)
16422 {
16423   int idx;
16424   tree targ;
16425   tree tparm;
16426   int strict_in = strict;
16427
16428   /* I don't think this will do the right thing with respect to types.
16429      But the only case I've seen it in so far has been array bounds, where
16430      signedness is the only information lost, and I think that will be
16431      okay.  */
16432   while (TREE_CODE (parm) == NOP_EXPR)
16433     parm = TREE_OPERAND (parm, 0);
16434
16435   if (arg == error_mark_node)
16436     return unify_invalid (explain_p);
16437   if (arg == unknown_type_node
16438       || arg == init_list_type_node)
16439     /* We can't deduce anything from this, but we might get all the
16440        template args from other function args.  */
16441     return unify_success (explain_p);
16442
16443   /* If PARM uses template parameters, then we can't bail out here,
16444      even if ARG == PARM, since we won't record unifications for the
16445      template parameters.  We might need them if we're trying to
16446      figure out which of two things is more specialized.  */
16447   if (arg == parm && !uses_template_parms (parm))
16448     return unify_success (explain_p);
16449
16450   /* Handle init lists early, so the rest of the function can assume
16451      we're dealing with a type. */
16452   if (BRACE_ENCLOSED_INITIALIZER_P (arg))
16453     {
16454       tree elt, elttype;
16455       unsigned i;
16456       tree orig_parm = parm;
16457
16458       /* Replace T with std::initializer_list<T> for deduction.  */
16459       if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
16460           && flag_deduce_init_list)
16461         parm = listify (parm);
16462
16463       if (!is_std_init_list (parm))
16464         /* We can only deduce from an initializer list argument if the
16465            parameter is std::initializer_list; otherwise this is a
16466            non-deduced context. */
16467         return unify_success (explain_p);
16468
16469       elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (parm), 0);
16470
16471       FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (arg), i, elt)
16472         {
16473           int elt_strict = strict;
16474
16475           if (elt == error_mark_node)
16476             return unify_invalid (explain_p);
16477
16478           if (!BRACE_ENCLOSED_INITIALIZER_P (elt))
16479             {
16480               tree type = TREE_TYPE (elt);
16481               /* It should only be possible to get here for a call.  */
16482               gcc_assert (elt_strict & UNIFY_ALLOW_OUTER_LEVEL);
16483               elt_strict |= maybe_adjust_types_for_deduction
16484                 (DEDUCE_CALL, &elttype, &type, elt);
16485               elt = type;
16486             }
16487
16488           RECUR_AND_CHECK_FAILURE (tparms, targs, elttype, elt, elt_strict,
16489                                    explain_p);
16490         }
16491
16492       /* If the std::initializer_list<T> deduction worked, replace the
16493          deduced A with std::initializer_list<A>.  */
16494       if (orig_parm != parm)
16495         {
16496           idx = TEMPLATE_TYPE_IDX (orig_parm);
16497           targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
16498           targ = listify (targ);
16499           TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = targ;
16500         }
16501       return unify_success (explain_p);
16502     }
16503
16504   /* Immediately reject some pairs that won't unify because of
16505      cv-qualification mismatches.  */
16506   if (TREE_CODE (arg) == TREE_CODE (parm)
16507       && TYPE_P (arg)
16508       /* It is the elements of the array which hold the cv quals of an array
16509          type, and the elements might be template type parms. We'll check
16510          when we recurse.  */
16511       && TREE_CODE (arg) != ARRAY_TYPE
16512       /* We check the cv-qualifiers when unifying with template type
16513          parameters below.  We want to allow ARG `const T' to unify with
16514          PARM `T' for example, when computing which of two templates
16515          is more specialized, for example.  */
16516       && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
16517       && !check_cv_quals_for_unify (strict_in, arg, parm))
16518     return unify_cv_qual_mismatch (explain_p, parm, arg);
16519
16520   if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
16521       && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
16522     strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
16523   strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
16524   strict &= ~UNIFY_ALLOW_DERIVED;
16525   strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
16526   strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
16527
16528   switch (TREE_CODE (parm))
16529     {
16530     case TYPENAME_TYPE:
16531     case SCOPE_REF:
16532     case UNBOUND_CLASS_TEMPLATE:
16533       /* In a type which contains a nested-name-specifier, template
16534          argument values cannot be deduced for template parameters used
16535          within the nested-name-specifier.  */
16536       return unify_success (explain_p);
16537
16538     case TEMPLATE_TYPE_PARM:
16539     case TEMPLATE_TEMPLATE_PARM:
16540     case BOUND_TEMPLATE_TEMPLATE_PARM:
16541       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
16542       if (tparm == error_mark_node)
16543         return unify_invalid (explain_p);
16544
16545       if (TEMPLATE_TYPE_LEVEL (parm)
16546           != template_decl_level (tparm))
16547         /* The PARM is not one we're trying to unify.  Just check
16548            to see if it matches ARG.  */
16549         {
16550           if (TREE_CODE (arg) == TREE_CODE (parm)
16551               && (is_auto (parm) ? is_auto (arg)
16552                   : same_type_p (parm, arg)))
16553             return unify_success (explain_p);
16554           else
16555             return unify_type_mismatch (explain_p, parm, arg);
16556         }
16557       idx = TEMPLATE_TYPE_IDX (parm);
16558       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
16559       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
16560       if (tparm == error_mark_node)
16561         return unify_invalid (explain_p);
16562
16563       /* Check for mixed types and values.  */
16564       if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
16565            && TREE_CODE (tparm) != TYPE_DECL)
16566           || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
16567               && TREE_CODE (tparm) != TEMPLATE_DECL))
16568         gcc_unreachable ();
16569
16570       if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
16571         {
16572           /* ARG must be constructed from a template class or a template
16573              template parameter.  */
16574           if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
16575               && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
16576             return unify_template_deduction_failure (explain_p, parm, arg);
16577
16578           {
16579             tree parmvec = TYPE_TI_ARGS (parm);
16580             tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
16581             tree full_argvec = add_to_template_args (targs, argvec);
16582             tree parm_parms 
16583               = DECL_INNERMOST_TEMPLATE_PARMS
16584                   (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (parm));
16585             int i, len;
16586             int parm_variadic_p = 0;
16587
16588             /* The resolution to DR150 makes clear that default
16589                arguments for an N-argument may not be used to bind T
16590                to a template template parameter with fewer than N
16591                parameters.  It is not safe to permit the binding of
16592                default arguments as an extension, as that may change
16593                the meaning of a conforming program.  Consider:
16594
16595                   struct Dense { static const unsigned int dim = 1; };
16596
16597                   template <template <typename> class View,
16598                             typename Block>
16599                   void operator+(float, View<Block> const&);
16600
16601                   template <typename Block,
16602                             unsigned int Dim = Block::dim>
16603                   struct Lvalue_proxy { operator float() const; };
16604
16605                   void
16606                   test_1d (void) {
16607                     Lvalue_proxy<Dense> p;
16608                     float b;
16609                     b + p;
16610                   }
16611
16612               Here, if Lvalue_proxy is permitted to bind to View, then
16613               the global operator+ will be used; if they are not, the
16614               Lvalue_proxy will be converted to float.  */
16615             if (coerce_template_parms (parm_parms,
16616                                        full_argvec,
16617                                        TYPE_TI_TEMPLATE (parm),
16618                                        (explain_p
16619                                         ? tf_warning_or_error
16620                                         : tf_none),
16621                                        /*require_all_args=*/true,
16622                                        /*use_default_args=*/false)
16623                 == error_mark_node)
16624               return 1;
16625
16626             /* Deduce arguments T, i from TT<T> or TT<i>.
16627                We check each element of PARMVEC and ARGVEC individually
16628                rather than the whole TREE_VEC since they can have
16629                different number of elements.  */
16630
16631             parmvec = expand_template_argument_pack (parmvec);
16632             argvec = expand_template_argument_pack (argvec);
16633
16634             len = TREE_VEC_LENGTH (parmvec);
16635
16636             /* Check if the parameters end in a pack, making them
16637                variadic.  */
16638             if (len > 0
16639                 && PACK_EXPANSION_P (TREE_VEC_ELT (parmvec, len - 1)))
16640               parm_variadic_p = 1;
16641             
16642              for (i = 0; i < len - parm_variadic_p; ++i)
16643                /* If the template argument list of P contains a pack
16644                   expansion that is not the last template argument, the
16645                   entire template argument list is a non-deduced
16646                   context.  */
16647                if (PACK_EXPANSION_P (TREE_VEC_ELT (parmvec, i)))
16648                  return unify_success (explain_p);
16649
16650             if (TREE_VEC_LENGTH (argvec) < len - parm_variadic_p)
16651               return unify_too_few_arguments (explain_p,
16652                                               TREE_VEC_LENGTH (argvec), len);
16653
16654              for (i = 0; i < len - parm_variadic_p; ++i)
16655               {
16656                 RECUR_AND_CHECK_FAILURE (tparms, targs,
16657                                          TREE_VEC_ELT (parmvec, i),
16658                                          TREE_VEC_ELT (argvec, i),
16659                                          UNIFY_ALLOW_NONE, explain_p);
16660               }
16661
16662             if (parm_variadic_p
16663                 && unify_pack_expansion (tparms, targs,
16664                                          parmvec, argvec,
16665                                          DEDUCE_EXACT,
16666                                          /*subr=*/true, explain_p))
16667               return 1;
16668           }
16669           arg = TYPE_TI_TEMPLATE (arg);
16670
16671           /* Fall through to deduce template name.  */
16672         }
16673
16674       if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
16675           || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
16676         {
16677           /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>.  */
16678
16679           /* Simple cases: Value already set, does match or doesn't.  */
16680           if (targ != NULL_TREE && template_args_equal (targ, arg))
16681             return unify_success (explain_p);
16682           else if (targ)
16683             return unify_inconsistency (explain_p, parm, targ, arg);
16684         }
16685       else
16686         {
16687           /* If PARM is `const T' and ARG is only `int', we don't have
16688              a match unless we are allowing additional qualification.
16689              If ARG is `const int' and PARM is just `T' that's OK;
16690              that binds `const int' to `T'.  */
16691           if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
16692                                          arg, parm))
16693             return unify_cv_qual_mismatch (explain_p, parm, arg);
16694
16695           /* Consider the case where ARG is `const volatile int' and
16696              PARM is `const T'.  Then, T should be `volatile int'.  */
16697           arg = cp_build_qualified_type_real
16698             (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
16699           if (arg == error_mark_node)
16700             return unify_invalid (explain_p);
16701
16702           /* Simple cases: Value already set, does match or doesn't.  */
16703           if (targ != NULL_TREE && same_type_p (targ, arg))
16704             return unify_success (explain_p);
16705           else if (targ)
16706             return unify_inconsistency (explain_p, parm, targ, arg);
16707
16708           /* Make sure that ARG is not a variable-sized array.  (Note
16709              that were talking about variable-sized arrays (like
16710              `int[n]'), rather than arrays of unknown size (like
16711              `int[]').)  We'll get very confused by such a type since
16712              the bound of the array is not constant, and therefore
16713              not mangleable.  Besides, such types are not allowed in
16714              ISO C++, so we can do as we please here.  We do allow
16715              them for 'auto' deduction, since that isn't ABI-exposed.  */
16716           if (!is_auto (parm) && variably_modified_type_p (arg, NULL_TREE))
16717             return unify_vla_arg (explain_p, arg);
16718
16719           /* Strip typedefs as in convert_template_argument.  */
16720           arg = canonicalize_type_argument (arg, tf_none);
16721         }
16722
16723       /* If ARG is a parameter pack or an expansion, we cannot unify
16724          against it unless PARM is also a parameter pack.  */
16725       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
16726           && !template_parameter_pack_p (parm))
16727         return unify_parameter_pack_mismatch (explain_p, parm, arg);
16728
16729       /* If the argument deduction results is a METHOD_TYPE,
16730          then there is a problem.
16731          METHOD_TYPE doesn't map to any real C++ type the result of
16732          the deduction can not be of that type.  */
16733       if (TREE_CODE (arg) == METHOD_TYPE)
16734         return unify_method_type_error (explain_p, arg);
16735
16736       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
16737       return unify_success (explain_p);
16738
16739     case TEMPLATE_PARM_INDEX:
16740       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
16741       if (tparm == error_mark_node)
16742         return unify_invalid (explain_p);
16743
16744       if (TEMPLATE_PARM_LEVEL (parm)
16745           != template_decl_level (tparm))
16746         {
16747           /* The PARM is not one we're trying to unify.  Just check
16748              to see if it matches ARG.  */
16749           int result = !(TREE_CODE (arg) == TREE_CODE (parm)
16750                          && cp_tree_equal (parm, arg));
16751           if (result)
16752             unify_expression_unequal (explain_p, parm, arg);
16753           return result;
16754         }
16755
16756       idx = TEMPLATE_PARM_IDX (parm);
16757       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
16758
16759       if (targ)
16760         {
16761           int x = !cp_tree_equal (targ, arg);
16762           if (x)
16763             unify_inconsistency (explain_p, parm, targ, arg);
16764           return x;
16765         }
16766
16767       /* [temp.deduct.type] If, in the declaration of a function template
16768          with a non-type template-parameter, the non-type
16769          template-parameter is used in an expression in the function
16770          parameter-list and, if the corresponding template-argument is
16771          deduced, the template-argument type shall match the type of the
16772          template-parameter exactly, except that a template-argument
16773          deduced from an array bound may be of any integral type.
16774          The non-type parameter might use already deduced type parameters.  */
16775       tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
16776       if (!TREE_TYPE (arg))
16777         /* Template-parameter dependent expression.  Just accept it for now.
16778            It will later be processed in convert_template_argument.  */
16779         ;
16780       else if (same_type_p (TREE_TYPE (arg), tparm))
16781         /* OK */;
16782       else if ((strict & UNIFY_ALLOW_INTEGER)
16783                && (TREE_CODE (tparm) == INTEGER_TYPE
16784                    || TREE_CODE (tparm) == BOOLEAN_TYPE))
16785         /* Convert the ARG to the type of PARM; the deduced non-type
16786            template argument must exactly match the types of the
16787            corresponding parameter.  */
16788         arg = fold (build_nop (tparm, arg));
16789       else if (uses_template_parms (tparm))
16790         /* We haven't deduced the type of this parameter yet.  Try again
16791            later.  */
16792         return unify_success (explain_p);
16793       else
16794         return unify_type_mismatch (explain_p, tparm, arg);
16795
16796       /* If ARG is a parameter pack or an expansion, we cannot unify
16797          against it unless PARM is also a parameter pack.  */
16798       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
16799           && !TEMPLATE_PARM_PARAMETER_PACK (parm))
16800         return unify_parameter_pack_mismatch (explain_p, parm, arg);
16801
16802       arg = strip_typedefs_expr (arg);
16803       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
16804       return unify_success (explain_p);
16805
16806     case PTRMEM_CST:
16807      {
16808         /* A pointer-to-member constant can be unified only with
16809          another constant.  */
16810       if (TREE_CODE (arg) != PTRMEM_CST)
16811         return unify_ptrmem_cst_mismatch (explain_p, parm, arg);
16812
16813       /* Just unify the class member. It would be useless (and possibly
16814          wrong, depending on the strict flags) to unify also
16815          PTRMEM_CST_CLASS, because we want to be sure that both parm and
16816          arg refer to the same variable, even if through different
16817          classes. For instance:
16818
16819          struct A { int x; };
16820          struct B : A { };
16821
16822          Unification of &A::x and &B::x must succeed.  */
16823       return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
16824                     PTRMEM_CST_MEMBER (arg), strict, explain_p);
16825      }
16826
16827     case POINTER_TYPE:
16828       {
16829         if (TREE_CODE (arg) != POINTER_TYPE)
16830           return unify_type_mismatch (explain_p, parm, arg);
16831
16832         /* [temp.deduct.call]
16833
16834            A can be another pointer or pointer to member type that can
16835            be converted to the deduced A via a qualification
16836            conversion (_conv.qual_).
16837
16838            We pass down STRICT here rather than UNIFY_ALLOW_NONE.
16839            This will allow for additional cv-qualification of the
16840            pointed-to types if appropriate.  */
16841
16842         if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
16843           /* The derived-to-base conversion only persists through one
16844              level of pointers.  */
16845           strict |= (strict_in & UNIFY_ALLOW_DERIVED);
16846
16847         return unify (tparms, targs, TREE_TYPE (parm),
16848                       TREE_TYPE (arg), strict, explain_p);
16849       }
16850
16851     case REFERENCE_TYPE:
16852       if (TREE_CODE (arg) != REFERENCE_TYPE)
16853         return unify_type_mismatch (explain_p, parm, arg);
16854       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
16855                     strict & UNIFY_ALLOW_MORE_CV_QUAL, explain_p);
16856
16857     case ARRAY_TYPE:
16858       if (TREE_CODE (arg) != ARRAY_TYPE)
16859         return unify_type_mismatch (explain_p, parm, arg);
16860       if ((TYPE_DOMAIN (parm) == NULL_TREE)
16861           != (TYPE_DOMAIN (arg) == NULL_TREE))
16862         return unify_type_mismatch (explain_p, parm, arg);
16863       RECUR_AND_CHECK_FAILURE (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
16864                                strict & UNIFY_ALLOW_MORE_CV_QUAL, explain_p);
16865       if (TYPE_DOMAIN (parm) != NULL_TREE)
16866         {
16867           tree parm_max;
16868           tree arg_max;
16869           bool parm_cst;
16870           bool arg_cst;
16871
16872           /* Our representation of array types uses "N - 1" as the
16873              TYPE_MAX_VALUE for an array with "N" elements, if "N" is
16874              not an integer constant.  We cannot unify arbitrarily
16875              complex expressions, so we eliminate the MINUS_EXPRs
16876              here.  */
16877           parm_max = TYPE_MAX_VALUE (TYPE_DOMAIN (parm));
16878           parm_cst = TREE_CODE (parm_max) == INTEGER_CST;
16879           if (!parm_cst)
16880             {
16881               gcc_assert (TREE_CODE (parm_max) == MINUS_EXPR);
16882               parm_max = TREE_OPERAND (parm_max, 0);
16883             }
16884           arg_max = TYPE_MAX_VALUE (TYPE_DOMAIN (arg));
16885           arg_cst = TREE_CODE (arg_max) == INTEGER_CST;
16886           if (!arg_cst)
16887             {
16888               /* The ARG_MAX may not be a simple MINUS_EXPR, if we are
16889                  trying to unify the type of a variable with the type
16890                  of a template parameter.  For example:
16891
16892                    template <unsigned int N>
16893                    void f (char (&) [N]);
16894                    int g(); 
16895                    void h(int i) {
16896                      char a[g(i)];
16897                      f(a); 
16898                    }
16899
16900                 Here, the type of the ARG will be "int [g(i)]", and
16901                 may be a SAVE_EXPR, etc.  */
16902               if (TREE_CODE (arg_max) != MINUS_EXPR)
16903                 return unify_vla_arg (explain_p, arg);
16904               arg_max = TREE_OPERAND (arg_max, 0);
16905             }
16906
16907           /* If only one of the bounds used a MINUS_EXPR, compensate
16908              by adding one to the other bound.  */
16909           if (parm_cst && !arg_cst)
16910             parm_max = fold_build2_loc (input_location, PLUS_EXPR,
16911                                     integer_type_node,
16912                                     parm_max,
16913                                     integer_one_node);
16914           else if (arg_cst && !parm_cst)
16915             arg_max = fold_build2_loc (input_location, PLUS_EXPR,
16916                                    integer_type_node,
16917                                    arg_max,
16918                                    integer_one_node);
16919
16920           RECUR_AND_CHECK_FAILURE (tparms, targs, parm_max, arg_max,
16921                                    UNIFY_ALLOW_INTEGER, explain_p);
16922         }
16923       return unify_success (explain_p);
16924
16925     case REAL_TYPE:
16926     case COMPLEX_TYPE:
16927     case VECTOR_TYPE:
16928     case INTEGER_TYPE:
16929     case BOOLEAN_TYPE:
16930     case ENUMERAL_TYPE:
16931     case VOID_TYPE:
16932     case NULLPTR_TYPE:
16933       if (TREE_CODE (arg) != TREE_CODE (parm))
16934         return unify_type_mismatch (explain_p, parm, arg);
16935
16936       /* We have already checked cv-qualification at the top of the
16937          function.  */
16938       if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
16939         return unify_type_mismatch (explain_p, parm, arg);
16940
16941       /* As far as unification is concerned, this wins.  Later checks
16942          will invalidate it if necessary.  */
16943       return unify_success (explain_p);
16944
16945       /* Types INTEGER_CST and MINUS_EXPR can come from array bounds.  */
16946       /* Type INTEGER_CST can come from ordinary constant template args.  */
16947     case INTEGER_CST:
16948       while (TREE_CODE (arg) == NOP_EXPR)
16949         arg = TREE_OPERAND (arg, 0);
16950
16951       if (TREE_CODE (arg) != INTEGER_CST)
16952         return unify_template_argument_mismatch (explain_p, parm, arg);
16953       return (tree_int_cst_equal (parm, arg)
16954               ? unify_success (explain_p)
16955               : unify_template_argument_mismatch (explain_p, parm, arg));
16956
16957     case TREE_VEC:
16958       {
16959         int i, len, argslen;
16960         int parm_variadic_p = 0;
16961
16962         if (TREE_CODE (arg) != TREE_VEC)
16963           return unify_template_argument_mismatch (explain_p, parm, arg);
16964
16965         len = TREE_VEC_LENGTH (parm);
16966         argslen = TREE_VEC_LENGTH (arg);
16967
16968         /* Check for pack expansions in the parameters.  */
16969         for (i = 0; i < len; ++i)
16970           {
16971             if (PACK_EXPANSION_P (TREE_VEC_ELT (parm, i)))
16972               {
16973                 if (i == len - 1)
16974                   /* We can unify against something with a trailing
16975                      parameter pack.  */
16976                   parm_variadic_p = 1;
16977                 else
16978                   /* [temp.deduct.type]/9: If the template argument list of
16979                      P contains a pack expansion that is not the last
16980                      template argument, the entire template argument list
16981                      is a non-deduced context.  */
16982                   return unify_success (explain_p);
16983               }
16984           }
16985
16986         /* If we don't have enough arguments to satisfy the parameters
16987            (not counting the pack expression at the end), or we have
16988            too many arguments for a parameter list that doesn't end in
16989            a pack expression, we can't unify.  */
16990         if (parm_variadic_p
16991             ? argslen < len - parm_variadic_p
16992             : argslen != len)
16993           return unify_arity (explain_p, TREE_VEC_LENGTH (arg), len);
16994
16995         /* Unify all of the parameters that precede the (optional)
16996            pack expression.  */
16997         for (i = 0; i < len - parm_variadic_p; ++i)
16998           {
16999             RECUR_AND_CHECK_FAILURE (tparms, targs,
17000                                      TREE_VEC_ELT (parm, i),
17001                                      TREE_VEC_ELT (arg, i),
17002                                      UNIFY_ALLOW_NONE, explain_p);
17003           }
17004         if (parm_variadic_p)
17005           return unify_pack_expansion (tparms, targs, parm, arg,
17006                                        DEDUCE_EXACT,
17007                                        /*subr=*/true, explain_p);
17008         return unify_success (explain_p);
17009       }
17010
17011     case RECORD_TYPE:
17012     case UNION_TYPE:
17013       if (TREE_CODE (arg) != TREE_CODE (parm))
17014         return unify_type_mismatch (explain_p, parm, arg);
17015
17016       if (TYPE_PTRMEMFUNC_P (parm))
17017         {
17018           if (!TYPE_PTRMEMFUNC_P (arg))
17019             return unify_type_mismatch (explain_p, parm, arg);
17020
17021           return unify (tparms, targs,
17022                         TYPE_PTRMEMFUNC_FN_TYPE (parm),
17023                         TYPE_PTRMEMFUNC_FN_TYPE (arg),
17024                         strict, explain_p);
17025         }
17026
17027       if (CLASSTYPE_TEMPLATE_INFO (parm))
17028         {
17029           tree t = NULL_TREE;
17030
17031           if (strict_in & UNIFY_ALLOW_DERIVED)
17032             {
17033               /* First, we try to unify the PARM and ARG directly.  */
17034               t = try_class_unification (tparms, targs,
17035                                          parm, arg, explain_p);
17036
17037               if (!t)
17038                 {
17039                   /* Fallback to the special case allowed in
17040                      [temp.deduct.call]:
17041
17042                        If P is a class, and P has the form
17043                        template-id, then A can be a derived class of
17044                        the deduced A.  Likewise, if P is a pointer to
17045                        a class of the form template-id, A can be a
17046                        pointer to a derived class pointed to by the
17047                        deduced A.  */
17048                   enum template_base_result r;
17049                   r = get_template_base (tparms, targs, parm, arg,
17050                                          explain_p, &t);
17051
17052                   if (!t)
17053                     return unify_no_common_base (explain_p, r, parm, arg);
17054                 }
17055             }
17056           else if (CLASSTYPE_TEMPLATE_INFO (arg)
17057                    && (CLASSTYPE_TI_TEMPLATE (parm)
17058                        == CLASSTYPE_TI_TEMPLATE (arg)))
17059             /* Perhaps PARM is something like S<U> and ARG is S<int>.
17060                Then, we should unify `int' and `U'.  */
17061             t = arg;
17062           else
17063             /* There's no chance of unification succeeding.  */
17064             return unify_type_mismatch (explain_p, parm, arg);
17065
17066           return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
17067                         CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE, explain_p);
17068         }
17069       else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
17070         return unify_type_mismatch (explain_p, parm, arg);
17071       return unify_success (explain_p);
17072
17073     case METHOD_TYPE:
17074     case FUNCTION_TYPE:
17075       {
17076         unsigned int nargs;
17077         tree *args;
17078         tree a;
17079         unsigned int i;
17080
17081         if (TREE_CODE (arg) != TREE_CODE (parm))
17082           return unify_type_mismatch (explain_p, parm, arg);
17083
17084         /* CV qualifications for methods can never be deduced, they must
17085            match exactly.  We need to check them explicitly here,
17086            because type_unification_real treats them as any other
17087            cv-qualified parameter.  */
17088         if (TREE_CODE (parm) == METHOD_TYPE
17089             && (!check_cv_quals_for_unify
17090                 (UNIFY_ALLOW_NONE,
17091                  class_of_this_parm (arg),
17092                  class_of_this_parm (parm))))
17093           return unify_cv_qual_mismatch (explain_p, parm, arg);
17094
17095         RECUR_AND_CHECK_FAILURE (tparms, targs, TREE_TYPE (parm),
17096                                  TREE_TYPE (arg), UNIFY_ALLOW_NONE, explain_p);
17097
17098         nargs = list_length (TYPE_ARG_TYPES (arg));
17099         args = XALLOCAVEC (tree, nargs);
17100         for (a = TYPE_ARG_TYPES (arg), i = 0;
17101              a != NULL_TREE && a != void_list_node;
17102              a = TREE_CHAIN (a), ++i)
17103           args[i] = TREE_VALUE (a);
17104         nargs = i;
17105
17106         return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
17107                                       args, nargs, 1, DEDUCE_EXACT,
17108                                       LOOKUP_NORMAL, NULL, explain_p);
17109       }
17110
17111     case OFFSET_TYPE:
17112       /* Unify a pointer to member with a pointer to member function, which
17113          deduces the type of the member as a function type. */
17114       if (TYPE_PTRMEMFUNC_P (arg))
17115         {
17116           tree method_type;
17117           tree fntype;
17118
17119           /* Check top-level cv qualifiers */
17120           if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
17121             return unify_cv_qual_mismatch (explain_p, parm, arg);
17122
17123           RECUR_AND_CHECK_FAILURE (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
17124                                    TYPE_PTRMEMFUNC_OBJECT_TYPE (arg),
17125                                    UNIFY_ALLOW_NONE, explain_p);
17126
17127           /* Determine the type of the function we are unifying against. */
17128           method_type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (arg));
17129           fntype =
17130             build_function_type (TREE_TYPE (method_type),
17131                                  TREE_CHAIN (TYPE_ARG_TYPES (method_type)));
17132
17133           /* Extract the cv-qualifiers and ref-qualifier of the member
17134              function from the implicit object parameter and place them
17135              on the function type to be restored later. */
17136           fntype = apply_memfn_quals (fntype,
17137                                       type_memfn_quals (method_type),
17138                                       type_memfn_rqual (method_type));
17139           return unify (tparms, targs, TREE_TYPE (parm), fntype, strict, explain_p);
17140         }
17141
17142       if (TREE_CODE (arg) != OFFSET_TYPE)
17143         return unify_type_mismatch (explain_p, parm, arg);
17144       RECUR_AND_CHECK_FAILURE (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
17145                                TYPE_OFFSET_BASETYPE (arg),
17146                                UNIFY_ALLOW_NONE, explain_p);
17147       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
17148                     strict, explain_p);
17149
17150     case CONST_DECL:
17151       if (DECL_TEMPLATE_PARM_P (parm))
17152         return unify (tparms, targs, DECL_INITIAL (parm), arg, strict, explain_p);
17153       if (arg != integral_constant_value (parm))
17154         return unify_template_argument_mismatch (explain_p, parm, arg);
17155       return unify_success (explain_p);
17156
17157     case FIELD_DECL:
17158     case TEMPLATE_DECL:
17159       /* Matched cases are handled by the ARG == PARM test above.  */
17160       return unify_template_argument_mismatch (explain_p, parm, arg);
17161
17162     case VAR_DECL:
17163       /* A non-type template parameter that is a variable should be a
17164          an integral constant, in which case, it whould have been
17165          folded into its (constant) value. So we should not be getting
17166          a variable here.  */
17167       gcc_unreachable ();
17168
17169     case TYPE_ARGUMENT_PACK:
17170     case NONTYPE_ARGUMENT_PACK:
17171       return unify (tparms, targs, ARGUMENT_PACK_ARGS (parm),
17172                     ARGUMENT_PACK_ARGS (arg), strict, explain_p);
17173
17174     case TYPEOF_TYPE:
17175     case DECLTYPE_TYPE:
17176     case UNDERLYING_TYPE:
17177       /* Cannot deduce anything from TYPEOF_TYPE, DECLTYPE_TYPE,
17178          or UNDERLYING_TYPE nodes.  */
17179       return unify_success (explain_p);
17180
17181     case ERROR_MARK:
17182       /* Unification fails if we hit an error node.  */
17183       return unify_invalid (explain_p);
17184
17185     default:
17186       /* An unresolved overload is a nondeduced context.  */
17187       if (is_overloaded_fn (parm) || type_unknown_p (parm))
17188         return unify_success (explain_p);
17189       gcc_assert (EXPR_P (parm));
17190
17191       /* We must be looking at an expression.  This can happen with
17192          something like:
17193
17194            template <int I>
17195            void foo(S<I>, S<I + 2>);
17196
17197          This is a "nondeduced context":
17198
17199            [deduct.type]
17200
17201            The nondeduced contexts are:
17202
17203            --A type that is a template-id in which one or more of
17204              the template-arguments is an expression that references
17205              a template-parameter.
17206
17207          In these cases, we assume deduction succeeded, but don't
17208          actually infer any unifications.  */
17209
17210       if (!uses_template_parms (parm)
17211           && !template_args_equal (parm, arg))
17212         return unify_expression_unequal (explain_p, parm, arg);
17213       else
17214         return unify_success (explain_p);
17215     }
17216 }
17217 #undef RECUR_AND_CHECK_FAILURE
17218 \f
17219 /* Note that DECL can be defined in this translation unit, if
17220    required.  */
17221
17222 static void
17223 mark_definable (tree decl)
17224 {
17225   tree clone;
17226   DECL_NOT_REALLY_EXTERN (decl) = 1;
17227   FOR_EACH_CLONE (clone, decl)
17228     DECL_NOT_REALLY_EXTERN (clone) = 1;
17229 }
17230
17231 /* Called if RESULT is explicitly instantiated, or is a member of an
17232    explicitly instantiated class.  */
17233
17234 void
17235 mark_decl_instantiated (tree result, int extern_p)
17236 {
17237   SET_DECL_EXPLICIT_INSTANTIATION (result);
17238
17239   /* If this entity has already been written out, it's too late to
17240      make any modifications.  */
17241   if (TREE_ASM_WRITTEN (result))
17242     return;
17243
17244   if (TREE_CODE (result) != FUNCTION_DECL)
17245     /* The TREE_PUBLIC flag for function declarations will have been
17246        set correctly by tsubst.  */
17247     TREE_PUBLIC (result) = 1;
17248
17249   /* This might have been set by an earlier implicit instantiation.  */
17250   DECL_COMDAT (result) = 0;
17251
17252   if (extern_p)
17253     DECL_NOT_REALLY_EXTERN (result) = 0;
17254   else
17255     {
17256       mark_definable (result);
17257       /* Always make artificials weak.  */
17258       if (DECL_ARTIFICIAL (result) && flag_weak)
17259         comdat_linkage (result);
17260       /* For WIN32 we also want to put explicit instantiations in
17261          linkonce sections.  */
17262       else if (TREE_PUBLIC (result))
17263         maybe_make_one_only (result);
17264     }
17265
17266   /* If EXTERN_P, then this function will not be emitted -- unless
17267      followed by an explicit instantiation, at which point its linkage
17268      will be adjusted.  If !EXTERN_P, then this function will be
17269      emitted here.  In neither circumstance do we want
17270      import_export_decl to adjust the linkage.  */
17271   DECL_INTERFACE_KNOWN (result) = 1;
17272 }
17273
17274 /* Subroutine of more_specialized_fn: check whether TARGS is missing any
17275    important template arguments.  If any are missing, we check whether
17276    they're important by using error_mark_node for substituting into any
17277    args that were used for partial ordering (the ones between ARGS and END)
17278    and seeing if it bubbles up.  */
17279
17280 static bool
17281 check_undeduced_parms (tree targs, tree args, tree end)
17282 {
17283   bool found = false;
17284   int i;
17285   for (i = TREE_VEC_LENGTH (targs) - 1; i >= 0; --i)
17286     if (TREE_VEC_ELT (targs, i) == NULL_TREE)
17287       {
17288         found = true;
17289         TREE_VEC_ELT (targs, i) = error_mark_node;
17290       }
17291   if (found)
17292     {
17293       tree substed = tsubst_arg_types (args, targs, end, tf_none, NULL_TREE);
17294       if (substed == error_mark_node)
17295         return true;
17296     }
17297   return false;
17298 }
17299
17300 /* Given two function templates PAT1 and PAT2, return:
17301
17302    1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
17303    -1 if PAT2 is more specialized than PAT1.
17304    0 if neither is more specialized.
17305
17306    LEN indicates the number of parameters we should consider
17307    (defaulted parameters should not be considered).
17308
17309    The 1998 std underspecified function template partial ordering, and
17310    DR214 addresses the issue.  We take pairs of arguments, one from
17311    each of the templates, and deduce them against each other.  One of
17312    the templates will be more specialized if all the *other*
17313    template's arguments deduce against its arguments and at least one
17314    of its arguments *does* *not* deduce against the other template's
17315    corresponding argument.  Deduction is done as for class templates.
17316    The arguments used in deduction have reference and top level cv
17317    qualifiers removed.  Iff both arguments were originally reference
17318    types *and* deduction succeeds in both directions, the template
17319    with the more cv-qualified argument wins for that pairing (if
17320    neither is more cv-qualified, they both are equal).  Unlike regular
17321    deduction, after all the arguments have been deduced in this way,
17322    we do *not* verify the deduced template argument values can be
17323    substituted into non-deduced contexts.
17324
17325    The logic can be a bit confusing here, because we look at deduce1 and
17326    targs1 to see if pat2 is at least as specialized, and vice versa; if we
17327    can find template arguments for pat1 to make arg1 look like arg2, that
17328    means that arg2 is at least as specialized as arg1.  */
17329
17330 int
17331 more_specialized_fn (tree pat1, tree pat2, int len)
17332 {
17333   tree decl1 = DECL_TEMPLATE_RESULT (pat1);
17334   tree decl2 = DECL_TEMPLATE_RESULT (pat2);
17335   tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
17336   tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
17337   tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
17338   tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
17339   tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
17340   tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
17341   tree origs1, origs2;
17342   bool lose1 = false;
17343   bool lose2 = false;
17344
17345   /* Remove the this parameter from non-static member functions.  If
17346      one is a non-static member function and the other is not a static
17347      member function, remove the first parameter from that function
17348      also.  This situation occurs for operator functions where we
17349      locate both a member function (with this pointer) and non-member
17350      operator (with explicit first operand).  */
17351   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
17352     {
17353       len--; /* LEN is the number of significant arguments for DECL1 */
17354       args1 = TREE_CHAIN (args1);
17355       if (!DECL_STATIC_FUNCTION_P (decl2))
17356         args2 = TREE_CHAIN (args2);
17357     }
17358   else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
17359     {
17360       args2 = TREE_CHAIN (args2);
17361       if (!DECL_STATIC_FUNCTION_P (decl1))
17362         {
17363           len--;
17364           args1 = TREE_CHAIN (args1);
17365         }
17366     }
17367
17368   /* If only one is a conversion operator, they are unordered.  */
17369   if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
17370     return 0;
17371
17372   /* Consider the return type for a conversion function */
17373   if (DECL_CONV_FN_P (decl1))
17374     {
17375       args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
17376       args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
17377       len++;
17378     }
17379
17380   processing_template_decl++;
17381
17382   origs1 = args1;
17383   origs2 = args2;
17384
17385   while (len--
17386          /* Stop when an ellipsis is seen.  */
17387          && args1 != NULL_TREE && args2 != NULL_TREE)
17388     {
17389       tree arg1 = TREE_VALUE (args1);
17390       tree arg2 = TREE_VALUE (args2);
17391       int deduce1, deduce2;
17392       int quals1 = -1;
17393       int quals2 = -1;
17394
17395       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
17396           && TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
17397         {
17398           /* When both arguments are pack expansions, we need only
17399              unify the patterns themselves.  */
17400           arg1 = PACK_EXPANSION_PATTERN (arg1);
17401           arg2 = PACK_EXPANSION_PATTERN (arg2);
17402
17403           /* This is the last comparison we need to do.  */
17404           len = 0;
17405         }
17406
17407       if (TREE_CODE (arg1) == REFERENCE_TYPE)
17408         {
17409           arg1 = TREE_TYPE (arg1);
17410           quals1 = cp_type_quals (arg1);
17411         }
17412
17413       if (TREE_CODE (arg2) == REFERENCE_TYPE)
17414         {
17415           arg2 = TREE_TYPE (arg2);
17416           quals2 = cp_type_quals (arg2);
17417         }
17418
17419       arg1 = TYPE_MAIN_VARIANT (arg1);
17420       arg2 = TYPE_MAIN_VARIANT (arg2);
17421
17422       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION)
17423         {
17424           int i, len2 = list_length (args2);
17425           tree parmvec = make_tree_vec (1);
17426           tree argvec = make_tree_vec (len2);
17427           tree ta = args2;
17428
17429           /* Setup the parameter vector, which contains only ARG1.  */
17430           TREE_VEC_ELT (parmvec, 0) = arg1;
17431
17432           /* Setup the argument vector, which contains the remaining
17433              arguments.  */
17434           for (i = 0; i < len2; i++, ta = TREE_CHAIN (ta))
17435             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
17436
17437           deduce1 = (unify_pack_expansion (tparms1, targs1, parmvec,
17438                                            argvec, DEDUCE_EXACT,
17439                                            /*subr=*/true, /*explain_p=*/false)
17440                      == 0);
17441
17442           /* We cannot deduce in the other direction, because ARG1 is
17443              a pack expansion but ARG2 is not.  */
17444           deduce2 = 0;
17445         }
17446       else if (TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
17447         {
17448           int i, len1 = list_length (args1);
17449           tree parmvec = make_tree_vec (1);
17450           tree argvec = make_tree_vec (len1);
17451           tree ta = args1;
17452
17453           /* Setup the parameter vector, which contains only ARG1.  */
17454           TREE_VEC_ELT (parmvec, 0) = arg2;
17455
17456           /* Setup the argument vector, which contains the remaining
17457              arguments.  */
17458           for (i = 0; i < len1; i++, ta = TREE_CHAIN (ta))
17459             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
17460
17461           deduce2 = (unify_pack_expansion (tparms2, targs2, parmvec,
17462                                            argvec, DEDUCE_EXACT,
17463                                            /*subr=*/true, /*explain_p=*/false)
17464                      == 0);
17465
17466           /* We cannot deduce in the other direction, because ARG2 is
17467              a pack expansion but ARG1 is not.*/
17468           deduce1 = 0;
17469         }
17470
17471       else
17472         {
17473           /* The normal case, where neither argument is a pack
17474              expansion.  */
17475           deduce1 = (unify (tparms1, targs1, arg1, arg2,
17476                             UNIFY_ALLOW_NONE, /*explain_p=*/false)
17477                      == 0);
17478           deduce2 = (unify (tparms2, targs2, arg2, arg1,
17479                             UNIFY_ALLOW_NONE, /*explain_p=*/false)
17480                      == 0);
17481         }
17482
17483       /* If we couldn't deduce arguments for tparms1 to make arg1 match
17484          arg2, then arg2 is not as specialized as arg1.  */
17485       if (!deduce1)
17486         lose2 = true;
17487       if (!deduce2)
17488         lose1 = true;
17489
17490       /* "If, for a given type, deduction succeeds in both directions
17491          (i.e., the types are identical after the transformations above)
17492          and if the type from the argument template is more cv-qualified
17493          than the type from the parameter template (as described above)
17494          that type is considered to be more specialized than the other. If
17495          neither type is more cv-qualified than the other then neither type
17496          is more specialized than the other."  */
17497
17498       if (deduce1 && deduce2
17499           && quals1 != quals2 && quals1 >= 0 && quals2 >= 0)
17500         {
17501           if ((quals1 & quals2) == quals2)
17502             lose2 = true;
17503           if ((quals1 & quals2) == quals1)
17504             lose1 = true;
17505         }
17506
17507       if (lose1 && lose2)
17508         /* We've failed to deduce something in either direction.
17509            These must be unordered.  */
17510         break;
17511
17512       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
17513           || TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
17514         /* We have already processed all of the arguments in our
17515            handing of the pack expansion type.  */
17516         len = 0;
17517
17518       args1 = TREE_CHAIN (args1);
17519       args2 = TREE_CHAIN (args2);
17520     }
17521
17522   /* "In most cases, all template parameters must have values in order for
17523      deduction to succeed, but for partial ordering purposes a template
17524      parameter may remain without a value provided it is not used in the
17525      types being used for partial ordering."
17526
17527      Thus, if we are missing any of the targs1 we need to substitute into
17528      origs1, then pat2 is not as specialized as pat1.  This can happen when
17529      there is a nondeduced context.  */
17530   if (!lose2 && check_undeduced_parms (targs1, origs1, args1))
17531     lose2 = true;
17532   if (!lose1 && check_undeduced_parms (targs2, origs2, args2))
17533     lose1 = true;
17534
17535   processing_template_decl--;
17536
17537   /* All things being equal, if the next argument is a pack expansion
17538      for one function but not for the other, prefer the
17539      non-variadic function.  FIXME this is bogus; see c++/41958.  */
17540   if (lose1 == lose2
17541       && args1 && TREE_VALUE (args1)
17542       && args2 && TREE_VALUE (args2))
17543     {
17544       lose1 = TREE_CODE (TREE_VALUE (args1)) == TYPE_PACK_EXPANSION;
17545       lose2 = TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION;
17546     }
17547
17548   if (lose1 == lose2)
17549     return 0;
17550   else if (!lose1)
17551     return 1;
17552   else
17553     return -1;
17554 }
17555
17556 /* Determine which of two partial specializations of MAIN_TMPL is more
17557    specialized.
17558
17559    PAT1 is a TREE_LIST whose TREE_TYPE is the _TYPE node corresponding
17560    to the first partial specialization.  The TREE_VALUE is the
17561    innermost set of template parameters for the partial
17562    specialization.  PAT2 is similar, but for the second template.
17563
17564    Return 1 if the first partial specialization is more specialized;
17565    -1 if the second is more specialized; 0 if neither is more
17566    specialized.
17567
17568    See [temp.class.order] for information about determining which of
17569    two templates is more specialized.  */
17570
17571 static int
17572 more_specialized_class (tree main_tmpl, tree pat1, tree pat2)
17573 {
17574   tree targs;
17575   tree tmpl1, tmpl2;
17576   int winner = 0;
17577   bool any_deductions = false;
17578
17579   tmpl1 = TREE_TYPE (pat1);
17580   tmpl2 = TREE_TYPE (pat2);
17581
17582   /* Just like what happens for functions, if we are ordering between
17583      different class template specializations, we may encounter dependent
17584      types in the arguments, and we need our dependency check functions
17585      to behave correctly.  */
17586   ++processing_template_decl;
17587   targs = get_class_bindings (main_tmpl, TREE_VALUE (pat1),
17588                               CLASSTYPE_TI_ARGS (tmpl1),
17589                               CLASSTYPE_TI_ARGS (tmpl2));
17590   if (targs)
17591     {
17592       --winner;
17593       any_deductions = true;
17594     }
17595
17596   targs = get_class_bindings (main_tmpl, TREE_VALUE (pat2),
17597                               CLASSTYPE_TI_ARGS (tmpl2),
17598                               CLASSTYPE_TI_ARGS (tmpl1));
17599   if (targs)
17600     {
17601       ++winner;
17602       any_deductions = true;
17603     }
17604   --processing_template_decl;
17605
17606   /* In the case of a tie where at least one of the class templates
17607      has a parameter pack at the end, the template with the most
17608      non-packed parameters wins.  */
17609   if (winner == 0
17610       && any_deductions
17611       && (template_args_variadic_p (TREE_PURPOSE (pat1))
17612           || template_args_variadic_p (TREE_PURPOSE (pat2))))
17613     {
17614       tree args1 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat1));
17615       tree args2 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat2));
17616       int len1 = TREE_VEC_LENGTH (args1);
17617       int len2 = TREE_VEC_LENGTH (args2);
17618
17619       /* We don't count the pack expansion at the end.  */
17620       if (template_args_variadic_p (TREE_PURPOSE (pat1)))
17621         --len1;
17622       if (template_args_variadic_p (TREE_PURPOSE (pat2)))
17623         --len2;
17624
17625       if (len1 > len2)
17626         return 1;
17627       else if (len1 < len2)
17628         return -1;
17629     }
17630
17631   return winner;
17632 }
17633
17634 /* Return the template arguments that will produce the function signature
17635    DECL from the function template FN, with the explicit template
17636    arguments EXPLICIT_ARGS.  If CHECK_RETTYPE is true, the return type must
17637    also match.  Return NULL_TREE if no satisfactory arguments could be
17638    found.  */
17639
17640 static tree
17641 get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
17642 {
17643   int ntparms = DECL_NTPARMS (fn);
17644   tree targs = make_tree_vec (ntparms);
17645   tree decl_type = TREE_TYPE (decl);
17646   tree decl_arg_types;
17647   tree *args;
17648   unsigned int nargs, ix;
17649   tree arg;
17650
17651   gcc_assert (decl != DECL_TEMPLATE_RESULT (fn));
17652
17653   /* Never do unification on the 'this' parameter.  */
17654   decl_arg_types = skip_artificial_parms_for (decl, 
17655                                               TYPE_ARG_TYPES (decl_type));
17656
17657   nargs = list_length (decl_arg_types);
17658   args = XALLOCAVEC (tree, nargs);
17659   for (arg = decl_arg_types, ix = 0;
17660        arg != NULL_TREE && arg != void_list_node;
17661        arg = TREE_CHAIN (arg), ++ix)
17662     args[ix] = TREE_VALUE (arg);
17663
17664   if (fn_type_unification (fn, explicit_args, targs,
17665                            args, ix,
17666                            (check_rettype || DECL_CONV_FN_P (fn)
17667                             ? TREE_TYPE (decl_type) : NULL_TREE),
17668                            DEDUCE_EXACT, LOOKUP_NORMAL, /*explain_p=*/false)
17669       == error_mark_node)
17670     return NULL_TREE;
17671
17672   return targs;
17673 }
17674
17675 /* Return the innermost template arguments that, when applied to a partial
17676    specialization of MAIN_TMPL whose innermost template parameters are
17677    TPARMS, and whose specialization arguments are SPEC_ARGS, yield the
17678    ARGS.
17679
17680    For example, suppose we have:
17681
17682      template <class T, class U> struct S {};
17683      template <class T> struct S<T*, int> {};
17684
17685    Then, suppose we want to get `S<double*, int>'.  The TPARMS will be
17686    {T}, the SPEC_ARGS will be {T*, int} and the ARGS will be {double*,
17687    int}.  The resulting vector will be {double}, indicating that `T'
17688    is bound to `double'.  */
17689
17690 static tree
17691 get_class_bindings (tree main_tmpl, tree tparms, tree spec_args, tree args)
17692 {
17693   int i, ntparms = TREE_VEC_LENGTH (tparms);
17694   tree deduced_args;
17695   tree innermost_deduced_args;
17696
17697   innermost_deduced_args = make_tree_vec (ntparms);
17698   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
17699     {
17700       deduced_args = copy_node (args);
17701       SET_TMPL_ARGS_LEVEL (deduced_args,
17702                            TMPL_ARGS_DEPTH (deduced_args),
17703                            innermost_deduced_args);
17704     }
17705   else
17706     deduced_args = innermost_deduced_args;
17707
17708   if (unify (tparms, deduced_args,
17709              INNERMOST_TEMPLATE_ARGS (spec_args),
17710              INNERMOST_TEMPLATE_ARGS (args),
17711              UNIFY_ALLOW_NONE, /*explain_p=*/false))
17712     return NULL_TREE;
17713
17714   for (i =  0; i < ntparms; ++i)
17715     if (! TREE_VEC_ELT (innermost_deduced_args, i))
17716       return NULL_TREE;
17717
17718   /* Verify that nondeduced template arguments agree with the type
17719      obtained from argument deduction.
17720
17721      For example:
17722
17723        struct A { typedef int X; };
17724        template <class T, class U> struct C {};
17725        template <class T> struct C<T, typename T::X> {};
17726
17727      Then with the instantiation `C<A, int>', we can deduce that
17728      `T' is `A' but unify () does not check whether `typename T::X'
17729      is `int'.  */
17730   spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
17731   spec_args = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (main_tmpl),
17732                                      spec_args, main_tmpl,
17733                                      tf_none, false, false);
17734   if (spec_args == error_mark_node
17735       /* We only need to check the innermost arguments; the other
17736          arguments will always agree.  */
17737       || !comp_template_args (INNERMOST_TEMPLATE_ARGS (spec_args),
17738                               INNERMOST_TEMPLATE_ARGS (args)))
17739     return NULL_TREE;
17740
17741   /* Now that we have bindings for all of the template arguments,
17742      ensure that the arguments deduced for the template template
17743      parameters have compatible template parameter lists.  See the use
17744      of template_template_parm_bindings_ok_p in fn_type_unification
17745      for more information.  */
17746   if (!template_template_parm_bindings_ok_p (tparms, deduced_args))
17747     return NULL_TREE;
17748
17749   return deduced_args;
17750 }
17751
17752 /* TEMPLATES is a TREE_LIST.  Each TREE_VALUE is a TEMPLATE_DECL.
17753    Return the TREE_LIST node with the most specialized template, if
17754    any.  If there is no most specialized template, the error_mark_node
17755    is returned.
17756
17757    Note that this function does not look at, or modify, the
17758    TREE_PURPOSE or TREE_TYPE of any of the nodes.  Since the node
17759    returned is one of the elements of INSTANTIATIONS, callers may
17760    store information in the TREE_PURPOSE or TREE_TYPE of the nodes,
17761    and retrieve it from the value returned.  */
17762
17763 tree
17764 most_specialized_instantiation (tree templates)
17765 {
17766   tree fn, champ;
17767
17768   ++processing_template_decl;
17769
17770   champ = templates;
17771   for (fn = TREE_CHAIN (templates); fn; fn = TREE_CHAIN (fn))
17772     {
17773       int fate = 0;
17774
17775       if (get_bindings (TREE_VALUE (champ),
17776                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
17777                         NULL_TREE, /*check_ret=*/true))
17778         fate--;
17779
17780       if (get_bindings (TREE_VALUE (fn),
17781                         DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
17782                         NULL_TREE, /*check_ret=*/true))
17783         fate++;
17784
17785       if (fate == -1)
17786         champ = fn;
17787       else if (!fate)
17788         {
17789           /* Equally specialized, move to next function.  If there
17790              is no next function, nothing's most specialized.  */
17791           fn = TREE_CHAIN (fn);
17792           champ = fn;
17793           if (!fn)
17794             break;
17795         }
17796     }
17797
17798   if (champ)
17799     /* Now verify that champ is better than everything earlier in the
17800        instantiation list.  */
17801     for (fn = templates; fn != champ; fn = TREE_CHAIN (fn))
17802       if (get_bindings (TREE_VALUE (champ),
17803                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
17804                         NULL_TREE, /*check_ret=*/true)
17805           || !get_bindings (TREE_VALUE (fn),
17806                             DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
17807                             NULL_TREE, /*check_ret=*/true))
17808         {
17809           champ = NULL_TREE;
17810           break;
17811         }
17812
17813   processing_template_decl--;
17814
17815   if (!champ)
17816     return error_mark_node;
17817
17818   return champ;
17819 }
17820
17821 /* If DECL is a specialization of some template, return the most
17822    general such template.  Otherwise, returns NULL_TREE.
17823
17824    For example, given:
17825
17826      template <class T> struct S { template <class U> void f(U); };
17827
17828    if TMPL is `template <class U> void S<int>::f(U)' this will return
17829    the full template.  This function will not trace past partial
17830    specializations, however.  For example, given in addition:
17831
17832      template <class T> struct S<T*> { template <class U> void f(U); };
17833
17834    if TMPL is `template <class U> void S<int*>::f(U)' this will return
17835    `template <class T> template <class U> S<T*>::f(U)'.  */
17836
17837 tree
17838 most_general_template (tree decl)
17839 {
17840   /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
17841      an immediate specialization.  */
17842   if (TREE_CODE (decl) == FUNCTION_DECL)
17843     {
17844       if (DECL_TEMPLATE_INFO (decl)) {
17845         decl = DECL_TI_TEMPLATE (decl);
17846
17847         /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
17848            template friend.  */
17849         if (TREE_CODE (decl) != TEMPLATE_DECL)
17850           return NULL_TREE;
17851       } else
17852         return NULL_TREE;
17853     }
17854
17855   /* Look for more and more general templates.  */
17856   while (DECL_TEMPLATE_INFO (decl))
17857     {
17858       /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
17859          (See cp-tree.h for details.)  */
17860       if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
17861         break;
17862
17863       if (CLASS_TYPE_P (TREE_TYPE (decl))
17864           && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
17865         break;
17866
17867       /* Stop if we run into an explicitly specialized class template.  */
17868       if (!DECL_NAMESPACE_SCOPE_P (decl)
17869           && DECL_CONTEXT (decl)
17870           && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
17871         break;
17872
17873       decl = DECL_TI_TEMPLATE (decl);
17874     }
17875
17876   return decl;
17877 }
17878
17879 /* Return the most specialized of the class template partial
17880    specializations of TMPL which can produce TYPE, a specialization of
17881    TMPL.  The value returned is actually a TREE_LIST; the TREE_TYPE is
17882    a _TYPE node corresponding to the partial specialization, while the
17883    TREE_PURPOSE is the set of template arguments that must be
17884    substituted into the TREE_TYPE in order to generate TYPE.
17885
17886    If the choice of partial specialization is ambiguous, a diagnostic
17887    is issued, and the error_mark_node is returned.  If there are no
17888    partial specializations of TMPL matching TYPE, then NULL_TREE is
17889    returned.  */
17890
17891 static tree
17892 most_specialized_class (tree type, tree tmpl, tsubst_flags_t complain)
17893 {
17894   tree list = NULL_TREE;
17895   tree t;
17896   tree champ;
17897   int fate;
17898   bool ambiguous_p;
17899   tree args;
17900   tree outer_args = NULL_TREE;
17901
17902   tmpl = most_general_template (tmpl);
17903   args = CLASSTYPE_TI_ARGS (type);
17904
17905   /* For determining which partial specialization to use, only the
17906      innermost args are interesting.  */
17907   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
17908     {
17909       outer_args = strip_innermost_template_args (args, 1);
17910       args = INNERMOST_TEMPLATE_ARGS (args);
17911     }
17912
17913   for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
17914     {
17915       tree partial_spec_args;
17916       tree spec_args;
17917       tree parms = TREE_VALUE (t);
17918
17919       partial_spec_args = CLASSTYPE_TI_ARGS (TREE_TYPE (t));
17920
17921       ++processing_template_decl;
17922
17923       if (outer_args)
17924         {
17925           int i;
17926
17927           /* Discard the outer levels of args, and then substitute in the
17928              template args from the enclosing class.  */
17929           partial_spec_args = INNERMOST_TEMPLATE_ARGS (partial_spec_args);
17930           partial_spec_args = tsubst_template_args
17931             (partial_spec_args, outer_args, tf_none, NULL_TREE);
17932
17933           /* PARMS already refers to just the innermost parms, but the
17934              template parms in partial_spec_args had their levels lowered
17935              by tsubst, so we need to do the same for the parm list.  We
17936              can't just tsubst the TREE_VEC itself, as tsubst wants to
17937              treat a TREE_VEC as an argument vector.  */
17938           parms = copy_node (parms);
17939           for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
17940             TREE_VEC_ELT (parms, i) =
17941               tsubst (TREE_VEC_ELT (parms, i), outer_args, tf_none, NULL_TREE);
17942
17943         }
17944
17945       partial_spec_args =
17946           coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
17947                                  add_to_template_args (outer_args,
17948                                                        partial_spec_args),
17949                                  tmpl, tf_none,
17950                                  /*require_all_args=*/true,
17951                                  /*use_default_args=*/true);
17952
17953       --processing_template_decl;
17954
17955       if (partial_spec_args == error_mark_node)
17956         return error_mark_node;
17957
17958       spec_args = get_class_bindings (tmpl, parms,
17959                                       partial_spec_args,
17960                                       args);
17961       if (spec_args)
17962         {
17963           if (outer_args)
17964             spec_args = add_to_template_args (outer_args, spec_args);
17965           list = tree_cons (spec_args, TREE_VALUE (t), list);
17966           TREE_TYPE (list) = TREE_TYPE (t);
17967         }
17968     }
17969
17970   if (! list)
17971     return NULL_TREE;
17972
17973   ambiguous_p = false;
17974   t = list;
17975   champ = t;
17976   t = TREE_CHAIN (t);
17977   for (; t; t = TREE_CHAIN (t))
17978     {
17979       fate = more_specialized_class (tmpl, champ, t);
17980       if (fate == 1)
17981         ;
17982       else
17983         {
17984           if (fate == 0)
17985             {
17986               t = TREE_CHAIN (t);
17987               if (! t)
17988                 {
17989                   ambiguous_p = true;
17990                   break;
17991                 }
17992             }
17993           champ = t;
17994         }
17995     }
17996
17997   if (!ambiguous_p)
17998     for (t = list; t && t != champ; t = TREE_CHAIN (t))
17999       {
18000         fate = more_specialized_class (tmpl, champ, t);
18001         if (fate != 1)
18002           {
18003             ambiguous_p = true;
18004             break;
18005           }
18006       }
18007
18008   if (ambiguous_p)
18009     {
18010       const char *str;
18011       char *spaces = NULL;
18012       if (!(complain & tf_error))
18013         return error_mark_node;
18014       error ("ambiguous class template instantiation for %q#T", type);
18015       str = ngettext ("candidate is:", "candidates are:", list_length (list));
18016       for (t = list; t; t = TREE_CHAIN (t))
18017         {
18018           error ("%s %+#T", spaces ? spaces : str, TREE_TYPE (t));
18019           spaces = spaces ? spaces : get_spaces (str);
18020         }
18021       free (spaces);
18022       return error_mark_node;
18023     }
18024
18025   return champ;
18026 }
18027
18028 /* Explicitly instantiate DECL.  */
18029
18030 void
18031 do_decl_instantiation (tree decl, tree storage)
18032 {
18033   tree result = NULL_TREE;
18034   int extern_p = 0;
18035
18036   if (!decl || decl == error_mark_node)
18037     /* An error occurred, for which grokdeclarator has already issued
18038        an appropriate message.  */
18039     return;
18040   else if (! DECL_LANG_SPECIFIC (decl))
18041     {
18042       error ("explicit instantiation of non-template %q#D", decl);
18043       return;
18044     }
18045   else if (TREE_CODE (decl) == VAR_DECL)
18046     {
18047       /* There is an asymmetry here in the way VAR_DECLs and
18048          FUNCTION_DECLs are handled by grokdeclarator.  In the case of
18049          the latter, the DECL we get back will be marked as a
18050          template instantiation, and the appropriate
18051          DECL_TEMPLATE_INFO will be set up.  This does not happen for
18052          VAR_DECLs so we do the lookup here.  Probably, grokdeclarator
18053          should handle VAR_DECLs as it currently handles
18054          FUNCTION_DECLs.  */
18055       if (!DECL_CLASS_SCOPE_P (decl))
18056         {
18057           error ("%qD is not a static data member of a class template", decl);
18058           return;
18059         }
18060       result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
18061       if (!result || TREE_CODE (result) != VAR_DECL)
18062         {
18063           error ("no matching template for %qD found", decl);
18064           return;
18065         }
18066       if (!same_type_p (TREE_TYPE (result), TREE_TYPE (decl)))
18067         {
18068           error ("type %qT for explicit instantiation %qD does not match "
18069                  "declared type %qT", TREE_TYPE (result), decl,
18070                  TREE_TYPE (decl));
18071           return;
18072         }
18073     }
18074   else if (TREE_CODE (decl) != FUNCTION_DECL)
18075     {
18076       error ("explicit instantiation of %q#D", decl);
18077       return;
18078     }
18079   else
18080     result = decl;
18081
18082   /* Check for various error cases.  Note that if the explicit
18083      instantiation is valid the RESULT will currently be marked as an
18084      *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
18085      until we get here.  */
18086
18087   if (DECL_TEMPLATE_SPECIALIZATION (result))
18088     {
18089       /* DR 259 [temp.spec].
18090
18091          Both an explicit instantiation and a declaration of an explicit
18092          specialization shall not appear in a program unless the explicit
18093          instantiation follows a declaration of the explicit specialization.
18094
18095          For a given set of template parameters, if an explicit
18096          instantiation of a template appears after a declaration of an
18097          explicit specialization for that template, the explicit
18098          instantiation has no effect.  */
18099       return;
18100     }
18101   else if (DECL_EXPLICIT_INSTANTIATION (result))
18102     {
18103       /* [temp.spec]
18104
18105          No program shall explicitly instantiate any template more
18106          than once.
18107
18108          We check DECL_NOT_REALLY_EXTERN so as not to complain when
18109          the first instantiation was `extern' and the second is not,
18110          and EXTERN_P for the opposite case.  */
18111       if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
18112         permerror (input_location, "duplicate explicit instantiation of %q#D", result);
18113       /* If an "extern" explicit instantiation follows an ordinary
18114          explicit instantiation, the template is instantiated.  */
18115       if (extern_p)
18116         return;
18117     }
18118   else if (!DECL_IMPLICIT_INSTANTIATION (result))
18119     {
18120       error ("no matching template for %qD found", result);
18121       return;
18122     }
18123   else if (!DECL_TEMPLATE_INFO (result))
18124     {
18125       permerror (input_location, "explicit instantiation of non-template %q#D", result);
18126       return;
18127     }
18128
18129   if (storage == NULL_TREE)
18130     ;
18131   else if (storage == ridpointers[(int) RID_EXTERN])
18132     {
18133       if (!in_system_header && (cxx_dialect == cxx98))
18134         pedwarn (input_location, OPT_Wpedantic, 
18135                  "ISO C++ 1998 forbids the use of %<extern%> on explicit "
18136                  "instantiations");
18137       extern_p = 1;
18138     }
18139   else
18140     error ("storage class %qD applied to template instantiation", storage);
18141
18142   check_explicit_instantiation_namespace (result);
18143   mark_decl_instantiated (result, extern_p);
18144   if (! extern_p)
18145     instantiate_decl (result, /*defer_ok=*/1,
18146                       /*expl_inst_class_mem_p=*/false);
18147 }
18148
18149 static void
18150 mark_class_instantiated (tree t, int extern_p)
18151 {
18152   SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
18153   SET_CLASSTYPE_INTERFACE_KNOWN (t);
18154   CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
18155   TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
18156   if (! extern_p)
18157     {
18158       CLASSTYPE_DEBUG_REQUESTED (t) = 1;
18159       rest_of_type_compilation (t, 1);
18160     }
18161 }
18162
18163 /* Called from do_type_instantiation through binding_table_foreach to
18164    do recursive instantiation for the type bound in ENTRY.  */
18165 static void
18166 bt_instantiate_type_proc (binding_entry entry, void *data)
18167 {
18168   tree storage = *(tree *) data;
18169
18170   if (MAYBE_CLASS_TYPE_P (entry->type)
18171       && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
18172     do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
18173 }
18174
18175 /* Called from do_type_instantiation to instantiate a member
18176    (a member function or a static member variable) of an
18177    explicitly instantiated class template.  */
18178 static void
18179 instantiate_class_member (tree decl, int extern_p)
18180 {
18181   mark_decl_instantiated (decl, extern_p);
18182   if (! extern_p)
18183     instantiate_decl (decl, /*defer_ok=*/1,
18184                       /*expl_inst_class_mem_p=*/true);
18185 }
18186
18187 /* Perform an explicit instantiation of template class T.  STORAGE, if
18188    non-null, is the RID for extern, inline or static.  COMPLAIN is
18189    nonzero if this is called from the parser, zero if called recursively,
18190    since the standard is unclear (as detailed below).  */
18191
18192 void
18193 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
18194 {
18195   int extern_p = 0;
18196   int nomem_p = 0;
18197   int static_p = 0;
18198   int previous_instantiation_extern_p = 0;
18199
18200   if (TREE_CODE (t) == TYPE_DECL)
18201     t = TREE_TYPE (t);
18202
18203   if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
18204     {
18205       tree tmpl =
18206         (TYPE_TEMPLATE_INFO (t)) ? TYPE_TI_TEMPLATE (t) : NULL;
18207       if (tmpl)
18208         error ("explicit instantiation of non-class template %qD", tmpl);
18209       else
18210         error ("explicit instantiation of non-template type %qT", t);
18211       return;
18212     }
18213
18214   complete_type (t);
18215
18216   if (!COMPLETE_TYPE_P (t))
18217     {
18218       if (complain & tf_error)
18219         error ("explicit instantiation of %q#T before definition of template",
18220                t);
18221       return;
18222     }
18223
18224   if (storage != NULL_TREE)
18225     {
18226       if (!in_system_header)
18227         {
18228           if (storage == ridpointers[(int) RID_EXTERN])
18229             {
18230               if (cxx_dialect == cxx98)
18231                 pedwarn (input_location, OPT_Wpedantic, 
18232                          "ISO C++ 1998 forbids the use of %<extern%> on "
18233                          "explicit instantiations");
18234             }
18235           else
18236             pedwarn (input_location, OPT_Wpedantic, 
18237                      "ISO C++ forbids the use of %qE"
18238                      " on explicit instantiations", storage);
18239         }
18240
18241       if (storage == ridpointers[(int) RID_INLINE])
18242         nomem_p = 1;
18243       else if (storage == ridpointers[(int) RID_EXTERN])
18244         extern_p = 1;
18245       else if (storage == ridpointers[(int) RID_STATIC])
18246         static_p = 1;
18247       else
18248         {
18249           error ("storage class %qD applied to template instantiation",
18250                  storage);
18251           extern_p = 0;
18252         }
18253     }
18254
18255   if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
18256     {
18257       /* DR 259 [temp.spec].
18258
18259          Both an explicit instantiation and a declaration of an explicit
18260          specialization shall not appear in a program unless the explicit
18261          instantiation follows a declaration of the explicit specialization.
18262
18263          For a given set of template parameters, if an explicit
18264          instantiation of a template appears after a declaration of an
18265          explicit specialization for that template, the explicit
18266          instantiation has no effect.  */
18267       return;
18268     }
18269   else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
18270     {
18271       /* [temp.spec]
18272
18273          No program shall explicitly instantiate any template more
18274          than once.
18275
18276          If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
18277          instantiation was `extern'.  If EXTERN_P then the second is.
18278          These cases are OK.  */
18279       previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
18280
18281       if (!previous_instantiation_extern_p && !extern_p
18282           && (complain & tf_error))
18283         permerror (input_location, "duplicate explicit instantiation of %q#T", t);
18284
18285       /* If we've already instantiated the template, just return now.  */
18286       if (!CLASSTYPE_INTERFACE_ONLY (t))
18287         return;
18288     }
18289
18290   check_explicit_instantiation_namespace (TYPE_NAME (t));
18291   mark_class_instantiated (t, extern_p);
18292
18293   if (nomem_p)
18294     return;
18295
18296   {
18297     tree tmp;
18298
18299     /* In contrast to implicit instantiation, where only the
18300        declarations, and not the definitions, of members are
18301        instantiated, we have here:
18302
18303          [temp.explicit]
18304
18305          The explicit instantiation of a class template specialization
18306          implies the instantiation of all of its members not
18307          previously explicitly specialized in the translation unit
18308          containing the explicit instantiation.
18309
18310        Of course, we can't instantiate member template classes, since
18311        we don't have any arguments for them.  Note that the standard
18312        is unclear on whether the instantiation of the members are
18313        *explicit* instantiations or not.  However, the most natural
18314        interpretation is that it should be an explicit instantiation.  */
18315
18316     if (! static_p)
18317       for (tmp = TYPE_METHODS (t); tmp; tmp = DECL_CHAIN (tmp))
18318         if (TREE_CODE (tmp) == FUNCTION_DECL
18319             && DECL_TEMPLATE_INSTANTIATION (tmp))
18320           instantiate_class_member (tmp, extern_p);
18321
18322     for (tmp = TYPE_FIELDS (t); tmp; tmp = DECL_CHAIN (tmp))
18323       if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
18324         instantiate_class_member (tmp, extern_p);
18325
18326     if (CLASSTYPE_NESTED_UTDS (t))
18327       binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
18328                              bt_instantiate_type_proc, &storage);
18329   }
18330 }
18331
18332 /* Given a function DECL, which is a specialization of TMPL, modify
18333    DECL to be a re-instantiation of TMPL with the same template
18334    arguments.  TMPL should be the template into which tsubst'ing
18335    should occur for DECL, not the most general template.
18336
18337    One reason for doing this is a scenario like this:
18338
18339      template <class T>
18340      void f(const T&, int i);
18341
18342      void g() { f(3, 7); }
18343
18344      template <class T>
18345      void f(const T& t, const int i) { }
18346
18347    Note that when the template is first instantiated, with
18348    instantiate_template, the resulting DECL will have no name for the
18349    first parameter, and the wrong type for the second.  So, when we go
18350    to instantiate the DECL, we regenerate it.  */
18351
18352 static void
18353 regenerate_decl_from_template (tree decl, tree tmpl)
18354 {
18355   /* The arguments used to instantiate DECL, from the most general
18356      template.  */
18357   tree args;
18358   tree code_pattern;
18359
18360   args = DECL_TI_ARGS (decl);
18361   code_pattern = DECL_TEMPLATE_RESULT (tmpl);
18362
18363   /* Make sure that we can see identifiers, and compute access
18364      correctly.  */
18365   push_access_scope (decl);
18366
18367   if (TREE_CODE (decl) == FUNCTION_DECL)
18368     {
18369       tree decl_parm;
18370       tree pattern_parm;
18371       tree specs;
18372       int args_depth;
18373       int parms_depth;
18374
18375       args_depth = TMPL_ARGS_DEPTH (args);
18376       parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
18377       if (args_depth > parms_depth)
18378         args = get_innermost_template_args (args, parms_depth);
18379
18380       specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
18381                                               args, tf_error, NULL_TREE,
18382                                               /*defer_ok*/false);
18383       if (specs && specs != error_mark_node)
18384         TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
18385                                                     specs);
18386
18387       /* Merge parameter declarations.  */
18388       decl_parm = skip_artificial_parms_for (decl,
18389                                              DECL_ARGUMENTS (decl));
18390       pattern_parm
18391         = skip_artificial_parms_for (code_pattern,
18392                                      DECL_ARGUMENTS (code_pattern));
18393       while (decl_parm && !FUNCTION_PARAMETER_PACK_P (pattern_parm))
18394         {
18395           tree parm_type;
18396           tree attributes;
18397           
18398           if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
18399             DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
18400           parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
18401                               NULL_TREE);
18402           parm_type = type_decays_to (parm_type);
18403           if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
18404             TREE_TYPE (decl_parm) = parm_type;
18405           attributes = DECL_ATTRIBUTES (pattern_parm);
18406           if (DECL_ATTRIBUTES (decl_parm) != attributes)
18407             {
18408               DECL_ATTRIBUTES (decl_parm) = attributes;
18409               cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
18410             }
18411           decl_parm = DECL_CHAIN (decl_parm);
18412           pattern_parm = DECL_CHAIN (pattern_parm);
18413         }
18414       /* Merge any parameters that match with the function parameter
18415          pack.  */
18416       if (pattern_parm && FUNCTION_PARAMETER_PACK_P (pattern_parm))
18417         {
18418           int i, len;
18419           tree expanded_types;
18420           /* Expand the TYPE_PACK_EXPANSION that provides the types for
18421              the parameters in this function parameter pack.  */
18422           expanded_types = tsubst_pack_expansion (TREE_TYPE (pattern_parm), 
18423                                                  args, tf_error, NULL_TREE);
18424           len = TREE_VEC_LENGTH (expanded_types);
18425           for (i = 0; i < len; i++)
18426             {
18427               tree parm_type;
18428               tree attributes;
18429           
18430               if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
18431                 /* Rename the parameter to include the index.  */
18432                 DECL_NAME (decl_parm) = 
18433                   make_ith_pack_parameter_name (DECL_NAME (pattern_parm), i);
18434               parm_type = TREE_VEC_ELT (expanded_types, i);
18435               parm_type = type_decays_to (parm_type);
18436               if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
18437                 TREE_TYPE (decl_parm) = parm_type;
18438               attributes = DECL_ATTRIBUTES (pattern_parm);
18439               if (DECL_ATTRIBUTES (decl_parm) != attributes)
18440                 {
18441                   DECL_ATTRIBUTES (decl_parm) = attributes;
18442                   cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
18443                 }
18444               decl_parm = DECL_CHAIN (decl_parm);
18445             }
18446         }
18447       /* Merge additional specifiers from the CODE_PATTERN.  */
18448       if (DECL_DECLARED_INLINE_P (code_pattern)
18449           && !DECL_DECLARED_INLINE_P (decl))
18450         DECL_DECLARED_INLINE_P (decl) = 1;
18451     }
18452   else if (TREE_CODE (decl) == VAR_DECL)
18453     {
18454       DECL_INITIAL (decl) =
18455         tsubst_expr (DECL_INITIAL (code_pattern), args,
18456                      tf_error, DECL_TI_TEMPLATE (decl),
18457                      /*integral_constant_expression_p=*/false);
18458       if (VAR_HAD_UNKNOWN_BOUND (decl))
18459         TREE_TYPE (decl) = tsubst (TREE_TYPE (code_pattern), args,
18460                                    tf_error, DECL_TI_TEMPLATE (decl));
18461     }
18462   else
18463     gcc_unreachable ();
18464
18465   pop_access_scope (decl);
18466 }
18467
18468 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
18469    substituted to get DECL.  */
18470
18471 tree
18472 template_for_substitution (tree decl)
18473 {
18474   tree tmpl = DECL_TI_TEMPLATE (decl);
18475
18476   /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
18477      for the instantiation.  This is not always the most general
18478      template.  Consider, for example:
18479
18480         template <class T>
18481         struct S { template <class U> void f();
18482                    template <> void f<int>(); };
18483
18484      and an instantiation of S<double>::f<int>.  We want TD to be the
18485      specialization S<T>::f<int>, not the more general S<T>::f<U>.  */
18486   while (/* An instantiation cannot have a definition, so we need a
18487             more general template.  */
18488          DECL_TEMPLATE_INSTANTIATION (tmpl)
18489            /* We must also deal with friend templates.  Given:
18490
18491                 template <class T> struct S {
18492                   template <class U> friend void f() {};
18493                 };
18494
18495               S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
18496               so far as the language is concerned, but that's still
18497               where we get the pattern for the instantiation from.  On
18498               other hand, if the definition comes outside the class, say:
18499
18500                 template <class T> struct S {
18501                   template <class U> friend void f();
18502                 };
18503                 template <class U> friend void f() {}
18504
18505               we don't need to look any further.  That's what the check for
18506               DECL_INITIAL is for.  */
18507           || (TREE_CODE (decl) == FUNCTION_DECL
18508               && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
18509               && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
18510     {
18511       /* The present template, TD, should not be a definition.  If it
18512          were a definition, we should be using it!  Note that we
18513          cannot restructure the loop to just keep going until we find
18514          a template with a definition, since that might go too far if
18515          a specialization was declared, but not defined.  */
18516       gcc_assert (TREE_CODE (decl) != VAR_DECL
18517                   || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl)));
18518
18519       /* Fetch the more general template.  */
18520       tmpl = DECL_TI_TEMPLATE (tmpl);
18521     }
18522
18523   return tmpl;
18524 }
18525
18526 /* Returns true if we need to instantiate this template instance even if we
18527    know we aren't going to emit it..  */
18528
18529 bool
18530 always_instantiate_p (tree decl)
18531 {
18532   /* We always instantiate inline functions so that we can inline them.  An
18533      explicit instantiation declaration prohibits implicit instantiation of
18534      non-inline functions.  With high levels of optimization, we would
18535      normally inline non-inline functions -- but we're not allowed to do
18536      that for "extern template" functions.  Therefore, we check
18537      DECL_DECLARED_INLINE_P, rather than possibly_inlined_p.  */
18538   return ((TREE_CODE (decl) == FUNCTION_DECL
18539            && (DECL_DECLARED_INLINE_P (decl)
18540                || type_uses_auto (TREE_TYPE (TREE_TYPE (decl)))))
18541           /* And we need to instantiate static data members so that
18542              their initializers are available in integral constant
18543              expressions.  */
18544           || (TREE_CODE (decl) == VAR_DECL
18545               && decl_maybe_constant_var_p (decl)));
18546 }
18547
18548 /* If FN has a noexcept-specifier that hasn't been instantiated yet,
18549    instantiate it now, modifying TREE_TYPE (fn).  */
18550
18551 void
18552 maybe_instantiate_noexcept (tree fn)
18553 {
18554   tree fntype, spec, noex, clone;
18555
18556   if (DECL_CLONED_FUNCTION_P (fn))
18557     fn = DECL_CLONED_FUNCTION (fn);
18558   fntype = TREE_TYPE (fn);
18559   spec = TYPE_RAISES_EXCEPTIONS (fntype);
18560
18561   if (!DEFERRED_NOEXCEPT_SPEC_P (spec))
18562     return;
18563
18564   noex = TREE_PURPOSE (spec);
18565
18566   if (TREE_CODE (noex) == DEFERRED_NOEXCEPT)
18567     {
18568       if (push_tinst_level (fn))
18569         {
18570           push_access_scope (fn);
18571           push_deferring_access_checks (dk_no_deferred);
18572           input_location = DECL_SOURCE_LOCATION (fn);
18573           noex = tsubst_copy_and_build (DEFERRED_NOEXCEPT_PATTERN (noex),
18574                                         DEFERRED_NOEXCEPT_ARGS (noex),
18575                                         tf_warning_or_error, fn,
18576                                         /*function_p=*/false,
18577                                         /*integral_constant_expression_p=*/true);
18578           pop_deferring_access_checks ();
18579           pop_access_scope (fn);
18580           pop_tinst_level ();
18581           spec = build_noexcept_spec (noex, tf_warning_or_error);
18582           if (spec == error_mark_node)
18583             spec = noexcept_false_spec;
18584         }
18585       else
18586         spec = noexcept_false_spec;
18587     }
18588   else
18589     {
18590       /* This is an implicitly declared function, so NOEX is a list of
18591          other functions to evaluate and merge.  */
18592       tree elt;
18593       spec = noexcept_true_spec;
18594       for (elt = noex; elt; elt = OVL_NEXT (elt))
18595         {
18596           tree fn = OVL_CURRENT (elt);
18597           tree subspec;
18598           maybe_instantiate_noexcept (fn);
18599           subspec = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn));
18600           spec = merge_exception_specifiers (spec, subspec, NULL_TREE);
18601         }
18602     }
18603
18604   TREE_TYPE (fn) = build_exception_variant (fntype, spec);
18605
18606   FOR_EACH_CLONE (clone, fn)
18607     {
18608       if (TREE_TYPE (clone) == fntype)
18609         TREE_TYPE (clone) = TREE_TYPE (fn);
18610       else
18611         TREE_TYPE (clone) = build_exception_variant (TREE_TYPE (clone), spec);
18612     }
18613 }
18614
18615 /* Produce the definition of D, a _DECL generated from a template.  If
18616    DEFER_OK is nonzero, then we don't have to actually do the
18617    instantiation now; we just have to do it sometime.  Normally it is
18618    an error if this is an explicit instantiation but D is undefined.
18619    EXPL_INST_CLASS_MEM_P is true iff D is a member of an
18620    explicitly instantiated class template.  */
18621
18622 tree
18623 instantiate_decl (tree d, int defer_ok,
18624                   bool expl_inst_class_mem_p)
18625 {
18626   tree tmpl = DECL_TI_TEMPLATE (d);
18627   tree gen_args;
18628   tree args;
18629   tree td;
18630   tree code_pattern;
18631   tree spec;
18632   tree gen_tmpl;
18633   bool pattern_defined;
18634   location_t saved_loc = input_location;
18635   bool external_p;
18636   tree fn_context;
18637   bool nested;
18638
18639   /* This function should only be used to instantiate templates for
18640      functions and static member variables.  */
18641   gcc_assert (TREE_CODE (d) == FUNCTION_DECL
18642               || TREE_CODE (d) == VAR_DECL);
18643
18644   /* Variables are never deferred; if instantiation is required, they
18645      are instantiated right away.  That allows for better code in the
18646      case that an expression refers to the value of the variable --
18647      if the variable has a constant value the referring expression can
18648      take advantage of that fact.  */
18649   if (TREE_CODE (d) == VAR_DECL
18650       || DECL_DECLARED_CONSTEXPR_P (d))
18651     defer_ok = 0;
18652
18653   /* Don't instantiate cloned functions.  Instead, instantiate the
18654      functions they cloned.  */
18655   if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
18656     d = DECL_CLONED_FUNCTION (d);
18657
18658   if (DECL_TEMPLATE_INSTANTIATED (d)
18659       || (TREE_CODE (d) == FUNCTION_DECL
18660           && DECL_DEFAULTED_FN (d) && DECL_INITIAL (d))
18661       || DECL_TEMPLATE_SPECIALIZATION (d))
18662     /* D has already been instantiated or explicitly specialized, so
18663        there's nothing for us to do here.
18664
18665        It might seem reasonable to check whether or not D is an explicit
18666        instantiation, and, if so, stop here.  But when an explicit
18667        instantiation is deferred until the end of the compilation,
18668        DECL_EXPLICIT_INSTANTIATION is set, even though we still need to do
18669        the instantiation.  */
18670     return d;
18671
18672   /* Check to see whether we know that this template will be
18673      instantiated in some other file, as with "extern template"
18674      extension.  */
18675   external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
18676
18677   /* In general, we do not instantiate such templates.  */
18678   if (external_p && !always_instantiate_p (d))
18679     return d;
18680
18681   gen_tmpl = most_general_template (tmpl);
18682   gen_args = DECL_TI_ARGS (d);
18683
18684   if (tmpl != gen_tmpl)
18685     /* We should already have the extra args.  */
18686     gcc_assert (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (gen_tmpl))
18687                 == TMPL_ARGS_DEPTH (gen_args));
18688   /* And what's in the hash table should match D.  */
18689   gcc_assert ((spec = retrieve_specialization (gen_tmpl, gen_args, 0)) == d
18690               || spec == NULL_TREE);
18691
18692   /* This needs to happen before any tsubsting.  */
18693   if (! push_tinst_level (d))
18694     return d;
18695
18696   timevar_push (TV_TEMPLATE_INST);
18697
18698   /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
18699      for the instantiation.  */
18700   td = template_for_substitution (d);
18701   code_pattern = DECL_TEMPLATE_RESULT (td);
18702
18703   /* We should never be trying to instantiate a member of a class
18704      template or partial specialization.  */
18705   gcc_assert (d != code_pattern);
18706
18707   if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
18708       || DECL_TEMPLATE_SPECIALIZATION (td))
18709     /* In the case of a friend template whose definition is provided
18710        outside the class, we may have too many arguments.  Drop the
18711        ones we don't need.  The same is true for specializations.  */
18712     args = get_innermost_template_args
18713       (gen_args, TMPL_PARMS_DEPTH  (DECL_TEMPLATE_PARMS (td)));
18714   else
18715     args = gen_args;
18716
18717   if (TREE_CODE (d) == FUNCTION_DECL)
18718     pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE
18719                        || DECL_DEFAULTED_OUTSIDE_CLASS_P (code_pattern));
18720   else
18721     pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
18722
18723   /* We may be in the middle of deferred access check.  Disable it now.  */
18724   push_deferring_access_checks (dk_no_deferred);
18725
18726   /* Unless an explicit instantiation directive has already determined
18727      the linkage of D, remember that a definition is available for
18728      this entity.  */
18729   if (pattern_defined
18730       && !DECL_INTERFACE_KNOWN (d)
18731       && !DECL_NOT_REALLY_EXTERN (d))
18732     mark_definable (d);
18733
18734   DECL_SOURCE_LOCATION (td) = DECL_SOURCE_LOCATION (code_pattern);
18735   DECL_SOURCE_LOCATION (d) = DECL_SOURCE_LOCATION (code_pattern);
18736   input_location = DECL_SOURCE_LOCATION (d);
18737
18738   /* If D is a member of an explicitly instantiated class template,
18739      and no definition is available, treat it like an implicit
18740      instantiation.  */
18741   if (!pattern_defined && expl_inst_class_mem_p
18742       && DECL_EXPLICIT_INSTANTIATION (d))
18743     {
18744       /* Leave linkage flags alone on instantiations with anonymous
18745          visibility.  */
18746       if (TREE_PUBLIC (d))
18747         {
18748           DECL_NOT_REALLY_EXTERN (d) = 0;
18749           DECL_INTERFACE_KNOWN (d) = 0;
18750         }
18751       SET_DECL_IMPLICIT_INSTANTIATION (d);
18752     }
18753
18754   if (TREE_CODE (d) == FUNCTION_DECL)
18755     maybe_instantiate_noexcept (d);
18756
18757   /* Defer all other templates, unless we have been explicitly
18758      forbidden from doing so.  */
18759   if (/* If there is no definition, we cannot instantiate the
18760          template.  */
18761       ! pattern_defined
18762       /* If it's OK to postpone instantiation, do so.  */
18763       || defer_ok
18764       /* If this is a static data member that will be defined
18765          elsewhere, we don't want to instantiate the entire data
18766          member, but we do want to instantiate the initializer so that
18767          we can substitute that elsewhere.  */
18768       || (external_p && TREE_CODE (d) == VAR_DECL))
18769     {
18770       /* The definition of the static data member is now required so
18771          we must substitute the initializer.  */
18772       if (TREE_CODE (d) == VAR_DECL
18773           && !DECL_INITIAL (d)
18774           && DECL_INITIAL (code_pattern))
18775         {
18776           tree ns;
18777           tree init;
18778           bool const_init = false;
18779
18780           ns = decl_namespace_context (d);
18781           push_nested_namespace (ns);
18782           push_nested_class (DECL_CONTEXT (d));
18783           init = tsubst_expr (DECL_INITIAL (code_pattern),
18784                               args,
18785                               tf_warning_or_error, NULL_TREE,
18786                               /*integral_constant_expression_p=*/false);
18787           /* Make sure the initializer is still constant, in case of
18788              circular dependency (template/instantiate6.C). */
18789           const_init
18790             = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (code_pattern);
18791           cp_finish_decl (d, init, /*init_const_expr_p=*/const_init,
18792                           /*asmspec_tree=*/NULL_TREE,
18793                           LOOKUP_ONLYCONVERTING);
18794           pop_nested_class ();
18795           pop_nested_namespace (ns);
18796         }
18797
18798       /* We restore the source position here because it's used by
18799          add_pending_template.  */
18800       input_location = saved_loc;
18801
18802       if (at_eof && !pattern_defined
18803           && DECL_EXPLICIT_INSTANTIATION (d)
18804           && DECL_NOT_REALLY_EXTERN (d))
18805         /* [temp.explicit]
18806
18807            The definition of a non-exported function template, a
18808            non-exported member function template, or a non-exported
18809            member function or static data member of a class template
18810            shall be present in every translation unit in which it is
18811            explicitly instantiated.  */
18812         permerror (input_location,  "explicit instantiation of %qD "
18813                    "but no definition available", d);
18814
18815       /* If we're in unevaluated context, we just wanted to get the
18816          constant value; this isn't an odr use, so don't queue
18817          a full instantiation.  */
18818       if (cp_unevaluated_operand != 0)
18819         goto out;
18820       /* ??? Historically, we have instantiated inline functions, even
18821          when marked as "extern template".  */
18822       if (!(external_p && TREE_CODE (d) == VAR_DECL))
18823         add_pending_template (d);
18824       goto out;
18825     }
18826   /* Tell the repository that D is available in this translation unit
18827      -- and see if it is supposed to be instantiated here.  */
18828   if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
18829     {
18830       /* In a PCH file, despite the fact that the repository hasn't
18831          requested instantiation in the PCH it is still possible that
18832          an instantiation will be required in a file that includes the
18833          PCH.  */
18834       if (pch_file)
18835         add_pending_template (d);
18836       /* Instantiate inline functions so that the inliner can do its
18837          job, even though we'll not be emitting a copy of this
18838          function.  */
18839       if (!(TREE_CODE (d) == FUNCTION_DECL && possibly_inlined_p (d)))
18840         goto out;
18841     }
18842
18843   fn_context = decl_function_context (d);
18844   nested = (current_function_decl != NULL_TREE);
18845   if (!fn_context)
18846     push_to_top_level ();
18847   else if (nested)
18848     push_function_context ();
18849
18850   /* Mark D as instantiated so that recursive calls to
18851      instantiate_decl do not try to instantiate it again.  */
18852   DECL_TEMPLATE_INSTANTIATED (d) = 1;
18853
18854   /* Regenerate the declaration in case the template has been modified
18855      by a subsequent redeclaration.  */
18856   regenerate_decl_from_template (d, td);
18857
18858   /* We already set the file and line above.  Reset them now in case
18859      they changed as a result of calling regenerate_decl_from_template.  */
18860   input_location = DECL_SOURCE_LOCATION (d);
18861
18862   if (TREE_CODE (d) == VAR_DECL)
18863     {
18864       tree init;
18865       bool const_init = false;
18866
18867       /* Clear out DECL_RTL; whatever was there before may not be right
18868          since we've reset the type of the declaration.  */
18869       SET_DECL_RTL (d, NULL);
18870       DECL_IN_AGGR_P (d) = 0;
18871
18872       /* The initializer is placed in DECL_INITIAL by
18873          regenerate_decl_from_template so we don't need to
18874          push/pop_access_scope again here.  Pull it out so that
18875          cp_finish_decl can process it.  */
18876       init = DECL_INITIAL (d);
18877       DECL_INITIAL (d) = NULL_TREE;
18878       DECL_INITIALIZED_P (d) = 0;
18879
18880       /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
18881          initializer.  That function will defer actual emission until
18882          we have a chance to determine linkage.  */
18883       DECL_EXTERNAL (d) = 0;
18884
18885       /* Enter the scope of D so that access-checking works correctly.  */
18886       push_nested_class (DECL_CONTEXT (d));
18887       const_init = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (code_pattern);
18888       cp_finish_decl (d, init, const_init, NULL_TREE, 0);
18889       pop_nested_class ();
18890     }
18891   else if (TREE_CODE (d) == FUNCTION_DECL && DECL_DEFAULTED_FN (code_pattern))
18892     synthesize_method (d);
18893   else if (TREE_CODE (d) == FUNCTION_DECL)
18894     {
18895       struct pointer_map_t *saved_local_specializations;
18896       tree subst_decl;
18897       tree tmpl_parm;
18898       tree spec_parm;
18899
18900       /* Save away the current list, in case we are instantiating one
18901          template from within the body of another.  */
18902       saved_local_specializations = local_specializations;
18903
18904       /* Set up the list of local specializations.  */
18905       local_specializations = pointer_map_create ();
18906
18907       /* Set up context.  */
18908       start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
18909
18910       /* Some typedefs referenced from within the template code need to be
18911          access checked at template instantiation time, i.e now. These
18912          types were added to the template at parsing time. Let's get those
18913          and perform the access checks then.  */
18914       perform_typedefs_access_check (DECL_TEMPLATE_RESULT (gen_tmpl),
18915                                      gen_args);
18916
18917       /* Create substitution entries for the parameters.  */
18918       subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
18919       tmpl_parm = DECL_ARGUMENTS (subst_decl);
18920       spec_parm = DECL_ARGUMENTS (d);
18921       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
18922         {
18923           register_local_specialization (spec_parm, tmpl_parm);
18924           spec_parm = skip_artificial_parms_for (d, spec_parm);
18925           tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
18926         }
18927       for (; tmpl_parm; tmpl_parm = DECL_CHAIN (tmpl_parm))
18928         {
18929           if (!FUNCTION_PARAMETER_PACK_P (tmpl_parm))
18930             {
18931               register_local_specialization (spec_parm, tmpl_parm);
18932               spec_parm = DECL_CHAIN (spec_parm);
18933             }
18934           else
18935             {
18936               /* Register the (value) argument pack as a specialization of
18937                  TMPL_PARM, then move on.  */
18938               tree argpack = extract_fnparm_pack (tmpl_parm, &spec_parm);
18939               register_local_specialization (argpack, tmpl_parm);
18940             }
18941         }
18942       gcc_assert (!spec_parm);
18943
18944       /* Substitute into the body of the function.  */
18945       tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
18946                    tf_warning_or_error, tmpl,
18947                    /*integral_constant_expression_p=*/false);
18948
18949       /* Set the current input_location to the end of the function
18950          so that finish_function knows where we are.  */
18951       input_location = DECL_STRUCT_FUNCTION (code_pattern)->function_end_locus;
18952
18953       /* We don't need the local specializations any more.  */
18954       pointer_map_destroy (local_specializations);
18955       local_specializations = saved_local_specializations;
18956
18957       /* Finish the function.  */
18958       d = finish_function (0);
18959       expand_or_defer_fn (d);
18960     }
18961
18962   /* We're not deferring instantiation any more.  */
18963   TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
18964
18965   if (!fn_context)
18966     pop_from_top_level ();
18967   else if (nested)
18968     pop_function_context ();
18969
18970 out:
18971   input_location = saved_loc;
18972   pop_deferring_access_checks ();
18973   pop_tinst_level ();
18974
18975   timevar_pop (TV_TEMPLATE_INST);
18976
18977   return d;
18978 }
18979
18980 /* Run through the list of templates that we wish we could
18981    instantiate, and instantiate any we can.  RETRIES is the
18982    number of times we retry pending template instantiation.  */
18983
18984 void
18985 instantiate_pending_templates (int retries)
18986 {
18987   int reconsider;
18988   location_t saved_loc = input_location;
18989
18990   /* Instantiating templates may trigger vtable generation.  This in turn
18991      may require further template instantiations.  We place a limit here
18992      to avoid infinite loop.  */
18993   if (pending_templates && retries >= max_tinst_depth)
18994     {
18995       tree decl = pending_templates->tinst->decl;
18996
18997       error ("template instantiation depth exceeds maximum of %d"
18998              " instantiating %q+D, possibly from virtual table generation"
18999              " (use -ftemplate-depth= to increase the maximum)",
19000              max_tinst_depth, decl);
19001       if (TREE_CODE (decl) == FUNCTION_DECL)
19002         /* Pretend that we defined it.  */
19003         DECL_INITIAL (decl) = error_mark_node;
19004       return;
19005     }
19006
19007   do
19008     {
19009       struct pending_template **t = &pending_templates;
19010       struct pending_template *last = NULL;
19011       reconsider = 0;
19012       while (*t)
19013         {
19014           tree instantiation = reopen_tinst_level ((*t)->tinst);
19015           bool complete = false;
19016
19017           if (TYPE_P (instantiation))
19018             {
19019               tree fn;
19020
19021               if (!COMPLETE_TYPE_P (instantiation))
19022                 {
19023                   instantiate_class_template (instantiation);
19024                   if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
19025                     for (fn = TYPE_METHODS (instantiation);
19026                          fn;
19027                          fn = TREE_CHAIN (fn))
19028                       if (! DECL_ARTIFICIAL (fn))
19029                         instantiate_decl (fn,
19030                                           /*defer_ok=*/0,
19031                                           /*expl_inst_class_mem_p=*/false);
19032                   if (COMPLETE_TYPE_P (instantiation))
19033                     reconsider = 1;
19034                 }
19035
19036               complete = COMPLETE_TYPE_P (instantiation);
19037             }
19038           else
19039             {
19040               if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
19041                   && !DECL_TEMPLATE_INSTANTIATED (instantiation))
19042                 {
19043                   instantiation
19044                     = instantiate_decl (instantiation,
19045                                         /*defer_ok=*/0,
19046                                         /*expl_inst_class_mem_p=*/false);
19047                   if (DECL_TEMPLATE_INSTANTIATED (instantiation))
19048                     reconsider = 1;
19049                 }
19050
19051               complete = (DECL_TEMPLATE_SPECIALIZATION (instantiation)
19052                           || DECL_TEMPLATE_INSTANTIATED (instantiation));
19053             }
19054
19055           if (complete)
19056             /* If INSTANTIATION has been instantiated, then we don't
19057                need to consider it again in the future.  */
19058             *t = (*t)->next;
19059           else
19060             {
19061               last = *t;
19062               t = &(*t)->next;
19063             }
19064           tinst_depth = 0;
19065           current_tinst_level = NULL;
19066         }
19067       last_pending_template = last;
19068     }
19069   while (reconsider);
19070
19071   input_location = saved_loc;
19072 }
19073
19074 /* Substitute ARGVEC into T, which is a list of initializers for
19075    either base class or a non-static data member.  The TREE_PURPOSEs
19076    are DECLs, and the TREE_VALUEs are the initializer values.  Used by
19077    instantiate_decl.  */
19078
19079 static tree
19080 tsubst_initializer_list (tree t, tree argvec)
19081 {
19082   tree inits = NULL_TREE;
19083
19084   for (; t; t = TREE_CHAIN (t))
19085     {
19086       tree decl;
19087       tree init;
19088       tree expanded_bases = NULL_TREE;
19089       tree expanded_arguments = NULL_TREE;
19090       int i, len = 1;
19091
19092       if (TREE_CODE (TREE_PURPOSE (t)) == TYPE_PACK_EXPANSION)
19093         {
19094           tree expr;
19095           tree arg;
19096
19097           /* Expand the base class expansion type into separate base
19098              classes.  */
19099           expanded_bases = tsubst_pack_expansion (TREE_PURPOSE (t), argvec,
19100                                                  tf_warning_or_error,
19101                                                  NULL_TREE);
19102           if (expanded_bases == error_mark_node)
19103             continue;
19104           
19105           /* We'll be building separate TREE_LISTs of arguments for
19106              each base.  */
19107           len = TREE_VEC_LENGTH (expanded_bases);
19108           expanded_arguments = make_tree_vec (len);
19109           for (i = 0; i < len; i++)
19110             TREE_VEC_ELT (expanded_arguments, i) = NULL_TREE;
19111
19112           /* Build a dummy EXPR_PACK_EXPANSION that will be used to
19113              expand each argument in the TREE_VALUE of t.  */
19114           expr = make_node (EXPR_PACK_EXPANSION);
19115           PACK_EXPANSION_LOCAL_P (expr) = true;
19116           PACK_EXPANSION_PARAMETER_PACKS (expr) =
19117             PACK_EXPANSION_PARAMETER_PACKS (TREE_PURPOSE (t));
19118
19119           if (TREE_VALUE (t) == void_type_node)
19120             /* VOID_TYPE_NODE is used to indicate
19121                value-initialization.  */
19122             {
19123               for (i = 0; i < len; i++)
19124                 TREE_VEC_ELT (expanded_arguments, i) = void_type_node;
19125             }
19126           else
19127             {
19128               /* Substitute parameter packs into each argument in the
19129                  TREE_LIST.  */
19130               in_base_initializer = 1;
19131               for (arg = TREE_VALUE (t); arg; arg = TREE_CHAIN (arg))
19132                 {
19133                   tree expanded_exprs;
19134
19135                   /* Expand the argument.  */
19136                   SET_PACK_EXPANSION_PATTERN (expr, TREE_VALUE (arg));
19137                   expanded_exprs 
19138                     = tsubst_pack_expansion (expr, argvec,
19139                                              tf_warning_or_error,
19140                                              NULL_TREE);
19141                   if (expanded_exprs == error_mark_node)
19142                     continue;
19143
19144                   /* Prepend each of the expanded expressions to the
19145                      corresponding TREE_LIST in EXPANDED_ARGUMENTS.  */
19146                   for (i = 0; i < len; i++)
19147                     {
19148                       TREE_VEC_ELT (expanded_arguments, i) = 
19149                         tree_cons (NULL_TREE, 
19150                                    TREE_VEC_ELT (expanded_exprs, i),
19151                                    TREE_VEC_ELT (expanded_arguments, i));
19152                     }
19153                 }
19154               in_base_initializer = 0;
19155
19156               /* Reverse all of the TREE_LISTs in EXPANDED_ARGUMENTS,
19157                  since we built them backwards.  */
19158               for (i = 0; i < len; i++)
19159                 {
19160                   TREE_VEC_ELT (expanded_arguments, i) = 
19161                     nreverse (TREE_VEC_ELT (expanded_arguments, i));
19162                 }
19163             }
19164         }
19165
19166       for (i = 0; i < len; ++i)
19167         {
19168           if (expanded_bases)
19169             {
19170               decl = TREE_VEC_ELT (expanded_bases, i);
19171               decl = expand_member_init (decl);
19172               init = TREE_VEC_ELT (expanded_arguments, i);
19173             }
19174           else
19175             {
19176               tree tmp;
19177               decl = tsubst_copy (TREE_PURPOSE (t), argvec, 
19178                                   tf_warning_or_error, NULL_TREE);
19179
19180               decl = expand_member_init (decl);
19181               if (decl && !DECL_P (decl))
19182                 in_base_initializer = 1;
19183
19184               init = TREE_VALUE (t);
19185               tmp = init;
19186               if (init != void_type_node)
19187                 init = tsubst_expr (init, argvec,
19188                                     tf_warning_or_error, NULL_TREE,
19189                                     /*integral_constant_expression_p=*/false);
19190               if (init == NULL_TREE && tmp != NULL_TREE)
19191                 /* If we had an initializer but it instantiated to nothing,
19192                    value-initialize the object.  This will only occur when
19193                    the initializer was a pack expansion where the parameter
19194                    packs used in that expansion were of length zero.  */
19195                 init = void_type_node;
19196               in_base_initializer = 0;
19197             }
19198
19199           if (decl)
19200             {
19201               init = build_tree_list (decl, init);
19202               TREE_CHAIN (init) = inits;
19203               inits = init;
19204             }
19205         }
19206     }
19207   return inits;
19208 }
19209
19210 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL.  */
19211
19212 static void
19213 set_current_access_from_decl (tree decl)
19214 {
19215   if (TREE_PRIVATE (decl))
19216     current_access_specifier = access_private_node;
19217   else if (TREE_PROTECTED (decl))
19218     current_access_specifier = access_protected_node;
19219   else
19220     current_access_specifier = access_public_node;
19221 }
19222
19223 /* Instantiate an enumerated type.  TAG is the template type, NEWTAG
19224    is the instantiation (which should have been created with
19225    start_enum) and ARGS are the template arguments to use.  */
19226
19227 static void
19228 tsubst_enum (tree tag, tree newtag, tree args)
19229 {
19230   tree e;
19231
19232   if (SCOPED_ENUM_P (newtag))
19233     begin_scope (sk_scoped_enum, newtag);
19234
19235   for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
19236     {
19237       tree value;
19238       tree decl;
19239
19240       decl = TREE_VALUE (e);
19241       /* Note that in a template enum, the TREE_VALUE is the
19242          CONST_DECL, not the corresponding INTEGER_CST.  */
19243       value = tsubst_expr (DECL_INITIAL (decl),
19244                            args, tf_warning_or_error, NULL_TREE,
19245                            /*integral_constant_expression_p=*/true);
19246
19247       /* Give this enumeration constant the correct access.  */
19248       set_current_access_from_decl (decl);
19249
19250       /* Actually build the enumerator itself.  */
19251       build_enumerator
19252         (DECL_NAME (decl), value, newtag, DECL_SOURCE_LOCATION (decl));
19253     }
19254
19255   if (SCOPED_ENUM_P (newtag))
19256     finish_scope ();
19257
19258   finish_enum_value_list (newtag);
19259   finish_enum (newtag);
19260
19261   DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
19262     = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
19263 }
19264
19265 /* DECL is a FUNCTION_DECL that is a template specialization.  Return
19266    its type -- but without substituting the innermost set of template
19267    arguments.  So, innermost set of template parameters will appear in
19268    the type.  */
19269
19270 tree
19271 get_mostly_instantiated_function_type (tree decl)
19272 {
19273   tree fn_type;
19274   tree tmpl;
19275   tree targs;
19276   tree tparms;
19277   int parm_depth;
19278
19279   tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
19280   targs = DECL_TI_ARGS (decl);
19281   tparms = DECL_TEMPLATE_PARMS (tmpl);
19282   parm_depth = TMPL_PARMS_DEPTH (tparms);
19283
19284   /* There should be as many levels of arguments as there are levels
19285      of parameters.  */
19286   gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
19287
19288   fn_type = TREE_TYPE (tmpl);
19289
19290   if (parm_depth == 1)
19291     /* No substitution is necessary.  */
19292     ;
19293   else
19294     {
19295       int i;
19296       tree partial_args;
19297
19298       /* Replace the innermost level of the TARGS with NULL_TREEs to
19299          let tsubst know not to substitute for those parameters.  */
19300       partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
19301       for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
19302         SET_TMPL_ARGS_LEVEL (partial_args, i,
19303                              TMPL_ARGS_LEVEL (targs, i));
19304       SET_TMPL_ARGS_LEVEL (partial_args,
19305                            TMPL_ARGS_DEPTH (targs),
19306                            make_tree_vec (DECL_NTPARMS (tmpl)));
19307
19308       /* Make sure that we can see identifiers, and compute access
19309          correctly.  */
19310       push_access_scope (decl);
19311
19312       ++processing_template_decl;
19313       /* Now, do the (partial) substitution to figure out the
19314          appropriate function type.  */
19315       fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
19316       --processing_template_decl;
19317
19318       /* Substitute into the template parameters to obtain the real
19319          innermost set of parameters.  This step is important if the
19320          innermost set of template parameters contains value
19321          parameters whose types depend on outer template parameters.  */
19322       TREE_VEC_LENGTH (partial_args)--;
19323       tparms = tsubst_template_parms (tparms, partial_args, tf_error);
19324
19325       pop_access_scope (decl);
19326     }
19327
19328   return fn_type;
19329 }
19330
19331 /* Return truthvalue if we're processing a template different from
19332    the last one involved in diagnostics.  */
19333 int
19334 problematic_instantiation_changed (void)
19335 {
19336   return current_tinst_level != last_error_tinst_level;
19337 }
19338
19339 /* Remember current template involved in diagnostics.  */
19340 void
19341 record_last_problematic_instantiation (void)
19342 {
19343   last_error_tinst_level = current_tinst_level;
19344 }
19345
19346 struct tinst_level *
19347 current_instantiation (void)
19348 {
19349   return current_tinst_level;
19350 }
19351
19352 /* [temp.param] Check that template non-type parm TYPE is of an allowable
19353    type. Return zero for ok, nonzero for disallowed. Issue error and
19354    warning messages under control of COMPLAIN.  */
19355
19356 static int
19357 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
19358 {
19359   if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
19360     return 0;
19361   else if (POINTER_TYPE_P (type))
19362     return 0;
19363   else if (TYPE_PTRMEM_P (type))
19364     return 0;
19365   else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
19366     return 0;
19367   else if (TREE_CODE (type) == TYPENAME_TYPE)
19368     return 0;
19369   else if (TREE_CODE (type) == DECLTYPE_TYPE)
19370     return 0;
19371   else if (TREE_CODE (type) == NULLPTR_TYPE)
19372     return 0;
19373
19374   if (complain & tf_error)
19375     {
19376       if (type == error_mark_node)
19377         inform (input_location, "invalid template non-type parameter");
19378       else
19379         error ("%q#T is not a valid type for a template non-type parameter",
19380                type);
19381     }
19382   return 1;
19383 }
19384
19385 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
19386    Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
19387
19388 static bool
19389 dependent_type_p_r (tree type)
19390 {
19391   tree scope;
19392
19393   /* [temp.dep.type]
19394
19395      A type is dependent if it is:
19396
19397      -- a template parameter. Template template parameters are types
19398         for us (since TYPE_P holds true for them) so we handle
19399         them here.  */
19400   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
19401       || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
19402     return true;
19403   /* -- a qualified-id with a nested-name-specifier which contains a
19404         class-name that names a dependent type or whose unqualified-id
19405         names a dependent type.  */
19406   if (TREE_CODE (type) == TYPENAME_TYPE)
19407     return true;
19408   /* -- a cv-qualified type where the cv-unqualified type is
19409         dependent.  */
19410   type = TYPE_MAIN_VARIANT (type);
19411   /* -- a compound type constructed from any dependent type.  */
19412   if (TYPE_PTRMEM_P (type))
19413     return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
19414             || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
19415                                            (type)));
19416   else if (TREE_CODE (type) == POINTER_TYPE
19417            || TREE_CODE (type) == REFERENCE_TYPE)
19418     return dependent_type_p (TREE_TYPE (type));
19419   else if (TREE_CODE (type) == FUNCTION_TYPE
19420            || TREE_CODE (type) == METHOD_TYPE)
19421     {
19422       tree arg_type;
19423
19424       if (dependent_type_p (TREE_TYPE (type)))
19425         return true;
19426       for (arg_type = TYPE_ARG_TYPES (type);
19427            arg_type;
19428            arg_type = TREE_CHAIN (arg_type))
19429         if (dependent_type_p (TREE_VALUE (arg_type)))
19430           return true;
19431       return false;
19432     }
19433   /* -- an array type constructed from any dependent type or whose
19434         size is specified by a constant expression that is
19435         value-dependent.
19436
19437         We checked for type- and value-dependence of the bounds in
19438         compute_array_index_type, so TYPE_DEPENDENT_P is already set.  */
19439   if (TREE_CODE (type) == ARRAY_TYPE)
19440     {
19441       if (TYPE_DOMAIN (type)
19442           && dependent_type_p (TYPE_DOMAIN (type)))
19443         return true;
19444       return dependent_type_p (TREE_TYPE (type));
19445     }
19446
19447   /* -- a template-id in which either the template name is a template
19448      parameter ...  */
19449   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
19450     return true;
19451   /* ... or any of the template arguments is a dependent type or
19452         an expression that is type-dependent or value-dependent.  */
19453   else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
19454            && (any_dependent_template_arguments_p
19455                (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
19456     return true;
19457
19458   /* All TYPEOF_TYPEs, DECLTYPE_TYPEs, and UNDERLYING_TYPEs are
19459      dependent; if the argument of the `typeof' expression is not
19460      type-dependent, then it should already been have resolved.  */
19461   if (TREE_CODE (type) == TYPEOF_TYPE
19462       || TREE_CODE (type) == DECLTYPE_TYPE
19463       || TREE_CODE (type) == UNDERLYING_TYPE)
19464     return true;
19465
19466   /* A template argument pack is dependent if any of its packed
19467      arguments are.  */
19468   if (TREE_CODE (type) == TYPE_ARGUMENT_PACK)
19469     {
19470       tree args = ARGUMENT_PACK_ARGS (type);
19471       int i, len = TREE_VEC_LENGTH (args);
19472       for (i = 0; i < len; ++i)
19473         if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
19474           return true;
19475     }
19476
19477   /* All TYPE_PACK_EXPANSIONs are dependent, because parameter packs must
19478      be template parameters.  */
19479   if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
19480     return true;
19481
19482   /* The standard does not specifically mention types that are local
19483      to template functions or local classes, but they should be
19484      considered dependent too.  For example:
19485
19486        template <int I> void f() {
19487          enum E { a = I };
19488          S<sizeof (E)> s;
19489        }
19490
19491      The size of `E' cannot be known until the value of `I' has been
19492      determined.  Therefore, `E' must be considered dependent.  */
19493   scope = TYPE_CONTEXT (type);
19494   if (scope && TYPE_P (scope))
19495     return dependent_type_p (scope);
19496   /* Don't use type_dependent_expression_p here, as it can lead
19497      to infinite recursion trying to determine whether a lambda
19498      nested in a lambda is dependent (c++/47687).  */
19499   else if (scope && TREE_CODE (scope) == FUNCTION_DECL
19500            && DECL_LANG_SPECIFIC (scope)
19501            && DECL_TEMPLATE_INFO (scope)
19502            && (any_dependent_template_arguments_p
19503                (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (scope)))))
19504     return true;
19505
19506   /* Other types are non-dependent.  */
19507   return false;
19508 }
19509
19510 /* Returns TRUE if TYPE is dependent, in the sense of
19511    [temp.dep.type].  Note that a NULL type is considered dependent.  */
19512
19513 bool
19514 dependent_type_p (tree type)
19515 {
19516   /* If there are no template parameters in scope, then there can't be
19517      any dependent types.  */
19518   if (!processing_template_decl)
19519     {
19520       /* If we are not processing a template, then nobody should be
19521          providing us with a dependent type.  */
19522       gcc_assert (type);
19523       gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM || is_auto (type));
19524       return false;
19525     }
19526
19527   /* If the type is NULL, we have not computed a type for the entity
19528      in question; in that case, the type is dependent.  */
19529   if (!type)
19530     return true;
19531
19532   /* Erroneous types can be considered non-dependent.  */
19533   if (type == error_mark_node)
19534     return false;
19535
19536   /* If we have not already computed the appropriate value for TYPE,
19537      do so now.  */
19538   if (!TYPE_DEPENDENT_P_VALID (type))
19539     {
19540       TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
19541       TYPE_DEPENDENT_P_VALID (type) = 1;
19542     }
19543
19544   return TYPE_DEPENDENT_P (type);
19545 }
19546
19547 /* Returns TRUE if SCOPE is a dependent scope, in which we can't do any
19548    lookup.  In other words, a dependent type that is not the current
19549    instantiation.  */
19550
19551 bool
19552 dependent_scope_p (tree scope)
19553 {
19554   return (scope && TYPE_P (scope) && dependent_type_p (scope)
19555           && !currently_open_class (scope));
19556 }
19557
19558 /* T is a SCOPE_REF; return whether we need to consider it
19559     instantiation-dependent so that we can check access at instantiation
19560     time even though we know which member it resolves to.  */
19561
19562 static bool
19563 instantiation_dependent_scope_ref_p (tree t)
19564 {
19565   if (DECL_P (TREE_OPERAND (t, 1))
19566       && CLASS_TYPE_P (TREE_OPERAND (t, 0))
19567       && accessible_in_template_p (TREE_OPERAND (t, 0),
19568                                    TREE_OPERAND (t, 1)))
19569     return false;
19570   else
19571     return true;
19572 }
19573
19574 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
19575    [temp.dep.constexpr].  EXPRESSION is already known to be a constant
19576    expression.  */
19577
19578 /* Note that this predicate is not appropriate for general expressions;
19579    only constant expressions (that satisfy potential_constant_expression)
19580    can be tested for value dependence.  */
19581
19582 bool
19583 value_dependent_expression_p (tree expression)
19584 {
19585   if (!processing_template_decl)
19586     return false;
19587
19588   /* A name declared with a dependent type.  */
19589   if (DECL_P (expression) && type_dependent_expression_p (expression))
19590     return true;
19591
19592   switch (TREE_CODE (expression))
19593     {
19594     case IDENTIFIER_NODE:
19595       /* A name that has not been looked up -- must be dependent.  */
19596       return true;
19597
19598     case TEMPLATE_PARM_INDEX:
19599       /* A non-type template parm.  */
19600       return true;
19601
19602     case CONST_DECL:
19603       /* A non-type template parm.  */
19604       if (DECL_TEMPLATE_PARM_P (expression))
19605         return true;
19606       return value_dependent_expression_p (DECL_INITIAL (expression));
19607
19608     case VAR_DECL:
19609        /* A constant with literal type and is initialized
19610           with an expression that is value-dependent.
19611
19612           Note that a non-dependent parenthesized initializer will have
19613           already been replaced with its constant value, so if we see
19614           a TREE_LIST it must be dependent.  */
19615       if (DECL_INITIAL (expression)
19616           && decl_constant_var_p (expression)
19617           && (TREE_CODE (DECL_INITIAL (expression)) == TREE_LIST
19618               || value_dependent_expression_p (DECL_INITIAL (expression))))
19619         return true;
19620       return false;
19621
19622     case DYNAMIC_CAST_EXPR:
19623     case STATIC_CAST_EXPR:
19624     case CONST_CAST_EXPR:
19625     case REINTERPRET_CAST_EXPR:
19626     case CAST_EXPR:
19627       /* These expressions are value-dependent if the type to which
19628          the cast occurs is dependent or the expression being casted
19629          is value-dependent.  */
19630       {
19631         tree type = TREE_TYPE (expression);
19632
19633         if (dependent_type_p (type))
19634           return true;
19635
19636         /* A functional cast has a list of operands.  */
19637         expression = TREE_OPERAND (expression, 0);
19638         if (!expression)
19639           {
19640             /* If there are no operands, it must be an expression such
19641                as "int()". This should not happen for aggregate types
19642                because it would form non-constant expressions.  */
19643             gcc_assert (cxx_dialect >= cxx0x
19644                         || INTEGRAL_OR_ENUMERATION_TYPE_P (type));
19645
19646             return false;
19647           }
19648
19649         if (TREE_CODE (expression) == TREE_LIST)
19650           return any_value_dependent_elements_p (expression);
19651
19652         return value_dependent_expression_p (expression);
19653       }
19654
19655     case SIZEOF_EXPR:
19656       if (SIZEOF_EXPR_TYPE_P (expression))
19657         return dependent_type_p (TREE_TYPE (TREE_OPERAND (expression, 0)));
19658       /* FALLTHRU */
19659     case ALIGNOF_EXPR:
19660     case TYPEID_EXPR:
19661       /* A `sizeof' expression is value-dependent if the operand is
19662          type-dependent or is a pack expansion.  */
19663       expression = TREE_OPERAND (expression, 0);
19664       if (PACK_EXPANSION_P (expression))
19665         return true;
19666       else if (TYPE_P (expression))
19667         return dependent_type_p (expression);
19668       return instantiation_dependent_expression_p (expression);
19669
19670     case AT_ENCODE_EXPR:
19671       /* An 'encode' expression is value-dependent if the operand is
19672          type-dependent.  */
19673       expression = TREE_OPERAND (expression, 0);
19674       return dependent_type_p (expression);
19675
19676     case NOEXCEPT_EXPR:
19677       expression = TREE_OPERAND (expression, 0);
19678       return instantiation_dependent_expression_p (expression);
19679
19680     case SCOPE_REF:
19681       /* All instantiation-dependent expressions should also be considered
19682          value-dependent.  */
19683       return instantiation_dependent_scope_ref_p (expression);
19684
19685     case COMPONENT_REF:
19686       return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
19687               || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
19688
19689     case NONTYPE_ARGUMENT_PACK:
19690       /* A NONTYPE_ARGUMENT_PACK is value-dependent if any packed argument
19691          is value-dependent.  */
19692       {
19693         tree values = ARGUMENT_PACK_ARGS (expression);
19694         int i, len = TREE_VEC_LENGTH (values);
19695         
19696         for (i = 0; i < len; ++i)
19697           if (value_dependent_expression_p (TREE_VEC_ELT (values, i)))
19698             return true;
19699         
19700         return false;
19701       }
19702
19703     case TRAIT_EXPR:
19704       {
19705         tree type2 = TRAIT_EXPR_TYPE2 (expression);
19706         return (dependent_type_p (TRAIT_EXPR_TYPE1 (expression))
19707                 || (type2 ? dependent_type_p (type2) : false));
19708       }
19709
19710     case MODOP_EXPR:
19711       return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
19712               || (value_dependent_expression_p (TREE_OPERAND (expression, 2))));
19713
19714     case ARRAY_REF:
19715       return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
19716               || (value_dependent_expression_p (TREE_OPERAND (expression, 1))));
19717
19718     case ADDR_EXPR:
19719       {
19720         tree op = TREE_OPERAND (expression, 0);
19721         return (value_dependent_expression_p (op)
19722                 || has_value_dependent_address (op));
19723       }
19724
19725     case CALL_EXPR:
19726       {
19727         tree fn = get_callee_fndecl (expression);
19728         int i, nargs;
19729         if (!fn && value_dependent_expression_p (CALL_EXPR_FN (expression)))
19730           return true;
19731         nargs = call_expr_nargs (expression);
19732         for (i = 0; i < nargs; ++i)
19733           {
19734             tree op = CALL_EXPR_ARG (expression, i);
19735             /* In a call to a constexpr member function, look through the
19736                implicit ADDR_EXPR on the object argument so that it doesn't
19737                cause the call to be considered value-dependent.  We also
19738                look through it in potential_constant_expression.  */
19739             if (i == 0 && fn && DECL_DECLARED_CONSTEXPR_P (fn)
19740                 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
19741                 && TREE_CODE (op) == ADDR_EXPR)
19742               op = TREE_OPERAND (op, 0);
19743             if (value_dependent_expression_p (op))
19744               return true;
19745           }
19746         return false;
19747       }
19748
19749     case TEMPLATE_ID_EXPR:
19750       /* If a TEMPLATE_ID_EXPR involves a dependent name, it will be
19751          type-dependent.  */
19752       return type_dependent_expression_p (expression);
19753
19754     case CONSTRUCTOR:
19755       {
19756         unsigned ix;
19757         tree val;
19758         FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), ix, val)
19759           if (value_dependent_expression_p (val))
19760             return true;
19761         return false;
19762       }
19763
19764     case STMT_EXPR:
19765       /* Treat a GNU statement expression as dependent to avoid crashing
19766          under fold_non_dependent_expr; it can't be constant.  */
19767       return true;
19768
19769     default:
19770       /* A constant expression is value-dependent if any subexpression is
19771          value-dependent.  */
19772       switch (TREE_CODE_CLASS (TREE_CODE (expression)))
19773         {
19774         case tcc_reference:
19775         case tcc_unary:
19776         case tcc_comparison:
19777         case tcc_binary:
19778         case tcc_expression:
19779         case tcc_vl_exp:
19780           {
19781             int i, len = cp_tree_operand_length (expression);
19782
19783             for (i = 0; i < len; i++)
19784               {
19785                 tree t = TREE_OPERAND (expression, i);
19786
19787                 /* In some cases, some of the operands may be missing.l
19788                    (For example, in the case of PREDECREMENT_EXPR, the
19789                    amount to increment by may be missing.)  That doesn't
19790                    make the expression dependent.  */
19791                 if (t && value_dependent_expression_p (t))
19792                   return true;
19793               }
19794           }
19795           break;
19796         default:
19797           break;
19798         }
19799       break;
19800     }
19801
19802   /* The expression is not value-dependent.  */
19803   return false;
19804 }
19805
19806 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
19807    [temp.dep.expr].  Note that an expression with no type is
19808    considered dependent.  Other parts of the compiler arrange for an
19809    expression with type-dependent subexpressions to have no type, so
19810    this function doesn't have to be fully recursive.  */
19811
19812 bool
19813 type_dependent_expression_p (tree expression)
19814 {
19815   if (!processing_template_decl)
19816     return false;
19817
19818   if (expression == error_mark_node)
19819     return false;
19820
19821   /* An unresolved name is always dependent.  */
19822   if (TREE_CODE (expression) == IDENTIFIER_NODE
19823       || TREE_CODE (expression) == USING_DECL)
19824     return true;
19825
19826   /* Some expression forms are never type-dependent.  */
19827   if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
19828       || TREE_CODE (expression) == SIZEOF_EXPR
19829       || TREE_CODE (expression) == ALIGNOF_EXPR
19830       || TREE_CODE (expression) == AT_ENCODE_EXPR
19831       || TREE_CODE (expression) == NOEXCEPT_EXPR
19832       || TREE_CODE (expression) == TRAIT_EXPR
19833       || TREE_CODE (expression) == TYPEID_EXPR
19834       || TREE_CODE (expression) == DELETE_EXPR
19835       || TREE_CODE (expression) == VEC_DELETE_EXPR
19836       || TREE_CODE (expression) == THROW_EXPR)
19837     return false;
19838
19839   /* The types of these expressions depends only on the type to which
19840      the cast occurs.  */
19841   if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
19842       || TREE_CODE (expression) == STATIC_CAST_EXPR
19843       || TREE_CODE (expression) == CONST_CAST_EXPR
19844       || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
19845       || TREE_CODE (expression) == IMPLICIT_CONV_EXPR
19846       || TREE_CODE (expression) == CAST_EXPR)
19847     return dependent_type_p (TREE_TYPE (expression));
19848
19849   /* The types of these expressions depends only on the type created
19850      by the expression.  */
19851   if (TREE_CODE (expression) == NEW_EXPR
19852       || TREE_CODE (expression) == VEC_NEW_EXPR)
19853     {
19854       /* For NEW_EXPR tree nodes created inside a template, either
19855          the object type itself or a TREE_LIST may appear as the
19856          operand 1.  */
19857       tree type = TREE_OPERAND (expression, 1);
19858       if (TREE_CODE (type) == TREE_LIST)
19859         /* This is an array type.  We need to check array dimensions
19860            as well.  */
19861         return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
19862                || value_dependent_expression_p
19863                     (TREE_OPERAND (TREE_VALUE (type), 1));
19864       else
19865         return dependent_type_p (type);
19866     }
19867
19868   if (TREE_CODE (expression) == SCOPE_REF)
19869     {
19870       tree scope = TREE_OPERAND (expression, 0);
19871       tree name = TREE_OPERAND (expression, 1);
19872
19873       /* 14.6.2.2 [temp.dep.expr]: An id-expression is type-dependent if it
19874          contains an identifier associated by name lookup with one or more
19875          declarations declared with a dependent type, or...a
19876          nested-name-specifier or qualified-id that names a member of an
19877          unknown specialization.  */
19878       return (type_dependent_expression_p (name)
19879               || dependent_scope_p (scope));
19880     }
19881
19882   if (TREE_CODE (expression) == FUNCTION_DECL
19883       && DECL_LANG_SPECIFIC (expression)
19884       && DECL_TEMPLATE_INFO (expression)
19885       && (any_dependent_template_arguments_p
19886           (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
19887     return true;
19888
19889   if (TREE_CODE (expression) == TEMPLATE_DECL
19890       && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
19891     return false;
19892
19893   if (TREE_CODE (expression) == STMT_EXPR)
19894     expression = stmt_expr_value_expr (expression);
19895
19896   if (BRACE_ENCLOSED_INITIALIZER_P (expression))
19897     {
19898       tree elt;
19899       unsigned i;
19900
19901       FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), i, elt)
19902         {
19903           if (type_dependent_expression_p (elt))
19904             return true;
19905         }
19906       return false;
19907     }
19908
19909   /* A static data member of the current instantiation with incomplete
19910      array type is type-dependent, as the definition and specializations
19911      can have different bounds.  */
19912   if (TREE_CODE (expression) == VAR_DECL
19913       && DECL_CLASS_SCOPE_P (expression)
19914       && dependent_type_p (DECL_CONTEXT (expression))
19915       && VAR_HAD_UNKNOWN_BOUND (expression))
19916     return true;
19917
19918   /* An array of unknown bound depending on a variadic parameter, eg:
19919
19920      template<typename... Args>
19921        void foo (Args... args)
19922        {
19923          int arr[] = { args... };
19924        }
19925
19926      template<int... vals>
19927        void bar ()
19928        {
19929          int arr[] = { vals... };
19930        }
19931
19932      If the array has no length and has an initializer, it must be that
19933      we couldn't determine its length in cp_complete_array_type because
19934      it is dependent.  */
19935   if (TREE_CODE (expression) == VAR_DECL
19936       && TREE_CODE (TREE_TYPE (expression)) == ARRAY_TYPE
19937       && !TYPE_DOMAIN (TREE_TYPE (expression))
19938       && DECL_INITIAL (expression))
19939    return true;
19940
19941   if (TREE_TYPE (expression) == unknown_type_node)
19942     {
19943       if (TREE_CODE (expression) == ADDR_EXPR)
19944         return type_dependent_expression_p (TREE_OPERAND (expression, 0));
19945       if (TREE_CODE (expression) == COMPONENT_REF
19946           || TREE_CODE (expression) == OFFSET_REF)
19947         {
19948           if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
19949             return true;
19950           expression = TREE_OPERAND (expression, 1);
19951           if (TREE_CODE (expression) == IDENTIFIER_NODE)
19952             return false;
19953         }
19954       /* SCOPE_REF with non-null TREE_TYPE is always non-dependent.  */
19955       if (TREE_CODE (expression) == SCOPE_REF)
19956         return false;
19957
19958       if (BASELINK_P (expression))
19959         expression = BASELINK_FUNCTIONS (expression);
19960
19961       if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
19962         {
19963           if (any_dependent_template_arguments_p
19964               (TREE_OPERAND (expression, 1)))
19965             return true;
19966           expression = TREE_OPERAND (expression, 0);
19967         }
19968       gcc_assert (TREE_CODE (expression) == OVERLOAD
19969                   || TREE_CODE (expression) == FUNCTION_DECL);
19970
19971       while (expression)
19972         {
19973           if (type_dependent_expression_p (OVL_CURRENT (expression)))
19974             return true;
19975           expression = OVL_NEXT (expression);
19976         }
19977       return false;
19978     }
19979
19980   gcc_assert (TREE_CODE (expression) != TYPE_DECL);
19981
19982   return (dependent_type_p (TREE_TYPE (expression)));
19983 }
19984
19985 /* walk_tree callback function for instantiation_dependent_expression_p,
19986    below.  Returns non-zero if a dependent subexpression is found.  */
19987
19988 static tree
19989 instantiation_dependent_r (tree *tp, int *walk_subtrees,
19990                            void * /*data*/)
19991 {
19992   if (TYPE_P (*tp))
19993     {
19994       /* We don't have to worry about decltype currently because decltype
19995          of an instantiation-dependent expr is a dependent type.  This
19996          might change depending on the resolution of DR 1172.  */
19997       *walk_subtrees = false;
19998       return NULL_TREE;
19999     }
20000   enum tree_code code = TREE_CODE (*tp);
20001   switch (code)
20002     {
20003       /* Don't treat an argument list as dependent just because it has no
20004          TREE_TYPE.  */
20005     case TREE_LIST:
20006     case TREE_VEC:
20007       return NULL_TREE;
20008
20009     case TEMPLATE_PARM_INDEX:
20010       return *tp;
20011
20012       /* Handle expressions with type operands.  */
20013     case SIZEOF_EXPR:
20014     case ALIGNOF_EXPR:
20015     case TYPEID_EXPR:
20016     case AT_ENCODE_EXPR:
20017       {
20018         tree op = TREE_OPERAND (*tp, 0);
20019         if (code == SIZEOF_EXPR && SIZEOF_EXPR_TYPE_P (*tp))
20020           op = TREE_TYPE (op);
20021         if (TYPE_P (op))
20022           {
20023             if (dependent_type_p (op))
20024               return *tp;
20025             else
20026               {
20027                 *walk_subtrees = false;
20028                 return NULL_TREE;
20029               }
20030           }
20031         break;
20032       }
20033
20034     case TRAIT_EXPR:
20035       if (dependent_type_p (TRAIT_EXPR_TYPE1 (*tp))
20036           || (TRAIT_EXPR_TYPE2 (*tp)
20037               && dependent_type_p (TRAIT_EXPR_TYPE2 (*tp))))
20038         return *tp;
20039       *walk_subtrees = false;
20040       return NULL_TREE;
20041
20042     case COMPONENT_REF:
20043       if (TREE_CODE (TREE_OPERAND (*tp, 1)) == IDENTIFIER_NODE)
20044         /* In a template, finish_class_member_access_expr creates a
20045            COMPONENT_REF with an IDENTIFIER_NODE for op1 even if it isn't
20046            type-dependent, so that we can check access control at
20047            instantiation time (PR 42277).  See also Core issue 1273.  */
20048         return *tp;
20049       break;
20050
20051     case SCOPE_REF:
20052       if (instantiation_dependent_scope_ref_p (*tp))
20053         return *tp;
20054       else
20055         break;
20056
20057       /* Treat statement-expressions as dependent.  */
20058     case BIND_EXPR:
20059       return *tp;
20060
20061     default:
20062       break;
20063     }
20064
20065   if (type_dependent_expression_p (*tp))
20066     return *tp;
20067   else
20068     return NULL_TREE;
20069 }
20070
20071 /* Returns TRUE if the EXPRESSION is instantiation-dependent, in the
20072    sense defined by the ABI:
20073
20074    "An expression is instantiation-dependent if it is type-dependent
20075    or value-dependent, or it has a subexpression that is type-dependent
20076    or value-dependent."  */
20077
20078 bool
20079 instantiation_dependent_expression_p (tree expression)
20080 {
20081   tree result;
20082
20083   if (!processing_template_decl)
20084     return false;
20085
20086   if (expression == error_mark_node)
20087     return false;
20088
20089   result = cp_walk_tree_without_duplicates (&expression,
20090                                             instantiation_dependent_r, NULL);
20091   return result != NULL_TREE;
20092 }
20093
20094 /* Like type_dependent_expression_p, but it also works while not processing
20095    a template definition, i.e. during substitution or mangling.  */
20096
20097 bool
20098 type_dependent_expression_p_push (tree expr)
20099 {
20100   bool b;
20101   ++processing_template_decl;
20102   b = type_dependent_expression_p (expr);
20103   --processing_template_decl;
20104   return b;
20105 }
20106
20107 /* Returns TRUE if ARGS contains a type-dependent expression.  */
20108
20109 bool
20110 any_type_dependent_arguments_p (const vec<tree, va_gc> *args)
20111 {
20112   unsigned int i;
20113   tree arg;
20114
20115   FOR_EACH_VEC_SAFE_ELT (args, i, arg)
20116     {
20117       if (type_dependent_expression_p (arg))
20118         return true;
20119     }
20120   return false;
20121 }
20122
20123 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
20124    expressions) contains any type-dependent expressions.  */
20125
20126 bool
20127 any_type_dependent_elements_p (const_tree list)
20128 {
20129   for (; list; list = TREE_CHAIN (list))
20130     if (type_dependent_expression_p (TREE_VALUE (list)))
20131       return true;
20132
20133   return false;
20134 }
20135
20136 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
20137    expressions) contains any value-dependent expressions.  */
20138
20139 bool
20140 any_value_dependent_elements_p (const_tree list)
20141 {
20142   for (; list; list = TREE_CHAIN (list))
20143     if (value_dependent_expression_p (TREE_VALUE (list)))
20144       return true;
20145
20146   return false;
20147 }
20148
20149 /* Returns TRUE if the ARG (a template argument) is dependent.  */
20150
20151 bool
20152 dependent_template_arg_p (tree arg)
20153 {
20154   if (!processing_template_decl)
20155     return false;
20156
20157   /* Assume a template argument that was wrongly written by the user
20158      is dependent. This is consistent with what
20159      any_dependent_template_arguments_p [that calls this function]
20160      does.  */
20161   if (!arg || arg == error_mark_node)
20162     return true;
20163
20164   if (TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
20165     arg = ARGUMENT_PACK_SELECT_ARG (arg);
20166
20167   if (TREE_CODE (arg) == TEMPLATE_DECL
20168       || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
20169     return dependent_template_p (arg);
20170   else if (ARGUMENT_PACK_P (arg))
20171     {
20172       tree args = ARGUMENT_PACK_ARGS (arg);
20173       int i, len = TREE_VEC_LENGTH (args);
20174       for (i = 0; i < len; ++i)
20175         {
20176           if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
20177             return true;
20178         }
20179
20180       return false;
20181     }
20182   else if (TYPE_P (arg))
20183     return dependent_type_p (arg);
20184   else
20185     return (type_dependent_expression_p (arg)
20186             || value_dependent_expression_p (arg));
20187 }
20188
20189 /* Returns true if ARGS (a collection of template arguments) contains
20190    any types that require structural equality testing.  */
20191
20192 bool
20193 any_template_arguments_need_structural_equality_p (tree args)
20194 {
20195   int i;
20196   int j;
20197
20198   if (!args)
20199     return false;
20200   if (args == error_mark_node)
20201     return true;
20202
20203   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
20204     {
20205       tree level = TMPL_ARGS_LEVEL (args, i + 1);
20206       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
20207         {
20208           tree arg = TREE_VEC_ELT (level, j);
20209           tree packed_args = NULL_TREE;
20210           int k, len = 1;
20211
20212           if (ARGUMENT_PACK_P (arg))
20213             {
20214               /* Look inside the argument pack.  */
20215               packed_args = ARGUMENT_PACK_ARGS (arg);
20216               len = TREE_VEC_LENGTH (packed_args);
20217             }
20218
20219           for (k = 0; k < len; ++k)
20220             {
20221               if (packed_args)
20222                 arg = TREE_VEC_ELT (packed_args, k);
20223
20224               if (error_operand_p (arg))
20225                 return true;
20226               else if (TREE_CODE (arg) == TEMPLATE_DECL
20227                        || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
20228                 continue;
20229               else if (TYPE_P (arg) && TYPE_STRUCTURAL_EQUALITY_P (arg))
20230                 return true;
20231               else if (!TYPE_P (arg) && TREE_TYPE (arg)
20232                        && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (arg)))
20233                 return true;
20234             }
20235         }
20236     }
20237
20238   return false;
20239 }
20240
20241 /* Returns true if ARGS (a collection of template arguments) contains
20242    any dependent arguments.  */
20243
20244 bool
20245 any_dependent_template_arguments_p (const_tree args)
20246 {
20247   int i;
20248   int j;
20249
20250   if (!args)
20251     return false;
20252   if (args == error_mark_node)
20253     return true;
20254
20255   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
20256     {
20257       const_tree level = TMPL_ARGS_LEVEL (args, i + 1);
20258       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
20259         if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
20260           return true;
20261     }
20262
20263   return false;
20264 }
20265
20266 /* Returns TRUE if the template TMPL is dependent.  */
20267
20268 bool
20269 dependent_template_p (tree tmpl)
20270 {
20271   if (TREE_CODE (tmpl) == OVERLOAD)
20272     {
20273       while (tmpl)
20274         {
20275           if (dependent_template_p (OVL_CURRENT (tmpl)))
20276             return true;
20277           tmpl = OVL_NEXT (tmpl);
20278         }
20279       return false;
20280     }
20281
20282   /* Template template parameters are dependent.  */
20283   if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
20284       || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
20285     return true;
20286   /* So are names that have not been looked up.  */
20287   if (TREE_CODE (tmpl) == SCOPE_REF
20288       || TREE_CODE (tmpl) == IDENTIFIER_NODE)
20289     return true;
20290   /* So are member templates of dependent classes.  */
20291   if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
20292     return dependent_type_p (DECL_CONTEXT (tmpl));
20293   return false;
20294 }
20295
20296 /* Returns TRUE if the specialization TMPL<ARGS> is dependent.  */
20297
20298 bool
20299 dependent_template_id_p (tree tmpl, tree args)
20300 {
20301   return (dependent_template_p (tmpl)
20302           || any_dependent_template_arguments_p (args));
20303 }
20304
20305 /* Returns TRUE if OMP_FOR with DECLV, INITV, CONDV and INCRV vectors
20306    is dependent.  */
20307
20308 bool
20309 dependent_omp_for_p (tree declv, tree initv, tree condv, tree incrv)
20310 {
20311   int i;
20312
20313   if (!processing_template_decl)
20314     return false;
20315
20316   for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
20317     {
20318       tree decl = TREE_VEC_ELT (declv, i);
20319       tree init = TREE_VEC_ELT (initv, i);
20320       tree cond = TREE_VEC_ELT (condv, i);
20321       tree incr = TREE_VEC_ELT (incrv, i);
20322
20323       if (type_dependent_expression_p (decl))
20324         return true;
20325
20326       if (init && type_dependent_expression_p (init))
20327         return true;
20328
20329       if (type_dependent_expression_p (cond))
20330         return true;
20331
20332       if (COMPARISON_CLASS_P (cond)
20333           && (type_dependent_expression_p (TREE_OPERAND (cond, 0))
20334               || type_dependent_expression_p (TREE_OPERAND (cond, 1))))
20335         return true;
20336
20337       if (TREE_CODE (incr) == MODOP_EXPR)
20338         {
20339           if (type_dependent_expression_p (TREE_OPERAND (incr, 0))
20340               || type_dependent_expression_p (TREE_OPERAND (incr, 2)))
20341             return true;
20342         }
20343       else if (type_dependent_expression_p (incr))
20344         return true;
20345       else if (TREE_CODE (incr) == MODIFY_EXPR)
20346         {
20347           if (type_dependent_expression_p (TREE_OPERAND (incr, 0)))
20348             return true;
20349           else if (BINARY_CLASS_P (TREE_OPERAND (incr, 1)))
20350             {
20351               tree t = TREE_OPERAND (incr, 1);
20352               if (type_dependent_expression_p (TREE_OPERAND (t, 0))
20353                   || type_dependent_expression_p (TREE_OPERAND (t, 1)))
20354                 return true;
20355             }
20356         }
20357     }
20358
20359   return false;
20360 }
20361
20362 /* TYPE is a TYPENAME_TYPE.  Returns the ordinary TYPE to which the
20363    TYPENAME_TYPE corresponds.  Returns the original TYPENAME_TYPE if
20364    no such TYPE can be found.  Note that this function peers inside
20365    uninstantiated templates and therefore should be used only in
20366    extremely limited situations.  ONLY_CURRENT_P restricts this
20367    peering to the currently open classes hierarchy (which is required
20368    when comparing types).  */
20369
20370 tree
20371 resolve_typename_type (tree type, bool only_current_p)
20372 {
20373   tree scope;
20374   tree name;
20375   tree decl;
20376   int quals;
20377   tree pushed_scope;
20378   tree result;
20379
20380   gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
20381
20382   scope = TYPE_CONTEXT (type);
20383   /* Usually the non-qualified identifier of a TYPENAME_TYPE is
20384      TYPE_IDENTIFIER (type). But when 'type' is a typedef variant of
20385      a TYPENAME_TYPE node, then TYPE_NAME (type) is set to the TYPE_DECL representing
20386      the typedef. In that case TYPE_IDENTIFIER (type) is not the non-qualified
20387      identifier  of the TYPENAME_TYPE anymore.
20388      So by getting the TYPE_IDENTIFIER of the _main declaration_ of the
20389      TYPENAME_TYPE instead, we avoid messing up with a possible
20390      typedef variant case.  */
20391   name = TYPE_IDENTIFIER (TYPE_MAIN_VARIANT (type));
20392
20393   /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
20394      it first before we can figure out what NAME refers to.  */
20395   if (TREE_CODE (scope) == TYPENAME_TYPE)
20396     {
20397       if (TYPENAME_IS_RESOLVING_P (scope))
20398         /* Given a class template A with a dependent base with nested type C,
20399            typedef typename A::C::C C will land us here, as trying to resolve
20400            the initial A::C leads to the local C typedef, which leads back to
20401            A::C::C.  So we break the recursion now.  */
20402         return type;
20403       else
20404         scope = resolve_typename_type (scope, only_current_p);
20405     }
20406   /* If we don't know what SCOPE refers to, then we cannot resolve the
20407      TYPENAME_TYPE.  */
20408   if (TREE_CODE (scope) == TYPENAME_TYPE)
20409     return type;
20410   /* If the SCOPE is a template type parameter, we have no way of
20411      resolving the name.  */
20412   if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
20413     return type;
20414   /* If the SCOPE is not the current instantiation, there's no reason
20415      to look inside it.  */
20416   if (only_current_p && !currently_open_class (scope))
20417     return type;
20418   /* If this is a typedef, we don't want to look inside (c++/11987).  */
20419   if (typedef_variant_p (type))
20420     return type;
20421   /* If SCOPE isn't the template itself, it will not have a valid
20422      TYPE_FIELDS list.  */
20423   if (same_type_p (scope, CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope)))
20424     /* scope is either the template itself or a compatible instantiation
20425        like X<T>, so look up the name in the original template.  */
20426     scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
20427   else
20428     /* scope is a partial instantiation, so we can't do the lookup or we
20429        will lose the template arguments.  */
20430     return type;
20431   /* Enter the SCOPE so that name lookup will be resolved as if we
20432      were in the class definition.  In particular, SCOPE will no
20433      longer be considered a dependent type.  */
20434   pushed_scope = push_scope (scope);
20435   /* Look up the declaration.  */
20436   decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true,
20437                         tf_warning_or_error);
20438
20439   result = NULL_TREE;
20440   
20441   /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
20442      find a TEMPLATE_DECL.  Otherwise, we want to find a TYPE_DECL.  */
20443   if (!decl)
20444     /*nop*/;
20445   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
20446            && TREE_CODE (decl) == TYPE_DECL)
20447     {
20448       result = TREE_TYPE (decl);
20449       if (result == error_mark_node)
20450         result = NULL_TREE;
20451     }
20452   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
20453            && DECL_CLASS_TEMPLATE_P (decl))
20454     {
20455       tree tmpl;
20456       tree args;
20457       /* Obtain the template and the arguments.  */
20458       tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
20459       args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
20460       /* Instantiate the template.  */
20461       result = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
20462                                       /*entering_scope=*/0,
20463                                       tf_error | tf_user);
20464       if (result == error_mark_node)
20465         result = NULL_TREE;
20466     }
20467   
20468   /* Leave the SCOPE.  */
20469   if (pushed_scope)
20470     pop_scope (pushed_scope);
20471
20472   /* If we failed to resolve it, return the original typename.  */
20473   if (!result)
20474     return type;
20475   
20476   /* If lookup found a typename type, resolve that too.  */
20477   if (TREE_CODE (result) == TYPENAME_TYPE && !TYPENAME_IS_RESOLVING_P (result))
20478     {
20479       /* Ill-formed programs can cause infinite recursion here, so we
20480          must catch that.  */
20481       TYPENAME_IS_RESOLVING_P (type) = 1;
20482       result = resolve_typename_type (result, only_current_p);
20483       TYPENAME_IS_RESOLVING_P (type) = 0;
20484     }
20485   
20486   /* Qualify the resulting type.  */
20487   quals = cp_type_quals (type);
20488   if (quals)
20489     result = cp_build_qualified_type (result, cp_type_quals (result) | quals);
20490
20491   return result;
20492 }
20493
20494 /* EXPR is an expression which is not type-dependent.  Return a proxy
20495    for EXPR that can be used to compute the types of larger
20496    expressions containing EXPR.  */
20497
20498 tree
20499 build_non_dependent_expr (tree expr)
20500 {
20501   tree inner_expr;
20502
20503 #ifdef ENABLE_CHECKING
20504   /* Try to get a constant value for all non-dependent expressions in
20505       order to expose bugs in *_dependent_expression_p and constexpr.  */
20506   if (cxx_dialect >= cxx0x
20507       && !instantiation_dependent_expression_p (expr))
20508     maybe_constant_value (fold_non_dependent_expr_sfinae (expr, tf_none));
20509 #endif
20510
20511   /* Preserve OVERLOADs; the functions must be available to resolve
20512      types.  */
20513   inner_expr = expr;
20514   if (TREE_CODE (inner_expr) == STMT_EXPR)
20515     inner_expr = stmt_expr_value_expr (inner_expr);
20516   if (TREE_CODE (inner_expr) == ADDR_EXPR)
20517     inner_expr = TREE_OPERAND (inner_expr, 0);
20518   if (TREE_CODE (inner_expr) == COMPONENT_REF)
20519     inner_expr = TREE_OPERAND (inner_expr, 1);
20520   if (is_overloaded_fn (inner_expr)
20521       || TREE_CODE (inner_expr) == OFFSET_REF)
20522     return expr;
20523   /* There is no need to return a proxy for a variable.  */
20524   if (TREE_CODE (expr) == VAR_DECL)
20525     return expr;
20526   /* Preserve string constants; conversions from string constants to
20527      "char *" are allowed, even though normally a "const char *"
20528      cannot be used to initialize a "char *".  */
20529   if (TREE_CODE (expr) == STRING_CST)
20530     return expr;
20531   /* Preserve arithmetic constants, as an optimization -- there is no
20532      reason to create a new node.  */
20533   if (TREE_CODE (expr) == INTEGER_CST || TREE_CODE (expr) == REAL_CST)
20534     return expr;
20535   /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
20536      There is at least one place where we want to know that a
20537      particular expression is a throw-expression: when checking a ?:
20538      expression, there are special rules if the second or third
20539      argument is a throw-expression.  */
20540   if (TREE_CODE (expr) == THROW_EXPR)
20541     return expr;
20542
20543   /* Don't wrap an initializer list, we need to be able to look inside.  */
20544   if (BRACE_ENCLOSED_INITIALIZER_P (expr))
20545     return expr;
20546
20547   /* Don't wrap a dummy object, we need to be able to test for it.  */
20548   if (is_dummy_object (expr))
20549     return expr;
20550
20551   if (TREE_CODE (expr) == COND_EXPR)
20552     return build3 (COND_EXPR,
20553                    TREE_TYPE (expr),
20554                    TREE_OPERAND (expr, 0),
20555                    (TREE_OPERAND (expr, 1)
20556                     ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
20557                     : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
20558                    build_non_dependent_expr (TREE_OPERAND (expr, 2)));
20559   if (TREE_CODE (expr) == COMPOUND_EXPR
20560       && !COMPOUND_EXPR_OVERLOADED (expr))
20561     return build2 (COMPOUND_EXPR,
20562                    TREE_TYPE (expr),
20563                    TREE_OPERAND (expr, 0),
20564                    build_non_dependent_expr (TREE_OPERAND (expr, 1)));
20565
20566   /* If the type is unknown, it can't really be non-dependent */
20567   gcc_assert (TREE_TYPE (expr) != unknown_type_node);
20568
20569   /* Otherwise, build a NON_DEPENDENT_EXPR.  */
20570   return build1 (NON_DEPENDENT_EXPR, TREE_TYPE (expr), expr);
20571 }
20572
20573 /* ARGS is a vector of expressions as arguments to a function call.
20574    Replace the arguments with equivalent non-dependent expressions.
20575    This modifies ARGS in place.  */
20576
20577 void
20578 make_args_non_dependent (vec<tree, va_gc> *args)
20579 {
20580   unsigned int ix;
20581   tree arg;
20582
20583   FOR_EACH_VEC_SAFE_ELT (args, ix, arg)
20584     {
20585       tree newarg = build_non_dependent_expr (arg);
20586       if (newarg != arg)
20587         (*args)[ix] = newarg;
20588     }
20589 }
20590
20591 /* Returns a type which represents 'auto'.  We use a TEMPLATE_TYPE_PARM
20592    with a level one deeper than the actual template parms.  */
20593
20594 tree
20595 make_auto (void)
20596 {
20597   tree au = cxx_make_type (TEMPLATE_TYPE_PARM);
20598   TYPE_NAME (au) = build_decl (BUILTINS_LOCATION,
20599                                TYPE_DECL, get_identifier ("auto"), au);
20600   TYPE_STUB_DECL (au) = TYPE_NAME (au);
20601   TEMPLATE_TYPE_PARM_INDEX (au) = build_template_parm_index
20602     (0, processing_template_decl + 1, processing_template_decl + 1,
20603      TYPE_NAME (au), NULL_TREE);
20604   TYPE_CANONICAL (au) = canonical_type_parameter (au);
20605   DECL_ARTIFICIAL (TYPE_NAME (au)) = 1;
20606   SET_DECL_TEMPLATE_PARM_P (TYPE_NAME (au));
20607
20608   return au;
20609 }
20610
20611 /* Given type ARG, return std::initializer_list<ARG>.  */
20612
20613 static tree
20614 listify (tree arg)
20615 {
20616   tree std_init_list = namespace_binding
20617     (get_identifier ("initializer_list"), std_node);
20618   tree argvec;
20619   if (!std_init_list || !DECL_CLASS_TEMPLATE_P (std_init_list))
20620     {    
20621       error ("deducing from brace-enclosed initializer list requires "
20622              "#include <initializer_list>");
20623       return error_mark_node;
20624     }
20625   argvec = make_tree_vec (1);
20626   TREE_VEC_ELT (argvec, 0) = arg;
20627   return lookup_template_class (std_init_list, argvec, NULL_TREE,
20628                                 NULL_TREE, 0, tf_warning_or_error);
20629 }
20630
20631 /* Replace auto in TYPE with std::initializer_list<auto>.  */
20632
20633 static tree
20634 listify_autos (tree type, tree auto_node)
20635 {
20636   tree init_auto = listify (auto_node);
20637   tree argvec = make_tree_vec (1);
20638   TREE_VEC_ELT (argvec, 0) = init_auto;
20639   if (processing_template_decl)
20640     argvec = add_to_template_args (current_template_args (), argvec);
20641   return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
20642 }
20643
20644 /* Replace occurrences of 'auto' in TYPE with the appropriate type deduced
20645    from INIT.  AUTO_NODE is the TEMPLATE_TYPE_PARM used for 'auto' in TYPE.  */
20646
20647 tree
20648 do_auto_deduction (tree type, tree init, tree auto_node)
20649 {
20650   tree parms, tparms, targs;
20651   tree args[1];
20652   int val;
20653
20654   if (init == error_mark_node)
20655     return error_mark_node;
20656
20657   if (type_dependent_expression_p (init))
20658     /* Defining a subset of type-dependent expressions that we can deduce
20659        from ahead of time isn't worth the trouble.  */
20660     return type;
20661
20662   /* [dcl.spec.auto]: Obtain P from T by replacing the occurrences of auto
20663      with either a new invented type template parameter U or, if the
20664      initializer is a braced-init-list (8.5.4), with
20665      std::initializer_list<U>.  */
20666   if (BRACE_ENCLOSED_INITIALIZER_P (init))
20667     type = listify_autos (type, auto_node);
20668
20669   init = resolve_nondeduced_context (init);
20670
20671   parms = build_tree_list (NULL_TREE, type);
20672   args[0] = init;
20673   tparms = make_tree_vec (1);
20674   targs = make_tree_vec (1);
20675   TREE_VEC_ELT (tparms, 0)
20676     = build_tree_list (NULL_TREE, TYPE_NAME (auto_node));
20677   val = type_unification_real (tparms, targs, parms, args, 1, 0,
20678                                DEDUCE_CALL, LOOKUP_NORMAL,
20679                                NULL, /*explain_p=*/false);
20680   if (val > 0)
20681     {
20682       if (processing_template_decl)
20683         /* Try again at instantiation time.  */
20684         return type;
20685       if (type && type != error_mark_node)
20686         /* If type is error_mark_node a diagnostic must have been
20687            emitted by now.  Also, having a mention to '<type error>'
20688            in the diagnostic is not really useful to the user.  */
20689         {
20690           if (cfun && auto_node == current_function_auto_return_pattern
20691               && LAMBDA_FUNCTION_P (current_function_decl))
20692             error ("unable to deduce lambda return type from %qE", init);
20693           else
20694             error ("unable to deduce %qT from %qE", type, init);
20695         }
20696       return error_mark_node;
20697     }
20698
20699   /* If the list of declarators contains more than one declarator, the type
20700      of each declared variable is determined as described above. If the
20701      type deduced for the template parameter U is not the same in each
20702      deduction, the program is ill-formed.  */
20703   if (TREE_TYPE (auto_node)
20704       && !same_type_p (TREE_TYPE (auto_node), TREE_VEC_ELT (targs, 0)))
20705     {
20706       if (cfun && auto_node == current_function_auto_return_pattern
20707           && LAMBDA_FUNCTION_P (current_function_decl))
20708         error ("inconsistent types %qT and %qT deduced for "
20709                "lambda return type", TREE_TYPE (auto_node),
20710                TREE_VEC_ELT (targs, 0));
20711       else
20712         error ("inconsistent deduction for %qT: %qT and then %qT",
20713                auto_node, TREE_TYPE (auto_node), TREE_VEC_ELT (targs, 0));
20714       return error_mark_node;
20715     }
20716   TREE_TYPE (auto_node) = TREE_VEC_ELT (targs, 0);
20717
20718   if (processing_template_decl)
20719     targs = add_to_template_args (current_template_args (), targs);
20720   return tsubst (type, targs, tf_warning_or_error, NULL_TREE);
20721 }
20722
20723 /* Substitutes LATE_RETURN_TYPE for 'auto' in TYPE and returns the
20724    result.  */
20725
20726 tree
20727 splice_late_return_type (tree type, tree late_return_type)
20728 {
20729   tree argvec;
20730
20731   if (late_return_type == NULL_TREE)
20732     return type;
20733   argvec = make_tree_vec (1);
20734   TREE_VEC_ELT (argvec, 0) = late_return_type;
20735   if (processing_template_parmlist)
20736     /* For a late-specified return type in a template type-parameter, we
20737        need to add a dummy argument level for its parmlist.  */
20738     argvec = add_to_template_args
20739       (make_tree_vec (processing_template_parmlist), argvec);
20740   if (current_template_parms)
20741     argvec = add_to_template_args (current_template_args (), argvec);
20742   return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
20743 }
20744
20745 /* Returns true iff TYPE is a TEMPLATE_TYPE_PARM representing 'auto'.  */
20746
20747 bool
20748 is_auto (const_tree type)
20749 {
20750   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
20751       && TYPE_IDENTIFIER (type) == get_identifier ("auto"))
20752     return true;
20753   else
20754     return false;
20755 }
20756
20757 /* Returns true iff TYPE contains a use of 'auto'.  Since auto can only
20758    appear as a type-specifier for the declaration in question, we don't
20759    have to look through the whole type.  */
20760
20761 tree
20762 type_uses_auto (tree type)
20763 {
20764   enum tree_code code;
20765   if (is_auto (type))
20766     return type;
20767
20768   code = TREE_CODE (type);
20769
20770   if (code == POINTER_TYPE || code == REFERENCE_TYPE
20771       || code == OFFSET_TYPE || code == FUNCTION_TYPE
20772       || code == METHOD_TYPE || code == ARRAY_TYPE)
20773     return type_uses_auto (TREE_TYPE (type));
20774
20775   if (TYPE_PTRMEMFUNC_P (type))
20776     return type_uses_auto (TREE_TYPE (TREE_TYPE
20777                                    (TYPE_PTRMEMFUNC_FN_TYPE (type))));
20778
20779   return NULL_TREE;
20780 }
20781
20782 /* For a given template T, return the vector of typedefs referenced
20783    in T for which access check is needed at T instantiation time.
20784    T is either  a FUNCTION_DECL or a RECORD_TYPE.
20785    Those typedefs were added to T by the function
20786    append_type_to_template_for_access_check.  */
20787
20788 vec<qualified_typedef_usage_t, va_gc> *
20789 get_types_needing_access_check (tree t)
20790 {
20791   tree ti;
20792   vec<qualified_typedef_usage_t, va_gc> *result = NULL;
20793
20794   if (!t || t == error_mark_node)
20795     return NULL;
20796
20797   if (!(ti = get_template_info (t)))
20798     return NULL;
20799
20800   if (CLASS_TYPE_P (t)
20801       || TREE_CODE (t) == FUNCTION_DECL)
20802     {
20803       if (!TI_TEMPLATE (ti))
20804         return NULL;
20805
20806       result = TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti);
20807     }
20808
20809   return result;
20810 }
20811
20812 /* Append the typedef TYPE_DECL used in template T to a list of typedefs
20813    tied to T. That list of typedefs will be access checked at
20814    T instantiation time.
20815    T is either a FUNCTION_DECL or a RECORD_TYPE.
20816    TYPE_DECL is a TYPE_DECL node representing a typedef.
20817    SCOPE is the scope through which TYPE_DECL is accessed.
20818    LOCATION is the location of the usage point of TYPE_DECL.
20819
20820    This function is a subroutine of
20821    append_type_to_template_for_access_check.  */
20822
20823 static void
20824 append_type_to_template_for_access_check_1 (tree t,
20825                                             tree type_decl,
20826                                             tree scope,
20827                                             location_t location)
20828 {
20829   qualified_typedef_usage_t typedef_usage;
20830   tree ti;
20831
20832   if (!t || t == error_mark_node)
20833     return;
20834
20835   gcc_assert ((TREE_CODE (t) == FUNCTION_DECL
20836                || CLASS_TYPE_P (t))
20837               && type_decl
20838               && TREE_CODE (type_decl) == TYPE_DECL
20839               && scope);
20840
20841   if (!(ti = get_template_info (t)))
20842     return;
20843
20844   gcc_assert (TI_TEMPLATE (ti));
20845
20846   typedef_usage.typedef_decl = type_decl;
20847   typedef_usage.context = scope;
20848   typedef_usage.locus = location;
20849
20850   vec_safe_push (TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti), typedef_usage);
20851 }
20852
20853 /* Append TYPE_DECL to the template TEMPL.
20854    TEMPL is either a class type, a FUNCTION_DECL or a a TEMPLATE_DECL.
20855    At TEMPL instanciation time, TYPE_DECL will be checked to see
20856    if it can be accessed through SCOPE.
20857    LOCATION is the location of the usage point of TYPE_DECL.
20858
20859    e.g. consider the following code snippet:
20860
20861      class C
20862      {
20863        typedef int myint;
20864      };
20865
20866      template<class U> struct S
20867      {
20868        C::myint mi; // <-- usage point of the typedef C::myint
20869      };
20870
20871      S<char> s;
20872
20873    At S<char> instantiation time, we need to check the access of C::myint
20874    In other words, we need to check the access of the myint typedef through
20875    the C scope. For that purpose, this function will add the myint typedef
20876    and the scope C through which its being accessed to a list of typedefs
20877    tied to the template S. That list will be walked at template instantiation
20878    time and access check performed on each typedefs it contains.
20879    Note that this particular code snippet should yield an error because
20880    myint is private to C.  */
20881
20882 void
20883 append_type_to_template_for_access_check (tree templ,
20884                                           tree type_decl,
20885                                           tree scope,
20886                                           location_t location)
20887 {
20888   qualified_typedef_usage_t *iter;
20889   unsigned i;
20890
20891   gcc_assert (type_decl && (TREE_CODE (type_decl) == TYPE_DECL));
20892
20893   /* Make sure we don't append the type to the template twice.  */
20894   FOR_EACH_VEC_SAFE_ELT (get_types_needing_access_check (templ), i, iter)
20895     if (iter->typedef_decl == type_decl && scope == iter->context)
20896       return;
20897
20898   append_type_to_template_for_access_check_1 (templ, type_decl,
20899                                               scope, location);
20900 }
20901
20902 /* Set up the hash tables for template instantiations.  */
20903
20904 void
20905 init_template_processing (void)
20906 {
20907   decl_specializations = htab_create_ggc (37,
20908                                           hash_specialization,
20909                                           eq_specializations,
20910                                           ggc_free);
20911   type_specializations = htab_create_ggc (37,
20912                                           hash_specialization,
20913                                           eq_specializations,
20914                                           ggc_free);
20915 }
20916
20917 /* Print stats about the template hash tables for -fstats.  */
20918
20919 void
20920 print_template_statistics (void)
20921 {
20922   fprintf (stderr, "decl_specializations: size %ld, %ld elements, "
20923            "%f collisions\n", (long) htab_size (decl_specializations),
20924            (long) htab_elements (decl_specializations),
20925            htab_collisions (decl_specializations));
20926   fprintf (stderr, "type_specializations: size %ld, %ld elements, "
20927            "%f collisions\n", (long) htab_size (type_specializations),
20928            (long) htab_elements (type_specializations),
20929            htab_collisions (type_specializations));
20930 }
20931
20932 #include "gt-cp-pt.h"