769b610cc478e08ea17434853bf2be844973b965
[platform/upstream/gcc.git] / gcc / cp / pt.c
1 /* Handle parameterized types (templates) for GNU C++.
2    Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3    2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011
4    Free Software Foundation, Inc.
5    Written by Ken Raeburn (raeburn@cygnus.com) while at Watchmaker Computing.
6    Rewritten by Jason Merrill (jason@cygnus.com).
7
8 This file is part of GCC.
9
10 GCC is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 3, or (at your option)
13 any later version.
14
15 GCC is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18 GNU General Public License for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with GCC; see the file COPYING3.  If not see
22 <http://www.gnu.org/licenses/>.  */
23
24 /* Known bugs or deficiencies include:
25
26      all methods must be provided in header files; can't use a source
27      file that contains only the method templates and "just win".  */
28
29 #include "config.h"
30 #include "system.h"
31 #include "coretypes.h"
32 #include "tm.h"
33 #include "tree.h"
34 #include "intl.h"
35 #include "pointer-set.h"
36 #include "flags.h"
37 #include "cp-tree.h"
38 #include "c-family/c-common.h"
39 #include "c-family/c-objc.h"
40 #include "cp-objcp-common.h"
41 #include "tree-inline.h"
42 #include "decl.h"
43 #include "output.h"
44 #include "toplev.h"
45 #include "timevar.h"
46 #include "tree-iterator.h"
47 #include "vecprim.h"
48
49 /* The type of functions taking a tree, and some additional data, and
50    returning an int.  */
51 typedef int (*tree_fn_t) (tree, void*);
52
53 /* The PENDING_TEMPLATES is a TREE_LIST of templates whose
54    instantiations have been deferred, either because their definitions
55    were not yet available, or because we were putting off doing the work.  */
56 struct GTY ((chain_next ("%h.next"))) pending_template {
57   struct pending_template *next;
58   struct tinst_level *tinst;
59 };
60
61 static GTY(()) struct pending_template *pending_templates;
62 static GTY(()) struct pending_template *last_pending_template;
63
64 int processing_template_parmlist;
65 static int template_header_count;
66
67 static GTY(()) tree saved_trees;
68 static VEC(int,heap) *inline_parm_levels;
69
70 static GTY(()) struct tinst_level *current_tinst_level;
71
72 static GTY(()) tree saved_access_scope;
73
74 /* Live only within one (recursive) call to tsubst_expr.  We use
75    this to pass the statement expression node from the STMT_EXPR
76    to the EXPR_STMT that is its result.  */
77 static tree cur_stmt_expr;
78
79 /* A map from local variable declarations in the body of the template
80    presently being instantiated to the corresponding instantiated
81    local variables.  */
82 static htab_t local_specializations;
83
84 typedef struct GTY(()) spec_entry
85 {
86   tree tmpl;
87   tree args;
88   tree spec;
89 } spec_entry;
90
91 static GTY ((param_is (spec_entry)))
92   htab_t decl_specializations;
93
94 static GTY ((param_is (spec_entry)))
95   htab_t type_specializations;
96
97 /* Contains canonical template parameter types. The vector is indexed by
98    the TEMPLATE_TYPE_IDX of the template parameter. Each element is a
99    TREE_LIST, whose TREE_VALUEs contain the canonical template
100    parameters of various types and levels.  */
101 static GTY(()) VEC(tree,gc) *canonical_template_parms;
102
103 #define UNIFY_ALLOW_NONE 0
104 #define UNIFY_ALLOW_MORE_CV_QUAL 1
105 #define UNIFY_ALLOW_LESS_CV_QUAL 2
106 #define UNIFY_ALLOW_DERIVED 4
107 #define UNIFY_ALLOW_INTEGER 8
108 #define UNIFY_ALLOW_OUTER_LEVEL 16
109 #define UNIFY_ALLOW_OUTER_MORE_CV_QUAL 32
110 #define UNIFY_ALLOW_OUTER_LESS_CV_QUAL 64
111
112 enum template_base_result {
113   tbr_incomplete_type,
114   tbr_ambiguous_baseclass,
115   tbr_success
116 };
117
118 static void push_access_scope (tree);
119 static void pop_access_scope (tree);
120 static void push_deduction_access_scope (tree);
121 static void pop_deduction_access_scope (tree);
122 static bool resolve_overloaded_unification (tree, tree, tree, tree,
123                                             unification_kind_t, int,
124                                             bool);
125 static int try_one_overload (tree, tree, tree, tree, tree,
126                              unification_kind_t, int, bool, bool);
127 static int unify (tree, tree, tree, tree, int, bool);
128 static void add_pending_template (tree);
129 static tree reopen_tinst_level (struct tinst_level *);
130 static tree tsubst_initializer_list (tree, tree);
131 static tree get_class_bindings (tree, tree, tree);
132 static tree coerce_template_parms (tree, tree, tree, tsubst_flags_t,
133                                    bool, bool);
134 static void tsubst_enum (tree, tree, tree);
135 static tree add_to_template_args (tree, tree);
136 static tree add_outermost_template_args (tree, tree);
137 static bool check_instantiated_args (tree, tree, tsubst_flags_t);
138 static int maybe_adjust_types_for_deduction (unification_kind_t, tree*, tree*,
139                                              tree);
140 static int type_unification_real (tree, tree, tree, const tree *,
141                                   unsigned int, int, unification_kind_t, int,
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, 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, 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);
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 int eq_local_specializations (const void *, const void *);
193 static bool dependent_template_arg_p (tree);
194 static bool any_template_arguments_need_structural_equality_p (tree);
195 static bool dependent_type_p_r (tree);
196 static tree tsubst_expr (tree, tree, tsubst_flags_t, tree, bool);
197 static tree tsubst_copy (tree, tree, tsubst_flags_t, tree);
198 static tree tsubst_pack_expansion (tree, tree, tsubst_flags_t, tree);
199 static tree tsubst_decl (tree, tree, tsubst_flags_t);
200 static void perform_typedefs_access_check (tree tmpl, tree targs);
201 static void append_type_to_template_for_access_check_1 (tree, tree, tree,
202                                                         location_t);
203 static tree listify (tree);
204 static tree listify_autos (tree, tree);
205 static tree template_parm_to_arg (tree t);
206 static bool arg_from_parm_pack_p (tree, tree);
207 static tree current_template_args (void);
208 static tree fixup_template_type_parm_type (tree, int);
209 static tree fixup_template_parm_index (tree, tree, int);
210 static tree tsubst_template_parm (tree, tree, tsubst_flags_t);
211
212 /* Make the current scope suitable for access checking when we are
213    processing T.  T can be FUNCTION_DECL for instantiated function
214    template, or VAR_DECL for static member variable (need by
215    instantiate_decl).  */
216
217 static void
218 push_access_scope (tree t)
219 {
220   gcc_assert (TREE_CODE (t) == FUNCTION_DECL
221               || TREE_CODE (t) == VAR_DECL);
222
223   if (DECL_FRIEND_CONTEXT (t))
224     push_nested_class (DECL_FRIEND_CONTEXT (t));
225   else if (DECL_CLASS_SCOPE_P (t))
226     push_nested_class (DECL_CONTEXT (t));
227   else
228     push_to_top_level ();
229
230   if (TREE_CODE (t) == FUNCTION_DECL)
231     {
232       saved_access_scope = tree_cons
233         (NULL_TREE, current_function_decl, saved_access_scope);
234       current_function_decl = t;
235     }
236 }
237
238 /* Restore the scope set up by push_access_scope.  T is the node we
239    are processing.  */
240
241 static void
242 pop_access_scope (tree t)
243 {
244   if (TREE_CODE (t) == FUNCTION_DECL)
245     {
246       current_function_decl = TREE_VALUE (saved_access_scope);
247       saved_access_scope = TREE_CHAIN (saved_access_scope);
248     }
249
250   if (DECL_FRIEND_CONTEXT (t) || DECL_CLASS_SCOPE_P (t))
251     pop_nested_class ();
252   else
253     pop_from_top_level ();
254 }
255
256 /* Do any processing required when DECL (a member template
257    declaration) is finished.  Returns the TEMPLATE_DECL corresponding
258    to DECL, unless it is a specialization, in which case the DECL
259    itself is returned.  */
260
261 tree
262 finish_member_template_decl (tree decl)
263 {
264   if (decl == error_mark_node)
265     return error_mark_node;
266
267   gcc_assert (DECL_P (decl));
268
269   if (TREE_CODE (decl) == TYPE_DECL)
270     {
271       tree type;
272
273       type = TREE_TYPE (decl);
274       if (type == error_mark_node)
275         return error_mark_node;
276       if (MAYBE_CLASS_TYPE_P (type)
277           && CLASSTYPE_TEMPLATE_INFO (type)
278           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
279         {
280           tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
281           check_member_template (tmpl);
282           return tmpl;
283         }
284       return NULL_TREE;
285     }
286   else if (TREE_CODE (decl) == FIELD_DECL)
287     error ("data member %qD cannot be a member template", decl);
288   else if (DECL_TEMPLATE_INFO (decl))
289     {
290       if (!DECL_TEMPLATE_SPECIALIZATION (decl))
291         {
292           check_member_template (DECL_TI_TEMPLATE (decl));
293           return DECL_TI_TEMPLATE (decl);
294         }
295       else
296         return decl;
297     }
298   else
299     error ("invalid member template declaration %qD", decl);
300
301   return error_mark_node;
302 }
303
304 /* Create a template info node.  */
305
306 tree
307 build_template_info (tree template_decl, tree template_args)
308 {
309   tree result = make_node (TEMPLATE_INFO);
310   TI_TEMPLATE (result) = template_decl;
311   TI_ARGS (result) = template_args;
312   return result;
313 }
314
315 /* Return the template info node corresponding to T, whatever T is.  */
316
317 tree
318 get_template_info (const_tree t)
319 {
320   tree tinfo = NULL_TREE;
321
322   if (!t || t == error_mark_node)
323     return NULL;
324
325   if (DECL_P (t) && DECL_LANG_SPECIFIC (t))
326     tinfo = DECL_TEMPLATE_INFO (t);
327
328   if (!tinfo && DECL_IMPLICIT_TYPEDEF_P (t))
329     t = TREE_TYPE (t);
330
331   if (TAGGED_TYPE_P (t))
332     tinfo = TYPE_TEMPLATE_INFO (t);
333   else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
334     tinfo = TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t);
335
336   return tinfo;
337 }
338
339 /* Returns the template nesting level of the indicated class TYPE.
340
341    For example, in:
342      template <class T>
343      struct A
344      {
345        template <class U>
346        struct B {};
347      };
348
349    A<T>::B<U> has depth two, while A<T> has depth one.
350    Both A<T>::B<int> and A<int>::B<U> have depth one, if
351    they are instantiations, not specializations.
352
353    This function is guaranteed to return 0 if passed NULL_TREE so
354    that, for example, `template_class_depth (current_class_type)' is
355    always safe.  */
356
357 int
358 template_class_depth (tree type)
359 {
360   int depth;
361
362   for (depth = 0;
363        type && TREE_CODE (type) != NAMESPACE_DECL;
364        type = (TREE_CODE (type) == FUNCTION_DECL)
365          ? CP_DECL_CONTEXT (type) : CP_TYPE_CONTEXT (type))
366     {
367       tree tinfo = get_template_info (type);
368
369       if (tinfo && PRIMARY_TEMPLATE_P (TI_TEMPLATE (tinfo))
370           && uses_template_parms (INNERMOST_TEMPLATE_ARGS (TI_ARGS (tinfo))))
371         ++depth;
372     }
373
374   return depth;
375 }
376
377 /* Subroutine of maybe_begin_member_template_processing.
378    Returns true if processing DECL needs us to push template parms.  */
379
380 static bool
381 inline_needs_template_parms (tree decl)
382 {
383   if (! DECL_TEMPLATE_INFO (decl))
384     return false;
385
386   return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (most_general_template (decl)))
387           > (processing_template_decl + DECL_TEMPLATE_SPECIALIZATION (decl)));
388 }
389
390 /* Subroutine of maybe_begin_member_template_processing.
391    Push the template parms in PARMS, starting from LEVELS steps into the
392    chain, and ending at the beginning, since template parms are listed
393    innermost first.  */
394
395 static void
396 push_inline_template_parms_recursive (tree parmlist, int levels)
397 {
398   tree parms = TREE_VALUE (parmlist);
399   int i;
400
401   if (levels > 1)
402     push_inline_template_parms_recursive (TREE_CHAIN (parmlist), levels - 1);
403
404   ++processing_template_decl;
405   current_template_parms
406     = tree_cons (size_int (processing_template_decl),
407                  parms, current_template_parms);
408   TEMPLATE_PARMS_FOR_INLINE (current_template_parms) = 1;
409
410   begin_scope (TREE_VEC_LENGTH (parms) ? sk_template_parms : sk_template_spec,
411                NULL);
412   for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
413     {
414       tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
415
416       if (parm == error_mark_node)
417         continue;
418
419       gcc_assert (DECL_P (parm));
420
421       switch (TREE_CODE (parm))
422         {
423         case TYPE_DECL:
424         case TEMPLATE_DECL:
425           pushdecl (parm);
426           break;
427
428         case PARM_DECL:
429           {
430             /* Make a CONST_DECL as is done in process_template_parm.
431                It is ugly that we recreate this here; the original
432                version built in process_template_parm is no longer
433                available.  */
434             tree decl = build_decl (DECL_SOURCE_LOCATION (parm),
435                                     CONST_DECL, DECL_NAME (parm),
436                                     TREE_TYPE (parm));
437             DECL_ARTIFICIAL (decl) = 1;
438             TREE_CONSTANT (decl) = 1;
439             TREE_READONLY (decl) = 1;
440             DECL_INITIAL (decl) = DECL_INITIAL (parm);
441             SET_DECL_TEMPLATE_PARM_P (decl);
442             pushdecl (decl);
443           }
444           break;
445
446         default:
447           gcc_unreachable ();
448         }
449     }
450 }
451
452 /* Restore the template parameter context for a member template or
453    a friend template defined in a class definition.  */
454
455 void
456 maybe_begin_member_template_processing (tree decl)
457 {
458   tree parms;
459   int levels = 0;
460
461   if (inline_needs_template_parms (decl))
462     {
463       parms = DECL_TEMPLATE_PARMS (most_general_template (decl));
464       levels = TMPL_PARMS_DEPTH (parms) - processing_template_decl;
465
466       if (DECL_TEMPLATE_SPECIALIZATION (decl))
467         {
468           --levels;
469           parms = TREE_CHAIN (parms);
470         }
471
472       push_inline_template_parms_recursive (parms, levels);
473     }
474
475   /* Remember how many levels of template parameters we pushed so that
476      we can pop them later.  */
477   VEC_safe_push (int, heap, inline_parm_levels, levels);
478 }
479
480 /* Undo the effects of maybe_begin_member_template_processing.  */
481
482 void
483 maybe_end_member_template_processing (void)
484 {
485   int i;
486   int last;
487
488   if (VEC_length (int, inline_parm_levels) == 0)
489     return;
490
491   last = VEC_pop (int, inline_parm_levels);
492   for (i = 0; i < last; ++i)
493     {
494       --processing_template_decl;
495       current_template_parms = TREE_CHAIN (current_template_parms);
496       poplevel (0, 0, 0);
497     }
498 }
499
500 /* Return a new template argument vector which contains all of ARGS,
501    but has as its innermost set of arguments the EXTRA_ARGS.  */
502
503 static tree
504 add_to_template_args (tree args, tree extra_args)
505 {
506   tree new_args;
507   int extra_depth;
508   int i;
509   int j;
510
511   if (args == NULL_TREE || extra_args == error_mark_node)
512     return extra_args;
513
514   extra_depth = TMPL_ARGS_DEPTH (extra_args);
515   new_args = make_tree_vec (TMPL_ARGS_DEPTH (args) + extra_depth);
516
517   for (i = 1; i <= TMPL_ARGS_DEPTH (args); ++i)
518     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (args, i));
519
520   for (j = 1; j <= extra_depth; ++j, ++i)
521     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (extra_args, j));
522
523   return new_args;
524 }
525
526 /* Like add_to_template_args, but only the outermost ARGS are added to
527    the EXTRA_ARGS.  In particular, all but TMPL_ARGS_DEPTH
528    (EXTRA_ARGS) levels are added.  This function is used to combine
529    the template arguments from a partial instantiation with the
530    template arguments used to attain the full instantiation from the
531    partial instantiation.  */
532
533 static tree
534 add_outermost_template_args (tree args, tree extra_args)
535 {
536   tree new_args;
537
538   /* If there are more levels of EXTRA_ARGS than there are ARGS,
539      something very fishy is going on.  */
540   gcc_assert (TMPL_ARGS_DEPTH (args) >= TMPL_ARGS_DEPTH (extra_args));
541
542   /* If *all* the new arguments will be the EXTRA_ARGS, just return
543      them.  */
544   if (TMPL_ARGS_DEPTH (args) == TMPL_ARGS_DEPTH (extra_args))
545     return extra_args;
546
547   /* For the moment, we make ARGS look like it contains fewer levels.  */
548   TREE_VEC_LENGTH (args) -= TMPL_ARGS_DEPTH (extra_args);
549
550   new_args = add_to_template_args (args, extra_args);
551
552   /* Now, we restore ARGS to its full dimensions.  */
553   TREE_VEC_LENGTH (args) += TMPL_ARGS_DEPTH (extra_args);
554
555   return new_args;
556 }
557
558 /* Return the N levels of innermost template arguments from the ARGS.  */
559
560 tree
561 get_innermost_template_args (tree args, int n)
562 {
563   tree new_args;
564   int extra_levels;
565   int i;
566
567   gcc_assert (n >= 0);
568
569   /* If N is 1, just return the innermost set of template arguments.  */
570   if (n == 1)
571     return TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args));
572
573   /* If we're not removing anything, just return the arguments we were
574      given.  */
575   extra_levels = TMPL_ARGS_DEPTH (args) - n;
576   gcc_assert (extra_levels >= 0);
577   if (extra_levels == 0)
578     return args;
579
580   /* Make a new set of arguments, not containing the outer arguments.  */
581   new_args = make_tree_vec (n);
582   for (i = 1; i <= n; ++i)
583     SET_TMPL_ARGS_LEVEL (new_args, i,
584                          TMPL_ARGS_LEVEL (args, i + extra_levels));
585
586   return new_args;
587 }
588
589 /* The inverse of get_innermost_template_args: Return all but the innermost
590    EXTRA_LEVELS levels of template arguments from the ARGS.  */
591
592 static tree
593 strip_innermost_template_args (tree args, int extra_levels)
594 {
595   tree new_args;
596   int n = TMPL_ARGS_DEPTH (args) - extra_levels;
597   int i;
598
599   gcc_assert (n >= 0);
600
601   /* If N is 1, just return the outermost set of template arguments.  */
602   if (n == 1)
603     return TMPL_ARGS_LEVEL (args, 1);
604
605   /* If we're not removing anything, just return the arguments we were
606      given.  */
607   gcc_assert (extra_levels >= 0);
608   if (extra_levels == 0)
609     return args;
610
611   /* Make a new set of arguments, not containing the inner arguments.  */
612   new_args = make_tree_vec (n);
613   for (i = 1; i <= n; ++i)
614     SET_TMPL_ARGS_LEVEL (new_args, i,
615                          TMPL_ARGS_LEVEL (args, i));
616
617   return new_args;
618 }
619
620 /* We've got a template header coming up; push to a new level for storing
621    the parms.  */
622
623 void
624 begin_template_parm_list (void)
625 {
626   /* We use a non-tag-transparent scope here, which causes pushtag to
627      put tags in this scope, rather than in the enclosing class or
628      namespace scope.  This is the right thing, since we want
629      TEMPLATE_DECLS, and not TYPE_DECLS for template classes.  For a
630      global template class, push_template_decl handles putting the
631      TEMPLATE_DECL into top-level scope.  For a nested template class,
632      e.g.:
633
634        template <class T> struct S1 {
635          template <class T> struct S2 {};
636        };
637
638      pushtag contains special code to call pushdecl_with_scope on the
639      TEMPLATE_DECL for S2.  */
640   begin_scope (sk_template_parms, NULL);
641   ++processing_template_decl;
642   ++processing_template_parmlist;
643   note_template_header (0);
644 }
645
646 /* This routine is called when a specialization is declared.  If it is
647    invalid to declare a specialization here, an error is reported and
648    false is returned, otherwise this routine will return true.  */
649
650 static bool
651 check_specialization_scope (void)
652 {
653   tree scope = current_scope ();
654
655   /* [temp.expl.spec]
656
657      An explicit specialization shall be declared in the namespace of
658      which the template is a member, or, for member templates, in the
659      namespace of which the enclosing class or enclosing class
660      template is a member.  An explicit specialization of a member
661      function, member class or static data member of a class template
662      shall be declared in the namespace of which the class template
663      is a member.  */
664   if (scope && TREE_CODE (scope) != NAMESPACE_DECL)
665     {
666       error ("explicit specialization in non-namespace scope %qD", scope);
667       return false;
668     }
669
670   /* [temp.expl.spec]
671
672      In an explicit specialization declaration for a member of a class
673      template or a member template that appears in namespace scope,
674      the member template and some of its enclosing class templates may
675      remain unspecialized, except that the declaration shall not
676      explicitly specialize a class member template if its enclosing
677      class templates are not explicitly specialized as well.  */
678   if (current_template_parms)
679     {
680       error ("enclosing class templates are not explicitly specialized");
681       return false;
682     }
683
684   return true;
685 }
686
687 /* We've just seen template <>.  */
688
689 bool
690 begin_specialization (void)
691 {
692   begin_scope (sk_template_spec, NULL);
693   note_template_header (1);
694   return check_specialization_scope ();
695 }
696
697 /* Called at then end of processing a declaration preceded by
698    template<>.  */
699
700 void
701 end_specialization (void)
702 {
703   finish_scope ();
704   reset_specialization ();
705 }
706
707 /* Any template <>'s that we have seen thus far are not referring to a
708    function specialization.  */
709
710 void
711 reset_specialization (void)
712 {
713   processing_specialization = 0;
714   template_header_count = 0;
715 }
716
717 /* We've just seen a template header.  If SPECIALIZATION is nonzero,
718    it was of the form template <>.  */
719
720 static void
721 note_template_header (int specialization)
722 {
723   processing_specialization = specialization;
724   template_header_count++;
725 }
726
727 /* We're beginning an explicit instantiation.  */
728
729 void
730 begin_explicit_instantiation (void)
731 {
732   gcc_assert (!processing_explicit_instantiation);
733   processing_explicit_instantiation = true;
734 }
735
736
737 void
738 end_explicit_instantiation (void)
739 {
740   gcc_assert (processing_explicit_instantiation);
741   processing_explicit_instantiation = false;
742 }
743
744 /* An explicit specialization or partial specialization TMPL is being
745    declared.  Check that the namespace in which the specialization is
746    occurring is permissible.  Returns false iff it is invalid to
747    specialize TMPL in the current namespace.  */
748
749 static bool
750 check_specialization_namespace (tree tmpl)
751 {
752   tree tpl_ns = decl_namespace_context (tmpl);
753
754   /* [tmpl.expl.spec]
755
756      An explicit specialization shall be declared in the namespace of
757      which the template is a member, or, for member templates, in the
758      namespace of which the enclosing class or enclosing class
759      template is a member.  An explicit specialization of a member
760      function, member class or static data member of a class template
761      shall be declared in the namespace of which the class template is
762      a member.  */
763   if (current_scope() != DECL_CONTEXT (tmpl)
764       && !at_namespace_scope_p ())
765     {
766       error ("specialization of %qD must appear at namespace scope", tmpl);
767       return false;
768     }
769   if (is_associated_namespace (current_namespace, tpl_ns))
770     /* Same or super-using namespace.  */
771     return true;
772   else
773     {
774       permerror (input_location, "specialization of %qD in different namespace", tmpl);
775       permerror (input_location, "  from definition of %q+#D", tmpl);
776       return false;
777     }
778 }
779
780 /* SPEC is an explicit instantiation.  Check that it is valid to
781    perform this explicit instantiation in the current namespace.  */
782
783 static void
784 check_explicit_instantiation_namespace (tree spec)
785 {
786   tree ns;
787
788   /* DR 275: An explicit instantiation shall appear in an enclosing
789      namespace of its template.  */
790   ns = decl_namespace_context (spec);
791   if (!is_ancestor (current_namespace, ns))
792     permerror (input_location, "explicit instantiation of %qD in namespace %qD "
793                "(which does not enclose namespace %qD)",
794                spec, current_namespace, ns);
795 }
796
797 /* The TYPE is being declared.  If it is a template type, that means it
798    is a partial specialization.  Do appropriate error-checking.  */
799
800 tree
801 maybe_process_partial_specialization (tree type)
802 {
803   tree context;
804
805   if (type == error_mark_node)
806     return error_mark_node;
807
808   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
809     {
810       error ("name of class shadows template template parameter %qD",
811              TYPE_NAME (type));
812       return error_mark_node;
813     }
814
815   context = TYPE_CONTEXT (type);
816
817   if ((CLASS_TYPE_P (type) && CLASSTYPE_USE_TEMPLATE (type))
818       /* Consider non-class instantiations of alias templates as
819          well.  */
820       || (TYPE_P (type)
821           && TYPE_TEMPLATE_INFO (type)
822           && DECL_LANG_SPECIFIC (TYPE_NAME (type))
823           && DECL_USE_TEMPLATE (TYPE_NAME (type))))
824     {
825       /* This is for ordinary explicit specialization and partial
826          specialization of a template class such as:
827
828            template <> class C<int>;
829
830          or:
831
832            template <class T> class C<T*>;
833
834          Make sure that `C<int>' and `C<T*>' are implicit instantiations.  */
835
836       if (CLASS_TYPE_P (type)
837           && CLASSTYPE_IMPLICIT_INSTANTIATION (type)
838           && !COMPLETE_TYPE_P (type))
839         {
840           check_specialization_namespace (CLASSTYPE_TI_TEMPLATE (type));
841           SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
842           if (processing_template_decl)
843             {
844               if (push_template_decl (TYPE_MAIN_DECL (type))
845                   == error_mark_node)
846                 return error_mark_node;
847             }
848         }
849       else if (CLASS_TYPE_P (type)
850                && CLASSTYPE_TEMPLATE_INSTANTIATION (type))
851         error ("specialization of %qT after instantiation", type);
852
853       if (DECL_ALIAS_TEMPLATE_P (TYPE_TI_TEMPLATE (type)))
854         {
855           error ("partial specialization of alias template %qD",
856                  TYPE_TI_TEMPLATE (type));
857           return error_mark_node;
858         }
859     }
860   else if (CLASS_TYPE_P (type)
861            && !CLASSTYPE_USE_TEMPLATE (type)
862            && CLASSTYPE_TEMPLATE_INFO (type)
863            && context && CLASS_TYPE_P (context)
864            && CLASSTYPE_TEMPLATE_INFO (context))
865     {
866       /* This is for an explicit specialization of member class
867          template according to [temp.expl.spec/18]:
868
869            template <> template <class U> class C<int>::D;
870
871          The context `C<int>' must be an implicit instantiation.
872          Otherwise this is just a member class template declared
873          earlier like:
874
875            template <> class C<int> { template <class U> class D; };
876            template <> template <class U> class C<int>::D;
877
878          In the first case, `C<int>::D' is a specialization of `C<T>::D'
879          while in the second case, `C<int>::D' is a primary template
880          and `C<T>::D' may not exist.  */
881
882       if (CLASSTYPE_IMPLICIT_INSTANTIATION (context)
883           && !COMPLETE_TYPE_P (type))
884         {
885           tree t;
886           tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
887
888           if (current_namespace
889               != decl_namespace_context (tmpl))
890             {
891               permerror (input_location, "specializing %q#T in different namespace", type);
892               permerror (input_location, "  from definition of %q+#D", tmpl);
893             }
894
895           /* Check for invalid specialization after instantiation:
896
897                template <> template <> class C<int>::D<int>;
898                template <> template <class U> class C<int>::D;  */
899
900           for (t = DECL_TEMPLATE_INSTANTIATIONS (tmpl);
901                t; t = TREE_CHAIN (t))
902             {
903               tree inst = TREE_VALUE (t);
904               if (CLASSTYPE_TEMPLATE_SPECIALIZATION (inst))
905                 {
906                   /* We already have a full specialization of this partial
907                      instantiation.  Reassign it to the new member
908                      specialization template.  */
909                   spec_entry elt;
910                   spec_entry *entry;
911                   void **slot;
912
913                   elt.tmpl = most_general_template (tmpl);
914                   elt.args = CLASSTYPE_TI_ARGS (inst);
915                   elt.spec = inst;
916
917                   htab_remove_elt (type_specializations, &elt);
918
919                   elt.tmpl = tmpl;
920                   elt.args = INNERMOST_TEMPLATE_ARGS (elt.args);
921
922                   slot = htab_find_slot (type_specializations, &elt, INSERT);
923                   entry = ggc_alloc_spec_entry ();
924                   *entry = elt;
925                   *slot = entry;
926                 }
927               else if (COMPLETE_OR_OPEN_TYPE_P (inst))
928                 /* But if we've had an implicit instantiation, that's a
929                    problem ([temp.expl.spec]/6).  */
930                 error ("specialization %qT after instantiation %qT",
931                        type, inst);
932             }
933
934           /* Mark TYPE as a specialization.  And as a result, we only
935              have one level of template argument for the innermost
936              class template.  */
937           SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
938           CLASSTYPE_TI_ARGS (type)
939             = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type));
940         }
941     }
942   else if (processing_specialization)
943     {
944        /* Someday C++0x may allow for enum template specialization.  */
945       if (cxx_dialect > cxx98 && TREE_CODE (type) == ENUMERAL_TYPE
946           && CLASS_TYPE_P (context) && CLASSTYPE_USE_TEMPLATE (context))
947         pedwarn (input_location, OPT_pedantic, "template specialization "
948                  "of %qD not allowed by ISO C++", type);
949       else
950         {
951           error ("explicit specialization of non-template %qT", type);
952           return error_mark_node;
953         }
954     }
955
956   return type;
957 }
958
959 /* Returns nonzero if we can optimize the retrieval of specializations
960    for TMPL, a TEMPLATE_DECL.  In particular, for such a template, we
961    do not use DECL_TEMPLATE_SPECIALIZATIONS at all.  */
962
963 static inline bool
964 optimize_specialization_lookup_p (tree tmpl)
965 {
966   return (DECL_FUNCTION_TEMPLATE_P (tmpl)
967           && DECL_CLASS_SCOPE_P (tmpl)
968           /* DECL_CLASS_SCOPE_P holds of T::f even if T is a template
969              parameter.  */
970           && CLASS_TYPE_P (DECL_CONTEXT (tmpl))
971           /* The optimized lookup depends on the fact that the
972              template arguments for the member function template apply
973              purely to the containing class, which is not true if the
974              containing class is an explicit or partial
975              specialization.  */
976           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (tmpl))
977           && !DECL_MEMBER_TEMPLATE_P (tmpl)
978           && !DECL_CONV_FN_P (tmpl)
979           /* It is possible to have a template that is not a member
980              template and is not a member of a template class:
981
982              template <typename T>
983              struct S { friend A::f(); };
984
985              Here, the friend function is a template, but the context does
986              not have template information.  The optimized lookup relies
987              on having ARGS be the template arguments for both the class
988              and the function template.  */
989           && !DECL_FRIEND_P (DECL_TEMPLATE_RESULT (tmpl)));
990 }
991
992 /* Retrieve the specialization (in the sense of [temp.spec] - a
993    specialization is either an instantiation or an explicit
994    specialization) of TMPL for the given template ARGS.  If there is
995    no such specialization, return NULL_TREE.  The ARGS are a vector of
996    arguments, or a vector of vectors of arguments, in the case of
997    templates with more than one level of parameters.
998
999    If TMPL is a type template and CLASS_SPECIALIZATIONS_P is true,
1000    then we search for a partial specialization matching ARGS.  This
1001    parameter is ignored if TMPL is not a class template.  */
1002
1003 static tree
1004 retrieve_specialization (tree tmpl, tree args, hashval_t hash)
1005 {
1006   if (args == error_mark_node)
1007     return NULL_TREE;
1008
1009   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
1010
1011   /* There should be as many levels of arguments as there are
1012      levels of parameters.  */
1013   gcc_assert (TMPL_ARGS_DEPTH (args)
1014               == TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl)));
1015
1016   if (optimize_specialization_lookup_p (tmpl))
1017     {
1018       tree class_template;
1019       tree class_specialization;
1020       VEC(tree,gc) *methods;
1021       tree fns;
1022       int idx;
1023
1024       /* The template arguments actually apply to the containing
1025          class.  Find the class specialization with those
1026          arguments.  */
1027       class_template = CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (tmpl));
1028       class_specialization
1029         = retrieve_specialization (class_template, args, 0);
1030       if (!class_specialization)
1031         return NULL_TREE;
1032       /* Now, find the appropriate entry in the CLASSTYPE_METHOD_VEC
1033          for the specialization.  */
1034       idx = class_method_index_for_fn (class_specialization, tmpl);
1035       if (idx == -1)
1036         return NULL_TREE;
1037       /* Iterate through the methods with the indicated name, looking
1038          for the one that has an instance of TMPL.  */
1039       methods = CLASSTYPE_METHOD_VEC (class_specialization);
1040       for (fns = VEC_index (tree, methods, idx); fns; fns = OVL_NEXT (fns))
1041         {
1042           tree fn = OVL_CURRENT (fns);
1043           if (DECL_TEMPLATE_INFO (fn) && DECL_TI_TEMPLATE (fn) == tmpl
1044               /* using-declarations can add base methods to the method vec,
1045                  and we don't want those here.  */
1046               && DECL_CONTEXT (fn) == class_specialization)
1047             return fn;
1048         }
1049       return NULL_TREE;
1050     }
1051   else
1052     {
1053       spec_entry *found;
1054       spec_entry elt;
1055       htab_t specializations;
1056
1057       elt.tmpl = tmpl;
1058       elt.args = args;
1059       elt.spec = NULL_TREE;
1060
1061       if (DECL_CLASS_TEMPLATE_P (tmpl))
1062         specializations = type_specializations;
1063       else
1064         specializations = decl_specializations;
1065
1066       if (hash == 0)
1067         hash = hash_specialization (&elt);
1068       found = (spec_entry *) htab_find_with_hash (specializations, &elt, hash);
1069       if (found)
1070         return found->spec;
1071     }
1072
1073   return NULL_TREE;
1074 }
1075
1076 /* Like retrieve_specialization, but for local declarations.  */
1077
1078 static tree
1079 retrieve_local_specialization (tree tmpl)
1080 {
1081   tree spec;
1082
1083   if (local_specializations == NULL)
1084     return NULL_TREE;
1085
1086   spec = (tree) htab_find_with_hash (local_specializations, tmpl,
1087                                      htab_hash_pointer (tmpl));
1088   return spec ? TREE_PURPOSE (spec) : NULL_TREE;
1089 }
1090
1091 /* Returns nonzero iff DECL is a specialization of TMPL.  */
1092
1093 int
1094 is_specialization_of (tree decl, tree tmpl)
1095 {
1096   tree t;
1097
1098   if (TREE_CODE (decl) == FUNCTION_DECL)
1099     {
1100       for (t = decl;
1101            t != NULL_TREE;
1102            t = DECL_TEMPLATE_INFO (t) ? DECL_TI_TEMPLATE (t) : NULL_TREE)
1103         if (t == tmpl)
1104           return 1;
1105     }
1106   else
1107     {
1108       gcc_assert (TREE_CODE (decl) == TYPE_DECL);
1109
1110       for (t = TREE_TYPE (decl);
1111            t != NULL_TREE;
1112            t = CLASSTYPE_USE_TEMPLATE (t)
1113              ? TREE_TYPE (CLASSTYPE_TI_TEMPLATE (t)) : NULL_TREE)
1114         if (same_type_ignoring_top_level_qualifiers_p (t, TREE_TYPE (tmpl)))
1115           return 1;
1116     }
1117
1118   return 0;
1119 }
1120
1121 /* Returns nonzero iff DECL is a specialization of friend declaration
1122    FRIEND_DECL according to [temp.friend].  */
1123
1124 bool
1125 is_specialization_of_friend (tree decl, tree friend_decl)
1126 {
1127   bool need_template = true;
1128   int template_depth;
1129
1130   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
1131               || TREE_CODE (decl) == TYPE_DECL);
1132
1133   /* For [temp.friend/6] when FRIEND_DECL is an ordinary member function
1134      of a template class, we want to check if DECL is a specialization
1135      if this.  */
1136   if (TREE_CODE (friend_decl) == FUNCTION_DECL
1137       && DECL_TEMPLATE_INFO (friend_decl)
1138       && !DECL_USE_TEMPLATE (friend_decl))
1139     {
1140       /* We want a TEMPLATE_DECL for `is_specialization_of'.  */
1141       friend_decl = DECL_TI_TEMPLATE (friend_decl);
1142       need_template = false;
1143     }
1144   else if (TREE_CODE (friend_decl) == TEMPLATE_DECL
1145            && !PRIMARY_TEMPLATE_P (friend_decl))
1146     need_template = false;
1147
1148   /* There is nothing to do if this is not a template friend.  */
1149   if (TREE_CODE (friend_decl) != TEMPLATE_DECL)
1150     return false;
1151
1152   if (is_specialization_of (decl, friend_decl))
1153     return true;
1154
1155   /* [temp.friend/6]
1156      A member of a class template may be declared to be a friend of a
1157      non-template class.  In this case, the corresponding member of
1158      every specialization of the class template is a friend of the
1159      class granting friendship.
1160
1161      For example, given a template friend declaration
1162
1163        template <class T> friend void A<T>::f();
1164
1165      the member function below is considered a friend
1166
1167        template <> struct A<int> {
1168          void f();
1169        };
1170
1171      For this type of template friend, TEMPLATE_DEPTH below will be
1172      nonzero.  To determine if DECL is a friend of FRIEND, we first
1173      check if the enclosing class is a specialization of another.  */
1174
1175   template_depth = template_class_depth (CP_DECL_CONTEXT (friend_decl));
1176   if (template_depth
1177       && DECL_CLASS_SCOPE_P (decl)
1178       && is_specialization_of (TYPE_NAME (DECL_CONTEXT (decl)),
1179                                CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (friend_decl))))
1180     {
1181       /* Next, we check the members themselves.  In order to handle
1182          a few tricky cases, such as when FRIEND_DECL's are
1183
1184            template <class T> friend void A<T>::g(T t);
1185            template <class T> template <T t> friend void A<T>::h();
1186
1187          and DECL's are
1188
1189            void A<int>::g(int);
1190            template <int> void A<int>::h();
1191
1192          we need to figure out ARGS, the template arguments from
1193          the context of DECL.  This is required for template substitution
1194          of `T' in the function parameter of `g' and template parameter
1195          of `h' in the above examples.  Here ARGS corresponds to `int'.  */
1196
1197       tree context = DECL_CONTEXT (decl);
1198       tree args = NULL_TREE;
1199       int current_depth = 0;
1200
1201       while (current_depth < template_depth)
1202         {
1203           if (CLASSTYPE_TEMPLATE_INFO (context))
1204             {
1205               if (current_depth == 0)
1206                 args = TYPE_TI_ARGS (context);
1207               else
1208                 args = add_to_template_args (TYPE_TI_ARGS (context), args);
1209               current_depth++;
1210             }
1211           context = TYPE_CONTEXT (context);
1212         }
1213
1214       if (TREE_CODE (decl) == FUNCTION_DECL)
1215         {
1216           bool is_template;
1217           tree friend_type;
1218           tree decl_type;
1219           tree friend_args_type;
1220           tree decl_args_type;
1221
1222           /* Make sure that both DECL and FRIEND_DECL are templates or
1223              non-templates.  */
1224           is_template = DECL_TEMPLATE_INFO (decl)
1225                         && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl));
1226           if (need_template ^ is_template)
1227             return false;
1228           else if (is_template)
1229             {
1230               /* If both are templates, check template parameter list.  */
1231               tree friend_parms
1232                 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1233                                          args, tf_none);
1234               if (!comp_template_parms
1235                      (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (decl)),
1236                       friend_parms))
1237                 return false;
1238
1239               decl_type = TREE_TYPE (DECL_TI_TEMPLATE (decl));
1240             }
1241           else
1242             decl_type = TREE_TYPE (decl);
1243
1244           friend_type = tsubst_function_type (TREE_TYPE (friend_decl), args,
1245                                               tf_none, NULL_TREE);
1246           if (friend_type == error_mark_node)
1247             return false;
1248
1249           /* Check if return types match.  */
1250           if (!same_type_p (TREE_TYPE (decl_type), TREE_TYPE (friend_type)))
1251             return false;
1252
1253           /* Check if function parameter types match, ignoring the
1254              `this' parameter.  */
1255           friend_args_type = TYPE_ARG_TYPES (friend_type);
1256           decl_args_type = TYPE_ARG_TYPES (decl_type);
1257           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (friend_decl))
1258             friend_args_type = TREE_CHAIN (friend_args_type);
1259           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1260             decl_args_type = TREE_CHAIN (decl_args_type);
1261
1262           return compparms (decl_args_type, friend_args_type);
1263         }
1264       else
1265         {
1266           /* DECL is a TYPE_DECL */
1267           bool is_template;
1268           tree decl_type = TREE_TYPE (decl);
1269
1270           /* Make sure that both DECL and FRIEND_DECL are templates or
1271              non-templates.  */
1272           is_template
1273             = CLASSTYPE_TEMPLATE_INFO (decl_type)
1274               && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (decl_type));
1275
1276           if (need_template ^ is_template)
1277             return false;
1278           else if (is_template)
1279             {
1280               tree friend_parms;
1281               /* If both are templates, check the name of the two
1282                  TEMPLATE_DECL's first because is_friend didn't.  */
1283               if (DECL_NAME (CLASSTYPE_TI_TEMPLATE (decl_type))
1284                   != DECL_NAME (friend_decl))
1285                 return false;
1286
1287               /* Now check template parameter list.  */
1288               friend_parms
1289                 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1290                                          args, tf_none);
1291               return comp_template_parms
1292                 (DECL_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (decl_type)),
1293                  friend_parms);
1294             }
1295           else
1296             return (DECL_NAME (decl)
1297                     == DECL_NAME (friend_decl));
1298         }
1299     }
1300   return false;
1301 }
1302
1303 /* Register the specialization SPEC as a specialization of TMPL with
1304    the indicated ARGS.  IS_FRIEND indicates whether the specialization
1305    is actually just a friend declaration.  Returns SPEC, or an
1306    equivalent prior declaration, if available.  */
1307
1308 static tree
1309 register_specialization (tree spec, tree tmpl, tree args, bool is_friend,
1310                          hashval_t hash)
1311 {
1312   tree fn;
1313   void **slot = NULL;
1314   spec_entry elt;
1315
1316   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL && DECL_P (spec));
1317
1318   if (TREE_CODE (spec) == FUNCTION_DECL
1319       && uses_template_parms (DECL_TI_ARGS (spec)))
1320     /* This is the FUNCTION_DECL for a partial instantiation.  Don't
1321        register it; we want the corresponding TEMPLATE_DECL instead.
1322        We use `uses_template_parms (DECL_TI_ARGS (spec))' rather than
1323        the more obvious `uses_template_parms (spec)' to avoid problems
1324        with default function arguments.  In particular, given
1325        something like this:
1326
1327           template <class T> void f(T t1, T t = T())
1328
1329        the default argument expression is not substituted for in an
1330        instantiation unless and until it is actually needed.  */
1331     return spec;
1332
1333   if (optimize_specialization_lookup_p (tmpl))
1334     /* We don't put these specializations in the hash table, but we might
1335        want to give an error about a mismatch.  */
1336     fn = retrieve_specialization (tmpl, args, 0);
1337   else
1338     {
1339       elt.tmpl = tmpl;
1340       elt.args = args;
1341       elt.spec = spec;
1342
1343       if (hash == 0)
1344         hash = hash_specialization (&elt);
1345
1346       slot =
1347         htab_find_slot_with_hash (decl_specializations, &elt, hash, INSERT);
1348       if (*slot)
1349         fn = ((spec_entry *) *slot)->spec;
1350       else
1351         fn = NULL_TREE;
1352     }
1353
1354   /* We can sometimes try to re-register a specialization that we've
1355      already got.  In particular, regenerate_decl_from_template calls
1356      duplicate_decls which will update the specialization list.  But,
1357      we'll still get called again here anyhow.  It's more convenient
1358      to simply allow this than to try to prevent it.  */
1359   if (fn == spec)
1360     return spec;
1361   else if (fn && DECL_TEMPLATE_SPECIALIZATION (spec))
1362     {
1363       if (DECL_TEMPLATE_INSTANTIATION (fn))
1364         {
1365           if (DECL_ODR_USED (fn)
1366               || DECL_EXPLICIT_INSTANTIATION (fn))
1367             {
1368               error ("specialization of %qD after instantiation",
1369                      fn);
1370               return error_mark_node;
1371             }
1372           else
1373             {
1374               tree clone;
1375               /* This situation should occur only if the first
1376                  specialization is an implicit instantiation, the
1377                  second is an explicit specialization, and the
1378                  implicit instantiation has not yet been used.  That
1379                  situation can occur if we have implicitly
1380                  instantiated a member function and then specialized
1381                  it later.
1382
1383                  We can also wind up here if a friend declaration that
1384                  looked like an instantiation turns out to be a
1385                  specialization:
1386
1387                    template <class T> void foo(T);
1388                    class S { friend void foo<>(int) };
1389                    template <> void foo(int);
1390
1391                  We transform the existing DECL in place so that any
1392                  pointers to it become pointers to the updated
1393                  declaration.
1394
1395                  If there was a definition for the template, but not
1396                  for the specialization, we want this to look as if
1397                  there were no definition, and vice versa.  */
1398               DECL_INITIAL (fn) = NULL_TREE;
1399               duplicate_decls (spec, fn, is_friend);
1400               /* The call to duplicate_decls will have applied
1401                  [temp.expl.spec]:
1402
1403                    An explicit specialization of a function template
1404                    is inline only if it is explicitly declared to be,
1405                    and independently of whether its function template
1406                    is.
1407
1408                 to the primary function; now copy the inline bits to
1409                 the various clones.  */
1410               FOR_EACH_CLONE (clone, fn)
1411                 {
1412                   DECL_DECLARED_INLINE_P (clone)
1413                     = DECL_DECLARED_INLINE_P (fn);
1414                   DECL_SOURCE_LOCATION (clone)
1415                     = DECL_SOURCE_LOCATION (fn);
1416                 }
1417               check_specialization_namespace (fn);
1418
1419               return fn;
1420             }
1421         }
1422       else if (DECL_TEMPLATE_SPECIALIZATION (fn))
1423         {
1424           if (!duplicate_decls (spec, fn, is_friend) && DECL_INITIAL (spec))
1425             /* Dup decl failed, but this is a new definition. Set the
1426                line number so any errors match this new
1427                definition.  */
1428             DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (spec);
1429
1430           return fn;
1431         }
1432     }
1433   else if (fn)
1434     return duplicate_decls (spec, fn, is_friend);
1435
1436   /* A specialization must be declared in the same namespace as the
1437      template it is specializing.  */
1438   if (DECL_TEMPLATE_SPECIALIZATION (spec)
1439       && !check_specialization_namespace (tmpl))
1440     DECL_CONTEXT (spec) = DECL_CONTEXT (tmpl);
1441
1442   if (slot != NULL /* !optimize_specialization_lookup_p (tmpl) */)
1443     {
1444       spec_entry *entry = ggc_alloc_spec_entry ();
1445       gcc_assert (tmpl && args && spec);
1446       *entry = elt;
1447       *slot = entry;
1448       if (TREE_CODE (spec) == FUNCTION_DECL && DECL_NAMESPACE_SCOPE_P (spec)
1449           && PRIMARY_TEMPLATE_P (tmpl)
1450           && DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (tmpl)) == NULL_TREE)
1451         /* TMPL is a forward declaration of a template function; keep a list
1452            of all specializations in case we need to reassign them to a friend
1453            template later in tsubst_friend_function.  */
1454         DECL_TEMPLATE_INSTANTIATIONS (tmpl)
1455           = tree_cons (args, spec, DECL_TEMPLATE_INSTANTIATIONS (tmpl));
1456     }
1457
1458   return spec;
1459 }
1460
1461 /* Returns true iff two spec_entry nodes are equivalent.  Only compares the
1462    TMPL and ARGS members, ignores SPEC.  */
1463
1464 static int
1465 eq_specializations (const void *p1, const void *p2)
1466 {
1467   const spec_entry *e1 = (const spec_entry *)p1;
1468   const spec_entry *e2 = (const spec_entry *)p2;
1469
1470   return (e1->tmpl == e2->tmpl
1471           && comp_template_args (e1->args, e2->args));
1472 }
1473
1474 /* Returns a hash for a template TMPL and template arguments ARGS.  */
1475
1476 static hashval_t
1477 hash_tmpl_and_args (tree tmpl, tree args)
1478 {
1479   hashval_t val = DECL_UID (tmpl);
1480   return iterative_hash_template_arg (args, val);
1481 }
1482
1483 /* Returns a hash for a spec_entry node based on the TMPL and ARGS members,
1484    ignoring SPEC.  */
1485
1486 static hashval_t
1487 hash_specialization (const void *p)
1488 {
1489   const spec_entry *e = (const spec_entry *)p;
1490   return hash_tmpl_and_args (e->tmpl, e->args);
1491 }
1492
1493 /* Recursively calculate a hash value for a template argument ARG, for use
1494    in the hash tables of template specializations.  */
1495
1496 hashval_t
1497 iterative_hash_template_arg (tree arg, hashval_t val)
1498 {
1499   unsigned HOST_WIDE_INT i;
1500   enum tree_code code;
1501   char tclass;
1502
1503   if (arg == NULL_TREE)
1504     return iterative_hash_object (arg, val);
1505
1506   if (!TYPE_P (arg))
1507     STRIP_NOPS (arg);
1508
1509   if (TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
1510     /* We can get one of these when re-hashing a previous entry in the middle
1511        of substituting into a pack expansion.  Just look through it.  */
1512     arg = ARGUMENT_PACK_SELECT_FROM_PACK (arg);
1513
1514   code = TREE_CODE (arg);
1515   tclass = TREE_CODE_CLASS (code);
1516
1517   val = iterative_hash_object (code, val);
1518
1519   switch (code)
1520     {
1521     case ERROR_MARK:
1522       return val;
1523
1524     case IDENTIFIER_NODE:
1525       return iterative_hash_object (IDENTIFIER_HASH_VALUE (arg), val);
1526
1527     case TREE_VEC:
1528       {
1529         int i, len = TREE_VEC_LENGTH (arg);
1530         for (i = 0; i < len; ++i)
1531           val = iterative_hash_template_arg (TREE_VEC_ELT (arg, i), val);
1532         return val;
1533       }
1534
1535     case TYPE_PACK_EXPANSION:
1536     case EXPR_PACK_EXPANSION:
1537       val = iterative_hash_template_arg (PACK_EXPANSION_PATTERN (arg), val);
1538       return iterative_hash_template_arg (PACK_EXPANSION_EXTRA_ARGS (arg), val);
1539
1540     case TYPE_ARGUMENT_PACK:
1541     case NONTYPE_ARGUMENT_PACK:
1542       return iterative_hash_template_arg (ARGUMENT_PACK_ARGS (arg), val);
1543
1544     case TREE_LIST:
1545       for (; arg; arg = TREE_CHAIN (arg))
1546         val = iterative_hash_template_arg (TREE_VALUE (arg), val);
1547       return val;
1548
1549     case OVERLOAD:
1550       for (; arg; arg = OVL_NEXT (arg))
1551         val = iterative_hash_template_arg (OVL_CURRENT (arg), val);
1552       return val;
1553
1554     case CONSTRUCTOR:
1555       {
1556         tree field, value;
1557         FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (arg), i, field, value)
1558           {
1559             val = iterative_hash_template_arg (field, val);
1560             val = iterative_hash_template_arg (value, val);
1561           }
1562         return val;
1563       }
1564
1565     case PARM_DECL:
1566       if (!DECL_ARTIFICIAL (arg))
1567         {
1568           val = iterative_hash_object (DECL_PARM_INDEX (arg), val);
1569           val = iterative_hash_object (DECL_PARM_LEVEL (arg), val);
1570         }
1571       return iterative_hash_template_arg (TREE_TYPE (arg), val);
1572
1573     case TARGET_EXPR:
1574       return iterative_hash_template_arg (TARGET_EXPR_INITIAL (arg), val);
1575
1576     case PTRMEM_CST:
1577       val = iterative_hash_template_arg (PTRMEM_CST_CLASS (arg), val);
1578       return iterative_hash_template_arg (PTRMEM_CST_MEMBER (arg), val);
1579
1580     case TEMPLATE_PARM_INDEX:
1581       val = iterative_hash_template_arg
1582         (TREE_TYPE (TEMPLATE_PARM_DECL (arg)), val);
1583       val = iterative_hash_object (TEMPLATE_PARM_LEVEL (arg), val);
1584       return iterative_hash_object (TEMPLATE_PARM_IDX (arg), val);
1585
1586     case TRAIT_EXPR:
1587       val = iterative_hash_object (TRAIT_EXPR_KIND (arg), val);
1588       val = iterative_hash_template_arg (TRAIT_EXPR_TYPE1 (arg), val);
1589       return iterative_hash_template_arg (TRAIT_EXPR_TYPE2 (arg), val);
1590
1591     case BASELINK:
1592       val = iterative_hash_template_arg (BINFO_TYPE (BASELINK_BINFO (arg)),
1593                                          val);
1594       return iterative_hash_template_arg (DECL_NAME (get_first_fn (arg)),
1595                                           val);
1596
1597     case MODOP_EXPR:
1598       val = iterative_hash_template_arg (TREE_OPERAND (arg, 0), val);
1599       code = TREE_CODE (TREE_OPERAND (arg, 1));
1600       val = iterative_hash_object (code, val);
1601       return iterative_hash_template_arg (TREE_OPERAND (arg, 2), val);
1602
1603     case LAMBDA_EXPR:
1604       /* A lambda can't appear in a template arg, but don't crash on
1605          erroneous input.  */
1606       gcc_assert (seen_error ());
1607       return val;
1608
1609     case CAST_EXPR:
1610     case IMPLICIT_CONV_EXPR:
1611     case STATIC_CAST_EXPR:
1612     case REINTERPRET_CAST_EXPR:
1613     case CONST_CAST_EXPR:
1614     case DYNAMIC_CAST_EXPR:
1615     case NEW_EXPR:
1616       val = iterative_hash_template_arg (TREE_TYPE (arg), val);
1617       /* Now hash operands as usual.  */
1618       break;
1619
1620     default:
1621       break;
1622     }
1623
1624   switch (tclass)
1625     {
1626     case tcc_type:
1627       if (TYPE_CANONICAL (arg))
1628         return iterative_hash_object (TYPE_HASH (TYPE_CANONICAL (arg)),
1629                                       val);
1630       else if (TREE_CODE (arg) == DECLTYPE_TYPE)
1631         return iterative_hash_template_arg (DECLTYPE_TYPE_EXPR (arg), val);
1632       /* Otherwise just compare the types during lookup.  */
1633       return val;
1634
1635     case tcc_declaration:
1636     case tcc_constant:
1637       return iterative_hash_expr (arg, val);
1638
1639     default:
1640       gcc_assert (IS_EXPR_CODE_CLASS (tclass));
1641       {
1642         unsigned n = cp_tree_operand_length (arg);
1643         for (i = 0; i < n; ++i)
1644           val = iterative_hash_template_arg (TREE_OPERAND (arg, i), val);
1645         return val;
1646       }
1647     }
1648   gcc_unreachable ();
1649   return 0;
1650 }
1651
1652 /* Unregister the specialization SPEC as a specialization of TMPL.
1653    Replace it with NEW_SPEC, if NEW_SPEC is non-NULL.  Returns true
1654    if the SPEC was listed as a specialization of TMPL.
1655
1656    Note that SPEC has been ggc_freed, so we can't look inside it.  */
1657
1658 bool
1659 reregister_specialization (tree spec, tree tinfo, tree new_spec)
1660 {
1661   spec_entry *entry;
1662   spec_entry elt;
1663
1664   elt.tmpl = most_general_template (TI_TEMPLATE (tinfo));
1665   elt.args = TI_ARGS (tinfo);
1666   elt.spec = NULL_TREE;
1667
1668   entry = (spec_entry *) htab_find (decl_specializations, &elt);
1669   if (entry != NULL)
1670     {
1671       gcc_assert (entry->spec == spec || entry->spec == new_spec);
1672       gcc_assert (new_spec != NULL_TREE);
1673       entry->spec = new_spec;
1674       return 1;
1675     }
1676
1677   return 0;
1678 }
1679
1680 /* Compare an entry in the local specializations hash table P1 (which
1681    is really a pointer to a TREE_LIST) with P2 (which is really a
1682    DECL).  */
1683
1684 static int
1685 eq_local_specializations (const void *p1, const void *p2)
1686 {
1687   return TREE_VALUE ((const_tree) p1) == (const_tree) p2;
1688 }
1689
1690 /* Hash P1, an entry in the local specializations table.  */
1691
1692 static hashval_t
1693 hash_local_specialization (const void* p1)
1694 {
1695   return htab_hash_pointer (TREE_VALUE ((const_tree) p1));
1696 }
1697
1698 /* Like register_specialization, but for local declarations.  We are
1699    registering SPEC, an instantiation of TMPL.  */
1700
1701 static void
1702 register_local_specialization (tree spec, tree tmpl)
1703 {
1704   void **slot;
1705
1706   slot = htab_find_slot_with_hash (local_specializations, tmpl,
1707                                    htab_hash_pointer (tmpl), INSERT);
1708   *slot = build_tree_list (spec, tmpl);
1709 }
1710
1711 /* TYPE is a class type.  Returns true if TYPE is an explicitly
1712    specialized class.  */
1713
1714 bool
1715 explicit_class_specialization_p (tree type)
1716 {
1717   if (!CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
1718     return false;
1719   return !uses_template_parms (CLASSTYPE_TI_ARGS (type));
1720 }
1721
1722 /* Print the list of functions at FNS, going through all the overloads
1723    for each element of the list.  Alternatively, FNS can not be a
1724    TREE_LIST, in which case it will be printed together with all the
1725    overloads.
1726
1727    MORE and *STR should respectively be FALSE and NULL when the function
1728    is called from the outside.  They are used internally on recursive
1729    calls.  print_candidates manages the two parameters and leaves NULL
1730    in *STR when it ends.  */
1731
1732 static void
1733 print_candidates_1 (tree fns, bool more, const char **str)
1734 {
1735   tree fn, fn2;
1736   char *spaces = NULL;
1737
1738   for (fn = fns; fn; fn = OVL_NEXT (fn))
1739     if (TREE_CODE (fn) == TREE_LIST)
1740       {
1741         for (fn2 = fn; fn2 != NULL_TREE; fn2 = TREE_CHAIN (fn2))
1742           print_candidates_1 (TREE_VALUE (fn2),
1743                               TREE_CHAIN (fn2) || more, str);
1744       }
1745     else
1746       {
1747         if (!*str)
1748           {
1749             /* Pick the prefix string.  */
1750             if (!more && !OVL_NEXT (fns))
1751               {
1752                 error ("candidate is: %+#D", OVL_CURRENT (fn));
1753                 continue;
1754               }
1755
1756             *str = _("candidates are:");
1757             spaces = get_spaces (*str);
1758           }
1759         error ("%s %+#D", *str, OVL_CURRENT (fn));
1760         *str = spaces ? spaces : *str;
1761       }
1762
1763   if (!more)
1764     {
1765       free (spaces);
1766       *str = NULL;
1767     }
1768 }
1769
1770 /* Print the list of candidate FNS in an error message.  FNS can also
1771    be a TREE_LIST of non-functions in the case of an ambiguous lookup.  */
1772
1773 void
1774 print_candidates (tree fns)
1775 {
1776   const char *str = NULL;
1777   print_candidates_1 (fns, false, &str);
1778   gcc_assert (str == NULL);
1779 }
1780
1781 /* Returns the template (one of the functions given by TEMPLATE_ID)
1782    which can be specialized to match the indicated DECL with the
1783    explicit template args given in TEMPLATE_ID.  The DECL may be
1784    NULL_TREE if none is available.  In that case, the functions in
1785    TEMPLATE_ID are non-members.
1786
1787    If NEED_MEMBER_TEMPLATE is nonzero the function is known to be a
1788    specialization of a member template.
1789
1790    The TEMPLATE_COUNT is the number of references to qualifying
1791    template classes that appeared in the name of the function. See
1792    check_explicit_specialization for a more accurate description.
1793
1794    TSK indicates what kind of template declaration (if any) is being
1795    declared.  TSK_TEMPLATE indicates that the declaration given by
1796    DECL, though a FUNCTION_DECL, has template parameters, and is
1797    therefore a template function.
1798
1799    The template args (those explicitly specified and those deduced)
1800    are output in a newly created vector *TARGS_OUT.
1801
1802    If it is impossible to determine the result, an error message is
1803    issued.  The error_mark_node is returned to indicate failure.  */
1804
1805 static tree
1806 determine_specialization (tree template_id,
1807                           tree decl,
1808                           tree* targs_out,
1809                           int need_member_template,
1810                           int template_count,
1811                           tmpl_spec_kind tsk)
1812 {
1813   tree fns;
1814   tree targs;
1815   tree explicit_targs;
1816   tree candidates = NULL_TREE;
1817   /* A TREE_LIST of templates of which DECL may be a specialization.
1818      The TREE_VALUE of each node is a TEMPLATE_DECL.  The
1819      corresponding TREE_PURPOSE is the set of template arguments that,
1820      when used to instantiate the template, would produce a function
1821      with the signature of DECL.  */
1822   tree templates = NULL_TREE;
1823   int header_count;
1824   cp_binding_level *b;
1825
1826   *targs_out = NULL_TREE;
1827
1828   if (template_id == error_mark_node || decl == error_mark_node)
1829     return error_mark_node;
1830
1831   fns = TREE_OPERAND (template_id, 0);
1832   explicit_targs = TREE_OPERAND (template_id, 1);
1833
1834   if (fns == error_mark_node)
1835     return error_mark_node;
1836
1837   /* Check for baselinks.  */
1838   if (BASELINK_P (fns))
1839     fns = BASELINK_FUNCTIONS (fns);
1840
1841   if (!is_overloaded_fn (fns))
1842     {
1843       error ("%qD is not a function template", fns);
1844       return error_mark_node;
1845     }
1846
1847   /* Count the number of template headers specified for this
1848      specialization.  */
1849   header_count = 0;
1850   for (b = current_binding_level;
1851        b->kind == sk_template_parms;
1852        b = b->level_chain)
1853     ++header_count;
1854
1855   for (; fns; fns = OVL_NEXT (fns))
1856     {
1857       tree fn = OVL_CURRENT (fns);
1858
1859       if (TREE_CODE (fn) == TEMPLATE_DECL)
1860         {
1861           tree decl_arg_types;
1862           tree fn_arg_types;
1863
1864           /* In case of explicit specialization, we need to check if
1865              the number of template headers appearing in the specialization
1866              is correct. This is usually done in check_explicit_specialization,
1867              but the check done there cannot be exhaustive when specializing
1868              member functions. Consider the following code:
1869
1870              template <> void A<int>::f(int);
1871              template <> template <> void A<int>::f(int);
1872
1873              Assuming that A<int> is not itself an explicit specialization
1874              already, the first line specializes "f" which is a non-template
1875              member function, whilst the second line specializes "f" which
1876              is a template member function. So both lines are syntactically
1877              correct, and check_explicit_specialization does not reject
1878              them.
1879
1880              Here, we can do better, as we are matching the specialization
1881              against the declarations. We count the number of template
1882              headers, and we check if they match TEMPLATE_COUNT + 1
1883              (TEMPLATE_COUNT is the number of qualifying template classes,
1884              plus there must be another header for the member template
1885              itself).
1886
1887              Notice that if header_count is zero, this is not a
1888              specialization but rather a template instantiation, so there
1889              is no check we can perform here.  */
1890           if (header_count && header_count != template_count + 1)
1891             continue;
1892
1893           /* Check that the number of template arguments at the
1894              innermost level for DECL is the same as for FN.  */
1895           if (current_binding_level->kind == sk_template_parms
1896               && !current_binding_level->explicit_spec_p
1897               && (TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (fn))
1898                   != TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS
1899                                       (current_template_parms))))
1900             continue;
1901
1902           /* DECL might be a specialization of FN.  */
1903           decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1904           fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
1905
1906           /* For a non-static member function, we need to make sure
1907              that the const qualification is the same.  Since
1908              get_bindings does not try to merge the "this" parameter,
1909              we must do the comparison explicitly.  */
1910           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1911               && !same_type_p (TREE_VALUE (fn_arg_types),
1912                                TREE_VALUE (decl_arg_types)))
1913             continue;
1914
1915           /* Skip the "this" parameter and, for constructors of
1916              classes with virtual bases, the VTT parameter.  A
1917              full specialization of a constructor will have a VTT
1918              parameter, but a template never will.  */ 
1919           decl_arg_types 
1920             = skip_artificial_parms_for (decl, decl_arg_types);
1921           fn_arg_types 
1922             = skip_artificial_parms_for (fn, fn_arg_types);
1923
1924           /* Check that the number of function parameters matches.
1925              For example,
1926                template <class T> void f(int i = 0);
1927                template <> void f<int>();
1928              The specialization f<int> is invalid but is not caught
1929              by get_bindings below.  */
1930           if (list_length (fn_arg_types) != list_length (decl_arg_types))
1931             continue;
1932
1933           /* Function templates cannot be specializations; there are
1934              no partial specializations of functions.  Therefore, if
1935              the type of DECL does not match FN, there is no
1936              match.  */
1937           if (tsk == tsk_template)
1938             {
1939               if (compparms (fn_arg_types, decl_arg_types))
1940                 candidates = tree_cons (NULL_TREE, fn, candidates);
1941               continue;
1942             }
1943
1944           /* See whether this function might be a specialization of this
1945              template.  */
1946           targs = get_bindings (fn, decl, explicit_targs, /*check_ret=*/true);
1947
1948           if (!targs)
1949             /* We cannot deduce template arguments that when used to
1950                specialize TMPL will produce DECL.  */
1951             continue;
1952
1953           /* Save this template, and the arguments deduced.  */
1954           templates = tree_cons (targs, fn, templates);
1955         }
1956       else if (need_member_template)
1957         /* FN is an ordinary member function, and we need a
1958            specialization of a member template.  */
1959         ;
1960       else if (TREE_CODE (fn) != FUNCTION_DECL)
1961         /* We can get IDENTIFIER_NODEs here in certain erroneous
1962            cases.  */
1963         ;
1964       else if (!DECL_FUNCTION_MEMBER_P (fn))
1965         /* This is just an ordinary non-member function.  Nothing can
1966            be a specialization of that.  */
1967         ;
1968       else if (DECL_ARTIFICIAL (fn))
1969         /* Cannot specialize functions that are created implicitly.  */
1970         ;
1971       else
1972         {
1973           tree decl_arg_types;
1974
1975           /* This is an ordinary member function.  However, since
1976              we're here, we can assume it's enclosing class is a
1977              template class.  For example,
1978
1979                template <typename T> struct S { void f(); };
1980                template <> void S<int>::f() {}
1981
1982              Here, S<int>::f is a non-template, but S<int> is a
1983              template class.  If FN has the same type as DECL, we
1984              might be in business.  */
1985
1986           if (!DECL_TEMPLATE_INFO (fn))
1987             /* Its enclosing class is an explicit specialization
1988                of a template class.  This is not a candidate.  */
1989             continue;
1990
1991           if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
1992                             TREE_TYPE (TREE_TYPE (fn))))
1993             /* The return types differ.  */
1994             continue;
1995
1996           /* Adjust the type of DECL in case FN is a static member.  */
1997           decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1998           if (DECL_STATIC_FUNCTION_P (fn)
1999               && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2000             decl_arg_types = TREE_CHAIN (decl_arg_types);
2001
2002           if (compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
2003                          decl_arg_types))
2004             /* They match!  */
2005             candidates = tree_cons (NULL_TREE, fn, candidates);
2006         }
2007     }
2008
2009   if (templates && TREE_CHAIN (templates))
2010     {
2011       /* We have:
2012
2013            [temp.expl.spec]
2014
2015            It is possible for a specialization with a given function
2016            signature to be instantiated from more than one function
2017            template.  In such cases, explicit specification of the
2018            template arguments must be used to uniquely identify the
2019            function template specialization being specialized.
2020
2021          Note that here, there's no suggestion that we're supposed to
2022          determine which of the candidate templates is most
2023          specialized.  However, we, also have:
2024
2025            [temp.func.order]
2026
2027            Partial ordering of overloaded function template
2028            declarations is used in the following contexts to select
2029            the function template to which a function template
2030            specialization refers:
2031
2032            -- when an explicit specialization refers to a function
2033               template.
2034
2035          So, we do use the partial ordering rules, at least for now.
2036          This extension can only serve to make invalid programs valid,
2037          so it's safe.  And, there is strong anecdotal evidence that
2038          the committee intended the partial ordering rules to apply;
2039          the EDG front end has that behavior, and John Spicer claims
2040          that the committee simply forgot to delete the wording in
2041          [temp.expl.spec].  */
2042       tree tmpl = most_specialized_instantiation (templates);
2043       if (tmpl != error_mark_node)
2044         {
2045           templates = tmpl;
2046           TREE_CHAIN (templates) = NULL_TREE;
2047         }
2048     }
2049
2050   if (templates == NULL_TREE && candidates == NULL_TREE)
2051     {
2052       error ("template-id %qD for %q+D does not match any template "
2053              "declaration", template_id, decl);
2054       if (header_count && header_count != template_count + 1)
2055         inform (input_location, "saw %d %<template<>%>, need %d for "
2056                 "specializing a member function template",
2057                 header_count, template_count + 1);
2058       return error_mark_node;
2059     }
2060   else if ((templates && TREE_CHAIN (templates))
2061            || (candidates && TREE_CHAIN (candidates))
2062            || (templates && candidates))
2063     {
2064       error ("ambiguous template specialization %qD for %q+D",
2065              template_id, decl);
2066       candidates = chainon (candidates, templates);
2067       print_candidates (candidates);
2068       return error_mark_node;
2069     }
2070
2071   /* We have one, and exactly one, match.  */
2072   if (candidates)
2073     {
2074       tree fn = TREE_VALUE (candidates);
2075       *targs_out = copy_node (DECL_TI_ARGS (fn));
2076       /* DECL is a re-declaration or partial instantiation of a template
2077          function.  */
2078       if (TREE_CODE (fn) == TEMPLATE_DECL)
2079         return fn;
2080       /* It was a specialization of an ordinary member function in a
2081          template class.  */
2082       return DECL_TI_TEMPLATE (fn);
2083     }
2084
2085   /* It was a specialization of a template.  */
2086   targs = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (TREE_VALUE (templates)));
2087   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (targs))
2088     {
2089       *targs_out = copy_node (targs);
2090       SET_TMPL_ARGS_LEVEL (*targs_out,
2091                            TMPL_ARGS_DEPTH (*targs_out),
2092                            TREE_PURPOSE (templates));
2093     }
2094   else
2095     *targs_out = TREE_PURPOSE (templates);
2096   return TREE_VALUE (templates);
2097 }
2098
2099 /* Returns a chain of parameter types, exactly like the SPEC_TYPES,
2100    but with the default argument values filled in from those in the
2101    TMPL_TYPES.  */
2102
2103 static tree
2104 copy_default_args_to_explicit_spec_1 (tree spec_types,
2105                                       tree tmpl_types)
2106 {
2107   tree new_spec_types;
2108
2109   if (!spec_types)
2110     return NULL_TREE;
2111
2112   if (spec_types == void_list_node)
2113     return void_list_node;
2114
2115   /* Substitute into the rest of the list.  */
2116   new_spec_types =
2117     copy_default_args_to_explicit_spec_1 (TREE_CHAIN (spec_types),
2118                                           TREE_CHAIN (tmpl_types));
2119
2120   /* Add the default argument for this parameter.  */
2121   return hash_tree_cons (TREE_PURPOSE (tmpl_types),
2122                          TREE_VALUE (spec_types),
2123                          new_spec_types);
2124 }
2125
2126 /* DECL is an explicit specialization.  Replicate default arguments
2127    from the template it specializes.  (That way, code like:
2128
2129      template <class T> void f(T = 3);
2130      template <> void f(double);
2131      void g () { f (); }
2132
2133    works, as required.)  An alternative approach would be to look up
2134    the correct default arguments at the call-site, but this approach
2135    is consistent with how implicit instantiations are handled.  */
2136
2137 static void
2138 copy_default_args_to_explicit_spec (tree decl)
2139 {
2140   tree tmpl;
2141   tree spec_types;
2142   tree tmpl_types;
2143   tree new_spec_types;
2144   tree old_type;
2145   tree new_type;
2146   tree t;
2147   tree object_type = NULL_TREE;
2148   tree in_charge = NULL_TREE;
2149   tree vtt = NULL_TREE;
2150
2151   /* See if there's anything we need to do.  */
2152   tmpl = DECL_TI_TEMPLATE (decl);
2153   tmpl_types = TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (tmpl)));
2154   for (t = tmpl_types; t; t = TREE_CHAIN (t))
2155     if (TREE_PURPOSE (t))
2156       break;
2157   if (!t)
2158     return;
2159
2160   old_type = TREE_TYPE (decl);
2161   spec_types = TYPE_ARG_TYPES (old_type);
2162
2163   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2164     {
2165       /* Remove the this pointer, but remember the object's type for
2166          CV quals.  */
2167       object_type = TREE_TYPE (TREE_VALUE (spec_types));
2168       spec_types = TREE_CHAIN (spec_types);
2169       tmpl_types = TREE_CHAIN (tmpl_types);
2170
2171       if (DECL_HAS_IN_CHARGE_PARM_P (decl))
2172         {
2173           /* DECL may contain more parameters than TMPL due to the extra
2174              in-charge parameter in constructors and destructors.  */
2175           in_charge = spec_types;
2176           spec_types = TREE_CHAIN (spec_types);
2177         }
2178       if (DECL_HAS_VTT_PARM_P (decl))
2179         {
2180           vtt = spec_types;
2181           spec_types = TREE_CHAIN (spec_types);
2182         }
2183     }
2184
2185   /* Compute the merged default arguments.  */
2186   new_spec_types =
2187     copy_default_args_to_explicit_spec_1 (spec_types, tmpl_types);
2188
2189   /* Compute the new FUNCTION_TYPE.  */
2190   if (object_type)
2191     {
2192       if (vtt)
2193         new_spec_types = hash_tree_cons (TREE_PURPOSE (vtt),
2194                                          TREE_VALUE (vtt),
2195                                          new_spec_types);
2196
2197       if (in_charge)
2198         /* Put the in-charge parameter back.  */
2199         new_spec_types = hash_tree_cons (TREE_PURPOSE (in_charge),
2200                                          TREE_VALUE (in_charge),
2201                                          new_spec_types);
2202
2203       new_type = build_method_type_directly (object_type,
2204                                              TREE_TYPE (old_type),
2205                                              new_spec_types);
2206     }
2207   else
2208     new_type = build_function_type (TREE_TYPE (old_type),
2209                                     new_spec_types);
2210   new_type = cp_build_type_attribute_variant (new_type,
2211                                               TYPE_ATTRIBUTES (old_type));
2212   new_type = build_exception_variant (new_type,
2213                                       TYPE_RAISES_EXCEPTIONS (old_type));
2214   TREE_TYPE (decl) = new_type;
2215 }
2216
2217 /* Check to see if the function just declared, as indicated in
2218    DECLARATOR, and in DECL, is a specialization of a function
2219    template.  We may also discover that the declaration is an explicit
2220    instantiation at this point.
2221
2222    Returns DECL, or an equivalent declaration that should be used
2223    instead if all goes well.  Issues an error message if something is
2224    amiss.  Returns error_mark_node if the error is not easily
2225    recoverable.
2226
2227    FLAGS is a bitmask consisting of the following flags:
2228
2229    2: The function has a definition.
2230    4: The function is a friend.
2231
2232    The TEMPLATE_COUNT is the number of references to qualifying
2233    template classes that appeared in the name of the function.  For
2234    example, in
2235
2236      template <class T> struct S { void f(); };
2237      void S<int>::f();
2238
2239    the TEMPLATE_COUNT would be 1.  However, explicitly specialized
2240    classes are not counted in the TEMPLATE_COUNT, so that in
2241
2242      template <class T> struct S {};
2243      template <> struct S<int> { void f(); }
2244      template <> void S<int>::f();
2245
2246    the TEMPLATE_COUNT would be 0.  (Note that this declaration is
2247    invalid; there should be no template <>.)
2248
2249    If the function is a specialization, it is marked as such via
2250    DECL_TEMPLATE_SPECIALIZATION.  Furthermore, its DECL_TEMPLATE_INFO
2251    is set up correctly, and it is added to the list of specializations
2252    for that template.  */
2253
2254 tree
2255 check_explicit_specialization (tree declarator,
2256                                tree decl,
2257                                int template_count,
2258                                int flags)
2259 {
2260   int have_def = flags & 2;
2261   int is_friend = flags & 4;
2262   int specialization = 0;
2263   int explicit_instantiation = 0;
2264   int member_specialization = 0;
2265   tree ctype = DECL_CLASS_CONTEXT (decl);
2266   tree dname = DECL_NAME (decl);
2267   tmpl_spec_kind tsk;
2268
2269   if (is_friend)
2270     {
2271       if (!processing_specialization)
2272         tsk = tsk_none;
2273       else
2274         tsk = tsk_excessive_parms;
2275     }
2276   else
2277     tsk = current_tmpl_spec_kind (template_count);
2278
2279   switch (tsk)
2280     {
2281     case tsk_none:
2282       if (processing_specialization)
2283         {
2284           specialization = 1;
2285           SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2286         }
2287       else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
2288         {
2289           if (is_friend)
2290             /* This could be something like:
2291
2292                template <class T> void f(T);
2293                class S { friend void f<>(int); }  */
2294             specialization = 1;
2295           else
2296             {
2297               /* This case handles bogus declarations like template <>
2298                  template <class T> void f<int>(); */
2299
2300               error ("template-id %qD in declaration of primary template",
2301                      declarator);
2302               return decl;
2303             }
2304         }
2305       break;
2306
2307     case tsk_invalid_member_spec:
2308       /* The error has already been reported in
2309          check_specialization_scope.  */
2310       return error_mark_node;
2311
2312     case tsk_invalid_expl_inst:
2313       error ("template parameter list used in explicit instantiation");
2314
2315       /* Fall through.  */
2316
2317     case tsk_expl_inst:
2318       if (have_def)
2319         error ("definition provided for explicit instantiation");
2320
2321       explicit_instantiation = 1;
2322       break;
2323
2324     case tsk_excessive_parms:
2325     case tsk_insufficient_parms:
2326       if (tsk == tsk_excessive_parms)
2327         error ("too many template parameter lists in declaration of %qD",
2328                decl);
2329       else if (template_header_count)
2330         error("too few template parameter lists in declaration of %qD", decl);
2331       else
2332         error("explicit specialization of %qD must be introduced by "
2333               "%<template <>%>", decl);
2334
2335       /* Fall through.  */
2336     case tsk_expl_spec:
2337       SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2338       if (ctype)
2339         member_specialization = 1;
2340       else
2341         specialization = 1;
2342       break;
2343
2344     case tsk_template:
2345       if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
2346         {
2347           /* This case handles bogus declarations like template <>
2348              template <class T> void f<int>(); */
2349
2350           if (uses_template_parms (declarator))
2351             error ("function template partial specialization %qD "
2352                    "is not allowed", declarator);
2353           else
2354             error ("template-id %qD in declaration of primary template",
2355                    declarator);
2356           return decl;
2357         }
2358
2359       if (ctype && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype))
2360         /* This is a specialization of a member template, without
2361            specialization the containing class.  Something like:
2362
2363              template <class T> struct S {
2364                template <class U> void f (U);
2365              };
2366              template <> template <class U> void S<int>::f(U) {}
2367
2368            That's a specialization -- but of the entire template.  */
2369         specialization = 1;
2370       break;
2371
2372     default:
2373       gcc_unreachable ();
2374     }
2375
2376   if (specialization || member_specialization)
2377     {
2378       tree t = TYPE_ARG_TYPES (TREE_TYPE (decl));
2379       for (; t; t = TREE_CHAIN (t))
2380         if (TREE_PURPOSE (t))
2381           {
2382             permerror (input_location, 
2383                        "default argument specified in explicit specialization");
2384             break;
2385           }
2386     }
2387
2388   if (specialization || member_specialization || explicit_instantiation)
2389     {
2390       tree tmpl = NULL_TREE;
2391       tree targs = NULL_TREE;
2392
2393       /* Make sure that the declarator is a TEMPLATE_ID_EXPR.  */
2394       if (TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
2395         {
2396           tree fns;
2397
2398           gcc_assert (TREE_CODE (declarator) == IDENTIFIER_NODE);
2399           if (ctype)
2400             fns = dname;
2401           else
2402             {
2403               /* If there is no class context, the explicit instantiation
2404                  must be at namespace scope.  */
2405               gcc_assert (DECL_NAMESPACE_SCOPE_P (decl));
2406
2407               /* Find the namespace binding, using the declaration
2408                  context.  */
2409               fns = lookup_qualified_name (CP_DECL_CONTEXT (decl), dname,
2410                                            false, true);
2411               if (fns == error_mark_node || !is_overloaded_fn (fns))
2412                 {
2413                   error ("%qD is not a template function", dname);
2414                   fns = error_mark_node;
2415                 }
2416               else
2417                 {
2418                   tree fn = OVL_CURRENT (fns);
2419                   if (!is_associated_namespace (CP_DECL_CONTEXT (decl),
2420                                                 CP_DECL_CONTEXT (fn)))
2421                     error ("%qD is not declared in %qD",
2422                            decl, current_namespace);
2423                 }
2424             }
2425
2426           declarator = lookup_template_function (fns, NULL_TREE);
2427         }
2428
2429       if (declarator == error_mark_node)
2430         return error_mark_node;
2431
2432       if (ctype != NULL_TREE && TYPE_BEING_DEFINED (ctype))
2433         {
2434           if (!explicit_instantiation)
2435             /* A specialization in class scope.  This is invalid,
2436                but the error will already have been flagged by
2437                check_specialization_scope.  */
2438             return error_mark_node;
2439           else
2440             {
2441               /* It's not valid to write an explicit instantiation in
2442                  class scope, e.g.:
2443
2444                    class C { template void f(); }
2445
2446                    This case is caught by the parser.  However, on
2447                    something like:
2448
2449                    template class C { void f(); };
2450
2451                    (which is invalid) we can get here.  The error will be
2452                    issued later.  */
2453               ;
2454             }
2455
2456           return decl;
2457         }
2458       else if (ctype != NULL_TREE
2459                && (TREE_CODE (TREE_OPERAND (declarator, 0)) ==
2460                    IDENTIFIER_NODE))
2461         {
2462           /* Find the list of functions in ctype that have the same
2463              name as the declared function.  */
2464           tree name = TREE_OPERAND (declarator, 0);
2465           tree fns = NULL_TREE;
2466           int idx;
2467
2468           if (constructor_name_p (name, ctype))
2469             {
2470               int is_constructor = DECL_CONSTRUCTOR_P (decl);
2471
2472               if (is_constructor ? !TYPE_HAS_USER_CONSTRUCTOR (ctype)
2473                   : !CLASSTYPE_DESTRUCTORS (ctype))
2474                 {
2475                   /* From [temp.expl.spec]:
2476
2477                      If such an explicit specialization for the member
2478                      of a class template names an implicitly-declared
2479                      special member function (clause _special_), the
2480                      program is ill-formed.
2481
2482                      Similar language is found in [temp.explicit].  */
2483                   error ("specialization of implicitly-declared special member function");
2484                   return error_mark_node;
2485                 }
2486
2487               name = is_constructor ? ctor_identifier : dtor_identifier;
2488             }
2489
2490           if (!DECL_CONV_FN_P (decl))
2491             {
2492               idx = lookup_fnfields_1 (ctype, name);
2493               if (idx >= 0)
2494                 fns = VEC_index (tree, CLASSTYPE_METHOD_VEC (ctype), idx);
2495             }
2496           else
2497             {
2498               VEC(tree,gc) *methods;
2499               tree ovl;
2500
2501               /* For a type-conversion operator, we cannot do a
2502                  name-based lookup.  We might be looking for `operator
2503                  int' which will be a specialization of `operator T'.
2504                  So, we find *all* the conversion operators, and then
2505                  select from them.  */
2506               fns = NULL_TREE;
2507
2508               methods = CLASSTYPE_METHOD_VEC (ctype);
2509               if (methods)
2510                 for (idx = CLASSTYPE_FIRST_CONVERSION_SLOT;
2511                      VEC_iterate (tree, methods, idx, ovl);
2512                      ++idx)
2513                   {
2514                     if (!DECL_CONV_FN_P (OVL_CURRENT (ovl)))
2515                       /* There are no more conversion functions.  */
2516                       break;
2517
2518                     /* Glue all these conversion functions together
2519                        with those we already have.  */
2520                     for (; ovl; ovl = OVL_NEXT (ovl))
2521                       fns = ovl_cons (OVL_CURRENT (ovl), fns);
2522                   }
2523             }
2524
2525           if (fns == NULL_TREE)
2526             {
2527               error ("no member function %qD declared in %qT", name, ctype);
2528               return error_mark_node;
2529             }
2530           else
2531             TREE_OPERAND (declarator, 0) = fns;
2532         }
2533
2534       /* Figure out what exactly is being specialized at this point.
2535          Note that for an explicit instantiation, even one for a
2536          member function, we cannot tell apriori whether the
2537          instantiation is for a member template, or just a member
2538          function of a template class.  Even if a member template is
2539          being instantiated, the member template arguments may be
2540          elided if they can be deduced from the rest of the
2541          declaration.  */
2542       tmpl = determine_specialization (declarator, decl,
2543                                        &targs,
2544                                        member_specialization,
2545                                        template_count,
2546                                        tsk);
2547
2548       if (!tmpl || tmpl == error_mark_node)
2549         /* We couldn't figure out what this declaration was
2550            specializing.  */
2551         return error_mark_node;
2552       else
2553         {
2554           tree gen_tmpl = most_general_template (tmpl);
2555
2556           if (explicit_instantiation)
2557             {
2558               /* We don't set DECL_EXPLICIT_INSTANTIATION here; that
2559                  is done by do_decl_instantiation later.  */
2560
2561               int arg_depth = TMPL_ARGS_DEPTH (targs);
2562               int parm_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
2563
2564               if (arg_depth > parm_depth)
2565                 {
2566                   /* If TMPL is not the most general template (for
2567                      example, if TMPL is a friend template that is
2568                      injected into namespace scope), then there will
2569                      be too many levels of TARGS.  Remove some of them
2570                      here.  */
2571                   int i;
2572                   tree new_targs;
2573
2574                   new_targs = make_tree_vec (parm_depth);
2575                   for (i = arg_depth - parm_depth; i < arg_depth; ++i)
2576                     TREE_VEC_ELT (new_targs, i - (arg_depth - parm_depth))
2577                       = TREE_VEC_ELT (targs, i);
2578                   targs = new_targs;
2579                 }
2580
2581               return instantiate_template (tmpl, targs, tf_error);
2582             }
2583
2584           /* If we thought that the DECL was a member function, but it
2585              turns out to be specializing a static member function,
2586              make DECL a static member function as well.  */
2587           if (DECL_STATIC_FUNCTION_P (tmpl)
2588               && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2589             revert_static_member_fn (decl);
2590
2591           /* If this is a specialization of a member template of a
2592              template class, we want to return the TEMPLATE_DECL, not
2593              the specialization of it.  */
2594           if (tsk == tsk_template)
2595             {
2596               tree result = DECL_TEMPLATE_RESULT (tmpl);
2597               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
2598               DECL_INITIAL (result) = NULL_TREE;
2599               if (have_def)
2600                 {
2601                   tree parm;
2602                   DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
2603                   DECL_SOURCE_LOCATION (result)
2604                     = DECL_SOURCE_LOCATION (decl);
2605                   /* We want to use the argument list specified in the
2606                      definition, not in the original declaration.  */
2607                   DECL_ARGUMENTS (result) = DECL_ARGUMENTS (decl);
2608                   for (parm = DECL_ARGUMENTS (result); parm;
2609                        parm = DECL_CHAIN (parm))
2610                     DECL_CONTEXT (parm) = result;
2611                 }
2612               return register_specialization (tmpl, gen_tmpl, targs,
2613                                               is_friend, 0);
2614             }
2615
2616           /* Set up the DECL_TEMPLATE_INFO for DECL.  */
2617           DECL_TEMPLATE_INFO (decl) = build_template_info (tmpl, targs);
2618
2619           /* Inherit default function arguments from the template
2620              DECL is specializing.  */
2621           copy_default_args_to_explicit_spec (decl);
2622
2623           /* This specialization has the same protection as the
2624              template it specializes.  */
2625           TREE_PRIVATE (decl) = TREE_PRIVATE (gen_tmpl);
2626           TREE_PROTECTED (decl) = TREE_PROTECTED (gen_tmpl);
2627
2628           /* 7.1.1-1 [dcl.stc]
2629
2630              A storage-class-specifier shall not be specified in an
2631              explicit specialization...
2632
2633              The parser rejects these, so unless action is taken here,
2634              explicit function specializations will always appear with
2635              global linkage.
2636
2637              The action recommended by the C++ CWG in response to C++
2638              defect report 605 is to make the storage class and linkage
2639              of the explicit specialization match the templated function:
2640
2641              http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#605
2642            */
2643           if (tsk == tsk_expl_spec && DECL_FUNCTION_TEMPLATE_P (gen_tmpl))
2644             {
2645               tree tmpl_func = DECL_TEMPLATE_RESULT (gen_tmpl);
2646               gcc_assert (TREE_CODE (tmpl_func) == FUNCTION_DECL);
2647
2648               /* This specialization has the same linkage and visibility as
2649                  the function template it specializes.  */
2650               TREE_PUBLIC (decl) = TREE_PUBLIC (tmpl_func);
2651               if (! TREE_PUBLIC (decl))
2652                 {
2653                   DECL_INTERFACE_KNOWN (decl) = 1;
2654                   DECL_NOT_REALLY_EXTERN (decl) = 1;
2655                 }
2656               DECL_THIS_STATIC (decl) = DECL_THIS_STATIC (tmpl_func);
2657               if (DECL_VISIBILITY_SPECIFIED (tmpl_func))
2658                 {
2659                   DECL_VISIBILITY_SPECIFIED (decl) = 1;
2660                   DECL_VISIBILITY (decl) = DECL_VISIBILITY (tmpl_func);
2661                 }
2662             }
2663
2664           /* If DECL is a friend declaration, declared using an
2665              unqualified name, the namespace associated with DECL may
2666              have been set incorrectly.  For example, in:
2667
2668                template <typename T> void f(T);
2669                namespace N {
2670                  struct S { friend void f<int>(int); }
2671                }
2672
2673              we will have set the DECL_CONTEXT for the friend
2674              declaration to N, rather than to the global namespace.  */
2675           if (DECL_NAMESPACE_SCOPE_P (decl))
2676             DECL_CONTEXT (decl) = DECL_CONTEXT (tmpl);
2677
2678           if (is_friend && !have_def)
2679             /* This is not really a declaration of a specialization.
2680                It's just the name of an instantiation.  But, it's not
2681                a request for an instantiation, either.  */
2682             SET_DECL_IMPLICIT_INSTANTIATION (decl);
2683           else if (DECL_CONSTRUCTOR_P (decl) || DECL_DESTRUCTOR_P (decl))
2684             /* This is indeed a specialization.  In case of constructors
2685                and destructors, we need in-charge and not-in-charge
2686                versions in V3 ABI.  */
2687             clone_function_decl (decl, /*update_method_vec_p=*/0);
2688
2689           /* Register this specialization so that we can find it
2690              again.  */
2691           decl = register_specialization (decl, gen_tmpl, targs, is_friend, 0);
2692         }
2693     }
2694
2695   return decl;
2696 }
2697
2698 /* Returns 1 iff PARMS1 and PARMS2 are identical sets of template
2699    parameters.  These are represented in the same format used for
2700    DECL_TEMPLATE_PARMS.  */
2701
2702 int
2703 comp_template_parms (const_tree parms1, const_tree parms2)
2704 {
2705   const_tree p1;
2706   const_tree p2;
2707
2708   if (parms1 == parms2)
2709     return 1;
2710
2711   for (p1 = parms1, p2 = parms2;
2712        p1 != NULL_TREE && p2 != NULL_TREE;
2713        p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2))
2714     {
2715       tree t1 = TREE_VALUE (p1);
2716       tree t2 = TREE_VALUE (p2);
2717       int i;
2718
2719       gcc_assert (TREE_CODE (t1) == TREE_VEC);
2720       gcc_assert (TREE_CODE (t2) == TREE_VEC);
2721
2722       if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
2723         return 0;
2724
2725       for (i = 0; i < TREE_VEC_LENGTH (t2); ++i)
2726         {
2727           tree parm1 = TREE_VALUE (TREE_VEC_ELT (t1, i));
2728           tree parm2 = TREE_VALUE (TREE_VEC_ELT (t2, i));
2729
2730           /* If either of the template parameters are invalid, assume
2731              they match for the sake of error recovery. */
2732           if (parm1 == error_mark_node || parm2 == error_mark_node)
2733             return 1;
2734
2735           if (TREE_CODE (parm1) != TREE_CODE (parm2))
2736             return 0;
2737
2738           if (TREE_CODE (parm1) == TEMPLATE_TYPE_PARM
2739               && (TEMPLATE_TYPE_PARAMETER_PACK (parm1)
2740                   == TEMPLATE_TYPE_PARAMETER_PACK (parm2)))
2741             continue;
2742           else if (!same_type_p (TREE_TYPE (parm1), TREE_TYPE (parm2)))
2743             return 0;
2744         }
2745     }
2746
2747   if ((p1 != NULL_TREE) != (p2 != NULL_TREE))
2748     /* One set of parameters has more parameters lists than the
2749        other.  */
2750     return 0;
2751
2752   return 1;
2753 }
2754
2755 /* Determine whether PARM is a parameter pack.  */
2756
2757 bool 
2758 template_parameter_pack_p (const_tree parm)
2759 {
2760   /* Determine if we have a non-type template parameter pack.  */
2761   if (TREE_CODE (parm) == PARM_DECL)
2762     return (DECL_TEMPLATE_PARM_P (parm) 
2763             && TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)));
2764   if (TREE_CODE (parm) == TEMPLATE_PARM_INDEX)
2765     return TEMPLATE_PARM_PARAMETER_PACK (parm);
2766
2767   /* If this is a list of template parameters, we could get a
2768      TYPE_DECL or a TEMPLATE_DECL.  */ 
2769   if (TREE_CODE (parm) == TYPE_DECL || TREE_CODE (parm) == TEMPLATE_DECL)
2770     parm = TREE_TYPE (parm);
2771
2772   /* Otherwise it must be a type template parameter.  */
2773   return ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
2774            || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM)
2775           && TEMPLATE_TYPE_PARAMETER_PACK (parm));
2776 }
2777
2778 /* Determine if T is a function parameter pack.  */
2779
2780 bool
2781 function_parameter_pack_p (const_tree t)
2782 {
2783   if (t && TREE_CODE (t) == PARM_DECL)
2784     return FUNCTION_PARAMETER_PACK_P (t);
2785   return false;
2786 }
2787
2788 /* Return the function template declaration of PRIMARY_FUNC_TMPL_INST.
2789    PRIMARY_FUNC_TMPL_INST is a primary function template instantiation.  */
2790
2791 tree
2792 get_function_template_decl (const_tree primary_func_tmpl_inst)
2793 {
2794   if (! primary_func_tmpl_inst
2795       || TREE_CODE (primary_func_tmpl_inst) != FUNCTION_DECL
2796       || ! primary_template_instantiation_p (primary_func_tmpl_inst))
2797     return NULL;
2798
2799   return DECL_TEMPLATE_RESULT (DECL_TI_TEMPLATE (primary_func_tmpl_inst));
2800 }
2801
2802 /* Return true iff the function parameter PARAM_DECL was expanded
2803    from the function parameter pack PACK.  */
2804
2805 bool
2806 function_parameter_expanded_from_pack_p (tree param_decl, tree pack)
2807 {
2808   if (DECL_ARTIFICIAL (param_decl)
2809       || !function_parameter_pack_p (pack))
2810     return false;
2811
2812   /* The parameter pack and its pack arguments have the same
2813      DECL_PARM_INDEX.  */
2814   return DECL_PARM_INDEX (pack) == DECL_PARM_INDEX (param_decl);
2815 }
2816
2817 /* Determine whether ARGS describes a variadic template args list,
2818    i.e., one that is terminated by a template argument pack.  */
2819
2820 static bool 
2821 template_args_variadic_p (tree args)
2822 {
2823   int nargs;
2824   tree last_parm;
2825
2826   if (args == NULL_TREE)
2827     return false;
2828
2829   args = INNERMOST_TEMPLATE_ARGS (args);
2830   nargs = TREE_VEC_LENGTH (args);
2831
2832   if (nargs == 0)
2833     return false;
2834
2835   last_parm = TREE_VEC_ELT (args, nargs - 1);
2836
2837   return ARGUMENT_PACK_P (last_parm);
2838 }
2839
2840 /* Generate a new name for the parameter pack name NAME (an
2841    IDENTIFIER_NODE) that incorporates its */
2842
2843 static tree
2844 make_ith_pack_parameter_name (tree name, int i)
2845 {
2846   /* Munge the name to include the parameter index.  */
2847 #define NUMBUF_LEN 128
2848   char numbuf[NUMBUF_LEN];
2849   char* newname;
2850   int newname_len;
2851
2852   snprintf (numbuf, NUMBUF_LEN, "%i", i);
2853   newname_len = IDENTIFIER_LENGTH (name)
2854                 + strlen (numbuf) + 2;
2855   newname = (char*)alloca (newname_len);
2856   snprintf (newname, newname_len,
2857             "%s#%i", IDENTIFIER_POINTER (name), i);
2858   return get_identifier (newname);
2859 }
2860
2861 /* Return true if T is a primary function, class or alias template
2862    instantiation.  */
2863
2864 bool
2865 primary_template_instantiation_p (const_tree t)
2866 {
2867   if (!t)
2868     return false;
2869
2870   if (TREE_CODE (t) == FUNCTION_DECL)
2871     return DECL_LANG_SPECIFIC (t)
2872            && DECL_TEMPLATE_INSTANTIATION (t)
2873            && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (t));
2874   else if (CLASS_TYPE_P (t) && !TYPE_DECL_ALIAS_P (TYPE_NAME (t)))
2875     return CLASSTYPE_TEMPLATE_INSTANTIATION (t)
2876            && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t));
2877   else if (TYPE_P (t)
2878            && TYPE_TEMPLATE_INFO (t)
2879            && PRIMARY_TEMPLATE_P (TYPE_TI_TEMPLATE (t))
2880            && DECL_TEMPLATE_INSTANTIATION (TYPE_NAME (t)))
2881     return true;
2882   return false;
2883 }
2884
2885 /* Return true if PARM is a template template parameter.  */
2886
2887 bool
2888 template_template_parameter_p (const_tree parm)
2889 {
2890   return DECL_TEMPLATE_TEMPLATE_PARM_P (parm);
2891 }
2892
2893 /* Return the template parameters of T if T is a
2894    primary template instantiation, NULL otherwise.  */
2895
2896 tree
2897 get_primary_template_innermost_parameters (const_tree t)
2898 {
2899   tree parms = NULL, template_info = NULL;
2900
2901   if ((template_info = get_template_info (t))
2902       && primary_template_instantiation_p (t))
2903     parms = INNERMOST_TEMPLATE_PARMS
2904         (DECL_TEMPLATE_PARMS (TI_TEMPLATE (template_info)));
2905
2906   return parms;
2907 }
2908
2909 /* Return the template parameters of the LEVELth level from the full list
2910    of template parameters PARMS.  */
2911
2912 tree
2913 get_template_parms_at_level (tree parms, int level)
2914 {
2915   tree p;
2916   if (!parms
2917       || TREE_CODE (parms) != TREE_LIST
2918       || level > TMPL_PARMS_DEPTH (parms))
2919     return NULL_TREE;
2920
2921   for (p = parms; p; p = TREE_CHAIN (p))
2922     if (TMPL_PARMS_DEPTH (p) == level)
2923       return p;
2924
2925   return NULL_TREE;
2926 }
2927
2928 /* Returns the template arguments of T if T is a template instantiation,
2929    NULL otherwise.  */
2930
2931 tree
2932 get_template_innermost_arguments (const_tree t)
2933 {
2934   tree args = NULL, template_info = NULL;
2935
2936   if ((template_info = get_template_info (t))
2937       && TI_ARGS (template_info))
2938     args = INNERMOST_TEMPLATE_ARGS (TI_ARGS (template_info));
2939
2940   return args;
2941 }
2942
2943 /* Return the argument pack elements of T if T is a template argument pack,
2944    NULL otherwise.  */
2945
2946 tree
2947 get_template_argument_pack_elems (const_tree t)
2948 {
2949   if (TREE_CODE (t) != TYPE_ARGUMENT_PACK
2950       && TREE_CODE (t) != NONTYPE_ARGUMENT_PACK)
2951     return NULL;
2952
2953   return ARGUMENT_PACK_ARGS (t);
2954 }
2955
2956 /* Structure used to track the progress of find_parameter_packs_r.  */
2957 struct find_parameter_pack_data 
2958 {
2959   /* TREE_LIST that will contain all of the parameter packs found by
2960      the traversal.  */
2961   tree* parameter_packs;
2962
2963   /* Set of AST nodes that have been visited by the traversal.  */
2964   struct pointer_set_t *visited;
2965 };
2966
2967 /* Identifies all of the argument packs that occur in a template
2968    argument and appends them to the TREE_LIST inside DATA, which is a
2969    find_parameter_pack_data structure. This is a subroutine of
2970    make_pack_expansion and uses_parameter_packs.  */
2971 static tree
2972 find_parameter_packs_r (tree *tp, int *walk_subtrees, void* data)
2973 {
2974   tree t = *tp;
2975   struct find_parameter_pack_data* ppd = 
2976     (struct find_parameter_pack_data*)data;
2977   bool parameter_pack_p = false;
2978
2979   /* Handle type aliases/typedefs.  */
2980   if (TYPE_P (t)
2981       && TYPE_NAME (t)
2982       && TREE_CODE (TYPE_NAME (t)) == TYPE_DECL
2983       && TYPE_DECL_ALIAS_P (TYPE_NAME (t)))
2984     {
2985       if (TYPE_TEMPLATE_INFO (t))
2986         cp_walk_tree (&TYPE_TI_ARGS (t),
2987                       &find_parameter_packs_r,
2988                       ppd, ppd->visited);
2989       *walk_subtrees = 0;
2990       return NULL_TREE;
2991     }
2992
2993   /* Identify whether this is a parameter pack or not.  */
2994   switch (TREE_CODE (t))
2995     {
2996     case TEMPLATE_PARM_INDEX:
2997       if (TEMPLATE_PARM_PARAMETER_PACK (t))
2998         parameter_pack_p = true;
2999       break;
3000
3001     case TEMPLATE_TYPE_PARM:
3002       t = TYPE_MAIN_VARIANT (t);
3003     case TEMPLATE_TEMPLATE_PARM:
3004       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
3005         parameter_pack_p = true;
3006       break;
3007
3008     case PARM_DECL:
3009       if (FUNCTION_PARAMETER_PACK_P (t))
3010         {
3011           /* We don't want to walk into the type of a PARM_DECL,
3012              because we don't want to see the type parameter pack.  */
3013           *walk_subtrees = 0;
3014           parameter_pack_p = true;
3015         }
3016       break;
3017
3018     case BASES:
3019       parameter_pack_p = true;
3020       break;
3021     default:
3022       /* Not a parameter pack.  */
3023       break;
3024     }
3025
3026   if (parameter_pack_p)
3027     {
3028       /* Add this parameter pack to the list.  */
3029       *ppd->parameter_packs = tree_cons (NULL_TREE, t, *ppd->parameter_packs);
3030     }
3031
3032   if (TYPE_P (t))
3033     cp_walk_tree (&TYPE_CONTEXT (t), 
3034                   &find_parameter_packs_r, ppd, ppd->visited);
3035
3036   /* This switch statement will return immediately if we don't find a
3037      parameter pack.  */
3038   switch (TREE_CODE (t)) 
3039     {
3040     case TEMPLATE_PARM_INDEX:
3041       return NULL_TREE;
3042
3043     case BOUND_TEMPLATE_TEMPLATE_PARM:
3044       /* Check the template itself.  */
3045       cp_walk_tree (&TREE_TYPE (TYPE_TI_TEMPLATE (t)), 
3046                     &find_parameter_packs_r, ppd, ppd->visited);
3047       /* Check the template arguments.  */
3048       cp_walk_tree (&TYPE_TI_ARGS (t), &find_parameter_packs_r, ppd, 
3049                     ppd->visited);
3050       *walk_subtrees = 0;
3051       return NULL_TREE;
3052
3053     case TEMPLATE_TYPE_PARM:
3054     case TEMPLATE_TEMPLATE_PARM:
3055       return NULL_TREE;
3056
3057     case PARM_DECL:
3058       return NULL_TREE;
3059
3060     case RECORD_TYPE:
3061       if (TYPE_PTRMEMFUNC_P (t))
3062         return NULL_TREE;
3063       /* Fall through.  */
3064
3065     case UNION_TYPE:
3066     case ENUMERAL_TYPE:
3067       if (TYPE_TEMPLATE_INFO (t))
3068         cp_walk_tree (&TI_ARGS (TYPE_TEMPLATE_INFO (t)),
3069                       &find_parameter_packs_r, ppd, ppd->visited);
3070
3071       *walk_subtrees = 0;
3072       return NULL_TREE;
3073
3074     case CONSTRUCTOR:
3075     case TEMPLATE_DECL:
3076       cp_walk_tree (&TREE_TYPE (t),
3077                     &find_parameter_packs_r, ppd, ppd->visited);
3078       return NULL_TREE;
3079  
3080     case TYPENAME_TYPE:
3081       cp_walk_tree (&TYPENAME_TYPE_FULLNAME (t), &find_parameter_packs_r,
3082                    ppd, ppd->visited);
3083       *walk_subtrees = 0;
3084       return NULL_TREE;
3085       
3086     case TYPE_PACK_EXPANSION:
3087     case EXPR_PACK_EXPANSION:
3088       *walk_subtrees = 0;
3089       return NULL_TREE;
3090
3091     case INTEGER_TYPE:
3092       cp_walk_tree (&TYPE_MAX_VALUE (t), &find_parameter_packs_r, 
3093                     ppd, ppd->visited);
3094       *walk_subtrees = 0;
3095       return NULL_TREE;
3096
3097     case IDENTIFIER_NODE:
3098       cp_walk_tree (&TREE_TYPE (t), &find_parameter_packs_r, ppd, 
3099                     ppd->visited);
3100       *walk_subtrees = 0;
3101       return NULL_TREE;
3102
3103     default:
3104       return NULL_TREE;
3105     }
3106
3107   return NULL_TREE;
3108 }
3109
3110 /* Determines if the expression or type T uses any parameter packs.  */
3111 bool
3112 uses_parameter_packs (tree t)
3113 {
3114   tree parameter_packs = NULL_TREE;
3115   struct find_parameter_pack_data ppd;
3116   ppd.parameter_packs = &parameter_packs;
3117   ppd.visited = pointer_set_create ();
3118   cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
3119   pointer_set_destroy (ppd.visited);
3120   return parameter_packs != NULL_TREE;
3121 }
3122
3123 /* Turn ARG, which may be an expression, type, or a TREE_LIST
3124    representation a base-class initializer into a parameter pack
3125    expansion. If all goes well, the resulting node will be an
3126    EXPR_PACK_EXPANSION, TYPE_PACK_EXPANSION, or TREE_LIST,
3127    respectively.  */
3128 tree 
3129 make_pack_expansion (tree arg)
3130 {
3131   tree result;
3132   tree parameter_packs = NULL_TREE;
3133   bool for_types = false;
3134   struct find_parameter_pack_data ppd;
3135
3136   if (!arg || arg == error_mark_node)
3137     return arg;
3138
3139   if (TREE_CODE (arg) == TREE_LIST)
3140     {
3141       /* The only time we will see a TREE_LIST here is for a base
3142          class initializer.  In this case, the TREE_PURPOSE will be a
3143          _TYPE node (representing the base class expansion we're
3144          initializing) and the TREE_VALUE will be a TREE_LIST
3145          containing the initialization arguments. 
3146
3147          The resulting expansion looks somewhat different from most
3148          expansions. Rather than returning just one _EXPANSION, we
3149          return a TREE_LIST whose TREE_PURPOSE is a
3150          TYPE_PACK_EXPANSION containing the bases that will be
3151          initialized.  The TREE_VALUE will be identical to the
3152          original TREE_VALUE, which is a list of arguments that will
3153          be passed to each base.  We do not introduce any new pack
3154          expansion nodes into the TREE_VALUE (although it is possible
3155          that some already exist), because the TREE_PURPOSE and
3156          TREE_VALUE all need to be expanded together with the same
3157          _EXPANSION node.  Note that the TYPE_PACK_EXPANSION in the
3158          resulting TREE_PURPOSE will mention the parameter packs in
3159          both the bases and the arguments to the bases.  */
3160       tree purpose;
3161       tree value;
3162       tree parameter_packs = NULL_TREE;
3163
3164       /* Determine which parameter packs will be used by the base
3165          class expansion.  */
3166       ppd.visited = pointer_set_create ();
3167       ppd.parameter_packs = &parameter_packs;
3168       cp_walk_tree (&TREE_PURPOSE (arg), &find_parameter_packs_r, 
3169                     &ppd, ppd.visited);
3170
3171       if (parameter_packs == NULL_TREE)
3172         {
3173           error ("base initializer expansion %<%T%> contains no parameter packs", arg);
3174           pointer_set_destroy (ppd.visited);
3175           return error_mark_node;
3176         }
3177
3178       if (TREE_VALUE (arg) != void_type_node)
3179         {
3180           /* Collect the sets of parameter packs used in each of the
3181              initialization arguments.  */
3182           for (value = TREE_VALUE (arg); value; value = TREE_CHAIN (value))
3183             {
3184               /* Determine which parameter packs will be expanded in this
3185                  argument.  */
3186               cp_walk_tree (&TREE_VALUE (value), &find_parameter_packs_r, 
3187                             &ppd, ppd.visited);
3188             }
3189         }
3190
3191       pointer_set_destroy (ppd.visited);
3192
3193       /* Create the pack expansion type for the base type.  */
3194       purpose = cxx_make_type (TYPE_PACK_EXPANSION);
3195       SET_PACK_EXPANSION_PATTERN (purpose, TREE_PURPOSE (arg));
3196       PACK_EXPANSION_PARAMETER_PACKS (purpose) = parameter_packs;
3197
3198       /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
3199          they will rarely be compared to anything.  */
3200       SET_TYPE_STRUCTURAL_EQUALITY (purpose);
3201
3202       return tree_cons (purpose, TREE_VALUE (arg), NULL_TREE);
3203     }
3204
3205   if (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL)
3206     for_types = true;
3207
3208   /* Build the PACK_EXPANSION_* node.  */
3209   result = for_types
3210      ? cxx_make_type (TYPE_PACK_EXPANSION)
3211      : make_node (EXPR_PACK_EXPANSION);
3212   SET_PACK_EXPANSION_PATTERN (result, arg);
3213   if (TREE_CODE (result) == EXPR_PACK_EXPANSION)
3214     {
3215       /* Propagate type and const-expression information.  */
3216       TREE_TYPE (result) = TREE_TYPE (arg);
3217       TREE_CONSTANT (result) = TREE_CONSTANT (arg);
3218     }
3219   else
3220     /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
3221        they will rarely be compared to anything.  */
3222     SET_TYPE_STRUCTURAL_EQUALITY (result);
3223
3224   /* Determine which parameter packs will be expanded.  */
3225   ppd.parameter_packs = &parameter_packs;
3226   ppd.visited = pointer_set_create ();
3227   cp_walk_tree (&arg, &find_parameter_packs_r, &ppd, ppd.visited);
3228   pointer_set_destroy (ppd.visited);
3229
3230   /* Make sure we found some parameter packs.  */
3231   if (parameter_packs == NULL_TREE)
3232     {
3233       if (TYPE_P (arg))
3234         error ("expansion pattern %<%T%> contains no argument packs", arg);
3235       else
3236         error ("expansion pattern %<%E%> contains no argument packs", arg);
3237       return error_mark_node;
3238     }
3239   PACK_EXPANSION_PARAMETER_PACKS (result) = parameter_packs;
3240
3241   return result;
3242 }
3243
3244 /* Checks T for any "bare" parameter packs, which have not yet been
3245    expanded, and issues an error if any are found. This operation can
3246    only be done on full expressions or types (e.g., an expression
3247    statement, "if" condition, etc.), because we could have expressions like:
3248
3249      foo(f(g(h(args)))...)
3250
3251    where "args" is a parameter pack. check_for_bare_parameter_packs
3252    should not be called for the subexpressions args, h(args),
3253    g(h(args)), or f(g(h(args))), because we would produce erroneous
3254    error messages. 
3255
3256    Returns TRUE and emits an error if there were bare parameter packs,
3257    returns FALSE otherwise.  */
3258 bool 
3259 check_for_bare_parameter_packs (tree t)
3260 {
3261   tree parameter_packs = NULL_TREE;
3262   struct find_parameter_pack_data ppd;
3263
3264   if (!processing_template_decl || !t || t == error_mark_node)
3265     return false;
3266
3267   if (TREE_CODE (t) == TYPE_DECL)
3268     t = TREE_TYPE (t);
3269
3270   ppd.parameter_packs = &parameter_packs;
3271   ppd.visited = pointer_set_create ();
3272   cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
3273   pointer_set_destroy (ppd.visited);
3274
3275   if (parameter_packs) 
3276     {
3277       error ("parameter packs not expanded with %<...%>:");
3278       while (parameter_packs)
3279         {
3280           tree pack = TREE_VALUE (parameter_packs);
3281           tree name = NULL_TREE;
3282
3283           if (TREE_CODE (pack) == TEMPLATE_TYPE_PARM
3284               || TREE_CODE (pack) == TEMPLATE_TEMPLATE_PARM)
3285             name = TYPE_NAME (pack);
3286           else if (TREE_CODE (pack) == TEMPLATE_PARM_INDEX)
3287             name = DECL_NAME (TEMPLATE_PARM_DECL (pack));
3288           else
3289             name = DECL_NAME (pack);
3290
3291           if (name)
3292             inform (input_location, "        %qD", name);
3293           else
3294             inform (input_location, "        <anonymous>");
3295
3296           parameter_packs = TREE_CHAIN (parameter_packs);
3297         }
3298
3299       return true;
3300     }
3301
3302   return false;
3303 }
3304
3305 /* Expand any parameter packs that occur in the template arguments in
3306    ARGS.  */
3307 tree
3308 expand_template_argument_pack (tree args)
3309 {
3310   tree result_args = NULL_TREE;
3311   int in_arg, out_arg = 0, nargs = args ? TREE_VEC_LENGTH (args) : 0;
3312   int num_result_args = -1;
3313   int non_default_args_count = -1;
3314
3315   /* First, determine if we need to expand anything, and the number of
3316      slots we'll need.  */
3317   for (in_arg = 0; in_arg < nargs; ++in_arg)
3318     {
3319       tree arg = TREE_VEC_ELT (args, in_arg);
3320       if (arg == NULL_TREE)
3321         return args;
3322       if (ARGUMENT_PACK_P (arg))
3323         {
3324           int num_packed = TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg));
3325           if (num_result_args < 0)
3326             num_result_args = in_arg + num_packed;
3327           else
3328             num_result_args += num_packed;
3329         }
3330       else
3331         {
3332           if (num_result_args >= 0)
3333             num_result_args++;
3334         }
3335     }
3336
3337   /* If no expansion is necessary, we're done.  */
3338   if (num_result_args < 0)
3339     return args;
3340
3341   /* Expand arguments.  */
3342   result_args = make_tree_vec (num_result_args);
3343   if (NON_DEFAULT_TEMPLATE_ARGS_COUNT (args))
3344     non_default_args_count =
3345       GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (args);
3346   for (in_arg = 0; in_arg < nargs; ++in_arg)
3347     {
3348       tree arg = TREE_VEC_ELT (args, in_arg);
3349       if (ARGUMENT_PACK_P (arg))
3350         {
3351           tree packed = ARGUMENT_PACK_ARGS (arg);
3352           int i, num_packed = TREE_VEC_LENGTH (packed);
3353           for (i = 0; i < num_packed; ++i, ++out_arg)
3354             TREE_VEC_ELT (result_args, out_arg) = TREE_VEC_ELT(packed, i);
3355           if (non_default_args_count > 0)
3356             non_default_args_count += num_packed;
3357         }
3358       else
3359         {
3360           TREE_VEC_ELT (result_args, out_arg) = arg;
3361           ++out_arg;
3362         }
3363     }
3364   if (non_default_args_count >= 0)
3365     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (result_args, non_default_args_count);
3366   return result_args;
3367 }
3368
3369 /* Checks if DECL shadows a template parameter.
3370
3371    [temp.local]: A template-parameter shall not be redeclared within its
3372    scope (including nested scopes).
3373
3374    Emits an error and returns TRUE if the DECL shadows a parameter,
3375    returns FALSE otherwise.  */
3376
3377 bool
3378 check_template_shadow (tree decl)
3379 {
3380   tree olddecl;
3381
3382   /* If we're not in a template, we can't possibly shadow a template
3383      parameter.  */
3384   if (!current_template_parms)
3385     return true;
3386
3387   /* Figure out what we're shadowing.  */
3388   if (TREE_CODE (decl) == OVERLOAD)
3389     decl = OVL_CURRENT (decl);
3390   olddecl = innermost_non_namespace_value (DECL_NAME (decl));
3391
3392   /* If there's no previous binding for this name, we're not shadowing
3393      anything, let alone a template parameter.  */
3394   if (!olddecl)
3395     return true;
3396
3397   /* If we're not shadowing a template parameter, we're done.  Note
3398      that OLDDECL might be an OVERLOAD (or perhaps even an
3399      ERROR_MARK), so we can't just blithely assume it to be a _DECL
3400      node.  */
3401   if (!DECL_P (olddecl) || !DECL_TEMPLATE_PARM_P (olddecl))
3402     return true;
3403
3404   /* We check for decl != olddecl to avoid bogus errors for using a
3405      name inside a class.  We check TPFI to avoid duplicate errors for
3406      inline member templates.  */
3407   if (decl == olddecl
3408       || TEMPLATE_PARMS_FOR_INLINE (current_template_parms))
3409     return true;
3410
3411   error ("declaration of %q+#D", decl);
3412   error (" shadows template parm %q+#D", olddecl);
3413   return false;
3414 }
3415
3416 /* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
3417    ORIG_LEVEL, DECL, and TYPE.  NUM_SIBLINGS is the total number of
3418    template parameters.  */
3419
3420 static tree
3421 build_template_parm_index (int index,
3422                            int level,
3423                            int orig_level,
3424                            int num_siblings,
3425                            tree decl,
3426                            tree type)
3427 {
3428   tree t = make_node (TEMPLATE_PARM_INDEX);
3429   TEMPLATE_PARM_IDX (t) = index;
3430   TEMPLATE_PARM_LEVEL (t) = level;
3431   TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
3432   TEMPLATE_PARM_NUM_SIBLINGS (t) = num_siblings;
3433   TEMPLATE_PARM_DECL (t) = decl;
3434   TREE_TYPE (t) = type;
3435   TREE_CONSTANT (t) = TREE_CONSTANT (decl);
3436   TREE_READONLY (t) = TREE_READONLY (decl);
3437
3438   return t;
3439 }
3440
3441 /* Find the canonical type parameter for the given template type
3442    parameter.  Returns the canonical type parameter, which may be TYPE
3443    if no such parameter existed.  */
3444
3445 static tree
3446 canonical_type_parameter (tree type)
3447 {
3448   tree list;
3449   int idx = TEMPLATE_TYPE_IDX (type);
3450   if (!canonical_template_parms)
3451     canonical_template_parms = VEC_alloc (tree, gc, idx+1);
3452
3453   while (VEC_length (tree, canonical_template_parms) <= (unsigned)idx)
3454     VEC_safe_push (tree, gc, canonical_template_parms, NULL_TREE);
3455
3456   list = VEC_index (tree, canonical_template_parms, idx);
3457   while (list && !comptypes (type, TREE_VALUE (list), COMPARE_STRUCTURAL))
3458     list = TREE_CHAIN (list);
3459
3460   if (list)
3461     return TREE_VALUE (list);
3462   else
3463     {
3464       VEC_replace(tree, canonical_template_parms, idx,
3465                   tree_cons (NULL_TREE, type, 
3466                              VEC_index (tree, canonical_template_parms, idx)));
3467       return type;
3468     }
3469 }
3470
3471 /* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
3472    TEMPLATE_PARM_LEVEL has been decreased by LEVELS.  If such a
3473    TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
3474    new one is created.  */
3475
3476 static tree
3477 reduce_template_parm_level (tree index, tree type, int levels, tree args,
3478                             tsubst_flags_t complain)
3479 {
3480   if (TEMPLATE_PARM_DESCENDANTS (index) == NULL_TREE
3481       || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
3482           != TEMPLATE_PARM_LEVEL (index) - levels)
3483       || !same_type_p (type, TREE_TYPE (TEMPLATE_PARM_DESCENDANTS (index))))
3484     {
3485       tree orig_decl = TEMPLATE_PARM_DECL (index);
3486       tree decl, t;
3487
3488       decl = build_decl (DECL_SOURCE_LOCATION (orig_decl),
3489                          TREE_CODE (orig_decl), DECL_NAME (orig_decl), type);
3490       TREE_CONSTANT (decl) = TREE_CONSTANT (orig_decl);
3491       TREE_READONLY (decl) = TREE_READONLY (orig_decl);
3492       DECL_ARTIFICIAL (decl) = 1;
3493       SET_DECL_TEMPLATE_PARM_P (decl);
3494
3495       t = build_template_parm_index (TEMPLATE_PARM_IDX (index),
3496                                      TEMPLATE_PARM_LEVEL (index) - levels,
3497                                      TEMPLATE_PARM_ORIG_LEVEL (index),
3498                                      TEMPLATE_PARM_NUM_SIBLINGS (index),
3499                                      decl, type);
3500       TEMPLATE_PARM_DESCENDANTS (index) = t;
3501       TEMPLATE_PARM_PARAMETER_PACK (t) 
3502         = TEMPLATE_PARM_PARAMETER_PACK (index);
3503
3504         /* Template template parameters need this.  */
3505       if (TREE_CODE (decl) == TEMPLATE_DECL)
3506         DECL_TEMPLATE_PARMS (decl) = tsubst_template_parms
3507           (DECL_TEMPLATE_PARMS (TEMPLATE_PARM_DECL (index)),
3508            args, complain);
3509     }
3510
3511   return TEMPLATE_PARM_DESCENDANTS (index);
3512 }
3513
3514 /* Process information from new template parameter PARM and append it
3515    to the LIST being built.  This new parameter is a non-type
3516    parameter iff IS_NON_TYPE is true. This new parameter is a
3517    parameter pack iff IS_PARAMETER_PACK is true.  The location of PARM
3518    is in PARM_LOC. NUM_TEMPLATE_PARMS is the size of the template
3519    parameter list PARM belongs to. This is used used to create a
3520    proper canonical type for the type of PARM that is to be created,
3521    iff PARM is a type.  If the size is not known, this parameter shall
3522    be set to 0.  */
3523
3524 tree
3525 process_template_parm (tree list, location_t parm_loc, tree parm,
3526                        bool is_non_type, bool is_parameter_pack,
3527                        unsigned num_template_parms)
3528 {
3529   tree decl = 0;
3530   tree defval;
3531   tree err_parm_list;
3532   int idx = 0;
3533
3534   gcc_assert (TREE_CODE (parm) == TREE_LIST);
3535   defval = TREE_PURPOSE (parm);
3536
3537   if (list)
3538     {
3539       tree p = tree_last (list);
3540
3541       if (p && TREE_VALUE (p) != error_mark_node)
3542         {
3543           p = TREE_VALUE (p);
3544           if (TREE_CODE (p) == TYPE_DECL || TREE_CODE (p) == TEMPLATE_DECL)
3545             idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
3546           else
3547             idx = TEMPLATE_PARM_IDX (DECL_INITIAL (p));
3548         }
3549
3550       ++idx;
3551     }
3552   else
3553     idx = 0;
3554
3555   if (is_non_type)
3556     {
3557       parm = TREE_VALUE (parm);
3558
3559       SET_DECL_TEMPLATE_PARM_P (parm);
3560
3561       if (TREE_TYPE (parm) == error_mark_node)
3562         {
3563           err_parm_list = build_tree_list (defval, parm);
3564           TREE_VALUE (err_parm_list) = error_mark_node;
3565            return chainon (list, err_parm_list);
3566         }
3567       else
3568       {
3569         /* [temp.param]
3570
3571            The top-level cv-qualifiers on the template-parameter are
3572            ignored when determining its type.  */
3573         TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
3574         if (invalid_nontype_parm_type_p (TREE_TYPE (parm), 1))
3575           {
3576             err_parm_list = build_tree_list (defval, parm);
3577             TREE_VALUE (err_parm_list) = error_mark_node;
3578              return chainon (list, err_parm_list);
3579           }
3580
3581         if (uses_parameter_packs (TREE_TYPE (parm)) && !is_parameter_pack)
3582           {
3583             /* This template parameter is not a parameter pack, but it
3584                should be. Complain about "bare" parameter packs.  */
3585             check_for_bare_parameter_packs (TREE_TYPE (parm));
3586             
3587             /* Recover by calling this a parameter pack.  */
3588             is_parameter_pack = true;
3589           }
3590       }
3591
3592       /* A template parameter is not modifiable.  */
3593       TREE_CONSTANT (parm) = 1;
3594       TREE_READONLY (parm) = 1;
3595       decl = build_decl (parm_loc,
3596                          CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
3597       TREE_CONSTANT (decl) = 1;
3598       TREE_READONLY (decl) = 1;
3599       DECL_INITIAL (parm) = DECL_INITIAL (decl)
3600         = build_template_parm_index (idx, processing_template_decl,
3601                                      processing_template_decl,
3602                                      num_template_parms,
3603                                      decl, TREE_TYPE (parm));
3604
3605       TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)) 
3606         = is_parameter_pack;
3607     }
3608   else
3609     {
3610       tree t;
3611       parm = TREE_VALUE (TREE_VALUE (parm));
3612
3613       if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
3614         {
3615           t = cxx_make_type (TEMPLATE_TEMPLATE_PARM);
3616           /* This is for distinguishing between real templates and template
3617              template parameters */
3618           TREE_TYPE (parm) = t;
3619           TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
3620           decl = parm;
3621         }
3622       else
3623         {
3624           t = cxx_make_type (TEMPLATE_TYPE_PARM);
3625           /* parm is either IDENTIFIER_NODE or NULL_TREE.  */
3626           decl = build_decl (parm_loc,
3627                              TYPE_DECL, parm, t);
3628         }
3629
3630       TYPE_NAME (t) = decl;
3631       TYPE_STUB_DECL (t) = decl;
3632       parm = decl;
3633       TEMPLATE_TYPE_PARM_INDEX (t)
3634         = build_template_parm_index (idx, processing_template_decl,
3635                                      processing_template_decl,
3636                                      num_template_parms,
3637                                      decl, TREE_TYPE (parm));
3638       TEMPLATE_TYPE_PARAMETER_PACK (t) = is_parameter_pack;
3639       TYPE_CANONICAL (t) = canonical_type_parameter (t);
3640     }
3641   DECL_ARTIFICIAL (decl) = 1;
3642   SET_DECL_TEMPLATE_PARM_P (decl);
3643   pushdecl (decl);
3644   parm = build_tree_list (defval, parm);
3645   return chainon (list, parm);
3646 }
3647
3648 /* The end of a template parameter list has been reached.  Process the
3649    tree list into a parameter vector, converting each parameter into a more
3650    useful form.  Type parameters are saved as IDENTIFIER_NODEs, and others
3651    as PARM_DECLs.  */
3652
3653 tree
3654 end_template_parm_list (tree parms)
3655 {
3656   int nparms;
3657   tree parm, next;
3658   tree saved_parmlist = make_tree_vec (list_length (parms));
3659
3660   current_template_parms
3661     = tree_cons (size_int (processing_template_decl),
3662                  saved_parmlist, current_template_parms);
3663
3664   for (parm = parms, nparms = 0; parm; parm = next, nparms++)
3665     {
3666       next = TREE_CHAIN (parm);
3667       TREE_VEC_ELT (saved_parmlist, nparms) = parm;
3668       TREE_CHAIN (parm) = NULL_TREE;
3669     }
3670
3671   --processing_template_parmlist;
3672
3673   return saved_parmlist;
3674 }
3675
3676 /* Create a new type almost identical to TYPE but which has the
3677    following differences:
3678
3679      1/ T has a new TEMPLATE_PARM_INDEX that carries the new number of
3680      template sibling parameters of T.
3681
3682      2/ T has a new canonical type that matches the new number
3683      of sibling parms.
3684
3685      3/ From now on, T is going to be what lookups referring to the
3686      name of TYPE will return. No lookup should return TYPE anymore.
3687
3688    NUM_PARMS is the new number of sibling parms TYPE belongs to.
3689
3690    This is a subroutine of fixup_template_parms.  */
3691
3692 static tree
3693 fixup_template_type_parm_type (tree type, int num_parms)
3694 {
3695   tree orig_idx = TEMPLATE_TYPE_PARM_INDEX (type), idx;
3696   tree t;
3697   /* This is the decl which name is inserted into the symbol table for
3698      the template parm type. So whenever we lookup the type name, this
3699      is the DECL we get.  */
3700   tree decl;
3701
3702   /* Do not fix up the type twice.  */
3703   if (orig_idx && TEMPLATE_PARM_NUM_SIBLINGS (orig_idx) != 0)
3704     return type;
3705
3706   t = copy_type (type);
3707   decl = TYPE_NAME (t);
3708
3709   TYPE_MAIN_VARIANT (t) = t;
3710   TYPE_NEXT_VARIANT (t)= NULL_TREE;
3711   TYPE_POINTER_TO (t) = 0;
3712   TYPE_REFERENCE_TO (t) = 0;
3713
3714   idx = build_template_parm_index (TEMPLATE_PARM_IDX (orig_idx),
3715                                    TEMPLATE_PARM_LEVEL (orig_idx),
3716                                    TEMPLATE_PARM_ORIG_LEVEL (orig_idx),
3717                                    num_parms,
3718                                    decl, t);
3719   TEMPLATE_PARM_DESCENDANTS (idx) = TEMPLATE_PARM_DESCENDANTS (orig_idx);
3720   TEMPLATE_PARM_PARAMETER_PACK (idx) = TEMPLATE_PARM_PARAMETER_PACK (orig_idx);
3721   TEMPLATE_TYPE_PARM_INDEX (t) = idx;
3722
3723   TYPE_STUB_DECL (t) = decl;
3724   TEMPLATE_TYPE_DECL (t) = decl;
3725   if (TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
3726     TREE_TYPE (DECL_TEMPLATE_RESULT  (decl)) = t;
3727
3728   /* Update the type associated to the type name stored in the symbol
3729      table. Now, whenever the type name is looked up, the resulting
3730      type is properly fixed up.  */
3731   TREE_TYPE (decl) = t;
3732
3733   TYPE_CANONICAL (t) = canonical_type_parameter (t);
3734
3735   return t;
3736 }
3737
3738 /* Create and return a new TEMPLATE_PARM_INDEX that is almost
3739    identical to I, but that is fixed up as to:
3740
3741    1/ carry the number of sibling parms (NUM_PARMS) of the template
3742    parm represented by I.
3743
3744    2/ replace all references to template parm types declared before I
3745    (in the same template parm list as I) by references to template
3746    parm types contained in ARGS. ARGS should contain the list of
3747    template parms that have been fixed up so far, in a form suitable
3748    to be passed to tsubst.
3749
3750    This is a subroutine of fixup_template_parms.  */
3751
3752 static tree
3753 fixup_template_parm_index (tree i, tree args, int num_parms)
3754 {
3755   tree index, decl, type;
3756
3757   if (i == NULL_TREE
3758       || TREE_CODE (i) != TEMPLATE_PARM_INDEX
3759       /* Do not fix up the index twice.  */
3760       || (TEMPLATE_PARM_NUM_SIBLINGS (i) != 0))
3761     return i;
3762
3763   decl = TEMPLATE_PARM_DECL (i);
3764   type = TREE_TYPE (decl);
3765
3766   index = build_template_parm_index (TEMPLATE_PARM_IDX (i),
3767                                      TEMPLATE_PARM_LEVEL (i),
3768                                      TEMPLATE_PARM_ORIG_LEVEL (i),
3769                                      num_parms,
3770                                      decl, type);
3771
3772   TEMPLATE_PARM_DESCENDANTS (index) = TEMPLATE_PARM_DESCENDANTS (i);
3773   TEMPLATE_PARM_PARAMETER_PACK (index) = TEMPLATE_PARM_PARAMETER_PACK (i);
3774
3775   type = tsubst (type, args, tf_none, NULL_TREE);
3776   
3777   TREE_TYPE (decl) = type;
3778   TREE_TYPE (index) = type;
3779
3780   return index;
3781 }
3782
3783 /* 
3784    This is a subroutine of fixup_template_parms.
3785
3786    It computes the canonical type of the type of the template
3787    parameter PARM_DESC and update all references to that type so that
3788    they use the newly computed canonical type. No access check is
3789    performed during the fixup. PARM_DESC is a TREE_LIST which
3790    TREE_VALUE is the template parameter and its TREE_PURPOSE is the
3791    default argument of the template parm if any. IDX is the index of
3792    the template parameter, starting at 0. NUM_PARMS is the number of
3793    template parameters in the set PARM_DESC belongs to. ARGLIST is a
3794    TREE_VEC containing the full set of template parameters in a form
3795    suitable to be passed to substs functions as their ARGS
3796    argument. This is what current_template_args returns for a given
3797    template. The innermost vector of args in ARGLIST is the set of
3798    template parms that have been fixed up so far. This function adds
3799    the fixed up parameter into that vector.  */
3800
3801 static void
3802 fixup_template_parm (tree parm_desc,
3803                      int idx,
3804                      int num_parms,
3805                      tree arglist)
3806 {
3807   tree parm = TREE_VALUE (parm_desc);
3808   tree fixedup_args = INNERMOST_TEMPLATE_ARGS (arglist);
3809
3810   push_deferring_access_checks (dk_no_check);
3811
3812   if (TREE_CODE (parm) == TYPE_DECL)
3813     {
3814       /* PARM is a template type parameter. Fix up its type, add
3815          the fixed-up template parm to the vector of fixed-up
3816          template parms so far, and substitute the fixed-up
3817          template parms into the default argument of this
3818          parameter.  */
3819       tree t =
3820         fixup_template_type_parm_type (TREE_TYPE (parm), num_parms);
3821       TREE_TYPE (parm) = t;
3822
3823       TREE_VEC_ELT (fixedup_args, idx) = template_parm_to_arg (parm_desc);
3824     }
3825   else if (TREE_CODE (parm) == TEMPLATE_DECL)
3826     {
3827       /* PARM is a template template parameter. This is going to
3828          be interesting.  */
3829       tree tparms, targs, innermost_args, t;
3830       int j;
3831
3832       /* First, fix up the parms of the template template parm
3833          because the parms are involved in defining the new canonical
3834          type of the template template parm.  */
3835
3836       /* So we need to substitute the template parm types that have
3837          been fixed up so far into the template parms of this template
3838          template parm. E.g, consider this:
3839
3840          template<class T, template<T u> class TT> class S;
3841
3842          In this case we want to substitute T into the
3843          template parameters of TT.
3844
3845          So let's walk the template parms of PARM here, and
3846          tsubst ARGLIST into into each of the template
3847          parms.   */
3848
3849       /* For this substitution we need to build the full set of
3850          template parameters and use that as arguments for the
3851          tsubsting function.  */
3852       tparms = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (parm));
3853
3854       /* This will contain the innermost parms of PARM into which
3855          we have substituted so far.  */
3856       innermost_args = make_tree_vec (TREE_VEC_LENGTH (tparms));
3857       targs = add_to_template_args (arglist, innermost_args);
3858       for (j = 0; j < TREE_VEC_LENGTH (tparms); ++j)
3859         {
3860           tree parameter;
3861
3862           parameter = TREE_VEC_ELT (tparms, j);
3863
3864           /* INNERMOST_ARGS needs to have at least the same number
3865              of elements as the index PARAMETER, ortherwise
3866              tsubsting into PARAMETER will result in partially
3867              instantiating it, reducing its tempate parm
3868              level. Let's tactically fill INNERMOST_ARGS for that
3869              purpose.  */
3870           TREE_VEC_ELT (innermost_args, j) =
3871             template_parm_to_arg (parameter);
3872
3873           fixup_template_parm (parameter, j,
3874                                TREE_VEC_LENGTH (tparms),
3875                                targs);
3876         }
3877
3878       /* Now fix up the type of the template template parm.  */
3879
3880       t = fixup_template_type_parm_type (TREE_TYPE (parm), num_parms);
3881       TREE_TYPE (parm) = t;
3882
3883       TREE_VEC_ELT (fixedup_args, idx) =
3884         template_parm_to_arg (parm_desc);
3885     }
3886   else if (TREE_CODE (parm) == PARM_DECL)
3887     {
3888       /* PARM is a non-type template parameter. We need to:
3889
3890        * Fix up its TEMPLATE_PARM_INDEX to make it carry the
3891        proper number of sibling parameters.
3892
3893        * Make lookups of the template parameter return a reference
3894        to the fixed-up index. No lookup should return references
3895        to the former index anymore.
3896
3897        * Substitute the template parms that got fixed up so far
3898
3899        * into the type of PARM.  */
3900
3901       tree index = DECL_INITIAL (parm);
3902
3903       /* PUSHED_DECL is the decl added to the symbol table with
3904          the name of the parameter. E,g:
3905              
3906          template<class T, T u> //#0
3907          auto my_function(T t) -> decltype(u); //#1
3908
3909          Here, when looking up u at //#1, we get the decl of u
3910          resulting from the declaration in #0. This is what
3911          PUSHED_DECL is. We need to replace the reference to the
3912          old TEMPLATE_PARM_INDEX carried by PUSHED_DECL by the
3913          fixed-up TEMPLATE_PARM_INDEX.  */
3914       tree pushed_decl = TEMPLATE_PARM_DECL (index);
3915
3916       /* Let's fix up the TEMPLATE_PARM_INDEX then. Note that we must
3917          fixup the type of PUSHED_DECL as well and luckily
3918          fixup_template_parm_index does it for us too.  */
3919       tree fixed_up_index =
3920         fixup_template_parm_index (index, arglist, num_parms);
3921
3922       DECL_INITIAL (pushed_decl) = DECL_INITIAL (parm) = fixed_up_index;
3923
3924       /* Add this fixed up PARM to the template parms we've fixed
3925          up so far and use that to substitute the fixed-up
3926          template parms into the type of PARM.  */
3927       TREE_VEC_ELT (fixedup_args, idx) =
3928         template_parm_to_arg (parm_desc);
3929       TREE_TYPE (parm) = tsubst (TREE_TYPE (parm), arglist,
3930                                  tf_none, NULL_TREE);
3931     }
3932
3933   TREE_PURPOSE (parm_desc) =
3934     tsubst_template_arg (TREE_PURPOSE (parm_desc),
3935                          arglist, tf_none, parm);
3936
3937   pop_deferring_access_checks ();
3938 }
3939
3940 /* Walk the current template parms and properly compute the canonical
3941    types of the dependent types created during
3942    cp_parser_template_parameter_list.  */
3943
3944 void
3945 fixup_template_parms (void)
3946 {
3947   tree arglist;
3948   tree parameter_vec;
3949   tree fixedup_args;
3950   int i, num_parms;
3951
3952   parameter_vec = INNERMOST_TEMPLATE_PARMS (current_template_parms);
3953   if (parameter_vec == NULL_TREE)
3954     return;
3955
3956   num_parms = TREE_VEC_LENGTH (parameter_vec);
3957
3958   /* This vector contains the current innermost template parms that
3959      have been fixed up so far.  The form of FIXEDUP_ARGS is suitable
3960      to be passed to tsubst* functions as their ARGS argument.  */
3961   fixedup_args = make_tree_vec (num_parms);
3962
3963   /* This vector contains the full set of template parms in a form
3964      suitable to be passed to substs functions as their ARGS
3965      argument.  */
3966   arglist = current_template_args ();
3967   arglist = add_outermost_template_args (arglist, fixedup_args);
3968
3969   /* Let's do the proper fixup now.  */
3970   for (i = 0; i < num_parms; ++i)
3971     fixup_template_parm (TREE_VEC_ELT (parameter_vec, i),
3972                          i, num_parms, arglist);
3973 }
3974
3975 /* end_template_decl is called after a template declaration is seen.  */
3976
3977 void
3978 end_template_decl (void)
3979 {
3980   reset_specialization ();
3981
3982   if (! processing_template_decl)
3983     return;
3984
3985   /* This matches the pushlevel in begin_template_parm_list.  */
3986   finish_scope ();
3987
3988   --processing_template_decl;
3989   current_template_parms = TREE_CHAIN (current_template_parms);
3990 }
3991
3992 /* Takes a TREE_LIST representing a template parameter and convert it
3993    into an argument suitable to be passed to the type substitution
3994    functions.  Note that If the TREE_LIST contains an error_mark
3995    node, the returned argument is error_mark_node.  */
3996
3997 static tree
3998 template_parm_to_arg (tree t)
3999 {
4000
4001   if (t == NULL_TREE
4002       || TREE_CODE (t) != TREE_LIST)
4003     return t;
4004
4005   if (error_operand_p (TREE_VALUE (t)))
4006     return error_mark_node;
4007
4008   t = TREE_VALUE (t);
4009
4010   if (TREE_CODE (t) == TYPE_DECL
4011       || TREE_CODE (t) == TEMPLATE_DECL)
4012     {
4013       t = TREE_TYPE (t);
4014
4015       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
4016         {
4017           /* Turn this argument into a TYPE_ARGUMENT_PACK
4018              with a single element, which expands T.  */
4019           tree vec = make_tree_vec (1);
4020 #ifdef ENABLE_CHECKING
4021           SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT
4022             (vec, TREE_VEC_LENGTH (vec));
4023 #endif
4024           TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
4025
4026           t = cxx_make_type (TYPE_ARGUMENT_PACK);
4027           SET_ARGUMENT_PACK_ARGS (t, vec);
4028         }
4029     }
4030   else
4031     {
4032       t = DECL_INITIAL (t);
4033
4034       if (TEMPLATE_PARM_PARAMETER_PACK (t))
4035         {
4036           /* Turn this argument into a NONTYPE_ARGUMENT_PACK
4037              with a single element, which expands T.  */
4038           tree vec = make_tree_vec (1);
4039           tree type = TREE_TYPE (TEMPLATE_PARM_DECL (t));
4040 #ifdef ENABLE_CHECKING
4041           SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT
4042             (vec, TREE_VEC_LENGTH (vec));
4043 #endif
4044           TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
4045
4046           t  = make_node (NONTYPE_ARGUMENT_PACK);
4047           SET_ARGUMENT_PACK_ARGS (t, vec);
4048           TREE_TYPE (t) = type;
4049         }
4050     }
4051   return t;
4052 }
4053
4054 /* This function returns TRUE if PARM_PACK is a template parameter
4055    pack and if ARG_PACK is what template_parm_to_arg returned when
4056    passed PARM_PACK.  */
4057
4058 static bool
4059 arg_from_parm_pack_p (tree arg_pack, tree parm_pack)
4060 {
4061   /* For clarity in the comments below let's use the representation
4062      argument_pack<elements>' to denote an argument pack and its
4063      elements.
4064
4065      In the 'if' block below, we want to detect cases where
4066      ARG_PACK is argument_pack<PARM_PACK...>.  I.e, we want to
4067      check if ARG_PACK is an argument pack which sole element is
4068      the expansion of PARM_PACK.  That argument pack is typically
4069      created by template_parm_to_arg when passed a parameter
4070      pack.  */
4071
4072   if (arg_pack
4073       && TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack)) == 1
4074       && PACK_EXPANSION_P (TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0)))
4075     {
4076       tree expansion = TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0);
4077       tree pattern = PACK_EXPANSION_PATTERN (expansion);
4078       /* So we have an argument_pack<P...>.  We want to test if P
4079          is actually PARM_PACK.  We will not use cp_tree_equal to
4080          test P and PARM_PACK because during type fixup (by
4081          fixup_template_parm) P can be a pre-fixup version of a
4082          type and PARM_PACK be its post-fixup version.
4083          cp_tree_equal would consider them as different even
4084          though we would want to consider them compatible for our
4085          precise purpose here.
4086
4087          Thus we are going to consider that P and PARM_PACK are
4088          compatible if they have the same DECL.  */
4089       if ((/* If ARG_PACK is a type parameter pack named by the
4090               same DECL as parm_pack ...  */
4091            (TYPE_P (pattern)
4092             && TYPE_P (parm_pack)
4093             && TYPE_NAME (pattern) == TYPE_NAME (parm_pack))
4094            /* ... or if PARM_PACK is a non-type parameter named by the
4095               same DECL as ARG_PACK.  Note that PARM_PACK being a
4096               non-type parameter means it's either a PARM_DECL or a
4097               TEMPLATE_PARM_INDEX.  */
4098            || (TREE_CODE (pattern) == TEMPLATE_PARM_INDEX
4099                && ((TREE_CODE (parm_pack) == PARM_DECL
4100                     && (TEMPLATE_PARM_DECL (pattern)
4101                         == TEMPLATE_PARM_DECL (DECL_INITIAL (parm_pack))))
4102                    || (TREE_CODE (parm_pack) == TEMPLATE_PARM_INDEX
4103                        && (TEMPLATE_PARM_DECL (pattern)
4104                            == TEMPLATE_PARM_DECL (parm_pack))))))
4105           && template_parameter_pack_p (pattern))
4106         return true;
4107     }
4108   return false;
4109 }
4110
4111 /* Within the declaration of a template, return all levels of template
4112    parameters that apply.  The template parameters are represented as
4113    a TREE_VEC, in the form documented in cp-tree.h for template
4114    arguments.  */
4115
4116 static tree
4117 current_template_args (void)
4118 {
4119   tree header;
4120   tree args = NULL_TREE;
4121   int length = TMPL_PARMS_DEPTH (current_template_parms);
4122   int l = length;
4123
4124   /* If there is only one level of template parameters, we do not
4125      create a TREE_VEC of TREE_VECs.  Instead, we return a single
4126      TREE_VEC containing the arguments.  */
4127   if (length > 1)
4128     args = make_tree_vec (length);
4129
4130   for (header = current_template_parms; header; header = TREE_CHAIN (header))
4131     {
4132       tree a = copy_node (TREE_VALUE (header));
4133       int i;
4134
4135       TREE_TYPE (a) = NULL_TREE;
4136       for (i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
4137         TREE_VEC_ELT (a, i) = template_parm_to_arg (TREE_VEC_ELT (a, i));
4138
4139 #ifdef ENABLE_CHECKING
4140       SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (a, TREE_VEC_LENGTH (a));
4141 #endif
4142
4143       if (length > 1)
4144         TREE_VEC_ELT (args, --l) = a;
4145       else
4146         args = a;
4147     }
4148
4149     if (length > 1 && TREE_VEC_ELT (args, 0) == NULL_TREE)
4150       /* This can happen for template parms of a template template
4151          parameter, e.g:
4152
4153          template<template<class T, class U> class TT> struct S;
4154
4155          Consider the level of the parms of TT; T and U both have
4156          level 2; TT has no template parm of level 1. So in this case
4157          the first element of full_template_args is NULL_TREE. If we
4158          leave it like this TMPL_ARG_DEPTH on args returns 1 instead
4159          of 2. This will make tsubst wrongly consider that T and U
4160          have level 1. Instead, let's create a dummy vector as the
4161          first element of full_template_args so that TMPL_ARG_DEPTH
4162          returns the correct depth for args.  */
4163       TREE_VEC_ELT (args, 0) = make_tree_vec (1);
4164   return args;
4165 }
4166
4167 /* Update the declared TYPE by doing any lookups which were thought to be
4168    dependent, but are not now that we know the SCOPE of the declarator.  */
4169
4170 tree
4171 maybe_update_decl_type (tree orig_type, tree scope)
4172 {
4173   tree type = orig_type;
4174
4175   if (type == NULL_TREE)
4176     return type;
4177
4178   if (TREE_CODE (orig_type) == TYPE_DECL)
4179     type = TREE_TYPE (type);
4180
4181   if (scope && TYPE_P (scope) && dependent_type_p (scope)
4182       && dependent_type_p (type)
4183       /* Don't bother building up the args in this case.  */
4184       && TREE_CODE (type) != TEMPLATE_TYPE_PARM)
4185     {
4186       /* tsubst in the args corresponding to the template parameters,
4187          including auto if present.  Most things will be unchanged, but
4188          make_typename_type and tsubst_qualified_id will resolve
4189          TYPENAME_TYPEs and SCOPE_REFs that were previously dependent.  */
4190       tree args = current_template_args ();
4191       tree auto_node = type_uses_auto (type);
4192       tree pushed;
4193       if (auto_node)
4194         {
4195           tree auto_vec = make_tree_vec (1);
4196           TREE_VEC_ELT (auto_vec, 0) = auto_node;
4197           args = add_to_template_args (args, auto_vec);
4198         }
4199       pushed = push_scope (scope);
4200       type = tsubst (type, args, tf_warning_or_error, NULL_TREE);
4201       if (pushed)
4202         pop_scope (scope);
4203     }
4204
4205   if (type == error_mark_node)
4206     return orig_type;
4207
4208   if (TREE_CODE (orig_type) == TYPE_DECL)
4209     {
4210       if (same_type_p (type, TREE_TYPE (orig_type)))
4211         type = orig_type;
4212       else
4213         type = TYPE_NAME (type);
4214     }
4215   return type;
4216 }
4217
4218 /* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
4219    template PARMS.  If MEMBER_TEMPLATE_P is true, the new template is
4220    a member template.  Used by push_template_decl below.  */
4221
4222 static tree
4223 build_template_decl (tree decl, tree parms, bool member_template_p)
4224 {
4225   tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
4226   DECL_TEMPLATE_PARMS (tmpl) = parms;
4227   DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
4228   DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
4229   DECL_MEMBER_TEMPLATE_P (tmpl) = member_template_p;
4230
4231   return tmpl;
4232 }
4233
4234 struct template_parm_data
4235 {
4236   /* The level of the template parameters we are currently
4237      processing.  */
4238   int level;
4239
4240   /* The index of the specialization argument we are currently
4241      processing.  */
4242   int current_arg;
4243
4244   /* An array whose size is the number of template parameters.  The
4245      elements are nonzero if the parameter has been used in any one
4246      of the arguments processed so far.  */
4247   int* parms;
4248
4249   /* An array whose size is the number of template arguments.  The
4250      elements are nonzero if the argument makes use of template
4251      parameters of this level.  */
4252   int* arg_uses_template_parms;
4253 };
4254
4255 /* Subroutine of push_template_decl used to see if each template
4256    parameter in a partial specialization is used in the explicit
4257    argument list.  If T is of the LEVEL given in DATA (which is
4258    treated as a template_parm_data*), then DATA->PARMS is marked
4259    appropriately.  */
4260
4261 static int
4262 mark_template_parm (tree t, void* data)
4263 {
4264   int level;
4265   int idx;
4266   struct template_parm_data* tpd = (struct template_parm_data*) data;
4267
4268   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
4269     {
4270       level = TEMPLATE_PARM_LEVEL (t);
4271       idx = TEMPLATE_PARM_IDX (t);
4272     }
4273   else
4274     {
4275       level = TEMPLATE_TYPE_LEVEL (t);
4276       idx = TEMPLATE_TYPE_IDX (t);
4277     }
4278
4279   if (level == tpd->level)
4280     {
4281       tpd->parms[idx] = 1;
4282       tpd->arg_uses_template_parms[tpd->current_arg] = 1;
4283     }
4284
4285   /* Return zero so that for_each_template_parm will continue the
4286      traversal of the tree; we want to mark *every* template parm.  */
4287   return 0;
4288 }
4289
4290 /* Process the partial specialization DECL.  */
4291
4292 static tree
4293 process_partial_specialization (tree decl)
4294 {
4295   tree type = TREE_TYPE (decl);
4296   tree maintmpl = CLASSTYPE_TI_TEMPLATE (type);
4297   tree specargs = CLASSTYPE_TI_ARGS (type);
4298   tree inner_args = INNERMOST_TEMPLATE_ARGS (specargs);
4299   tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
4300   tree inner_parms;
4301   tree inst;
4302   int nargs = TREE_VEC_LENGTH (inner_args);
4303   int ntparms;
4304   int  i;
4305   bool did_error_intro = false;
4306   struct template_parm_data tpd;
4307   struct template_parm_data tpd2;
4308
4309   gcc_assert (current_template_parms);
4310
4311   inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
4312   ntparms = TREE_VEC_LENGTH (inner_parms);
4313
4314   /* We check that each of the template parameters given in the
4315      partial specialization is used in the argument list to the
4316      specialization.  For example:
4317
4318        template <class T> struct S;
4319        template <class T> struct S<T*>;
4320
4321      The second declaration is OK because `T*' uses the template
4322      parameter T, whereas
4323
4324        template <class T> struct S<int>;
4325
4326      is no good.  Even trickier is:
4327
4328        template <class T>
4329        struct S1
4330        {
4331           template <class U>
4332           struct S2;
4333           template <class U>
4334           struct S2<T>;
4335        };
4336
4337      The S2<T> declaration is actually invalid; it is a
4338      full-specialization.  Of course,
4339
4340           template <class U>
4341           struct S2<T (*)(U)>;
4342
4343      or some such would have been OK.  */
4344   tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
4345   tpd.parms = XALLOCAVEC (int, ntparms);
4346   memset (tpd.parms, 0, sizeof (int) * ntparms);
4347
4348   tpd.arg_uses_template_parms = XALLOCAVEC (int, nargs);
4349   memset (tpd.arg_uses_template_parms, 0, sizeof (int) * nargs);
4350   for (i = 0; i < nargs; ++i)
4351     {
4352       tpd.current_arg = i;
4353       for_each_template_parm (TREE_VEC_ELT (inner_args, i),
4354                               &mark_template_parm,
4355                               &tpd,
4356                               NULL,
4357                               /*include_nondeduced_p=*/false);
4358     }
4359   for (i = 0; i < ntparms; ++i)
4360     if (tpd.parms[i] == 0)
4361       {
4362         /* One of the template parms was not used in the
4363            specialization.  */
4364         if (!did_error_intro)
4365           {
4366             error ("template parameters not used in partial specialization:");
4367             did_error_intro = true;
4368           }
4369
4370         error ("        %qD", TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
4371       }
4372
4373   if (did_error_intro)
4374     return error_mark_node;
4375
4376   /* [temp.class.spec]
4377
4378      The argument list of the specialization shall not be identical to
4379      the implicit argument list of the primary template.  */
4380   if (comp_template_args
4381       (inner_args,
4382        INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE
4383                                                    (maintmpl)))))
4384     error ("partial specialization %qT does not specialize any template arguments", type);
4385
4386   /* [temp.class.spec]
4387
4388      A partially specialized non-type argument expression shall not
4389      involve template parameters of the partial specialization except
4390      when the argument expression is a simple identifier.
4391
4392      The type of a template parameter corresponding to a specialized
4393      non-type argument shall not be dependent on a parameter of the
4394      specialization. 
4395
4396      Also, we verify that pack expansions only occur at the
4397      end of the argument list.  */
4398   gcc_assert (nargs == DECL_NTPARMS (maintmpl));
4399   tpd2.parms = 0;
4400   for (i = 0; i < nargs; ++i)
4401     {
4402       tree parm = TREE_VALUE (TREE_VEC_ELT (main_inner_parms, i));
4403       tree arg = TREE_VEC_ELT (inner_args, i);
4404       tree packed_args = NULL_TREE;
4405       int j, len = 1;
4406
4407       if (ARGUMENT_PACK_P (arg))
4408         {
4409           /* Extract the arguments from the argument pack. We'll be
4410              iterating over these in the following loop.  */
4411           packed_args = ARGUMENT_PACK_ARGS (arg);
4412           len = TREE_VEC_LENGTH (packed_args);
4413         }
4414
4415       for (j = 0; j < len; j++)
4416         {
4417           if (packed_args)
4418             /* Get the Jth argument in the parameter pack.  */
4419             arg = TREE_VEC_ELT (packed_args, j);
4420
4421           if (PACK_EXPANSION_P (arg))
4422             {
4423               /* Pack expansions must come at the end of the
4424                  argument list.  */
4425               if ((packed_args && j < len - 1)
4426                   || (!packed_args && i < nargs - 1))
4427                 {
4428                   if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
4429                     error ("parameter pack argument %qE must be at the "
4430                            "end of the template argument list", arg);
4431                   else
4432                     error ("parameter pack argument %qT must be at the "
4433                            "end of the template argument list", arg);
4434                 }
4435             }
4436
4437           if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
4438             /* We only care about the pattern.  */
4439             arg = PACK_EXPANSION_PATTERN (arg);
4440
4441           if (/* These first two lines are the `non-type' bit.  */
4442               !TYPE_P (arg)
4443               && TREE_CODE (arg) != TEMPLATE_DECL
4444               /* This next line is the `argument expression is not just a
4445                  simple identifier' condition and also the `specialized
4446                  non-type argument' bit.  */
4447               && TREE_CODE (arg) != TEMPLATE_PARM_INDEX)
4448             {
4449               if ((!packed_args && tpd.arg_uses_template_parms[i])
4450                   || (packed_args && uses_template_parms (arg)))
4451                 error ("template argument %qE involves template parameter(s)",
4452                        arg);
4453               else 
4454                 {
4455                   /* Look at the corresponding template parameter,
4456                      marking which template parameters its type depends
4457                      upon.  */
4458                   tree type = TREE_TYPE (parm);
4459
4460                   if (!tpd2.parms)
4461                     {
4462                       /* We haven't yet initialized TPD2.  Do so now.  */
4463                       tpd2.arg_uses_template_parms = XALLOCAVEC (int, nargs);
4464                       /* The number of parameters here is the number in the
4465                          main template, which, as checked in the assertion
4466                          above, is NARGS.  */
4467                       tpd2.parms = XALLOCAVEC (int, nargs);
4468                       tpd2.level = 
4469                         TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
4470                     }
4471
4472                   /* Mark the template parameters.  But this time, we're
4473                      looking for the template parameters of the main
4474                      template, not in the specialization.  */
4475                   tpd2.current_arg = i;
4476                   tpd2.arg_uses_template_parms[i] = 0;
4477                   memset (tpd2.parms, 0, sizeof (int) * nargs);
4478                   for_each_template_parm (type,
4479                                           &mark_template_parm,
4480                                           &tpd2,
4481                                           NULL,
4482                                           /*include_nondeduced_p=*/false);
4483
4484                   if (tpd2.arg_uses_template_parms [i])
4485                     {
4486                       /* The type depended on some template parameters.
4487                          If they are fully specialized in the
4488                          specialization, that's OK.  */
4489                       int j;
4490                       int count = 0;
4491                       for (j = 0; j < nargs; ++j)
4492                         if (tpd2.parms[j] != 0
4493                             && tpd.arg_uses_template_parms [j])
4494                           ++count;
4495                       if (count != 0)
4496                         error_n (input_location, count,
4497                                  "type %qT of template argument %qE depends "
4498                                  "on a template parameter",
4499                                  "type %qT of template argument %qE depends "
4500                                  "on template parameters",
4501                                  type,
4502                                  arg);
4503                     }
4504                 }
4505             }
4506         }
4507     }
4508
4509   /* We should only get here once.  */
4510   gcc_assert (!COMPLETE_TYPE_P (type));
4511
4512   DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
4513     = tree_cons (specargs, inner_parms,
4514                  DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
4515   TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
4516
4517   for (inst = DECL_TEMPLATE_INSTANTIATIONS (maintmpl); inst;
4518        inst = TREE_CHAIN (inst))
4519     {
4520       tree inst_type = TREE_VALUE (inst);
4521       if (COMPLETE_TYPE_P (inst_type)
4522           && CLASSTYPE_IMPLICIT_INSTANTIATION (inst_type))
4523         {
4524           tree spec = most_specialized_class (inst_type, maintmpl, tf_none);
4525           if (spec && TREE_TYPE (spec) == type)
4526             permerror (input_location,
4527                        "partial specialization of %qT after instantiation "
4528                        "of %qT", type, inst_type);
4529         }
4530     }
4531
4532   return decl;
4533 }
4534
4535 /* Check that a template declaration's use of default arguments and
4536    parameter packs is not invalid.  Here, PARMS are the template
4537    parameters.  IS_PRIMARY is nonzero if DECL is the thing declared by
4538    a primary template.  IS_PARTIAL is nonzero if DECL is a partial
4539    specialization.
4540    
4541
4542    IS_FRIEND_DECL is nonzero if DECL is a friend function template
4543    declaration (but not a definition); 1 indicates a declaration, 2
4544    indicates a redeclaration. When IS_FRIEND_DECL=2, no errors are
4545    emitted for extraneous default arguments.
4546
4547    Returns TRUE if there were no errors found, FALSE otherwise. */
4548
4549 bool
4550 check_default_tmpl_args (tree decl, tree parms, int is_primary, 
4551                          int is_partial, int is_friend_decl)
4552 {
4553   const char *msg;
4554   int last_level_to_check;
4555   tree parm_level;
4556   bool no_errors = true;
4557
4558   /* [temp.param]
4559
4560      A default template-argument shall not be specified in a
4561      function template declaration or a function template definition, nor
4562      in the template-parameter-list of the definition of a member of a
4563      class template.  */
4564
4565   if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
4566     /* You can't have a function template declaration in a local
4567        scope, nor you can you define a member of a class template in a
4568        local scope.  */
4569     return true;
4570
4571   if (current_class_type
4572       && !TYPE_BEING_DEFINED (current_class_type)
4573       && DECL_LANG_SPECIFIC (decl)
4574       && DECL_DECLARES_FUNCTION_P (decl)
4575       /* If this is either a friend defined in the scope of the class
4576          or a member function.  */
4577       && (DECL_FUNCTION_MEMBER_P (decl)
4578           ? same_type_p (DECL_CONTEXT (decl), current_class_type)
4579           : DECL_FRIEND_CONTEXT (decl)
4580           ? same_type_p (DECL_FRIEND_CONTEXT (decl), current_class_type)
4581           : false)
4582       /* And, if it was a member function, it really was defined in
4583          the scope of the class.  */
4584       && (!DECL_FUNCTION_MEMBER_P (decl)
4585           || DECL_INITIALIZED_IN_CLASS_P (decl)))
4586     /* We already checked these parameters when the template was
4587        declared, so there's no need to do it again now.  This function
4588        was defined in class scope, but we're processing it's body now
4589        that the class is complete.  */
4590     return true;
4591
4592   /* Core issue 226 (C++0x only): the following only applies to class
4593      templates.  */
4594   if ((cxx_dialect == cxx98) || TREE_CODE (decl) != FUNCTION_DECL)
4595     {
4596       /* [temp.param]
4597
4598          If a template-parameter has a default template-argument, all
4599          subsequent template-parameters shall have a default
4600          template-argument supplied.  */
4601       for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
4602         {
4603           tree inner_parms = TREE_VALUE (parm_level);
4604           int ntparms = TREE_VEC_LENGTH (inner_parms);
4605           int seen_def_arg_p = 0;
4606           int i;
4607
4608           for (i = 0; i < ntparms; ++i)
4609             {
4610               tree parm = TREE_VEC_ELT (inner_parms, i);
4611
4612               if (parm == error_mark_node)
4613                 continue;
4614
4615               if (TREE_PURPOSE (parm))
4616                 seen_def_arg_p = 1;
4617               else if (seen_def_arg_p
4618                        && !template_parameter_pack_p (TREE_VALUE (parm)))
4619                 {
4620                   error ("no default argument for %qD", TREE_VALUE (parm));
4621                   /* For better subsequent error-recovery, we indicate that
4622                      there should have been a default argument.  */
4623                   TREE_PURPOSE (parm) = error_mark_node;
4624                   no_errors = false;
4625                 }
4626               else if (is_primary
4627                        && !is_partial
4628                        && !is_friend_decl
4629                        /* Don't complain about an enclosing partial
4630                           specialization.  */
4631                        && parm_level == parms
4632                        && TREE_CODE (decl) == TYPE_DECL
4633                        && i < ntparms - 1
4634                        && template_parameter_pack_p (TREE_VALUE (parm)))
4635                 {
4636                   /* A primary class template can only have one
4637                      parameter pack, at the end of the template
4638                      parameter list.  */
4639
4640                   if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL)
4641                     error ("parameter pack %qE must be at the end of the"
4642                            " template parameter list", TREE_VALUE (parm));
4643                   else
4644                     error ("parameter pack %qT must be at the end of the"
4645                            " template parameter list", 
4646                            TREE_TYPE (TREE_VALUE (parm)));
4647
4648                   TREE_VALUE (TREE_VEC_ELT (inner_parms, i)) 
4649                     = error_mark_node;
4650                   no_errors = false;
4651                 }
4652             }
4653         }
4654     }
4655
4656   if (((cxx_dialect == cxx98) && TREE_CODE (decl) != TYPE_DECL)
4657       || is_partial 
4658       || !is_primary
4659       || is_friend_decl)
4660     /* For an ordinary class template, default template arguments are
4661        allowed at the innermost level, e.g.:
4662          template <class T = int>
4663          struct S {};
4664        but, in a partial specialization, they're not allowed even
4665        there, as we have in [temp.class.spec]:
4666
4667          The template parameter list of a specialization shall not
4668          contain default template argument values.
4669
4670        So, for a partial specialization, or for a function template
4671        (in C++98/C++03), we look at all of them.  */
4672     ;
4673   else
4674     /* But, for a primary class template that is not a partial
4675        specialization we look at all template parameters except the
4676        innermost ones.  */
4677     parms = TREE_CHAIN (parms);
4678
4679   /* Figure out what error message to issue.  */
4680   if (is_friend_decl == 2)
4681     msg = G_("default template arguments may not be used in function template "
4682              "friend re-declaration");
4683   else if (is_friend_decl)
4684     msg = G_("default template arguments may not be used in function template "
4685              "friend declarations");
4686   else if (TREE_CODE (decl) == FUNCTION_DECL && (cxx_dialect == cxx98))
4687     msg = G_("default template arguments may not be used in function templates "
4688              "without -std=c++11 or -std=gnu++11");
4689   else if (is_partial)
4690     msg = G_("default template arguments may not be used in "
4691              "partial specializations");
4692   else
4693     msg = G_("default argument for template parameter for class enclosing %qD");
4694
4695   if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
4696     /* If we're inside a class definition, there's no need to
4697        examine the parameters to the class itself.  On the one
4698        hand, they will be checked when the class is defined, and,
4699        on the other, default arguments are valid in things like:
4700          template <class T = double>
4701          struct S { template <class U> void f(U); };
4702        Here the default argument for `S' has no bearing on the
4703        declaration of `f'.  */
4704     last_level_to_check = template_class_depth (current_class_type) + 1;
4705   else
4706     /* Check everything.  */
4707     last_level_to_check = 0;
4708
4709   for (parm_level = parms;
4710        parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check;
4711        parm_level = TREE_CHAIN (parm_level))
4712     {
4713       tree inner_parms = TREE_VALUE (parm_level);
4714       int i;
4715       int ntparms;
4716
4717       ntparms = TREE_VEC_LENGTH (inner_parms);
4718       for (i = 0; i < ntparms; ++i)
4719         {
4720           if (TREE_VEC_ELT (inner_parms, i) == error_mark_node)
4721             continue;
4722
4723           if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
4724             {
4725               if (msg)
4726                 {
4727                   no_errors = false;
4728                   if (is_friend_decl == 2)
4729                     return no_errors;
4730
4731                   error (msg, decl);
4732                   msg = 0;
4733                 }
4734
4735               /* Clear out the default argument so that we are not
4736                  confused later.  */
4737               TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
4738             }
4739         }
4740
4741       /* At this point, if we're still interested in issuing messages,
4742          they must apply to classes surrounding the object declared.  */
4743       if (msg)
4744         msg = G_("default argument for template parameter for class "
4745                  "enclosing %qD");
4746     }
4747
4748   return no_errors;
4749 }
4750
4751 /* Worker for push_template_decl_real, called via
4752    for_each_template_parm.  DATA is really an int, indicating the
4753    level of the parameters we are interested in.  If T is a template
4754    parameter of that level, return nonzero.  */
4755
4756 static int
4757 template_parm_this_level_p (tree t, void* data)
4758 {
4759   int this_level = *(int *)data;
4760   int level;
4761
4762   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
4763     level = TEMPLATE_PARM_LEVEL (t);
4764   else
4765     level = TEMPLATE_TYPE_LEVEL (t);
4766   return level == this_level;
4767 }
4768
4769 /* Creates a TEMPLATE_DECL for the indicated DECL using the template
4770    parameters given by current_template_args, or reuses a
4771    previously existing one, if appropriate.  Returns the DECL, or an
4772    equivalent one, if it is replaced via a call to duplicate_decls.
4773
4774    If IS_FRIEND is true, DECL is a friend declaration.  */
4775
4776 tree
4777 push_template_decl_real (tree decl, bool is_friend)
4778 {
4779   tree tmpl;
4780   tree args;
4781   tree info;
4782   tree ctx;
4783   int primary;
4784   int is_partial;
4785   int new_template_p = 0;
4786   /* True if the template is a member template, in the sense of
4787      [temp.mem].  */
4788   bool member_template_p = false;
4789
4790   if (decl == error_mark_node || !current_template_parms)
4791     return error_mark_node;
4792
4793   /* See if this is a partial specialization.  */
4794   is_partial = (DECL_IMPLICIT_TYPEDEF_P (decl)
4795                 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
4796                 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)));
4797
4798   if (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl))
4799     is_friend = true;
4800
4801   if (is_friend)
4802     /* For a friend, we want the context of the friend function, not
4803        the type of which it is a friend.  */
4804     ctx = CP_DECL_CONTEXT (decl);
4805   else if (CP_DECL_CONTEXT (decl)
4806            && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
4807     /* In the case of a virtual function, we want the class in which
4808        it is defined.  */
4809     ctx = CP_DECL_CONTEXT (decl);
4810   else
4811     /* Otherwise, if we're currently defining some class, the DECL
4812        is assumed to be a member of the class.  */
4813     ctx = current_scope ();
4814
4815   if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
4816     ctx = NULL_TREE;
4817
4818   if (!DECL_CONTEXT (decl))
4819     DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
4820
4821   /* See if this is a primary template.  */
4822   if (is_friend && ctx)
4823     /* A friend template that specifies a class context, i.e.
4824          template <typename T> friend void A<T>::f();
4825        is not primary.  */
4826     primary = 0;
4827   else
4828     primary = template_parm_scope_p ();
4829
4830   if (primary)
4831     {
4832       if (DECL_CLASS_SCOPE_P (decl))
4833         member_template_p = true;
4834       if (TREE_CODE (decl) == TYPE_DECL
4835           && ANON_AGGRNAME_P (DECL_NAME (decl)))
4836         {
4837           error ("template class without a name");
4838           return error_mark_node;
4839         }
4840       else if (TREE_CODE (decl) == FUNCTION_DECL)
4841         {
4842           if (DECL_DESTRUCTOR_P (decl))
4843             {
4844               /* [temp.mem]
4845
4846                  A destructor shall not be a member template.  */
4847               error ("destructor %qD declared as member template", decl);
4848               return error_mark_node;
4849             }
4850           if (NEW_DELETE_OPNAME_P (DECL_NAME (decl))
4851               && (!prototype_p (TREE_TYPE (decl))
4852                   || TYPE_ARG_TYPES (TREE_TYPE (decl)) == void_list_node
4853                   || !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
4854                   || (TREE_CHAIN (TYPE_ARG_TYPES ((TREE_TYPE (decl))))
4855                       == void_list_node)))
4856             {
4857               /* [basic.stc.dynamic.allocation]
4858
4859                  An allocation function can be a function
4860                  template. ... Template allocation functions shall
4861                  have two or more parameters.  */
4862               error ("invalid template declaration of %qD", decl);
4863               return error_mark_node;
4864             }
4865         }
4866       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
4867                && CLASS_TYPE_P (TREE_TYPE (decl)))
4868         /* OK */;
4869       else if (TREE_CODE (decl) == TYPE_DECL
4870                && TYPE_DECL_ALIAS_P (decl))
4871         /* alias-declaration */
4872         gcc_assert (!DECL_ARTIFICIAL (decl));
4873       else
4874         {
4875           error ("template declaration of %q#D", decl);
4876           return error_mark_node;
4877         }
4878     }
4879
4880   /* Check to see that the rules regarding the use of default
4881      arguments are not being violated.  */
4882   check_default_tmpl_args (decl, current_template_parms,
4883                            primary, is_partial, /*is_friend_decl=*/0);
4884
4885   /* Ensure that there are no parameter packs in the type of this
4886      declaration that have not been expanded.  */
4887   if (TREE_CODE (decl) == FUNCTION_DECL)
4888     {
4889       /* Check each of the arguments individually to see if there are
4890          any bare parameter packs.  */
4891       tree type = TREE_TYPE (decl);
4892       tree arg = DECL_ARGUMENTS (decl);
4893       tree argtype = TYPE_ARG_TYPES (type);
4894
4895       while (arg && argtype)
4896         {
4897           if (!FUNCTION_PARAMETER_PACK_P (arg)
4898               && check_for_bare_parameter_packs (TREE_TYPE (arg)))
4899             {
4900             /* This is a PARM_DECL that contains unexpanded parameter
4901                packs. We have already complained about this in the
4902                check_for_bare_parameter_packs call, so just replace
4903                these types with ERROR_MARK_NODE.  */
4904               TREE_TYPE (arg) = error_mark_node;
4905               TREE_VALUE (argtype) = error_mark_node;
4906             }
4907
4908           arg = DECL_CHAIN (arg);
4909           argtype = TREE_CHAIN (argtype);
4910         }
4911
4912       /* Check for bare parameter packs in the return type and the
4913          exception specifiers.  */
4914       if (check_for_bare_parameter_packs (TREE_TYPE (type)))
4915         /* Errors were already issued, set return type to int
4916            as the frontend doesn't expect error_mark_node as
4917            the return type.  */
4918         TREE_TYPE (type) = integer_type_node;
4919       if (check_for_bare_parameter_packs (TYPE_RAISES_EXCEPTIONS (type)))
4920         TYPE_RAISES_EXCEPTIONS (type) = NULL_TREE;
4921     }
4922   else if (check_for_bare_parameter_packs ((TREE_CODE (decl) == TYPE_DECL
4923                                             && TYPE_DECL_ALIAS_P (decl))
4924                                            ? DECL_ORIGINAL_TYPE (decl)
4925                                            : TREE_TYPE (decl)))
4926     {
4927       TREE_TYPE (decl) = error_mark_node;
4928       return error_mark_node;
4929     }
4930
4931   if (is_partial)
4932     return process_partial_specialization (decl);
4933
4934   args = current_template_args ();
4935
4936   if (!ctx
4937       || TREE_CODE (ctx) == FUNCTION_DECL
4938       || (CLASS_TYPE_P (ctx) && TYPE_BEING_DEFINED (ctx))
4939       || (is_friend && !DECL_TEMPLATE_INFO (decl)))
4940     {
4941       if (DECL_LANG_SPECIFIC (decl)
4942           && DECL_TEMPLATE_INFO (decl)
4943           && DECL_TI_TEMPLATE (decl))
4944         tmpl = DECL_TI_TEMPLATE (decl);
4945       /* If DECL is a TYPE_DECL for a class-template, then there won't
4946          be DECL_LANG_SPECIFIC.  The information equivalent to
4947          DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead.  */
4948       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
4949                && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
4950                && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
4951         {
4952           /* Since a template declaration already existed for this
4953              class-type, we must be redeclaring it here.  Make sure
4954              that the redeclaration is valid.  */
4955           redeclare_class_template (TREE_TYPE (decl),
4956                                     current_template_parms);
4957           /* We don't need to create a new TEMPLATE_DECL; just use the
4958              one we already had.  */
4959           tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
4960         }
4961       else
4962         {
4963           tmpl = build_template_decl (decl, current_template_parms,
4964                                       member_template_p);
4965           new_template_p = 1;
4966
4967           if (DECL_LANG_SPECIFIC (decl)
4968               && DECL_TEMPLATE_SPECIALIZATION (decl))
4969             {
4970               /* A specialization of a member template of a template
4971                  class.  */
4972               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
4973               DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
4974               DECL_TEMPLATE_INFO (decl) = NULL_TREE;
4975             }
4976         }
4977     }
4978   else
4979     {
4980       tree a, t, current, parms;
4981       int i;
4982       tree tinfo = get_template_info (decl);
4983
4984       if (!tinfo)
4985         {
4986           error ("template definition of non-template %q#D", decl);
4987           return error_mark_node;
4988         }
4989
4990       tmpl = TI_TEMPLATE (tinfo);
4991
4992       if (DECL_FUNCTION_TEMPLATE_P (tmpl)
4993           && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
4994           && DECL_TEMPLATE_SPECIALIZATION (decl)
4995           && DECL_MEMBER_TEMPLATE_P (tmpl))
4996         {
4997           tree new_tmpl;
4998
4999           /* The declaration is a specialization of a member
5000              template, declared outside the class.  Therefore, the
5001              innermost template arguments will be NULL, so we
5002              replace them with the arguments determined by the
5003              earlier call to check_explicit_specialization.  */
5004           args = DECL_TI_ARGS (decl);
5005
5006           new_tmpl
5007             = build_template_decl (decl, current_template_parms,
5008                                    member_template_p);
5009           DECL_TEMPLATE_RESULT (new_tmpl) = decl;
5010           TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
5011           DECL_TI_TEMPLATE (decl) = new_tmpl;
5012           SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
5013           DECL_TEMPLATE_INFO (new_tmpl)
5014             = build_template_info (tmpl, args);
5015
5016           register_specialization (new_tmpl,
5017                                    most_general_template (tmpl),
5018                                    args,
5019                                    is_friend, 0);
5020           return decl;
5021         }
5022
5023       /* Make sure the template headers we got make sense.  */
5024
5025       parms = DECL_TEMPLATE_PARMS (tmpl);
5026       i = TMPL_PARMS_DEPTH (parms);
5027       if (TMPL_ARGS_DEPTH (args) != i)
5028         {
5029           error ("expected %d levels of template parms for %q#D, got %d",
5030                  i, decl, TMPL_ARGS_DEPTH (args));
5031         }
5032       else
5033         for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
5034           {
5035             a = TMPL_ARGS_LEVEL (args, i);
5036             t = INNERMOST_TEMPLATE_PARMS (parms);
5037
5038             if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
5039               {
5040                 if (current == decl)
5041                   error ("got %d template parameters for %q#D",
5042                          TREE_VEC_LENGTH (a), decl);
5043                 else
5044                   error ("got %d template parameters for %q#T",
5045                          TREE_VEC_LENGTH (a), current);
5046                 error ("  but %d required", TREE_VEC_LENGTH (t));
5047                 return error_mark_node;
5048               }
5049
5050             if (current == decl)
5051               current = ctx;
5052             else if (current == NULL_TREE)
5053               /* Can happen in erroneous input.  */
5054               break;
5055             else
5056               current = (TYPE_P (current)
5057                          ? TYPE_CONTEXT (current)
5058                          : DECL_CONTEXT (current));
5059           }
5060
5061       /* Check that the parms are used in the appropriate qualifying scopes
5062          in the declarator.  */
5063       if (!comp_template_args
5064           (TI_ARGS (tinfo),
5065            TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (tmpl)))))
5066         {
5067           error ("\
5068 template arguments to %qD do not match original template %qD",
5069                  decl, DECL_TEMPLATE_RESULT (tmpl));
5070           if (!uses_template_parms (TI_ARGS (tinfo)))
5071             inform (input_location, "use template<> for an explicit specialization");
5072           /* Avoid crash in import_export_decl.  */
5073           DECL_INTERFACE_KNOWN (decl) = 1;
5074           return error_mark_node;
5075         }
5076     }
5077
5078   DECL_TEMPLATE_RESULT (tmpl) = decl;
5079   TREE_TYPE (tmpl) = TREE_TYPE (decl);
5080
5081   /* Push template declarations for global functions and types.  Note
5082      that we do not try to push a global template friend declared in a
5083      template class; such a thing may well depend on the template
5084      parameters of the class.  */
5085   if (new_template_p && !ctx
5086       && !(is_friend && template_class_depth (current_class_type) > 0))
5087     {
5088       tmpl = pushdecl_namespace_level (tmpl, is_friend);
5089       if (tmpl == error_mark_node)
5090         return error_mark_node;
5091
5092       /* Hide template friend classes that haven't been declared yet.  */
5093       if (is_friend && TREE_CODE (decl) == TYPE_DECL)
5094         {
5095           DECL_ANTICIPATED (tmpl) = 1;
5096           DECL_FRIEND_P (tmpl) = 1;
5097         }
5098     }
5099
5100   if (primary)
5101     {
5102       tree parms = DECL_TEMPLATE_PARMS (tmpl);
5103       int i;
5104
5105       DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
5106       if (DECL_CONV_FN_P (tmpl))
5107         {
5108           int depth = TMPL_PARMS_DEPTH (parms);
5109
5110           /* It is a conversion operator. See if the type converted to
5111              depends on innermost template operands.  */
5112
5113           if (uses_template_parms_level (TREE_TYPE (TREE_TYPE (tmpl)),
5114                                          depth))
5115             DECL_TEMPLATE_CONV_FN_P (tmpl) = 1;
5116         }
5117
5118       /* Give template template parms a DECL_CONTEXT of the template
5119          for which they are a parameter.  */
5120       parms = INNERMOST_TEMPLATE_PARMS (parms);
5121       for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
5122         {
5123           tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
5124           if (TREE_CODE (parm) == TEMPLATE_DECL)
5125             DECL_CONTEXT (parm) = tmpl;
5126         }
5127     }
5128
5129   /* The DECL_TI_ARGS of DECL contains full set of arguments referring
5130      back to its most general template.  If TMPL is a specialization,
5131      ARGS may only have the innermost set of arguments.  Add the missing
5132      argument levels if necessary.  */
5133   if (DECL_TEMPLATE_INFO (tmpl))
5134     args = add_outermost_template_args (DECL_TI_ARGS (tmpl), args);
5135
5136   info = build_template_info (tmpl, args);
5137
5138   if (DECL_IMPLICIT_TYPEDEF_P (decl))
5139     SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
5140   else
5141     {
5142       if (primary && !DECL_LANG_SPECIFIC (decl))
5143         retrofit_lang_decl (decl);
5144       if (DECL_LANG_SPECIFIC (decl))
5145         DECL_TEMPLATE_INFO (decl) = info;
5146     }
5147
5148   return DECL_TEMPLATE_RESULT (tmpl);
5149 }
5150
5151 tree
5152 push_template_decl (tree decl)
5153 {
5154   return push_template_decl_real (decl, false);
5155 }
5156
5157 /* Called when a class template TYPE is redeclared with the indicated
5158    template PARMS, e.g.:
5159
5160      template <class T> struct S;
5161      template <class T> struct S {};  */
5162
5163 bool
5164 redeclare_class_template (tree type, tree parms)
5165 {
5166   tree tmpl;
5167   tree tmpl_parms;
5168   int i;
5169
5170   if (!TYPE_TEMPLATE_INFO (type))
5171     {
5172       error ("%qT is not a template type", type);
5173       return false;
5174     }
5175
5176   tmpl = TYPE_TI_TEMPLATE (type);
5177   if (!PRIMARY_TEMPLATE_P (tmpl))
5178     /* The type is nested in some template class.  Nothing to worry
5179        about here; there are no new template parameters for the nested
5180        type.  */
5181     return true;
5182
5183   if (!parms)
5184     {
5185       error ("template specifiers not specified in declaration of %qD",
5186              tmpl);
5187       return false;
5188     }
5189
5190   parms = INNERMOST_TEMPLATE_PARMS (parms);
5191   tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
5192
5193   if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
5194     {
5195       error_n (input_location, TREE_VEC_LENGTH (parms),
5196                "redeclared with %d template parameter",
5197                "redeclared with %d template parameters",
5198                TREE_VEC_LENGTH (parms));
5199       inform_n (input_location, TREE_VEC_LENGTH (tmpl_parms),
5200                 "previous declaration %q+D used %d template parameter",
5201                 "previous declaration %q+D used %d template parameters",
5202                 tmpl, TREE_VEC_LENGTH (tmpl_parms));
5203       return false;
5204     }
5205
5206   for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
5207     {
5208       tree tmpl_parm;
5209       tree parm;
5210       tree tmpl_default;
5211       tree parm_default;
5212
5213       if (TREE_VEC_ELT (tmpl_parms, i) == error_mark_node
5214           || TREE_VEC_ELT (parms, i) == error_mark_node)
5215         continue;
5216
5217       tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
5218       if (tmpl_parm == error_mark_node)
5219         return false;
5220
5221       parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
5222       tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
5223       parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
5224
5225       /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
5226          TEMPLATE_DECL.  */
5227       if (TREE_CODE (tmpl_parm) != TREE_CODE (parm)
5228           || (TREE_CODE (tmpl_parm) != TYPE_DECL
5229               && !same_type_p (TREE_TYPE (tmpl_parm), TREE_TYPE (parm)))
5230           || (TREE_CODE (tmpl_parm) != PARM_DECL
5231               && (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (tmpl_parm))
5232                   != TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm))))
5233           || (TREE_CODE (tmpl_parm) == PARM_DECL
5234               && (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (tmpl_parm))
5235                   != TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))))
5236         {
5237           error ("template parameter %q+#D", tmpl_parm);
5238           error ("redeclared here as %q#D", parm);
5239           return false;
5240         }
5241
5242       if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
5243         {
5244           /* We have in [temp.param]:
5245
5246              A template-parameter may not be given default arguments
5247              by two different declarations in the same scope.  */
5248           error_at (input_location, "redefinition of default argument for %q#D", parm);
5249           inform (DECL_SOURCE_LOCATION (tmpl_parm),
5250                   "original definition appeared here");
5251           return false;
5252         }
5253
5254       if (parm_default != NULL_TREE)
5255         /* Update the previous template parameters (which are the ones
5256            that will really count) with the new default value.  */
5257         TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
5258       else if (tmpl_default != NULL_TREE)
5259         /* Update the new parameters, too; they'll be used as the
5260            parameters for any members.  */
5261         TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
5262     }
5263
5264     return true;
5265 }
5266
5267 /* Simplify EXPR if it is a non-dependent expression.  Returns the
5268    (possibly simplified) expression.  */
5269
5270 static tree
5271 fold_non_dependent_expr_sfinae (tree expr, tsubst_flags_t complain)
5272 {
5273   if (expr == NULL_TREE)
5274     return NULL_TREE;
5275
5276   /* If we're in a template, but EXPR isn't value dependent, simplify
5277      it.  We're supposed to treat:
5278
5279        template <typename T> void f(T[1 + 1]);
5280        template <typename T> void f(T[2]);
5281
5282      as two declarations of the same function, for example.  */
5283   if (processing_template_decl
5284       && !type_dependent_expression_p (expr)
5285       && potential_constant_expression (expr)
5286       && !value_dependent_expression_p (expr))
5287     {
5288       HOST_WIDE_INT saved_processing_template_decl;
5289
5290       saved_processing_template_decl = processing_template_decl;
5291       processing_template_decl = 0;
5292       expr = tsubst_copy_and_build (expr,
5293                                     /*args=*/NULL_TREE,
5294                                     complain,
5295                                     /*in_decl=*/NULL_TREE,
5296                                     /*function_p=*/false,
5297                                     /*integral_constant_expression_p=*/true);
5298       processing_template_decl = saved_processing_template_decl;
5299     }
5300   return expr;
5301 }
5302
5303 tree
5304 fold_non_dependent_expr (tree expr)
5305 {
5306   return fold_non_dependent_expr_sfinae (expr, tf_error);
5307 }
5308
5309 /* Return TRUE iff T is a type alias, a TEMPLATE_DECL for an alias
5310    template declaration, or a TYPE_DECL for an alias declaration.  */
5311
5312 bool
5313 alias_type_or_template_p (tree t)
5314 {
5315   if (t == NULL_TREE)
5316     return false;
5317   return ((TREE_CODE (t) == TYPE_DECL && TYPE_DECL_ALIAS_P (t))
5318           || (TYPE_P (t)
5319               && TYPE_NAME (t)
5320               && TYPE_DECL_ALIAS_P (TYPE_NAME (t)))
5321           || DECL_ALIAS_TEMPLATE_P (t));
5322 }
5323
5324 /* Return TRUE iff is a specialization of an alias template.  */
5325
5326 bool
5327 alias_template_specialization_p (tree t)
5328 {
5329   if (t == NULL_TREE)
5330     return false;
5331   return (primary_template_instantiation_p (t)
5332           && DECL_ALIAS_TEMPLATE_P (TYPE_TI_TEMPLATE (t)));
5333 }
5334
5335 /* Subroutine of convert_nontype_argument. Converts EXPR to TYPE, which
5336    must be a function or a pointer-to-function type, as specified
5337    in [temp.arg.nontype]: disambiguate EXPR if it is an overload set,
5338    and check that the resulting function has external linkage.  */
5339
5340 static tree
5341 convert_nontype_argument_function (tree type, tree expr)
5342 {
5343   tree fns = expr;
5344   tree fn, fn_no_ptr;
5345   linkage_kind linkage;
5346
5347   fn = instantiate_type (type, fns, tf_none);
5348   if (fn == error_mark_node)
5349     return error_mark_node;
5350
5351   fn_no_ptr = fn;
5352   if (TREE_CODE (fn_no_ptr) == ADDR_EXPR)
5353     fn_no_ptr = TREE_OPERAND (fn_no_ptr, 0);
5354   if (BASELINK_P (fn_no_ptr))
5355     fn_no_ptr = BASELINK_FUNCTIONS (fn_no_ptr);
5356  
5357   /* [temp.arg.nontype]/1
5358
5359      A template-argument for a non-type, non-template template-parameter
5360      shall be one of:
5361      [...]
5362      -- the address of an object or function with external [C++11: or
5363         internal] linkage.  */
5364   linkage = decl_linkage (fn_no_ptr);
5365   if (cxx_dialect >= cxx0x ? linkage == lk_none : linkage != lk_external)
5366     {
5367       if (cxx_dialect >= cxx0x)
5368         error ("%qE is not a valid template argument for type %qT "
5369                "because %qD has no linkage",
5370                expr, type, fn_no_ptr);
5371       else
5372         error ("%qE is not a valid template argument for type %qT "
5373                "because %qD does not have external linkage",
5374                expr, type, fn_no_ptr);
5375       return NULL_TREE;
5376     }
5377
5378   return fn;
5379 }
5380
5381 /* Subroutine of convert_nontype_argument.
5382    Check if EXPR of type TYPE is a valid pointer-to-member constant.
5383    Emit an error otherwise.  */
5384
5385 static bool
5386 check_valid_ptrmem_cst_expr (tree type, tree expr,
5387                              tsubst_flags_t complain)
5388 {
5389   STRIP_NOPS (expr);
5390   if (expr && (null_ptr_cst_p (expr) || TREE_CODE (expr) == PTRMEM_CST))
5391     return true;
5392   if (cxx_dialect >= cxx0x && null_member_pointer_value_p (expr))
5393     return true;
5394   if (complain & tf_error)
5395     {
5396       error ("%qE is not a valid template argument for type %qT",
5397              expr, type);
5398       error ("it must be a pointer-to-member of the form %<&X::Y%>");
5399     }
5400   return false;
5401 }
5402
5403 /* Returns TRUE iff the address of OP is value-dependent.
5404
5405    14.6.2.4 [temp.dep.temp]:
5406    A non-integral non-type template-argument is dependent if its type is
5407    dependent or it has either of the following forms
5408      qualified-id
5409      & qualified-id
5410    and contains a nested-name-specifier which specifies a class-name that
5411    names a dependent type.
5412
5413    We generalize this to just say that the address of a member of a
5414    dependent class is value-dependent; the above doesn't cover the
5415    address of a static data member named with an unqualified-id.  */
5416
5417 static bool
5418 has_value_dependent_address (tree op)
5419 {
5420   /* We could use get_inner_reference here, but there's no need;
5421      this is only relevant for template non-type arguments, which
5422      can only be expressed as &id-expression.  */
5423   if (DECL_P (op))
5424     {
5425       tree ctx = CP_DECL_CONTEXT (op);
5426       if (TYPE_P (ctx) && dependent_type_p (ctx))
5427         return true;
5428     }
5429
5430   return false;
5431 }
5432
5433 /* The next set of functions are used for providing helpful explanatory
5434    diagnostics for failed overload resolution.  Their messages should be
5435    indented by two spaces for consistency with the messages in
5436    call.c  */
5437
5438 static int
5439 unify_success (bool explain_p ATTRIBUTE_UNUSED)
5440 {
5441   return 0;
5442 }
5443
5444 static int
5445 unify_parameter_deduction_failure (bool explain_p, tree parm)
5446 {
5447   if (explain_p)
5448     inform (input_location,
5449             "  couldn't deduce template parameter %qD", parm);
5450   return 1;
5451 }
5452
5453 static int
5454 unify_invalid (bool explain_p ATTRIBUTE_UNUSED)
5455 {
5456   return 1;
5457 }
5458
5459 static int
5460 unify_cv_qual_mismatch (bool explain_p, tree parm, tree arg)
5461 {
5462   if (explain_p)
5463     inform (input_location,
5464             "  types %qT and %qT have incompatible cv-qualifiers",
5465             parm, arg);
5466   return 1;
5467 }
5468
5469 static int
5470 unify_type_mismatch (bool explain_p, tree parm, tree arg)
5471 {
5472   if (explain_p)
5473     inform (input_location, "  mismatched types %qT and %qT", parm, arg);
5474   return 1;
5475 }
5476
5477 static int
5478 unify_parameter_pack_mismatch (bool explain_p, tree parm, tree arg)
5479 {
5480   if (explain_p)
5481     inform (input_location,
5482             "  template parameter %qD is not a parameter pack, but "
5483             "argument %qD is",
5484             parm, arg);
5485   return 1;
5486 }
5487
5488 static int
5489 unify_ptrmem_cst_mismatch (bool explain_p, tree parm, tree arg)
5490 {
5491   if (explain_p)
5492     inform (input_location,
5493             "  template argument %qE does not match "
5494             "pointer-to-member constant %qE",
5495             arg, parm);
5496   return 1;
5497 }
5498
5499 static int
5500 unify_expression_unequal (bool explain_p, tree parm, tree arg)
5501 {
5502   if (explain_p)
5503     inform (input_location, "  %qE is not equivalent to %qE", parm, arg);
5504   return 1;
5505 }
5506
5507 static int
5508 unify_parameter_pack_inconsistent (bool explain_p, tree old_arg, tree new_arg)
5509 {
5510   if (explain_p)
5511     inform (input_location,
5512             "  inconsistent parameter pack deduction with %qT and %qT",
5513             old_arg, new_arg);
5514   return 1;
5515 }
5516
5517 static int
5518 unify_inconsistency (bool explain_p, tree parm, tree first, tree second)
5519 {
5520   if (explain_p)
5521     {
5522       if (TYPE_P (parm))
5523         inform (input_location,
5524                 "  deduced conflicting types for parameter %qT (%qT and %qT)",
5525                 parm, first, second);
5526       else
5527         inform (input_location,
5528                 "  deduced conflicting values for non-type parameter "
5529                 "%qE (%qE and %qE)", parm, first, second);
5530     }
5531   return 1;
5532 }
5533
5534 static int
5535 unify_vla_arg (bool explain_p, tree arg)
5536 {
5537   if (explain_p)
5538     inform (input_location,
5539             "  variable-sized array type %qT is not "
5540             "a valid template argument",
5541             arg);
5542   return 1;
5543 }
5544
5545 static int
5546 unify_method_type_error (bool explain_p, tree arg)
5547 {
5548   if (explain_p)
5549     inform (input_location,
5550             "  member function type %qT is not a valid template argument",
5551             arg);
5552   return 1;
5553 }
5554
5555 static int
5556 unify_arity (bool explain_p, int have, int wanted)
5557 {
5558   if (explain_p)
5559     inform_n (input_location, wanted,
5560               "  candidate expects %d argument, %d provided",
5561               "  candidate expects %d arguments, %d provided",
5562               wanted, have);
5563   return 1;
5564 }
5565
5566 static int
5567 unify_too_many_arguments (bool explain_p, int have, int wanted)
5568 {
5569   return unify_arity (explain_p, have, wanted);
5570 }
5571
5572 static int
5573 unify_too_few_arguments (bool explain_p, int have, int wanted)
5574 {
5575   return unify_arity (explain_p, have, wanted);
5576 }
5577
5578 static int
5579 unify_arg_conversion (bool explain_p, tree to_type,
5580                       tree from_type, tree arg)
5581 {
5582   if (explain_p)
5583     inform (input_location, "  cannot convert %qE (type %qT) to type %qT",
5584             arg, from_type, to_type);
5585   return 1;
5586 }
5587
5588 static int
5589 unify_no_common_base (bool explain_p, enum template_base_result r,
5590                       tree parm, tree arg)
5591 {
5592   if (explain_p)
5593     switch (r)
5594       {
5595       case tbr_ambiguous_baseclass:
5596         inform (input_location, "  %qT is an ambiguous base class of %qT",
5597                 arg, parm);
5598         break;
5599       default:
5600         inform (input_location, "  %qT is not derived from %qT", arg, parm);
5601         break;
5602       }
5603   return 1;
5604 }
5605
5606 static int
5607 unify_inconsistent_template_template_parameters (bool explain_p)
5608 {
5609   if (explain_p)
5610     inform (input_location,
5611             "  template parameters of a template template argument are "
5612             "inconsistent with other deduced template arguments");
5613   return 1;
5614 }
5615
5616 static int
5617 unify_template_deduction_failure (bool explain_p, tree parm, tree arg)
5618 {
5619   if (explain_p)
5620     inform (input_location,
5621             "  can't deduce a template for %qT from non-template type %qT",
5622             parm, arg);
5623   return 1;
5624 }
5625
5626 static int
5627 unify_template_argument_mismatch (bool explain_p, tree parm, tree arg)
5628 {
5629   if (explain_p)
5630     inform (input_location,
5631             "  template argument %qE does not match %qD", arg, parm);
5632   return 1;
5633 }
5634
5635 static int
5636 unify_overload_resolution_failure (bool explain_p, tree arg)
5637 {
5638   if (explain_p)
5639     inform (input_location,
5640             "  could not resolve address from overloaded function %qE",
5641             arg);
5642   return 1;
5643 }
5644
5645 /* Attempt to convert the non-type template parameter EXPR to the
5646    indicated TYPE.  If the conversion is successful, return the
5647    converted value.  If the conversion is unsuccessful, return
5648    NULL_TREE if we issued an error message, or error_mark_node if we
5649    did not.  We issue error messages for out-and-out bad template
5650    parameters, but not simply because the conversion failed, since we
5651    might be just trying to do argument deduction.  Both TYPE and EXPR
5652    must be non-dependent.
5653
5654    The conversion follows the special rules described in
5655    [temp.arg.nontype], and it is much more strict than an implicit
5656    conversion.
5657
5658    This function is called twice for each template argument (see
5659    lookup_template_class for a more accurate description of this
5660    problem). This means that we need to handle expressions which
5661    are not valid in a C++ source, but can be created from the
5662    first call (for instance, casts to perform conversions). These
5663    hacks can go away after we fix the double coercion problem.  */
5664
5665 static tree
5666 convert_nontype_argument (tree type, tree expr, tsubst_flags_t complain)
5667 {
5668   tree expr_type;
5669
5670   /* Detect immediately string literals as invalid non-type argument.
5671      This special-case is not needed for correctness (we would easily
5672      catch this later), but only to provide better diagnostic for this
5673      common user mistake. As suggested by DR 100, we do not mention
5674      linkage issues in the diagnostic as this is not the point.  */
5675   /* FIXME we're making this OK.  */
5676   if (TREE_CODE (expr) == STRING_CST)
5677     {
5678       if (complain & tf_error)
5679         error ("%qE is not a valid template argument for type %qT "
5680                "because string literals can never be used in this context",
5681                expr, type);
5682       return NULL_TREE;
5683     }
5684
5685   /* Add the ADDR_EXPR now for the benefit of
5686      value_dependent_expression_p.  */
5687   if (TYPE_PTROBV_P (type)
5688       && TREE_CODE (TREE_TYPE (expr)) == ARRAY_TYPE)
5689     expr = decay_conversion (expr);
5690
5691   /* If we are in a template, EXPR may be non-dependent, but still
5692      have a syntactic, rather than semantic, form.  For example, EXPR
5693      might be a SCOPE_REF, rather than the VAR_DECL to which the
5694      SCOPE_REF refers.  Preserving the qualifying scope is necessary
5695      so that access checking can be performed when the template is
5696      instantiated -- but here we need the resolved form so that we can
5697      convert the argument.  */
5698   if (TYPE_REF_OBJ_P (type)
5699       && has_value_dependent_address (expr))
5700     /* If we want the address and it's value-dependent, don't fold.  */;
5701   else if (!type_unknown_p (expr))
5702     expr = fold_non_dependent_expr_sfinae (expr, complain);
5703   if (error_operand_p (expr))
5704     return error_mark_node;
5705   expr_type = TREE_TYPE (expr);
5706   if (TREE_CODE (type) == REFERENCE_TYPE)
5707     expr = mark_lvalue_use (expr);
5708   else
5709     expr = mark_rvalue_use (expr);
5710
5711   /* 14.3.2/5: The null pointer{,-to-member} conversion is applied
5712      to a non-type argument of "nullptr".  */
5713   if (expr == nullptr_node
5714       && (TYPE_PTR_P (type) || TYPE_PTR_TO_MEMBER_P (type)))
5715     expr = convert (type, expr);
5716
5717   /* In C++11, integral or enumeration non-type template arguments can be
5718      arbitrary constant expressions.  Pointer and pointer to
5719      member arguments can be general constant expressions that evaluate
5720      to a null value, but otherwise still need to be of a specific form.  */
5721   if (cxx_dialect >= cxx0x)
5722     {
5723       if (TREE_CODE (expr) == PTRMEM_CST)
5724         /* A PTRMEM_CST is already constant, and a valid template
5725            argument for a parameter of pointer to member type, we just want
5726            to leave it in that form rather than lower it to a
5727            CONSTRUCTOR.  */;
5728       else if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
5729         expr = maybe_constant_value (expr);
5730       else if (TYPE_PTR_P (type)
5731                || TYPE_PTR_TO_MEMBER_P (type))
5732         {
5733           tree folded = maybe_constant_value (expr);
5734           if (TYPE_PTR_P (type) ? integer_zerop (folded)
5735               : null_member_pointer_value_p (folded))
5736             expr = folded;
5737         }
5738     }
5739
5740   /* HACK: Due to double coercion, we can get a
5741      NOP_EXPR<REFERENCE_TYPE>(ADDR_EXPR<POINTER_TYPE> (arg)) here,
5742      which is the tree that we built on the first call (see
5743      below when coercing to reference to object or to reference to
5744      function). We just strip everything and get to the arg.
5745      See g++.old-deja/g++.oliva/template4.C and g++.dg/template/nontype9.C
5746      for examples.  */
5747   if (TYPE_REF_OBJ_P (type) || TYPE_REFFN_P (type))
5748     {
5749       tree probe_type, probe = expr;
5750       if (REFERENCE_REF_P (probe))
5751         probe = TREE_OPERAND (probe, 0);
5752       probe_type = TREE_TYPE (probe);
5753       if (TREE_CODE (probe) == NOP_EXPR)
5754         {
5755           /* ??? Maybe we could use convert_from_reference here, but we
5756              would need to relax its constraints because the NOP_EXPR
5757              could actually change the type to something more cv-qualified,
5758              and this is not folded by convert_from_reference.  */
5759           tree addr = TREE_OPERAND (probe, 0);
5760           gcc_assert (TREE_CODE (probe_type) == REFERENCE_TYPE);
5761           gcc_assert (TREE_CODE (addr) == ADDR_EXPR);
5762           gcc_assert (TREE_CODE (TREE_TYPE (addr)) == POINTER_TYPE);
5763           gcc_assert (same_type_ignoring_top_level_qualifiers_p
5764                       (TREE_TYPE (probe_type),
5765                        TREE_TYPE (TREE_TYPE (addr))));
5766
5767           expr = TREE_OPERAND (addr, 0);
5768           expr_type = TREE_TYPE (expr);
5769         }
5770     }
5771
5772   /* We could also generate a NOP_EXPR(ADDR_EXPR()) when the
5773      parameter is a pointer to object, through decay and
5774      qualification conversion. Let's strip everything.  */
5775   else if (TREE_CODE (expr) == NOP_EXPR && TYPE_PTROBV_P (type))
5776     {
5777       STRIP_NOPS (expr);
5778       gcc_assert (TREE_CODE (expr) == ADDR_EXPR);
5779       gcc_assert (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE);
5780       /* Skip the ADDR_EXPR only if it is part of the decay for
5781          an array. Otherwise, it is part of the original argument
5782          in the source code.  */
5783       if (TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == ARRAY_TYPE)
5784         expr = TREE_OPERAND (expr, 0);
5785       expr_type = TREE_TYPE (expr);
5786     }
5787
5788   /* [temp.arg.nontype]/5, bullet 1
5789
5790      For a non-type template-parameter of integral or enumeration type,
5791      integral promotions (_conv.prom_) and integral conversions
5792      (_conv.integral_) are applied.  */
5793   if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
5794     {
5795       tree t = build_integral_nontype_arg_conv (type, expr, complain);
5796       t = maybe_constant_value (t);
5797       if (t != error_mark_node)
5798         expr = t;
5799
5800       if (!same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (expr)))
5801         return error_mark_node;
5802
5803       /* Notice that there are constant expressions like '4 % 0' which
5804          do not fold into integer constants.  */
5805       if (TREE_CODE (expr) != INTEGER_CST)
5806         {
5807           if (complain & tf_error)
5808             {
5809               int errs = errorcount, warns = warningcount;
5810               expr = cxx_constant_value (expr);
5811               if (errorcount > errs || warningcount > warns)
5812                 inform (EXPR_LOC_OR_HERE (expr),
5813                         "in template argument for type %qT ", type);
5814               if (expr == error_mark_node)
5815                 return NULL_TREE;
5816               /* else cxx_constant_value complained but gave us
5817                  a real constant, so go ahead.  */
5818               gcc_assert (TREE_CODE (expr) == INTEGER_CST);
5819             }
5820           else
5821             return NULL_TREE;
5822         }
5823     }
5824   /* [temp.arg.nontype]/5, bullet 2
5825
5826      For a non-type template-parameter of type pointer to object,
5827      qualification conversions (_conv.qual_) and the array-to-pointer
5828      conversion (_conv.array_) are applied.  */
5829   else if (TYPE_PTROBV_P (type))
5830     {
5831       /* [temp.arg.nontype]/1  (TC1 version, DR 49):
5832
5833          A template-argument for a non-type, non-template template-parameter
5834          shall be one of: [...]
5835
5836          -- the name of a non-type template-parameter;
5837          -- the address of an object or function with external linkage, [...]
5838             expressed as "& id-expression" where the & is optional if the name
5839             refers to a function or array, or if the corresponding
5840             template-parameter is a reference.
5841
5842         Here, we do not care about functions, as they are invalid anyway
5843         for a parameter of type pointer-to-object.  */
5844
5845       if (DECL_P (expr) && DECL_TEMPLATE_PARM_P (expr))
5846         /* Non-type template parameters are OK.  */
5847         ;
5848       else if (cxx_dialect >= cxx0x && integer_zerop (expr))
5849         /* Null pointer values are OK in C++11.  */;
5850       else if (TREE_CODE (expr) != ADDR_EXPR
5851                && TREE_CODE (expr_type) != ARRAY_TYPE)
5852         {
5853           if (TREE_CODE (expr) == VAR_DECL)
5854             {
5855               error ("%qD is not a valid template argument "
5856                      "because %qD is a variable, not the address of "
5857                      "a variable",
5858                      expr, expr);
5859               return NULL_TREE;
5860             }
5861           /* Other values, like integer constants, might be valid
5862              non-type arguments of some other type.  */
5863           return error_mark_node;
5864         }
5865       else
5866         {
5867           tree decl;
5868
5869           decl = ((TREE_CODE (expr) == ADDR_EXPR)
5870                   ? TREE_OPERAND (expr, 0) : expr);
5871           if (TREE_CODE (decl) != VAR_DECL)
5872             {
5873               error ("%qE is not a valid template argument of type %qT "
5874                      "because %qE is not a variable",
5875                      expr, type, decl);
5876               return NULL_TREE;
5877             }
5878           else if (cxx_dialect < cxx0x && !DECL_EXTERNAL_LINKAGE_P (decl))
5879             {
5880               error ("%qE is not a valid template argument of type %qT "
5881                      "because %qD does not have external linkage",
5882                      expr, type, decl);
5883               return NULL_TREE;
5884             }
5885           else if (cxx_dialect >= cxx0x && decl_linkage (decl) == lk_none)
5886             {
5887               error ("%qE is not a valid template argument of type %qT "
5888                      "because %qD has no linkage",
5889                      expr, type, decl);
5890               return NULL_TREE;
5891             }
5892         }
5893
5894       expr = decay_conversion (expr);
5895       if (expr == error_mark_node)
5896         return error_mark_node;
5897
5898       expr = perform_qualification_conversions (type, expr);
5899       if (expr == error_mark_node)
5900         return error_mark_node;
5901     }
5902   /* [temp.arg.nontype]/5, bullet 3
5903
5904      For a non-type template-parameter of type reference to object, no
5905      conversions apply. The type referred to by the reference may be more
5906      cv-qualified than the (otherwise identical) type of the
5907      template-argument. The template-parameter is bound directly to the
5908      template-argument, which must be an lvalue.  */
5909   else if (TYPE_REF_OBJ_P (type))
5910     {
5911       if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type),
5912                                                       expr_type))
5913         return error_mark_node;
5914
5915       if (!at_least_as_qualified_p (TREE_TYPE (type), expr_type))
5916         {
5917           error ("%qE is not a valid template argument for type %qT "
5918                  "because of conflicts in cv-qualification", expr, type);
5919           return NULL_TREE;
5920         }
5921
5922       if (!real_lvalue_p (expr))
5923         {
5924           error ("%qE is not a valid template argument for type %qT "
5925                  "because it is not an lvalue", expr, type);
5926           return NULL_TREE;
5927         }
5928
5929       /* [temp.arg.nontype]/1
5930
5931          A template-argument for a non-type, non-template template-parameter
5932          shall be one of: [...]
5933
5934          -- the address of an object or function with external linkage.  */
5935       if (TREE_CODE (expr) == INDIRECT_REF
5936           && TYPE_REF_OBJ_P (TREE_TYPE (TREE_OPERAND (expr, 0))))
5937         {
5938           expr = TREE_OPERAND (expr, 0);
5939           if (DECL_P (expr))
5940             {
5941               error ("%q#D is not a valid template argument for type %qT "
5942                      "because a reference variable does not have a constant "
5943                      "address", expr, type);
5944               return NULL_TREE;
5945             }
5946         }
5947
5948       if (!DECL_P (expr))
5949         {
5950           error ("%qE is not a valid template argument for type %qT "
5951                  "because it is not an object with external linkage",
5952                  expr, type);
5953           return NULL_TREE;
5954         }
5955
5956       if (!DECL_EXTERNAL_LINKAGE_P (expr))
5957         {
5958           error ("%qE is not a valid template argument for type %qT "
5959                  "because object %qD has not external linkage",
5960                  expr, type, expr);
5961           return NULL_TREE;
5962         }
5963
5964       expr = build_nop (type, build_address (expr));
5965     }
5966   /* [temp.arg.nontype]/5, bullet 4
5967
5968      For a non-type template-parameter of type pointer to function, only
5969      the function-to-pointer conversion (_conv.func_) is applied. If the
5970      template-argument represents a set of overloaded functions (or a
5971      pointer to such), the matching function is selected from the set
5972      (_over.over_).  */
5973   else if (TYPE_PTRFN_P (type))
5974     {
5975       /* If the argument is a template-id, we might not have enough
5976          context information to decay the pointer.  */
5977       if (!type_unknown_p (expr_type))
5978         {
5979           expr = decay_conversion (expr);
5980           if (expr == error_mark_node)
5981             return error_mark_node;
5982         }
5983
5984       if (cxx_dialect >= cxx0x && integer_zerop (expr))
5985         /* Null pointer values are OK in C++11.  */
5986         return perform_qualification_conversions (type, expr);
5987
5988       expr = convert_nontype_argument_function (type, expr);
5989       if (!expr || expr == error_mark_node)
5990         return expr;
5991
5992       if (TREE_CODE (expr) != ADDR_EXPR)
5993         {
5994           error ("%qE is not a valid template argument for type %qT", expr, type);
5995           error ("it must be the address of a function with external linkage");
5996           return NULL_TREE;
5997         }
5998     }
5999   /* [temp.arg.nontype]/5, bullet 5
6000
6001      For a non-type template-parameter of type reference to function, no
6002      conversions apply. If the template-argument represents a set of
6003      overloaded functions, the matching function is selected from the set
6004      (_over.over_).  */
6005   else if (TYPE_REFFN_P (type))
6006     {
6007       if (TREE_CODE (expr) == ADDR_EXPR)
6008         {
6009           error ("%qE is not a valid template argument for type %qT "
6010                  "because it is a pointer", expr, type);
6011           inform (input_location, "try using %qE instead", TREE_OPERAND (expr, 0));
6012           return NULL_TREE;
6013         }
6014
6015       expr = convert_nontype_argument_function (TREE_TYPE (type), expr);
6016       if (!expr || expr == error_mark_node)
6017         return expr;
6018
6019       expr = build_nop (type, build_address (expr));
6020     }
6021   /* [temp.arg.nontype]/5, bullet 6
6022
6023      For a non-type template-parameter of type pointer to member function,
6024      no conversions apply. If the template-argument represents a set of
6025      overloaded member functions, the matching member function is selected
6026      from the set (_over.over_).  */
6027   else if (TYPE_PTRMEMFUNC_P (type))
6028     {
6029       expr = instantiate_type (type, expr, tf_none);
6030       if (expr == error_mark_node)
6031         return error_mark_node;
6032
6033       /* [temp.arg.nontype] bullet 1 says the pointer to member
6034          expression must be a pointer-to-member constant.  */
6035       if (!check_valid_ptrmem_cst_expr (type, expr, complain))
6036         return error_mark_node;
6037
6038       /* There is no way to disable standard conversions in
6039          resolve_address_of_overloaded_function (called by
6040          instantiate_type). It is possible that the call succeeded by
6041          converting &B::I to &D::I (where B is a base of D), so we need
6042          to reject this conversion here.
6043
6044          Actually, even if there was a way to disable standard conversions,
6045          it would still be better to reject them here so that we can
6046          provide a superior diagnostic.  */
6047       if (!same_type_p (TREE_TYPE (expr), type))
6048         {
6049           error ("%qE is not a valid template argument for type %qT "
6050                  "because it is of type %qT", expr, type,
6051                  TREE_TYPE (expr));
6052           /* If we are just one standard conversion off, explain.  */
6053           if (can_convert (type, TREE_TYPE (expr)))
6054             inform (input_location,
6055                     "standard conversions are not allowed in this context");
6056           return NULL_TREE;
6057         }
6058     }
6059   /* [temp.arg.nontype]/5, bullet 7
6060
6061      For a non-type template-parameter of type pointer to data member,
6062      qualification conversions (_conv.qual_) are applied.  */
6063   else if (TYPE_PTRMEM_P (type))
6064     {
6065       /* [temp.arg.nontype] bullet 1 says the pointer to member
6066          expression must be a pointer-to-member constant.  */
6067       if (!check_valid_ptrmem_cst_expr (type, expr, complain))
6068         return error_mark_node;
6069
6070       expr = perform_qualification_conversions (type, expr);
6071       if (expr == error_mark_node)
6072         return expr;
6073     }
6074   else if (NULLPTR_TYPE_P (type))
6075     {
6076       if (expr != nullptr_node)
6077         {
6078           error ("%qE is not a valid template argument for type %qT "
6079                  "because it is of type %qT", expr, type, TREE_TYPE (expr));
6080           return NULL_TREE;
6081         }
6082       return expr;
6083     }
6084   /* A template non-type parameter must be one of the above.  */
6085   else
6086     gcc_unreachable ();
6087
6088   /* Sanity check: did we actually convert the argument to the
6089      right type?  */
6090   gcc_assert (same_type_ignoring_top_level_qualifiers_p
6091               (type, TREE_TYPE (expr)));
6092   return expr;
6093 }
6094
6095 /* Subroutine of coerce_template_template_parms, which returns 1 if
6096    PARM_PARM and ARG_PARM match using the rule for the template
6097    parameters of template template parameters. Both PARM and ARG are
6098    template parameters; the rest of the arguments are the same as for
6099    coerce_template_template_parms.
6100  */
6101 static int
6102 coerce_template_template_parm (tree parm,
6103                               tree arg,
6104                               tsubst_flags_t complain,
6105                               tree in_decl,
6106                               tree outer_args)
6107 {
6108   if (arg == NULL_TREE || arg == error_mark_node
6109       || parm == NULL_TREE || parm == error_mark_node)
6110     return 0;
6111   
6112   if (TREE_CODE (arg) != TREE_CODE (parm))
6113     return 0;
6114   
6115   switch (TREE_CODE (parm))
6116     {
6117     case TEMPLATE_DECL:
6118       /* We encounter instantiations of templates like
6119          template <template <template <class> class> class TT>
6120          class C;  */
6121       {
6122         tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
6123         tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
6124         
6125         if (!coerce_template_template_parms
6126             (parmparm, argparm, complain, in_decl, outer_args))
6127           return 0;
6128       }
6129       /* Fall through.  */
6130       
6131     case TYPE_DECL:
6132       if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (arg))
6133           && !TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
6134         /* Argument is a parameter pack but parameter is not.  */
6135         return 0;
6136       break;
6137       
6138     case PARM_DECL:
6139       /* The tsubst call is used to handle cases such as
6140          
6141            template <int> class C {};
6142            template <class T, template <T> class TT> class D {};
6143            D<int, C> d;
6144
6145          i.e. the parameter list of TT depends on earlier parameters.  */
6146       if (!uses_template_parms (TREE_TYPE (arg))
6147           && !same_type_p
6148                 (tsubst (TREE_TYPE (parm), outer_args, complain, in_decl),
6149                  TREE_TYPE (arg)))
6150         return 0;
6151       
6152       if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (arg))
6153           && !TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
6154         /* Argument is a parameter pack but parameter is not.  */
6155         return 0;
6156       
6157       break;
6158
6159     default:
6160       gcc_unreachable ();
6161     }
6162
6163   return 1;
6164 }
6165
6166
6167 /* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
6168    template template parameters.  Both PARM_PARMS and ARG_PARMS are
6169    vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
6170    or PARM_DECL.
6171
6172    Consider the example:
6173      template <class T> class A;
6174      template<template <class U> class TT> class B;
6175
6176    For B<A>, PARM_PARMS are the parameters to TT, while ARG_PARMS are
6177    the parameters to A, and OUTER_ARGS contains A.  */
6178
6179 static int
6180 coerce_template_template_parms (tree parm_parms,
6181                                 tree arg_parms,
6182                                 tsubst_flags_t complain,
6183                                 tree in_decl,
6184                                 tree outer_args)
6185 {
6186   int nparms, nargs, i;
6187   tree parm, arg;
6188   int variadic_p = 0;
6189
6190   gcc_assert (TREE_CODE (parm_parms) == TREE_VEC);
6191   gcc_assert (TREE_CODE (arg_parms) == TREE_VEC);
6192
6193   nparms = TREE_VEC_LENGTH (parm_parms);
6194   nargs = TREE_VEC_LENGTH (arg_parms);
6195
6196   /* Determine whether we have a parameter pack at the end of the
6197      template template parameter's template parameter list.  */
6198   if (TREE_VEC_ELT (parm_parms, nparms - 1) != error_mark_node)
6199     {
6200       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, nparms - 1));
6201       
6202       if (parm == error_mark_node)
6203         return 0;
6204
6205       switch (TREE_CODE (parm))
6206         {
6207         case TEMPLATE_DECL:
6208         case TYPE_DECL:
6209           if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
6210             variadic_p = 1;
6211           break;
6212           
6213         case PARM_DECL:
6214           if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
6215             variadic_p = 1;
6216           break;
6217           
6218         default:
6219           gcc_unreachable ();
6220         }
6221     }
6222  
6223   if (nargs != nparms
6224       && !(variadic_p && nargs >= nparms - 1))
6225     return 0;
6226
6227   /* Check all of the template parameters except the parameter pack at
6228      the end (if any).  */
6229   for (i = 0; i < nparms - variadic_p; ++i)
6230     {
6231       if (TREE_VEC_ELT (parm_parms, i) == error_mark_node
6232           || TREE_VEC_ELT (arg_parms, i) == error_mark_node)
6233         continue;
6234
6235       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
6236       arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
6237
6238       if (!coerce_template_template_parm (parm, arg, complain, in_decl,
6239                                           outer_args))
6240         return 0;
6241
6242     }
6243
6244   if (variadic_p)
6245     {
6246       /* Check each of the template parameters in the template
6247          argument against the template parameter pack at the end of
6248          the template template parameter.  */
6249       if (TREE_VEC_ELT (parm_parms, i) == error_mark_node)
6250         return 0;
6251
6252       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
6253
6254       for (; i < nargs; ++i)
6255         {
6256           if (TREE_VEC_ELT (arg_parms, i) == error_mark_node)
6257             continue;
6258  
6259           arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
6260  
6261           if (!coerce_template_template_parm (parm, arg, complain, in_decl,
6262                                               outer_args))
6263             return 0;
6264         }
6265     }
6266
6267   return 1;
6268 }
6269
6270 /* Verifies that the deduced template arguments (in TARGS) for the
6271    template template parameters (in TPARMS) represent valid bindings,
6272    by comparing the template parameter list of each template argument
6273    to the template parameter list of its corresponding template
6274    template parameter, in accordance with DR150. This
6275    routine can only be called after all template arguments have been
6276    deduced. It will return TRUE if all of the template template
6277    parameter bindings are okay, FALSE otherwise.  */
6278 bool 
6279 template_template_parm_bindings_ok_p (tree tparms, tree targs)
6280 {
6281   int i, ntparms = TREE_VEC_LENGTH (tparms);
6282   bool ret = true;
6283
6284   /* We're dealing with template parms in this process.  */
6285   ++processing_template_decl;
6286
6287   targs = INNERMOST_TEMPLATE_ARGS (targs);
6288
6289   for (i = 0; i < ntparms; ++i)
6290     {
6291       tree tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
6292       tree targ = TREE_VEC_ELT (targs, i);
6293
6294       if (TREE_CODE (tparm) == TEMPLATE_DECL && targ)
6295         {
6296           tree packed_args = NULL_TREE;
6297           int idx, len = 1;
6298
6299           if (ARGUMENT_PACK_P (targ))
6300             {
6301               /* Look inside the argument pack.  */
6302               packed_args = ARGUMENT_PACK_ARGS (targ);
6303               len = TREE_VEC_LENGTH (packed_args);
6304             }
6305
6306           for (idx = 0; idx < len; ++idx)
6307             {
6308               tree targ_parms = NULL_TREE;
6309
6310               if (packed_args)
6311                 /* Extract the next argument from the argument
6312                    pack.  */
6313                 targ = TREE_VEC_ELT (packed_args, idx);
6314
6315               if (PACK_EXPANSION_P (targ))
6316                 /* Look at the pattern of the pack expansion.  */
6317                 targ = PACK_EXPANSION_PATTERN (targ);
6318
6319               /* Extract the template parameters from the template
6320                  argument.  */
6321               if (TREE_CODE (targ) == TEMPLATE_DECL)
6322                 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (targ);
6323               else if (TREE_CODE (targ) == TEMPLATE_TEMPLATE_PARM)
6324                 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_NAME (targ));
6325
6326               /* Verify that we can coerce the template template
6327                  parameters from the template argument to the template
6328                  parameter.  This requires an exact match.  */
6329               if (targ_parms
6330                   && !coerce_template_template_parms
6331                        (DECL_INNERMOST_TEMPLATE_PARMS (tparm),
6332                         targ_parms,
6333                         tf_none,
6334                         tparm,
6335                         targs))
6336                 {
6337                   ret = false;
6338                   goto out;
6339                 }
6340             }
6341         }
6342     }
6343
6344  out:
6345
6346   --processing_template_decl;
6347   return ret;
6348 }
6349
6350 /* Since type attributes aren't mangled, we need to strip them from
6351    template type arguments.  */
6352
6353 static tree
6354 canonicalize_type_argument (tree arg, tsubst_flags_t complain)
6355 {
6356   tree mv;
6357   if (!arg || arg == error_mark_node || arg == TYPE_CANONICAL (arg))
6358     return arg;
6359   mv = TYPE_MAIN_VARIANT (arg);
6360   arg = strip_typedefs (arg);
6361   if (TYPE_ALIGN (arg) != TYPE_ALIGN (mv)
6362       || TYPE_ATTRIBUTES (arg) != TYPE_ATTRIBUTES (mv))
6363     {
6364       if (complain & tf_warning)
6365         warning (0, "ignoring attributes on template argument %qT", arg);
6366       arg = build_aligned_type (arg, TYPE_ALIGN (mv));
6367       arg = cp_build_type_attribute_variant (arg, TYPE_ATTRIBUTES (mv));
6368     }
6369   return arg;
6370 }
6371
6372 /* Convert the indicated template ARG as necessary to match the
6373    indicated template PARM.  Returns the converted ARG, or
6374    error_mark_node if the conversion was unsuccessful.  Error and
6375    warning messages are issued under control of COMPLAIN.  This
6376    conversion is for the Ith parameter in the parameter list.  ARGS is
6377    the full set of template arguments deduced so far.  */
6378
6379 static tree
6380 convert_template_argument (tree parm,
6381                            tree arg,
6382                            tree args,
6383                            tsubst_flags_t complain,
6384                            int i,
6385                            tree in_decl)
6386 {
6387   tree orig_arg;
6388   tree val;
6389   int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
6390
6391   if (TREE_CODE (arg) == TREE_LIST
6392       && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
6393     {
6394       /* The template argument was the name of some
6395          member function.  That's usually
6396          invalid, but static members are OK.  In any
6397          case, grab the underlying fields/functions
6398          and issue an error later if required.  */
6399       orig_arg = TREE_VALUE (arg);
6400       TREE_TYPE (arg) = unknown_type_node;
6401     }
6402
6403   orig_arg = arg;
6404
6405   requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
6406   requires_type = (TREE_CODE (parm) == TYPE_DECL
6407                    || requires_tmpl_type);
6408
6409   /* When determining whether an argument pack expansion is a template,
6410      look at the pattern.  */
6411   if (TREE_CODE (arg) == TYPE_PACK_EXPANSION)
6412     arg = PACK_EXPANSION_PATTERN (arg);
6413
6414   /* Deal with an injected-class-name used as a template template arg.  */
6415   if (requires_tmpl_type && CLASS_TYPE_P (arg))
6416     {
6417       tree t = maybe_get_template_decl_from_type_decl (TYPE_NAME (arg));
6418       if (TREE_CODE (t) == TEMPLATE_DECL)
6419         {
6420           if (cxx_dialect >= cxx0x)
6421             /* OK under DR 1004.  */;
6422           else if (complain & tf_warning_or_error)
6423             pedwarn (input_location, OPT_pedantic, "injected-class-name %qD"
6424                      " used as template template argument", TYPE_NAME (arg));
6425           else if (flag_pedantic_errors)
6426             t = arg;
6427
6428           arg = t;
6429         }
6430     }
6431
6432   is_tmpl_type = 
6433     ((TREE_CODE (arg) == TEMPLATE_DECL
6434       && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
6435      || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
6436      || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
6437
6438   if (is_tmpl_type
6439       && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
6440           || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
6441     arg = TYPE_STUB_DECL (arg);
6442
6443   is_type = TYPE_P (arg) || is_tmpl_type;
6444
6445   if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
6446       && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
6447     {
6448       permerror (input_location, "to refer to a type member of a template parameter, "
6449                  "use %<typename %E%>", orig_arg);
6450
6451       orig_arg = make_typename_type (TREE_OPERAND (arg, 0),
6452                                      TREE_OPERAND (arg, 1),
6453                                      typename_type,
6454                                      complain & tf_error);
6455       arg = orig_arg;
6456       is_type = 1;
6457     }
6458   if (is_type != requires_type)
6459     {
6460       if (in_decl)
6461         {
6462           if (complain & tf_error)
6463             {
6464               error ("type/value mismatch at argument %d in template "
6465                      "parameter list for %qD",
6466                      i + 1, in_decl);
6467               if (is_type)
6468                 error ("  expected a constant of type %qT, got %qT",
6469                        TREE_TYPE (parm),
6470                        (DECL_P (arg) ? DECL_NAME (arg) : orig_arg));
6471               else if (requires_tmpl_type)
6472                 error ("  expected a class template, got %qE", orig_arg);
6473               else
6474                 error ("  expected a type, got %qE", orig_arg);
6475             }
6476         }
6477       return error_mark_node;
6478     }
6479   if (is_tmpl_type ^ requires_tmpl_type)
6480     {
6481       if (in_decl && (complain & tf_error))
6482         {
6483           error ("type/value mismatch at argument %d in template "
6484                  "parameter list for %qD",
6485                  i + 1, in_decl);
6486           if (is_tmpl_type)
6487             error ("  expected a type, got %qT", DECL_NAME (arg));
6488           else
6489             error ("  expected a class template, got %qT", orig_arg);
6490         }
6491       return error_mark_node;
6492     }
6493
6494   if (is_type)
6495     {
6496       if (requires_tmpl_type)
6497         {
6498           if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
6499             /* The number of argument required is not known yet.
6500                Just accept it for now.  */
6501             val = TREE_TYPE (arg);
6502           else
6503             {
6504               tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
6505               tree argparm;
6506
6507               argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
6508
6509               if (coerce_template_template_parms (parmparm, argparm,
6510                                                   complain, in_decl,
6511                                                   args))
6512                 {
6513                   val = arg;
6514
6515                   /* TEMPLATE_TEMPLATE_PARM node is preferred over
6516                      TEMPLATE_DECL.  */
6517                   if (val != error_mark_node)
6518                     {
6519                       if (DECL_TEMPLATE_TEMPLATE_PARM_P (val))
6520                         val = TREE_TYPE (val);
6521                       if (TREE_CODE (orig_arg) == TYPE_PACK_EXPANSION)
6522                         val = make_pack_expansion (val);
6523                     }
6524                 }
6525               else
6526                 {
6527                   if (in_decl && (complain & tf_error))
6528                     {
6529                       error ("type/value mismatch at argument %d in "
6530                              "template parameter list for %qD",
6531                              i + 1, in_decl);
6532                       error ("  expected a template of type %qD, got %qT",
6533                              parm, orig_arg);
6534                     }
6535
6536                   val = error_mark_node;
6537                 }
6538             }
6539         }
6540       else
6541         val = orig_arg;
6542       /* We only form one instance of each template specialization.
6543          Therefore, if we use a non-canonical variant (i.e., a
6544          typedef), any future messages referring to the type will use
6545          the typedef, which is confusing if those future uses do not
6546          themselves also use the typedef.  */
6547       if (TYPE_P (val))
6548         val = canonicalize_type_argument (val, complain);
6549     }
6550   else
6551     {
6552       tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
6553
6554       if (invalid_nontype_parm_type_p (t, complain))
6555         return error_mark_node;
6556
6557       if (template_parameter_pack_p (parm) && ARGUMENT_PACK_P (orig_arg))
6558         {
6559           if (same_type_p (t, TREE_TYPE (orig_arg)))
6560             val = orig_arg;
6561           else
6562             {
6563               /* Not sure if this is reachable, but it doesn't hurt
6564                  to be robust.  */
6565               error ("type mismatch in nontype parameter pack");
6566               val = error_mark_node;
6567             }
6568         }
6569       else if (!uses_template_parms (orig_arg) && !uses_template_parms (t))
6570         /* We used to call digest_init here.  However, digest_init
6571            will report errors, which we don't want when complain
6572            is zero.  More importantly, digest_init will try too
6573            hard to convert things: for example, `0' should not be
6574            converted to pointer type at this point according to
6575            the standard.  Accepting this is not merely an
6576            extension, since deciding whether or not these
6577            conversions can occur is part of determining which
6578            function template to call, or whether a given explicit
6579            argument specification is valid.  */
6580         val = convert_nontype_argument (t, orig_arg, complain);
6581       else
6582         val = orig_arg;
6583
6584       if (val == NULL_TREE)
6585         val = error_mark_node;
6586       else if (val == error_mark_node && (complain & tf_error))
6587         error ("could not convert template argument %qE to %qT",  orig_arg, t);
6588
6589       if (TREE_CODE (val) == SCOPE_REF)
6590         {
6591           /* Strip typedefs from the SCOPE_REF.  */
6592           tree type = canonicalize_type_argument (TREE_TYPE (val), complain);
6593           tree scope = canonicalize_type_argument (TREE_OPERAND (val, 0),
6594                                                    complain);
6595           val = build_qualified_name (type, scope, TREE_OPERAND (val, 1),
6596                                       QUALIFIED_NAME_IS_TEMPLATE (val));
6597         }
6598     }
6599
6600   return val;
6601 }
6602
6603 /* Coerces the remaining template arguments in INNER_ARGS (from
6604    ARG_IDX to the end) into the parameter pack at PARM_IDX in PARMS.
6605    Returns the coerced argument pack. PARM_IDX is the position of this
6606    parameter in the template parameter list. ARGS is the original
6607    template argument list.  */
6608 static tree
6609 coerce_template_parameter_pack (tree parms,
6610                                 int parm_idx,
6611                                 tree args,
6612                                 tree inner_args,
6613                                 int arg_idx,
6614                                 tree new_args,
6615                                 int* lost,
6616                                 tree in_decl,
6617                                 tsubst_flags_t complain)
6618 {
6619   tree parm = TREE_VEC_ELT (parms, parm_idx);
6620   int nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
6621   tree packed_args;
6622   tree argument_pack;
6623   tree packed_types = NULL_TREE;
6624
6625   if (arg_idx > nargs)
6626     arg_idx = nargs;
6627
6628   packed_args = make_tree_vec (nargs - arg_idx);
6629
6630   if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL
6631       && uses_parameter_packs (TREE_TYPE (TREE_VALUE (parm))))
6632     {
6633       /* When the template parameter is a non-type template
6634          parameter pack whose type uses parameter packs, we need
6635          to look at each of the template arguments
6636          separately. Build a vector of the types for these
6637          non-type template parameters in PACKED_TYPES.  */
6638       tree expansion 
6639         = make_pack_expansion (TREE_TYPE (TREE_VALUE (parm)));
6640       packed_types = tsubst_pack_expansion (expansion, args,
6641                                             complain, in_decl);
6642
6643       if (packed_types == error_mark_node)
6644         return error_mark_node;
6645
6646       /* Check that we have the right number of arguments.  */
6647       if (arg_idx < nargs
6648           && !PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx))
6649           && nargs - arg_idx != TREE_VEC_LENGTH (packed_types))
6650         {
6651           int needed_parms 
6652             = TREE_VEC_LENGTH (parms) - 1 + TREE_VEC_LENGTH (packed_types);
6653           error ("wrong number of template arguments (%d, should be %d)",
6654                  nargs, needed_parms);
6655           return error_mark_node;
6656         }
6657
6658       /* If we aren't able to check the actual arguments now
6659          (because they haven't been expanded yet), we can at least
6660          verify that all of the types used for the non-type
6661          template parameter pack are, in fact, valid for non-type
6662          template parameters.  */
6663       if (arg_idx < nargs 
6664           && PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx)))
6665         {
6666           int j, len = TREE_VEC_LENGTH (packed_types);
6667           for (j = 0; j < len; ++j)
6668             {
6669               tree t = TREE_VEC_ELT (packed_types, j);
6670               if (invalid_nontype_parm_type_p (t, complain))
6671                 return error_mark_node;
6672             }
6673         }
6674     }
6675
6676   /* Convert the remaining arguments, which will be a part of the
6677      parameter pack "parm".  */
6678   for (; arg_idx < nargs; ++arg_idx)
6679     {
6680       tree arg = TREE_VEC_ELT (inner_args, arg_idx);
6681       tree actual_parm = TREE_VALUE (parm);
6682
6683       if (packed_types && !PACK_EXPANSION_P (arg))
6684         {
6685           /* When we have a vector of types (corresponding to the
6686              non-type template parameter pack that uses parameter
6687              packs in its type, as mention above), and the
6688              argument is not an expansion (which expands to a
6689              currently unknown number of arguments), clone the
6690              parm and give it the next type in PACKED_TYPES.  */
6691           actual_parm = copy_node (actual_parm);
6692           TREE_TYPE (actual_parm) = 
6693             TREE_VEC_ELT (packed_types, arg_idx - parm_idx);
6694         }
6695
6696       if (arg != error_mark_node)
6697         arg = convert_template_argument (actual_parm, 
6698                                          arg, new_args, complain, parm_idx,
6699                                          in_decl);
6700       if (arg == error_mark_node)
6701         (*lost)++;
6702       TREE_VEC_ELT (packed_args, arg_idx - parm_idx) = arg; 
6703     }
6704
6705   if (TREE_CODE (TREE_VALUE (parm)) == TYPE_DECL
6706       || TREE_CODE (TREE_VALUE (parm)) == TEMPLATE_DECL)
6707     argument_pack = cxx_make_type (TYPE_ARGUMENT_PACK);
6708   else
6709     {
6710       argument_pack = make_node (NONTYPE_ARGUMENT_PACK);
6711       TREE_TYPE (argument_pack) 
6712         = tsubst (TREE_TYPE (TREE_VALUE (parm)), new_args, complain, in_decl);
6713       TREE_CONSTANT (argument_pack) = 1;
6714     }
6715
6716   SET_ARGUMENT_PACK_ARGS (argument_pack, packed_args);
6717 #ifdef ENABLE_CHECKING
6718   SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (packed_args,
6719                                        TREE_VEC_LENGTH (packed_args));
6720 #endif
6721   return argument_pack;
6722 }
6723
6724 /* Convert all template arguments to their appropriate types, and
6725    return a vector containing the innermost resulting template
6726    arguments.  If any error occurs, return error_mark_node. Error and
6727    warning messages are issued under control of COMPLAIN.
6728
6729    If REQUIRE_ALL_ARGS is false, argument deduction will be performed
6730    for arguments not specified in ARGS.  Otherwise, if
6731    USE_DEFAULT_ARGS is true, default arguments will be used to fill in
6732    unspecified arguments.  If REQUIRE_ALL_ARGS is true, but
6733    USE_DEFAULT_ARGS is false, then all arguments must be specified in
6734    ARGS.  */
6735
6736 static tree
6737 coerce_template_parms (tree parms,
6738                        tree args,
6739                        tree in_decl,
6740                        tsubst_flags_t complain,
6741                        bool require_all_args,
6742                        bool use_default_args)
6743 {
6744   int nparms, nargs, parm_idx, arg_idx, lost = 0;
6745   tree inner_args;
6746   tree new_args;
6747   tree new_inner_args;
6748   int saved_unevaluated_operand;
6749   int saved_inhibit_evaluation_warnings;
6750
6751   /* When used as a boolean value, indicates whether this is a
6752      variadic template parameter list. Since it's an int, we can also
6753      subtract it from nparms to get the number of non-variadic
6754      parameters.  */
6755   int variadic_p = 0;
6756   int post_variadic_parms = 0;
6757
6758   if (args == error_mark_node)
6759     return error_mark_node;
6760
6761   nparms = TREE_VEC_LENGTH (parms);
6762
6763   /* Determine if there are any parameter packs.  */
6764   for (parm_idx = 0; parm_idx < nparms; ++parm_idx)
6765     {
6766       tree tparm = TREE_VALUE (TREE_VEC_ELT (parms, parm_idx));
6767       if (variadic_p)
6768         ++post_variadic_parms;
6769       if (template_parameter_pack_p (tparm))
6770         ++variadic_p;
6771     }
6772
6773   inner_args = INNERMOST_TEMPLATE_ARGS (args);
6774   /* If there are no parameters that follow a parameter pack, we need to
6775      expand any argument packs so that we can deduce a parameter pack from
6776      some non-packed args followed by an argument pack, as in variadic85.C.
6777      If there are such parameters, we need to leave argument packs intact
6778      so the arguments are assigned properly.  This can happen when dealing
6779      with a nested class inside a partial specialization of a class
6780      template, as in variadic92.C, or when deducing a template parameter pack
6781      from a sub-declarator, as in variadic114.C.  */
6782   if (!post_variadic_parms)
6783     inner_args = expand_template_argument_pack (inner_args);
6784
6785   nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
6786   if ((nargs > nparms && !variadic_p)
6787       || (nargs < nparms - variadic_p
6788           && require_all_args
6789           && (!use_default_args
6790               || (TREE_VEC_ELT (parms, nargs) != error_mark_node
6791                   && !TREE_PURPOSE (TREE_VEC_ELT (parms, nargs))))))
6792     {
6793       if (complain & tf_error)
6794         {
6795           if (variadic_p)
6796             {
6797               nparms -= variadic_p;
6798               error ("wrong number of template arguments "
6799                      "(%d, should be %d or more)", nargs, nparms);
6800             }
6801           else
6802              error ("wrong number of template arguments "
6803                     "(%d, should be %d)", nargs, nparms);
6804
6805           if (in_decl)
6806             error ("provided for %q+D", in_decl);
6807         }
6808
6809       return error_mark_node;
6810     }
6811
6812   /* We need to evaluate the template arguments, even though this
6813      template-id may be nested within a "sizeof".  */
6814   saved_unevaluated_operand = cp_unevaluated_operand;
6815   cp_unevaluated_operand = 0;
6816   saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
6817   c_inhibit_evaluation_warnings = 0;
6818   new_inner_args = make_tree_vec (nparms);
6819   new_args = add_outermost_template_args (args, new_inner_args);
6820   for (parm_idx = 0, arg_idx = 0; parm_idx < nparms; parm_idx++, arg_idx++)
6821     {
6822       tree arg;
6823       tree parm;
6824
6825       /* Get the Ith template parameter.  */
6826       parm = TREE_VEC_ELT (parms, parm_idx);
6827  
6828       if (parm == error_mark_node)
6829       {
6830         TREE_VEC_ELT (new_inner_args, arg_idx) = error_mark_node;
6831         continue;
6832       }
6833
6834       /* Calculate the next argument.  */
6835       if (arg_idx < nargs)
6836         arg = TREE_VEC_ELT (inner_args, arg_idx);
6837       else
6838         arg = NULL_TREE;
6839
6840       if (template_parameter_pack_p (TREE_VALUE (parm))
6841           && !(arg && ARGUMENT_PACK_P (arg)))
6842         {
6843           /* All remaining arguments will be placed in the
6844              template parameter pack PARM.  */
6845           arg = coerce_template_parameter_pack (parms, parm_idx, args, 
6846                                                 inner_args, arg_idx,
6847                                                 new_args, &lost,
6848                                                 in_decl, complain);
6849
6850           /* Store this argument.  */
6851           if (arg == error_mark_node)
6852             lost++;
6853           TREE_VEC_ELT (new_inner_args, parm_idx) = arg;
6854
6855           /* We are done with all of the arguments.  */
6856           arg_idx = nargs;
6857           
6858           continue;
6859         }
6860       else if (arg)
6861         {
6862           if (PACK_EXPANSION_P (arg))
6863             {
6864               /* We don't know how many args we have yet, just
6865                  use the unconverted ones for now.  */
6866               new_inner_args = args;
6867               break;
6868             }
6869         }
6870       else if (require_all_args)
6871         {
6872           /* There must be a default arg in this case.  */
6873           arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
6874                                      complain, in_decl);
6875           /* The position of the first default template argument,
6876              is also the number of non-defaulted arguments in NEW_INNER_ARGS.
6877              Record that.  */
6878           if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args))
6879             SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args, arg_idx);
6880         }
6881       else
6882         break;
6883
6884       if (arg == error_mark_node)
6885         {
6886           if (complain & tf_error)
6887             error ("template argument %d is invalid", arg_idx + 1);
6888         }
6889       else if (!arg)
6890         /* This only occurs if there was an error in the template
6891            parameter list itself (which we would already have
6892            reported) that we are trying to recover from, e.g., a class
6893            template with a parameter list such as
6894            template<typename..., typename>.  */
6895         ++lost;
6896       else
6897         arg = convert_template_argument (TREE_VALUE (parm),
6898                                          arg, new_args, complain, 
6899                                          parm_idx, in_decl);
6900
6901       if (arg == error_mark_node)
6902         lost++;
6903       TREE_VEC_ELT (new_inner_args, arg_idx) = arg;
6904     }
6905   cp_unevaluated_operand = saved_unevaluated_operand;
6906   c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
6907
6908   if (lost)
6909     return error_mark_node;
6910
6911 #ifdef ENABLE_CHECKING
6912   if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args))
6913     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args,
6914                                          TREE_VEC_LENGTH (new_inner_args));
6915 #endif
6916
6917   return new_inner_args;
6918 }
6919
6920 /* Returns 1 if template args OT and NT are equivalent.  */
6921
6922 static int
6923 template_args_equal (tree ot, tree nt)
6924 {
6925   if (nt == ot)
6926     return 1;
6927   if (nt == NULL_TREE || ot == NULL_TREE)
6928     return false;
6929
6930   if (TREE_CODE (nt) == TREE_VEC)
6931     /* For member templates */
6932     return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
6933   else if (PACK_EXPANSION_P (ot))
6934     return (PACK_EXPANSION_P (nt)
6935             && template_args_equal (PACK_EXPANSION_PATTERN (ot),
6936                                     PACK_EXPANSION_PATTERN (nt))
6937             && template_args_equal (PACK_EXPANSION_EXTRA_ARGS (ot),
6938                                     PACK_EXPANSION_EXTRA_ARGS (nt)));
6939   else if (ARGUMENT_PACK_P (ot))
6940     {
6941       int i, len;
6942       tree opack, npack;
6943
6944       if (!ARGUMENT_PACK_P (nt))
6945         return 0;
6946
6947       opack = ARGUMENT_PACK_ARGS (ot);
6948       npack = ARGUMENT_PACK_ARGS (nt);
6949       len = TREE_VEC_LENGTH (opack);
6950       if (TREE_VEC_LENGTH (npack) != len)
6951         return 0;
6952       for (i = 0; i < len; ++i)
6953         if (!template_args_equal (TREE_VEC_ELT (opack, i),
6954                                   TREE_VEC_ELT (npack, i)))
6955           return 0;
6956       return 1;
6957     }
6958   else if (ot && TREE_CODE (ot) == ARGUMENT_PACK_SELECT)
6959     {
6960       /* We get here probably because we are in the middle of substituting
6961          into the pattern of a pack expansion. In that case the
6962          ARGUMENT_PACK_SELECT temporarily replaces the pack argument we are
6963          interested in. So we want to use the initial pack argument for
6964          the comparison.  */
6965       ot = ARGUMENT_PACK_SELECT_FROM_PACK (ot);
6966       if (nt && TREE_CODE (nt) == ARGUMENT_PACK_SELECT)
6967         nt = ARGUMENT_PACK_SELECT_FROM_PACK (nt);
6968       return template_args_equal (ot, nt);
6969     }
6970   else if (TYPE_P (nt))
6971     return TYPE_P (ot) && same_type_p (ot, nt);
6972   else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
6973     return 0;
6974   else
6975     return cp_tree_equal (ot, nt);
6976 }
6977
6978 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets of
6979    template arguments.  Returns 0 otherwise, and updates OLDARG_PTR and
6980    NEWARG_PTR with the offending arguments if they are non-NULL.  */
6981
6982 static int
6983 comp_template_args_with_info (tree oldargs, tree newargs,
6984                               tree *oldarg_ptr, tree *newarg_ptr)
6985 {
6986   int i;
6987
6988   if (oldargs == newargs)
6989     return 1;
6990
6991   if (!oldargs || !newargs)
6992     return 0;
6993
6994   if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
6995     return 0;
6996
6997   for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
6998     {
6999       tree nt = TREE_VEC_ELT (newargs, i);
7000       tree ot = TREE_VEC_ELT (oldargs, i);
7001
7002       if (! template_args_equal (ot, nt))
7003         {
7004           if (oldarg_ptr != NULL)
7005             *oldarg_ptr = ot;
7006           if (newarg_ptr != NULL)
7007             *newarg_ptr = nt;
7008           return 0;
7009         }
7010     }
7011   return 1;
7012 }
7013
7014 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
7015    of template arguments.  Returns 0 otherwise.  */
7016
7017 int
7018 comp_template_args (tree oldargs, tree newargs)
7019 {
7020   return comp_template_args_with_info (oldargs, newargs, NULL, NULL);
7021 }
7022
7023 static void
7024 add_pending_template (tree d)
7025 {
7026   tree ti = (TYPE_P (d)
7027              ? CLASSTYPE_TEMPLATE_INFO (d)
7028              : DECL_TEMPLATE_INFO (d));
7029   struct pending_template *pt;
7030   int level;
7031
7032   if (TI_PENDING_TEMPLATE_FLAG (ti))
7033     return;
7034
7035   /* We are called both from instantiate_decl, where we've already had a
7036      tinst_level pushed, and instantiate_template, where we haven't.
7037      Compensate.  */
7038   level = !current_tinst_level || current_tinst_level->decl != d;
7039
7040   if (level)
7041     push_tinst_level (d);
7042
7043   pt = ggc_alloc_pending_template ();
7044   pt->next = NULL;
7045   pt->tinst = current_tinst_level;
7046   if (last_pending_template)
7047     last_pending_template->next = pt;
7048   else
7049     pending_templates = pt;
7050
7051   last_pending_template = pt;
7052
7053   TI_PENDING_TEMPLATE_FLAG (ti) = 1;
7054
7055   if (level)
7056     pop_tinst_level ();
7057 }
7058
7059
7060 /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
7061    ARGLIST.  Valid choices for FNS are given in the cp-tree.def
7062    documentation for TEMPLATE_ID_EXPR.  */
7063
7064 tree
7065 lookup_template_function (tree fns, tree arglist)
7066 {
7067   tree type;
7068
7069   if (fns == error_mark_node || arglist == error_mark_node)
7070     return error_mark_node;
7071
7072   gcc_assert (!arglist || TREE_CODE (arglist) == TREE_VEC);
7073
7074   if (!is_overloaded_fn (fns) && TREE_CODE (fns) != IDENTIFIER_NODE)
7075     {
7076       error ("%q#D is not a function template", fns);
7077       return error_mark_node;
7078     }
7079
7080   if (BASELINK_P (fns))
7081     {
7082       BASELINK_FUNCTIONS (fns) = build2 (TEMPLATE_ID_EXPR,
7083                                          unknown_type_node,
7084                                          BASELINK_FUNCTIONS (fns),
7085                                          arglist);
7086       return fns;
7087     }
7088
7089   type = TREE_TYPE (fns);
7090   if (TREE_CODE (fns) == OVERLOAD || !type)
7091     type = unknown_type_node;
7092
7093   return build2 (TEMPLATE_ID_EXPR, type, fns, arglist);
7094 }
7095
7096 /* Within the scope of a template class S<T>, the name S gets bound
7097    (in build_self_reference) to a TYPE_DECL for the class, not a
7098    TEMPLATE_DECL.  If DECL is a TYPE_DECL for current_class_type,
7099    or one of its enclosing classes, and that type is a template,
7100    return the associated TEMPLATE_DECL.  Otherwise, the original
7101    DECL is returned.
7102
7103    Also handle the case when DECL is a TREE_LIST of ambiguous
7104    injected-class-names from different bases.  */
7105
7106 tree
7107 maybe_get_template_decl_from_type_decl (tree decl)
7108 {
7109   if (decl == NULL_TREE)
7110     return decl;
7111
7112   /* DR 176: A lookup that finds an injected-class-name (10.2
7113      [class.member.lookup]) can result in an ambiguity in certain cases
7114      (for example, if it is found in more than one base class). If all of
7115      the injected-class-names that are found refer to specializations of
7116      the same class template, and if the name is followed by a
7117      template-argument-list, the reference refers to the class template
7118      itself and not a specialization thereof, and is not ambiguous.  */
7119   if (TREE_CODE (decl) == TREE_LIST)
7120     {
7121       tree t, tmpl = NULL_TREE;
7122       for (t = decl; t; t = TREE_CHAIN (t))
7123         {
7124           tree elt = maybe_get_template_decl_from_type_decl (TREE_VALUE (t));
7125           if (!tmpl)
7126             tmpl = elt;
7127           else if (tmpl != elt)
7128             break;
7129         }
7130       if (tmpl && t == NULL_TREE)
7131         return tmpl;
7132       else
7133         return decl;
7134     }
7135
7136   return (decl != NULL_TREE
7137           && DECL_SELF_REFERENCE_P (decl)
7138           && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
7139     ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
7140 }
7141
7142 /* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of
7143    parameters, find the desired type.
7144
7145    D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
7146
7147    IN_DECL, if non-NULL, is the template declaration we are trying to
7148    instantiate.
7149
7150    If ENTERING_SCOPE is nonzero, we are about to enter the scope of
7151    the class we are looking up.
7152
7153    Issue error and warning messages under control of COMPLAIN.
7154
7155    If the template class is really a local class in a template
7156    function, then the FUNCTION_CONTEXT is the function in which it is
7157    being instantiated.
7158
7159    ??? Note that this function is currently called *twice* for each
7160    template-id: the first time from the parser, while creating the
7161    incomplete type (finish_template_type), and the second type during the
7162    real instantiation (instantiate_template_class). This is surely something
7163    that we want to avoid. It also causes some problems with argument
7164    coercion (see convert_nontype_argument for more information on this).  */
7165
7166 static tree
7167 lookup_template_class_1 (tree d1, tree arglist, tree in_decl, tree context,
7168                          int entering_scope, tsubst_flags_t complain)
7169 {
7170   tree templ = NULL_TREE, parmlist;
7171   tree t;
7172   void **slot;
7173   spec_entry *entry;
7174   spec_entry elt;
7175   hashval_t hash;
7176
7177   if (TREE_CODE (d1) == IDENTIFIER_NODE)
7178     {
7179       tree value = innermost_non_namespace_value (d1);
7180       if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
7181         templ = value;
7182       else
7183         {
7184           if (context)
7185             push_decl_namespace (context);
7186           templ = lookup_name (d1);
7187           templ = maybe_get_template_decl_from_type_decl (templ);
7188           if (context)
7189             pop_decl_namespace ();
7190         }
7191       if (templ)
7192         context = DECL_CONTEXT (templ);
7193     }
7194   else if (TREE_CODE (d1) == TYPE_DECL && MAYBE_CLASS_TYPE_P (TREE_TYPE (d1)))
7195     {
7196       tree type = TREE_TYPE (d1);
7197
7198       /* If we are declaring a constructor, say A<T>::A<T>, we will get
7199          an implicit typename for the second A.  Deal with it.  */
7200       if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
7201         type = TREE_TYPE (type);
7202
7203       if (CLASSTYPE_TEMPLATE_INFO (type))
7204         {
7205           templ = CLASSTYPE_TI_TEMPLATE (type);
7206           d1 = DECL_NAME (templ);
7207         }
7208     }
7209   else if (TREE_CODE (d1) == ENUMERAL_TYPE
7210            || (TYPE_P (d1) && MAYBE_CLASS_TYPE_P (d1)))
7211     {
7212       templ = TYPE_TI_TEMPLATE (d1);
7213       d1 = DECL_NAME (templ);
7214     }
7215   else if (TREE_CODE (d1) == TEMPLATE_DECL
7216            && DECL_TEMPLATE_RESULT (d1)
7217            && TREE_CODE (DECL_TEMPLATE_RESULT (d1)) == TYPE_DECL)
7218     {
7219       templ = d1;
7220       d1 = DECL_NAME (templ);
7221       context = DECL_CONTEXT (templ);
7222     }
7223
7224   /* Issue an error message if we didn't find a template.  */
7225   if (! templ)
7226     {
7227       if (complain & tf_error)
7228         error ("%qT is not a template", d1);
7229       return error_mark_node;
7230     }
7231
7232   if (TREE_CODE (templ) != TEMPLATE_DECL
7233          /* Make sure it's a user visible template, if it was named by
7234             the user.  */
7235       || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (templ)
7236           && !PRIMARY_TEMPLATE_P (templ)))
7237     {
7238       if (complain & tf_error)
7239         {
7240           error ("non-template type %qT used as a template", d1);
7241           if (in_decl)
7242             error ("for template declaration %q+D", in_decl);
7243         }
7244       return error_mark_node;
7245     }
7246
7247   complain &= ~tf_user;
7248
7249   if (DECL_TEMPLATE_TEMPLATE_PARM_P (templ))
7250     {
7251       /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
7252          template arguments */
7253
7254       tree parm;
7255       tree arglist2;
7256       tree outer;
7257
7258       parmlist = DECL_INNERMOST_TEMPLATE_PARMS (templ);
7259
7260       /* Consider an example where a template template parameter declared as
7261
7262            template <class T, class U = std::allocator<T> > class TT
7263
7264          The template parameter level of T and U are one level larger than
7265          of TT.  To proper process the default argument of U, say when an
7266          instantiation `TT<int>' is seen, we need to build the full
7267          arguments containing {int} as the innermost level.  Outer levels,
7268          available when not appearing as default template argument, can be
7269          obtained from the arguments of the enclosing template.
7270
7271          Suppose that TT is later substituted with std::vector.  The above
7272          instantiation is `TT<int, std::allocator<T> >' with TT at
7273          level 1, and T at level 2, while the template arguments at level 1
7274          becomes {std::vector} and the inner level 2 is {int}.  */
7275
7276       outer = DECL_CONTEXT (templ);
7277       if (outer)
7278         outer = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (outer)));
7279       else if (current_template_parms)
7280         /* This is an argument of the current template, so we haven't set
7281            DECL_CONTEXT yet.  */
7282         outer = current_template_args ();
7283
7284       if (outer)
7285         arglist = add_to_template_args (outer, arglist);
7286
7287       arglist2 = coerce_template_parms (parmlist, arglist, templ,
7288                                         complain,
7289                                         /*require_all_args=*/true,
7290                                         /*use_default_args=*/true);
7291       if (arglist2 == error_mark_node
7292           || (!uses_template_parms (arglist2)
7293               && check_instantiated_args (templ, arglist2, complain)))
7294         return error_mark_node;
7295
7296       parm = bind_template_template_parm (TREE_TYPE (templ), arglist2);
7297       return parm;
7298     }
7299   else
7300     {
7301       tree template_type = TREE_TYPE (templ);
7302       tree gen_tmpl;
7303       tree type_decl;
7304       tree found = NULL_TREE;
7305       int arg_depth;
7306       int parm_depth;
7307       int is_dependent_type;
7308       int use_partial_inst_tmpl = false;
7309
7310       if (template_type == error_mark_node)
7311         /* An error occured while building the template TEMPL, and a
7312            diagnostic has most certainly been emitted for that
7313            already.  Let's propagate that error.  */
7314         return error_mark_node;
7315
7316       gen_tmpl = most_general_template (templ);
7317       parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
7318       parm_depth = TMPL_PARMS_DEPTH (parmlist);
7319       arg_depth = TMPL_ARGS_DEPTH (arglist);
7320
7321       if (arg_depth == 1 && parm_depth > 1)
7322         {
7323           /* We've been given an incomplete set of template arguments.
7324              For example, given:
7325
7326                template <class T> struct S1 {
7327                  template <class U> struct S2 {};
7328                  template <class U> struct S2<U*> {};
7329                 };
7330
7331              we will be called with an ARGLIST of `U*', but the
7332              TEMPLATE will be `template <class T> template
7333              <class U> struct S1<T>::S2'.  We must fill in the missing
7334              arguments.  */
7335           arglist
7336             = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (templ)),
7337                                            arglist);
7338           arg_depth = TMPL_ARGS_DEPTH (arglist);
7339         }
7340
7341       /* Now we should have enough arguments.  */
7342       gcc_assert (parm_depth == arg_depth);
7343
7344       /* From here on, we're only interested in the most general
7345          template.  */
7346
7347       /* Calculate the BOUND_ARGS.  These will be the args that are
7348          actually tsubst'd into the definition to create the
7349          instantiation.  */
7350       if (parm_depth > 1)
7351         {
7352           /* We have multiple levels of arguments to coerce, at once.  */
7353           int i;
7354           int saved_depth = TMPL_ARGS_DEPTH (arglist);
7355
7356           tree bound_args = make_tree_vec (parm_depth);
7357
7358           for (i = saved_depth,
7359                  t = DECL_TEMPLATE_PARMS (gen_tmpl);
7360                i > 0 && t != NULL_TREE;
7361                --i, t = TREE_CHAIN (t))
7362             {
7363               tree a;
7364               if (i == saved_depth)
7365                 a = coerce_template_parms (TREE_VALUE (t),
7366                                            arglist, gen_tmpl,
7367                                            complain,
7368                                            /*require_all_args=*/true,
7369                                            /*use_default_args=*/true);
7370               else
7371                 /* Outer levels should have already been coerced.  */
7372                 a = TMPL_ARGS_LEVEL (arglist, i);
7373
7374               /* Don't process further if one of the levels fails.  */
7375               if (a == error_mark_node)
7376                 {
7377                   /* Restore the ARGLIST to its full size.  */
7378                   TREE_VEC_LENGTH (arglist) = saved_depth;
7379                   return error_mark_node;
7380                 }
7381
7382               SET_TMPL_ARGS_LEVEL (bound_args, i, a);
7383
7384               /* We temporarily reduce the length of the ARGLIST so
7385                  that coerce_template_parms will see only the arguments
7386                  corresponding to the template parameters it is
7387                  examining.  */
7388               TREE_VEC_LENGTH (arglist)--;
7389             }
7390
7391           /* Restore the ARGLIST to its full size.  */
7392           TREE_VEC_LENGTH (arglist) = saved_depth;
7393
7394           arglist = bound_args;
7395         }
7396       else
7397         arglist
7398           = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
7399                                    INNERMOST_TEMPLATE_ARGS (arglist),
7400                                    gen_tmpl,
7401                                    complain,
7402                                    /*require_all_args=*/true,
7403                                    /*use_default_args=*/true);
7404
7405       if (arglist == error_mark_node)
7406         /* We were unable to bind the arguments.  */
7407         return error_mark_node;
7408
7409       /* In the scope of a template class, explicit references to the
7410          template class refer to the type of the template, not any
7411          instantiation of it.  For example, in:
7412
7413            template <class T> class C { void f(C<T>); }
7414
7415          the `C<T>' is just the same as `C'.  Outside of the
7416          class, however, such a reference is an instantiation.  */
7417       if ((entering_scope
7418            || !PRIMARY_TEMPLATE_P (gen_tmpl)
7419            || currently_open_class (template_type))
7420           /* comp_template_args is expensive, check it last.  */
7421           && comp_template_args (TYPE_TI_ARGS (template_type),
7422                                  arglist))
7423         return template_type;
7424
7425       /* If we already have this specialization, return it.  */
7426       elt.tmpl = gen_tmpl;
7427       elt.args = arglist;
7428       hash = hash_specialization (&elt);
7429       entry = (spec_entry *) htab_find_with_hash (type_specializations,
7430                                                   &elt, hash);
7431
7432       if (entry)
7433         return entry->spec;
7434
7435       is_dependent_type = uses_template_parms (arglist);
7436
7437       /* If the deduced arguments are invalid, then the binding
7438          failed.  */
7439       if (!is_dependent_type
7440           && check_instantiated_args (gen_tmpl,
7441                                       INNERMOST_TEMPLATE_ARGS (arglist),
7442                                       complain))
7443         return error_mark_node;
7444
7445       if (!is_dependent_type
7446           && !PRIMARY_TEMPLATE_P (gen_tmpl)
7447           && !LAMBDA_TYPE_P (TREE_TYPE (gen_tmpl))
7448           && TREE_CODE (CP_DECL_CONTEXT (gen_tmpl)) == NAMESPACE_DECL)
7449         {
7450           found = xref_tag_from_type (TREE_TYPE (gen_tmpl),
7451                                       DECL_NAME (gen_tmpl),
7452                                       /*tag_scope=*/ts_global);
7453           return found;
7454         }
7455
7456       context = tsubst (DECL_CONTEXT (gen_tmpl), arglist,
7457                         complain, in_decl);
7458       if (!context)
7459         context = global_namespace;
7460
7461       /* Create the type.  */
7462       if (TREE_CODE (template_type) == ENUMERAL_TYPE)
7463         {
7464           if (!is_dependent_type)
7465             {
7466               set_current_access_from_decl (TYPE_NAME (template_type));
7467               t = start_enum (TYPE_IDENTIFIER (template_type), NULL_TREE,
7468                               tsubst (ENUM_UNDERLYING_TYPE (template_type),
7469                                       arglist, complain, in_decl),
7470                               SCOPED_ENUM_P (template_type), NULL);
7471             }
7472           else
7473             {
7474               /* We don't want to call start_enum for this type, since
7475                  the values for the enumeration constants may involve
7476                  template parameters.  And, no one should be interested
7477                  in the enumeration constants for such a type.  */
7478               t = cxx_make_type (ENUMERAL_TYPE);
7479               SET_SCOPED_ENUM_P (t, SCOPED_ENUM_P (template_type));
7480             }
7481           SET_OPAQUE_ENUM_P (t, OPAQUE_ENUM_P (template_type));
7482           ENUM_FIXED_UNDERLYING_TYPE_P (t)
7483             = ENUM_FIXED_UNDERLYING_TYPE_P (template_type);
7484         }
7485       else if (DECL_ALIAS_TEMPLATE_P (gen_tmpl))
7486         {
7487           /* The user referred to a specialization of an alias
7488             template represented by GEN_TMPL.
7489
7490             [temp.alias]/2 says:
7491
7492                 When a template-id refers to the specialization of an
7493                 alias template, it is equivalent to the associated
7494                 type obtained by substitution of its
7495                 template-arguments for the template-parameters in the
7496                 type-id of the alias template.  */
7497
7498           t = tsubst (TREE_TYPE (gen_tmpl), arglist, complain, in_decl);
7499           /* Note that the call above (by indirectly calling
7500              register_specialization in tsubst_decl) registers the
7501              TYPE_DECL representing the specialization of the alias
7502              template.  So next time someone substitutes ARGLIST for
7503              the template parms into the alias template (GEN_TMPL),
7504              she'll get that TYPE_DECL back.  */
7505
7506           if (t == error_mark_node)
7507             return t;
7508         }
7509       else if (CLASS_TYPE_P (template_type))
7510         {
7511           t = make_class_type (TREE_CODE (template_type));
7512           CLASSTYPE_DECLARED_CLASS (t)
7513             = CLASSTYPE_DECLARED_CLASS (template_type);
7514           SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
7515           TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
7516
7517           /* A local class.  Make sure the decl gets registered properly.  */
7518           if (context == current_function_decl)
7519             pushtag (DECL_NAME (gen_tmpl), t, /*tag_scope=*/ts_current);
7520
7521           if (comp_template_args (CLASSTYPE_TI_ARGS (template_type), arglist))
7522             /* This instantiation is another name for the primary
7523                template type. Set the TYPE_CANONICAL field
7524                appropriately. */
7525             TYPE_CANONICAL (t) = template_type;
7526           else if (any_template_arguments_need_structural_equality_p (arglist))
7527             /* Some of the template arguments require structural
7528                equality testing, so this template class requires
7529                structural equality testing. */
7530             SET_TYPE_STRUCTURAL_EQUALITY (t);
7531         }
7532       else
7533         gcc_unreachable ();
7534
7535       /* If we called start_enum or pushtag above, this information
7536          will already be set up.  */
7537       if (!TYPE_NAME (t))
7538         {
7539           TYPE_CONTEXT (t) = FROB_CONTEXT (context);
7540
7541           type_decl = create_implicit_typedef (DECL_NAME (gen_tmpl), t);
7542           DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
7543           DECL_SOURCE_LOCATION (type_decl)
7544             = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
7545         }
7546       else
7547         type_decl = TYPE_NAME (t);
7548
7549       if (CLASS_TYPE_P (template_type))
7550         {
7551           TREE_PRIVATE (type_decl)
7552             = TREE_PRIVATE (TYPE_STUB_DECL (template_type));
7553           TREE_PROTECTED (type_decl)
7554             = TREE_PROTECTED (TYPE_STUB_DECL (template_type));
7555           if (CLASSTYPE_VISIBILITY_SPECIFIED (template_type))
7556             {
7557               DECL_VISIBILITY_SPECIFIED (type_decl) = 1;
7558               DECL_VISIBILITY (type_decl) = CLASSTYPE_VISIBILITY (template_type);
7559             }
7560         }
7561
7562       /* Let's consider the explicit specialization of a member
7563          of a class template specialization that is implicitely instantiated,
7564          e.g.:
7565              template<class T>
7566              struct S
7567              {
7568                template<class U> struct M {}; //#0
7569              };
7570
7571              template<>
7572              template<>
7573              struct S<int>::M<char> //#1
7574              {
7575                int i;
7576              };
7577         [temp.expl.spec]/4 says this is valid.
7578
7579         In this case, when we write:
7580         S<int>::M<char> m;
7581
7582         M is instantiated from the CLASSTYPE_TI_TEMPLATE of #1, not from
7583         the one of #0.
7584
7585         When we encounter #1, we want to store the partial instantiation
7586         of M (template<class T> S<int>::M<T>) in it's CLASSTYPE_TI_TEMPLATE.
7587
7588         For all cases other than this "explicit specialization of member of a
7589         class template", we just want to store the most general template into
7590         the CLASSTYPE_TI_TEMPLATE of M.
7591
7592         This case of "explicit specialization of member of a class template"
7593         only happens when:
7594         1/ the enclosing class is an instantiation of, and therefore not
7595         the same as, the context of the most general template, and
7596         2/ we aren't looking at the partial instantiation itself, i.e.
7597         the innermost arguments are not the same as the innermost parms of
7598         the most general template.
7599
7600         So it's only when 1/ and 2/ happens that we want to use the partial
7601         instantiation of the member template in lieu of its most general
7602         template.  */
7603
7604       if (PRIMARY_TEMPLATE_P (gen_tmpl)
7605           && TMPL_ARGS_HAVE_MULTIPLE_LEVELS (arglist)
7606           /* the enclosing class must be an instantiation...  */
7607           && CLASS_TYPE_P (context)
7608           && !same_type_p (context, DECL_CONTEXT (gen_tmpl)))
7609         {
7610           tree partial_inst_args;
7611           TREE_VEC_LENGTH (arglist)--;
7612           ++processing_template_decl;
7613           partial_inst_args =
7614             tsubst (INNERMOST_TEMPLATE_ARGS
7615                         (TYPE_TI_ARGS (TREE_TYPE (gen_tmpl))),
7616                     arglist, complain, NULL_TREE);
7617           --processing_template_decl;
7618           TREE_VEC_LENGTH (arglist)++;
7619           use_partial_inst_tmpl =
7620             /*...and we must not be looking at the partial instantiation
7621              itself. */
7622             !comp_template_args (INNERMOST_TEMPLATE_ARGS (arglist),
7623                                  partial_inst_args);
7624         }
7625
7626       if (!use_partial_inst_tmpl)
7627         /* This case is easy; there are no member templates involved.  */
7628         found = gen_tmpl;
7629       else
7630         {
7631           /* This is a full instantiation of a member template.  Find
7632              the partial instantiation of which this is an instance.  */
7633
7634           /* Temporarily reduce by one the number of levels in the ARGLIST
7635              so as to avoid comparing the last set of arguments.  */
7636           TREE_VEC_LENGTH (arglist)--;
7637           found = tsubst (gen_tmpl, arglist, complain, NULL_TREE);
7638           TREE_VEC_LENGTH (arglist)++;
7639           /* FOUND is either a proper class type, or an alias
7640              template specialization.  In the later case, it's a
7641              TYPE_DECL, resulting from the substituting of arguments
7642              for parameters in the TYPE_DECL of the alias template
7643              done earlier.  So be careful while getting the template
7644              of FOUND.  */
7645           found = TREE_CODE (found) == TYPE_DECL
7646             ? TYPE_TI_TEMPLATE (TREE_TYPE (found))
7647             : CLASSTYPE_TI_TEMPLATE (found);
7648         }
7649
7650       SET_TYPE_TEMPLATE_INFO (t, build_template_info (found, arglist));
7651
7652       elt.spec = t;
7653       slot = htab_find_slot_with_hash (type_specializations,
7654                                        &elt, hash, INSERT);
7655       entry = ggc_alloc_spec_entry ();
7656       *entry = elt;
7657       *slot = entry;
7658
7659       /* Note this use of the partial instantiation so we can check it
7660          later in maybe_process_partial_specialization.  */
7661       DECL_TEMPLATE_INSTANTIATIONS (templ)
7662         = tree_cons (arglist, t,
7663                      DECL_TEMPLATE_INSTANTIATIONS (templ));
7664
7665       if (TREE_CODE (t) == ENUMERAL_TYPE && !is_dependent_type)
7666         /* Now that the type has been registered on the instantiations
7667            list, we set up the enumerators.  Because the enumeration
7668            constants may involve the enumeration type itself, we make
7669            sure to register the type first, and then create the
7670            constants.  That way, doing tsubst_expr for the enumeration
7671            constants won't result in recursive calls here; we'll find
7672            the instantiation and exit above.  */
7673         tsubst_enum (template_type, t, arglist);
7674
7675       if (CLASS_TYPE_P (template_type) && is_dependent_type)
7676         /* If the type makes use of template parameters, the
7677            code that generates debugging information will crash.  */
7678         DECL_IGNORED_P (TYPE_STUB_DECL (t)) = 1;
7679
7680       /* Possibly limit visibility based on template args.  */
7681       TREE_PUBLIC (type_decl) = 1;
7682       determine_visibility (type_decl);
7683
7684       return t;
7685     }
7686 }
7687
7688 /* Wrapper for lookup_template_class_1.  */
7689
7690 tree
7691 lookup_template_class (tree d1, tree arglist, tree in_decl, tree context,
7692                        int entering_scope, tsubst_flags_t complain)
7693 {
7694   tree ret;
7695   timevar_push (TV_TEMPLATE_INST);
7696   ret = lookup_template_class_1 (d1, arglist, in_decl, context,
7697                                  entering_scope, complain);
7698   timevar_pop (TV_TEMPLATE_INST);
7699   return ret;
7700 }
7701 \f
7702 struct pair_fn_data
7703 {
7704   tree_fn_t fn;
7705   void *data;
7706   /* True when we should also visit template parameters that occur in
7707      non-deduced contexts.  */
7708   bool include_nondeduced_p;
7709   struct pointer_set_t *visited;
7710 };
7711
7712 /* Called from for_each_template_parm via walk_tree.  */
7713
7714 static tree
7715 for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
7716 {
7717   tree t = *tp;
7718   struct pair_fn_data *pfd = (struct pair_fn_data *) d;
7719   tree_fn_t fn = pfd->fn;
7720   void *data = pfd->data;
7721
7722   if (TYPE_P (t)
7723       && (pfd->include_nondeduced_p || TREE_CODE (t) != TYPENAME_TYPE)
7724       && for_each_template_parm (TYPE_CONTEXT (t), fn, data, pfd->visited,
7725                                  pfd->include_nondeduced_p))
7726     return error_mark_node;
7727
7728   switch (TREE_CODE (t))
7729     {
7730     case RECORD_TYPE:
7731       if (TYPE_PTRMEMFUNC_P (t))
7732         break;
7733       /* Fall through.  */
7734
7735     case UNION_TYPE:
7736     case ENUMERAL_TYPE:
7737       if (!TYPE_TEMPLATE_INFO (t))
7738         *walk_subtrees = 0;
7739       else if (for_each_template_parm (TI_ARGS (TYPE_TEMPLATE_INFO (t)),
7740                                        fn, data, pfd->visited, 
7741                                        pfd->include_nondeduced_p))
7742         return error_mark_node;
7743       break;
7744
7745     case INTEGER_TYPE:
7746       if (for_each_template_parm (TYPE_MIN_VALUE (t),
7747                                   fn, data, pfd->visited, 
7748                                   pfd->include_nondeduced_p)
7749           || for_each_template_parm (TYPE_MAX_VALUE (t),
7750                                      fn, data, pfd->visited,
7751                                      pfd->include_nondeduced_p))
7752         return error_mark_node;
7753       break;
7754
7755     case METHOD_TYPE:
7756       /* Since we're not going to walk subtrees, we have to do this
7757          explicitly here.  */
7758       if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data,
7759                                   pfd->visited, pfd->include_nondeduced_p))
7760         return error_mark_node;
7761       /* Fall through.  */
7762
7763     case FUNCTION_TYPE:
7764       /* Check the return type.  */
7765       if (for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
7766                                   pfd->include_nondeduced_p))
7767         return error_mark_node;
7768
7769       /* Check the parameter types.  Since default arguments are not
7770          instantiated until they are needed, the TYPE_ARG_TYPES may
7771          contain expressions that involve template parameters.  But,
7772          no-one should be looking at them yet.  And, once they're
7773          instantiated, they don't contain template parameters, so
7774          there's no point in looking at them then, either.  */
7775       {
7776         tree parm;
7777
7778         for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
7779           if (for_each_template_parm (TREE_VALUE (parm), fn, data,
7780                                       pfd->visited, pfd->include_nondeduced_p))
7781             return error_mark_node;
7782
7783         /* Since we've already handled the TYPE_ARG_TYPES, we don't
7784            want walk_tree walking into them itself.  */
7785         *walk_subtrees = 0;
7786       }
7787       break;
7788
7789     case TYPEOF_TYPE:
7790     case UNDERLYING_TYPE:
7791       if (pfd->include_nondeduced_p
7792           && for_each_template_parm (TYPE_FIELDS (t), fn, data,
7793                                      pfd->visited, 
7794                                      pfd->include_nondeduced_p))
7795         return error_mark_node;
7796       break;
7797
7798     case FUNCTION_DECL:
7799     case VAR_DECL:
7800       if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
7801           && for_each_template_parm (DECL_TI_ARGS (t), fn, data,
7802                                      pfd->visited, pfd->include_nondeduced_p))
7803         return error_mark_node;
7804       /* Fall through.  */
7805
7806     case PARM_DECL:
7807     case CONST_DECL:
7808       if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t)
7809           && for_each_template_parm (DECL_INITIAL (t), fn, data,
7810                                      pfd->visited, pfd->include_nondeduced_p))
7811         return error_mark_node;
7812       if (DECL_CONTEXT (t)
7813           && pfd->include_nondeduced_p
7814           && for_each_template_parm (DECL_CONTEXT (t), fn, data,
7815                                      pfd->visited, pfd->include_nondeduced_p))
7816         return error_mark_node;
7817       break;
7818
7819     case BOUND_TEMPLATE_TEMPLATE_PARM:
7820       /* Record template parameters such as `T' inside `TT<T>'.  */
7821       if (for_each_template_parm (TYPE_TI_ARGS (t), fn, data, pfd->visited,
7822                                   pfd->include_nondeduced_p))
7823         return error_mark_node;
7824       /* Fall through.  */
7825
7826     case TEMPLATE_TEMPLATE_PARM:
7827     case TEMPLATE_TYPE_PARM:
7828     case TEMPLATE_PARM_INDEX:
7829       if (fn && (*fn)(t, data))
7830         return error_mark_node;
7831       else if (!fn)
7832         return error_mark_node;
7833       break;
7834
7835     case TEMPLATE_DECL:
7836       /* A template template parameter is encountered.  */
7837       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
7838           && for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
7839                                      pfd->include_nondeduced_p))
7840         return error_mark_node;
7841
7842       /* Already substituted template template parameter */
7843       *walk_subtrees = 0;
7844       break;
7845
7846     case TYPENAME_TYPE:
7847       if (!fn
7848           || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn,
7849                                      data, pfd->visited, 
7850                                      pfd->include_nondeduced_p))
7851         return error_mark_node;
7852       break;
7853
7854     case CONSTRUCTOR:
7855       if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
7856           && pfd->include_nondeduced_p
7857           && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
7858                                      (TREE_TYPE (t)), fn, data,
7859                                      pfd->visited, pfd->include_nondeduced_p))
7860         return error_mark_node;
7861       break;
7862
7863     case INDIRECT_REF:
7864     case COMPONENT_REF:
7865       /* If there's no type, then this thing must be some expression
7866          involving template parameters.  */
7867       if (!fn && !TREE_TYPE (t))
7868         return error_mark_node;
7869       break;
7870
7871     case MODOP_EXPR:
7872     case CAST_EXPR:
7873     case IMPLICIT_CONV_EXPR:
7874     case REINTERPRET_CAST_EXPR:
7875     case CONST_CAST_EXPR:
7876     case STATIC_CAST_EXPR:
7877     case DYNAMIC_CAST_EXPR:
7878     case ARROW_EXPR:
7879     case DOTSTAR_EXPR:
7880     case TYPEID_EXPR:
7881     case PSEUDO_DTOR_EXPR:
7882       if (!fn)
7883         return error_mark_node;
7884       break;
7885
7886     default:
7887       break;
7888     }
7889
7890   /* We didn't find any template parameters we liked.  */
7891   return NULL_TREE;
7892 }
7893
7894 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
7895    BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
7896    call FN with the parameter and the DATA.
7897    If FN returns nonzero, the iteration is terminated, and
7898    for_each_template_parm returns 1.  Otherwise, the iteration
7899    continues.  If FN never returns a nonzero value, the value
7900    returned by for_each_template_parm is 0.  If FN is NULL, it is
7901    considered to be the function which always returns 1.
7902
7903    If INCLUDE_NONDEDUCED_P, then this routine will also visit template
7904    parameters that occur in non-deduced contexts.  When false, only
7905    visits those template parameters that can be deduced.  */
7906
7907 static int
7908 for_each_template_parm (tree t, tree_fn_t fn, void* data,
7909                         struct pointer_set_t *visited,
7910                         bool include_nondeduced_p)
7911 {
7912   struct pair_fn_data pfd;
7913   int result;
7914
7915   /* Set up.  */
7916   pfd.fn = fn;
7917   pfd.data = data;
7918   pfd.include_nondeduced_p = include_nondeduced_p;
7919
7920   /* Walk the tree.  (Conceptually, we would like to walk without
7921      duplicates, but for_each_template_parm_r recursively calls
7922      for_each_template_parm, so we would need to reorganize a fair
7923      bit to use walk_tree_without_duplicates, so we keep our own
7924      visited list.)  */
7925   if (visited)
7926     pfd.visited = visited;
7927   else
7928     pfd.visited = pointer_set_create ();
7929   result = cp_walk_tree (&t,
7930                          for_each_template_parm_r,
7931                          &pfd,
7932                          pfd.visited) != NULL_TREE;
7933
7934   /* Clean up.  */
7935   if (!visited)
7936     {
7937       pointer_set_destroy (pfd.visited);
7938       pfd.visited = 0;
7939     }
7940
7941   return result;
7942 }
7943
7944 /* Returns true if T depends on any template parameter.  */
7945
7946 int
7947 uses_template_parms (tree t)
7948 {
7949   bool dependent_p;
7950   int saved_processing_template_decl;
7951
7952   saved_processing_template_decl = processing_template_decl;
7953   if (!saved_processing_template_decl)
7954     processing_template_decl = 1;
7955   if (TYPE_P (t))
7956     dependent_p = dependent_type_p (t);
7957   else if (TREE_CODE (t) == TREE_VEC)
7958     dependent_p = any_dependent_template_arguments_p (t);
7959   else if (TREE_CODE (t) == TREE_LIST)
7960     dependent_p = (uses_template_parms (TREE_VALUE (t))
7961                    || uses_template_parms (TREE_CHAIN (t)));
7962   else if (TREE_CODE (t) == TYPE_DECL)
7963     dependent_p = dependent_type_p (TREE_TYPE (t));
7964   else if (DECL_P (t)
7965            || EXPR_P (t)
7966            || TREE_CODE (t) == TEMPLATE_PARM_INDEX
7967            || TREE_CODE (t) == OVERLOAD
7968            || BASELINK_P (t)
7969            || TREE_CODE (t) == IDENTIFIER_NODE
7970            || TREE_CODE (t) == TRAIT_EXPR
7971            || TREE_CODE (t) == CONSTRUCTOR
7972            || CONSTANT_CLASS_P (t))
7973     dependent_p = (type_dependent_expression_p (t)
7974                    || value_dependent_expression_p (t));
7975   else
7976     {
7977       gcc_assert (t == error_mark_node);
7978       dependent_p = false;
7979     }
7980
7981   processing_template_decl = saved_processing_template_decl;
7982
7983   return dependent_p;
7984 }
7985
7986 /* Returns true if T depends on any template parameter with level LEVEL.  */
7987
7988 int
7989 uses_template_parms_level (tree t, int level)
7990 {
7991   return for_each_template_parm (t, template_parm_this_level_p, &level, NULL,
7992                                  /*include_nondeduced_p=*/true);
7993 }
7994
7995 /* Returns TRUE iff INST is an instantiation we don't need to do in an
7996    ill-formed translation unit, i.e. a variable or function that isn't
7997    usable in a constant expression.  */
7998
7999 static inline bool
8000 neglectable_inst_p (tree d)
8001 {
8002   return (DECL_P (d)
8003           && !(TREE_CODE (d) == FUNCTION_DECL ? DECL_DECLARED_CONSTEXPR_P (d)
8004                : decl_maybe_constant_var_p (d)));
8005 }
8006
8007 /* Returns TRUE iff we should refuse to instantiate DECL because it's
8008    neglectable and instantiated from within an erroneous instantiation.  */
8009
8010 static bool
8011 limit_bad_template_recursion (tree decl)
8012 {
8013   struct tinst_level *lev = current_tinst_level;
8014   int errs = errorcount + sorrycount;
8015   if (lev == NULL || errs == 0 || !neglectable_inst_p (decl))
8016     return false;
8017
8018   for (; lev; lev = lev->next)
8019     if (neglectable_inst_p (lev->decl))
8020       break;
8021
8022   return (lev && errs > lev->errors);
8023 }
8024
8025 static int tinst_depth;
8026 extern int max_tinst_depth;
8027 #ifdef GATHER_STATISTICS
8028 int depth_reached;
8029 #endif
8030 static GTY(()) struct tinst_level *last_error_tinst_level;
8031
8032 /* We're starting to instantiate D; record the template instantiation context
8033    for diagnostics and to restore it later.  */
8034
8035 int
8036 push_tinst_level (tree d)
8037 {
8038   struct tinst_level *new_level;
8039
8040   if (tinst_depth >= max_tinst_depth)
8041     {
8042       last_error_tinst_level = current_tinst_level;
8043       if (TREE_CODE (d) == TREE_LIST)
8044         error ("template instantiation depth exceeds maximum of %d (use "
8045                "-ftemplate-depth= to increase the maximum) substituting %qS",
8046                max_tinst_depth, d);
8047       else
8048         error ("template instantiation depth exceeds maximum of %d (use "
8049                "-ftemplate-depth= to increase the maximum) instantiating %qD",
8050                max_tinst_depth, d);
8051
8052       print_instantiation_context ();
8053
8054       return 0;
8055     }
8056
8057   /* If the current instantiation caused problems, don't let it instantiate
8058      anything else.  Do allow deduction substitution and decls usable in
8059      constant expressions.  */
8060   if (limit_bad_template_recursion (d))
8061     return 0;
8062
8063   new_level = ggc_alloc_tinst_level ();
8064   new_level->decl = d;
8065   new_level->locus = input_location;
8066   new_level->errors = errorcount+sorrycount;
8067   new_level->in_system_header_p = in_system_header;
8068   new_level->next = current_tinst_level;
8069   current_tinst_level = new_level;
8070
8071   ++tinst_depth;
8072 #ifdef GATHER_STATISTICS
8073   if (tinst_depth > depth_reached)
8074     depth_reached = tinst_depth;
8075 #endif
8076
8077   return 1;
8078 }
8079
8080 /* We're done instantiating this template; return to the instantiation
8081    context.  */
8082
8083 void
8084 pop_tinst_level (void)
8085 {
8086   /* Restore the filename and line number stashed away when we started
8087      this instantiation.  */
8088   input_location = current_tinst_level->locus;
8089   current_tinst_level = current_tinst_level->next;
8090   --tinst_depth;
8091 }
8092
8093 /* We're instantiating a deferred template; restore the template
8094    instantiation context in which the instantiation was requested, which
8095    is one step out from LEVEL.  Return the corresponding DECL or TYPE.  */
8096
8097 static tree
8098 reopen_tinst_level (struct tinst_level *level)
8099 {
8100   struct tinst_level *t;
8101
8102   tinst_depth = 0;
8103   for (t = level; t; t = t->next)
8104     ++tinst_depth;
8105
8106   current_tinst_level = level;
8107   pop_tinst_level ();
8108   if (current_tinst_level)
8109     current_tinst_level->errors = errorcount+sorrycount;
8110   return level->decl;
8111 }
8112
8113 /* Returns the TINST_LEVEL which gives the original instantiation
8114    context.  */
8115
8116 struct tinst_level *
8117 outermost_tinst_level (void)
8118 {
8119   struct tinst_level *level = current_tinst_level;
8120   if (level)
8121     while (level->next)
8122       level = level->next;
8123   return level;
8124 }
8125
8126 /* Returns TRUE if PARM is a parameter of the template TEMPL.  */
8127
8128 bool
8129 parameter_of_template_p (tree parm, tree templ)
8130 {
8131   tree parms;
8132   int i;
8133
8134   if (!parm || !templ)
8135     return false;
8136
8137   gcc_assert (DECL_TEMPLATE_PARM_P (parm));
8138   gcc_assert (TREE_CODE (templ) == TEMPLATE_DECL);
8139
8140   parms = DECL_TEMPLATE_PARMS (templ);
8141   parms = INNERMOST_TEMPLATE_PARMS (parms);
8142
8143   for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
8144     {
8145       tree p = TREE_VALUE (TREE_VEC_ELT (parms, i));
8146       if (parm == p
8147           || (DECL_INITIAL (parm)
8148               && DECL_INITIAL (parm) == DECL_INITIAL (p)))
8149         return true;
8150     }
8151
8152   return false;
8153 }
8154
8155 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL.  ARGS is the
8156    vector of template arguments, as for tsubst.
8157
8158    Returns an appropriate tsubst'd friend declaration.  */
8159
8160 static tree
8161 tsubst_friend_function (tree decl, tree args)
8162 {
8163   tree new_friend;
8164
8165   if (TREE_CODE (decl) == FUNCTION_DECL
8166       && DECL_TEMPLATE_INSTANTIATION (decl)
8167       && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
8168     /* This was a friend declared with an explicit template
8169        argument list, e.g.:
8170
8171        friend void f<>(T);
8172
8173        to indicate that f was a template instantiation, not a new
8174        function declaration.  Now, we have to figure out what
8175        instantiation of what template.  */
8176     {
8177       tree template_id, arglist, fns;
8178       tree new_args;
8179       tree tmpl;
8180       tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
8181
8182       /* Friend functions are looked up in the containing namespace scope.
8183          We must enter that scope, to avoid finding member functions of the
8184          current class with same name.  */
8185       push_nested_namespace (ns);
8186       fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
8187                          tf_warning_or_error, NULL_TREE,
8188                          /*integral_constant_expression_p=*/false);
8189       pop_nested_namespace (ns);
8190       arglist = tsubst (DECL_TI_ARGS (decl), args,
8191                         tf_warning_or_error, NULL_TREE);
8192       template_id = lookup_template_function (fns, arglist);
8193
8194       new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
8195       tmpl = determine_specialization (template_id, new_friend,
8196                                        &new_args,
8197                                        /*need_member_template=*/0,
8198                                        TREE_VEC_LENGTH (args),
8199                                        tsk_none);
8200       return instantiate_template (tmpl, new_args, tf_error);
8201     }
8202
8203   new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
8204
8205   /* The NEW_FRIEND will look like an instantiation, to the
8206      compiler, but is not an instantiation from the point of view of
8207      the language.  For example, we might have had:
8208
8209      template <class T> struct S {
8210        template <class U> friend void f(T, U);
8211      };
8212
8213      Then, in S<int>, template <class U> void f(int, U) is not an
8214      instantiation of anything.  */
8215   if (new_friend == error_mark_node)
8216     return error_mark_node;
8217
8218   DECL_USE_TEMPLATE (new_friend) = 0;
8219   if (TREE_CODE (decl) == TEMPLATE_DECL)
8220     {
8221       DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
8222       DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
8223         = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
8224     }
8225
8226   /* The mangled name for the NEW_FRIEND is incorrect.  The function
8227      is not a template instantiation and should not be mangled like
8228      one.  Therefore, we forget the mangling here; we'll recompute it
8229      later if we need it.  */
8230   if (TREE_CODE (new_friend) != TEMPLATE_DECL)
8231     {
8232       SET_DECL_RTL (new_friend, NULL);
8233       SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
8234     }
8235
8236   if (DECL_NAMESPACE_SCOPE_P (new_friend))
8237     {
8238       tree old_decl;
8239       tree new_friend_template_info;
8240       tree new_friend_result_template_info;
8241       tree ns;
8242       int  new_friend_is_defn;
8243
8244       /* We must save some information from NEW_FRIEND before calling
8245          duplicate decls since that function will free NEW_FRIEND if
8246          possible.  */
8247       new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
8248       new_friend_is_defn =
8249             (DECL_INITIAL (DECL_TEMPLATE_RESULT
8250                            (template_for_substitution (new_friend)))
8251              != NULL_TREE);
8252       if (TREE_CODE (new_friend) == TEMPLATE_DECL)
8253         {
8254           /* This declaration is a `primary' template.  */
8255           DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
8256
8257           new_friend_result_template_info
8258             = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
8259         }
8260       else
8261         new_friend_result_template_info = NULL_TREE;
8262
8263       /* Make the init_value nonzero so pushdecl knows this is a defn.  */
8264       if (new_friend_is_defn)
8265         DECL_INITIAL (new_friend) = error_mark_node;
8266
8267       /* Inside pushdecl_namespace_level, we will push into the
8268          current namespace. However, the friend function should go
8269          into the namespace of the template.  */
8270       ns = decl_namespace_context (new_friend);
8271       push_nested_namespace (ns);
8272       old_decl = pushdecl_namespace_level (new_friend, /*is_friend=*/true);
8273       pop_nested_namespace (ns);
8274
8275       if (old_decl == error_mark_node)
8276         return error_mark_node;
8277
8278       if (old_decl != new_friend)
8279         {
8280           /* This new friend declaration matched an existing
8281              declaration.  For example, given:
8282
8283                template <class T> void f(T);
8284                template <class U> class C {
8285                  template <class T> friend void f(T) {}
8286                };
8287
8288              the friend declaration actually provides the definition
8289              of `f', once C has been instantiated for some type.  So,
8290              old_decl will be the out-of-class template declaration,
8291              while new_friend is the in-class definition.
8292
8293              But, if `f' was called before this point, the
8294              instantiation of `f' will have DECL_TI_ARGS corresponding
8295              to `T' but not to `U', references to which might appear
8296              in the definition of `f'.  Previously, the most general
8297              template for an instantiation of `f' was the out-of-class
8298              version; now it is the in-class version.  Therefore, we
8299              run through all specialization of `f', adding to their
8300              DECL_TI_ARGS appropriately.  In particular, they need a
8301              new set of outer arguments, corresponding to the
8302              arguments for this class instantiation.
8303
8304              The same situation can arise with something like this:
8305
8306                friend void f(int);
8307                template <class T> class C {
8308                  friend void f(T) {}
8309                };
8310
8311              when `C<int>' is instantiated.  Now, `f(int)' is defined
8312              in the class.  */
8313
8314           if (!new_friend_is_defn)
8315             /* On the other hand, if the in-class declaration does
8316                *not* provide a definition, then we don't want to alter
8317                existing definitions.  We can just leave everything
8318                alone.  */
8319             ;
8320           else
8321             {
8322               tree new_template = TI_TEMPLATE (new_friend_template_info);
8323               tree new_args = TI_ARGS (new_friend_template_info);
8324
8325               /* Overwrite whatever template info was there before, if
8326                  any, with the new template information pertaining to
8327                  the declaration.  */
8328               DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
8329
8330               if (TREE_CODE (old_decl) != TEMPLATE_DECL)
8331                 {
8332                   /* We should have called reregister_specialization in
8333                      duplicate_decls.  */
8334                   gcc_assert (retrieve_specialization (new_template,
8335                                                        new_args, 0)
8336                               == old_decl);
8337
8338                   /* Instantiate it if the global has already been used.  */
8339                   if (DECL_ODR_USED (old_decl))
8340                     instantiate_decl (old_decl, /*defer_ok=*/true,
8341                                       /*expl_inst_class_mem_p=*/false);
8342                 }
8343               else
8344                 {
8345                   tree t;
8346
8347                   /* Indicate that the old function template is a partial
8348                      instantiation.  */
8349                   DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
8350                     = new_friend_result_template_info;
8351
8352                   gcc_assert (new_template
8353                               == most_general_template (new_template));
8354                   gcc_assert (new_template != old_decl);
8355
8356                   /* Reassign any specializations already in the hash table
8357                      to the new more general template, and add the
8358                      additional template args.  */
8359                   for (t = DECL_TEMPLATE_INSTANTIATIONS (old_decl);
8360                        t != NULL_TREE;
8361                        t = TREE_CHAIN (t))
8362                     {
8363                       tree spec = TREE_VALUE (t);
8364                       spec_entry elt;
8365
8366                       elt.tmpl = old_decl;
8367                       elt.args = DECL_TI_ARGS (spec);
8368                       elt.spec = NULL_TREE;
8369
8370                       htab_remove_elt (decl_specializations, &elt);
8371
8372                       DECL_TI_ARGS (spec)
8373                         = add_outermost_template_args (new_args,
8374                                                        DECL_TI_ARGS (spec));
8375
8376                       register_specialization
8377                         (spec, new_template, DECL_TI_ARGS (spec), true, 0);
8378
8379                     }
8380                   DECL_TEMPLATE_INSTANTIATIONS (old_decl) = NULL_TREE;
8381                 }
8382             }
8383
8384           /* The information from NEW_FRIEND has been merged into OLD_DECL
8385              by duplicate_decls.  */
8386           new_friend = old_decl;
8387         }
8388     }
8389   else
8390     {
8391       tree context = DECL_CONTEXT (new_friend);
8392       bool dependent_p;
8393
8394       /* In the code
8395            template <class T> class C {
8396              template <class U> friend void C1<U>::f (); // case 1
8397              friend void C2<T>::f ();                    // case 2
8398            };
8399          we only need to make sure CONTEXT is a complete type for
8400          case 2.  To distinguish between the two cases, we note that
8401          CONTEXT of case 1 remains dependent type after tsubst while
8402          this isn't true for case 2.  */
8403       ++processing_template_decl;
8404       dependent_p = dependent_type_p (context);
8405       --processing_template_decl;
8406
8407       if (!dependent_p
8408           && !complete_type_or_else (context, NULL_TREE))
8409         return error_mark_node;
8410
8411       if (COMPLETE_TYPE_P (context))
8412         {
8413           /* Check to see that the declaration is really present, and,
8414              possibly obtain an improved declaration.  */
8415           tree fn = check_classfn (context,
8416                                    new_friend, NULL_TREE);
8417
8418           if (fn)
8419             new_friend = fn;
8420         }
8421     }
8422
8423   return new_friend;
8424 }
8425
8426 /* FRIEND_TMPL is a friend TEMPLATE_DECL.  ARGS is the vector of
8427    template arguments, as for tsubst.
8428
8429    Returns an appropriate tsubst'd friend type or error_mark_node on
8430    failure.  */
8431
8432 static tree
8433 tsubst_friend_class (tree friend_tmpl, tree args)
8434 {
8435   tree friend_type;
8436   tree tmpl;
8437   tree context;
8438
8439   context = CP_DECL_CONTEXT (friend_tmpl);
8440
8441   if (context != global_namespace)
8442     {
8443       if (TREE_CODE (context) == NAMESPACE_DECL)
8444         push_nested_namespace (context);
8445       else
8446         push_nested_class (tsubst (context, args, tf_none, NULL_TREE));
8447     }
8448
8449   /* Look for a class template declaration.  We look for hidden names
8450      because two friend declarations of the same template are the
8451      same.  For example, in:
8452
8453        struct A { 
8454          template <typename> friend class F;
8455        };
8456        template <typename> struct B { 
8457          template <typename> friend class F;
8458        };
8459
8460      both F templates are the same.  */
8461   tmpl = lookup_name_real (DECL_NAME (friend_tmpl), 0, 0,
8462                            /*block_p=*/true, 0, 
8463                            LOOKUP_COMPLAIN | LOOKUP_HIDDEN);
8464
8465   /* But, if we don't find one, it might be because we're in a
8466      situation like this:
8467
8468        template <class T>
8469        struct S {
8470          template <class U>
8471          friend struct S;
8472        };
8473
8474      Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
8475      for `S<int>', not the TEMPLATE_DECL.  */
8476   if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
8477     {
8478       tmpl = lookup_name_prefer_type (DECL_NAME (friend_tmpl), 1);
8479       tmpl = maybe_get_template_decl_from_type_decl (tmpl);
8480     }
8481
8482   if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
8483     {
8484       /* The friend template has already been declared.  Just
8485          check to see that the declarations match, and install any new
8486          default parameters.  We must tsubst the default parameters,
8487          of course.  We only need the innermost template parameters
8488          because that is all that redeclare_class_template will look
8489          at.  */
8490       if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
8491           > TMPL_ARGS_DEPTH (args))
8492         {
8493           tree parms;
8494           location_t saved_input_location;
8495           parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
8496                                          args, tf_warning_or_error);
8497
8498           saved_input_location = input_location;
8499           input_location = DECL_SOURCE_LOCATION (friend_tmpl);
8500           redeclare_class_template (TREE_TYPE (tmpl), parms);
8501           input_location = saved_input_location;
8502           
8503         }
8504
8505       friend_type = TREE_TYPE (tmpl);
8506     }
8507   else
8508     {
8509       /* The friend template has not already been declared.  In this
8510          case, the instantiation of the template class will cause the
8511          injection of this template into the global scope.  */
8512       tmpl = tsubst (friend_tmpl, args, tf_warning_or_error, NULL_TREE);
8513       if (tmpl == error_mark_node)
8514         return error_mark_node;
8515
8516       /* The new TMPL is not an instantiation of anything, so we
8517          forget its origins.  We don't reset CLASSTYPE_TI_TEMPLATE for
8518          the new type because that is supposed to be the corresponding
8519          template decl, i.e., TMPL.  */
8520       DECL_USE_TEMPLATE (tmpl) = 0;
8521       DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
8522       CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
8523       CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
8524         = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
8525
8526       /* Inject this template into the global scope.  */
8527       friend_type = TREE_TYPE (pushdecl_top_level_maybe_friend (tmpl, true));
8528     }
8529
8530   if (context != global_namespace)
8531     {
8532       if (TREE_CODE (context) == NAMESPACE_DECL)
8533         pop_nested_namespace (context);
8534       else
8535         pop_nested_class ();
8536     }
8537
8538   return friend_type;
8539 }
8540
8541 /* Returns zero if TYPE cannot be completed later due to circularity.
8542    Otherwise returns one.  */
8543
8544 static int
8545 can_complete_type_without_circularity (tree type)
8546 {
8547   if (type == NULL_TREE || type == error_mark_node)
8548     return 0;
8549   else if (COMPLETE_TYPE_P (type))
8550     return 1;
8551   else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
8552     return can_complete_type_without_circularity (TREE_TYPE (type));
8553   else if (CLASS_TYPE_P (type)
8554            && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
8555     return 0;
8556   else
8557     return 1;
8558 }
8559
8560 /* Apply any attributes which had to be deferred until instantiation
8561    time.  DECL_P, ATTRIBUTES and ATTR_FLAGS are as cplus_decl_attributes;
8562    ARGS, COMPLAIN, IN_DECL are as tsubst.  */
8563
8564 static void
8565 apply_late_template_attributes (tree *decl_p, tree attributes, int attr_flags,
8566                                 tree args, tsubst_flags_t complain, tree in_decl)
8567 {
8568   tree last_dep = NULL_TREE;
8569   tree t;
8570   tree *p;
8571
8572   for (t = attributes; t; t = TREE_CHAIN (t))
8573     if (ATTR_IS_DEPENDENT (t))
8574       {
8575         last_dep = t;
8576         attributes = copy_list (attributes);
8577         break;
8578       }
8579
8580   if (DECL_P (*decl_p))
8581     {
8582       if (TREE_TYPE (*decl_p) == error_mark_node)
8583         return;
8584       p = &DECL_ATTRIBUTES (*decl_p);
8585     }
8586   else
8587     p = &TYPE_ATTRIBUTES (*decl_p);
8588
8589   if (last_dep)
8590     {
8591       tree late_attrs = NULL_TREE;
8592       tree *q = &late_attrs;
8593
8594       for (*p = attributes; *p; )
8595         {
8596           t = *p;
8597           if (ATTR_IS_DEPENDENT (t))
8598             {
8599               *p = TREE_CHAIN (t);
8600               TREE_CHAIN (t) = NULL_TREE;
8601               /* If the first attribute argument is an identifier, don't
8602                  pass it through tsubst.  Attributes like mode, format,
8603                  cleanup and several target specific attributes expect it
8604                  unmodified.  */
8605               if (TREE_VALUE (t)
8606                   && TREE_CODE (TREE_VALUE (t)) == TREE_LIST
8607                   && TREE_VALUE (TREE_VALUE (t))
8608                   && (TREE_CODE (TREE_VALUE (TREE_VALUE (t)))
8609                       == IDENTIFIER_NODE))
8610                 {
8611                   tree chain
8612                     = tsubst_expr (TREE_CHAIN (TREE_VALUE (t)), args, complain,
8613                                    in_decl,
8614                                    /*integral_constant_expression_p=*/false);
8615                   if (chain != TREE_CHAIN (TREE_VALUE (t)))
8616                     TREE_VALUE (t)
8617                       = tree_cons (NULL_TREE, TREE_VALUE (TREE_VALUE (t)),
8618                                    chain);
8619                 }
8620               else
8621                 TREE_VALUE (t)
8622                   = tsubst_expr (TREE_VALUE (t), args, complain, in_decl,
8623                                  /*integral_constant_expression_p=*/false);
8624               *q = t;
8625               q = &TREE_CHAIN (t);
8626             }
8627           else
8628             p = &TREE_CHAIN (t);
8629         }
8630
8631       cplus_decl_attributes (decl_p, late_attrs, attr_flags);
8632     }
8633 }
8634
8635 /* Perform (or defer) access check for typedefs that were referenced
8636    from within the template TMPL code.
8637    This is a subroutine of instantiate_template and instantiate_class_template.
8638    TMPL is the template to consider and TARGS is the list of arguments of
8639    that template.  */
8640
8641 static void
8642 perform_typedefs_access_check (tree tmpl, tree targs)
8643 {
8644   location_t saved_location;
8645   int i;
8646   qualified_typedef_usage_t *iter;
8647
8648   if (!tmpl
8649       || (!CLASS_TYPE_P (tmpl)
8650           && TREE_CODE (tmpl) != FUNCTION_DECL))
8651     return;
8652
8653   saved_location = input_location;
8654   FOR_EACH_VEC_ELT (qualified_typedef_usage_t,
8655                     get_types_needing_access_check (tmpl),
8656                     i, iter)
8657     {
8658       tree type_decl = iter->typedef_decl;
8659       tree type_scope = iter->context;
8660
8661       if (!type_decl || !type_scope || !CLASS_TYPE_P (type_scope))
8662         continue;
8663
8664       if (uses_template_parms (type_decl))
8665         type_decl = tsubst (type_decl, targs, tf_error, NULL_TREE);
8666       if (uses_template_parms (type_scope))
8667         type_scope = tsubst (type_scope, targs, tf_error, NULL_TREE);
8668
8669       /* Make access check error messages point to the location
8670          of the use of the typedef.  */
8671       input_location = iter->locus;
8672       perform_or_defer_access_check (TYPE_BINFO (type_scope),
8673                                      type_decl, type_decl);
8674     }
8675     input_location = saved_location;
8676 }
8677
8678 static tree
8679 instantiate_class_template_1 (tree type)
8680 {
8681   tree templ, args, pattern, t, member;
8682   tree typedecl;
8683   tree pbinfo;
8684   tree base_list;
8685   unsigned int saved_maximum_field_alignment;
8686
8687   if (type == error_mark_node)
8688     return error_mark_node;
8689
8690   if (COMPLETE_OR_OPEN_TYPE_P (type)
8691       || uses_template_parms (type))
8692     return type;
8693
8694   /* Figure out which template is being instantiated.  */
8695   templ = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
8696   gcc_assert (TREE_CODE (templ) == TEMPLATE_DECL);
8697
8698   /* Determine what specialization of the original template to
8699      instantiate.  */
8700   t = most_specialized_class (type, templ, tf_warning_or_error);
8701   if (t == error_mark_node)
8702     {
8703       TYPE_BEING_DEFINED (type) = 1;
8704       return error_mark_node;
8705     }
8706   else if (t)
8707     {
8708       /* This TYPE is actually an instantiation of a partial
8709          specialization.  We replace the innermost set of ARGS with
8710          the arguments appropriate for substitution.  For example,
8711          given:
8712
8713            template <class T> struct S {};
8714            template <class T> struct S<T*> {};
8715
8716          and supposing that we are instantiating S<int*>, ARGS will
8717          presently be {int*} -- but we need {int}.  */
8718       pattern = TREE_TYPE (t);
8719       args = TREE_PURPOSE (t);
8720     }
8721   else
8722     {
8723       pattern = TREE_TYPE (templ);
8724       args = CLASSTYPE_TI_ARGS (type);
8725     }
8726
8727   /* If the template we're instantiating is incomplete, then clearly
8728      there's nothing we can do.  */
8729   if (!COMPLETE_TYPE_P (pattern))
8730     return type;
8731
8732   /* If we've recursively instantiated too many templates, stop.  */
8733   if (! push_tinst_level (type))
8734     return type;
8735
8736   /* Now we're really doing the instantiation.  Mark the type as in
8737      the process of being defined.  */
8738   TYPE_BEING_DEFINED (type) = 1;
8739
8740   /* We may be in the middle of deferred access check.  Disable
8741      it now.  */
8742   push_deferring_access_checks (dk_no_deferred);
8743
8744   push_to_top_level ();
8745   /* Use #pragma pack from the template context.  */
8746   saved_maximum_field_alignment = maximum_field_alignment;
8747   maximum_field_alignment = TYPE_PRECISION (pattern);
8748
8749   SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
8750
8751   /* Set the input location to the most specialized template definition.
8752      This is needed if tsubsting causes an error.  */
8753   typedecl = TYPE_MAIN_DECL (pattern);
8754   input_location = DECL_SOURCE_LOCATION (TYPE_NAME (type)) =
8755     DECL_SOURCE_LOCATION (typedecl);
8756
8757   TYPE_PACKED (type) = TYPE_PACKED (pattern);
8758   TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
8759   TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
8760   TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
8761   if (ANON_AGGR_TYPE_P (pattern))
8762     SET_ANON_AGGR_TYPE_P (type);
8763   if (CLASSTYPE_VISIBILITY_SPECIFIED (pattern))
8764     {
8765       CLASSTYPE_VISIBILITY_SPECIFIED (type) = 1;
8766       CLASSTYPE_VISIBILITY (type) = CLASSTYPE_VISIBILITY (pattern);
8767       /* Adjust visibility for template arguments.  */
8768       determine_visibility (TYPE_MAIN_DECL (type));
8769     }
8770   CLASSTYPE_FINAL (type) = CLASSTYPE_FINAL (pattern);
8771
8772   pbinfo = TYPE_BINFO (pattern);
8773
8774   /* We should never instantiate a nested class before its enclosing
8775      class; we need to look up the nested class by name before we can
8776      instantiate it, and that lookup should instantiate the enclosing
8777      class.  */
8778   gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
8779               || COMPLETE_OR_OPEN_TYPE_P (TYPE_CONTEXT (type)));
8780
8781   base_list = NULL_TREE;
8782   if (BINFO_N_BASE_BINFOS (pbinfo))
8783     {
8784       tree pbase_binfo;
8785       tree pushed_scope;
8786       int i;
8787
8788       /* We must enter the scope containing the type, as that is where
8789          the accessibility of types named in dependent bases are
8790          looked up from.  */
8791       pushed_scope = push_scope (CP_TYPE_CONTEXT (type));
8792
8793       /* Substitute into each of the bases to determine the actual
8794          basetypes.  */
8795       for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
8796         {
8797           tree base;
8798           tree access = BINFO_BASE_ACCESS (pbinfo, i);
8799           tree expanded_bases = NULL_TREE;
8800           int idx, len = 1;
8801
8802           if (PACK_EXPANSION_P (BINFO_TYPE (pbase_binfo)))
8803             {
8804               expanded_bases = 
8805                 tsubst_pack_expansion (BINFO_TYPE (pbase_binfo),
8806                                        args, tf_error, NULL_TREE);
8807               if (expanded_bases == error_mark_node)
8808                 continue;
8809
8810               len = TREE_VEC_LENGTH (expanded_bases);
8811             }
8812
8813           for (idx = 0; idx < len; idx++)
8814             {
8815               if (expanded_bases)
8816                 /* Extract the already-expanded base class.  */
8817                 base = TREE_VEC_ELT (expanded_bases, idx);
8818               else
8819                 /* Substitute to figure out the base class.  */
8820                 base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error, 
8821                                NULL_TREE);
8822
8823               if (base == error_mark_node)
8824                 continue;
8825
8826               base_list = tree_cons (access, base, base_list);
8827               if (BINFO_VIRTUAL_P (pbase_binfo))
8828                 TREE_TYPE (base_list) = integer_type_node;
8829             }
8830         }
8831
8832       /* The list is now in reverse order; correct that.  */
8833       base_list = nreverse (base_list);
8834
8835       if (pushed_scope)
8836         pop_scope (pushed_scope);
8837     }
8838   /* Now call xref_basetypes to set up all the base-class
8839      information.  */
8840   xref_basetypes (type, base_list);
8841
8842   apply_late_template_attributes (&type, TYPE_ATTRIBUTES (pattern),
8843                                   (int) ATTR_FLAG_TYPE_IN_PLACE,
8844                                   args, tf_error, NULL_TREE);
8845   fixup_attribute_variants (type);
8846
8847   /* Now that our base classes are set up, enter the scope of the
8848      class, so that name lookups into base classes, etc. will work
8849      correctly.  This is precisely analogous to what we do in
8850      begin_class_definition when defining an ordinary non-template
8851      class, except we also need to push the enclosing classes.  */
8852   push_nested_class (type);
8853
8854   /* Now members are processed in the order of declaration.  */
8855   for (member = CLASSTYPE_DECL_LIST (pattern);
8856        member; member = TREE_CHAIN (member))
8857     {
8858       tree t = TREE_VALUE (member);
8859
8860       if (TREE_PURPOSE (member))
8861         {
8862           if (TYPE_P (t))
8863             {
8864               /* Build new CLASSTYPE_NESTED_UTDS.  */
8865
8866               tree newtag;
8867               bool class_template_p;
8868
8869               class_template_p = (TREE_CODE (t) != ENUMERAL_TYPE
8870                                   && TYPE_LANG_SPECIFIC (t)
8871                                   && CLASSTYPE_IS_TEMPLATE (t));
8872               /* If the member is a class template, then -- even after
8873                  substitution -- there may be dependent types in the
8874                  template argument list for the class.  We increment
8875                  PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
8876                  that function will assume that no types are dependent
8877                  when outside of a template.  */
8878               if (class_template_p)
8879                 ++processing_template_decl;
8880               newtag = tsubst (t, args, tf_error, NULL_TREE);
8881               if (class_template_p)
8882                 --processing_template_decl;
8883               if (newtag == error_mark_node)
8884                 continue;
8885
8886               if (TREE_CODE (newtag) != ENUMERAL_TYPE)
8887                 {
8888                   tree name = TYPE_IDENTIFIER (t);
8889
8890                   if (class_template_p)
8891                     /* Unfortunately, lookup_template_class sets
8892                        CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
8893                        instantiation (i.e., for the type of a member
8894                        template class nested within a template class.)
8895                        This behavior is required for
8896                        maybe_process_partial_specialization to work
8897                        correctly, but is not accurate in this case;
8898                        the TAG is not an instantiation of anything.
8899                        (The corresponding TEMPLATE_DECL is an
8900                        instantiation, but the TYPE is not.) */
8901                     CLASSTYPE_USE_TEMPLATE (newtag) = 0;
8902
8903                   /* Now, we call pushtag to put this NEWTAG into the scope of
8904                      TYPE.  We first set up the IDENTIFIER_TYPE_VALUE to avoid
8905                      pushtag calling push_template_decl.  We don't have to do
8906                      this for enums because it will already have been done in
8907                      tsubst_enum.  */
8908                   if (name)
8909                     SET_IDENTIFIER_TYPE_VALUE (name, newtag);
8910                   pushtag (name, newtag, /*tag_scope=*/ts_current);
8911                 }
8912             }
8913           else if (TREE_CODE (t) == FUNCTION_DECL
8914                    || DECL_FUNCTION_TEMPLATE_P (t))
8915             {
8916               /* Build new TYPE_METHODS.  */
8917               tree r;
8918
8919               if (TREE_CODE (t) == TEMPLATE_DECL)
8920                 ++processing_template_decl;
8921               r = tsubst (t, args, tf_error, NULL_TREE);
8922               if (TREE_CODE (t) == TEMPLATE_DECL)
8923                 --processing_template_decl;
8924               set_current_access_from_decl (r);
8925               finish_member_declaration (r);
8926               /* Instantiate members marked with attribute used.  */
8927               if (r != error_mark_node && DECL_PRESERVE_P (r))
8928                 mark_used (r);
8929             }
8930           else
8931             {
8932               /* Build new TYPE_FIELDS.  */
8933               if (TREE_CODE (t) == STATIC_ASSERT)
8934                 {
8935                   tree condition = 
8936                     tsubst_expr (STATIC_ASSERT_CONDITION (t), args, 
8937                                  tf_warning_or_error, NULL_TREE,
8938                                  /*integral_constant_expression_p=*/true);
8939                   finish_static_assert (condition,
8940                                         STATIC_ASSERT_MESSAGE (t), 
8941                                         STATIC_ASSERT_SOURCE_LOCATION (t),
8942                                         /*member_p=*/true);
8943                 }
8944               else if (TREE_CODE (t) != CONST_DECL)
8945                 {
8946                   tree r;
8947
8948                   /* The file and line for this declaration, to
8949                      assist in error message reporting.  Since we
8950                      called push_tinst_level above, we don't need to
8951                      restore these.  */
8952                   input_location = DECL_SOURCE_LOCATION (t);
8953
8954                   if (TREE_CODE (t) == TEMPLATE_DECL)
8955                     ++processing_template_decl;
8956                   r = tsubst (t, args, tf_warning_or_error, NULL_TREE);
8957                   if (TREE_CODE (t) == TEMPLATE_DECL)
8958                     --processing_template_decl;
8959                   if (TREE_CODE (r) == VAR_DECL)
8960                     {
8961                       /* In [temp.inst]:
8962
8963                            [t]he initialization (and any associated
8964                            side-effects) of a static data member does
8965                            not occur unless the static data member is
8966                            itself used in a way that requires the
8967                            definition of the static data member to
8968                            exist.
8969
8970                          Therefore, we do not substitute into the
8971                          initialized for the static data member here.  */
8972                       finish_static_data_member_decl
8973                         (r,
8974                          /*init=*/NULL_TREE,
8975                          /*init_const_expr_p=*/false,
8976                          /*asmspec_tree=*/NULL_TREE,
8977                          /*flags=*/0);
8978                       /* Instantiate members marked with attribute used.  */
8979                       if (r != error_mark_node && DECL_PRESERVE_P (r))
8980                         mark_used (r);
8981                     }
8982                   else if (TREE_CODE (r) == FIELD_DECL)
8983                     {
8984                       /* Determine whether R has a valid type and can be
8985                          completed later.  If R is invalid, then it is
8986                          replaced by error_mark_node so that it will not be
8987                          added to TYPE_FIELDS.  */
8988                       tree rtype = TREE_TYPE (r);
8989                       if (can_complete_type_without_circularity (rtype))
8990                         complete_type (rtype);
8991
8992                       if (!COMPLETE_TYPE_P (rtype))
8993                         {
8994                           cxx_incomplete_type_error (r, rtype);
8995                           r = error_mark_node;
8996                         }
8997                     }
8998
8999                   /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
9000                      such a thing will already have been added to the field
9001                      list by tsubst_enum in finish_member_declaration in the
9002                      CLASSTYPE_NESTED_UTDS case above.  */
9003                   if (!(TREE_CODE (r) == TYPE_DECL
9004                         && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
9005                         && DECL_ARTIFICIAL (r)))
9006                     {
9007                       set_current_access_from_decl (r);
9008                       finish_member_declaration (r);
9009                     }
9010                 }
9011             }
9012         }
9013       else
9014         {
9015           if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t))
9016             {
9017               /* Build new CLASSTYPE_FRIEND_CLASSES.  */
9018
9019               tree friend_type = t;
9020               bool adjust_processing_template_decl = false;
9021
9022               if (TREE_CODE (friend_type) == TEMPLATE_DECL)
9023                 {
9024                   /* template <class T> friend class C;  */
9025                   friend_type = tsubst_friend_class (friend_type, args);
9026                   adjust_processing_template_decl = true;
9027                 }
9028               else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
9029                 {
9030                   /* template <class T> friend class C::D;  */
9031                   friend_type = tsubst (friend_type, args,
9032                                         tf_warning_or_error, NULL_TREE);
9033                   if (TREE_CODE (friend_type) == TEMPLATE_DECL)
9034                     friend_type = TREE_TYPE (friend_type);
9035                   adjust_processing_template_decl = true;
9036                 }
9037               else if (TREE_CODE (friend_type) == TYPENAME_TYPE
9038                        || TREE_CODE (friend_type) == TEMPLATE_TYPE_PARM)
9039                 {
9040                   /* This could be either
9041
9042                        friend class T::C;
9043
9044                      when dependent_type_p is false or
9045
9046                        template <class U> friend class T::C;
9047
9048                      otherwise.  */
9049                   friend_type = tsubst (friend_type, args,
9050                                         tf_warning_or_error, NULL_TREE);
9051                   /* Bump processing_template_decl for correct
9052                      dependent_type_p calculation.  */
9053                   ++processing_template_decl;
9054                   if (dependent_type_p (friend_type))
9055                     adjust_processing_template_decl = true;
9056                   --processing_template_decl;
9057                 }
9058               else if (!CLASSTYPE_USE_TEMPLATE (friend_type)
9059                        && hidden_name_p (TYPE_NAME (friend_type)))
9060                 {
9061                   /* friend class C;
9062
9063                      where C hasn't been declared yet.  Let's lookup name
9064                      from namespace scope directly, bypassing any name that
9065                      come from dependent base class.  */
9066                   tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
9067
9068                   /* The call to xref_tag_from_type does injection for friend
9069                      classes.  */
9070                   push_nested_namespace (ns);
9071                   friend_type =
9072                     xref_tag_from_type (friend_type, NULL_TREE,
9073                                         /*tag_scope=*/ts_current);
9074                   pop_nested_namespace (ns);
9075                 }
9076               else if (uses_template_parms (friend_type))
9077                 /* friend class C<T>;  */
9078                 friend_type = tsubst (friend_type, args,
9079                                       tf_warning_or_error, NULL_TREE);
9080               /* Otherwise it's
9081
9082                    friend class C;
9083
9084                  where C is already declared or
9085
9086                    friend class C<int>;
9087
9088                  We don't have to do anything in these cases.  */
9089
9090               if (adjust_processing_template_decl)
9091                 /* Trick make_friend_class into realizing that the friend
9092                    we're adding is a template, not an ordinary class.  It's
9093                    important that we use make_friend_class since it will
9094                    perform some error-checking and output cross-reference
9095                    information.  */
9096                 ++processing_template_decl;
9097
9098               if (friend_type != error_mark_node)
9099                 make_friend_class (type, friend_type, /*complain=*/false);
9100
9101               if (adjust_processing_template_decl)
9102                 --processing_template_decl;
9103             }
9104           else
9105             {
9106               /* Build new DECL_FRIENDLIST.  */
9107               tree r;
9108
9109               /* The file and line for this declaration, to
9110                  assist in error message reporting.  Since we
9111                  called push_tinst_level above, we don't need to
9112                  restore these.  */
9113               input_location = DECL_SOURCE_LOCATION (t);
9114
9115               if (TREE_CODE (t) == TEMPLATE_DECL)
9116                 {
9117                   ++processing_template_decl;
9118                   push_deferring_access_checks (dk_no_check);
9119                 }
9120
9121               r = tsubst_friend_function (t, args);
9122               add_friend (type, r, /*complain=*/false);
9123               if (TREE_CODE (t) == TEMPLATE_DECL)
9124                 {
9125                   pop_deferring_access_checks ();
9126                   --processing_template_decl;
9127                 }
9128             }
9129         }
9130     }
9131
9132   if (CLASSTYPE_LAMBDA_EXPR (type))
9133     {
9134       tree decl = lambda_function (type);
9135       if (decl)
9136         {
9137           tree lambda = CLASSTYPE_LAMBDA_EXPR (type);
9138           if (LAMBDA_EXPR_DEDUCE_RETURN_TYPE_P (lambda))
9139             {
9140               apply_lambda_return_type (lambda, void_type_node);
9141               LAMBDA_EXPR_RETURN_TYPE (lambda) = NULL_TREE;
9142             }
9143           instantiate_decl (decl, false, false);
9144           maybe_add_lambda_conv_op (type);
9145         }
9146       else
9147         gcc_assert (errorcount);
9148     }
9149
9150   /* Set the file and line number information to whatever is given for
9151      the class itself.  This puts error messages involving generated
9152      implicit functions at a predictable point, and the same point
9153      that would be used for non-template classes.  */
9154   input_location = DECL_SOURCE_LOCATION (typedecl);
9155
9156   unreverse_member_declarations (type);
9157   finish_struct_1 (type);
9158   TYPE_BEING_DEFINED (type) = 0;
9159
9160   /* We don't instantiate default arguments for member functions.  14.7.1:
9161
9162      The implicit instantiation of a class template specialization causes
9163      the implicit instantiation of the declarations, but not of the
9164      definitions or default arguments, of the class member functions,
9165      member classes, static data members and member templates....  */
9166
9167   /* Some typedefs referenced from within the template code need to be access
9168      checked at template instantiation time, i.e now. These types were
9169      added to the template at parsing time. Let's get those and perform
9170      the access checks then.  */
9171   perform_typedefs_access_check (pattern, args);
9172   perform_deferred_access_checks ();
9173   pop_nested_class ();
9174   maximum_field_alignment = saved_maximum_field_alignment;
9175   pop_from_top_level ();
9176   pop_deferring_access_checks ();
9177   pop_tinst_level ();
9178
9179   /* The vtable for a template class can be emitted in any translation
9180      unit in which the class is instantiated.  When there is no key
9181      method, however, finish_struct_1 will already have added TYPE to
9182      the keyed_classes list.  */
9183   if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
9184     keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
9185
9186   return type;
9187 }
9188
9189 /* Wrapper for instantiate_class_template_1.  */
9190
9191 tree
9192 instantiate_class_template (tree type)
9193 {
9194   tree ret;
9195   timevar_push (TV_TEMPLATE_INST);
9196   ret = instantiate_class_template_1 (type);
9197   timevar_pop (TV_TEMPLATE_INST);
9198   return ret;
9199 }
9200
9201 static tree
9202 tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
9203 {
9204   tree r;
9205
9206   if (!t)
9207     r = t;
9208   else if (TYPE_P (t))
9209     r = tsubst (t, args, complain, in_decl);
9210   else
9211     {
9212       if (!(complain & tf_warning))
9213         ++c_inhibit_evaluation_warnings;
9214       r = tsubst_expr (t, args, complain, in_decl,
9215                        /*integral_constant_expression_p=*/true);
9216       if (!(complain & tf_warning))
9217         --c_inhibit_evaluation_warnings;
9218       /* Preserve the raw-reference nature of T.  */
9219       if (TREE_TYPE (t) && TREE_CODE (TREE_TYPE (t)) == REFERENCE_TYPE
9220           && REFERENCE_REF_P (r))
9221         r = TREE_OPERAND (r, 0);
9222     }
9223   return r;
9224 }
9225
9226 /* Given a function parameter pack TMPL_PARM and some function parameters
9227    instantiated from it at *SPEC_P, return a NONTYPE_ARGUMENT_PACK of them
9228    and set *SPEC_P to point at the next point in the list.  */
9229
9230 static tree
9231 extract_fnparm_pack (tree tmpl_parm, tree *spec_p)
9232 {
9233   /* Collect all of the extra "packed" parameters into an
9234      argument pack.  */
9235   tree parmvec;
9236   tree parmtypevec;
9237   tree argpack = make_node (NONTYPE_ARGUMENT_PACK);
9238   tree argtypepack = cxx_make_type (TYPE_ARGUMENT_PACK);
9239   tree spec_parm = *spec_p;
9240   int i, len;
9241
9242   for (len = 0; spec_parm; ++len, spec_parm = TREE_CHAIN (spec_parm))
9243     if (tmpl_parm
9244         && !function_parameter_expanded_from_pack_p (spec_parm, tmpl_parm))
9245       break;
9246
9247   /* Fill in PARMVEC and PARMTYPEVEC with all of the parameters.  */
9248   parmvec = make_tree_vec (len);
9249   parmtypevec = make_tree_vec (len);
9250   spec_parm = *spec_p;
9251   for (i = 0; i < len; i++, spec_parm = DECL_CHAIN (spec_parm))
9252     {
9253       TREE_VEC_ELT (parmvec, i) = spec_parm;
9254       TREE_VEC_ELT (parmtypevec, i) = TREE_TYPE (spec_parm);
9255     }
9256
9257   /* Build the argument packs.  */
9258   SET_ARGUMENT_PACK_ARGS (argpack, parmvec);
9259   SET_ARGUMENT_PACK_ARGS (argtypepack, parmtypevec);
9260   TREE_TYPE (argpack) = argtypepack;
9261   *spec_p = spec_parm;
9262
9263   return argpack;
9264 }
9265
9266 /* Give a chain SPEC_PARM of PARM_DECLs, pack them into a
9267    NONTYPE_ARGUMENT_PACK.  */
9268
9269 static tree
9270 make_fnparm_pack (tree spec_parm)
9271 {
9272   return extract_fnparm_pack (NULL_TREE, &spec_parm);
9273 }
9274
9275 /* Substitute ARGS into T, which is an pack expansion
9276    (i.e. TYPE_PACK_EXPANSION or EXPR_PACK_EXPANSION). Returns a
9277    TREE_VEC with the substituted arguments, a PACK_EXPANSION_* node
9278    (if only a partial substitution could be performed) or
9279    ERROR_MARK_NODE if there was an error.  */
9280 tree
9281 tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
9282                        tree in_decl)
9283 {
9284   tree pattern;
9285   tree pack, packs = NULL_TREE;
9286   bool unsubstituted_packs = false;
9287   bool real_packs = false;
9288   int missing_level = 0;
9289   int i, len = -1;
9290   tree result;
9291   htab_t saved_local_specializations = NULL;
9292   int levels;
9293
9294   gcc_assert (PACK_EXPANSION_P (t));
9295   pattern = PACK_EXPANSION_PATTERN (t);
9296
9297   /* Add in any args remembered from an earlier partial instantiation.  */
9298   args = add_to_template_args (PACK_EXPANSION_EXTRA_ARGS (t), args);
9299
9300   levels = TMPL_ARGS_DEPTH (args);
9301
9302   /* Determine the argument packs that will instantiate the parameter
9303      packs used in the expansion expression. While we're at it,
9304      compute the number of arguments to be expanded and make sure it
9305      is consistent.  */
9306   for (pack = PACK_EXPANSION_PARAMETER_PACKS (t); pack; 
9307        pack = TREE_CHAIN (pack))
9308     {
9309       tree parm_pack = TREE_VALUE (pack);
9310       tree arg_pack = NULL_TREE;
9311       tree orig_arg = NULL_TREE;
9312       int level = 0;
9313
9314       if (TREE_CODE (parm_pack) == BASES)
9315        {
9316          if (BASES_DIRECT (parm_pack))
9317            return calculate_direct_bases (tsubst_expr (BASES_TYPE (parm_pack),
9318                                                         args, complain, in_decl, false));
9319          else
9320            return calculate_bases (tsubst_expr (BASES_TYPE (parm_pack),
9321                                                  args, complain, in_decl, false));
9322        }
9323       if (TREE_CODE (parm_pack) == PARM_DECL)
9324         {
9325           if (!cp_unevaluated_operand)
9326             arg_pack = retrieve_local_specialization (parm_pack);
9327           else
9328             {
9329               /* We can't rely on local_specializations for a parameter
9330                  name used later in a function declaration (such as in a
9331                  late-specified return type).  Even if it exists, it might
9332                  have the wrong value for a recursive call.  Just make a
9333                  dummy decl, since it's only used for its type.  */
9334               arg_pack = tsubst_decl (parm_pack, args, complain);
9335               if (arg_pack && FUNCTION_PARAMETER_PACK_P (arg_pack))
9336                 /* Partial instantiation of the parm_pack, we can't build
9337                    up an argument pack yet.  */
9338                 arg_pack = NULL_TREE;
9339               else
9340                 arg_pack = make_fnparm_pack (arg_pack);
9341             }
9342         }
9343       else
9344         {
9345           int idx;
9346           template_parm_level_and_index (parm_pack, &level, &idx);
9347
9348           if (level <= levels)
9349             arg_pack = TMPL_ARG (args, level, idx);
9350         }
9351
9352       orig_arg = arg_pack;
9353       if (arg_pack && TREE_CODE (arg_pack) == ARGUMENT_PACK_SELECT)
9354         arg_pack = ARGUMENT_PACK_SELECT_FROM_PACK (arg_pack);
9355       
9356       if (arg_pack && !ARGUMENT_PACK_P (arg_pack))
9357         /* This can only happen if we forget to expand an argument
9358            pack somewhere else. Just return an error, silently.  */
9359         {
9360           result = make_tree_vec (1);
9361           TREE_VEC_ELT (result, 0) = error_mark_node;
9362           return result;
9363         }
9364
9365       if (arg_from_parm_pack_p (arg_pack, parm_pack))
9366         /* The argument pack that the parameter maps to is just an
9367            expansion of the parameter itself, such as one would find
9368            in the implicit typedef of a class inside the class itself.
9369            Consider this parameter "unsubstituted", so that we will
9370            maintain the outer pack expansion.  */
9371         arg_pack = NULL_TREE;
9372           
9373       if (arg_pack)
9374         {
9375           int my_len = 
9376             TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack));
9377
9378           /* Don't bother trying to do a partial substitution with
9379              incomplete packs; we'll try again after deduction.  */
9380           if (ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
9381             return t;
9382
9383           if (len < 0)
9384             len = my_len;
9385           else if (len != my_len)
9386             {
9387               if (!(complain & tf_error))
9388                 /* Fail quietly.  */;
9389               else if (TREE_CODE (t) == TYPE_PACK_EXPANSION)
9390                 error ("mismatched argument pack lengths while expanding "
9391                        "%<%T%>",
9392                        pattern);
9393               else
9394                 error ("mismatched argument pack lengths while expanding "
9395                        "%<%E%>",
9396                        pattern);
9397               return error_mark_node;
9398             }
9399
9400           if (TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack)) == 1
9401               && PACK_EXPANSION_P (TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack),
9402                                                  0)))
9403             /* This isn't a real argument pack yet.  */;
9404           else
9405             real_packs = true;
9406
9407           /* Keep track of the parameter packs and their corresponding
9408              argument packs.  */
9409           packs = tree_cons (parm_pack, arg_pack, packs);
9410           TREE_TYPE (packs) = orig_arg;
9411         }
9412       else
9413         {
9414           /* We can't substitute for this parameter pack.  We use a flag as
9415              well as the missing_level counter because function parameter
9416              packs don't have a level.  */
9417           unsubstituted_packs = true;
9418           if (!missing_level || missing_level > level)
9419             missing_level = level;
9420         }
9421     }
9422
9423   /* We cannot expand this expansion expression, because we don't have
9424      all of the argument packs we need.  */
9425   if (unsubstituted_packs)
9426     {
9427       if (real_packs)
9428         {
9429           /* We got some full packs, but we can't substitute them in until we
9430              have values for all the packs.  So remember these until then.  */
9431           tree save_args;
9432
9433           t = make_pack_expansion (pattern);
9434
9435           /* The call to add_to_template_args above assumes no overlap
9436              between saved args and new args, so prune away any fake
9437              args, i.e. those that satisfied arg_from_parm_pack_p above.  */
9438           if (missing_level && levels >= missing_level)
9439             {
9440               gcc_assert (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args)
9441                           && missing_level > 1);
9442               TREE_VEC_LENGTH (args) = missing_level - 1;
9443               save_args = copy_node (args);
9444               TREE_VEC_LENGTH (args) = levels;
9445             }
9446           else
9447             save_args = args;
9448
9449           PACK_EXPANSION_EXTRA_ARGS (t) = save_args;
9450         }
9451       else
9452         {
9453           /* There were no real arguments, we're just replacing a parameter
9454              pack with another version of itself. Substitute into the
9455              pattern and return a PACK_EXPANSION_*. The caller will need to
9456              deal with that.  */
9457           if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
9458             t = tsubst_expr (pattern, args, complain, in_decl,
9459                              /*integral_constant_expression_p=*/false);
9460           else
9461             t = tsubst (pattern, args, complain, in_decl);
9462           t = make_pack_expansion (t);
9463         }
9464       return t;
9465     }
9466
9467   /* We could not find any argument packs that work.  */
9468   if (len < 0)
9469     return error_mark_node;
9470
9471   if (cp_unevaluated_operand)
9472     {
9473       /* We're in a late-specified return type, so create our own local
9474          specializations table; the current table is either NULL or (in the
9475          case of recursive unification) might have bindings that we don't
9476          want to use or alter.  */
9477       saved_local_specializations = local_specializations;
9478       local_specializations = htab_create (37,
9479                                            hash_local_specialization,
9480                                            eq_local_specializations,
9481                                            NULL);
9482     }
9483
9484   /* For each argument in each argument pack, substitute into the
9485      pattern.  */
9486   result = make_tree_vec (len);
9487   for (i = 0; i < len; ++i)
9488     {
9489       /* For parameter pack, change the substitution of the parameter
9490          pack to the ith argument in its argument pack, then expand
9491          the pattern.  */
9492       for (pack = packs; pack; pack = TREE_CHAIN (pack))
9493         {
9494           tree parm = TREE_PURPOSE (pack);
9495           tree arg;
9496
9497           /* Select the Ith argument from the pack.  */
9498           if (TREE_CODE (parm) == PARM_DECL)
9499             {
9500               if (i == 0)
9501                 {
9502                   arg = make_node (ARGUMENT_PACK_SELECT);
9503                   ARGUMENT_PACK_SELECT_FROM_PACK (arg) = TREE_VALUE (pack);
9504                   mark_used (parm);
9505                   register_local_specialization (arg, parm);
9506                 }
9507               else
9508                 arg = retrieve_local_specialization (parm);
9509             }
9510           else
9511             {
9512               int idx, level;
9513               template_parm_level_and_index (parm, &level, &idx);
9514
9515               if (i == 0)
9516                 {
9517                   arg = make_node (ARGUMENT_PACK_SELECT);
9518                   ARGUMENT_PACK_SELECT_FROM_PACK (arg) = TREE_VALUE (pack);
9519                   /* Update the corresponding argument.  */
9520                   TMPL_ARG (args, level, idx) = arg;
9521                 }
9522               else
9523                 /* Re-use the ARGUMENT_PACK_SELECT.  */
9524                 arg = TMPL_ARG (args, level, idx);
9525             }
9526           ARGUMENT_PACK_SELECT_INDEX (arg) = i;
9527         }
9528
9529       /* Substitute into the PATTERN with the altered arguments.  */
9530       if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
9531         TREE_VEC_ELT (result, i) = 
9532           tsubst_expr (pattern, args, complain, in_decl,
9533                        /*integral_constant_expression_p=*/false);
9534       else
9535         TREE_VEC_ELT (result, i) = tsubst (pattern, args, complain, in_decl);
9536
9537       if (TREE_VEC_ELT (result, i) == error_mark_node)
9538         {
9539           result = error_mark_node;
9540           break;
9541         }
9542     }
9543
9544   /* Update ARGS to restore the substitution from parameter packs to
9545      their argument packs.  */
9546   for (pack = packs; pack; pack = TREE_CHAIN (pack))
9547     {
9548       tree parm = TREE_PURPOSE (pack);
9549
9550       if (TREE_CODE (parm) == PARM_DECL)
9551         register_local_specialization (TREE_TYPE (pack), parm);
9552       else
9553         {
9554           int idx, level;
9555           template_parm_level_and_index (parm, &level, &idx);
9556           
9557           /* Update the corresponding argument.  */
9558           if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
9559             TREE_VEC_ELT (TREE_VEC_ELT (args, level -1 ), idx) =
9560               TREE_TYPE (pack);
9561           else
9562             TREE_VEC_ELT (args, idx) = TREE_TYPE (pack);
9563         }
9564     }
9565
9566   if (saved_local_specializations)
9567     {
9568       htab_delete (local_specializations);
9569       local_specializations = saved_local_specializations;
9570     }
9571   
9572   return result;
9573 }
9574
9575 /* Given PARM_DECL PARM, find the corresponding PARM_DECL in the template
9576    TMPL.  We do this using DECL_PARM_INDEX, which should work even with
9577    parameter packs; all parms generated from a function parameter pack will
9578    have the same DECL_PARM_INDEX.  */
9579
9580 tree
9581 get_pattern_parm (tree parm, tree tmpl)
9582 {
9583   tree pattern = DECL_TEMPLATE_RESULT (tmpl);
9584   tree patparm;
9585
9586   if (DECL_ARTIFICIAL (parm))
9587     {
9588       for (patparm = DECL_ARGUMENTS (pattern);
9589            patparm; patparm = DECL_CHAIN (patparm))
9590         if (DECL_ARTIFICIAL (patparm)
9591             && DECL_NAME (parm) == DECL_NAME (patparm))
9592           break;
9593     }
9594   else
9595     {
9596       patparm = FUNCTION_FIRST_USER_PARM (DECL_TEMPLATE_RESULT (tmpl));
9597       patparm = chain_index (DECL_PARM_INDEX (parm)-1, patparm);
9598       gcc_assert (DECL_PARM_INDEX (patparm)
9599                   == DECL_PARM_INDEX (parm));
9600     }
9601
9602   return patparm;
9603 }
9604
9605 /* Substitute ARGS into the vector or list of template arguments T.  */
9606
9607 static tree
9608 tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
9609 {
9610   tree orig_t = t;
9611   int len, need_new = 0, i, expanded_len_adjust = 0, out;
9612   tree *elts;
9613
9614   if (t == error_mark_node)
9615     return error_mark_node;
9616
9617   len = TREE_VEC_LENGTH (t);
9618   elts = XALLOCAVEC (tree, len);
9619
9620   for (i = 0; i < len; i++)
9621     {
9622       tree orig_arg = TREE_VEC_ELT (t, i);
9623       tree new_arg;
9624
9625       if (TREE_CODE (orig_arg) == TREE_VEC)
9626         new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
9627       else if (PACK_EXPANSION_P (orig_arg))
9628         {
9629           /* Substitute into an expansion expression.  */
9630           new_arg = tsubst_pack_expansion (orig_arg, args, complain, in_decl);
9631
9632           if (TREE_CODE (new_arg) == TREE_VEC)
9633             /* Add to the expanded length adjustment the number of
9634                expanded arguments. We subtract one from this
9635                measurement, because the argument pack expression
9636                itself is already counted as 1 in
9637                LEN. EXPANDED_LEN_ADJUST can actually be negative, if
9638                the argument pack is empty.  */
9639             expanded_len_adjust += TREE_VEC_LENGTH (new_arg) - 1;
9640         }
9641       else if (ARGUMENT_PACK_P (orig_arg))
9642         {
9643           /* Substitute into each of the arguments.  */
9644           new_arg = TYPE_P (orig_arg)
9645             ? cxx_make_type (TREE_CODE (orig_arg))
9646             : make_node (TREE_CODE (orig_arg));
9647           
9648           SET_ARGUMENT_PACK_ARGS (
9649             new_arg,
9650             tsubst_template_args (ARGUMENT_PACK_ARGS (orig_arg),
9651                                   args, complain, in_decl));
9652
9653           if (ARGUMENT_PACK_ARGS (new_arg) == error_mark_node)
9654             new_arg = error_mark_node;
9655
9656           if (TREE_CODE (new_arg) == NONTYPE_ARGUMENT_PACK) {
9657             TREE_TYPE (new_arg) = tsubst (TREE_TYPE (orig_arg), args,
9658                                           complain, in_decl);
9659             TREE_CONSTANT (new_arg) = TREE_CONSTANT (orig_arg);
9660
9661             if (TREE_TYPE (new_arg) == error_mark_node)
9662               new_arg = error_mark_node;
9663           }
9664         }
9665       else
9666         new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
9667
9668       if (new_arg == error_mark_node)
9669         return error_mark_node;
9670
9671       elts[i] = new_arg;
9672       if (new_arg != orig_arg)
9673         need_new = 1;
9674     }
9675
9676   if (!need_new)
9677     return t;
9678
9679   /* Make space for the expanded arguments coming from template
9680      argument packs.  */
9681   t = make_tree_vec (len + expanded_len_adjust);
9682   /* ORIG_T can contain TREE_VECs. That happens if ORIG_T contains the
9683      arguments for a member template.
9684      In that case each TREE_VEC in ORIG_T represents a level of template
9685      arguments, and ORIG_T won't carry any non defaulted argument count.
9686      It will rather be the nested TREE_VECs that will carry one.
9687      In other words, ORIG_T carries a non defaulted argument count only
9688      if it doesn't contain any nested TREE_VEC.  */
9689   if (NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t))
9690     {
9691       int count = GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t);
9692       count += expanded_len_adjust;
9693       SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (t, count);
9694     }
9695   for (i = 0, out = 0; i < len; i++)
9696     {
9697       if ((PACK_EXPANSION_P (TREE_VEC_ELT (orig_t, i))
9698            || ARGUMENT_PACK_P (TREE_VEC_ELT (orig_t, i)))
9699           && TREE_CODE (elts[i]) == TREE_VEC)
9700         {
9701           int idx;
9702
9703           /* Now expand the template argument pack "in place".  */
9704           for (idx = 0; idx < TREE_VEC_LENGTH (elts[i]); idx++, out++)
9705             TREE_VEC_ELT (t, out) = TREE_VEC_ELT (elts[i], idx);
9706         }
9707       else
9708         {
9709           TREE_VEC_ELT (t, out) = elts[i];
9710           out++;
9711         }
9712     }
9713
9714   return t;
9715 }
9716
9717 /* Return the result of substituting ARGS into the template parameters
9718    given by PARMS.  If there are m levels of ARGS and m + n levels of
9719    PARMS, then the result will contain n levels of PARMS.  For
9720    example, if PARMS is `template <class T> template <class U>
9721    template <T*, U, class V>' and ARGS is {{int}, {double}} then the
9722    result will be `template <int*, double, class V>'.  */
9723
9724 static tree
9725 tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
9726 {
9727   tree r = NULL_TREE;
9728   tree* new_parms;
9729
9730   /* When substituting into a template, we must set
9731      PROCESSING_TEMPLATE_DECL as the template parameters may be
9732      dependent if they are based on one-another, and the dependency
9733      predicates are short-circuit outside of templates.  */
9734   ++processing_template_decl;
9735
9736   for (new_parms = &r;
9737        TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
9738        new_parms = &(TREE_CHAIN (*new_parms)),
9739          parms = TREE_CHAIN (parms))
9740     {
9741       tree new_vec =
9742         make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
9743       int i;
9744
9745       for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
9746         {
9747           tree tuple;
9748
9749           if (parms == error_mark_node)
9750             continue;
9751
9752           tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
9753
9754           if (tuple == error_mark_node)
9755             continue;
9756
9757           TREE_VEC_ELT (new_vec, i) =
9758             tsubst_template_parm (tuple, args, complain);
9759         }
9760
9761       *new_parms =
9762         tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
9763                              - TMPL_ARGS_DEPTH (args)),
9764                    new_vec, NULL_TREE);
9765     }
9766
9767   --processing_template_decl;
9768
9769   return r;
9770 }
9771
9772 /* Return the result of substituting ARGS into one template parameter
9773    given by T. T Must be a TREE_LIST which TREE_VALUE is the template
9774    parameter and which TREE_PURPOSE is the default argument of the
9775    template parameter.  */
9776
9777 static tree
9778 tsubst_template_parm (tree t, tree args, tsubst_flags_t complain)
9779 {
9780   tree default_value, parm_decl;
9781
9782   if (args == NULL_TREE
9783       || t == NULL_TREE
9784       || t == error_mark_node)
9785     return t;
9786
9787   gcc_assert (TREE_CODE (t) == TREE_LIST);
9788
9789   default_value = TREE_PURPOSE (t);
9790   parm_decl = TREE_VALUE (t);
9791
9792   parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
9793   if (TREE_CODE (parm_decl) == PARM_DECL
9794       && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl), complain))
9795     parm_decl = error_mark_node;
9796   default_value = tsubst_template_arg (default_value, args,
9797                                        complain, NULL_TREE);
9798
9799   return build_tree_list (default_value, parm_decl);
9800 }
9801
9802 /* Substitute the ARGS into the indicated aggregate (or enumeration)
9803    type T.  If T is not an aggregate or enumeration type, it is
9804    handled as if by tsubst.  IN_DECL is as for tsubst.  If
9805    ENTERING_SCOPE is nonzero, T is the context for a template which
9806    we are presently tsubst'ing.  Return the substituted value.  */
9807
9808 static tree
9809 tsubst_aggr_type (tree t,
9810                   tree args,
9811                   tsubst_flags_t complain,
9812                   tree in_decl,
9813                   int entering_scope)
9814 {
9815   if (t == NULL_TREE)
9816     return NULL_TREE;
9817
9818   switch (TREE_CODE (t))
9819     {
9820     case RECORD_TYPE:
9821       if (TYPE_PTRMEMFUNC_P (t))
9822         return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
9823
9824       /* Else fall through.  */
9825     case ENUMERAL_TYPE:
9826     case UNION_TYPE:
9827       if (TYPE_TEMPLATE_INFO (t) && uses_template_parms (t))
9828         {
9829           tree argvec;
9830           tree context;
9831           tree r;
9832           int saved_unevaluated_operand;
9833           int saved_inhibit_evaluation_warnings;
9834
9835           /* In "sizeof(X<I>)" we need to evaluate "I".  */
9836           saved_unevaluated_operand = cp_unevaluated_operand;
9837           cp_unevaluated_operand = 0;
9838           saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
9839           c_inhibit_evaluation_warnings = 0;
9840
9841           /* First, determine the context for the type we are looking
9842              up.  */
9843           context = TYPE_CONTEXT (t);
9844           if (context && TYPE_P (context))
9845             {
9846               context = tsubst_aggr_type (context, args, complain,
9847                                           in_decl, /*entering_scope=*/1);
9848               /* If context is a nested class inside a class template,
9849                  it may still need to be instantiated (c++/33959).  */
9850               context = complete_type (context);
9851             }
9852
9853           /* Then, figure out what arguments are appropriate for the
9854              type we are trying to find.  For example, given:
9855
9856                template <class T> struct S;
9857                template <class T, class U> void f(T, U) { S<U> su; }
9858
9859              and supposing that we are instantiating f<int, double>,
9860              then our ARGS will be {int, double}, but, when looking up
9861              S we only want {double}.  */
9862           argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
9863                                          complain, in_decl);
9864           if (argvec == error_mark_node)
9865             r = error_mark_node;
9866           else
9867             {
9868               r = lookup_template_class (t, argvec, in_decl, context,
9869                                          entering_scope, complain);
9870               r = cp_build_qualified_type_real (r, cp_type_quals (t), complain);
9871             }
9872
9873           cp_unevaluated_operand = saved_unevaluated_operand;
9874           c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
9875
9876           return r;
9877         }
9878       else
9879         /* This is not a template type, so there's nothing to do.  */
9880         return t;
9881
9882     default:
9883       return tsubst (t, args, complain, in_decl);
9884     }
9885 }
9886
9887 /* Substitute into the default argument ARG (a default argument for
9888    FN), which has the indicated TYPE.  */
9889
9890 tree
9891 tsubst_default_argument (tree fn, tree type, tree arg)
9892 {
9893   tree saved_class_ptr = NULL_TREE;
9894   tree saved_class_ref = NULL_TREE;
9895
9896   /* This can happen in invalid code.  */
9897   if (TREE_CODE (arg) == DEFAULT_ARG)
9898     return arg;
9899
9900   /* This default argument came from a template.  Instantiate the
9901      default argument here, not in tsubst.  In the case of
9902      something like:
9903
9904        template <class T>
9905        struct S {
9906          static T t();
9907          void f(T = t());
9908        };
9909
9910      we must be careful to do name lookup in the scope of S<T>,
9911      rather than in the current class.  */
9912   push_access_scope (fn);
9913   /* The "this" pointer is not valid in a default argument.  */
9914   if (cfun)
9915     {
9916       saved_class_ptr = current_class_ptr;
9917       cp_function_chain->x_current_class_ptr = NULL_TREE;
9918       saved_class_ref = current_class_ref;
9919       cp_function_chain->x_current_class_ref = NULL_TREE;
9920     }
9921
9922   push_deferring_access_checks(dk_no_deferred);
9923   /* The default argument expression may cause implicitly defined
9924      member functions to be synthesized, which will result in garbage
9925      collection.  We must treat this situation as if we were within
9926      the body of function so as to avoid collecting live data on the
9927      stack.  */
9928   ++function_depth;
9929   arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
9930                      tf_warning_or_error, NULL_TREE,
9931                      /*integral_constant_expression_p=*/false);
9932   --function_depth;
9933   pop_deferring_access_checks();
9934
9935   /* Restore the "this" pointer.  */
9936   if (cfun)
9937     {
9938       cp_function_chain->x_current_class_ptr = saved_class_ptr;
9939       cp_function_chain->x_current_class_ref = saved_class_ref;
9940     }
9941
9942   /* Make sure the default argument is reasonable.  */
9943   arg = check_default_argument (type, arg);
9944
9945   pop_access_scope (fn);
9946
9947   return arg;
9948 }
9949
9950 /* Substitute into all the default arguments for FN.  */
9951
9952 static void
9953 tsubst_default_arguments (tree fn)
9954 {
9955   tree arg;
9956   tree tmpl_args;
9957
9958   tmpl_args = DECL_TI_ARGS (fn);
9959
9960   /* If this function is not yet instantiated, we certainly don't need
9961      its default arguments.  */
9962   if (uses_template_parms (tmpl_args))
9963     return;
9964   /* Don't do this again for clones.  */
9965   if (DECL_CLONED_FUNCTION_P (fn))
9966     return;
9967
9968   for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
9969        arg;
9970        arg = TREE_CHAIN (arg))
9971     if (TREE_PURPOSE (arg))
9972       TREE_PURPOSE (arg) = tsubst_default_argument (fn,
9973                                                     TREE_VALUE (arg),
9974                                                     TREE_PURPOSE (arg));
9975 }
9976
9977 /* Substitute the ARGS into the T, which is a _DECL.  Return the
9978    result of the substitution.  Issue error and warning messages under
9979    control of COMPLAIN.  */
9980
9981 static tree
9982 tsubst_decl (tree t, tree args, tsubst_flags_t complain)
9983 {
9984 #define RETURN(EXP) do { r = (EXP); goto out; } while(0)
9985   location_t saved_loc;
9986   tree r = NULL_TREE;
9987   tree in_decl = t;
9988   hashval_t hash = 0;
9989
9990   /* Set the filename and linenumber to improve error-reporting.  */
9991   saved_loc = input_location;
9992   input_location = DECL_SOURCE_LOCATION (t);
9993
9994   switch (TREE_CODE (t))
9995     {
9996     case TEMPLATE_DECL:
9997       {
9998         /* We can get here when processing a member function template,
9999            member class template, or template template parameter.  */
10000         tree decl = DECL_TEMPLATE_RESULT (t);
10001         tree spec;
10002         tree tmpl_args;
10003         tree full_args;
10004
10005         if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
10006           {
10007             /* Template template parameter is treated here.  */
10008             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10009             if (new_type == error_mark_node)
10010               RETURN (error_mark_node);
10011
10012             r = copy_decl (t);
10013             DECL_CHAIN (r) = NULL_TREE;
10014             TREE_TYPE (r) = new_type;
10015             DECL_TEMPLATE_RESULT (r)
10016               = build_decl (DECL_SOURCE_LOCATION (decl),
10017                             TYPE_DECL, DECL_NAME (decl), new_type);
10018             DECL_TEMPLATE_PARMS (r)
10019               = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
10020                                        complain);
10021             TYPE_NAME (new_type) = r;
10022             break;
10023           }
10024
10025         /* We might already have an instance of this template.
10026            The ARGS are for the surrounding class type, so the
10027            full args contain the tsubst'd args for the context,
10028            plus the innermost args from the template decl.  */
10029         tmpl_args = DECL_CLASS_TEMPLATE_P (t)
10030           ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
10031           : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
10032         /* Because this is a template, the arguments will still be
10033            dependent, even after substitution.  If
10034            PROCESSING_TEMPLATE_DECL is not set, the dependency
10035            predicates will short-circuit.  */
10036         ++processing_template_decl;
10037         full_args = tsubst_template_args (tmpl_args, args,
10038                                           complain, in_decl);
10039         --processing_template_decl;
10040         if (full_args == error_mark_node)
10041           RETURN (error_mark_node);
10042
10043         /* If this is a default template template argument,
10044            tsubst might not have changed anything.  */
10045         if (full_args == tmpl_args)
10046           RETURN (t);
10047
10048         hash = hash_tmpl_and_args (t, full_args);
10049         spec = retrieve_specialization (t, full_args, hash);
10050         if (spec != NULL_TREE)
10051           {
10052             r = spec;
10053             break;
10054           }
10055
10056         /* Make a new template decl.  It will be similar to the
10057            original, but will record the current template arguments.
10058            We also create a new function declaration, which is just
10059            like the old one, but points to this new template, rather
10060            than the old one.  */
10061         r = copy_decl (t);
10062         gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
10063         DECL_CHAIN (r) = NULL_TREE;
10064
10065         DECL_TEMPLATE_INFO (r) = build_template_info (t, args);
10066
10067         if (TREE_CODE (decl) == TYPE_DECL
10068             && !TYPE_DECL_ALIAS_P (decl))
10069           {
10070             tree new_type;
10071             ++processing_template_decl;
10072             new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10073             --processing_template_decl;
10074             if (new_type == error_mark_node)
10075               RETURN (error_mark_node);
10076
10077             TREE_TYPE (r) = new_type;
10078             CLASSTYPE_TI_TEMPLATE (new_type) = r;
10079             DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
10080             DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
10081             DECL_CONTEXT (r) = TYPE_CONTEXT (new_type);
10082           }
10083         else
10084           {
10085             tree new_decl;
10086             ++processing_template_decl;
10087             new_decl = tsubst (decl, args, complain, in_decl);
10088             --processing_template_decl;
10089             if (new_decl == error_mark_node)
10090               RETURN (error_mark_node);
10091
10092             DECL_TEMPLATE_RESULT (r) = new_decl;
10093             DECL_TI_TEMPLATE (new_decl) = r;
10094             TREE_TYPE (r) = TREE_TYPE (new_decl);
10095             DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
10096             DECL_CONTEXT (r) = DECL_CONTEXT (new_decl);
10097           }
10098
10099         SET_DECL_IMPLICIT_INSTANTIATION (r);
10100         DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
10101         DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
10102
10103         /* The template parameters for this new template are all the
10104            template parameters for the old template, except the
10105            outermost level of parameters.  */
10106         DECL_TEMPLATE_PARMS (r)
10107           = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
10108                                    complain);
10109
10110         if (PRIMARY_TEMPLATE_P (t))
10111           DECL_PRIMARY_TEMPLATE (r) = r;
10112
10113         if (TREE_CODE (decl) != TYPE_DECL)
10114           /* Record this non-type partial instantiation.  */
10115           register_specialization (r, t,
10116                                    DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)),
10117                                    false, hash);
10118       }
10119       break;
10120
10121     case FUNCTION_DECL:
10122       {
10123         tree ctx;
10124         tree argvec = NULL_TREE;
10125         tree *friends;
10126         tree gen_tmpl;
10127         tree type;
10128         int member;
10129         int args_depth;
10130         int parms_depth;
10131
10132         /* Nobody should be tsubst'ing into non-template functions.  */
10133         gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
10134
10135         if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
10136           {
10137             tree spec;
10138             bool dependent_p;
10139
10140             /* If T is not dependent, just return it.  We have to
10141                increment PROCESSING_TEMPLATE_DECL because
10142                value_dependent_expression_p assumes that nothing is
10143                dependent when PROCESSING_TEMPLATE_DECL is zero.  */
10144             ++processing_template_decl;
10145             dependent_p = value_dependent_expression_p (t);
10146             --processing_template_decl;
10147             if (!dependent_p)
10148               RETURN (t);
10149
10150             /* Calculate the most general template of which R is a
10151                specialization, and the complete set of arguments used to
10152                specialize R.  */
10153             gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
10154             argvec = tsubst_template_args (DECL_TI_ARGS
10155                                           (DECL_TEMPLATE_RESULT
10156                                                  (DECL_TI_TEMPLATE (t))),
10157                                            args, complain, in_decl);
10158             if (argvec == error_mark_node)
10159               RETURN (error_mark_node);
10160
10161             /* Check to see if we already have this specialization.  */
10162             hash = hash_tmpl_and_args (gen_tmpl, argvec);
10163             spec = retrieve_specialization (gen_tmpl, argvec, hash);
10164
10165             if (spec)
10166               {
10167                 r = spec;
10168                 break;
10169               }
10170
10171             /* We can see more levels of arguments than parameters if
10172                there was a specialization of a member template, like
10173                this:
10174
10175                  template <class T> struct S { template <class U> void f(); }
10176                  template <> template <class U> void S<int>::f(U);
10177
10178                Here, we'll be substituting into the specialization,
10179                because that's where we can find the code we actually
10180                want to generate, but we'll have enough arguments for
10181                the most general template.
10182
10183                We also deal with the peculiar case:
10184
10185                  template <class T> struct S {
10186                    template <class U> friend void f();
10187                  };
10188                  template <class U> void f() {}
10189                  template S<int>;
10190                  template void f<double>();
10191
10192                Here, the ARGS for the instantiation of will be {int,
10193                double}.  But, we only need as many ARGS as there are
10194                levels of template parameters in CODE_PATTERN.  We are
10195                careful not to get fooled into reducing the ARGS in
10196                situations like:
10197
10198                  template <class T> struct S { template <class U> void f(U); }
10199                  template <class T> template <> void S<T>::f(int) {}
10200
10201                which we can spot because the pattern will be a
10202                specialization in this case.  */
10203             args_depth = TMPL_ARGS_DEPTH (args);
10204             parms_depth =
10205               TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
10206             if (args_depth > parms_depth
10207                 && !DECL_TEMPLATE_SPECIALIZATION (t))
10208               args = get_innermost_template_args (args, parms_depth);
10209           }
10210         else
10211           {
10212             /* This special case arises when we have something like this:
10213
10214                  template <class T> struct S {
10215                    friend void f<int>(int, double);
10216                  };
10217
10218                Here, the DECL_TI_TEMPLATE for the friend declaration
10219                will be an IDENTIFIER_NODE.  We are being called from
10220                tsubst_friend_function, and we want only to create a
10221                new decl (R) with appropriate types so that we can call
10222                determine_specialization.  */
10223             gen_tmpl = NULL_TREE;
10224           }
10225
10226         if (DECL_CLASS_SCOPE_P (t))
10227           {
10228             if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
10229               member = 2;
10230             else
10231               member = 1;
10232             ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
10233                                     complain, t, /*entering_scope=*/1);
10234           }
10235         else
10236           {
10237             member = 0;
10238             ctx = DECL_CONTEXT (t);
10239           }
10240         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10241         if (type == error_mark_node)
10242           RETURN (error_mark_node);
10243
10244         /* We do NOT check for matching decls pushed separately at this
10245            point, as they may not represent instantiations of this
10246            template, and in any case are considered separate under the
10247            discrete model.  */
10248         r = copy_decl (t);
10249         DECL_USE_TEMPLATE (r) = 0;
10250         TREE_TYPE (r) = type;
10251         /* Clear out the mangled name and RTL for the instantiation.  */
10252         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
10253         SET_DECL_RTL (r, NULL);
10254         /* Leave DECL_INITIAL set on deleted instantiations.  */
10255         if (!DECL_DELETED_FN (r))
10256           DECL_INITIAL (r) = NULL_TREE;
10257         DECL_CONTEXT (r) = ctx;
10258
10259         if (member && DECL_CONV_FN_P (r))
10260           /* Type-conversion operator.  Reconstruct the name, in
10261              case it's the name of one of the template's parameters.  */
10262           DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
10263
10264         DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
10265                                      complain, t);
10266         DECL_RESULT (r) = NULL_TREE;
10267
10268         TREE_STATIC (r) = 0;
10269         TREE_PUBLIC (r) = TREE_PUBLIC (t);
10270         DECL_EXTERNAL (r) = 1;
10271         /* If this is an instantiation of a function with internal
10272            linkage, we already know what object file linkage will be
10273            assigned to the instantiation.  */
10274         DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
10275         DECL_DEFER_OUTPUT (r) = 0;
10276         DECL_CHAIN (r) = NULL_TREE;
10277         DECL_PENDING_INLINE_INFO (r) = 0;
10278         DECL_PENDING_INLINE_P (r) = 0;
10279         DECL_SAVED_TREE (r) = NULL_TREE;
10280         DECL_STRUCT_FUNCTION (r) = NULL;
10281         TREE_USED (r) = 0;
10282         /* We'll re-clone as appropriate in instantiate_template.  */
10283         DECL_CLONED_FUNCTION (r) = NULL_TREE;
10284
10285         /* If we aren't complaining now, return on error before we register
10286            the specialization so that we'll complain eventually.  */
10287         if ((complain & tf_error) == 0
10288             && IDENTIFIER_OPNAME_P (DECL_NAME (r))
10289             && !grok_op_properties (r, /*complain=*/false))
10290           RETURN (error_mark_node);
10291
10292         /* Set up the DECL_TEMPLATE_INFO for R.  There's no need to do
10293            this in the special friend case mentioned above where
10294            GEN_TMPL is NULL.  */
10295         if (gen_tmpl)
10296           {
10297             DECL_TEMPLATE_INFO (r)
10298               = build_template_info (gen_tmpl, argvec);
10299             SET_DECL_IMPLICIT_INSTANTIATION (r);
10300             register_specialization (r, gen_tmpl, argvec, false, hash);
10301
10302             /* We're not supposed to instantiate default arguments
10303                until they are called, for a template.  But, for a
10304                declaration like:
10305
10306                  template <class T> void f ()
10307                  { extern void g(int i = T()); }
10308
10309                we should do the substitution when the template is
10310                instantiated.  We handle the member function case in
10311                instantiate_class_template since the default arguments
10312                might refer to other members of the class.  */
10313             if (!member
10314                 && !PRIMARY_TEMPLATE_P (gen_tmpl)
10315                 && !uses_template_parms (argvec))
10316               tsubst_default_arguments (r);
10317           }
10318         else
10319           DECL_TEMPLATE_INFO (r) = NULL_TREE;
10320
10321         /* Copy the list of befriending classes.  */
10322         for (friends = &DECL_BEFRIENDING_CLASSES (r);
10323              *friends;
10324              friends = &TREE_CHAIN (*friends))
10325           {
10326             *friends = copy_node (*friends);
10327             TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
10328                                             args, complain,
10329                                             in_decl);
10330           }
10331
10332         if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
10333           {
10334             maybe_retrofit_in_chrg (r);
10335             if (DECL_CONSTRUCTOR_P (r))
10336               grok_ctor_properties (ctx, r);
10337             /* If this is an instantiation of a member template, clone it.
10338                If it isn't, that'll be handled by
10339                clone_constructors_and_destructors.  */
10340             if (PRIMARY_TEMPLATE_P (gen_tmpl))
10341               clone_function_decl (r, /*update_method_vec_p=*/0);
10342           }
10343         else if ((complain & tf_error) != 0
10344                  && IDENTIFIER_OPNAME_P (DECL_NAME (r))
10345                  && !grok_op_properties (r, /*complain=*/true))
10346           RETURN (error_mark_node);
10347
10348         if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
10349           SET_DECL_FRIEND_CONTEXT (r,
10350                                    tsubst (DECL_FRIEND_CONTEXT (t),
10351                                             args, complain, in_decl));
10352
10353         /* Possibly limit visibility based on template args.  */
10354         DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
10355         if (DECL_VISIBILITY_SPECIFIED (t))
10356           {
10357             DECL_VISIBILITY_SPECIFIED (r) = 0;
10358             DECL_ATTRIBUTES (r)
10359               = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
10360           }
10361         determine_visibility (r);
10362         if (DECL_DEFAULTED_OUTSIDE_CLASS_P (r)
10363             && !processing_template_decl)
10364           defaulted_late_check (r);
10365
10366         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
10367                                         args, complain, in_decl);
10368       }
10369       break;
10370
10371     case PARM_DECL:
10372       {
10373         tree type = NULL_TREE;
10374         int i, len = 1;
10375         tree expanded_types = NULL_TREE;
10376         tree prev_r = NULL_TREE;
10377         tree first_r = NULL_TREE;
10378
10379         if (FUNCTION_PARAMETER_PACK_P (t))
10380           {
10381             /* If there is a local specialization that isn't a
10382                parameter pack, it means that we're doing a "simple"
10383                substitution from inside tsubst_pack_expansion. Just
10384                return the local specialization (which will be a single
10385                parm).  */
10386             tree spec = retrieve_local_specialization (t);
10387             if (spec 
10388                 && TREE_CODE (spec) == PARM_DECL
10389                 && TREE_CODE (TREE_TYPE (spec)) != TYPE_PACK_EXPANSION)
10390               RETURN (spec);
10391
10392             /* Expand the TYPE_PACK_EXPANSION that provides the types for
10393                the parameters in this function parameter pack.  */
10394             expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
10395                                                     complain, in_decl);
10396             if (TREE_CODE (expanded_types) == TREE_VEC)
10397               {
10398                 len = TREE_VEC_LENGTH (expanded_types);
10399
10400                 /* Zero-length parameter packs are boring. Just substitute
10401                    into the chain.  */
10402                 if (len == 0)
10403                   RETURN (tsubst (TREE_CHAIN (t), args, complain,
10404                                   TREE_CHAIN (t)));
10405               }
10406             else
10407               {
10408                 /* All we did was update the type. Make a note of that.  */
10409                 type = expanded_types;
10410                 expanded_types = NULL_TREE;
10411               }
10412           }
10413
10414         /* Loop through all of the parameter's we'll build. When T is
10415            a function parameter pack, LEN is the number of expanded
10416            types in EXPANDED_TYPES; otherwise, LEN is 1.  */
10417         r = NULL_TREE;
10418         for (i = 0; i < len; ++i)
10419           {
10420             prev_r = r;
10421             r = copy_node (t);
10422             if (DECL_TEMPLATE_PARM_P (t))
10423               SET_DECL_TEMPLATE_PARM_P (r);
10424
10425             if (expanded_types)
10426               /* We're on the Ith parameter of the function parameter
10427                  pack.  */
10428               {
10429                 /* An argument of a function parameter pack is not a parameter
10430                    pack.  */
10431                 FUNCTION_PARAMETER_PACK_P (r) = false;
10432
10433                 /* Get the Ith type.  */
10434                 type = TREE_VEC_ELT (expanded_types, i);
10435
10436                 if (DECL_NAME (r))
10437                   /* Rename the parameter to include the index.  */
10438                   DECL_NAME (r) =
10439                     make_ith_pack_parameter_name (DECL_NAME (r), i);
10440               }
10441             else if (!type)
10442               /* We're dealing with a normal parameter.  */
10443               type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10444
10445             type = type_decays_to (type);
10446             TREE_TYPE (r) = type;
10447             cp_apply_type_quals_to_decl (cp_type_quals (type), r);
10448
10449             if (DECL_INITIAL (r))
10450               {
10451                 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
10452                   DECL_INITIAL (r) = TREE_TYPE (r);
10453                 else
10454                   DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
10455                                              complain, in_decl);
10456               }
10457
10458             DECL_CONTEXT (r) = NULL_TREE;
10459
10460             if (!DECL_TEMPLATE_PARM_P (r))
10461               DECL_ARG_TYPE (r) = type_passed_as (type);
10462
10463             apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
10464                                             args, complain, in_decl);
10465
10466             /* Keep track of the first new parameter we
10467                generate. That's what will be returned to the
10468                caller.  */
10469             if (!first_r)
10470               first_r = r;
10471
10472             /* Build a proper chain of parameters when substituting
10473                into a function parameter pack.  */
10474             if (prev_r)
10475               DECL_CHAIN (prev_r) = r;
10476           }
10477
10478         if (DECL_CHAIN (t))
10479           DECL_CHAIN (r) = tsubst (DECL_CHAIN (t), args,
10480                                    complain, DECL_CHAIN (t));
10481
10482         /* FIRST_R contains the start of the chain we've built.  */
10483         r = first_r;
10484       }
10485       break;
10486
10487     case FIELD_DECL:
10488       {
10489         tree type;
10490
10491         r = copy_decl (t);
10492         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10493         if (type == error_mark_node)
10494           RETURN (error_mark_node);
10495         TREE_TYPE (r) = type;
10496         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
10497
10498         if (DECL_C_BIT_FIELD (r))
10499           /* For bit-fields, DECL_INITIAL gives the number of bits.  For
10500              non-bit-fields DECL_INITIAL is a non-static data member
10501              initializer, which gets deferred instantiation.  */
10502           DECL_INITIAL (r)
10503             = tsubst_expr (DECL_INITIAL (t), args,
10504                            complain, in_decl,
10505                            /*integral_constant_expression_p=*/true);
10506         else if (DECL_INITIAL (t))
10507           {
10508             /* Set up DECL_TEMPLATE_INFO so that we can get at the
10509                NSDMI in perform_member_init.  Still set DECL_INITIAL
10510                so that we know there is one.  */
10511             DECL_INITIAL (r) = void_zero_node;
10512             gcc_assert (DECL_LANG_SPECIFIC (r) == NULL);
10513             retrofit_lang_decl (r);
10514             DECL_TEMPLATE_INFO (r) = build_template_info (t, args);
10515           }
10516         /* We don't have to set DECL_CONTEXT here; it is set by
10517            finish_member_declaration.  */
10518         DECL_CHAIN (r) = NULL_TREE;
10519         if (VOID_TYPE_P (type))
10520           error ("instantiation of %q+D as type %qT", r, type);
10521
10522         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
10523                                         args, complain, in_decl);
10524       }
10525       break;
10526
10527     case USING_DECL:
10528       /* We reach here only for member using decls.  */
10529       if (DECL_DEPENDENT_P (t))
10530         {
10531           r = do_class_using_decl
10532             (tsubst_copy (USING_DECL_SCOPE (t), args, complain, in_decl),
10533              tsubst_copy (DECL_NAME (t), args, complain, in_decl));
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                 hash = hash_tmpl_and_args (gen_tmpl, argvec);
10619                 spec = retrieve_specialization (gen_tmpl, argvec, hash);
10620               }
10621           }
10622         else
10623           {
10624             /* A local variable.  */
10625             local_p = true;
10626             /* Subsequent calls to pushdecl will fill this in.  */
10627             ctx = NULL_TREE;
10628             spec = retrieve_local_specialization (t);
10629           }
10630         /* If we already have the specialization we need, there is
10631            nothing more to do.  */ 
10632         if (spec)
10633           {
10634             r = spec;
10635             break;
10636           }
10637
10638         /* Create a new node for the specialization we need.  */
10639         r = copy_decl (t);
10640         if (type == NULL_TREE)
10641           {
10642             if (is_typedef_decl (t))
10643               type = DECL_ORIGINAL_TYPE (t);
10644             else
10645               type = TREE_TYPE (t);
10646             if (TREE_CODE (t) == VAR_DECL
10647                 && VAR_HAD_UNKNOWN_BOUND (t)
10648                 && type != error_mark_node)
10649               type = strip_array_domain (type);
10650             type = tsubst (type, args, complain, in_decl);
10651           }
10652         if (TREE_CODE (r) == VAR_DECL)
10653           {
10654             /* Even if the original location is out of scope, the
10655                newly substituted one is not.  */
10656             DECL_DEAD_FOR_LOCAL (r) = 0;
10657             DECL_INITIALIZED_P (r) = 0;
10658             DECL_TEMPLATE_INSTANTIATED (r) = 0;
10659             if (type == error_mark_node)
10660               RETURN (error_mark_node);
10661             if (TREE_CODE (type) == FUNCTION_TYPE)
10662               {
10663                 /* It may seem that this case cannot occur, since:
10664
10665                      typedef void f();
10666                      void g() { f x; }
10667
10668                    declares a function, not a variable.  However:
10669       
10670                      typedef void f();
10671                      template <typename T> void g() { T t; }
10672                      template void g<f>();
10673
10674                    is an attempt to declare a variable with function
10675                    type.  */
10676                 error ("variable %qD has function type",
10677                        /* R is not yet sufficiently initialized, so we
10678                           just use its name.  */
10679                        DECL_NAME (r));
10680                 RETURN (error_mark_node);
10681               }
10682             type = complete_type (type);
10683             /* Wait until cp_finish_decl to set this again, to handle
10684                circular dependency (template/instantiate6.C). */
10685             DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r) = 0;
10686             type = check_var_type (DECL_NAME (r), type);
10687
10688             if (DECL_HAS_VALUE_EXPR_P (t))
10689               {
10690                 tree ve = DECL_VALUE_EXPR (t);
10691                 ve = tsubst_expr (ve, args, complain, in_decl,
10692                                   /*constant_expression_p=*/false);
10693                 if (REFERENCE_REF_P (ve))
10694                   {
10695                     gcc_assert (TREE_CODE (type) == REFERENCE_TYPE);
10696                     ve = TREE_OPERAND (ve, 0);
10697                   }
10698                 SET_DECL_VALUE_EXPR (r, ve);
10699               }
10700           }
10701         else if (DECL_SELF_REFERENCE_P (t))
10702           SET_DECL_SELF_REFERENCE_P (r);
10703         TREE_TYPE (r) = type;
10704         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
10705         DECL_CONTEXT (r) = ctx;
10706         /* Clear out the mangled name and RTL for the instantiation.  */
10707         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
10708         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
10709           SET_DECL_RTL (r, NULL);
10710         /* The initializer must not be expanded until it is required;
10711            see [temp.inst].  */
10712         DECL_INITIAL (r) = NULL_TREE;
10713         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
10714           SET_DECL_RTL (r, NULL);
10715         DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
10716         if (TREE_CODE (r) == VAR_DECL)
10717           {
10718             /* Possibly limit visibility based on template args.  */
10719             DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
10720             if (DECL_VISIBILITY_SPECIFIED (t))
10721               {
10722                 DECL_VISIBILITY_SPECIFIED (r) = 0;
10723                 DECL_ATTRIBUTES (r)
10724                   = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
10725               }
10726             determine_visibility (r);
10727           }
10728
10729         if (!local_p)
10730           {
10731             /* A static data member declaration is always marked
10732                external when it is declared in-class, even if an
10733                initializer is present.  We mimic the non-template
10734                processing here.  */
10735             DECL_EXTERNAL (r) = 1;
10736
10737             register_specialization (r, gen_tmpl, argvec, false, hash);
10738             DECL_TEMPLATE_INFO (r) = build_template_info (tmpl, argvec);
10739             SET_DECL_IMPLICIT_INSTANTIATION (r);
10740           }
10741         else if (cp_unevaluated_operand)
10742           {
10743             /* We're substituting this var in a decltype outside of its
10744                scope, such as for a lambda return type.  Don't add it to
10745                local_specializations, do perform auto deduction.  */
10746             tree auto_node = type_uses_auto (type);
10747             if (auto_node)
10748               {
10749                 tree init
10750                   = tsubst_expr (DECL_INITIAL (t), args, complain, in_decl,
10751                                  /*constant_expression_p=*/false);
10752                 init = resolve_nondeduced_context (init);
10753                 TREE_TYPE (r) = type
10754                   = do_auto_deduction (type, init, auto_node);
10755               }
10756           }
10757         else
10758           register_local_specialization (r, t);
10759
10760         DECL_CHAIN (r) = NULL_TREE;
10761
10762         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r),
10763                                         /*flags=*/0,
10764                                         args, complain, in_decl);
10765
10766         /* Preserve a typedef that names a type.  */
10767         if (is_typedef_decl (r))
10768           {
10769             DECL_ORIGINAL_TYPE (r) = NULL_TREE;
10770             set_underlying_type (r);
10771           }
10772
10773         layout_decl (r, 0);
10774       }
10775       break;
10776
10777     default:
10778       gcc_unreachable ();
10779     }
10780 #undef RETURN
10781
10782  out:
10783   /* Restore the file and line information.  */
10784   input_location = saved_loc;
10785
10786   return r;
10787 }
10788
10789 /* Substitute into the ARG_TYPES of a function type.  */
10790
10791 static tree
10792 tsubst_arg_types (tree arg_types,
10793                   tree args,
10794                   tsubst_flags_t complain,
10795                   tree in_decl)
10796 {
10797   tree remaining_arg_types;
10798   tree type = NULL_TREE;
10799   int i = 1;
10800   tree expanded_args = NULL_TREE;
10801   tree default_arg;
10802
10803   if (!arg_types || arg_types == void_list_node)
10804     return arg_types;
10805
10806   remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
10807                                           args, complain, in_decl);
10808   if (remaining_arg_types == error_mark_node)
10809     return error_mark_node;
10810
10811   if (PACK_EXPANSION_P (TREE_VALUE (arg_types)))
10812     {
10813       /* For a pack expansion, perform substitution on the
10814          entire expression. Later on, we'll handle the arguments
10815          one-by-one.  */
10816       expanded_args = tsubst_pack_expansion (TREE_VALUE (arg_types),
10817                                             args, complain, in_decl);
10818
10819       if (TREE_CODE (expanded_args) == TREE_VEC)
10820         /* So that we'll spin through the parameters, one by one.  */
10821         i = TREE_VEC_LENGTH (expanded_args);
10822       else
10823         {
10824           /* We only partially substituted into the parameter
10825              pack. Our type is TYPE_PACK_EXPANSION.  */
10826           type = expanded_args;
10827           expanded_args = NULL_TREE;
10828         }
10829     }
10830
10831   while (i > 0) {
10832     --i;
10833     
10834     if (expanded_args)
10835       type = TREE_VEC_ELT (expanded_args, i);
10836     else if (!type)
10837       type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
10838
10839     if (type == error_mark_node)
10840       return error_mark_node;
10841     if (VOID_TYPE_P (type))
10842       {
10843         if (complain & tf_error)
10844           {
10845             error ("invalid parameter type %qT", type);
10846             if (in_decl)
10847               error ("in declaration %q+D", in_decl);
10848           }
10849         return error_mark_node;
10850     }
10851     
10852     /* Do array-to-pointer, function-to-pointer conversion, and ignore
10853        top-level qualifiers as required.  */
10854     type = cv_unqualified (type_decays_to (type));
10855
10856     /* We do not substitute into default arguments here.  The standard
10857        mandates that they be instantiated only when needed, which is
10858        done in build_over_call.  */
10859     default_arg = TREE_PURPOSE (arg_types);
10860
10861     if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
10862       {
10863         /* We've instantiated a template before its default arguments
10864            have been parsed.  This can happen for a nested template
10865            class, and is not an error unless we require the default
10866            argument in a call of this function.  */
10867         remaining_arg_types = 
10868           tree_cons (default_arg, type, remaining_arg_types);
10869         VEC_safe_push (tree, gc, DEFARG_INSTANTIATIONS (default_arg), 
10870                        remaining_arg_types);
10871       }
10872     else
10873       remaining_arg_types = 
10874         hash_tree_cons (default_arg, type, remaining_arg_types);
10875   }
10876         
10877   return remaining_arg_types;
10878 }
10879
10880 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE.  This routine does
10881    *not* handle the exception-specification for FNTYPE, because the
10882    initial substitution of explicitly provided template parameters
10883    during argument deduction forbids substitution into the
10884    exception-specification:
10885
10886      [temp.deduct]
10887
10888      All references in the function type of the function template to  the
10889      corresponding template parameters are replaced by the specified tem-
10890      plate argument values.  If a substitution in a template parameter or
10891      in  the function type of the function template results in an invalid
10892      type, type deduction fails.  [Note: The equivalent  substitution  in
10893      exception specifications is done only when the function is instanti-
10894      ated, at which point a program is  ill-formed  if  the  substitution
10895      results in an invalid type.]  */
10896
10897 static tree
10898 tsubst_function_type (tree t,
10899                       tree args,
10900                       tsubst_flags_t complain,
10901                       tree in_decl)
10902 {
10903   tree return_type;
10904   tree arg_types;
10905   tree fntype;
10906
10907   /* The TYPE_CONTEXT is not used for function/method types.  */
10908   gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
10909
10910   /* Substitute the return type.  */
10911   return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10912   if (return_type == error_mark_node)
10913     return error_mark_node;
10914   /* The standard does not presently indicate that creation of a
10915      function type with an invalid return type is a deduction failure.
10916      However, that is clearly analogous to creating an array of "void"
10917      or a reference to a reference.  This is core issue #486.  */
10918   if (TREE_CODE (return_type) == ARRAY_TYPE
10919       || TREE_CODE (return_type) == FUNCTION_TYPE)
10920     {
10921       if (complain & tf_error)
10922         {
10923           if (TREE_CODE (return_type) == ARRAY_TYPE)
10924             error ("function returning an array");
10925           else
10926             error ("function returning a function");
10927         }
10928       return error_mark_node;
10929     }
10930
10931   /* Substitute the argument types.  */
10932   arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
10933                                 complain, in_decl);
10934   if (arg_types == error_mark_node)
10935     return error_mark_node;
10936
10937   /* Construct a new type node and return it.  */
10938   if (TREE_CODE (t) == FUNCTION_TYPE)
10939     {
10940       fntype = build_function_type (return_type, arg_types);
10941       fntype = apply_memfn_quals (fntype, type_memfn_quals (t));
10942     }
10943   else
10944     {
10945       tree r = TREE_TYPE (TREE_VALUE (arg_types));
10946       if (! MAYBE_CLASS_TYPE_P (r))
10947         {
10948           /* [temp.deduct]
10949
10950              Type deduction may fail for any of the following
10951              reasons:
10952
10953              -- Attempting to create "pointer to member of T" when T
10954              is not a class type.  */
10955           if (complain & tf_error)
10956             error ("creating pointer to member function of non-class type %qT",
10957                       r);
10958           return error_mark_node;
10959         }
10960
10961       fntype = build_method_type_directly (r, return_type,
10962                                            TREE_CHAIN (arg_types));
10963     }
10964   fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
10965
10966   return fntype;
10967 }
10968
10969 /* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE.  Substitute the template
10970    ARGS into that specification, and return the substituted
10971    specification.  If there is no specification, return NULL_TREE.  */
10972
10973 static tree
10974 tsubst_exception_specification (tree fntype,
10975                                 tree args,
10976                                 tsubst_flags_t complain,
10977                                 tree in_decl,
10978                                 bool defer_ok)
10979 {
10980   tree specs;
10981   tree new_specs;
10982
10983   specs = TYPE_RAISES_EXCEPTIONS (fntype);
10984   new_specs = NULL_TREE;
10985   if (specs && TREE_PURPOSE (specs))
10986     {
10987       /* A noexcept-specifier.  */
10988       tree expr = TREE_PURPOSE (specs);
10989       if (expr == boolean_true_node || expr == boolean_false_node)
10990         new_specs = expr;
10991       else if (defer_ok)
10992         {
10993           /* Defer instantiation of noexcept-specifiers to avoid
10994              excessive instantiations (c++/49107).  */
10995           new_specs = make_node (DEFERRED_NOEXCEPT);
10996           if (DEFERRED_NOEXCEPT_SPEC_P (specs))
10997             {
10998               /* We already partially instantiated this member template,
10999                  so combine the new args with the old.  */
11000               DEFERRED_NOEXCEPT_PATTERN (new_specs)
11001                 = DEFERRED_NOEXCEPT_PATTERN (expr);
11002               DEFERRED_NOEXCEPT_ARGS (new_specs)
11003                 = add_to_template_args (DEFERRED_NOEXCEPT_ARGS (expr), args);
11004             }
11005           else
11006             {
11007               DEFERRED_NOEXCEPT_PATTERN (new_specs) = expr;
11008               DEFERRED_NOEXCEPT_ARGS (new_specs) = args;
11009             }
11010         }
11011       else
11012         new_specs = tsubst_copy_and_build
11013           (expr, args, complain, in_decl, /*function_p=*/false,
11014            /*integral_constant_expression_p=*/true);
11015       new_specs = build_noexcept_spec (new_specs, complain);
11016     }
11017   else if (specs)
11018     {
11019       if (! TREE_VALUE (specs))
11020         new_specs = specs;
11021       else
11022         while (specs)
11023           {
11024             tree spec;
11025             int i, len = 1;
11026             tree expanded_specs = NULL_TREE;
11027
11028             if (PACK_EXPANSION_P (TREE_VALUE (specs)))
11029               {
11030                 /* Expand the pack expansion type.  */
11031                 expanded_specs = tsubst_pack_expansion (TREE_VALUE (specs),
11032                                                        args, complain,
11033                                                        in_decl);
11034
11035                 if (expanded_specs == error_mark_node)
11036                   return error_mark_node;
11037                 else if (TREE_CODE (expanded_specs) == TREE_VEC)
11038                   len = TREE_VEC_LENGTH (expanded_specs);
11039                 else
11040                   {
11041                     /* We're substituting into a member template, so
11042                        we got a TYPE_PACK_EXPANSION back.  Add that
11043                        expansion and move on.  */
11044                     gcc_assert (TREE_CODE (expanded_specs) 
11045                                 == TYPE_PACK_EXPANSION);
11046                     new_specs = add_exception_specifier (new_specs,
11047                                                          expanded_specs,
11048                                                          complain);
11049                     specs = TREE_CHAIN (specs);
11050                     continue;
11051                   }
11052               }
11053
11054             for (i = 0; i < len; ++i)
11055               {
11056                 if (expanded_specs)
11057                   spec = TREE_VEC_ELT (expanded_specs, i);
11058                 else
11059                   spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
11060                 if (spec == error_mark_node)
11061                   return spec;
11062                 new_specs = add_exception_specifier (new_specs, spec, 
11063                                                      complain);
11064               }
11065
11066             specs = TREE_CHAIN (specs);
11067           }
11068     }
11069   return new_specs;
11070 }
11071
11072 /* Take the tree structure T and replace template parameters used
11073    therein with the argument vector ARGS.  IN_DECL is an associated
11074    decl for diagnostics.  If an error occurs, returns ERROR_MARK_NODE.
11075    Issue error and warning messages under control of COMPLAIN.  Note
11076    that we must be relatively non-tolerant of extensions here, in
11077    order to preserve conformance; if we allow substitutions that
11078    should not be allowed, we may allow argument deductions that should
11079    not succeed, and therefore report ambiguous overload situations
11080    where there are none.  In theory, we could allow the substitution,
11081    but indicate that it should have failed, and allow our caller to
11082    make sure that the right thing happens, but we don't try to do this
11083    yet.
11084
11085    This function is used for dealing with types, decls and the like;
11086    for expressions, use tsubst_expr or tsubst_copy.  */
11087
11088 tree
11089 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
11090 {
11091   enum tree_code code;
11092   tree type, r = NULL_TREE;
11093
11094   if (t == NULL_TREE || t == error_mark_node
11095       || t == integer_type_node
11096       || t == void_type_node
11097       || t == char_type_node
11098       || t == unknown_type_node
11099       || TREE_CODE (t) == NAMESPACE_DECL
11100       || TREE_CODE (t) == TRANSLATION_UNIT_DECL)
11101     return t;
11102
11103   if (DECL_P (t))
11104     return tsubst_decl (t, args, complain);
11105
11106   if (args == NULL_TREE)
11107     return t;
11108
11109   code = TREE_CODE (t);
11110
11111   if (code == IDENTIFIER_NODE)
11112     type = IDENTIFIER_TYPE_VALUE (t);
11113   else
11114     type = TREE_TYPE (t);
11115
11116   gcc_assert (type != unknown_type_node);
11117
11118   /* Reuse typedefs.  We need to do this to handle dependent attributes,
11119      such as attribute aligned.  */
11120   if (TYPE_P (t)
11121       && typedef_variant_p (t))
11122     {
11123       tree decl = TYPE_NAME (t);
11124
11125       if (TYPE_DECL_ALIAS_P (decl)
11126           && DECL_LANG_SPECIFIC (decl)
11127           && DECL_TEMPLATE_INFO (decl)
11128           && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl)))
11129         {
11130           /* DECL represents an alias template and we want to
11131              instantiate it.  Let's substitute our arguments for the
11132              template parameters into the declaration and get the
11133              resulting type.  */
11134           r = tsubst (decl, args, complain, decl);
11135         }
11136       else if (DECL_CLASS_SCOPE_P (decl)
11137                && CLASSTYPE_TEMPLATE_INFO (DECL_CONTEXT (decl))
11138                && uses_template_parms (DECL_CONTEXT (decl)))
11139         {
11140           tree tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
11141           tree gen_args = tsubst (DECL_TI_ARGS (decl), args, complain, in_decl);
11142           r = retrieve_specialization (tmpl, gen_args, 0);
11143         }
11144       else if (DECL_FUNCTION_SCOPE_P (decl)
11145                && DECL_TEMPLATE_INFO (DECL_CONTEXT (decl))
11146                && uses_template_parms (DECL_TI_ARGS (DECL_CONTEXT (decl))))
11147         r = retrieve_local_specialization (decl);
11148       else
11149         /* The typedef is from a non-template context.  */
11150         return t;
11151
11152       if (r)
11153         {
11154           r = TREE_TYPE (r);
11155           r = cp_build_qualified_type_real
11156             (r, cp_type_quals (t) | cp_type_quals (r),
11157              complain | tf_ignore_bad_quals);
11158           return r;
11159         }
11160       /* Else we must be instantiating the typedef, so fall through.  */
11161     }
11162
11163   if (type
11164       && code != TYPENAME_TYPE
11165       && code != TEMPLATE_TYPE_PARM
11166       && code != IDENTIFIER_NODE
11167       && code != FUNCTION_TYPE
11168       && code != METHOD_TYPE)
11169     type = tsubst (type, args, complain, in_decl);
11170   if (type == error_mark_node)
11171     return error_mark_node;
11172
11173   switch (code)
11174     {
11175     case RECORD_TYPE:
11176     case UNION_TYPE:
11177     case ENUMERAL_TYPE:
11178       return tsubst_aggr_type (t, args, complain, in_decl,
11179                                /*entering_scope=*/0);
11180
11181     case ERROR_MARK:
11182     case IDENTIFIER_NODE:
11183     case VOID_TYPE:
11184     case REAL_TYPE:
11185     case COMPLEX_TYPE:
11186     case VECTOR_TYPE:
11187     case BOOLEAN_TYPE:
11188     case NULLPTR_TYPE:
11189     case LANG_TYPE:
11190       return t;
11191
11192     case INTEGER_TYPE:
11193       if (t == integer_type_node)
11194         return t;
11195
11196       if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
11197           && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
11198         return t;
11199
11200       {
11201         tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
11202
11203         max = tsubst_expr (omax, args, complain, in_decl,
11204                            /*integral_constant_expression_p=*/false);
11205
11206         /* Fix up type of the magic NOP_EXPR with TREE_SIDE_EFFECTS if
11207            needed.  */
11208         if (TREE_CODE (max) == NOP_EXPR
11209             && TREE_SIDE_EFFECTS (omax)
11210             && !TREE_TYPE (max))
11211           TREE_TYPE (max) = TREE_TYPE (TREE_OPERAND (max, 0));
11212
11213         /* If we're in a partial instantiation, preserve the magic NOP_EXPR
11214            with TREE_SIDE_EFFECTS that indicates this is not an integral
11215            constant expression.  */
11216         if (processing_template_decl
11217             && TREE_SIDE_EFFECTS (omax) && TREE_CODE (omax) == NOP_EXPR)
11218           {
11219             gcc_assert (TREE_CODE (max) == NOP_EXPR);
11220             TREE_SIDE_EFFECTS (max) = 1;
11221           }
11222
11223         return compute_array_index_type (NULL_TREE, max, complain);
11224       }
11225
11226     case TEMPLATE_TYPE_PARM:
11227     case TEMPLATE_TEMPLATE_PARM:
11228     case BOUND_TEMPLATE_TEMPLATE_PARM:
11229     case TEMPLATE_PARM_INDEX:
11230       {
11231         int idx;
11232         int level;
11233         int levels;
11234         tree arg = NULL_TREE;
11235
11236         r = NULL_TREE;
11237
11238         gcc_assert (TREE_VEC_LENGTH (args) > 0);
11239         template_parm_level_and_index (t, &level, &idx); 
11240
11241         levels = TMPL_ARGS_DEPTH (args);
11242         if (level <= levels)
11243           {
11244             arg = TMPL_ARG (args, level, idx);
11245
11246             if (arg && TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
11247               /* See through ARGUMENT_PACK_SELECT arguments. */
11248               arg = ARGUMENT_PACK_SELECT_ARG (arg);
11249           }
11250
11251         if (arg == error_mark_node)
11252           return error_mark_node;
11253         else if (arg != NULL_TREE)
11254           {
11255             if (ARGUMENT_PACK_P (arg))
11256               /* If ARG is an argument pack, we don't actually want to
11257                  perform a substitution here, because substitutions
11258                  for argument packs are only done
11259                  element-by-element. We can get to this point when
11260                  substituting the type of a non-type template
11261                  parameter pack, when that type actually contains
11262                  template parameter packs from an outer template, e.g.,
11263
11264                  template<typename... Types> struct A {
11265                    template<Types... Values> struct B { };
11266                  };  */
11267               return t;
11268
11269             if (code == TEMPLATE_TYPE_PARM)
11270               {
11271                 int quals;
11272                 gcc_assert (TYPE_P (arg));
11273
11274                 quals = cp_type_quals (arg) | cp_type_quals (t);
11275                   
11276                 return cp_build_qualified_type_real
11277                   (arg, quals, complain | tf_ignore_bad_quals);
11278               }
11279             else if (code == BOUND_TEMPLATE_TEMPLATE_PARM)
11280               {
11281                 /* We are processing a type constructed from a
11282                    template template parameter.  */
11283                 tree argvec = tsubst (TYPE_TI_ARGS (t),
11284                                       args, complain, in_decl);
11285                 if (argvec == error_mark_node)
11286                   return error_mark_node;
11287
11288                 gcc_assert (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
11289                             || TREE_CODE (arg) == TEMPLATE_DECL
11290                             || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
11291
11292                 if (TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE)
11293                   /* Consider this code:
11294
11295                         template <template <class> class Template>
11296                         struct Internal {
11297                         template <class Arg> using Bind = Template<Arg>;
11298                         };
11299
11300                         template <template <class> class Template, class Arg>
11301                         using Instantiate = Template<Arg>; //#0
11302
11303                         template <template <class> class Template,
11304                                   class Argument>
11305                         using Bind =
11306                           Instantiate<Internal<Template>::template Bind,
11307                                       Argument>; //#1
11308
11309                      When #1 is parsed, the
11310                      BOUND_TEMPLATE_TEMPLATE_PARM representing the
11311                      parameter `Template' in #0 matches the
11312                      UNBOUND_CLASS_TEMPLATE representing the argument
11313                      `Internal<Template>::template Bind'; We then want
11314                      to assemble the type `Bind<Argument>' that can't
11315                      be fully created right now, because
11316                      `Internal<Template>' not being complete, the Bind
11317                      template cannot be looked up in that context.  So
11318                      we need to "store" `Bind<Argument>' for later
11319                      when the context of Bind becomes complete.  Let's
11320                      store that in a TYPENAME_TYPE.  */
11321                   return make_typename_type (TYPE_CONTEXT (arg),
11322                                              build_nt (TEMPLATE_ID_EXPR,
11323                                                        TYPE_IDENTIFIER (arg),
11324                                                        argvec),
11325                                              typename_type,
11326                                              complain);
11327
11328                 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
11329                    are resolving nested-types in the signature of a
11330                    member function templates.  Otherwise ARG is a
11331                    TEMPLATE_DECL and is the real template to be
11332                    instantiated.  */
11333                 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
11334                   arg = TYPE_NAME (arg);
11335
11336                 r = lookup_template_class (arg,
11337                                            argvec, in_decl,
11338                                            DECL_CONTEXT (arg),
11339                                             /*entering_scope=*/0,
11340                                            complain);
11341                 return cp_build_qualified_type_real
11342                   (r, cp_type_quals (t), complain);
11343               }
11344             else
11345               /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX.  */
11346               return convert_from_reference (unshare_expr (arg));
11347           }
11348
11349         if (level == 1)
11350           /* This can happen during the attempted tsubst'ing in
11351              unify.  This means that we don't yet have any information
11352              about the template parameter in question.  */
11353           return t;
11354
11355         /* If we get here, we must have been looking at a parm for a
11356            more deeply nested template.  Make a new version of this
11357            template parameter, but with a lower level.  */
11358         switch (code)
11359           {
11360           case TEMPLATE_TYPE_PARM:
11361           case TEMPLATE_TEMPLATE_PARM:
11362           case BOUND_TEMPLATE_TEMPLATE_PARM:
11363             if (cp_type_quals (t))
11364               {
11365                 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
11366                 r = cp_build_qualified_type_real
11367                   (r, cp_type_quals (t),
11368                    complain | (code == TEMPLATE_TYPE_PARM
11369                                ? tf_ignore_bad_quals : 0));
11370               }
11371             else
11372               {
11373                 r = copy_type (t);
11374                 TEMPLATE_TYPE_PARM_INDEX (r)
11375                   = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
11376                                                 r, levels, args, complain);
11377                 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
11378                 TYPE_MAIN_VARIANT (r) = r;
11379                 TYPE_POINTER_TO (r) = NULL_TREE;
11380                 TYPE_REFERENCE_TO (r) = NULL_TREE;
11381
11382                 if (TREE_CODE (r) == TEMPLATE_TEMPLATE_PARM)
11383                   /* We have reduced the level of the template
11384                      template parameter, but not the levels of its
11385                      template parameters, so canonical_type_parameter
11386                      will not be able to find the canonical template
11387                      template parameter for this level. Thus, we
11388                      require structural equality checking to compare
11389                      TEMPLATE_TEMPLATE_PARMs. */
11390                   SET_TYPE_STRUCTURAL_EQUALITY (r);
11391                 else if (TYPE_STRUCTURAL_EQUALITY_P (t))
11392                   SET_TYPE_STRUCTURAL_EQUALITY (r);
11393                 else
11394                   TYPE_CANONICAL (r) = canonical_type_parameter (r);
11395
11396                 if (code == BOUND_TEMPLATE_TEMPLATE_PARM)
11397                   {
11398                     tree argvec = tsubst (TYPE_TI_ARGS (t), args,
11399                                           complain, in_decl);
11400                     if (argvec == error_mark_node)
11401                       return error_mark_node;
11402
11403                     TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
11404                       = build_template_info (TYPE_TI_TEMPLATE (t), argvec);
11405                   }
11406               }
11407             break;
11408
11409           case TEMPLATE_PARM_INDEX:
11410             r = reduce_template_parm_level (t, type, levels, args, complain);
11411             break;
11412
11413           default:
11414             gcc_unreachable ();
11415           }
11416
11417         return r;
11418       }
11419
11420     case TREE_LIST:
11421       {
11422         tree purpose, value, chain;
11423
11424         if (t == void_list_node)
11425           return t;
11426
11427         purpose = TREE_PURPOSE (t);
11428         if (purpose)
11429           {
11430             purpose = tsubst (purpose, args, complain, in_decl);
11431             if (purpose == error_mark_node)
11432               return error_mark_node;
11433           }
11434         value = TREE_VALUE (t);
11435         if (value)
11436           {
11437             value = tsubst (value, args, complain, in_decl);
11438             if (value == error_mark_node)
11439               return error_mark_node;
11440           }
11441         chain = TREE_CHAIN (t);
11442         if (chain && chain != void_type_node)
11443           {
11444             chain = tsubst (chain, args, complain, in_decl);
11445             if (chain == error_mark_node)
11446               return error_mark_node;
11447           }
11448         if (purpose == TREE_PURPOSE (t)
11449             && value == TREE_VALUE (t)
11450             && chain == TREE_CHAIN (t))
11451           return t;
11452         return hash_tree_cons (purpose, value, chain);
11453       }
11454
11455     case TREE_BINFO:
11456       /* We should never be tsubsting a binfo.  */
11457       gcc_unreachable ();
11458
11459     case TREE_VEC:
11460       /* A vector of template arguments.  */
11461       gcc_assert (!type);
11462       return tsubst_template_args (t, args, complain, in_decl);
11463
11464     case POINTER_TYPE:
11465     case REFERENCE_TYPE:
11466       {
11467         if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
11468           return t;
11469
11470         /* [temp.deduct]
11471
11472            Type deduction may fail for any of the following
11473            reasons:
11474
11475            -- Attempting to create a pointer to reference type.
11476            -- Attempting to create a reference to a reference type or
11477               a reference to void.
11478
11479           Core issue 106 says that creating a reference to a reference
11480           during instantiation is no longer a cause for failure. We
11481           only enforce this check in strict C++98 mode.  */
11482         if ((TREE_CODE (type) == REFERENCE_TYPE
11483              && (((cxx_dialect == cxx98) && flag_iso) || code != REFERENCE_TYPE))
11484             || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
11485           {
11486             static location_t last_loc;
11487
11488             /* We keep track of the last time we issued this error
11489                message to avoid spewing a ton of messages during a
11490                single bad template instantiation.  */
11491             if (complain & tf_error
11492                 && last_loc != input_location)
11493               {
11494                 if (TREE_CODE (type) == VOID_TYPE)
11495                   error ("forming reference to void");
11496                else if (code == POINTER_TYPE)
11497                  error ("forming pointer to reference type %qT", type);
11498                else
11499                   error ("forming reference to reference type %qT", type);
11500                 last_loc = input_location;
11501               }
11502
11503             return error_mark_node;
11504           }
11505         else if (code == POINTER_TYPE)
11506           {
11507             r = build_pointer_type (type);
11508             if (TREE_CODE (type) == METHOD_TYPE)
11509               r = build_ptrmemfunc_type (r);
11510           }
11511         else if (TREE_CODE (type) == REFERENCE_TYPE)
11512           /* In C++0x, during template argument substitution, when there is an
11513              attempt to create a reference to a reference type, reference
11514              collapsing is applied as described in [14.3.1/4 temp.arg.type]:
11515
11516              "If a template-argument for a template-parameter T names a type
11517              that is a reference to a type A, an attempt to create the type
11518              'lvalue reference to cv T' creates the type 'lvalue reference to
11519              A,' while an attempt to create the type type rvalue reference to
11520              cv T' creates the type T"
11521           */
11522           r = cp_build_reference_type
11523               (TREE_TYPE (type),
11524                TYPE_REF_IS_RVALUE (t) && TYPE_REF_IS_RVALUE (type));
11525         else
11526           r = cp_build_reference_type (type, TYPE_REF_IS_RVALUE (t));
11527         r = cp_build_qualified_type_real (r, cp_type_quals (t), complain);
11528
11529         if (r != error_mark_node)
11530           /* Will this ever be needed for TYPE_..._TO values?  */
11531           layout_type (r);
11532
11533         return r;
11534       }
11535     case OFFSET_TYPE:
11536       {
11537         r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
11538         if (r == error_mark_node || !MAYBE_CLASS_TYPE_P (r))
11539           {
11540             /* [temp.deduct]
11541
11542                Type deduction may fail for any of the following
11543                reasons:
11544
11545                -- Attempting to create "pointer to member of T" when T
11546                   is not a class type.  */
11547             if (complain & tf_error)
11548               error ("creating pointer to member of non-class type %qT", r);
11549             return error_mark_node;
11550           }
11551         if (TREE_CODE (type) == REFERENCE_TYPE)
11552           {
11553             if (complain & tf_error)
11554               error ("creating pointer to member reference type %qT", type);
11555             return error_mark_node;
11556           }
11557         if (TREE_CODE (type) == VOID_TYPE)
11558           {
11559             if (complain & tf_error)
11560               error ("creating pointer to member of type void");
11561             return error_mark_node;
11562           }
11563         gcc_assert (TREE_CODE (type) != METHOD_TYPE);
11564         if (TREE_CODE (type) == FUNCTION_TYPE)
11565           {
11566             /* The type of the implicit object parameter gets its
11567                cv-qualifiers from the FUNCTION_TYPE. */
11568             tree memptr;
11569             tree method_type = build_memfn_type (type, r, type_memfn_quals (type));
11570             memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
11571             return cp_build_qualified_type_real (memptr, cp_type_quals (t),
11572                                                  complain);
11573           }
11574         else
11575           return cp_build_qualified_type_real (build_ptrmem_type (r, type),
11576                                                cp_type_quals (t),
11577                                                complain);
11578       }
11579     case FUNCTION_TYPE:
11580     case METHOD_TYPE:
11581       {
11582         tree fntype;
11583         tree specs;
11584         fntype = tsubst_function_type (t, args, complain, in_decl);
11585         if (fntype == error_mark_node)
11586           return error_mark_node;
11587
11588         /* Substitute the exception specification.  */
11589         specs = tsubst_exception_specification (t, args, complain,
11590                                                 in_decl, /*defer_ok*/true);
11591         if (specs == error_mark_node)
11592           return error_mark_node;
11593         if (specs)
11594           fntype = build_exception_variant (fntype, specs);
11595         return fntype;
11596       }
11597     case ARRAY_TYPE:
11598       {
11599         tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
11600         if (domain == error_mark_node)
11601           return error_mark_node;
11602
11603         /* As an optimization, we avoid regenerating the array type if
11604            it will obviously be the same as T.  */
11605         if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
11606           return t;
11607
11608         /* These checks should match the ones in grokdeclarator.
11609
11610            [temp.deduct]
11611
11612            The deduction may fail for any of the following reasons:
11613
11614            -- Attempting to create an array with an element type that
11615               is void, a function type, or a reference type, or [DR337]
11616               an abstract class type.  */
11617         if (TREE_CODE (type) == VOID_TYPE
11618             || TREE_CODE (type) == FUNCTION_TYPE
11619             || TREE_CODE (type) == REFERENCE_TYPE)
11620           {
11621             if (complain & tf_error)
11622               error ("creating array of %qT", type);
11623             return error_mark_node;
11624           }
11625         if (CLASS_TYPE_P (type) && CLASSTYPE_PURE_VIRTUALS (type))
11626           {
11627             if (complain & tf_error)
11628               error ("creating array of %qT, which is an abstract class type",
11629                      type);
11630             return error_mark_node;
11631           }
11632
11633         r = build_cplus_array_type (type, domain);
11634
11635         if (TYPE_USER_ALIGN (t))
11636           {
11637             TYPE_ALIGN (r) = TYPE_ALIGN (t);
11638             TYPE_USER_ALIGN (r) = 1;
11639           }
11640
11641         return r;
11642       }
11643
11644     case TYPENAME_TYPE:
11645       {
11646         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
11647                                      in_decl, /*entering_scope=*/1);
11648         tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
11649                               complain, in_decl);
11650
11651         if (ctx == error_mark_node || f == error_mark_node)
11652           return error_mark_node;
11653
11654         if (!MAYBE_CLASS_TYPE_P (ctx))
11655           {
11656             if (complain & tf_error)
11657               error ("%qT is not a class, struct, or union type", ctx);
11658             return error_mark_node;
11659           }
11660         else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
11661           {
11662             /* Normally, make_typename_type does not require that the CTX
11663                have complete type in order to allow things like:
11664
11665                  template <class T> struct S { typename S<T>::X Y; };
11666
11667                But, such constructs have already been resolved by this
11668                point, so here CTX really should have complete type, unless
11669                it's a partial instantiation.  */
11670             ctx = complete_type (ctx);
11671             if (!COMPLETE_TYPE_P (ctx))
11672               {
11673                 if (complain & tf_error)
11674                   cxx_incomplete_type_error (NULL_TREE, ctx);
11675                 return error_mark_node;
11676               }
11677           }
11678
11679         f = make_typename_type (ctx, f, typename_type,
11680                                 (complain & tf_error) | tf_keep_type_decl);
11681         if (f == error_mark_node)
11682           return f;
11683         if (TREE_CODE (f) == TYPE_DECL)
11684           {
11685             complain |= tf_ignore_bad_quals;
11686             f = TREE_TYPE (f);
11687           }
11688
11689         if (TREE_CODE (f) != TYPENAME_TYPE)
11690           {
11691             if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
11692               {
11693                 if (complain & tf_error)
11694                   error ("%qT resolves to %qT, which is not an enumeration type",
11695                          t, f);
11696                 else
11697                   return error_mark_node;
11698               }
11699             else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
11700               {
11701                 if (complain & tf_error)
11702                   error ("%qT resolves to %qT, which is is not a class type",
11703                          t, f);
11704                 else
11705                   return error_mark_node;
11706               }
11707           }
11708
11709         return cp_build_qualified_type_real
11710           (f, cp_type_quals (f) | cp_type_quals (t), complain);
11711       }
11712
11713     case UNBOUND_CLASS_TEMPLATE:
11714       {
11715         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
11716                                      in_decl, /*entering_scope=*/1);
11717         tree name = TYPE_IDENTIFIER (t);
11718         tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
11719
11720         if (ctx == error_mark_node || name == error_mark_node)
11721           return error_mark_node;
11722
11723         if (parm_list)
11724           parm_list = tsubst_template_parms (parm_list, args, complain);
11725         return make_unbound_class_template (ctx, name, parm_list, complain);
11726       }
11727
11728     case TYPEOF_TYPE:
11729       {
11730         tree type;
11731
11732         ++cp_unevaluated_operand;
11733         ++c_inhibit_evaluation_warnings;
11734
11735         type = tsubst_expr (TYPEOF_TYPE_EXPR (t), args,
11736                             complain, in_decl,
11737                             /*integral_constant_expression_p=*/false);
11738
11739         --cp_unevaluated_operand;
11740         --c_inhibit_evaluation_warnings;
11741
11742         type = finish_typeof (type);
11743         return cp_build_qualified_type_real (type,
11744                                              cp_type_quals (t)
11745                                              | cp_type_quals (type),
11746                                              complain);
11747       }
11748
11749     case DECLTYPE_TYPE:
11750       {
11751         tree type;
11752
11753         ++cp_unevaluated_operand;
11754         ++c_inhibit_evaluation_warnings;
11755
11756         type = tsubst_expr (DECLTYPE_TYPE_EXPR (t), args,
11757                             complain, in_decl,
11758                             /*integral_constant_expression_p=*/false);
11759
11760         --cp_unevaluated_operand;
11761         --c_inhibit_evaluation_warnings;
11762
11763         if (DECLTYPE_FOR_LAMBDA_CAPTURE (t))
11764           type = lambda_capture_field_type (type);
11765         else if (DECLTYPE_FOR_LAMBDA_PROXY (t))
11766           type = lambda_proxy_type (type);
11767         else
11768           type = finish_decltype_type
11769             (type, DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t), complain);
11770         return cp_build_qualified_type_real (type,
11771                                              cp_type_quals (t)
11772                                              | cp_type_quals (type),
11773                                              complain);
11774       }
11775
11776     case UNDERLYING_TYPE:
11777       {
11778         tree type = tsubst (UNDERLYING_TYPE_TYPE (t), args,
11779                             complain, in_decl);
11780         return finish_underlying_type (type);
11781       }
11782
11783     case TYPE_ARGUMENT_PACK:
11784     case NONTYPE_ARGUMENT_PACK:
11785       {
11786         tree r = TYPE_P (t) ? cxx_make_type (code) : make_node (code);
11787         tree packed_out = 
11788           tsubst_template_args (ARGUMENT_PACK_ARGS (t), 
11789                                 args,
11790                                 complain,
11791                                 in_decl);
11792         SET_ARGUMENT_PACK_ARGS (r, packed_out);
11793
11794         /* For template nontype argument packs, also substitute into
11795            the type.  */
11796         if (code == NONTYPE_ARGUMENT_PACK)
11797           TREE_TYPE (r) = tsubst (TREE_TYPE (t), args, complain, in_decl);
11798
11799         return r;
11800       }
11801       break;
11802
11803     case INTEGER_CST:
11804     case REAL_CST:
11805     case STRING_CST:
11806     case PLUS_EXPR:
11807     case MINUS_EXPR:
11808     case NEGATE_EXPR:
11809     case NOP_EXPR:
11810     case INDIRECT_REF:
11811     case ADDR_EXPR:
11812     case CALL_EXPR:
11813     case ARRAY_REF:
11814     case SCOPE_REF:
11815       /* We should use one of the expression tsubsts for these codes.  */
11816       gcc_unreachable ();
11817
11818     default:
11819       sorry ("use of %qs in template", tree_code_name [(int) code]);
11820       return error_mark_node;
11821     }
11822 }
11823
11824 /* Like tsubst_expr for a BASELINK.  OBJECT_TYPE, if non-NULL, is the
11825    type of the expression on the left-hand side of the "." or "->"
11826    operator.  */
11827
11828 static tree
11829 tsubst_baselink (tree baselink, tree object_type,
11830                  tree args, tsubst_flags_t complain, tree in_decl)
11831 {
11832     tree name;
11833     tree qualifying_scope;
11834     tree fns;
11835     tree optype;
11836     tree template_args = 0;
11837     bool template_id_p = false;
11838
11839     /* A baselink indicates a function from a base class.  Both the
11840        BASELINK_ACCESS_BINFO and the base class referenced may
11841        indicate bases of the template class, rather than the
11842        instantiated class.  In addition, lookups that were not
11843        ambiguous before may be ambiguous now.  Therefore, we perform
11844        the lookup again.  */
11845     qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
11846     qualifying_scope = tsubst (qualifying_scope, args,
11847                                complain, in_decl);
11848     fns = BASELINK_FUNCTIONS (baselink);
11849     optype = tsubst (BASELINK_OPTYPE (baselink), args, complain, in_decl);
11850     if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
11851       {
11852         template_id_p = true;
11853         template_args = TREE_OPERAND (fns, 1);
11854         fns = TREE_OPERAND (fns, 0);
11855         if (template_args)
11856           template_args = tsubst_template_args (template_args, args,
11857                                                 complain, in_decl);
11858       }
11859     name = DECL_NAME (get_first_fn (fns));
11860     if (IDENTIFIER_TYPENAME_P (name))
11861       name = mangle_conv_op_name_for_type (optype);
11862     baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
11863     if (!baselink)
11864       return error_mark_node;
11865
11866     /* If lookup found a single function, mark it as used at this
11867        point.  (If it lookup found multiple functions the one selected
11868        later by overload resolution will be marked as used at that
11869        point.)  */
11870     if (BASELINK_P (baselink))
11871       fns = BASELINK_FUNCTIONS (baselink);
11872     if (!template_id_p && !really_overloaded_fn (fns))
11873       mark_used (OVL_CURRENT (fns));
11874
11875     /* Add back the template arguments, if present.  */
11876     if (BASELINK_P (baselink) && template_id_p)
11877       BASELINK_FUNCTIONS (baselink)
11878         = build_nt (TEMPLATE_ID_EXPR,
11879                     BASELINK_FUNCTIONS (baselink),
11880                     template_args);
11881     /* Update the conversion operator type.  */
11882     BASELINK_OPTYPE (baselink) = optype;
11883
11884     if (!object_type)
11885       object_type = current_class_type;
11886     return adjust_result_of_qualified_name_lookup (baselink,
11887                                                    qualifying_scope,
11888                                                    object_type);
11889 }
11890
11891 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID.  DONE is
11892    true if the qualified-id will be a postfix-expression in-and-of
11893    itself; false if more of the postfix-expression follows the
11894    QUALIFIED_ID.  ADDRESS_P is true if the qualified-id is the operand
11895    of "&".  */
11896
11897 static tree
11898 tsubst_qualified_id (tree qualified_id, tree args,
11899                      tsubst_flags_t complain, tree in_decl,
11900                      bool done, bool address_p)
11901 {
11902   tree expr;
11903   tree scope;
11904   tree name;
11905   bool is_template;
11906   tree template_args;
11907
11908   gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
11909
11910   /* Figure out what name to look up.  */
11911   name = TREE_OPERAND (qualified_id, 1);
11912   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
11913     {
11914       is_template = true;
11915       template_args = TREE_OPERAND (name, 1);
11916       if (template_args)
11917         template_args = tsubst_template_args (template_args, args,
11918                                               complain, in_decl);
11919       name = TREE_OPERAND (name, 0);
11920     }
11921   else
11922     {
11923       is_template = false;
11924       template_args = NULL_TREE;
11925     }
11926
11927   /* Substitute into the qualifying scope.  When there are no ARGS, we
11928      are just trying to simplify a non-dependent expression.  In that
11929      case the qualifying scope may be dependent, and, in any case,
11930      substituting will not help.  */
11931   scope = TREE_OPERAND (qualified_id, 0);
11932   if (args)
11933     {
11934       scope = tsubst (scope, args, complain, in_decl);
11935       expr = tsubst_copy (name, args, complain, in_decl);
11936     }
11937   else
11938     expr = name;
11939
11940   if (dependent_scope_p (scope))
11941     {
11942       if (is_template)
11943         expr = build_min_nt (TEMPLATE_ID_EXPR, expr, template_args);
11944       return build_qualified_name (NULL_TREE, scope, expr,
11945                                    QUALIFIED_NAME_IS_TEMPLATE (qualified_id));
11946     }
11947
11948   if (!BASELINK_P (name) && !DECL_P (expr))
11949     {
11950       if (TREE_CODE (expr) == BIT_NOT_EXPR)
11951         {
11952           /* A BIT_NOT_EXPR is used to represent a destructor.  */
11953           if (!check_dtor_name (scope, TREE_OPERAND (expr, 0)))
11954             {
11955               error ("qualifying type %qT does not match destructor name ~%qT",
11956                      scope, TREE_OPERAND (expr, 0));
11957               expr = error_mark_node;
11958             }
11959           else
11960             expr = lookup_qualified_name (scope, complete_dtor_identifier,
11961                                           /*is_type_p=*/0, false);
11962         }
11963       else
11964         expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
11965       if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
11966                      ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
11967         {
11968           if (complain & tf_error)
11969             {
11970               error ("dependent-name %qE is parsed as a non-type, but "
11971                      "instantiation yields a type", qualified_id);
11972               inform (input_location, "say %<typename %E%> if a type is meant", qualified_id);
11973             }
11974           return error_mark_node;
11975         }
11976     }
11977
11978   if (DECL_P (expr))
11979     {
11980       check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
11981                                            scope);
11982       /* Remember that there was a reference to this entity.  */
11983       mark_used (expr);
11984     }
11985
11986   if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
11987     {
11988       if (complain & tf_error)
11989         qualified_name_lookup_error (scope,
11990                                      TREE_OPERAND (qualified_id, 1),
11991                                      expr, input_location);
11992       return error_mark_node;
11993     }
11994
11995   if (is_template)
11996     expr = lookup_template_function (expr, template_args);
11997
11998   if (expr == error_mark_node && complain & tf_error)
11999     qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
12000                                  expr, input_location);
12001   else if (TYPE_P (scope))
12002     {
12003       expr = (adjust_result_of_qualified_name_lookup
12004               (expr, scope, current_class_type));
12005       expr = (finish_qualified_id_expr
12006               (scope, expr, done, address_p && PTRMEM_OK_P (qualified_id),
12007                QUALIFIED_NAME_IS_TEMPLATE (qualified_id),
12008                /*template_arg_p=*/false));
12009     }
12010
12011   /* Expressions do not generally have reference type.  */
12012   if (TREE_CODE (expr) != SCOPE_REF
12013       /* However, if we're about to form a pointer-to-member, we just
12014          want the referenced member referenced.  */
12015       && TREE_CODE (expr) != OFFSET_REF)
12016     expr = convert_from_reference (expr);
12017
12018   return expr;
12019 }
12020
12021 /* Like tsubst, but deals with expressions.  This function just replaces
12022    template parms; to finish processing the resultant expression, use
12023    tsubst_copy_and_build or tsubst_expr.  */
12024
12025 static tree
12026 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
12027 {
12028   enum tree_code code;
12029   tree r;
12030
12031   if (t == NULL_TREE || t == error_mark_node || args == NULL_TREE)
12032     return t;
12033
12034   code = TREE_CODE (t);
12035
12036   switch (code)
12037     {
12038     case PARM_DECL:
12039       r = retrieve_local_specialization (t);
12040
12041       if (r == NULL)
12042         {
12043           tree c;
12044
12045           /* We get here for a use of 'this' in an NSDMI.  */
12046           if (DECL_NAME (t) == this_identifier
12047               && at_function_scope_p ()
12048               && DECL_CONSTRUCTOR_P (current_function_decl))
12049             return current_class_ptr;
12050
12051           /* This can happen for a parameter name used later in a function
12052              declaration (such as in a late-specified return type).  Just
12053              make a dummy decl, since it's only used for its type.  */
12054           gcc_assert (cp_unevaluated_operand != 0);
12055           /* We copy T because want to tsubst the PARM_DECL only,
12056              not the following PARM_DECLs that are chained to T.  */
12057           c = copy_node (t);
12058           r = tsubst_decl (c, args, complain);
12059           /* Give it the template pattern as its context; its true context
12060              hasn't been instantiated yet and this is good enough for
12061              mangling.  */
12062           DECL_CONTEXT (r) = DECL_CONTEXT (t);
12063         }
12064       
12065       if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
12066         r = ARGUMENT_PACK_SELECT_ARG (r);
12067       mark_used (r);
12068       return r;
12069
12070     case CONST_DECL:
12071       {
12072         tree enum_type;
12073         tree v;
12074
12075         if (DECL_TEMPLATE_PARM_P (t))
12076           return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
12077         /* There is no need to substitute into namespace-scope
12078            enumerators.  */
12079         if (DECL_NAMESPACE_SCOPE_P (t))
12080           return t;
12081         /* If ARGS is NULL, then T is known to be non-dependent.  */
12082         if (args == NULL_TREE)
12083           return integral_constant_value (t);
12084
12085         /* Unfortunately, we cannot just call lookup_name here.
12086            Consider:
12087
12088              template <int I> int f() {
12089              enum E { a = I };
12090              struct S { void g() { E e = a; } };
12091              };
12092
12093            When we instantiate f<7>::S::g(), say, lookup_name is not
12094            clever enough to find f<7>::a.  */
12095         enum_type
12096           = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl,
12097                               /*entering_scope=*/0);
12098
12099         for (v = TYPE_VALUES (enum_type);
12100              v != NULL_TREE;
12101              v = TREE_CHAIN (v))
12102           if (TREE_PURPOSE (v) == DECL_NAME (t))
12103             return TREE_VALUE (v);
12104
12105           /* We didn't find the name.  That should never happen; if
12106              name-lookup found it during preliminary parsing, we
12107              should find it again here during instantiation.  */
12108         gcc_unreachable ();
12109       }
12110       return t;
12111
12112     case FIELD_DECL:
12113       if (DECL_CONTEXT (t))
12114         {
12115           tree ctx;
12116
12117           ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
12118                                   /*entering_scope=*/1);
12119           if (ctx != DECL_CONTEXT (t))
12120             {
12121               tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
12122               if (!r)
12123                 {
12124                   if (complain & tf_error)
12125                     error ("using invalid field %qD", t);
12126                   return error_mark_node;
12127                 }
12128               return r;
12129             }
12130         }
12131
12132       return t;
12133
12134     case VAR_DECL:
12135     case FUNCTION_DECL:
12136       if ((DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
12137           || local_variable_p (t))
12138         t = tsubst (t, args, complain, in_decl);
12139       mark_used (t);
12140       return t;
12141
12142     case NAMESPACE_DECL:
12143       return t;
12144
12145     case OVERLOAD:
12146       /* An OVERLOAD will always be a non-dependent overload set; an
12147          overload set from function scope will just be represented with an
12148          IDENTIFIER_NODE, and from class scope with a BASELINK.  */
12149       gcc_assert (!uses_template_parms (t));
12150       return t;
12151
12152     case BASELINK:
12153       return tsubst_baselink (t, current_class_type, args, complain, in_decl);
12154
12155     case TEMPLATE_DECL:
12156       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
12157         return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
12158                        args, complain, in_decl);
12159       else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
12160         return tsubst (t, args, complain, in_decl);
12161       else if (DECL_CLASS_SCOPE_P (t)
12162                && uses_template_parms (DECL_CONTEXT (t)))
12163         {
12164           /* Template template argument like the following example need
12165              special treatment:
12166
12167                template <template <class> class TT> struct C {};
12168                template <class T> struct D {
12169                  template <class U> struct E {};
12170                  C<E> c;                                // #1
12171                };
12172                D<int> d;                                // #2
12173
12174              We are processing the template argument `E' in #1 for
12175              the template instantiation #2.  Originally, `E' is a
12176              TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT.  Now we
12177              have to substitute this with one having context `D<int>'.  */
12178
12179           tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
12180           return lookup_field (context, DECL_NAME(t), 0, false);
12181         }
12182       else
12183         /* Ordinary template template argument.  */
12184         return t;
12185
12186     case CAST_EXPR:
12187     case REINTERPRET_CAST_EXPR:
12188     case CONST_CAST_EXPR:
12189     case STATIC_CAST_EXPR:
12190     case DYNAMIC_CAST_EXPR:
12191     case IMPLICIT_CONV_EXPR:
12192     case CONVERT_EXPR:
12193     case NOP_EXPR:
12194       return build1
12195         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
12196          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
12197
12198     case SIZEOF_EXPR:
12199       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
12200         {
12201
12202           tree expanded;
12203           int len = 0;
12204
12205           ++cp_unevaluated_operand;
12206           ++c_inhibit_evaluation_warnings;
12207           /* We only want to compute the number of arguments.  */
12208           expanded = tsubst_pack_expansion (TREE_OPERAND (t, 0), args,
12209                                             complain, in_decl);
12210           --cp_unevaluated_operand;
12211           --c_inhibit_evaluation_warnings;
12212
12213           if (TREE_CODE (expanded) == TREE_VEC)
12214             len = TREE_VEC_LENGTH (expanded);
12215
12216           if (expanded == error_mark_node)
12217             return error_mark_node;
12218           else if (PACK_EXPANSION_P (expanded)
12219                    || (TREE_CODE (expanded) == TREE_VEC
12220                        && len > 0
12221                        && PACK_EXPANSION_P (TREE_VEC_ELT (expanded, len-1))))
12222             {
12223               if (TREE_CODE (expanded) == TREE_VEC)
12224                 expanded = TREE_VEC_ELT (expanded, len - 1);
12225
12226               if (TYPE_P (expanded))
12227                 return cxx_sizeof_or_alignof_type (expanded, SIZEOF_EXPR, 
12228                                                    complain & tf_error);
12229               else
12230                 return cxx_sizeof_or_alignof_expr (expanded, SIZEOF_EXPR,
12231                                                    complain & tf_error);
12232             }
12233           else
12234             return build_int_cst (size_type_node, len);
12235         }
12236       /* Fall through */
12237
12238     case INDIRECT_REF:
12239     case NEGATE_EXPR:
12240     case TRUTH_NOT_EXPR:
12241     case BIT_NOT_EXPR:
12242     case ADDR_EXPR:
12243     case UNARY_PLUS_EXPR:      /* Unary + */
12244     case ALIGNOF_EXPR:
12245     case AT_ENCODE_EXPR:
12246     case ARROW_EXPR:
12247     case THROW_EXPR:
12248     case TYPEID_EXPR:
12249     case REALPART_EXPR:
12250     case IMAGPART_EXPR:
12251       return build1
12252         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
12253          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
12254
12255     case COMPONENT_REF:
12256       {
12257         tree object;
12258         tree name;
12259
12260         object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
12261         name = TREE_OPERAND (t, 1);
12262         if (TREE_CODE (name) == BIT_NOT_EXPR)
12263           {
12264             name = tsubst_copy (TREE_OPERAND (name, 0), args,
12265                                 complain, in_decl);
12266             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
12267           }
12268         else if (TREE_CODE (name) == SCOPE_REF
12269                  && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
12270           {
12271             tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
12272                                      complain, in_decl);
12273             name = TREE_OPERAND (name, 1);
12274             name = tsubst_copy (TREE_OPERAND (name, 0), args,
12275                                 complain, in_decl);
12276             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
12277             name = build_qualified_name (/*type=*/NULL_TREE,
12278                                          base, name,
12279                                          /*template_p=*/false);
12280           }
12281         else if (BASELINK_P (name))
12282           name = tsubst_baselink (name,
12283                                   non_reference (TREE_TYPE (object)),
12284                                   args, complain,
12285                                   in_decl);
12286         else
12287           name = tsubst_copy (name, args, complain, in_decl);
12288         return build_nt (COMPONENT_REF, object, name, NULL_TREE);
12289       }
12290
12291     case PLUS_EXPR:
12292     case MINUS_EXPR:
12293     case MULT_EXPR:
12294     case TRUNC_DIV_EXPR:
12295     case CEIL_DIV_EXPR:
12296     case FLOOR_DIV_EXPR:
12297     case ROUND_DIV_EXPR:
12298     case EXACT_DIV_EXPR:
12299     case BIT_AND_EXPR:
12300     case BIT_IOR_EXPR:
12301     case BIT_XOR_EXPR:
12302     case TRUNC_MOD_EXPR:
12303     case FLOOR_MOD_EXPR:
12304     case TRUTH_ANDIF_EXPR:
12305     case TRUTH_ORIF_EXPR:
12306     case TRUTH_AND_EXPR:
12307     case TRUTH_OR_EXPR:
12308     case RSHIFT_EXPR:
12309     case LSHIFT_EXPR:
12310     case RROTATE_EXPR:
12311     case LROTATE_EXPR:
12312     case EQ_EXPR:
12313     case NE_EXPR:
12314     case MAX_EXPR:
12315     case MIN_EXPR:
12316     case LE_EXPR:
12317     case GE_EXPR:
12318     case LT_EXPR:
12319     case GT_EXPR:
12320     case COMPOUND_EXPR:
12321     case DOTSTAR_EXPR:
12322     case MEMBER_REF:
12323     case PREDECREMENT_EXPR:
12324     case PREINCREMENT_EXPR:
12325     case POSTDECREMENT_EXPR:
12326     case POSTINCREMENT_EXPR:
12327       return build_nt
12328         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12329          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
12330
12331     case SCOPE_REF:
12332       return build_qualified_name (/*type=*/NULL_TREE,
12333                                    tsubst_copy (TREE_OPERAND (t, 0),
12334                                                 args, complain, in_decl),
12335                                    tsubst_copy (TREE_OPERAND (t, 1),
12336                                                 args, complain, in_decl),
12337                                    QUALIFIED_NAME_IS_TEMPLATE (t));
12338
12339     case ARRAY_REF:
12340       return build_nt
12341         (ARRAY_REF,
12342          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12343          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
12344          NULL_TREE, NULL_TREE);
12345
12346     case CALL_EXPR:
12347       {
12348         int n = VL_EXP_OPERAND_LENGTH (t);
12349         tree result = build_vl_exp (CALL_EXPR, n);
12350         int i;
12351         for (i = 0; i < n; i++)
12352           TREE_OPERAND (t, i) = tsubst_copy (TREE_OPERAND (t, i), args,
12353                                              complain, in_decl);
12354         return result;
12355       }
12356
12357     case COND_EXPR:
12358     case MODOP_EXPR:
12359     case PSEUDO_DTOR_EXPR:
12360       {
12361         r = build_nt
12362           (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12363            tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
12364            tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
12365         TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
12366         return r;
12367       }
12368
12369     case NEW_EXPR:
12370       {
12371         r = build_nt
12372         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12373          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
12374          tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
12375         NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
12376         return r;
12377       }
12378
12379     case DELETE_EXPR:
12380       {
12381         r = build_nt
12382         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12383          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
12384         DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
12385         DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
12386         return r;
12387       }
12388
12389     case TEMPLATE_ID_EXPR:
12390       {
12391         /* Substituted template arguments */
12392         tree fn = TREE_OPERAND (t, 0);
12393         tree targs = TREE_OPERAND (t, 1);
12394
12395         fn = tsubst_copy (fn, args, complain, in_decl);
12396         if (targs)
12397           targs = tsubst_template_args (targs, args, complain, in_decl);
12398
12399         return lookup_template_function (fn, targs);
12400       }
12401
12402     case TREE_LIST:
12403       {
12404         tree purpose, value, chain;
12405
12406         if (t == void_list_node)
12407           return t;
12408
12409         purpose = TREE_PURPOSE (t);
12410         if (purpose)
12411           purpose = tsubst_copy (purpose, args, complain, in_decl);
12412         value = TREE_VALUE (t);
12413         if (value)
12414           value = tsubst_copy (value, args, complain, in_decl);
12415         chain = TREE_CHAIN (t);
12416         if (chain && chain != void_type_node)
12417           chain = tsubst_copy (chain, args, complain, in_decl);
12418         if (purpose == TREE_PURPOSE (t)
12419             && value == TREE_VALUE (t)
12420             && chain == TREE_CHAIN (t))
12421           return t;
12422         return tree_cons (purpose, value, chain);
12423       }
12424
12425     case RECORD_TYPE:
12426     case UNION_TYPE:
12427     case ENUMERAL_TYPE:
12428     case INTEGER_TYPE:
12429     case TEMPLATE_TYPE_PARM:
12430     case TEMPLATE_TEMPLATE_PARM:
12431     case BOUND_TEMPLATE_TEMPLATE_PARM:
12432     case TEMPLATE_PARM_INDEX:
12433     case POINTER_TYPE:
12434     case REFERENCE_TYPE:
12435     case OFFSET_TYPE:
12436     case FUNCTION_TYPE:
12437     case METHOD_TYPE:
12438     case ARRAY_TYPE:
12439     case TYPENAME_TYPE:
12440     case UNBOUND_CLASS_TEMPLATE:
12441     case TYPEOF_TYPE:
12442     case DECLTYPE_TYPE:
12443     case TYPE_DECL:
12444       return tsubst (t, args, complain, in_decl);
12445
12446     case IDENTIFIER_NODE:
12447       if (IDENTIFIER_TYPENAME_P (t))
12448         {
12449           tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
12450           return mangle_conv_op_name_for_type (new_type);
12451         }
12452       else
12453         return t;
12454
12455     case CONSTRUCTOR:
12456       /* This is handled by tsubst_copy_and_build.  */
12457       gcc_unreachable ();
12458
12459     case VA_ARG_EXPR:
12460       return build_x_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
12461                                           in_decl),
12462                              tsubst (TREE_TYPE (t), args, complain, in_decl));
12463
12464     case CLEANUP_POINT_EXPR:
12465       /* We shouldn't have built any of these during initial template
12466          generation.  Instead, they should be built during instantiation
12467          in response to the saved STMT_IS_FULL_EXPR_P setting.  */
12468       gcc_unreachable ();
12469
12470     case OFFSET_REF:
12471       r = build2
12472         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
12473          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12474          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
12475       PTRMEM_OK_P (r) = PTRMEM_OK_P (t);
12476       mark_used (TREE_OPERAND (r, 1));
12477       return r;
12478
12479     case EXPR_PACK_EXPANSION:
12480       error ("invalid use of pack expansion expression");
12481       return error_mark_node;
12482
12483     case NONTYPE_ARGUMENT_PACK:
12484       error ("use %<...%> to expand argument pack");
12485       return error_mark_node;
12486
12487     case INTEGER_CST:
12488     case REAL_CST:
12489     case STRING_CST:
12490     case COMPLEX_CST:
12491       {
12492         /* Instantiate any typedefs in the type.  */
12493         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
12494         r = fold_convert (type, t);
12495         gcc_assert (TREE_CODE (r) == code);
12496         return r;
12497       }
12498
12499     case PTRMEM_CST:
12500       /* These can sometimes show up in a partial instantiation, but never
12501          involve template parms.  */
12502       gcc_assert (!uses_template_parms (t));
12503       return t;
12504
12505     default:
12506       /* We shouldn't get here, but keep going if !ENABLE_CHECKING.  */
12507       gcc_checking_assert (false);
12508       return t;
12509     }
12510 }
12511
12512 /* Like tsubst_copy, but specifically for OpenMP clauses.  */
12513
12514 static tree
12515 tsubst_omp_clauses (tree clauses, tree args, tsubst_flags_t complain,
12516                     tree in_decl)
12517 {
12518   tree new_clauses = NULL, nc, oc;
12519
12520   for (oc = clauses; oc ; oc = OMP_CLAUSE_CHAIN (oc))
12521     {
12522       nc = copy_node (oc);
12523       OMP_CLAUSE_CHAIN (nc) = new_clauses;
12524       new_clauses = nc;
12525
12526       switch (OMP_CLAUSE_CODE (nc))
12527         {
12528         case OMP_CLAUSE_LASTPRIVATE:
12529           if (OMP_CLAUSE_LASTPRIVATE_STMT (oc))
12530             {
12531               OMP_CLAUSE_LASTPRIVATE_STMT (nc) = push_stmt_list ();
12532               tsubst_expr (OMP_CLAUSE_LASTPRIVATE_STMT (oc), args, complain,
12533                            in_decl, /*integral_constant_expression_p=*/false);
12534               OMP_CLAUSE_LASTPRIVATE_STMT (nc)
12535                 = pop_stmt_list (OMP_CLAUSE_LASTPRIVATE_STMT (nc));
12536             }
12537           /* FALLTHRU */
12538         case OMP_CLAUSE_PRIVATE:
12539         case OMP_CLAUSE_SHARED:
12540         case OMP_CLAUSE_FIRSTPRIVATE:
12541         case OMP_CLAUSE_REDUCTION:
12542         case OMP_CLAUSE_COPYIN:
12543         case OMP_CLAUSE_COPYPRIVATE:
12544         case OMP_CLAUSE_IF:
12545         case OMP_CLAUSE_NUM_THREADS:
12546         case OMP_CLAUSE_SCHEDULE:
12547         case OMP_CLAUSE_COLLAPSE:
12548         case OMP_CLAUSE_FINAL:
12549           OMP_CLAUSE_OPERAND (nc, 0)
12550             = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain, 
12551                            in_decl, /*integral_constant_expression_p=*/false);
12552           break;
12553         case OMP_CLAUSE_NOWAIT:
12554         case OMP_CLAUSE_ORDERED:
12555         case OMP_CLAUSE_DEFAULT:
12556         case OMP_CLAUSE_UNTIED:
12557         case OMP_CLAUSE_MERGEABLE:
12558           break;
12559         default:
12560           gcc_unreachable ();
12561         }
12562     }
12563
12564   return finish_omp_clauses (nreverse (new_clauses));
12565 }
12566
12567 /* Like tsubst_copy_and_build, but unshare TREE_LIST nodes.  */
12568
12569 static tree
12570 tsubst_copy_asm_operands (tree t, tree args, tsubst_flags_t complain,
12571                           tree in_decl)
12572 {
12573 #define RECUR(t) tsubst_copy_asm_operands (t, args, complain, in_decl)
12574
12575   tree purpose, value, chain;
12576
12577   if (t == NULL)
12578     return t;
12579
12580   if (TREE_CODE (t) != TREE_LIST)
12581     return tsubst_copy_and_build (t, args, complain, in_decl,
12582                                   /*function_p=*/false,
12583                                   /*integral_constant_expression_p=*/false);
12584
12585   if (t == void_list_node)
12586     return t;
12587
12588   purpose = TREE_PURPOSE (t);
12589   if (purpose)
12590     purpose = RECUR (purpose);
12591   value = TREE_VALUE (t);
12592   if (value && TREE_CODE (value) != LABEL_DECL)
12593     value = RECUR (value);
12594   chain = TREE_CHAIN (t);
12595   if (chain && chain != void_type_node)
12596     chain = RECUR (chain);
12597   return tree_cons (purpose, value, chain);
12598 #undef RECUR
12599 }
12600
12601 /* Substitute one OMP_FOR iterator.  */
12602
12603 static void
12604 tsubst_omp_for_iterator (tree t, int i, tree declv, tree initv,
12605                          tree condv, tree incrv, tree *clauses,
12606                          tree args, tsubst_flags_t complain, tree in_decl,
12607                          bool integral_constant_expression_p)
12608 {
12609 #define RECUR(NODE)                             \
12610   tsubst_expr ((NODE), args, complain, in_decl, \
12611                integral_constant_expression_p)
12612   tree decl, init, cond, incr, auto_node;
12613
12614   init = TREE_VEC_ELT (OMP_FOR_INIT (t), i);
12615   gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
12616   decl = RECUR (TREE_OPERAND (init, 0));
12617   init = TREE_OPERAND (init, 1);
12618   auto_node = type_uses_auto (TREE_TYPE (decl));
12619   if (auto_node && init)
12620     {
12621       tree init_expr = init;
12622       if (TREE_CODE (init_expr) == DECL_EXPR)
12623         init_expr = DECL_INITIAL (DECL_EXPR_DECL (init_expr));
12624       init_expr = RECUR (init_expr);
12625       TREE_TYPE (decl)
12626         = do_auto_deduction (TREE_TYPE (decl), init_expr, auto_node);
12627     }
12628   gcc_assert (!type_dependent_expression_p (decl));
12629
12630   if (!CLASS_TYPE_P (TREE_TYPE (decl)))
12631     {
12632       cond = RECUR (TREE_VEC_ELT (OMP_FOR_COND (t), i));
12633       incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
12634       if (TREE_CODE (incr) == MODIFY_EXPR)
12635         incr = build_x_modify_expr (RECUR (TREE_OPERAND (incr, 0)), NOP_EXPR,
12636                                     RECUR (TREE_OPERAND (incr, 1)),
12637                                     complain);
12638       else
12639         incr = RECUR (incr);
12640       TREE_VEC_ELT (declv, i) = decl;
12641       TREE_VEC_ELT (initv, i) = init;
12642       TREE_VEC_ELT (condv, i) = cond;
12643       TREE_VEC_ELT (incrv, i) = incr;
12644       return;
12645     }
12646
12647   if (init && TREE_CODE (init) != DECL_EXPR)
12648     {
12649       tree c;
12650       for (c = *clauses; c ; c = OMP_CLAUSE_CHAIN (c))
12651         {
12652           if ((OMP_CLAUSE_CODE (c) == OMP_CLAUSE_PRIVATE
12653                || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE)
12654               && OMP_CLAUSE_DECL (c) == decl)
12655             break;
12656           else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FIRSTPRIVATE
12657                    && OMP_CLAUSE_DECL (c) == decl)
12658             error ("iteration variable %qD should not be firstprivate", decl);
12659           else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION
12660                    && OMP_CLAUSE_DECL (c) == decl)
12661             error ("iteration variable %qD should not be reduction", decl);
12662         }
12663       if (c == NULL)
12664         {
12665           c = build_omp_clause (input_location, OMP_CLAUSE_PRIVATE);
12666           OMP_CLAUSE_DECL (c) = decl;
12667           c = finish_omp_clauses (c);
12668           if (c)
12669             {
12670               OMP_CLAUSE_CHAIN (c) = *clauses;
12671               *clauses = c;
12672             }
12673         }
12674     }
12675   cond = TREE_VEC_ELT (OMP_FOR_COND (t), i);
12676   if (COMPARISON_CLASS_P (cond))
12677     cond = build2 (TREE_CODE (cond), boolean_type_node,
12678                    RECUR (TREE_OPERAND (cond, 0)),
12679                    RECUR (TREE_OPERAND (cond, 1)));
12680   else
12681     cond = RECUR (cond);
12682   incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
12683   switch (TREE_CODE (incr))
12684     {
12685     case PREINCREMENT_EXPR:
12686     case PREDECREMENT_EXPR:
12687     case POSTINCREMENT_EXPR:
12688     case POSTDECREMENT_EXPR:
12689       incr = build2 (TREE_CODE (incr), TREE_TYPE (decl),
12690                      RECUR (TREE_OPERAND (incr, 0)), NULL_TREE);
12691       break;
12692     case MODIFY_EXPR:
12693       if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
12694           || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
12695         {
12696           tree rhs = TREE_OPERAND (incr, 1);
12697           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl),
12698                          RECUR (TREE_OPERAND (incr, 0)),
12699                          build2 (TREE_CODE (rhs), TREE_TYPE (decl),
12700                                  RECUR (TREE_OPERAND (rhs, 0)),
12701                                  RECUR (TREE_OPERAND (rhs, 1))));
12702         }
12703       else
12704         incr = RECUR (incr);
12705       break;
12706     case MODOP_EXPR:
12707       if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
12708           || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
12709         {
12710           tree lhs = RECUR (TREE_OPERAND (incr, 0));
12711           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl), lhs,
12712                          build2 (TREE_CODE (TREE_OPERAND (incr, 1)),
12713                                  TREE_TYPE (decl), lhs,
12714                                  RECUR (TREE_OPERAND (incr, 2))));
12715         }
12716       else if (TREE_CODE (TREE_OPERAND (incr, 1)) == NOP_EXPR
12717                && (TREE_CODE (TREE_OPERAND (incr, 2)) == PLUS_EXPR
12718                    || (TREE_CODE (TREE_OPERAND (incr, 2)) == MINUS_EXPR)))
12719         {
12720           tree rhs = TREE_OPERAND (incr, 2);
12721           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl),
12722                          RECUR (TREE_OPERAND (incr, 0)),
12723                          build2 (TREE_CODE (rhs), TREE_TYPE (decl),
12724                                  RECUR (TREE_OPERAND (rhs, 0)),
12725                                  RECUR (TREE_OPERAND (rhs, 1))));
12726         }
12727       else
12728         incr = RECUR (incr);
12729       break;
12730     default:
12731       incr = RECUR (incr);
12732       break;
12733     }
12734
12735   TREE_VEC_ELT (declv, i) = decl;
12736   TREE_VEC_ELT (initv, i) = init;
12737   TREE_VEC_ELT (condv, i) = cond;
12738   TREE_VEC_ELT (incrv, i) = incr;
12739 #undef RECUR
12740 }
12741
12742 /* Like tsubst_copy for expressions, etc. but also does semantic
12743    processing.  */
12744
12745 static tree
12746 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
12747              bool integral_constant_expression_p)
12748 {
12749 #define RECUR(NODE)                             \
12750   tsubst_expr ((NODE), args, complain, in_decl, \
12751                integral_constant_expression_p)
12752
12753   tree stmt, tmp;
12754
12755   if (t == NULL_TREE || t == error_mark_node)
12756     return t;
12757
12758   if (EXPR_HAS_LOCATION (t))
12759     input_location = EXPR_LOCATION (t);
12760   if (STATEMENT_CODE_P (TREE_CODE (t)))
12761     current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
12762
12763   switch (TREE_CODE (t))
12764     {
12765     case STATEMENT_LIST:
12766       {
12767         tree_stmt_iterator i;
12768         for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
12769           RECUR (tsi_stmt (i));
12770         break;
12771       }
12772
12773     case CTOR_INITIALIZER:
12774       finish_mem_initializers (tsubst_initializer_list
12775                                (TREE_OPERAND (t, 0), args));
12776       break;
12777
12778     case RETURN_EXPR:
12779       finish_return_stmt (RECUR (TREE_OPERAND (t, 0)));
12780       break;
12781
12782     case EXPR_STMT:
12783       tmp = RECUR (EXPR_STMT_EXPR (t));
12784       if (EXPR_STMT_STMT_EXPR_RESULT (t))
12785         finish_stmt_expr_expr (tmp, cur_stmt_expr);
12786       else
12787         finish_expr_stmt (tmp);
12788       break;
12789
12790     case USING_STMT:
12791       do_using_directive (USING_STMT_NAMESPACE (t));
12792       break;
12793
12794     case DECL_EXPR:
12795       {
12796         tree decl, pattern_decl;
12797         tree init;
12798
12799         pattern_decl = decl = DECL_EXPR_DECL (t);
12800         if (TREE_CODE (decl) == LABEL_DECL)
12801           finish_label_decl (DECL_NAME (decl));
12802         else if (TREE_CODE (decl) == USING_DECL)
12803           {
12804             tree scope = USING_DECL_SCOPE (decl);
12805             tree name = DECL_NAME (decl);
12806             tree decl;
12807
12808             scope = tsubst (scope, args, complain, in_decl);
12809             decl = lookup_qualified_name (scope, name,
12810                                           /*is_type_p=*/false,
12811                                           /*complain=*/false);
12812             if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
12813               qualified_name_lookup_error (scope, name, decl, input_location);
12814             else
12815               do_local_using_decl (decl, scope, name);
12816           }
12817         else
12818           {
12819             init = DECL_INITIAL (decl);
12820             decl = tsubst (decl, args, complain, in_decl);
12821             if (decl != error_mark_node)
12822               {
12823                 /* By marking the declaration as instantiated, we avoid
12824                    trying to instantiate it.  Since instantiate_decl can't
12825                    handle local variables, and since we've already done
12826                    all that needs to be done, that's the right thing to
12827                    do.  */
12828                 if (TREE_CODE (decl) == VAR_DECL)
12829                   DECL_TEMPLATE_INSTANTIATED (decl) = 1;
12830                 if (TREE_CODE (decl) == VAR_DECL
12831                     && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
12832                   /* Anonymous aggregates are a special case.  */
12833                   finish_anon_union (decl);
12834                 else if (is_capture_proxy (DECL_EXPR_DECL (t)))
12835                   {
12836                     DECL_CONTEXT (decl) = current_function_decl;
12837                     insert_capture_proxy (decl);
12838                   }
12839                 else
12840                   {
12841                     int const_init = false;
12842                     maybe_push_decl (decl);
12843                     if (TREE_CODE (decl) == VAR_DECL
12844                         && DECL_PRETTY_FUNCTION_P (decl))
12845                       {
12846                         /* For __PRETTY_FUNCTION__ we have to adjust the
12847                            initializer.  */
12848                         const char *const name
12849                           = cxx_printable_name (current_function_decl, 2);
12850                         init = cp_fname_init (name, &TREE_TYPE (decl));
12851                       }
12852                     else
12853                       {
12854                         tree t = RECUR (init);
12855
12856                         if (init && !t)
12857                           {
12858                             /* If we had an initializer but it
12859                                instantiated to nothing,
12860                                value-initialize the object.  This will
12861                                only occur when the initializer was a
12862                                pack expansion where the parameter packs
12863                                used in that expansion were of length
12864                                zero.  */
12865                             init = build_value_init (TREE_TYPE (decl),
12866                                                      complain);
12867                             if (TREE_CODE (init) == AGGR_INIT_EXPR)
12868                               init = get_target_expr_sfinae (init, complain);
12869                           }
12870                         else
12871                           init = t;
12872                       }
12873
12874                     if (TREE_CODE (decl) == VAR_DECL)
12875                       const_init = (DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P
12876                                     (pattern_decl));
12877                     cp_finish_decl (decl, init, const_init, NULL_TREE, 0);
12878                   }
12879               }
12880           }
12881
12882         /* A DECL_EXPR can also be used as an expression, in the condition
12883            clause of an if/for/while construct.  */
12884         return decl;
12885       }
12886
12887     case FOR_STMT:
12888       stmt = begin_for_stmt (NULL_TREE, NULL_TREE);
12889       RECUR (FOR_INIT_STMT (t));
12890       finish_for_init_stmt (stmt);
12891       tmp = RECUR (FOR_COND (t));
12892       finish_for_cond (tmp, stmt);
12893       tmp = RECUR (FOR_EXPR (t));
12894       finish_for_expr (tmp, stmt);
12895       RECUR (FOR_BODY (t));
12896       finish_for_stmt (stmt);
12897       break;
12898
12899     case RANGE_FOR_STMT:
12900       {
12901         tree decl, expr;
12902         stmt = begin_for_stmt (NULL_TREE, NULL_TREE);
12903         decl = RANGE_FOR_DECL (t);
12904         decl = tsubst (decl, args, complain, in_decl);
12905         maybe_push_decl (decl);
12906         expr = RECUR (RANGE_FOR_EXPR (t));
12907         stmt = cp_convert_range_for (stmt, decl, expr);
12908         RECUR (RANGE_FOR_BODY (t));
12909         finish_for_stmt (stmt);
12910       }
12911       break;
12912
12913     case WHILE_STMT:
12914       stmt = begin_while_stmt ();
12915       tmp = RECUR (WHILE_COND (t));
12916       finish_while_stmt_cond (tmp, stmt);
12917       RECUR (WHILE_BODY (t));
12918       finish_while_stmt (stmt);
12919       break;
12920
12921     case DO_STMT:
12922       stmt = begin_do_stmt ();
12923       RECUR (DO_BODY (t));
12924       finish_do_body (stmt);
12925       tmp = RECUR (DO_COND (t));
12926       finish_do_stmt (tmp, stmt);
12927       break;
12928
12929     case IF_STMT:
12930       stmt = begin_if_stmt ();
12931       tmp = RECUR (IF_COND (t));
12932       finish_if_stmt_cond (tmp, stmt);
12933       RECUR (THEN_CLAUSE (t));
12934       finish_then_clause (stmt);
12935
12936       if (ELSE_CLAUSE (t))
12937         {
12938           begin_else_clause (stmt);
12939           RECUR (ELSE_CLAUSE (t));
12940           finish_else_clause (stmt);
12941         }
12942
12943       finish_if_stmt (stmt);
12944       break;
12945
12946     case BIND_EXPR:
12947       if (BIND_EXPR_BODY_BLOCK (t))
12948         stmt = begin_function_body ();
12949       else
12950         stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
12951                                     ? BCS_TRY_BLOCK : 0);
12952
12953       RECUR (BIND_EXPR_BODY (t));
12954
12955       if (BIND_EXPR_BODY_BLOCK (t))
12956         finish_function_body (stmt);
12957       else
12958         finish_compound_stmt (stmt);
12959       break;
12960
12961     case BREAK_STMT:
12962       finish_break_stmt ();
12963       break;
12964
12965     case CONTINUE_STMT:
12966       finish_continue_stmt ();
12967       break;
12968
12969     case SWITCH_STMT:
12970       stmt = begin_switch_stmt ();
12971       tmp = RECUR (SWITCH_STMT_COND (t));
12972       finish_switch_cond (tmp, stmt);
12973       RECUR (SWITCH_STMT_BODY (t));
12974       finish_switch_stmt (stmt);
12975       break;
12976
12977     case CASE_LABEL_EXPR:
12978       finish_case_label (EXPR_LOCATION (t),
12979                          RECUR (CASE_LOW (t)),
12980                          RECUR (CASE_HIGH (t)));
12981       break;
12982
12983     case LABEL_EXPR:
12984       {
12985         tree decl = LABEL_EXPR_LABEL (t);
12986         tree label;
12987
12988         label = finish_label_stmt (DECL_NAME (decl));
12989         if (DECL_ATTRIBUTES (decl) != NULL_TREE)
12990           cplus_decl_attributes (&label, DECL_ATTRIBUTES (decl), 0);
12991       }
12992       break;
12993
12994     case GOTO_EXPR:
12995       tmp = GOTO_DESTINATION (t);
12996       if (TREE_CODE (tmp) != LABEL_DECL)
12997         /* Computed goto's must be tsubst'd into.  On the other hand,
12998            non-computed gotos must not be; the identifier in question
12999            will have no binding.  */
13000         tmp = RECUR (tmp);
13001       else
13002         tmp = DECL_NAME (tmp);
13003       finish_goto_stmt (tmp);
13004       break;
13005
13006     case ASM_EXPR:
13007       tmp = finish_asm_stmt
13008         (ASM_VOLATILE_P (t),
13009          RECUR (ASM_STRING (t)),
13010          tsubst_copy_asm_operands (ASM_OUTPUTS (t), args, complain, in_decl),
13011          tsubst_copy_asm_operands (ASM_INPUTS (t), args, complain, in_decl),
13012          tsubst_copy_asm_operands (ASM_CLOBBERS (t), args, complain, in_decl),
13013          tsubst_copy_asm_operands (ASM_LABELS (t), args, complain, in_decl));
13014       {
13015         tree asm_expr = tmp;
13016         if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
13017           asm_expr = TREE_OPERAND (asm_expr, 0);
13018         ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
13019       }
13020       break;
13021
13022     case TRY_BLOCK:
13023       if (CLEANUP_P (t))
13024         {
13025           stmt = begin_try_block ();
13026           RECUR (TRY_STMTS (t));
13027           finish_cleanup_try_block (stmt);
13028           finish_cleanup (RECUR (TRY_HANDLERS (t)), stmt);
13029         }
13030       else
13031         {
13032           tree compound_stmt = NULL_TREE;
13033
13034           if (FN_TRY_BLOCK_P (t))
13035             stmt = begin_function_try_block (&compound_stmt);
13036           else
13037             stmt = begin_try_block ();
13038
13039           RECUR (TRY_STMTS (t));
13040
13041           if (FN_TRY_BLOCK_P (t))
13042             finish_function_try_block (stmt);
13043           else
13044             finish_try_block (stmt);
13045
13046           RECUR (TRY_HANDLERS (t));
13047           if (FN_TRY_BLOCK_P (t))
13048             finish_function_handler_sequence (stmt, compound_stmt);
13049           else
13050             finish_handler_sequence (stmt);
13051         }
13052       break;
13053
13054     case HANDLER:
13055       {
13056         tree decl = HANDLER_PARMS (t);
13057
13058         if (decl)
13059           {
13060             decl = tsubst (decl, args, complain, in_decl);
13061             /* Prevent instantiate_decl from trying to instantiate
13062                this variable.  We've already done all that needs to be
13063                done.  */
13064             if (decl != error_mark_node)
13065               DECL_TEMPLATE_INSTANTIATED (decl) = 1;
13066           }
13067         stmt = begin_handler ();
13068         finish_handler_parms (decl, stmt);
13069         RECUR (HANDLER_BODY (t));
13070         finish_handler (stmt);
13071       }
13072       break;
13073
13074     case TAG_DEFN:
13075       tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
13076       break;
13077
13078     case STATIC_ASSERT:
13079       {
13080         tree condition = 
13081           tsubst_expr (STATIC_ASSERT_CONDITION (t), 
13082                        args,
13083                        complain, in_decl,
13084                        /*integral_constant_expression_p=*/true);
13085         finish_static_assert (condition,
13086                               STATIC_ASSERT_MESSAGE (t),
13087                               STATIC_ASSERT_SOURCE_LOCATION (t),
13088                               /*member_p=*/false);
13089       }
13090       break;
13091
13092     case OMP_PARALLEL:
13093       tmp = tsubst_omp_clauses (OMP_PARALLEL_CLAUSES (t),
13094                                 args, complain, in_decl);
13095       stmt = begin_omp_parallel ();
13096       RECUR (OMP_PARALLEL_BODY (t));
13097       OMP_PARALLEL_COMBINED (finish_omp_parallel (tmp, stmt))
13098         = OMP_PARALLEL_COMBINED (t);
13099       break;
13100
13101     case OMP_TASK:
13102       tmp = tsubst_omp_clauses (OMP_TASK_CLAUSES (t),
13103                                 args, complain, in_decl);
13104       stmt = begin_omp_task ();
13105       RECUR (OMP_TASK_BODY (t));
13106       finish_omp_task (tmp, stmt);
13107       break;
13108
13109     case OMP_FOR:
13110       {
13111         tree clauses, body, pre_body;
13112         tree declv, initv, condv, incrv;
13113         int i;
13114
13115         clauses = tsubst_omp_clauses (OMP_FOR_CLAUSES (t),
13116                                       args, complain, in_decl);
13117         declv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
13118         initv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
13119         condv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
13120         incrv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
13121
13122         for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INIT (t)); i++)
13123           tsubst_omp_for_iterator (t, i, declv, initv, condv, incrv,
13124                                    &clauses, args, complain, in_decl,
13125                                    integral_constant_expression_p);
13126
13127         stmt = begin_omp_structured_block ();
13128
13129         for (i = 0; i < TREE_VEC_LENGTH (initv); i++)
13130           if (TREE_VEC_ELT (initv, i) == NULL
13131               || TREE_CODE (TREE_VEC_ELT (initv, i)) != DECL_EXPR)
13132             TREE_VEC_ELT (initv, i) = RECUR (TREE_VEC_ELT (initv, i));
13133           else if (CLASS_TYPE_P (TREE_TYPE (TREE_VEC_ELT (initv, i))))
13134             {
13135               tree init = RECUR (TREE_VEC_ELT (initv, i));
13136               gcc_assert (init == TREE_VEC_ELT (declv, i));
13137               TREE_VEC_ELT (initv, i) = NULL_TREE;
13138             }
13139           else
13140             {
13141               tree decl_expr = TREE_VEC_ELT (initv, i);
13142               tree init = DECL_INITIAL (DECL_EXPR_DECL (decl_expr));
13143               gcc_assert (init != NULL);
13144               TREE_VEC_ELT (initv, i) = RECUR (init);
13145               DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = NULL;
13146               RECUR (decl_expr);
13147               DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = init;
13148             }
13149
13150         pre_body = push_stmt_list ();
13151         RECUR (OMP_FOR_PRE_BODY (t));
13152         pre_body = pop_stmt_list (pre_body);
13153
13154         body = push_stmt_list ();
13155         RECUR (OMP_FOR_BODY (t));
13156         body = pop_stmt_list (body);
13157
13158         t = finish_omp_for (EXPR_LOCATION (t), declv, initv, condv, incrv,
13159                             body, pre_body, clauses);
13160
13161         add_stmt (finish_omp_structured_block (stmt));
13162       }
13163       break;
13164
13165     case OMP_SECTIONS:
13166     case OMP_SINGLE:
13167       tmp = tsubst_omp_clauses (OMP_CLAUSES (t), args, complain, in_decl);
13168       stmt = push_stmt_list ();
13169       RECUR (OMP_BODY (t));
13170       stmt = pop_stmt_list (stmt);
13171
13172       t = copy_node (t);
13173       OMP_BODY (t) = stmt;
13174       OMP_CLAUSES (t) = tmp;
13175       add_stmt (t);
13176       break;
13177
13178     case OMP_SECTION:
13179     case OMP_CRITICAL:
13180     case OMP_MASTER:
13181     case OMP_ORDERED:
13182       stmt = push_stmt_list ();
13183       RECUR (OMP_BODY (t));
13184       stmt = pop_stmt_list (stmt);
13185
13186       t = copy_node (t);
13187       OMP_BODY (t) = stmt;
13188       add_stmt (t);
13189       break;
13190
13191     case OMP_ATOMIC:
13192       gcc_assert (OMP_ATOMIC_DEPENDENT_P (t));
13193       if (TREE_CODE (TREE_OPERAND (t, 1)) != MODIFY_EXPR)
13194         {
13195           tree op1 = TREE_OPERAND (t, 1);
13196           tree rhs1 = NULL_TREE;
13197           tree lhs, rhs;
13198           if (TREE_CODE (op1) == COMPOUND_EXPR)
13199             {
13200               rhs1 = RECUR (TREE_OPERAND (op1, 0));
13201               op1 = TREE_OPERAND (op1, 1);
13202             }
13203           lhs = RECUR (TREE_OPERAND (op1, 0));
13204           rhs = RECUR (TREE_OPERAND (op1, 1));
13205           finish_omp_atomic (OMP_ATOMIC, TREE_CODE (op1), lhs, rhs,
13206                              NULL_TREE, NULL_TREE, rhs1);
13207         }
13208       else
13209         {
13210           tree op1 = TREE_OPERAND (t, 1);
13211           tree v = NULL_TREE, lhs, rhs = NULL_TREE, lhs1 = NULL_TREE;
13212           tree rhs1 = NULL_TREE;
13213           enum tree_code code = TREE_CODE (TREE_OPERAND (op1, 1));
13214           enum tree_code opcode = NOP_EXPR;
13215           if (code == OMP_ATOMIC_READ)
13216             {
13217               v = RECUR (TREE_OPERAND (op1, 0));
13218               lhs = RECUR (TREE_OPERAND (TREE_OPERAND (op1, 1), 0));
13219             }
13220           else if (code == OMP_ATOMIC_CAPTURE_OLD
13221                    || code == OMP_ATOMIC_CAPTURE_NEW)
13222             {
13223               tree op11 = TREE_OPERAND (TREE_OPERAND (op1, 1), 1);
13224               v = RECUR (TREE_OPERAND (op1, 0));
13225               lhs1 = RECUR (TREE_OPERAND (TREE_OPERAND (op1, 1), 0));
13226               if (TREE_CODE (op11) == COMPOUND_EXPR)
13227                 {
13228                   rhs1 = RECUR (TREE_OPERAND (op11, 0));
13229                   op11 = TREE_OPERAND (op11, 1);
13230                 }
13231               lhs = RECUR (TREE_OPERAND (op11, 0));
13232               rhs = RECUR (TREE_OPERAND (op11, 1));
13233               opcode = TREE_CODE (op11);
13234             }
13235           else
13236             {
13237               code = OMP_ATOMIC;
13238               lhs = RECUR (TREE_OPERAND (op1, 0));
13239               rhs = RECUR (TREE_OPERAND (op1, 1));
13240             }
13241           finish_omp_atomic (code, opcode, lhs, rhs, v, lhs1, rhs1);
13242         }
13243       break;
13244
13245     case TRANSACTION_EXPR:
13246       {
13247         int flags = 0;
13248         flags |= (TRANSACTION_EXPR_OUTER (t) ? TM_STMT_ATTR_OUTER : 0);
13249         flags |= (TRANSACTION_EXPR_RELAXED (t) ? TM_STMT_ATTR_RELAXED : 0);
13250
13251         if (TRANSACTION_EXPR_IS_STMT (t))
13252           {
13253             tree body = TRANSACTION_EXPR_BODY (t);
13254             tree noex = NULL_TREE;
13255             if (TREE_CODE (body) == MUST_NOT_THROW_EXPR)
13256               {
13257                 noex = MUST_NOT_THROW_COND (body);
13258                 if (noex == NULL_TREE)
13259                   noex = boolean_true_node;
13260                 body = TREE_OPERAND (body, 0);
13261               }
13262             stmt = begin_transaction_stmt (input_location, NULL, flags);
13263             RECUR (body);
13264             finish_transaction_stmt (stmt, NULL, flags, RECUR (noex));
13265           }
13266         else
13267           {
13268             stmt = build_transaction_expr (EXPR_LOCATION (t),
13269                                            RECUR (TRANSACTION_EXPR_BODY (t)),
13270                                            flags, NULL_TREE);
13271             return stmt;
13272           }
13273       }
13274       break;
13275
13276     case MUST_NOT_THROW_EXPR:
13277       return build_must_not_throw_expr (RECUR (TREE_OPERAND (t, 0)),
13278                                         RECUR (MUST_NOT_THROW_COND (t)));
13279
13280     case EXPR_PACK_EXPANSION:
13281       error ("invalid use of pack expansion expression");
13282       return error_mark_node;
13283
13284     case NONTYPE_ARGUMENT_PACK:
13285       error ("use %<...%> to expand argument pack");
13286       return error_mark_node;
13287
13288     default:
13289       gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
13290
13291       return tsubst_copy_and_build (t, args, complain, in_decl,
13292                                     /*function_p=*/false,
13293                                     integral_constant_expression_p);
13294     }
13295
13296   return NULL_TREE;
13297 #undef RECUR
13298 }
13299
13300 /* T is a postfix-expression that is not being used in a function
13301    call.  Return the substituted version of T.  */
13302
13303 static tree
13304 tsubst_non_call_postfix_expression (tree t, tree args,
13305                                     tsubst_flags_t complain,
13306                                     tree in_decl)
13307 {
13308   if (TREE_CODE (t) == SCOPE_REF)
13309     t = tsubst_qualified_id (t, args, complain, in_decl,
13310                              /*done=*/false, /*address_p=*/false);
13311   else
13312     t = tsubst_copy_and_build (t, args, complain, in_decl,
13313                                /*function_p=*/false,
13314                                /*integral_constant_expression_p=*/false);
13315
13316   return t;
13317 }
13318
13319 /* Like tsubst but deals with expressions and performs semantic
13320    analysis.  FUNCTION_P is true if T is the "F" in "F (ARGS)".  */
13321
13322 tree
13323 tsubst_copy_and_build (tree t,
13324                        tree args,
13325                        tsubst_flags_t complain,
13326                        tree in_decl,
13327                        bool function_p,
13328                        bool integral_constant_expression_p)
13329 {
13330 #define RECUR(NODE)                                             \
13331   tsubst_copy_and_build (NODE, args, complain, in_decl,         \
13332                          /*function_p=*/false,                  \
13333                          integral_constant_expression_p)
13334
13335   tree op1;
13336
13337   if (t == NULL_TREE || t == error_mark_node)
13338     return t;
13339
13340   switch (TREE_CODE (t))
13341     {
13342     case USING_DECL:
13343       t = DECL_NAME (t);
13344       /* Fall through.  */
13345     case IDENTIFIER_NODE:
13346       {
13347         tree decl;
13348         cp_id_kind idk;
13349         bool non_integral_constant_expression_p;
13350         const char *error_msg;
13351
13352         if (IDENTIFIER_TYPENAME_P (t))
13353           {
13354             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13355             t = mangle_conv_op_name_for_type (new_type);
13356           }
13357
13358         /* Look up the name.  */
13359         decl = lookup_name (t);
13360
13361         /* By convention, expressions use ERROR_MARK_NODE to indicate
13362            failure, not NULL_TREE.  */
13363         if (decl == NULL_TREE)
13364           decl = error_mark_node;
13365
13366         decl = finish_id_expression (t, decl, NULL_TREE,
13367                                      &idk,
13368                                      integral_constant_expression_p,
13369           /*allow_non_integral_constant_expression_p=*/(cxx_dialect >= cxx0x),
13370                                      &non_integral_constant_expression_p,
13371                                      /*template_p=*/false,
13372                                      /*done=*/true,
13373                                      /*address_p=*/false,
13374                                      /*template_arg_p=*/false,
13375                                      &error_msg,
13376                                      input_location);
13377         if (error_msg)
13378           error (error_msg);
13379         if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
13380           {
13381             if (complain & tf_error)
13382               unqualified_name_lookup_error (decl);
13383             decl = error_mark_node;
13384           }
13385         return decl;
13386       }
13387
13388     case TEMPLATE_ID_EXPR:
13389       {
13390         tree object;
13391         tree templ = RECUR (TREE_OPERAND (t, 0));
13392         tree targs = TREE_OPERAND (t, 1);
13393
13394         if (targs)
13395           targs = tsubst_template_args (targs, args, complain, in_decl);
13396
13397         if (TREE_CODE (templ) == COMPONENT_REF)
13398           {
13399             object = TREE_OPERAND (templ, 0);
13400             templ = TREE_OPERAND (templ, 1);
13401           }
13402         else
13403           object = NULL_TREE;
13404         templ = lookup_template_function (templ, targs);
13405
13406         if (object)
13407           return build3 (COMPONENT_REF, TREE_TYPE (templ),
13408                          object, templ, NULL_TREE);
13409         else
13410           return baselink_for_fns (templ);
13411       }
13412
13413     case INDIRECT_REF:
13414       {
13415         tree r = RECUR (TREE_OPERAND (t, 0));
13416
13417         if (REFERENCE_REF_P (t))
13418           {
13419             /* A type conversion to reference type will be enclosed in
13420                such an indirect ref, but the substitution of the cast
13421                will have also added such an indirect ref.  */
13422             if (TREE_CODE (TREE_TYPE (r)) == REFERENCE_TYPE)
13423               r = convert_from_reference (r);
13424           }
13425         else
13426           r = build_x_indirect_ref (r, RO_UNARY_STAR, complain);
13427         return r;
13428       }
13429
13430     case NOP_EXPR:
13431       return build_nop
13432         (tsubst (TREE_TYPE (t), args, complain, in_decl),
13433          RECUR (TREE_OPERAND (t, 0)));
13434
13435     case IMPLICIT_CONV_EXPR:
13436       {
13437         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13438         tree expr = RECUR (TREE_OPERAND (t, 0));
13439         int flags = LOOKUP_IMPLICIT;
13440         if (IMPLICIT_CONV_EXPR_DIRECT_INIT (t))
13441           flags = LOOKUP_NORMAL;
13442         return perform_implicit_conversion_flags (type, expr, complain,
13443                                                   flags);
13444       }
13445
13446     case CONVERT_EXPR:
13447       return build1
13448         (CONVERT_EXPR,
13449          tsubst (TREE_TYPE (t), args, complain, in_decl),
13450          RECUR (TREE_OPERAND (t, 0)));
13451
13452     case CAST_EXPR:
13453     case REINTERPRET_CAST_EXPR:
13454     case CONST_CAST_EXPR:
13455     case DYNAMIC_CAST_EXPR:
13456     case STATIC_CAST_EXPR:
13457       {
13458         tree type;
13459         tree op;
13460
13461         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13462         if (integral_constant_expression_p
13463             && !cast_valid_in_integral_constant_expression_p (type))
13464           {
13465             if (complain & tf_error)
13466               error ("a cast to a type other than an integral or "
13467                      "enumeration type cannot appear in a constant-expression");
13468             return error_mark_node; 
13469           }
13470
13471         op = RECUR (TREE_OPERAND (t, 0));
13472
13473         switch (TREE_CODE (t))
13474           {
13475           case CAST_EXPR:
13476             return build_functional_cast (type, op, complain);
13477           case REINTERPRET_CAST_EXPR:
13478             return build_reinterpret_cast (type, op, complain);
13479           case CONST_CAST_EXPR:
13480             return build_const_cast (type, op, complain);
13481           case DYNAMIC_CAST_EXPR:
13482             return build_dynamic_cast (type, op, complain);
13483           case STATIC_CAST_EXPR:
13484             return build_static_cast (type, op, complain);
13485           default:
13486             gcc_unreachable ();
13487           }
13488       }
13489
13490     case POSTDECREMENT_EXPR:
13491     case POSTINCREMENT_EXPR:
13492       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
13493                                                 args, complain, in_decl);
13494       return build_x_unary_op (TREE_CODE (t), op1, complain);
13495
13496     case PREDECREMENT_EXPR:
13497     case PREINCREMENT_EXPR:
13498     case NEGATE_EXPR:
13499     case BIT_NOT_EXPR:
13500     case ABS_EXPR:
13501     case TRUTH_NOT_EXPR:
13502     case UNARY_PLUS_EXPR:  /* Unary + */
13503     case REALPART_EXPR:
13504     case IMAGPART_EXPR:
13505       return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)),
13506                                complain);
13507
13508     case FIX_TRUNC_EXPR:
13509       return cp_build_unary_op (FIX_TRUNC_EXPR, RECUR (TREE_OPERAND (t, 0)),
13510                                 0, complain);
13511
13512     case ADDR_EXPR:
13513       op1 = TREE_OPERAND (t, 0);
13514       if (TREE_CODE (op1) == LABEL_DECL)
13515         return finish_label_address_expr (DECL_NAME (op1),
13516                                           EXPR_LOCATION (op1));
13517       if (TREE_CODE (op1) == SCOPE_REF)
13518         op1 = tsubst_qualified_id (op1, args, complain, in_decl,
13519                                    /*done=*/true, /*address_p=*/true);
13520       else
13521         op1 = tsubst_non_call_postfix_expression (op1, args, complain,
13522                                                   in_decl);
13523       return build_x_unary_op (ADDR_EXPR, op1, complain);
13524
13525     case PLUS_EXPR:
13526     case MINUS_EXPR:
13527     case MULT_EXPR:
13528     case TRUNC_DIV_EXPR:
13529     case CEIL_DIV_EXPR:
13530     case FLOOR_DIV_EXPR:
13531     case ROUND_DIV_EXPR:
13532     case EXACT_DIV_EXPR:
13533     case BIT_AND_EXPR:
13534     case BIT_IOR_EXPR:
13535     case BIT_XOR_EXPR:
13536     case TRUNC_MOD_EXPR:
13537     case FLOOR_MOD_EXPR:
13538     case TRUTH_ANDIF_EXPR:
13539     case TRUTH_ORIF_EXPR:
13540     case TRUTH_AND_EXPR:
13541     case TRUTH_OR_EXPR:
13542     case RSHIFT_EXPR:
13543     case LSHIFT_EXPR:
13544     case RROTATE_EXPR:
13545     case LROTATE_EXPR:
13546     case EQ_EXPR:
13547     case NE_EXPR:
13548     case MAX_EXPR:
13549     case MIN_EXPR:
13550     case LE_EXPR:
13551     case GE_EXPR:
13552     case LT_EXPR:
13553     case GT_EXPR:
13554     case MEMBER_REF:
13555     case DOTSTAR_EXPR:
13556       return build_x_binary_op
13557         (TREE_CODE (t),
13558          RECUR (TREE_OPERAND (t, 0)),
13559          (TREE_NO_WARNING (TREE_OPERAND (t, 0))
13560           ? ERROR_MARK
13561           : TREE_CODE (TREE_OPERAND (t, 0))),
13562          RECUR (TREE_OPERAND (t, 1)),
13563          (TREE_NO_WARNING (TREE_OPERAND (t, 1))
13564           ? ERROR_MARK
13565           : TREE_CODE (TREE_OPERAND (t, 1))),
13566          /*overload=*/NULL,
13567          complain);
13568
13569     case SCOPE_REF:
13570       return tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
13571                                   /*address_p=*/false);
13572     case ARRAY_REF:
13573       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
13574                                                 args, complain, in_decl);
13575       return build_x_array_ref (op1, RECUR (TREE_OPERAND (t, 1)), complain);
13576
13577     case SIZEOF_EXPR:
13578       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
13579         return tsubst_copy (t, args, complain, in_decl);
13580       /* Fall through */
13581       
13582     case ALIGNOF_EXPR:
13583       op1 = TREE_OPERAND (t, 0);
13584       if (!args)
13585         {
13586           /* When there are no ARGS, we are trying to evaluate a
13587              non-dependent expression from the parser.  Trying to do
13588              the substitutions may not work.  */
13589           if (!TYPE_P (op1))
13590             op1 = TREE_TYPE (op1);
13591         }
13592       else
13593         {
13594           ++cp_unevaluated_operand;
13595           ++c_inhibit_evaluation_warnings;
13596           op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
13597                                        /*function_p=*/false,
13598                                        /*integral_constant_expression_p=*/false);
13599           --cp_unevaluated_operand;
13600           --c_inhibit_evaluation_warnings;
13601         }
13602       if (TYPE_P (op1))
13603         return cxx_sizeof_or_alignof_type (op1, TREE_CODE (t), 
13604                                            complain & tf_error);
13605       else
13606         return cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t), 
13607                                            complain & tf_error);
13608
13609     case AT_ENCODE_EXPR:
13610       {
13611         op1 = TREE_OPERAND (t, 0);
13612         ++cp_unevaluated_operand;
13613         ++c_inhibit_evaluation_warnings;
13614         op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
13615                                      /*function_p=*/false,
13616                                      /*integral_constant_expression_p=*/false);
13617         --cp_unevaluated_operand;
13618         --c_inhibit_evaluation_warnings;
13619         return objc_build_encode_expr (op1);
13620       }
13621
13622     case NOEXCEPT_EXPR:
13623       op1 = TREE_OPERAND (t, 0);
13624       ++cp_unevaluated_operand;
13625       ++c_inhibit_evaluation_warnings;
13626       op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
13627                                    /*function_p=*/false,
13628                                    /*integral_constant_expression_p=*/false);
13629       --cp_unevaluated_operand;
13630       --c_inhibit_evaluation_warnings;
13631       return finish_noexcept_expr (op1, complain);
13632
13633     case MODOP_EXPR:
13634       {
13635         tree r = build_x_modify_expr
13636           (RECUR (TREE_OPERAND (t, 0)),
13637            TREE_CODE (TREE_OPERAND (t, 1)),
13638            RECUR (TREE_OPERAND (t, 2)),
13639            complain);
13640         /* TREE_NO_WARNING must be set if either the expression was
13641            parenthesized or it uses an operator such as >>= rather
13642            than plain assignment.  In the former case, it was already
13643            set and must be copied.  In the latter case,
13644            build_x_modify_expr sets it and it must not be reset
13645            here.  */
13646         if (TREE_NO_WARNING (t))
13647           TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
13648         return r;
13649       }
13650
13651     case ARROW_EXPR:
13652       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
13653                                                 args, complain, in_decl);
13654       /* Remember that there was a reference to this entity.  */
13655       if (DECL_P (op1))
13656         mark_used (op1);
13657       return build_x_arrow (op1);
13658
13659     case NEW_EXPR:
13660       {
13661         tree placement = RECUR (TREE_OPERAND (t, 0));
13662         tree init = RECUR (TREE_OPERAND (t, 3));
13663         VEC(tree,gc) *placement_vec;
13664         VEC(tree,gc) *init_vec;
13665         tree ret;
13666
13667         if (placement == NULL_TREE)
13668           placement_vec = NULL;
13669         else
13670           {
13671             placement_vec = make_tree_vector ();
13672             for (; placement != NULL_TREE; placement = TREE_CHAIN (placement))
13673               VEC_safe_push (tree, gc, placement_vec, TREE_VALUE (placement));
13674           }
13675
13676         /* If there was an initializer in the original tree, but it
13677            instantiated to an empty list, then we should pass a
13678            non-NULL empty vector to tell build_new that it was an
13679            empty initializer() rather than no initializer.  This can
13680            only happen when the initializer is a pack expansion whose
13681            parameter packs are of length zero.  */
13682         if (init == NULL_TREE && TREE_OPERAND (t, 3) == NULL_TREE)
13683           init_vec = NULL;
13684         else
13685           {
13686             init_vec = make_tree_vector ();
13687             if (init == void_zero_node)
13688               gcc_assert (init_vec != NULL);
13689             else
13690               {
13691                 for (; init != NULL_TREE; init = TREE_CHAIN (init))
13692                   VEC_safe_push (tree, gc, init_vec, TREE_VALUE (init));
13693               }
13694           }
13695
13696         ret = build_new (&placement_vec,
13697                          tsubst (TREE_OPERAND (t, 1), args, complain, in_decl),
13698                          RECUR (TREE_OPERAND (t, 2)),
13699                          &init_vec,
13700                          NEW_EXPR_USE_GLOBAL (t),
13701                          complain);
13702
13703         if (placement_vec != NULL)
13704           release_tree_vector (placement_vec);
13705         if (init_vec != NULL)
13706           release_tree_vector (init_vec);
13707
13708         return ret;
13709       }
13710
13711     case DELETE_EXPR:
13712      return delete_sanity
13713        (RECUR (TREE_OPERAND (t, 0)),
13714         RECUR (TREE_OPERAND (t, 1)),
13715         DELETE_EXPR_USE_VEC (t),
13716         DELETE_EXPR_USE_GLOBAL (t),
13717         complain);
13718
13719     case COMPOUND_EXPR:
13720       return build_x_compound_expr (RECUR (TREE_OPERAND (t, 0)),
13721                                     RECUR (TREE_OPERAND (t, 1)),
13722                                     complain);
13723
13724     case CALL_EXPR:
13725       {
13726         tree function;
13727         VEC(tree,gc) *call_args;
13728         unsigned int nargs, i;
13729         bool qualified_p;
13730         bool koenig_p;
13731         tree ret;
13732
13733         function = CALL_EXPR_FN (t);
13734         /* When we parsed the expression,  we determined whether or
13735            not Koenig lookup should be performed.  */
13736         koenig_p = KOENIG_LOOKUP_P (t);
13737         if (TREE_CODE (function) == SCOPE_REF)
13738           {
13739             qualified_p = true;
13740             function = tsubst_qualified_id (function, args, complain, in_decl,
13741                                             /*done=*/false,
13742                                             /*address_p=*/false);
13743           }
13744         else if (koenig_p && TREE_CODE (function) == IDENTIFIER_NODE)
13745           {
13746             /* Do nothing; calling tsubst_copy_and_build on an identifier
13747                would incorrectly perform unqualified lookup again.
13748
13749                Note that we can also have an IDENTIFIER_NODE if the earlier
13750                unqualified lookup found a member function; in that case
13751                koenig_p will be false and we do want to do the lookup
13752                again to find the instantiated member function.
13753
13754                FIXME but doing that causes c++/15272, so we need to stop
13755                using IDENTIFIER_NODE in that situation.  */
13756             qualified_p = false;
13757           }
13758         else
13759           {
13760             if (TREE_CODE (function) == COMPONENT_REF)
13761               {
13762                 tree op = TREE_OPERAND (function, 1);
13763
13764                 qualified_p = (TREE_CODE (op) == SCOPE_REF
13765                                || (BASELINK_P (op)
13766                                    && BASELINK_QUALIFIED_P (op)));
13767               }
13768             else
13769               qualified_p = false;
13770
13771             function = tsubst_copy_and_build (function, args, complain,
13772                                               in_decl,
13773                                               !qualified_p,
13774                                               integral_constant_expression_p);
13775
13776             if (BASELINK_P (function))
13777               qualified_p = true;
13778           }
13779
13780         nargs = call_expr_nargs (t);
13781         call_args = make_tree_vector ();
13782         for (i = 0; i < nargs; ++i)
13783           {
13784             tree arg = CALL_EXPR_ARG (t, i);
13785
13786             if (!PACK_EXPANSION_P (arg))
13787               VEC_safe_push (tree, gc, call_args,
13788                              RECUR (CALL_EXPR_ARG (t, i)));
13789             else
13790               {
13791                 /* Expand the pack expansion and push each entry onto
13792                    CALL_ARGS.  */
13793                 arg = tsubst_pack_expansion (arg, args, complain, in_decl);
13794                 if (TREE_CODE (arg) == TREE_VEC)
13795                   {
13796                     unsigned int len, j;
13797
13798                     len = TREE_VEC_LENGTH (arg);
13799                     for (j = 0; j < len; ++j)
13800                       {
13801                         tree value = TREE_VEC_ELT (arg, j);
13802                         if (value != NULL_TREE)
13803                           value = convert_from_reference (value);
13804                         VEC_safe_push (tree, gc, call_args, value);
13805                       }
13806                   }
13807                 else
13808                   {
13809                     /* A partial substitution.  Add one entry.  */
13810                     VEC_safe_push (tree, gc, call_args, arg);
13811                   }
13812               }
13813           }
13814
13815         /* We do not perform argument-dependent lookup if normal
13816            lookup finds a non-function, in accordance with the
13817            expected resolution of DR 218.  */
13818         if (koenig_p
13819             && ((is_overloaded_fn (function)
13820                  /* If lookup found a member function, the Koenig lookup is
13821                     not appropriate, even if an unqualified-name was used
13822                     to denote the function.  */
13823                  && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
13824                 || TREE_CODE (function) == IDENTIFIER_NODE)
13825             /* Only do this when substitution turns a dependent call
13826                into a non-dependent call.  */
13827             && type_dependent_expression_p_push (t)
13828             && !any_type_dependent_arguments_p (call_args))
13829           function = perform_koenig_lookup (function, call_args, false,
13830                                             tf_none);
13831
13832         if (TREE_CODE (function) == IDENTIFIER_NODE
13833             && !any_type_dependent_arguments_p (call_args))
13834           {
13835             if (koenig_p && (complain & tf_warning_or_error))
13836               {
13837                 /* For backwards compatibility and good diagnostics, try
13838                    the unqualified lookup again if we aren't in SFINAE
13839                    context.  */
13840                 tree unq = (tsubst_copy_and_build
13841                             (function, args, complain, in_decl, true,
13842                              integral_constant_expression_p));
13843                 if (unq == error_mark_node)
13844                   return error_mark_node;
13845
13846                 if (unq != function)
13847                   {
13848                     tree fn = unq;
13849                     if (TREE_CODE (fn) == INDIRECT_REF)
13850                       fn = TREE_OPERAND (fn, 0);
13851                     if (TREE_CODE (fn) == COMPONENT_REF)
13852                       fn = TREE_OPERAND (fn, 1);
13853                     if (is_overloaded_fn (fn))
13854                       fn = get_first_fn (fn);
13855                     permerror (EXPR_LOC_OR_HERE (t),
13856                                "%qD was not declared in this scope, "
13857                                "and no declarations were found by "
13858                                "argument-dependent lookup at the point "
13859                                "of instantiation", function);
13860                     if (!DECL_P (fn))
13861                       /* Can't say anything more.  */;
13862                     else if (DECL_CLASS_SCOPE_P (fn))
13863                       {
13864                         inform (EXPR_LOC_OR_HERE (t),
13865                                 "declarations in dependent base %qT are "
13866                                 "not found by unqualified lookup",
13867                                 DECL_CLASS_CONTEXT (fn));
13868                         if (current_class_ptr)
13869                           inform (EXPR_LOC_OR_HERE (t),
13870                                   "use %<this->%D%> instead", function);
13871                         else
13872                           inform (EXPR_LOC_OR_HERE (t),
13873                                   "use %<%T::%D%> instead",
13874                                   current_class_name, function);
13875                       }
13876                     else
13877                       inform (0, "%q+D declared here, later in the "
13878                                 "translation unit", fn);
13879                     function = unq;
13880                   }
13881               }
13882             if (TREE_CODE (function) == IDENTIFIER_NODE)
13883               {
13884                 unqualified_name_lookup_error (function);
13885                 release_tree_vector (call_args);
13886                 return error_mark_node;
13887               }
13888           }
13889
13890         /* Remember that there was a reference to this entity.  */
13891         if (DECL_P (function))
13892           mark_used (function);
13893
13894         if (TREE_CODE (function) == OFFSET_REF)
13895           ret = build_offset_ref_call_from_tree (function, &call_args);
13896         else if (TREE_CODE (function) == COMPONENT_REF)
13897           {
13898             tree instance = TREE_OPERAND (function, 0);
13899             tree fn = TREE_OPERAND (function, 1);
13900
13901             if (processing_template_decl
13902                 && (type_dependent_expression_p (instance)
13903                     || (!BASELINK_P (fn)
13904                         && TREE_CODE (fn) != FIELD_DECL)
13905                     || type_dependent_expression_p (fn)
13906                     || any_type_dependent_arguments_p (call_args)))
13907               ret = build_nt_call_vec (function, call_args);
13908             else if (!BASELINK_P (fn))
13909               ret = finish_call_expr (function, &call_args,
13910                                        /*disallow_virtual=*/false,
13911                                        /*koenig_p=*/false,
13912                                        complain);
13913             else
13914               ret = (build_new_method_call
13915                       (instance, fn,
13916                        &call_args, NULL_TREE,
13917                        qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL,
13918                        /*fn_p=*/NULL,
13919                        complain));
13920           }
13921         else
13922           ret = finish_call_expr (function, &call_args,
13923                                   /*disallow_virtual=*/qualified_p,
13924                                   koenig_p,
13925                                   complain);
13926
13927         release_tree_vector (call_args);
13928
13929         return ret;
13930       }
13931
13932     case COND_EXPR:
13933       return build_x_conditional_expr
13934         (RECUR (TREE_OPERAND (t, 0)),
13935          RECUR (TREE_OPERAND (t, 1)),
13936          RECUR (TREE_OPERAND (t, 2)),
13937          complain);
13938
13939     case PSEUDO_DTOR_EXPR:
13940       return finish_pseudo_destructor_expr
13941         (RECUR (TREE_OPERAND (t, 0)),
13942          RECUR (TREE_OPERAND (t, 1)),
13943          tsubst (TREE_OPERAND (t, 2), args, complain, in_decl));
13944
13945     case TREE_LIST:
13946       {
13947         tree purpose, value, chain;
13948
13949         if (t == void_list_node)
13950           return t;
13951
13952         if ((TREE_PURPOSE (t) && PACK_EXPANSION_P (TREE_PURPOSE (t)))
13953             || (TREE_VALUE (t) && PACK_EXPANSION_P (TREE_VALUE (t))))
13954           {
13955             /* We have pack expansions, so expand those and
13956                create a new list out of it.  */
13957             tree purposevec = NULL_TREE;
13958             tree valuevec = NULL_TREE;
13959             tree chain;
13960             int i, len = -1;
13961
13962             /* Expand the argument expressions.  */
13963             if (TREE_PURPOSE (t))
13964               purposevec = tsubst_pack_expansion (TREE_PURPOSE (t), args,
13965                                                  complain, in_decl);
13966             if (TREE_VALUE (t))
13967               valuevec = tsubst_pack_expansion (TREE_VALUE (t), args,
13968                                                complain, in_decl);
13969
13970             /* Build the rest of the list.  */
13971             chain = TREE_CHAIN (t);
13972             if (chain && chain != void_type_node)
13973               chain = RECUR (chain);
13974
13975             /* Determine the number of arguments.  */
13976             if (purposevec && TREE_CODE (purposevec) == TREE_VEC)
13977               {
13978                 len = TREE_VEC_LENGTH (purposevec);
13979                 gcc_assert (!valuevec || len == TREE_VEC_LENGTH (valuevec));
13980               }
13981             else if (TREE_CODE (valuevec) == TREE_VEC)
13982               len = TREE_VEC_LENGTH (valuevec);
13983             else
13984               {
13985                 /* Since we only performed a partial substitution into
13986                    the argument pack, we only return a single list
13987                    node.  */
13988                 if (purposevec == TREE_PURPOSE (t)
13989                     && valuevec == TREE_VALUE (t)
13990                     && chain == TREE_CHAIN (t))
13991                   return t;
13992
13993                 return tree_cons (purposevec, valuevec, chain);
13994               }
13995             
13996             /* Convert the argument vectors into a TREE_LIST */
13997             i = len;
13998             while (i > 0)
13999               {
14000                 /* Grab the Ith values.  */
14001                 i--;
14002                 purpose = purposevec ? TREE_VEC_ELT (purposevec, i) 
14003                                      : NULL_TREE;
14004                 value 
14005                   = valuevec ? convert_from_reference (TREE_VEC_ELT (valuevec, i)) 
14006                              : NULL_TREE;
14007
14008                 /* Build the list (backwards).  */
14009                 chain = tree_cons (purpose, value, chain);
14010               }
14011
14012             return chain;
14013           }
14014
14015         purpose = TREE_PURPOSE (t);
14016         if (purpose)
14017           purpose = RECUR (purpose);
14018         value = TREE_VALUE (t);
14019         if (value)
14020           value = RECUR (value);
14021         chain = TREE_CHAIN (t);
14022         if (chain && chain != void_type_node)
14023           chain = RECUR (chain);
14024         if (purpose == TREE_PURPOSE (t)
14025             && value == TREE_VALUE (t)
14026             && chain == TREE_CHAIN (t))
14027           return t;
14028         return tree_cons (purpose, value, chain);
14029       }
14030
14031     case COMPONENT_REF:
14032       {
14033         tree object;
14034         tree object_type;
14035         tree member;
14036
14037         object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
14038                                                      args, complain, in_decl);
14039         /* Remember that there was a reference to this entity.  */
14040         if (DECL_P (object))
14041           mark_used (object);
14042         object_type = TREE_TYPE (object);
14043
14044         member = TREE_OPERAND (t, 1);
14045         if (BASELINK_P (member))
14046           member = tsubst_baselink (member,
14047                                     non_reference (TREE_TYPE (object)),
14048                                     args, complain, in_decl);
14049         else
14050           member = tsubst_copy (member, args, complain, in_decl);
14051         if (member == error_mark_node)
14052           return error_mark_node;
14053
14054         if (type_dependent_expression_p (object))
14055           /* We can't do much here.  */;
14056         else if (!CLASS_TYPE_P (object_type))
14057           {
14058             if (SCALAR_TYPE_P (object_type))
14059               {
14060                 tree s = NULL_TREE;
14061                 tree dtor = member;
14062
14063                 if (TREE_CODE (dtor) == SCOPE_REF)
14064                   {
14065                     s = TREE_OPERAND (dtor, 0);
14066                     dtor = TREE_OPERAND (dtor, 1);
14067                   }
14068                 if (TREE_CODE (dtor) == BIT_NOT_EXPR)
14069                   {
14070                     dtor = TREE_OPERAND (dtor, 0);
14071                     if (TYPE_P (dtor))
14072                       return finish_pseudo_destructor_expr (object, s, dtor);
14073                   }
14074               }
14075           }
14076         else if (TREE_CODE (member) == SCOPE_REF
14077                  && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
14078           {
14079             /* Lookup the template functions now that we know what the
14080                scope is.  */
14081             tree scope = TREE_OPERAND (member, 0);
14082             tree tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
14083             tree args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
14084             member = lookup_qualified_name (scope, tmpl,
14085                                             /*is_type_p=*/false,
14086                                             /*complain=*/false);
14087             if (BASELINK_P (member))
14088               {
14089                 BASELINK_FUNCTIONS (member)
14090                   = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
14091                               args);
14092                 member = (adjust_result_of_qualified_name_lookup
14093                           (member, BINFO_TYPE (BASELINK_BINFO (member)),
14094                            object_type));
14095               }
14096             else
14097               {
14098                 qualified_name_lookup_error (scope, tmpl, member,
14099                                              input_location);
14100                 return error_mark_node;
14101               }
14102           }
14103         else if (TREE_CODE (member) == SCOPE_REF
14104                  && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
14105                  && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
14106           {
14107             if (complain & tf_error)
14108               {
14109                 if (TYPE_P (TREE_OPERAND (member, 0)))
14110                   error ("%qT is not a class or namespace",
14111                          TREE_OPERAND (member, 0));
14112                 else
14113                   error ("%qD is not a class or namespace",
14114                          TREE_OPERAND (member, 0));
14115               }
14116             return error_mark_node;
14117           }
14118         else if (TREE_CODE (member) == FIELD_DECL)
14119           return finish_non_static_data_member (member, object, NULL_TREE);
14120
14121         return finish_class_member_access_expr (object, member,
14122                                                 /*template_p=*/false,
14123                                                 complain);
14124       }
14125
14126     case THROW_EXPR:
14127       return build_throw
14128         (RECUR (TREE_OPERAND (t, 0)));
14129
14130     case CONSTRUCTOR:
14131       {
14132         VEC(constructor_elt,gc) *n;
14133         constructor_elt *ce;
14134         unsigned HOST_WIDE_INT idx;
14135         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
14136         bool process_index_p;
14137         int newlen;
14138         bool need_copy_p = false;
14139         tree r;
14140
14141         if (type == error_mark_node)
14142           return error_mark_node;
14143
14144         /* digest_init will do the wrong thing if we let it.  */
14145         if (type && TYPE_PTRMEMFUNC_P (type))
14146           return t;
14147
14148         /* We do not want to process the index of aggregate
14149            initializers as they are identifier nodes which will be
14150            looked up by digest_init.  */
14151         process_index_p = !(type && MAYBE_CLASS_TYPE_P (type));
14152
14153         n = VEC_copy (constructor_elt, gc, CONSTRUCTOR_ELTS (t));
14154         newlen = VEC_length (constructor_elt, n);
14155         FOR_EACH_VEC_ELT (constructor_elt, n, idx, ce)
14156           {
14157             if (ce->index && process_index_p)
14158               ce->index = RECUR (ce->index);
14159
14160             if (PACK_EXPANSION_P (ce->value))
14161               {
14162                 /* Substitute into the pack expansion.  */
14163                 ce->value = tsubst_pack_expansion (ce->value, args, complain,
14164                                                   in_decl);
14165
14166                 if (ce->value == error_mark_node
14167                     || PACK_EXPANSION_P (ce->value))
14168                   ;
14169                 else if (TREE_VEC_LENGTH (ce->value) == 1)
14170                   /* Just move the argument into place.  */
14171                   ce->value = TREE_VEC_ELT (ce->value, 0);
14172                 else
14173                   {
14174                     /* Update the length of the final CONSTRUCTOR
14175                        arguments vector, and note that we will need to
14176                        copy.*/
14177                     newlen = newlen + TREE_VEC_LENGTH (ce->value) - 1;
14178                     need_copy_p = true;
14179                   }
14180               }
14181             else
14182               ce->value = RECUR (ce->value);
14183           }
14184
14185         if (need_copy_p)
14186           {
14187             VEC(constructor_elt,gc) *old_n = n;
14188
14189             n = VEC_alloc (constructor_elt, gc, newlen);
14190             FOR_EACH_VEC_ELT (constructor_elt, old_n, idx, ce)
14191               {
14192                 if (TREE_CODE (ce->value) == TREE_VEC)
14193                   {
14194                     int i, len = TREE_VEC_LENGTH (ce->value);
14195                     for (i = 0; i < len; ++i)
14196                       CONSTRUCTOR_APPEND_ELT (n, 0,
14197                                               TREE_VEC_ELT (ce->value, i));
14198                   }
14199                 else
14200                   CONSTRUCTOR_APPEND_ELT (n, 0, ce->value);
14201               }
14202           }
14203
14204         r = build_constructor (init_list_type_node, n);
14205         CONSTRUCTOR_IS_DIRECT_INIT (r) = CONSTRUCTOR_IS_DIRECT_INIT (t);
14206
14207         if (TREE_HAS_CONSTRUCTOR (t))
14208           return finish_compound_literal (type, r, complain);
14209
14210         TREE_TYPE (r) = type;
14211         return r;
14212       }
14213
14214     case TYPEID_EXPR:
14215       {
14216         tree operand_0 = TREE_OPERAND (t, 0);
14217         if (TYPE_P (operand_0))
14218           {
14219             operand_0 = tsubst (operand_0, args, complain, in_decl);
14220             return get_typeid (operand_0);
14221           }
14222         else
14223           {
14224             operand_0 = RECUR (operand_0);
14225             return build_typeid (operand_0);
14226           }
14227       }
14228
14229     case VAR_DECL:
14230       if (!args)
14231         return t;
14232       /* Fall through */
14233
14234     case PARM_DECL:
14235       {
14236         tree r = tsubst_copy (t, args, complain, in_decl);
14237
14238         if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
14239           /* If the original type was a reference, we'll be wrapped in
14240              the appropriate INDIRECT_REF.  */
14241           r = convert_from_reference (r);
14242         return r;
14243       }
14244
14245     case VA_ARG_EXPR:
14246       return build_x_va_arg (RECUR (TREE_OPERAND (t, 0)),
14247                              tsubst (TREE_TYPE (t), args, complain, in_decl));
14248
14249     case OFFSETOF_EXPR:
14250       return finish_offsetof (RECUR (TREE_OPERAND (t, 0)));
14251
14252     case TRAIT_EXPR:
14253       {
14254         tree type1 = tsubst_copy (TRAIT_EXPR_TYPE1 (t), args,
14255                                   complain, in_decl);
14256
14257         tree type2 = TRAIT_EXPR_TYPE2 (t);
14258         if (type2)
14259           type2 = tsubst_copy (type2, args, complain, in_decl);
14260         
14261         return finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2);
14262       }
14263
14264     case STMT_EXPR:
14265       {
14266         tree old_stmt_expr = cur_stmt_expr;
14267         tree stmt_expr = begin_stmt_expr ();
14268
14269         cur_stmt_expr = stmt_expr;
14270         tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl,
14271                      integral_constant_expression_p);
14272         stmt_expr = finish_stmt_expr (stmt_expr, false);
14273         cur_stmt_expr = old_stmt_expr;
14274
14275         /* If the resulting list of expression statement is empty,
14276            fold it further into void_zero_node.  */
14277         if (empty_expr_stmt_p (stmt_expr))
14278           stmt_expr = void_zero_node;
14279
14280         return stmt_expr;
14281       }
14282
14283     case CONST_DECL:
14284       t = tsubst_copy (t, args, complain, in_decl);
14285       /* As in finish_id_expression, we resolve enumeration constants
14286          to their underlying values.  */
14287       if (TREE_CODE (t) == CONST_DECL && !processing_template_decl)
14288         {
14289           used_types_insert (TREE_TYPE (t));
14290           return DECL_INITIAL (t);
14291         }
14292       return t;
14293
14294     case LAMBDA_EXPR:
14295       {
14296         tree r = build_lambda_expr ();
14297
14298         tree type = tsubst (LAMBDA_EXPR_CLOSURE (t), args, complain, NULL_TREE);
14299         LAMBDA_EXPR_CLOSURE (r) = type;
14300         CLASSTYPE_LAMBDA_EXPR (type) = r;
14301
14302         LAMBDA_EXPR_LOCATION (r)
14303           = LAMBDA_EXPR_LOCATION (t);
14304         LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (r)
14305           = LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (t);
14306         LAMBDA_EXPR_MUTABLE_P (r) = LAMBDA_EXPR_MUTABLE_P (t);
14307         LAMBDA_EXPR_DISCRIMINATOR (r)
14308           = (LAMBDA_EXPR_DISCRIMINATOR (t));
14309         LAMBDA_EXPR_EXTRA_SCOPE (r)
14310           = RECUR (LAMBDA_EXPR_EXTRA_SCOPE (t));
14311         if (LAMBDA_EXPR_RETURN_TYPE (t) == dependent_lambda_return_type_node)
14312           {
14313             LAMBDA_EXPR_RETURN_TYPE (r) = dependent_lambda_return_type_node;
14314             LAMBDA_EXPR_DEDUCE_RETURN_TYPE_P (r) = true;
14315           }
14316         else
14317           LAMBDA_EXPR_RETURN_TYPE (r)
14318             = tsubst (LAMBDA_EXPR_RETURN_TYPE (t), args, complain, in_decl);
14319
14320         gcc_assert (LAMBDA_EXPR_THIS_CAPTURE (t) == NULL_TREE
14321                     && LAMBDA_EXPR_PENDING_PROXIES (t) == NULL);
14322
14323         /* Do this again now that LAMBDA_EXPR_EXTRA_SCOPE is set.  */
14324         determine_visibility (TYPE_NAME (type));
14325         /* Now that we know visibility, instantiate the type so we have a
14326            declaration of the op() for later calls to lambda_function.  */
14327         complete_type (type);
14328
14329         /* The capture list refers to closure members, so this needs to
14330            wait until after we finish instantiating the type.  */
14331         LAMBDA_EXPR_CAPTURE_LIST (r)
14332           = RECUR (LAMBDA_EXPR_CAPTURE_LIST (t));
14333
14334         return build_lambda_object (r);
14335       }
14336
14337     case TARGET_EXPR:
14338       /* We can get here for a constant initializer of non-dependent type.
14339          FIXME stop folding in cp_parser_initializer_clause.  */
14340       gcc_assert (TREE_CONSTANT (t));
14341       {
14342         tree r = get_target_expr (RECUR (TARGET_EXPR_INITIAL (t)));
14343         TREE_CONSTANT (r) = true;
14344         return r;
14345       }
14346
14347     case TRANSACTION_EXPR:
14348       return tsubst_expr(t, args, complain, in_decl,
14349              integral_constant_expression_p);
14350
14351     default:
14352       /* Handle Objective-C++ constructs, if appropriate.  */
14353       {
14354         tree subst
14355           = objcp_tsubst_copy_and_build (t, args, complain,
14356                                          in_decl, /*function_p=*/false);
14357         if (subst)
14358           return subst;
14359       }
14360       return tsubst_copy (t, args, complain, in_decl);
14361     }
14362
14363 #undef RECUR
14364 }
14365
14366 /* Verify that the instantiated ARGS are valid. For type arguments,
14367    make sure that the type's linkage is ok. For non-type arguments,
14368    make sure they are constants if they are integral or enumerations.
14369    Emit an error under control of COMPLAIN, and return TRUE on error.  */
14370
14371 static bool
14372 check_instantiated_arg (tree tmpl, tree t, tsubst_flags_t complain)
14373 {
14374   if (ARGUMENT_PACK_P (t))
14375     {
14376       tree vec = ARGUMENT_PACK_ARGS (t);
14377       int len = TREE_VEC_LENGTH (vec);
14378       bool result = false;
14379       int i;
14380
14381       for (i = 0; i < len; ++i)
14382         if (check_instantiated_arg (tmpl, TREE_VEC_ELT (vec, i), complain))
14383           result = true;
14384       return result;
14385     }
14386   else if (TYPE_P (t))
14387     {
14388       /* [basic.link]: A name with no linkage (notably, the name
14389          of a class or enumeration declared in a local scope)
14390          shall not be used to declare an entity with linkage.
14391          This implies that names with no linkage cannot be used as
14392          template arguments
14393
14394          DR 757 relaxes this restriction for C++0x.  */
14395       tree nt = (cxx_dialect > cxx98 ? NULL_TREE
14396                  : no_linkage_check (t, /*relaxed_p=*/false));
14397
14398       if (nt)
14399         {
14400           /* DR 488 makes use of a type with no linkage cause
14401              type deduction to fail.  */
14402           if (complain & tf_error)
14403             {
14404               if (TYPE_ANONYMOUS_P (nt))
14405                 error ("%qT is/uses anonymous type", t);
14406               else
14407                 error ("template argument for %qD uses local type %qT",
14408                        tmpl, t);
14409             }
14410           return true;
14411         }
14412       /* In order to avoid all sorts of complications, we do not
14413          allow variably-modified types as template arguments.  */
14414       else if (variably_modified_type_p (t, NULL_TREE))
14415         {
14416           if (complain & tf_error)
14417             error ("%qT is a variably modified type", t);
14418           return true;
14419         }
14420     }
14421   /* A non-type argument of integral or enumerated type must be a
14422      constant.  */
14423   else if (TREE_TYPE (t)
14424            && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
14425            && !TREE_CONSTANT (t))
14426     {
14427       if (complain & tf_error)
14428         error ("integral expression %qE is not constant", t);
14429       return true;
14430     }
14431   return false;
14432 }
14433
14434 static bool
14435 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
14436 {
14437   int ix, len = DECL_NTPARMS (tmpl);
14438   bool result = false;
14439
14440   for (ix = 0; ix != len; ix++)
14441     {
14442       if (check_instantiated_arg (tmpl, TREE_VEC_ELT (args, ix), complain))
14443         result = true;
14444     }
14445   if (result && (complain & tf_error))
14446     error ("  trying to instantiate %qD", tmpl);
14447   return result;
14448 }
14449
14450 /* In C++0x, it's possible to have a function template whose type depends
14451    on itself recursively.  This is most obvious with decltype, but can also
14452    occur with enumeration scope (c++/48969).  So we need to catch infinite
14453    recursion and reject the substitution at deduction time; this function
14454    will return error_mark_node for any repeated substitution.
14455
14456    This also catches excessive recursion such as when f<N> depends on
14457    f<N-1> across all integers, and returns error_mark_node for all the
14458    substitutions back up to the initial one.
14459
14460    This is, of course, not reentrant.  */
14461
14462 static tree
14463 deduction_tsubst_fntype (tree fn, tree targs, tsubst_flags_t complain)
14464 {
14465   static bool excessive_deduction_depth;
14466   static int deduction_depth;
14467   struct pending_template *old_last_pend = last_pending_template;
14468   struct tinst_level *old_error_tinst = last_error_tinst_level;
14469
14470   tree fntype = TREE_TYPE (fn);
14471   tree tinst;
14472   tree r;
14473
14474   if (excessive_deduction_depth)
14475     return error_mark_node;
14476
14477   tinst = build_tree_list (fn, targs);
14478   if (!push_tinst_level (tinst))
14479     {
14480       excessive_deduction_depth = true;
14481       ggc_free (tinst);
14482       return error_mark_node;
14483     }
14484
14485   input_location = DECL_SOURCE_LOCATION (fn);
14486   ++deduction_depth;
14487   push_deduction_access_scope (fn);
14488   r = tsubst (fntype, targs, complain, NULL_TREE);
14489   pop_deduction_access_scope (fn);
14490   --deduction_depth;
14491
14492   if (excessive_deduction_depth)
14493     {
14494       r = error_mark_node;
14495       if (deduction_depth == 0)
14496         /* Reset once we're all the way out.  */
14497         excessive_deduction_depth = false;
14498     }
14499
14500   pop_tinst_level ();
14501   /* We can't free this if a pending_template entry or last_error_tinst_level
14502      is pointing at it.  */
14503   if (last_pending_template == old_last_pend
14504       && last_error_tinst_level == old_error_tinst)
14505     ggc_free (tinst);
14506   return r;
14507 }
14508
14509 /* Instantiate the indicated variable or function template TMPL with
14510    the template arguments in TARG_PTR.  */
14511
14512 static tree
14513 instantiate_template_1 (tree tmpl, tree orig_args, tsubst_flags_t complain)
14514 {
14515   tree targ_ptr = orig_args;
14516   tree fndecl;
14517   tree gen_tmpl;
14518   tree spec;
14519   HOST_WIDE_INT saved_processing_template_decl;
14520
14521   if (tmpl == error_mark_node)
14522     return error_mark_node;
14523
14524   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
14525
14526   /* If this function is a clone, handle it specially.  */
14527   if (DECL_CLONED_FUNCTION_P (tmpl))
14528     {
14529       tree spec;
14530       tree clone;
14531
14532       /* Use DECL_ABSTRACT_ORIGIN because only FUNCTION_DECLs have
14533          DECL_CLONED_FUNCTION.  */
14534       spec = instantiate_template (DECL_ABSTRACT_ORIGIN (tmpl),
14535                                    targ_ptr, complain);
14536       if (spec == error_mark_node)
14537         return error_mark_node;
14538
14539       /* Look for the clone.  */
14540       FOR_EACH_CLONE (clone, spec)
14541         if (DECL_NAME (clone) == DECL_NAME (tmpl))
14542           return clone;
14543       /* We should always have found the clone by now.  */
14544       gcc_unreachable ();
14545       return NULL_TREE;
14546     }
14547
14548   /* Check to see if we already have this specialization.  */
14549   gen_tmpl = most_general_template (tmpl);
14550   if (tmpl != gen_tmpl)
14551     /* The TMPL is a partial instantiation.  To get a full set of
14552        arguments we must add the arguments used to perform the
14553        partial instantiation.  */
14554     targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
14555                                             targ_ptr);
14556
14557   /* It would be nice to avoid hashing here and then again in tsubst_decl,
14558      but it doesn't seem to be on the hot path.  */
14559   spec = retrieve_specialization (gen_tmpl, targ_ptr, 0);
14560
14561   gcc_assert (tmpl == gen_tmpl
14562               || ((fndecl = retrieve_specialization (tmpl, orig_args, 0))
14563                   == spec)
14564               || fndecl == NULL_TREE);
14565
14566   if (spec != NULL_TREE)
14567     return spec;
14568
14569   if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
14570                                complain))
14571     return error_mark_node;
14572
14573   /* We are building a FUNCTION_DECL, during which the access of its
14574      parameters and return types have to be checked.  However this
14575      FUNCTION_DECL which is the desired context for access checking
14576      is not built yet.  We solve this chicken-and-egg problem by
14577      deferring all checks until we have the FUNCTION_DECL.  */
14578   push_deferring_access_checks (dk_deferred);
14579
14580   /* Although PROCESSING_TEMPLATE_DECL may be true at this point
14581      (because, for example, we have encountered a non-dependent
14582      function call in the body of a template function and must now
14583      determine which of several overloaded functions will be called),
14584      within the instantiation itself we are not processing a
14585      template.  */  
14586   saved_processing_template_decl = processing_template_decl;
14587   processing_template_decl = 0;
14588   /* Substitute template parameters to obtain the specialization.  */
14589   fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
14590                    targ_ptr, complain, gen_tmpl);
14591   processing_template_decl = saved_processing_template_decl;
14592   if (fndecl == error_mark_node)
14593     return error_mark_node;
14594
14595   /* Now we know the specialization, compute access previously
14596      deferred.  */
14597   push_access_scope (fndecl);
14598
14599   /* Some typedefs referenced from within the template code need to be access
14600      checked at template instantiation time, i.e now. These types were
14601      added to the template at parsing time. Let's get those and perfom
14602      the acces checks then.  */
14603   perform_typedefs_access_check (DECL_TEMPLATE_RESULT (tmpl), targ_ptr);
14604   perform_deferred_access_checks ();
14605   pop_access_scope (fndecl);
14606   pop_deferring_access_checks ();
14607
14608   /* The DECL_TI_TEMPLATE should always be the immediate parent
14609      template, not the most general template.  */
14610   DECL_TI_TEMPLATE (fndecl) = tmpl;
14611
14612   /* If we've just instantiated the main entry point for a function,
14613      instantiate all the alternate entry points as well.  We do this
14614      by cloning the instantiation of the main entry point, not by
14615      instantiating the template clones.  */
14616   if (DECL_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (DECL_CHAIN (gen_tmpl)))
14617     clone_function_decl (fndecl, /*update_method_vec_p=*/0);
14618
14619   return fndecl;
14620 }
14621
14622 /* Wrapper for instantiate_template_1.  */
14623
14624 tree
14625 instantiate_template (tree tmpl, tree orig_args, tsubst_flags_t complain)
14626 {
14627   tree ret;
14628   timevar_push (TV_TEMPLATE_INST);
14629   ret = instantiate_template_1 (tmpl, orig_args,  complain);
14630   timevar_pop (TV_TEMPLATE_INST);
14631   return ret;
14632 }
14633
14634 /* We're going to do deduction substitution on the type of TMPL, a function
14635    template.  In C++11 mode, push into that access scope.  In C++03 mode,
14636    disable access checking.  */
14637
14638 static void
14639 push_deduction_access_scope (tree tmpl)
14640 {
14641   if (cxx_dialect >= cxx0x)
14642     {
14643       int ptd = processing_template_decl;
14644       push_access_scope (DECL_TEMPLATE_RESULT (tmpl));
14645       /* Preserve processing_template_decl across push_to_top_level.  */
14646       if (ptd && !processing_template_decl)
14647         ++processing_template_decl;
14648     }
14649   else
14650     push_deferring_access_checks (dk_no_check);
14651 }
14652
14653 /* And pop back out.  */
14654
14655 static void
14656 pop_deduction_access_scope (tree tmpl)
14657 {
14658   if (cxx_dialect >= cxx0x)
14659     pop_access_scope (DECL_TEMPLATE_RESULT (tmpl));
14660   else
14661     pop_deferring_access_checks ();
14662 }
14663
14664 /* PARM is a template parameter pack for FN.  Returns true iff
14665    PARM is used in a deducible way in the argument list of FN.  */
14666
14667 static bool
14668 pack_deducible_p (tree parm, tree fn)
14669 {
14670   tree t = FUNCTION_FIRST_USER_PARMTYPE (fn);
14671   for (; t; t = TREE_CHAIN (t))
14672     {
14673       tree type = TREE_VALUE (t);
14674       tree packs;
14675       if (!PACK_EXPANSION_P (type))
14676         continue;
14677       for (packs = PACK_EXPANSION_PARAMETER_PACKS (type);
14678            packs; packs = TREE_CHAIN (packs))
14679         if (TREE_VALUE (packs) == parm)
14680           {
14681             /* The template parameter pack is used in a function parameter
14682                pack.  If this is the end of the parameter list, the
14683                template parameter pack is deducible.  */
14684             if (TREE_CHAIN (t) == void_list_node)
14685               return true;
14686             else
14687               /* Otherwise, not.  Well, it could be deduced from
14688                  a non-pack parameter, but doing so would end up with
14689                  a deduction mismatch, so don't bother.  */
14690               return false;
14691           }
14692     }
14693   /* The template parameter pack isn't used in any function parameter
14694      packs, but it might be used deeper, e.g. tuple<Args...>.  */
14695   return true;
14696 }
14697
14698 /* The FN is a TEMPLATE_DECL for a function.  ARGS is an array with
14699    NARGS elements of the arguments that are being used when calling
14700    it.  TARGS is a vector into which the deduced template arguments
14701    are placed.
14702
14703    Return zero for success, 2 for an incomplete match that doesn't resolve
14704    all the types, and 1 for complete failure.  An error message will be
14705    printed only for an incomplete match.
14706
14707    If FN is a conversion operator, or we are trying to produce a specific
14708    specialization, RETURN_TYPE is the return type desired.
14709
14710    The EXPLICIT_TARGS are explicit template arguments provided via a
14711    template-id.
14712
14713    The parameter STRICT is one of:
14714
14715    DEDUCE_CALL:
14716      We are deducing arguments for a function call, as in
14717      [temp.deduct.call].
14718
14719    DEDUCE_CONV:
14720      We are deducing arguments for a conversion function, as in
14721      [temp.deduct.conv].
14722
14723    DEDUCE_EXACT:
14724      We are deducing arguments when doing an explicit instantiation
14725      as in [temp.explicit], when determining an explicit specialization
14726      as in [temp.expl.spec], or when taking the address of a function
14727      template, as in [temp.deduct.funcaddr].  */
14728
14729 int
14730 fn_type_unification (tree fn,
14731                      tree explicit_targs,
14732                      tree targs,
14733                      const tree *args,
14734                      unsigned int nargs,
14735                      tree return_type,
14736                      unification_kind_t strict,
14737                      int flags,
14738                      bool explain_p)
14739 {
14740   tree parms;
14741   tree fntype;
14742   int result;
14743
14744   gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
14745
14746   fntype = TREE_TYPE (fn);
14747   if (explicit_targs)
14748     {
14749       /* [temp.deduct]
14750
14751          The specified template arguments must match the template
14752          parameters in kind (i.e., type, nontype, template), and there
14753          must not be more arguments than there are parameters;
14754          otherwise type deduction fails.
14755
14756          Nontype arguments must match the types of the corresponding
14757          nontype template parameters, or must be convertible to the
14758          types of the corresponding nontype parameters as specified in
14759          _temp.arg.nontype_, otherwise type deduction fails.
14760
14761          All references in the function type of the function template
14762          to the corresponding template parameters are replaced by the
14763          specified template argument values.  If a substitution in a
14764          template parameter or in the function type of the function
14765          template results in an invalid type, type deduction fails.  */
14766       tree tparms = DECL_INNERMOST_TEMPLATE_PARMS (fn);
14767       int i, len = TREE_VEC_LENGTH (tparms);
14768       tree converted_args;
14769       bool incomplete = false;
14770
14771       if (explicit_targs == error_mark_node)
14772         return unify_invalid (explain_p);
14773
14774       converted_args
14775         = (coerce_template_parms (tparms, explicit_targs, NULL_TREE,
14776                                   (explain_p
14777                                    ? tf_warning_or_error
14778                                    : tf_none),
14779                                    /*require_all_args=*/false,
14780                                    /*use_default_args=*/false));
14781       if (converted_args == error_mark_node)
14782         return 1;
14783
14784       /* Substitute the explicit args into the function type.  This is
14785          necessary so that, for instance, explicitly declared function
14786          arguments can match null pointed constants.  If we were given
14787          an incomplete set of explicit args, we must not do semantic
14788          processing during substitution as we could create partial
14789          instantiations.  */
14790       for (i = 0; i < len; i++)
14791         {
14792           tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
14793           bool parameter_pack = false;
14794           tree targ = TREE_VEC_ELT (converted_args, i);
14795
14796           /* Dig out the actual parm.  */
14797           if (TREE_CODE (parm) == TYPE_DECL
14798               || TREE_CODE (parm) == TEMPLATE_DECL)
14799             {
14800               parm = TREE_TYPE (parm);
14801               parameter_pack = TEMPLATE_TYPE_PARAMETER_PACK (parm);
14802             }
14803           else if (TREE_CODE (parm) == PARM_DECL)
14804             {
14805               parm = DECL_INITIAL (parm);
14806               parameter_pack = TEMPLATE_PARM_PARAMETER_PACK (parm);
14807             }
14808
14809           if (!parameter_pack && targ == NULL_TREE)
14810             /* No explicit argument for this template parameter.  */
14811             incomplete = true;
14812
14813           if (parameter_pack && pack_deducible_p (parm, fn))
14814             {
14815               /* Mark the argument pack as "incomplete". We could
14816                  still deduce more arguments during unification.
14817                  We remove this mark in type_unification_real.  */
14818               if (targ)
14819                 {
14820                   ARGUMENT_PACK_INCOMPLETE_P(targ) = 1;
14821                   ARGUMENT_PACK_EXPLICIT_ARGS (targ) 
14822                     = ARGUMENT_PACK_ARGS (targ);
14823                 }
14824
14825               /* We have some incomplete argument packs.  */
14826               incomplete = true;
14827             }
14828         }
14829
14830       processing_template_decl += incomplete;
14831       fntype = deduction_tsubst_fntype (fn, converted_args,
14832                                         (explain_p
14833                                          ? tf_warning_or_error
14834                                          : tf_none));
14835       processing_template_decl -= incomplete;
14836
14837       if (fntype == error_mark_node)
14838         return 1;
14839
14840       /* Place the explicitly specified arguments in TARGS.  */
14841       for (i = NUM_TMPL_ARGS (converted_args); i--;)
14842         TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
14843     }
14844
14845   /* Never do unification on the 'this' parameter.  */
14846   parms = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (fntype));
14847
14848   if (return_type)
14849     {
14850       tree *new_args;
14851
14852       parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
14853       new_args = XALLOCAVEC (tree, nargs + 1);
14854       new_args[0] = return_type;
14855       memcpy (new_args + 1, args, nargs * sizeof (tree));
14856       args = new_args;
14857       ++nargs;
14858     }
14859
14860   /* We allow incomplete unification without an error message here
14861      because the standard doesn't seem to explicitly prohibit it.  Our
14862      callers must be ready to deal with unification failures in any
14863      event.  */
14864   result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
14865                                   targs, parms, args, nargs, /*subr=*/0,
14866                                   strict, flags, explain_p);
14867
14868   /* Now that we have bindings for all of the template arguments,
14869      ensure that the arguments deduced for the template template
14870      parameters have compatible template parameter lists.  We cannot
14871      check this property before we have deduced all template
14872      arguments, because the template parameter types of a template
14873      template parameter might depend on prior template parameters
14874      deduced after the template template parameter.  The following
14875      ill-formed example illustrates this issue:
14876
14877        template<typename T, template<T> class C> void f(C<5>, T);
14878
14879        template<int N> struct X {};
14880
14881        void g() {
14882          f(X<5>(), 5l); // error: template argument deduction fails
14883        }
14884
14885      The template parameter list of 'C' depends on the template type
14886      parameter 'T', but 'C' is deduced to 'X' before 'T' is deduced to
14887      'long'.  Thus, we can't check that 'C' cannot bind to 'X' at the
14888      time that we deduce 'C'.  */
14889   if (result == 0
14890       && !template_template_parm_bindings_ok_p 
14891            (DECL_INNERMOST_TEMPLATE_PARMS (fn), targs))
14892     return unify_inconsistent_template_template_parameters (explain_p);
14893
14894   if (result == 0)
14895     /* All is well so far.  Now, check:
14896
14897        [temp.deduct]
14898
14899        When all template arguments have been deduced, all uses of
14900        template parameters in nondeduced contexts are replaced with
14901        the corresponding deduced argument values.  If the
14902        substitution results in an invalid type, as described above,
14903        type deduction fails.  */
14904     {
14905       tree substed = deduction_tsubst_fntype (fn, targs,
14906                                               (explain_p
14907                                                ? tf_warning_or_error
14908                                                : tf_none));
14909       if (substed == error_mark_node)
14910         return 1;
14911
14912       /* If we're looking for an exact match, check that what we got
14913          is indeed an exact match.  It might not be if some template
14914          parameters are used in non-deduced contexts.  */
14915       if (strict == DEDUCE_EXACT)
14916         {
14917           unsigned int i;
14918
14919           tree sarg
14920             = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (substed));
14921           if (return_type)
14922             sarg = tree_cons (NULL_TREE, TREE_TYPE (substed), sarg);
14923           for (i = 0; i < nargs && sarg; ++i, sarg = TREE_CHAIN (sarg))
14924             if (!same_type_p (args[i], TREE_VALUE (sarg)))
14925               return unify_type_mismatch (explain_p, args[i],
14926                                           TREE_VALUE (sarg));
14927         }
14928     }
14929
14930   return result;
14931 }
14932
14933 /* Adjust types before performing type deduction, as described in
14934    [temp.deduct.call] and [temp.deduct.conv].  The rules in these two
14935    sections are symmetric.  PARM is the type of a function parameter
14936    or the return type of the conversion function.  ARG is the type of
14937    the argument passed to the call, or the type of the value
14938    initialized with the result of the conversion function.
14939    ARG_EXPR is the original argument expression, which may be null.  */
14940
14941 static int
14942 maybe_adjust_types_for_deduction (unification_kind_t strict,
14943                                   tree* parm,
14944                                   tree* arg,
14945                                   tree arg_expr)
14946 {
14947   int result = 0;
14948
14949   switch (strict)
14950     {
14951     case DEDUCE_CALL:
14952       break;
14953
14954     case DEDUCE_CONV:
14955       {
14956         /* Swap PARM and ARG throughout the remainder of this
14957            function; the handling is precisely symmetric since PARM
14958            will initialize ARG rather than vice versa.  */
14959         tree* temp = parm;
14960         parm = arg;
14961         arg = temp;
14962         break;
14963       }
14964
14965     case DEDUCE_EXACT:
14966       /* Core issue #873: Do the DR606 thing (see below) for these cases,
14967          too, but here handle it by stripping the reference from PARM
14968          rather than by adding it to ARG.  */
14969       if (TREE_CODE (*parm) == REFERENCE_TYPE
14970           && TYPE_REF_IS_RVALUE (*parm)
14971           && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
14972           && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
14973           && TREE_CODE (*arg) == REFERENCE_TYPE
14974           && !TYPE_REF_IS_RVALUE (*arg))
14975         *parm = TREE_TYPE (*parm);
14976       /* Nothing else to do in this case.  */
14977       return 0;
14978
14979     default:
14980       gcc_unreachable ();
14981     }
14982
14983   if (TREE_CODE (*parm) != REFERENCE_TYPE)
14984     {
14985       /* [temp.deduct.call]
14986
14987          If P is not a reference type:
14988
14989          --If A is an array type, the pointer type produced by the
14990          array-to-pointer standard conversion (_conv.array_) is
14991          used in place of A for type deduction; otherwise,
14992
14993          --If A is a function type, the pointer type produced by
14994          the function-to-pointer standard conversion
14995          (_conv.func_) is used in place of A for type deduction;
14996          otherwise,
14997
14998          --If A is a cv-qualified type, the top level
14999          cv-qualifiers of A's type are ignored for type
15000          deduction.  */
15001       if (TREE_CODE (*arg) == ARRAY_TYPE)
15002         *arg = build_pointer_type (TREE_TYPE (*arg));
15003       else if (TREE_CODE (*arg) == FUNCTION_TYPE)
15004         *arg = build_pointer_type (*arg);
15005       else
15006         *arg = TYPE_MAIN_VARIANT (*arg);
15007     }
15008
15009   /* From C++0x [14.8.2.1/3 temp.deduct.call] (after DR606), "If P is
15010      of the form T&&, where T is a template parameter, and the argument
15011      is an lvalue, T is deduced as A& */
15012   if (TREE_CODE (*parm) == REFERENCE_TYPE
15013       && TYPE_REF_IS_RVALUE (*parm)
15014       && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
15015       && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
15016       && (arg_expr ? real_lvalue_p (arg_expr)
15017           /* try_one_overload doesn't provide an arg_expr, but
15018              functions are always lvalues.  */
15019           : TREE_CODE (*arg) == FUNCTION_TYPE))
15020     *arg = build_reference_type (*arg);
15021
15022   /* [temp.deduct.call]
15023
15024      If P is a cv-qualified type, the top level cv-qualifiers
15025      of P's type are ignored for type deduction.  If P is a
15026      reference type, the type referred to by P is used for
15027      type deduction.  */
15028   *parm = TYPE_MAIN_VARIANT (*parm);
15029   if (TREE_CODE (*parm) == REFERENCE_TYPE)
15030     {
15031       *parm = TREE_TYPE (*parm);
15032       result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
15033     }
15034
15035   /* DR 322. For conversion deduction, remove a reference type on parm
15036      too (which has been swapped into ARG).  */
15037   if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
15038     *arg = TREE_TYPE (*arg);
15039
15040   return result;
15041 }
15042
15043 /* Subroutine of unify_one_argument.  PARM is a function parameter of a
15044    template which does contain any deducible template parameters; check if
15045    ARG is a suitable match for it.  STRICT, FLAGS and EXPLAIN_P are as in
15046    unify_one_argument.  */
15047
15048 static int
15049 check_non_deducible_conversion (tree parm, tree arg, int strict,
15050                                 int flags, bool explain_p)
15051 {
15052   tree type;
15053
15054   if (!TYPE_P (arg))
15055     type = TREE_TYPE (arg);
15056   else
15057     type = arg;
15058
15059   if (same_type_p (parm, type))
15060     return unify_success (explain_p);
15061
15062   if (strict == DEDUCE_CONV)
15063     {
15064       if (can_convert_arg (type, parm, NULL_TREE, flags))
15065         return unify_success (explain_p);
15066     }
15067   else if (strict != DEDUCE_EXACT)
15068     {
15069       if (can_convert_arg (parm, type,
15070                            TYPE_P (arg) ? NULL_TREE : arg,
15071                            flags))
15072         return unify_success (explain_p);
15073     }
15074
15075   if (strict == DEDUCE_EXACT)
15076     return unify_type_mismatch (explain_p, parm, arg);
15077   else
15078     return unify_arg_conversion (explain_p, parm, type, arg);
15079 }
15080
15081 /* Subroutine of type_unification_real and unify_pack_expansion to
15082    handle unification of a single P/A pair.  Parameters are as
15083    for those functions.  */
15084
15085 static int
15086 unify_one_argument (tree tparms, tree targs, tree parm, tree arg,
15087                     int subr, unification_kind_t strict, int flags,
15088                     bool explain_p)
15089 {
15090   tree arg_expr = NULL_TREE;
15091   int arg_strict;
15092
15093   if (arg == error_mark_node || parm == error_mark_node)
15094     return unify_invalid (explain_p);
15095   if (arg == unknown_type_node)
15096     /* We can't deduce anything from this, but we might get all the
15097        template args from other function args.  */
15098     return unify_success (explain_p);
15099
15100   /* FIXME uses_deducible_template_parms */
15101   if (TYPE_P (parm) && !uses_template_parms (parm))
15102     return check_non_deducible_conversion (parm, arg, strict, flags,
15103                                            explain_p);
15104
15105   switch (strict)
15106     {
15107     case DEDUCE_CALL:
15108       arg_strict = (UNIFY_ALLOW_OUTER_LEVEL
15109                     | UNIFY_ALLOW_MORE_CV_QUAL
15110                     | UNIFY_ALLOW_DERIVED);
15111       break;
15112
15113     case DEDUCE_CONV:
15114       arg_strict = UNIFY_ALLOW_LESS_CV_QUAL;
15115       break;
15116
15117     case DEDUCE_EXACT:
15118       arg_strict = UNIFY_ALLOW_NONE;
15119       break;
15120
15121     default:
15122       gcc_unreachable ();
15123     }
15124
15125   /* We only do these transformations if this is the top-level
15126      parameter_type_list in a call or declaration matching; in other
15127      situations (nested function declarators, template argument lists) we
15128      won't be comparing a type to an expression, and we don't do any type
15129      adjustments.  */
15130   if (!subr)
15131     {
15132       if (!TYPE_P (arg))
15133         {
15134           gcc_assert (TREE_TYPE (arg) != NULL_TREE);
15135           if (type_unknown_p (arg))
15136             {
15137               /* [temp.deduct.type] A template-argument can be
15138                  deduced from a pointer to function or pointer
15139                  to member function argument if the set of
15140                  overloaded functions does not contain function
15141                  templates and at most one of a set of
15142                  overloaded functions provides a unique
15143                  match.  */
15144
15145               if (resolve_overloaded_unification
15146                   (tparms, targs, parm, arg, strict,
15147                    arg_strict, explain_p))
15148                 return unify_success (explain_p);
15149               return unify_overload_resolution_failure (explain_p, arg);
15150             }
15151
15152           arg_expr = arg;
15153           arg = unlowered_expr_type (arg);
15154           if (arg == error_mark_node)
15155             return unify_invalid (explain_p);
15156         }
15157
15158       arg_strict |=
15159         maybe_adjust_types_for_deduction (strict, &parm, &arg, arg_expr);
15160     }
15161   else
15162     gcc_assert ((TYPE_P (parm) || TREE_CODE (parm) == TEMPLATE_DECL)
15163                 == (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL));
15164
15165   /* For deduction from an init-list we need the actual list.  */
15166   if (arg_expr && BRACE_ENCLOSED_INITIALIZER_P (arg_expr))
15167     arg = arg_expr;
15168   return unify (tparms, targs, parm, arg, arg_strict, explain_p);
15169 }
15170
15171 /* Most parms like fn_type_unification.
15172
15173    If SUBR is 1, we're being called recursively (to unify the
15174    arguments of a function or method parameter of a function
15175    template). */
15176
15177 static int
15178 type_unification_real (tree tparms,
15179                        tree targs,
15180                        tree xparms,
15181                        const tree *xargs,
15182                        unsigned int xnargs,
15183                        int subr,
15184                        unification_kind_t strict,
15185                        int flags,
15186                        bool explain_p)
15187 {
15188   tree parm, arg;
15189   int i;
15190   int ntparms = TREE_VEC_LENGTH (tparms);
15191   int saw_undeduced = 0;
15192   tree parms;
15193   const tree *args;
15194   unsigned int nargs;
15195   unsigned int ia;
15196
15197   gcc_assert (TREE_CODE (tparms) == TREE_VEC);
15198   gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
15199   gcc_assert (ntparms > 0);
15200
15201   /* Reset the number of non-defaulted template arguments contained
15202      in TARGS.  */
15203   NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs) = NULL_TREE;
15204
15205  again:
15206   parms = xparms;
15207   args = xargs;
15208   nargs = xnargs;
15209
15210   ia = 0;
15211   while (parms && parms != void_list_node
15212          && ia < nargs)
15213     {
15214       parm = TREE_VALUE (parms);
15215
15216       if (TREE_CODE (parm) == TYPE_PACK_EXPANSION
15217           && (!TREE_CHAIN (parms) || TREE_CHAIN (parms) == void_list_node))
15218         /* For a function parameter pack that occurs at the end of the
15219            parameter-declaration-list, the type A of each remaining
15220            argument of the call is compared with the type P of the
15221            declarator-id of the function parameter pack.  */
15222         break;
15223
15224       parms = TREE_CHAIN (parms);
15225
15226       if (TREE_CODE (parm) == TYPE_PACK_EXPANSION)
15227         /* For a function parameter pack that does not occur at the
15228            end of the parameter-declaration-list, the type of the
15229            parameter pack is a non-deduced context.  */
15230         continue;
15231
15232       arg = args[ia];
15233       ++ia;
15234
15235       if (unify_one_argument (tparms, targs, parm, arg, subr, strict,
15236                               flags, explain_p))
15237         return 1;
15238     }
15239
15240   if (parms 
15241       && parms != void_list_node
15242       && TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
15243     {
15244       /* Unify the remaining arguments with the pack expansion type.  */
15245       tree argvec;
15246       tree parmvec = make_tree_vec (1);
15247
15248       /* Allocate a TREE_VEC and copy in all of the arguments */ 
15249       argvec = make_tree_vec (nargs - ia);
15250       for (i = 0; ia < nargs; ++ia, ++i)
15251         TREE_VEC_ELT (argvec, i) = args[ia];
15252
15253       /* Copy the parameter into parmvec.  */
15254       TREE_VEC_ELT (parmvec, 0) = TREE_VALUE (parms);
15255       if (unify_pack_expansion (tparms, targs, parmvec, argvec, strict,
15256                                 /*subr=*/subr, explain_p))
15257         return 1;
15258
15259       /* Advance to the end of the list of parameters.  */
15260       parms = TREE_CHAIN (parms);
15261     }
15262
15263   /* Fail if we've reached the end of the parm list, and more args
15264      are present, and the parm list isn't variadic.  */
15265   if (ia < nargs && parms == void_list_node)
15266     return unify_too_many_arguments (explain_p, nargs, ia);
15267   /* Fail if parms are left and they don't have default values.  */
15268   if (parms && parms != void_list_node
15269       && TREE_PURPOSE (parms) == NULL_TREE)
15270     {
15271       unsigned int count = nargs;
15272       tree p = parms;
15273       while (p && p != void_list_node)
15274         {
15275           count++;
15276           p = TREE_CHAIN (p);
15277         }
15278       return unify_too_few_arguments (explain_p, ia, count);
15279     }
15280
15281   if (!subr)
15282     {
15283       tsubst_flags_t complain = (explain_p
15284                                  ? tf_warning_or_error
15285                                  : tf_none);
15286
15287       /* Check to see if we need another pass before we start clearing
15288          ARGUMENT_PACK_INCOMPLETE_P.  */
15289       for (i = 0; i < ntparms; i++)
15290         {
15291           tree targ = TREE_VEC_ELT (targs, i);
15292           tree tparm = TREE_VEC_ELT (tparms, i);
15293
15294           if (targ || tparm == error_mark_node)
15295             continue;
15296           tparm = TREE_VALUE (tparm);
15297
15298           /* If this is an undeduced nontype parameter that depends on
15299              a type parameter, try another pass; its type may have been
15300              deduced from a later argument than the one from which
15301              this parameter can be deduced.  */
15302           if (TREE_CODE (tparm) == PARM_DECL
15303               && uses_template_parms (TREE_TYPE (tparm))
15304               && !saw_undeduced++)
15305             goto again;
15306         }
15307
15308       for (i = 0; i < ntparms; i++)
15309         {
15310           tree targ = TREE_VEC_ELT (targs, i);
15311           tree tparm = TREE_VEC_ELT (tparms, i);
15312
15313           /* Clear the "incomplete" flags on all argument packs now so that
15314              substituting them into later default arguments works.  */
15315           if (targ && ARGUMENT_PACK_P (targ))
15316             {
15317               ARGUMENT_PACK_INCOMPLETE_P (targ) = 0;
15318               ARGUMENT_PACK_EXPLICIT_ARGS (targ) = NULL_TREE;
15319             }
15320
15321           if (targ || tparm == error_mark_node)
15322             continue;
15323           tparm = TREE_VALUE (tparm);
15324
15325           /* Core issue #226 (C++0x) [temp.deduct]:
15326
15327              If a template argument has not been deduced, its
15328              default template argument, if any, is used. 
15329
15330              When we are in C++98 mode, TREE_PURPOSE will either
15331              be NULL_TREE or ERROR_MARK_NODE, so we do not need
15332              to explicitly check cxx_dialect here.  */
15333           if (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)))
15334             {
15335               tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
15336               tree arg = TREE_PURPOSE (TREE_VEC_ELT (tparms, i));
15337               location_t save_loc = input_location;
15338               if (DECL_P (parm))
15339                 input_location = DECL_SOURCE_LOCATION (parm);
15340               arg = tsubst_template_arg (arg, targs, complain, NULL_TREE);
15341               arg = convert_template_argument (parm, arg, targs, complain,
15342                                                i, NULL_TREE);
15343               input_location = save_loc;
15344               if (arg == error_mark_node)
15345                 return 1;
15346               else
15347                 {
15348                   TREE_VEC_ELT (targs, i) = arg;
15349                   /* The position of the first default template argument,
15350                      is also the number of non-defaulted arguments in TARGS.
15351                      Record that.  */
15352                   if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
15353                     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, i);
15354                   continue;
15355                 }
15356             }
15357
15358           /* If the type parameter is a parameter pack, then it will
15359              be deduced to an empty parameter pack.  */
15360           if (template_parameter_pack_p (tparm))
15361             {
15362               tree arg;
15363
15364               if (TREE_CODE (tparm) == TEMPLATE_PARM_INDEX)
15365                 {
15366                   arg = make_node (NONTYPE_ARGUMENT_PACK);
15367                   TREE_TYPE (arg)  = TREE_TYPE (TEMPLATE_PARM_DECL (tparm));
15368                   TREE_CONSTANT (arg) = 1;
15369                 }
15370               else
15371                 arg = cxx_make_type (TYPE_ARGUMENT_PACK);
15372
15373               SET_ARGUMENT_PACK_ARGS (arg, make_tree_vec (0));
15374
15375               TREE_VEC_ELT (targs, i) = arg;
15376               continue;
15377             }
15378
15379           return unify_parameter_deduction_failure (explain_p, tparm);
15380         }
15381     }
15382 #ifdef ENABLE_CHECKING
15383   if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
15384     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, TREE_VEC_LENGTH (targs));
15385 #endif
15386
15387   return unify_success (explain_p);
15388 }
15389
15390 /* Subroutine of type_unification_real.  Args are like the variables
15391    at the call site.  ARG is an overloaded function (or template-id);
15392    we try deducing template args from each of the overloads, and if
15393    only one succeeds, we go with that.  Modifies TARGS and returns
15394    true on success.  */
15395
15396 static bool
15397 resolve_overloaded_unification (tree tparms,
15398                                 tree targs,
15399                                 tree parm,
15400                                 tree arg,
15401                                 unification_kind_t strict,
15402                                 int sub_strict,
15403                                 bool explain_p)
15404 {
15405   tree tempargs = copy_node (targs);
15406   int good = 0;
15407   tree goodfn = NULL_TREE;
15408   bool addr_p;
15409
15410   if (TREE_CODE (arg) == ADDR_EXPR)
15411     {
15412       arg = TREE_OPERAND (arg, 0);
15413       addr_p = true;
15414     }
15415   else
15416     addr_p = false;
15417
15418   if (TREE_CODE (arg) == COMPONENT_REF)
15419     /* Handle `&x' where `x' is some static or non-static member
15420        function name.  */
15421     arg = TREE_OPERAND (arg, 1);
15422
15423   if (TREE_CODE (arg) == OFFSET_REF)
15424     arg = TREE_OPERAND (arg, 1);
15425
15426   /* Strip baselink information.  */
15427   if (BASELINK_P (arg))
15428     arg = BASELINK_FUNCTIONS (arg);
15429
15430   if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
15431     {
15432       /* If we got some explicit template args, we need to plug them into
15433          the affected templates before we try to unify, in case the
15434          explicit args will completely resolve the templates in question.  */
15435
15436       int ok = 0;
15437       tree expl_subargs = TREE_OPERAND (arg, 1);
15438       arg = TREE_OPERAND (arg, 0);
15439
15440       for (; arg; arg = OVL_NEXT (arg))
15441         {
15442           tree fn = OVL_CURRENT (arg);
15443           tree subargs, elem;
15444
15445           if (TREE_CODE (fn) != TEMPLATE_DECL)
15446             continue;
15447
15448           ++processing_template_decl;
15449           subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
15450                                   expl_subargs, /*check_ret=*/false);
15451           if (subargs && !any_dependent_template_arguments_p (subargs))
15452             {
15453               elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
15454               if (try_one_overload (tparms, targs, tempargs, parm,
15455                                     elem, strict, sub_strict, addr_p, explain_p)
15456                   && (!goodfn || !decls_match (goodfn, elem)))
15457                 {
15458                   goodfn = elem;
15459                   ++good;
15460                 }
15461             }
15462           else if (subargs)
15463             ++ok;
15464           --processing_template_decl;
15465         }
15466       /* If no templates (or more than one) are fully resolved by the
15467          explicit arguments, this template-id is a non-deduced context; it
15468          could still be OK if we deduce all template arguments for the
15469          enclosing call through other arguments.  */
15470       if (good != 1)
15471         good = ok;
15472     }
15473   else if (TREE_CODE (arg) != OVERLOAD
15474            && TREE_CODE (arg) != FUNCTION_DECL)
15475     /* If ARG is, for example, "(0, &f)" then its type will be unknown
15476        -- but the deduction does not succeed because the expression is
15477        not just the function on its own.  */
15478     return false;
15479   else
15480     for (; arg; arg = OVL_NEXT (arg))
15481       if (try_one_overload (tparms, targs, tempargs, parm,
15482                             TREE_TYPE (OVL_CURRENT (arg)),
15483                             strict, sub_strict, addr_p, explain_p)
15484           && (!goodfn || !decls_match (goodfn, OVL_CURRENT (arg))))
15485         {
15486           goodfn = OVL_CURRENT (arg);
15487           ++good;
15488         }
15489
15490   /* [temp.deduct.type] A template-argument can be deduced from a pointer
15491      to function or pointer to member function argument if the set of
15492      overloaded functions does not contain function templates and at most
15493      one of a set of overloaded functions provides a unique match.
15494
15495      So if we found multiple possibilities, we return success but don't
15496      deduce anything.  */
15497
15498   if (good == 1)
15499     {
15500       int i = TREE_VEC_LENGTH (targs);
15501       for (; i--; )
15502         if (TREE_VEC_ELT (tempargs, i))
15503           TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
15504     }
15505   if (good)
15506     return true;
15507
15508   return false;
15509 }
15510
15511 /* Core DR 115: In contexts where deduction is done and fails, or in
15512    contexts where deduction is not done, if a template argument list is
15513    specified and it, along with any default template arguments, identifies
15514    a single function template specialization, then the template-id is an
15515    lvalue for the function template specialization.  */
15516
15517 tree
15518 resolve_nondeduced_context (tree orig_expr)
15519 {
15520   tree expr, offset, baselink;
15521   bool addr;
15522
15523   if (!type_unknown_p (orig_expr))
15524     return orig_expr;
15525
15526   expr = orig_expr;
15527   addr = false;
15528   offset = NULL_TREE;
15529   baselink = NULL_TREE;
15530
15531   if (TREE_CODE (expr) == ADDR_EXPR)
15532     {
15533       expr = TREE_OPERAND (expr, 0);
15534       addr = true;
15535     }
15536   if (TREE_CODE (expr) == OFFSET_REF)
15537     {
15538       offset = expr;
15539       expr = TREE_OPERAND (expr, 1);
15540     }
15541   if (BASELINK_P (expr))
15542     {
15543       baselink = expr;
15544       expr = BASELINK_FUNCTIONS (expr);
15545     }
15546
15547   if (TREE_CODE (expr) == TEMPLATE_ID_EXPR)
15548     {
15549       int good = 0;
15550       tree goodfn = NULL_TREE;
15551
15552       /* If we got some explicit template args, we need to plug them into
15553          the affected templates before we try to unify, in case the
15554          explicit args will completely resolve the templates in question.  */
15555
15556       tree expl_subargs = TREE_OPERAND (expr, 1);
15557       tree arg = TREE_OPERAND (expr, 0);
15558       tree badfn = NULL_TREE;
15559       tree badargs = NULL_TREE;
15560
15561       for (; arg; arg = OVL_NEXT (arg))
15562         {
15563           tree fn = OVL_CURRENT (arg);
15564           tree subargs, elem;
15565
15566           if (TREE_CODE (fn) != TEMPLATE_DECL)
15567             continue;
15568
15569           ++processing_template_decl;
15570           subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
15571                                   expl_subargs, /*check_ret=*/false);
15572           if (subargs && !any_dependent_template_arguments_p (subargs))
15573             {
15574               elem = instantiate_template (fn, subargs, tf_none);
15575               if (elem == error_mark_node)
15576                 {
15577                   badfn = fn;
15578                   badargs = subargs;
15579                 }
15580               else if (elem && (!goodfn || !decls_match (goodfn, elem)))
15581                 {
15582                   goodfn = elem;
15583                   ++good;
15584                 }
15585             }
15586           --processing_template_decl;
15587         }
15588       if (good == 1)
15589         {
15590           mark_used (goodfn);
15591           expr = goodfn;
15592           if (baselink)
15593             expr = build_baselink (BASELINK_BINFO (baselink),
15594                                    BASELINK_ACCESS_BINFO (baselink),
15595                                    expr, BASELINK_OPTYPE (baselink));
15596           if (offset)
15597             {
15598               tree base
15599                 = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (offset, 0)));
15600               expr = build_offset_ref (base, expr, addr);
15601             }
15602           if (addr)
15603             expr = cp_build_addr_expr (expr, tf_warning_or_error);
15604           return expr;
15605         }
15606       else if (good == 0 && badargs)
15607         /* There were no good options and at least one bad one, so let the
15608            user know what the problem is.  */
15609         instantiate_template (badfn, badargs, tf_warning_or_error);
15610     }
15611   return orig_expr;
15612 }
15613
15614 /* Subroutine of resolve_overloaded_unification; does deduction for a single
15615    overload.  Fills TARGS with any deduced arguments, or error_mark_node if
15616    different overloads deduce different arguments for a given parm.
15617    ADDR_P is true if the expression for which deduction is being
15618    performed was of the form "& fn" rather than simply "fn".
15619
15620    Returns 1 on success.  */
15621
15622 static int
15623 try_one_overload (tree tparms,
15624                   tree orig_targs,
15625                   tree targs,
15626                   tree parm,
15627                   tree arg,
15628                   unification_kind_t strict,
15629                   int sub_strict,
15630                   bool addr_p,
15631                   bool explain_p)
15632 {
15633   int nargs;
15634   tree tempargs;
15635   int i;
15636
15637   /* [temp.deduct.type] A template-argument can be deduced from a pointer
15638      to function or pointer to member function argument if the set of
15639      overloaded functions does not contain function templates and at most
15640      one of a set of overloaded functions provides a unique match.
15641
15642      So if this is a template, just return success.  */
15643
15644   if (uses_template_parms (arg))
15645     return 1;
15646
15647   if (TREE_CODE (arg) == METHOD_TYPE)
15648     arg = build_ptrmemfunc_type (build_pointer_type (arg));
15649   else if (addr_p)
15650     arg = build_pointer_type (arg);
15651
15652   sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
15653
15654   /* We don't copy orig_targs for this because if we have already deduced
15655      some template args from previous args, unify would complain when we
15656      try to deduce a template parameter for the same argument, even though
15657      there isn't really a conflict.  */
15658   nargs = TREE_VEC_LENGTH (targs);
15659   tempargs = make_tree_vec (nargs);
15660
15661   if (unify (tparms, tempargs, parm, arg, sub_strict, explain_p))
15662     return 0;
15663
15664   /* First make sure we didn't deduce anything that conflicts with
15665      explicitly specified args.  */
15666   for (i = nargs; i--; )
15667     {
15668       tree elt = TREE_VEC_ELT (tempargs, i);
15669       tree oldelt = TREE_VEC_ELT (orig_targs, i);
15670
15671       if (!elt)
15672         /*NOP*/;
15673       else if (uses_template_parms (elt))
15674         /* Since we're unifying against ourselves, we will fill in
15675            template args used in the function parm list with our own
15676            template parms.  Discard them.  */
15677         TREE_VEC_ELT (tempargs, i) = NULL_TREE;
15678       else if (oldelt && !template_args_equal (oldelt, elt))
15679         return 0;
15680     }
15681
15682   for (i = nargs; i--; )
15683     {
15684       tree elt = TREE_VEC_ELT (tempargs, i);
15685
15686       if (elt)
15687         TREE_VEC_ELT (targs, i) = elt;
15688     }
15689
15690   return 1;
15691 }
15692
15693 /* PARM is a template class (perhaps with unbound template
15694    parameters).  ARG is a fully instantiated type.  If ARG can be
15695    bound to PARM, return ARG, otherwise return NULL_TREE.  TPARMS and
15696    TARGS are as for unify.  */
15697
15698 static tree
15699 try_class_unification (tree tparms, tree targs, tree parm, tree arg,
15700                        bool explain_p)
15701 {
15702   tree copy_of_targs;
15703
15704   if (!CLASSTYPE_TEMPLATE_INFO (arg)
15705       || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
15706           != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
15707     return NULL_TREE;
15708
15709   /* We need to make a new template argument vector for the call to
15710      unify.  If we used TARGS, we'd clutter it up with the result of
15711      the attempted unification, even if this class didn't work out.
15712      We also don't want to commit ourselves to all the unifications
15713      we've already done, since unification is supposed to be done on
15714      an argument-by-argument basis.  In other words, consider the
15715      following pathological case:
15716
15717        template <int I, int J, int K>
15718        struct S {};
15719
15720        template <int I, int J>
15721        struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
15722
15723        template <int I, int J, int K>
15724        void f(S<I, J, K>, S<I, I, I>);
15725
15726        void g() {
15727          S<0, 0, 0> s0;
15728          S<0, 1, 2> s2;
15729
15730          f(s0, s2);
15731        }
15732
15733      Now, by the time we consider the unification involving `s2', we
15734      already know that we must have `f<0, 0, 0>'.  But, even though
15735      `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
15736      because there are two ways to unify base classes of S<0, 1, 2>
15737      with S<I, I, I>.  If we kept the already deduced knowledge, we
15738      would reject the possibility I=1.  */
15739   copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
15740
15741   /* If unification failed, we're done.  */
15742   if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
15743              CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE, explain_p))
15744     return NULL_TREE;
15745
15746   return arg;
15747 }
15748
15749 /* Given a template type PARM and a class type ARG, find the unique
15750    base type in ARG that is an instance of PARM.  We do not examine
15751    ARG itself; only its base-classes.  If there is not exactly one
15752    appropriate base class, return NULL_TREE.  PARM may be the type of
15753    a partial specialization, as well as a plain template type.  Used
15754    by unify.  */
15755
15756 static enum template_base_result
15757 get_template_base (tree tparms, tree targs, tree parm, tree arg,
15758                    bool explain_p, tree *result)
15759 {
15760   tree rval = NULL_TREE;
15761   tree binfo;
15762
15763   gcc_assert (RECORD_OR_UNION_CODE_P (TREE_CODE (arg)));
15764
15765   binfo = TYPE_BINFO (complete_type (arg));
15766   if (!binfo)
15767     {
15768       /* The type could not be completed.  */
15769       *result = NULL_TREE;
15770       return tbr_incomplete_type;
15771     }
15772
15773   /* Walk in inheritance graph order.  The search order is not
15774      important, and this avoids multiple walks of virtual bases.  */
15775   for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
15776     {
15777       tree r = try_class_unification (tparms, targs, parm,
15778                                       BINFO_TYPE (binfo), explain_p);
15779
15780       if (r)
15781         {
15782           /* If there is more than one satisfactory baseclass, then:
15783
15784                [temp.deduct.call]
15785
15786               If they yield more than one possible deduced A, the type
15787               deduction fails.
15788
15789              applies.  */
15790           if (rval && !same_type_p (r, rval))
15791             {
15792               *result = NULL_TREE;
15793               return tbr_ambiguous_baseclass;
15794             }
15795
15796           rval = r;
15797         }
15798     }
15799
15800   *result = rval;
15801   return tbr_success;
15802 }
15803
15804 /* Returns the level of DECL, which declares a template parameter.  */
15805
15806 static int
15807 template_decl_level (tree decl)
15808 {
15809   switch (TREE_CODE (decl))
15810     {
15811     case TYPE_DECL:
15812     case TEMPLATE_DECL:
15813       return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
15814
15815     case PARM_DECL:
15816       return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
15817
15818     default:
15819       gcc_unreachable ();
15820     }
15821   return 0;
15822 }
15823
15824 /* Decide whether ARG can be unified with PARM, considering only the
15825    cv-qualifiers of each type, given STRICT as documented for unify.
15826    Returns nonzero iff the unification is OK on that basis.  */
15827
15828 static int
15829 check_cv_quals_for_unify (int strict, tree arg, tree parm)
15830 {
15831   int arg_quals = cp_type_quals (arg);
15832   int parm_quals = cp_type_quals (parm);
15833
15834   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
15835       && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
15836     {
15837       /*  Although a CVR qualifier is ignored when being applied to a
15838           substituted template parameter ([8.3.2]/1 for example), that
15839           does not allow us to unify "const T" with "int&" because both
15840           types are not of the form "cv-list T" [14.8.2.5 temp.deduct.type].
15841           It is ok when we're allowing additional CV qualifiers
15842           at the outer level [14.8.2.1]/3,1st bullet.  */
15843       if ((TREE_CODE (arg) == REFERENCE_TYPE
15844            || TREE_CODE (arg) == FUNCTION_TYPE
15845            || TREE_CODE (arg) == METHOD_TYPE)
15846           && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
15847         return 0;
15848
15849       if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
15850           && (parm_quals & TYPE_QUAL_RESTRICT))
15851         return 0;
15852     }
15853
15854   if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
15855       && (arg_quals & parm_quals) != parm_quals)
15856     return 0;
15857
15858   if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
15859       && (parm_quals & arg_quals) != arg_quals)
15860     return 0;
15861
15862   return 1;
15863 }
15864
15865 /* Determines the LEVEL and INDEX for the template parameter PARM.  */
15866 void 
15867 template_parm_level_and_index (tree parm, int* level, int* index)
15868 {
15869   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
15870       || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
15871       || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
15872     {
15873       *index = TEMPLATE_TYPE_IDX (parm);
15874       *level = TEMPLATE_TYPE_LEVEL (parm);
15875     }
15876   else
15877     {
15878       *index = TEMPLATE_PARM_IDX (parm);
15879       *level = TEMPLATE_PARM_LEVEL (parm);
15880     }
15881 }
15882
15883 #define RECUR_AND_CHECK_FAILURE(TP, TA, P, A, S, EP)                    \
15884   do {                                                                  \
15885     if (unify (TP, TA, P, A, S, EP))                                    \
15886       return 1;                                                         \
15887   } while (0);
15888
15889 /* Unifies the remaining arguments in PACKED_ARGS with the pack
15890    expansion at the end of PACKED_PARMS. Returns 0 if the type
15891    deduction succeeds, 1 otherwise. STRICT is the same as in
15892    unify. CALL_ARGS_P is true iff PACKED_ARGS is actually a function
15893    call argument list. We'll need to adjust the arguments to make them
15894    types. SUBR tells us if this is from a recursive call to
15895    type_unification_real, or for comparing two template argument
15896    lists. */
15897
15898 static int
15899 unify_pack_expansion (tree tparms, tree targs, tree packed_parms, 
15900                       tree packed_args, unification_kind_t strict,
15901                       bool subr, bool explain_p)
15902 {
15903   tree parm 
15904     = TREE_VEC_ELT (packed_parms, TREE_VEC_LENGTH (packed_parms) - 1);
15905   tree pattern = PACK_EXPANSION_PATTERN (parm);
15906   tree pack, packs = NULL_TREE;
15907   int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
15908   int len = TREE_VEC_LENGTH (packed_args);
15909
15910   /* Determine the parameter packs we will be deducing from the
15911      pattern, and record their current deductions.  */
15912   for (pack = PACK_EXPANSION_PARAMETER_PACKS (parm); 
15913        pack; pack = TREE_CHAIN (pack))
15914     {
15915       tree parm_pack = TREE_VALUE (pack);
15916       int idx, level;
15917
15918       /* Determine the index and level of this parameter pack.  */
15919       template_parm_level_and_index (parm_pack, &level, &idx);
15920
15921       /* Keep track of the parameter packs and their corresponding
15922          argument packs.  */
15923       packs = tree_cons (parm_pack, TMPL_ARG (targs, level, idx), packs);
15924       TREE_TYPE (packs) = make_tree_vec (len - start);
15925     }
15926   
15927   /* Loop through all of the arguments that have not yet been
15928      unified and unify each with the pattern.  */
15929   for (i = start; i < len; i++)
15930     {
15931       tree parm;
15932       bool any_explicit = false;
15933       tree arg = TREE_VEC_ELT (packed_args, i);
15934
15935       /* For each parameter pack, set its TMPL_ARG to either NULL_TREE
15936          or the element of its argument pack at the current index if
15937          this argument was explicitly specified.  */
15938       for (pack = packs; pack; pack = TREE_CHAIN (pack))
15939         {
15940           int idx, level;
15941           tree arg, pargs;
15942           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
15943
15944           arg = NULL_TREE;
15945           if (TREE_VALUE (pack)
15946               && (pargs = ARGUMENT_PACK_EXPLICIT_ARGS (TREE_VALUE (pack)))
15947               && (i < TREE_VEC_LENGTH (pargs)))
15948             {
15949               any_explicit = true;
15950               arg = TREE_VEC_ELT (pargs, i);
15951             }
15952           TMPL_ARG (targs, level, idx) = arg;
15953         }
15954
15955       /* If we had explicit template arguments, substitute them into the
15956          pattern before deduction.  */
15957       if (any_explicit)
15958         {
15959           /* Some arguments might still be unspecified or dependent.  */
15960           bool dependent;
15961           ++processing_template_decl;
15962           dependent = any_dependent_template_arguments_p (targs);
15963           if (!dependent)
15964             --processing_template_decl;
15965           parm = tsubst (pattern, targs,
15966                          explain_p ? tf_warning_or_error : tf_none,
15967                          NULL_TREE);
15968           if (dependent)
15969             --processing_template_decl;
15970           if (parm == error_mark_node)
15971             return 1;
15972         }
15973       else
15974         parm = pattern;
15975
15976       /* Unify the pattern with the current argument.  */
15977       if (unify_one_argument (tparms, targs, parm, arg, subr, strict,
15978                               LOOKUP_IMPLICIT, explain_p))
15979         return 1;
15980
15981       /* For each parameter pack, collect the deduced value.  */
15982       for (pack = packs; pack; pack = TREE_CHAIN (pack))
15983         {
15984           int idx, level;
15985           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
15986
15987           TREE_VEC_ELT (TREE_TYPE (pack), i - start) = 
15988             TMPL_ARG (targs, level, idx);
15989         }
15990     }
15991
15992   /* Verify that the results of unification with the parameter packs
15993      produce results consistent with what we've seen before, and make
15994      the deduced argument packs available.  */
15995   for (pack = packs; pack; pack = TREE_CHAIN (pack))
15996     {
15997       tree old_pack = TREE_VALUE (pack);
15998       tree new_args = TREE_TYPE (pack);
15999       int i, len = TREE_VEC_LENGTH (new_args);
16000       int idx, level;
16001       bool nondeduced_p = false;
16002
16003       /* By default keep the original deduced argument pack.
16004          If necessary, more specific code is going to update the
16005          resulting deduced argument later down in this function.  */
16006       template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
16007       TMPL_ARG (targs, level, idx) = old_pack;
16008
16009       /* If NEW_ARGS contains any NULL_TREE entries, we didn't
16010          actually deduce anything.  */
16011       for (i = 0; i < len && !nondeduced_p; ++i)
16012         if (TREE_VEC_ELT (new_args, i) == NULL_TREE)
16013           nondeduced_p = true;
16014       if (nondeduced_p)
16015         continue;
16016
16017       if (old_pack && ARGUMENT_PACK_INCOMPLETE_P (old_pack))
16018         {
16019           /* If we had fewer function args than explicit template args,
16020              just use the explicits.  */
16021           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
16022           int explicit_len = TREE_VEC_LENGTH (explicit_args);
16023           if (len < explicit_len)
16024             new_args = explicit_args;
16025         }
16026
16027       if (!old_pack)
16028         {
16029           tree result;
16030           /* Build the deduced *_ARGUMENT_PACK.  */
16031           if (TREE_CODE (TREE_PURPOSE (pack)) == TEMPLATE_PARM_INDEX)
16032             {
16033               result = make_node (NONTYPE_ARGUMENT_PACK);
16034               TREE_TYPE (result) = 
16035                 TREE_TYPE (TEMPLATE_PARM_DECL (TREE_PURPOSE (pack)));
16036               TREE_CONSTANT (result) = 1;
16037             }
16038           else
16039             result = cxx_make_type (TYPE_ARGUMENT_PACK);
16040
16041           SET_ARGUMENT_PACK_ARGS (result, new_args);
16042
16043           /* Note the deduced argument packs for this parameter
16044              pack.  */
16045           TMPL_ARG (targs, level, idx) = result;
16046         }
16047       else if (ARGUMENT_PACK_INCOMPLETE_P (old_pack)
16048                && (ARGUMENT_PACK_ARGS (old_pack) 
16049                    == ARGUMENT_PACK_EXPLICIT_ARGS (old_pack)))
16050         {
16051           /* We only had the explicitly-provided arguments before, but
16052              now we have a complete set of arguments.  */
16053           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
16054
16055           SET_ARGUMENT_PACK_ARGS (old_pack, new_args);
16056           ARGUMENT_PACK_INCOMPLETE_P (old_pack) = 1;
16057           ARGUMENT_PACK_EXPLICIT_ARGS (old_pack) = explicit_args;
16058         }
16059       else
16060         {
16061           tree bad_old_arg = NULL_TREE, bad_new_arg = NULL_TREE;
16062           tree old_args = ARGUMENT_PACK_ARGS (old_pack);
16063
16064           if (!comp_template_args_with_info (old_args, new_args,
16065                                              &bad_old_arg, &bad_new_arg))
16066             /* Inconsistent unification of this parameter pack.  */
16067             return unify_parameter_pack_inconsistent (explain_p,
16068                                                       bad_old_arg,
16069                                                       bad_new_arg);
16070         }
16071     }
16072
16073   return unify_success (explain_p);
16074 }
16075
16076 /* Deduce the value of template parameters.  TPARMS is the (innermost)
16077    set of template parameters to a template.  TARGS is the bindings
16078    for those template parameters, as determined thus far; TARGS may
16079    include template arguments for outer levels of template parameters
16080    as well.  PARM is a parameter to a template function, or a
16081    subcomponent of that parameter; ARG is the corresponding argument.
16082    This function attempts to match PARM with ARG in a manner
16083    consistent with the existing assignments in TARGS.  If more values
16084    are deduced, then TARGS is updated.
16085
16086    Returns 0 if the type deduction succeeds, 1 otherwise.  The
16087    parameter STRICT is a bitwise or of the following flags:
16088
16089      UNIFY_ALLOW_NONE:
16090        Require an exact match between PARM and ARG.
16091      UNIFY_ALLOW_MORE_CV_QUAL:
16092        Allow the deduced ARG to be more cv-qualified (by qualification
16093        conversion) than ARG.
16094      UNIFY_ALLOW_LESS_CV_QUAL:
16095        Allow the deduced ARG to be less cv-qualified than ARG.
16096      UNIFY_ALLOW_DERIVED:
16097        Allow the deduced ARG to be a template base class of ARG,
16098        or a pointer to a template base class of the type pointed to by
16099        ARG.
16100      UNIFY_ALLOW_INTEGER:
16101        Allow any integral type to be deduced.  See the TEMPLATE_PARM_INDEX
16102        case for more information.
16103      UNIFY_ALLOW_OUTER_LEVEL:
16104        This is the outermost level of a deduction. Used to determine validity
16105        of qualification conversions. A valid qualification conversion must
16106        have const qualified pointers leading up to the inner type which
16107        requires additional CV quals, except at the outer level, where const
16108        is not required [conv.qual]. It would be normal to set this flag in
16109        addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
16110      UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
16111        This is the outermost level of a deduction, and PARM can be more CV
16112        qualified at this point.
16113      UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
16114        This is the outermost level of a deduction, and PARM can be less CV
16115        qualified at this point.  */
16116
16117 static int
16118 unify (tree tparms, tree targs, tree parm, tree arg, int strict,
16119        bool explain_p)
16120 {
16121   int idx;
16122   tree targ;
16123   tree tparm;
16124   int strict_in = strict;
16125
16126   /* I don't think this will do the right thing with respect to types.
16127      But the only case I've seen it in so far has been array bounds, where
16128      signedness is the only information lost, and I think that will be
16129      okay.  */
16130   while (TREE_CODE (parm) == NOP_EXPR)
16131     parm = TREE_OPERAND (parm, 0);
16132
16133   if (arg == error_mark_node)
16134     return unify_invalid (explain_p);
16135   if (arg == unknown_type_node
16136       || arg == init_list_type_node)
16137     /* We can't deduce anything from this, but we might get all the
16138        template args from other function args.  */
16139     return unify_success (explain_p);
16140
16141   /* If PARM uses template parameters, then we can't bail out here,
16142      even if ARG == PARM, since we won't record unifications for the
16143      template parameters.  We might need them if we're trying to
16144      figure out which of two things is more specialized.  */
16145   if (arg == parm && !uses_template_parms (parm))
16146     return unify_success (explain_p);
16147
16148   /* Handle init lists early, so the rest of the function can assume
16149      we're dealing with a type. */
16150   if (BRACE_ENCLOSED_INITIALIZER_P (arg))
16151     {
16152       tree elt, elttype;
16153       unsigned i;
16154       tree orig_parm = parm;
16155
16156       /* Replace T with std::initializer_list<T> for deduction.  */
16157       if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
16158           && flag_deduce_init_list)
16159         parm = listify (parm);
16160
16161       if (!is_std_init_list (parm))
16162         /* We can only deduce from an initializer list argument if the
16163            parameter is std::initializer_list; otherwise this is a
16164            non-deduced context. */
16165         return unify_success (explain_p);
16166
16167       elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (parm), 0);
16168
16169       FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (arg), i, elt)
16170         {
16171           int elt_strict = strict;
16172
16173           if (elt == error_mark_node)
16174             return unify_invalid (explain_p);
16175
16176           if (!BRACE_ENCLOSED_INITIALIZER_P (elt))
16177             {
16178               tree type = TREE_TYPE (elt);
16179               /* It should only be possible to get here for a call.  */
16180               gcc_assert (elt_strict & UNIFY_ALLOW_OUTER_LEVEL);
16181               elt_strict |= maybe_adjust_types_for_deduction
16182                 (DEDUCE_CALL, &elttype, &type, elt);
16183               elt = type;
16184             }
16185
16186           RECUR_AND_CHECK_FAILURE (tparms, targs, elttype, elt, elt_strict,
16187                                    explain_p);
16188         }
16189
16190       /* If the std::initializer_list<T> deduction worked, replace the
16191          deduced A with std::initializer_list<A>.  */
16192       if (orig_parm != parm)
16193         {
16194           idx = TEMPLATE_TYPE_IDX (orig_parm);
16195           targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
16196           targ = listify (targ);
16197           TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = targ;
16198         }
16199       return unify_success (explain_p);
16200     }
16201
16202   /* Immediately reject some pairs that won't unify because of
16203      cv-qualification mismatches.  */
16204   if (TREE_CODE (arg) == TREE_CODE (parm)
16205       && TYPE_P (arg)
16206       /* It is the elements of the array which hold the cv quals of an array
16207          type, and the elements might be template type parms. We'll check
16208          when we recurse.  */
16209       && TREE_CODE (arg) != ARRAY_TYPE
16210       /* We check the cv-qualifiers when unifying with template type
16211          parameters below.  We want to allow ARG `const T' to unify with
16212          PARM `T' for example, when computing which of two templates
16213          is more specialized, for example.  */
16214       && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
16215       && !check_cv_quals_for_unify (strict_in, arg, parm))
16216     return unify_cv_qual_mismatch (explain_p, parm, arg);
16217
16218   if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
16219       && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
16220     strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
16221   strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
16222   strict &= ~UNIFY_ALLOW_DERIVED;
16223   strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
16224   strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
16225
16226   switch (TREE_CODE (parm))
16227     {
16228     case TYPENAME_TYPE:
16229     case SCOPE_REF:
16230     case UNBOUND_CLASS_TEMPLATE:
16231       /* In a type which contains a nested-name-specifier, template
16232          argument values cannot be deduced for template parameters used
16233          within the nested-name-specifier.  */
16234       return unify_success (explain_p);
16235
16236     case TEMPLATE_TYPE_PARM:
16237     case TEMPLATE_TEMPLATE_PARM:
16238     case BOUND_TEMPLATE_TEMPLATE_PARM:
16239       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
16240       if (tparm == error_mark_node)
16241         return unify_invalid (explain_p);
16242
16243       if (TEMPLATE_TYPE_LEVEL (parm)
16244           != template_decl_level (tparm))
16245         /* The PARM is not one we're trying to unify.  Just check
16246            to see if it matches ARG.  */
16247         {
16248           if (TREE_CODE (arg) == TREE_CODE (parm)
16249               && same_type_p (parm, arg))
16250             return unify_success (explain_p);
16251           else
16252             return unify_type_mismatch (explain_p, parm, arg);
16253         }
16254       idx = TEMPLATE_TYPE_IDX (parm);
16255       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
16256       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
16257
16258       /* Check for mixed types and values.  */
16259       if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
16260            && TREE_CODE (tparm) != TYPE_DECL)
16261           || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
16262               && TREE_CODE (tparm) != TEMPLATE_DECL))
16263         gcc_unreachable ();
16264
16265       if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
16266         {
16267           /* ARG must be constructed from a template class or a template
16268              template parameter.  */
16269           if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
16270               && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
16271             return unify_template_deduction_failure (explain_p, parm, arg);
16272
16273           {
16274             tree parmvec = TYPE_TI_ARGS (parm);
16275             tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
16276             tree full_argvec = add_to_template_args (targs, argvec);
16277             tree parm_parms 
16278               = DECL_INNERMOST_TEMPLATE_PARMS
16279                   (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (parm));
16280             int i, len;
16281             int parm_variadic_p = 0;
16282
16283             /* The resolution to DR150 makes clear that default
16284                arguments for an N-argument may not be used to bind T
16285                to a template template parameter with fewer than N
16286                parameters.  It is not safe to permit the binding of
16287                default arguments as an extension, as that may change
16288                the meaning of a conforming program.  Consider:
16289
16290                   struct Dense { static const unsigned int dim = 1; };
16291
16292                   template <template <typename> class View,
16293                             typename Block>
16294                   void operator+(float, View<Block> const&);
16295
16296                   template <typename Block,
16297                             unsigned int Dim = Block::dim>
16298                   struct Lvalue_proxy { operator float() const; };
16299
16300                   void
16301                   test_1d (void) {
16302                     Lvalue_proxy<Dense> p;
16303                     float b;
16304                     b + p;
16305                   }
16306
16307               Here, if Lvalue_proxy is permitted to bind to View, then
16308               the global operator+ will be used; if they are not, the
16309               Lvalue_proxy will be converted to float.  */
16310             if (coerce_template_parms (parm_parms,
16311                                        full_argvec,
16312                                        TYPE_TI_TEMPLATE (parm),
16313                                        (explain_p
16314                                         ? tf_warning_or_error
16315                                         : tf_none),
16316                                        /*require_all_args=*/true,
16317                                        /*use_default_args=*/false)
16318                 == error_mark_node)
16319               return 1;
16320
16321             /* Deduce arguments T, i from TT<T> or TT<i>.
16322                We check each element of PARMVEC and ARGVEC individually
16323                rather than the whole TREE_VEC since they can have
16324                different number of elements.  */
16325
16326             parmvec = expand_template_argument_pack (parmvec);
16327             argvec = expand_template_argument_pack (argvec);
16328
16329             len = TREE_VEC_LENGTH (parmvec);
16330
16331             /* Check if the parameters end in a pack, making them
16332                variadic.  */
16333             if (len > 0
16334                 && PACK_EXPANSION_P (TREE_VEC_ELT (parmvec, len - 1)))
16335               parm_variadic_p = 1;
16336             
16337             if (TREE_VEC_LENGTH (argvec) < len - parm_variadic_p)
16338               return unify_too_few_arguments (explain_p,
16339                                               TREE_VEC_LENGTH (argvec), len);
16340
16341              for (i = 0; i < len - parm_variadic_p; ++i)
16342               {
16343                 RECUR_AND_CHECK_FAILURE (tparms, targs,
16344                                          TREE_VEC_ELT (parmvec, i),
16345                                          TREE_VEC_ELT (argvec, i),
16346                                          UNIFY_ALLOW_NONE, explain_p);
16347               }
16348
16349             if (parm_variadic_p
16350                 && unify_pack_expansion (tparms, targs,
16351                                          parmvec, argvec,
16352                                          DEDUCE_EXACT,
16353                                          /*subr=*/true, explain_p))
16354               return 1;
16355           }
16356           arg = TYPE_TI_TEMPLATE (arg);
16357
16358           /* Fall through to deduce template name.  */
16359         }
16360
16361       if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
16362           || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
16363         {
16364           /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>.  */
16365
16366           /* Simple cases: Value already set, does match or doesn't.  */
16367           if (targ != NULL_TREE && template_args_equal (targ, arg))
16368             return unify_success (explain_p);
16369           else if (targ)
16370             return unify_inconsistency (explain_p, parm, targ, arg);
16371         }
16372       else
16373         {
16374           /* If PARM is `const T' and ARG is only `int', we don't have
16375              a match unless we are allowing additional qualification.
16376              If ARG is `const int' and PARM is just `T' that's OK;
16377              that binds `const int' to `T'.  */
16378           if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
16379                                          arg, parm))
16380             return unify_cv_qual_mismatch (explain_p, parm, arg);
16381
16382           /* Consider the case where ARG is `const volatile int' and
16383              PARM is `const T'.  Then, T should be `volatile int'.  */
16384           arg = cp_build_qualified_type_real
16385             (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
16386           if (arg == error_mark_node)
16387             return unify_invalid (explain_p);
16388
16389           /* Simple cases: Value already set, does match or doesn't.  */
16390           if (targ != NULL_TREE && same_type_p (targ, arg))
16391             return unify_success (explain_p);
16392           else if (targ)
16393             return unify_inconsistency (explain_p, parm, targ, arg);
16394
16395           /* Make sure that ARG is not a variable-sized array.  (Note
16396              that were talking about variable-sized arrays (like
16397              `int[n]'), rather than arrays of unknown size (like
16398              `int[]').)  We'll get very confused by such a type since
16399              the bound of the array is not constant, and therefore
16400              not mangleable.  Besides, such types are not allowed in
16401              ISO C++, so we can do as we please here.  We do allow
16402              them for 'auto' deduction, since that isn't ABI-exposed.  */
16403           if (!is_auto (parm) && variably_modified_type_p (arg, NULL_TREE))
16404             return unify_vla_arg (explain_p, arg);
16405
16406           /* Strip typedefs as in convert_template_argument.  */
16407           arg = canonicalize_type_argument (arg, tf_none);
16408         }
16409
16410       /* If ARG is a parameter pack or an expansion, we cannot unify
16411          against it unless PARM is also a parameter pack.  */
16412       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
16413           && !template_parameter_pack_p (parm))
16414         return unify_parameter_pack_mismatch (explain_p, parm, arg);
16415
16416       /* If the argument deduction results is a METHOD_TYPE,
16417          then there is a problem.
16418          METHOD_TYPE doesn't map to any real C++ type the result of
16419          the deduction can not be of that type.  */
16420       if (TREE_CODE (arg) == METHOD_TYPE)
16421         return unify_method_type_error (explain_p, arg);
16422
16423       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
16424       return unify_success (explain_p);
16425
16426     case TEMPLATE_PARM_INDEX:
16427       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
16428       if (tparm == error_mark_node)
16429         return unify_invalid (explain_p);
16430
16431       if (TEMPLATE_PARM_LEVEL (parm)
16432           != template_decl_level (tparm))
16433         {
16434           /* The PARM is not one we're trying to unify.  Just check
16435              to see if it matches ARG.  */
16436           int result = !(TREE_CODE (arg) == TREE_CODE (parm)
16437                          && cp_tree_equal (parm, arg));
16438           if (result)
16439             unify_expression_unequal (explain_p, parm, arg);
16440           return result;
16441         }
16442
16443       idx = TEMPLATE_PARM_IDX (parm);
16444       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
16445
16446       if (targ)
16447         {
16448           int x = !cp_tree_equal (targ, arg);
16449           if (x)
16450             unify_inconsistency (explain_p, parm, targ, arg);
16451           return x;
16452         }
16453
16454       /* [temp.deduct.type] If, in the declaration of a function template
16455          with a non-type template-parameter, the non-type
16456          template-parameter is used in an expression in the function
16457          parameter-list and, if the corresponding template-argument is
16458          deduced, the template-argument type shall match the type of the
16459          template-parameter exactly, except that a template-argument
16460          deduced from an array bound may be of any integral type.
16461          The non-type parameter might use already deduced type parameters.  */
16462       tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
16463       if (!TREE_TYPE (arg))
16464         /* Template-parameter dependent expression.  Just accept it for now.
16465            It will later be processed in convert_template_argument.  */
16466         ;
16467       else if (same_type_p (TREE_TYPE (arg), tparm))
16468         /* OK */;
16469       else if ((strict & UNIFY_ALLOW_INTEGER)
16470                && (TREE_CODE (tparm) == INTEGER_TYPE
16471                    || TREE_CODE (tparm) == BOOLEAN_TYPE))
16472         /* Convert the ARG to the type of PARM; the deduced non-type
16473            template argument must exactly match the types of the
16474            corresponding parameter.  */
16475         arg = fold (build_nop (tparm, arg));
16476       else if (uses_template_parms (tparm))
16477         /* We haven't deduced the type of this parameter yet.  Try again
16478            later.  */
16479         return unify_success (explain_p);
16480       else
16481         return unify_type_mismatch (explain_p, tparm, arg);
16482
16483       /* If ARG is a parameter pack or an expansion, we cannot unify
16484          against it unless PARM is also a parameter pack.  */
16485       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
16486           && !TEMPLATE_PARM_PARAMETER_PACK (parm))
16487         return unify_parameter_pack_mismatch (explain_p, parm, arg);
16488
16489       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
16490       return unify_success (explain_p);
16491
16492     case PTRMEM_CST:
16493      {
16494         /* A pointer-to-member constant can be unified only with
16495          another constant.  */
16496       if (TREE_CODE (arg) != PTRMEM_CST)
16497         return unify_ptrmem_cst_mismatch (explain_p, parm, arg);
16498
16499       /* Just unify the class member. It would be useless (and possibly
16500          wrong, depending on the strict flags) to unify also
16501          PTRMEM_CST_CLASS, because we want to be sure that both parm and
16502          arg refer to the same variable, even if through different
16503          classes. For instance:
16504
16505          struct A { int x; };
16506          struct B : A { };
16507
16508          Unification of &A::x and &B::x must succeed.  */
16509       return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
16510                     PTRMEM_CST_MEMBER (arg), strict, explain_p);
16511      }
16512
16513     case POINTER_TYPE:
16514       {
16515         if (TREE_CODE (arg) != POINTER_TYPE)
16516           return unify_type_mismatch (explain_p, parm, arg);
16517
16518         /* [temp.deduct.call]
16519
16520            A can be another pointer or pointer to member type that can
16521            be converted to the deduced A via a qualification
16522            conversion (_conv.qual_).
16523
16524            We pass down STRICT here rather than UNIFY_ALLOW_NONE.
16525            This will allow for additional cv-qualification of the
16526            pointed-to types if appropriate.  */
16527
16528         if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
16529           /* The derived-to-base conversion only persists through one
16530              level of pointers.  */
16531           strict |= (strict_in & UNIFY_ALLOW_DERIVED);
16532
16533         return unify (tparms, targs, TREE_TYPE (parm),
16534                       TREE_TYPE (arg), strict, explain_p);
16535       }
16536
16537     case REFERENCE_TYPE:
16538       if (TREE_CODE (arg) != REFERENCE_TYPE)
16539         return unify_type_mismatch (explain_p, parm, arg);
16540       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
16541                     strict & UNIFY_ALLOW_MORE_CV_QUAL, explain_p);
16542
16543     case ARRAY_TYPE:
16544       if (TREE_CODE (arg) != ARRAY_TYPE)
16545         return unify_type_mismatch (explain_p, parm, arg);
16546       if ((TYPE_DOMAIN (parm) == NULL_TREE)
16547           != (TYPE_DOMAIN (arg) == NULL_TREE))
16548         return unify_type_mismatch (explain_p, parm, arg);
16549       if (TYPE_DOMAIN (parm) != NULL_TREE)
16550         {
16551           tree parm_max;
16552           tree arg_max;
16553           bool parm_cst;
16554           bool arg_cst;
16555
16556           /* Our representation of array types uses "N - 1" as the
16557              TYPE_MAX_VALUE for an array with "N" elements, if "N" is
16558              not an integer constant.  We cannot unify arbitrarily
16559              complex expressions, so we eliminate the MINUS_EXPRs
16560              here.  */
16561           parm_max = TYPE_MAX_VALUE (TYPE_DOMAIN (parm));
16562           parm_cst = TREE_CODE (parm_max) == INTEGER_CST;
16563           if (!parm_cst)
16564             {
16565               gcc_assert (TREE_CODE (parm_max) == MINUS_EXPR);
16566               parm_max = TREE_OPERAND (parm_max, 0);
16567             }
16568           arg_max = TYPE_MAX_VALUE (TYPE_DOMAIN (arg));
16569           arg_cst = TREE_CODE (arg_max) == INTEGER_CST;
16570           if (!arg_cst)
16571             {
16572               /* The ARG_MAX may not be a simple MINUS_EXPR, if we are
16573                  trying to unify the type of a variable with the type
16574                  of a template parameter.  For example:
16575
16576                    template <unsigned int N>
16577                    void f (char (&) [N]);
16578                    int g(); 
16579                    void h(int i) {
16580                      char a[g(i)];
16581                      f(a); 
16582                    }
16583
16584                 Here, the type of the ARG will be "int [g(i)]", and
16585                 may be a SAVE_EXPR, etc.  */
16586               if (TREE_CODE (arg_max) != MINUS_EXPR)
16587                 return unify_vla_arg (explain_p, arg);
16588               arg_max = TREE_OPERAND (arg_max, 0);
16589             }
16590
16591           /* If only one of the bounds used a MINUS_EXPR, compensate
16592              by adding one to the other bound.  */
16593           if (parm_cst && !arg_cst)
16594             parm_max = fold_build2_loc (input_location, PLUS_EXPR,
16595                                     integer_type_node,
16596                                     parm_max,
16597                                     integer_one_node);
16598           else if (arg_cst && !parm_cst)
16599             arg_max = fold_build2_loc (input_location, PLUS_EXPR,
16600                                    integer_type_node,
16601                                    arg_max,
16602                                    integer_one_node);
16603
16604           RECUR_AND_CHECK_FAILURE (tparms, targs, parm_max, arg_max,
16605                                    UNIFY_ALLOW_INTEGER, explain_p);
16606         }
16607       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
16608                     strict & UNIFY_ALLOW_MORE_CV_QUAL, explain_p);
16609
16610     case REAL_TYPE:
16611     case COMPLEX_TYPE:
16612     case VECTOR_TYPE:
16613     case INTEGER_TYPE:
16614     case BOOLEAN_TYPE:
16615     case ENUMERAL_TYPE:
16616     case VOID_TYPE:
16617     case NULLPTR_TYPE:
16618       if (TREE_CODE (arg) != TREE_CODE (parm))
16619         return unify_type_mismatch (explain_p, parm, arg);
16620
16621       /* We have already checked cv-qualification at the top of the
16622          function.  */
16623       if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
16624         return unify_type_mismatch (explain_p, parm, arg);
16625
16626       /* As far as unification is concerned, this wins.  Later checks
16627          will invalidate it if necessary.  */
16628       return unify_success (explain_p);
16629
16630       /* Types INTEGER_CST and MINUS_EXPR can come from array bounds.  */
16631       /* Type INTEGER_CST can come from ordinary constant template args.  */
16632     case INTEGER_CST:
16633       while (TREE_CODE (arg) == NOP_EXPR)
16634         arg = TREE_OPERAND (arg, 0);
16635
16636       if (TREE_CODE (arg) != INTEGER_CST)
16637         return unify_template_argument_mismatch (explain_p, parm, arg);
16638       return (tree_int_cst_equal (parm, arg)
16639               ? unify_success (explain_p)
16640               : unify_template_argument_mismatch (explain_p, parm, arg));
16641
16642     case TREE_VEC:
16643       {
16644         int i, len, argslen;
16645         int parm_variadic_p = 0;
16646
16647         if (TREE_CODE (arg) != TREE_VEC)
16648           return unify_template_argument_mismatch (explain_p, parm, arg);
16649
16650         len = TREE_VEC_LENGTH (parm);
16651         argslen = TREE_VEC_LENGTH (arg);
16652
16653         /* Check for pack expansions in the parameters.  */
16654         for (i = 0; i < len; ++i)
16655           {
16656             if (PACK_EXPANSION_P (TREE_VEC_ELT (parm, i)))
16657               {
16658                 if (i == len - 1)
16659                   /* We can unify against something with a trailing
16660                      parameter pack.  */
16661                   parm_variadic_p = 1;
16662                 else
16663                   /* [temp.deduct.type]/9: If the template argument list of
16664                      P contains a pack expansion that is not the last
16665                      template argument, the entire template argument list
16666                      is a non-deduced context.  */
16667                   return unify_success (explain_p);
16668               }
16669           }
16670
16671         /* If we don't have enough arguments to satisfy the parameters
16672            (not counting the pack expression at the end), or we have
16673            too many arguments for a parameter list that doesn't end in
16674            a pack expression, we can't unify.  */
16675         if (parm_variadic_p
16676             ? argslen < len - parm_variadic_p
16677             : argslen != len)
16678           return unify_arity (explain_p, TREE_VEC_LENGTH (arg), len);
16679
16680         /* Unify all of the parameters that precede the (optional)
16681            pack expression.  */
16682         for (i = 0; i < len - parm_variadic_p; ++i)
16683           {
16684             RECUR_AND_CHECK_FAILURE (tparms, targs,
16685                                      TREE_VEC_ELT (parm, i),
16686                                      TREE_VEC_ELT (arg, i),
16687                                      UNIFY_ALLOW_NONE, explain_p);
16688           }
16689         if (parm_variadic_p)
16690           return unify_pack_expansion (tparms, targs, parm, arg,
16691                                        DEDUCE_EXACT,
16692                                        /*subr=*/true, explain_p);
16693         return unify_success (explain_p);
16694       }
16695
16696     case RECORD_TYPE:
16697     case UNION_TYPE:
16698       if (TREE_CODE (arg) != TREE_CODE (parm))
16699         return unify_type_mismatch (explain_p, parm, arg);
16700
16701       if (TYPE_PTRMEMFUNC_P (parm))
16702         {
16703           if (!TYPE_PTRMEMFUNC_P (arg))
16704             return unify_type_mismatch (explain_p, parm, arg);
16705
16706           return unify (tparms, targs,
16707                         TYPE_PTRMEMFUNC_FN_TYPE (parm),
16708                         TYPE_PTRMEMFUNC_FN_TYPE (arg),
16709                         strict, explain_p);
16710         }
16711
16712       if (CLASSTYPE_TEMPLATE_INFO (parm))
16713         {
16714           tree t = NULL_TREE;
16715
16716           if (strict_in & UNIFY_ALLOW_DERIVED)
16717             {
16718               /* First, we try to unify the PARM and ARG directly.  */
16719               t = try_class_unification (tparms, targs,
16720                                          parm, arg, explain_p);
16721
16722               if (!t)
16723                 {
16724                   /* Fallback to the special case allowed in
16725                      [temp.deduct.call]:
16726
16727                        If P is a class, and P has the form
16728                        template-id, then A can be a derived class of
16729                        the deduced A.  Likewise, if P is a pointer to
16730                        a class of the form template-id, A can be a
16731                        pointer to a derived class pointed to by the
16732                        deduced A.  */
16733                   enum template_base_result r;
16734                   r = get_template_base (tparms, targs, parm, arg,
16735                                          explain_p, &t);
16736
16737                   if (!t)
16738                     return unify_no_common_base (explain_p, r, parm, arg);
16739                 }
16740             }
16741           else if (CLASSTYPE_TEMPLATE_INFO (arg)
16742                    && (CLASSTYPE_TI_TEMPLATE (parm)
16743                        == CLASSTYPE_TI_TEMPLATE (arg)))
16744             /* Perhaps PARM is something like S<U> and ARG is S<int>.
16745                Then, we should unify `int' and `U'.  */
16746             t = arg;
16747           else
16748             /* There's no chance of unification succeeding.  */
16749             return unify_type_mismatch (explain_p, parm, arg);
16750
16751           return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
16752                         CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE, explain_p);
16753         }
16754       else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
16755         return unify_type_mismatch (explain_p, parm, arg);
16756       return unify_success (explain_p);
16757
16758     case METHOD_TYPE:
16759     case FUNCTION_TYPE:
16760       {
16761         unsigned int nargs;
16762         tree *args;
16763         tree a;
16764         unsigned int i;
16765
16766         if (TREE_CODE (arg) != TREE_CODE (parm))
16767           return unify_type_mismatch (explain_p, parm, arg);
16768
16769         /* CV qualifications for methods can never be deduced, they must
16770            match exactly.  We need to check them explicitly here,
16771            because type_unification_real treats them as any other
16772            cv-qualified parameter.  */
16773         if (TREE_CODE (parm) == METHOD_TYPE
16774             && (!check_cv_quals_for_unify
16775                 (UNIFY_ALLOW_NONE,
16776                  class_of_this_parm (arg),
16777                  class_of_this_parm (parm))))
16778           return unify_cv_qual_mismatch (explain_p, parm, arg);
16779
16780         RECUR_AND_CHECK_FAILURE (tparms, targs, TREE_TYPE (parm),
16781                                  TREE_TYPE (arg), UNIFY_ALLOW_NONE, explain_p);
16782
16783         nargs = list_length (TYPE_ARG_TYPES (arg));
16784         args = XALLOCAVEC (tree, nargs);
16785         for (a = TYPE_ARG_TYPES (arg), i = 0;
16786              a != NULL_TREE && a != void_list_node;
16787              a = TREE_CHAIN (a), ++i)
16788           args[i] = TREE_VALUE (a);
16789         nargs = i;
16790
16791         return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
16792                                       args, nargs, 1, DEDUCE_EXACT,
16793                                       LOOKUP_NORMAL, explain_p);
16794       }
16795
16796     case OFFSET_TYPE:
16797       /* Unify a pointer to member with a pointer to member function, which
16798          deduces the type of the member as a function type. */
16799       if (TYPE_PTRMEMFUNC_P (arg))
16800         {
16801           tree method_type;
16802           tree fntype;
16803
16804           /* Check top-level cv qualifiers */
16805           if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
16806             return unify_cv_qual_mismatch (explain_p, parm, arg);
16807
16808           RECUR_AND_CHECK_FAILURE (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
16809                                    TYPE_PTRMEMFUNC_OBJECT_TYPE (arg),
16810                                    UNIFY_ALLOW_NONE, explain_p);
16811
16812           /* Determine the type of the function we are unifying against. */
16813           method_type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (arg));
16814           fntype =
16815             build_function_type (TREE_TYPE (method_type),
16816                                  TREE_CHAIN (TYPE_ARG_TYPES (method_type)));
16817
16818           /* Extract the cv-qualifiers of the member function from the
16819              implicit object parameter and place them on the function
16820              type to be restored later. */
16821           fntype = apply_memfn_quals (fntype, type_memfn_quals (method_type));
16822           return unify (tparms, targs, TREE_TYPE (parm), fntype, strict, explain_p);
16823         }
16824
16825       if (TREE_CODE (arg) != OFFSET_TYPE)
16826         return unify_type_mismatch (explain_p, parm, arg);
16827       RECUR_AND_CHECK_FAILURE (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
16828                                TYPE_OFFSET_BASETYPE (arg),
16829                                UNIFY_ALLOW_NONE, explain_p);
16830       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
16831                     strict, explain_p);
16832
16833     case CONST_DECL:
16834       if (DECL_TEMPLATE_PARM_P (parm))
16835         return unify (tparms, targs, DECL_INITIAL (parm), arg, strict, explain_p);
16836       if (arg != integral_constant_value (parm))
16837         return unify_template_argument_mismatch (explain_p, parm, arg);
16838       return unify_success (explain_p);
16839
16840     case FIELD_DECL:
16841     case TEMPLATE_DECL:
16842       /* Matched cases are handled by the ARG == PARM test above.  */
16843       return unify_template_argument_mismatch (explain_p, parm, arg);
16844
16845     case VAR_DECL:
16846       /* A non-type template parameter that is a variable should be a
16847          an integral constant, in which case, it whould have been
16848          folded into its (constant) value. So we should not be getting
16849          a variable here.  */
16850       gcc_unreachable ();
16851
16852     case TYPE_ARGUMENT_PACK:
16853     case NONTYPE_ARGUMENT_PACK:
16854       return unify (tparms, targs, ARGUMENT_PACK_ARGS (parm),
16855                     ARGUMENT_PACK_ARGS (arg), strict, explain_p);
16856
16857     case TYPEOF_TYPE:
16858     case DECLTYPE_TYPE:
16859     case UNDERLYING_TYPE:
16860       /* Cannot deduce anything from TYPEOF_TYPE, DECLTYPE_TYPE,
16861          or UNDERLYING_TYPE nodes.  */
16862       return unify_success (explain_p);
16863
16864     case ERROR_MARK:
16865       /* Unification fails if we hit an error node.  */
16866       return unify_invalid (explain_p);
16867
16868     default:
16869       /* An unresolved overload is a nondeduced context.  */
16870       if (type_unknown_p (parm))
16871         return unify_success (explain_p);
16872       gcc_assert (EXPR_P (parm));
16873
16874       /* We must be looking at an expression.  This can happen with
16875          something like:
16876
16877            template <int I>
16878            void foo(S<I>, S<I + 2>);
16879
16880          This is a "nondeduced context":
16881
16882            [deduct.type]
16883
16884            The nondeduced contexts are:
16885
16886            --A type that is a template-id in which one or more of
16887              the template-arguments is an expression that references
16888              a template-parameter.
16889
16890          In these cases, we assume deduction succeeded, but don't
16891          actually infer any unifications.  */
16892
16893       if (!uses_template_parms (parm)
16894           && !template_args_equal (parm, arg))
16895         return unify_expression_unequal (explain_p, parm, arg);
16896       else
16897         return unify_success (explain_p);
16898     }
16899 }
16900 #undef RECUR_AND_CHECK_FAILURE
16901 \f
16902 /* Note that DECL can be defined in this translation unit, if
16903    required.  */
16904
16905 static void
16906 mark_definable (tree decl)
16907 {
16908   tree clone;
16909   DECL_NOT_REALLY_EXTERN (decl) = 1;
16910   FOR_EACH_CLONE (clone, decl)
16911     DECL_NOT_REALLY_EXTERN (clone) = 1;
16912 }
16913
16914 /* Called if RESULT is explicitly instantiated, or is a member of an
16915    explicitly instantiated class.  */
16916
16917 void
16918 mark_decl_instantiated (tree result, int extern_p)
16919 {
16920   SET_DECL_EXPLICIT_INSTANTIATION (result);
16921
16922   /* If this entity has already been written out, it's too late to
16923      make any modifications.  */
16924   if (TREE_ASM_WRITTEN (result))
16925     return;
16926
16927   if (TREE_CODE (result) != FUNCTION_DECL)
16928     /* The TREE_PUBLIC flag for function declarations will have been
16929        set correctly by tsubst.  */
16930     TREE_PUBLIC (result) = 1;
16931
16932   /* This might have been set by an earlier implicit instantiation.  */
16933   DECL_COMDAT (result) = 0;
16934
16935   if (extern_p)
16936     DECL_NOT_REALLY_EXTERN (result) = 0;
16937   else
16938     {
16939       mark_definable (result);
16940       /* Always make artificials weak.  */
16941       if (DECL_ARTIFICIAL (result) && flag_weak)
16942         comdat_linkage (result);
16943       /* For WIN32 we also want to put explicit instantiations in
16944          linkonce sections.  */
16945       else if (TREE_PUBLIC (result))
16946         maybe_make_one_only (result);
16947     }
16948
16949   /* If EXTERN_P, then this function will not be emitted -- unless
16950      followed by an explicit instantiation, at which point its linkage
16951      will be adjusted.  If !EXTERN_P, then this function will be
16952      emitted here.  In neither circumstance do we want
16953      import_export_decl to adjust the linkage.  */
16954   DECL_INTERFACE_KNOWN (result) = 1;
16955 }
16956
16957 /* Subroutine of more_specialized_fn: check whether TARGS is missing any
16958    important template arguments.  If any are missing, we check whether
16959    they're important by using error_mark_node for substituting into any
16960    args that were used for partial ordering (the ones between ARGS and END)
16961    and seeing if it bubbles up.  */
16962
16963 static bool
16964 check_undeduced_parms (tree targs, tree args, tree end)
16965 {
16966   bool found = false;
16967   int i;
16968   for (i = TREE_VEC_LENGTH (targs) - 1; i >= 0; --i)
16969     if (TREE_VEC_ELT (targs, i) == NULL_TREE)
16970       {
16971         found = true;
16972         TREE_VEC_ELT (targs, i) = error_mark_node;
16973       }
16974   if (found)
16975     {
16976       for (; args != end; args = TREE_CHAIN (args))
16977         {
16978           tree substed = tsubst (TREE_VALUE (args), targs, tf_none, NULL_TREE);
16979           if (substed == error_mark_node)
16980             return true;
16981         }
16982     }
16983   return false;
16984 }
16985
16986 /* Given two function templates PAT1 and PAT2, return:
16987
16988    1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
16989    -1 if PAT2 is more specialized than PAT1.
16990    0 if neither is more specialized.
16991
16992    LEN indicates the number of parameters we should consider
16993    (defaulted parameters should not be considered).
16994
16995    The 1998 std underspecified function template partial ordering, and
16996    DR214 addresses the issue.  We take pairs of arguments, one from
16997    each of the templates, and deduce them against each other.  One of
16998    the templates will be more specialized if all the *other*
16999    template's arguments deduce against its arguments and at least one
17000    of its arguments *does* *not* deduce against the other template's
17001    corresponding argument.  Deduction is done as for class templates.
17002    The arguments used in deduction have reference and top level cv
17003    qualifiers removed.  Iff both arguments were originally reference
17004    types *and* deduction succeeds in both directions, the template
17005    with the more cv-qualified argument wins for that pairing (if
17006    neither is more cv-qualified, they both are equal).  Unlike regular
17007    deduction, after all the arguments have been deduced in this way,
17008    we do *not* verify the deduced template argument values can be
17009    substituted into non-deduced contexts.
17010
17011    The logic can be a bit confusing here, because we look at deduce1 and
17012    targs1 to see if pat2 is at least as specialized, and vice versa; if we
17013    can find template arguments for pat1 to make arg1 look like arg2, that
17014    means that arg2 is at least as specialized as arg1.  */
17015
17016 int
17017 more_specialized_fn (tree pat1, tree pat2, int len)
17018 {
17019   tree decl1 = DECL_TEMPLATE_RESULT (pat1);
17020   tree decl2 = DECL_TEMPLATE_RESULT (pat2);
17021   tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
17022   tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
17023   tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
17024   tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
17025   tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
17026   tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
17027   tree origs1, origs2;
17028   bool lose1 = false;
17029   bool lose2 = false;
17030
17031   /* Remove the this parameter from non-static member functions.  If
17032      one is a non-static member function and the other is not a static
17033      member function, remove the first parameter from that function
17034      also.  This situation occurs for operator functions where we
17035      locate both a member function (with this pointer) and non-member
17036      operator (with explicit first operand).  */
17037   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
17038     {
17039       len--; /* LEN is the number of significant arguments for DECL1 */
17040       args1 = TREE_CHAIN (args1);
17041       if (!DECL_STATIC_FUNCTION_P (decl2))
17042         args2 = TREE_CHAIN (args2);
17043     }
17044   else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
17045     {
17046       args2 = TREE_CHAIN (args2);
17047       if (!DECL_STATIC_FUNCTION_P (decl1))
17048         {
17049           len--;
17050           args1 = TREE_CHAIN (args1);
17051         }
17052     }
17053
17054   /* If only one is a conversion operator, they are unordered.  */
17055   if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
17056     return 0;
17057
17058   /* Consider the return type for a conversion function */
17059   if (DECL_CONV_FN_P (decl1))
17060     {
17061       args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
17062       args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
17063       len++;
17064     }
17065
17066   processing_template_decl++;
17067
17068   origs1 = args1;
17069   origs2 = args2;
17070
17071   while (len--
17072          /* Stop when an ellipsis is seen.  */
17073          && args1 != NULL_TREE && args2 != NULL_TREE)
17074     {
17075       tree arg1 = TREE_VALUE (args1);
17076       tree arg2 = TREE_VALUE (args2);
17077       int deduce1, deduce2;
17078       int quals1 = -1;
17079       int quals2 = -1;
17080
17081       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
17082           && TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
17083         {
17084           /* When both arguments are pack expansions, we need only
17085              unify the patterns themselves.  */
17086           arg1 = PACK_EXPANSION_PATTERN (arg1);
17087           arg2 = PACK_EXPANSION_PATTERN (arg2);
17088
17089           /* This is the last comparison we need to do.  */
17090           len = 0;
17091         }
17092
17093       if (TREE_CODE (arg1) == REFERENCE_TYPE)
17094         {
17095           arg1 = TREE_TYPE (arg1);
17096           quals1 = cp_type_quals (arg1);
17097         }
17098
17099       if (TREE_CODE (arg2) == REFERENCE_TYPE)
17100         {
17101           arg2 = TREE_TYPE (arg2);
17102           quals2 = cp_type_quals (arg2);
17103         }
17104
17105       if ((quals1 < 0) != (quals2 < 0))
17106         {
17107           /* Only of the args is a reference, see if we should apply
17108              array/function pointer decay to it.  This is not part of
17109              DR214, but is, IMHO, consistent with the deduction rules
17110              for the function call itself, and with our earlier
17111              implementation of the underspecified partial ordering
17112              rules.  (nathan).  */
17113           if (quals1 >= 0)
17114             {
17115               switch (TREE_CODE (arg1))
17116                 {
17117                 case ARRAY_TYPE:
17118                   arg1 = TREE_TYPE (arg1);
17119                   /* FALLTHROUGH. */
17120                 case FUNCTION_TYPE:
17121                   arg1 = build_pointer_type (arg1);
17122                   break;
17123
17124                 default:
17125                   break;
17126                 }
17127             }
17128           else
17129             {
17130               switch (TREE_CODE (arg2))
17131                 {
17132                 case ARRAY_TYPE:
17133                   arg2 = TREE_TYPE (arg2);
17134                   /* FALLTHROUGH. */
17135                 case FUNCTION_TYPE:
17136                   arg2 = build_pointer_type (arg2);
17137                   break;
17138
17139                 default:
17140                   break;
17141                 }
17142             }
17143         }
17144
17145       arg1 = TYPE_MAIN_VARIANT (arg1);
17146       arg2 = TYPE_MAIN_VARIANT (arg2);
17147
17148       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION)
17149         {
17150           int i, len2 = list_length (args2);
17151           tree parmvec = make_tree_vec (1);
17152           tree argvec = make_tree_vec (len2);
17153           tree ta = args2;
17154
17155           /* Setup the parameter vector, which contains only ARG1.  */
17156           TREE_VEC_ELT (parmvec, 0) = arg1;
17157
17158           /* Setup the argument vector, which contains the remaining
17159              arguments.  */
17160           for (i = 0; i < len2; i++, ta = TREE_CHAIN (ta))
17161             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
17162
17163           deduce1 = (unify_pack_expansion (tparms1, targs1, parmvec,
17164                                            argvec, DEDUCE_EXACT,
17165                                            /*subr=*/true, /*explain_p=*/false)
17166                      == 0);
17167
17168           /* We cannot deduce in the other direction, because ARG1 is
17169              a pack expansion but ARG2 is not.  */
17170           deduce2 = 0;
17171         }
17172       else if (TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
17173         {
17174           int i, len1 = list_length (args1);
17175           tree parmvec = make_tree_vec (1);
17176           tree argvec = make_tree_vec (len1);
17177           tree ta = args1;
17178
17179           /* Setup the parameter vector, which contains only ARG1.  */
17180           TREE_VEC_ELT (parmvec, 0) = arg2;
17181
17182           /* Setup the argument vector, which contains the remaining
17183              arguments.  */
17184           for (i = 0; i < len1; i++, ta = TREE_CHAIN (ta))
17185             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
17186
17187           deduce2 = (unify_pack_expansion (tparms2, targs2, parmvec,
17188                                            argvec, DEDUCE_EXACT,
17189                                            /*subr=*/true, /*explain_p=*/false)
17190                      == 0);
17191
17192           /* We cannot deduce in the other direction, because ARG2 is
17193              a pack expansion but ARG1 is not.*/
17194           deduce1 = 0;
17195         }
17196
17197       else
17198         {
17199           /* The normal case, where neither argument is a pack
17200              expansion.  */
17201           deduce1 = (unify (tparms1, targs1, arg1, arg2,
17202                             UNIFY_ALLOW_NONE, /*explain_p=*/false)
17203                      == 0);
17204           deduce2 = (unify (tparms2, targs2, arg2, arg1,
17205                             UNIFY_ALLOW_NONE, /*explain_p=*/false)
17206                      == 0);
17207         }
17208
17209       /* If we couldn't deduce arguments for tparms1 to make arg1 match
17210          arg2, then arg2 is not as specialized as arg1.  */
17211       if (!deduce1)
17212         lose2 = true;
17213       if (!deduce2)
17214         lose1 = true;
17215
17216       /* "If, for a given type, deduction succeeds in both directions
17217          (i.e., the types are identical after the transformations above)
17218          and if the type from the argument template is more cv-qualified
17219          than the type from the parameter template (as described above)
17220          that type is considered to be more specialized than the other. If
17221          neither type is more cv-qualified than the other then neither type
17222          is more specialized than the other."  */
17223
17224       if (deduce1 && deduce2
17225           && quals1 != quals2 && quals1 >= 0 && quals2 >= 0)
17226         {
17227           if ((quals1 & quals2) == quals2)
17228             lose2 = true;
17229           if ((quals1 & quals2) == quals1)
17230             lose1 = true;
17231         }
17232
17233       if (lose1 && lose2)
17234         /* We've failed to deduce something in either direction.
17235            These must be unordered.  */
17236         break;
17237
17238       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
17239           || TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
17240         /* We have already processed all of the arguments in our
17241            handing of the pack expansion type.  */
17242         len = 0;
17243
17244       args1 = TREE_CHAIN (args1);
17245       args2 = TREE_CHAIN (args2);
17246     }
17247
17248   /* "In most cases, all template parameters must have values in order for
17249      deduction to succeed, but for partial ordering purposes a template
17250      parameter may remain without a value provided it is not used in the
17251      types being used for partial ordering."
17252
17253      Thus, if we are missing any of the targs1 we need to substitute into
17254      origs1, then pat2 is not as specialized as pat1.  This can happen when
17255      there is a nondeduced context.  */
17256   if (!lose2 && check_undeduced_parms (targs1, origs1, args1))
17257     lose2 = true;
17258   if (!lose1 && check_undeduced_parms (targs2, origs2, args2))
17259     lose1 = true;
17260
17261   processing_template_decl--;
17262
17263   /* All things being equal, if the next argument is a pack expansion
17264      for one function but not for the other, prefer the
17265      non-variadic function.  FIXME this is bogus; see c++/41958.  */
17266   if (lose1 == lose2
17267       && args1 && TREE_VALUE (args1)
17268       && args2 && TREE_VALUE (args2))
17269     {
17270       lose1 = TREE_CODE (TREE_VALUE (args1)) == TYPE_PACK_EXPANSION;
17271       lose2 = TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION;
17272     }
17273
17274   if (lose1 == lose2)
17275     return 0;
17276   else if (!lose1)
17277     return 1;
17278   else
17279     return -1;
17280 }
17281
17282 /* Determine which of two partial specializations is more specialized.
17283
17284    PAT1 is a TREE_LIST whose TREE_TYPE is the _TYPE node corresponding
17285    to the first partial specialization.  The TREE_VALUE is the
17286    innermost set of template parameters for the partial
17287    specialization.  PAT2 is similar, but for the second template.
17288
17289    Return 1 if the first partial specialization is more specialized;
17290    -1 if the second is more specialized; 0 if neither is more
17291    specialized.
17292
17293    See [temp.class.order] for information about determining which of
17294    two templates is more specialized.  */
17295
17296 static int
17297 more_specialized_class (tree pat1, tree pat2)
17298 {
17299   tree targs;
17300   tree tmpl1, tmpl2;
17301   int winner = 0;
17302   bool any_deductions = false;
17303
17304   tmpl1 = TREE_TYPE (pat1);
17305   tmpl2 = TREE_TYPE (pat2);
17306
17307   /* Just like what happens for functions, if we are ordering between
17308      different class template specializations, we may encounter dependent
17309      types in the arguments, and we need our dependency check functions
17310      to behave correctly.  */
17311   ++processing_template_decl;
17312   targs = get_class_bindings (TREE_VALUE (pat1),
17313                               CLASSTYPE_TI_ARGS (tmpl1),
17314                               CLASSTYPE_TI_ARGS (tmpl2));
17315   if (targs)
17316     {
17317       --winner;
17318       any_deductions = true;
17319     }
17320
17321   targs = get_class_bindings (TREE_VALUE (pat2),
17322                               CLASSTYPE_TI_ARGS (tmpl2),
17323                               CLASSTYPE_TI_ARGS (tmpl1));
17324   if (targs)
17325     {
17326       ++winner;
17327       any_deductions = true;
17328     }
17329   --processing_template_decl;
17330
17331   /* In the case of a tie where at least one of the class templates
17332      has a parameter pack at the end, the template with the most
17333      non-packed parameters wins.  */
17334   if (winner == 0
17335       && any_deductions
17336       && (template_args_variadic_p (TREE_PURPOSE (pat1))
17337           || template_args_variadic_p (TREE_PURPOSE (pat2))))
17338     {
17339       tree args1 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat1));
17340       tree args2 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat2));
17341       int len1 = TREE_VEC_LENGTH (args1);
17342       int len2 = TREE_VEC_LENGTH (args2);
17343
17344       /* We don't count the pack expansion at the end.  */
17345       if (template_args_variadic_p (TREE_PURPOSE (pat1)))
17346         --len1;
17347       if (template_args_variadic_p (TREE_PURPOSE (pat2)))
17348         --len2;
17349
17350       if (len1 > len2)
17351         return 1;
17352       else if (len1 < len2)
17353         return -1;
17354     }
17355
17356   return winner;
17357 }
17358
17359 /* Return the template arguments that will produce the function signature
17360    DECL from the function template FN, with the explicit template
17361    arguments EXPLICIT_ARGS.  If CHECK_RETTYPE is true, the return type must
17362    also match.  Return NULL_TREE if no satisfactory arguments could be
17363    found.  */
17364
17365 static tree
17366 get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
17367 {
17368   int ntparms = DECL_NTPARMS (fn);
17369   tree targs = make_tree_vec (ntparms);
17370   tree decl_type;
17371   tree decl_arg_types;
17372   tree *args;
17373   unsigned int nargs, ix;
17374   tree arg;
17375
17376   /* Substitute the explicit template arguments into the type of DECL.
17377      The call to fn_type_unification will handle substitution into the
17378      FN.  */
17379   decl_type = TREE_TYPE (decl);
17380   if (explicit_args && uses_template_parms (decl_type))
17381     {
17382       tree tmpl;
17383       tree converted_args;
17384
17385       if (DECL_TEMPLATE_INFO (decl))
17386         tmpl = DECL_TI_TEMPLATE (decl);
17387       else
17388         /* We can get here for some invalid specializations.  */
17389         return NULL_TREE;
17390
17391       converted_args
17392         = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
17393                                  explicit_args, NULL_TREE,
17394                                  tf_none,
17395                                  /*require_all_args=*/false,
17396                                  /*use_default_args=*/false);
17397       if (converted_args == error_mark_node)
17398         return NULL_TREE;
17399
17400       decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE);
17401       if (decl_type == error_mark_node)
17402         return NULL_TREE;
17403     }
17404
17405   /* Never do unification on the 'this' parameter.  */
17406   decl_arg_types = skip_artificial_parms_for (decl, 
17407                                               TYPE_ARG_TYPES (decl_type));
17408
17409   nargs = list_length (decl_arg_types);
17410   args = XALLOCAVEC (tree, nargs);
17411   for (arg = decl_arg_types, ix = 0;
17412        arg != NULL_TREE && arg != void_list_node;
17413        arg = TREE_CHAIN (arg), ++ix)
17414     args[ix] = TREE_VALUE (arg);
17415
17416   if (fn_type_unification (fn, explicit_args, targs,
17417                            args, ix,
17418                            (check_rettype || DECL_CONV_FN_P (fn)
17419                             ? TREE_TYPE (decl_type) : NULL_TREE),
17420                            DEDUCE_EXACT, LOOKUP_NORMAL, /*explain_p=*/false))
17421     return NULL_TREE;
17422
17423   return targs;
17424 }
17425
17426 /* Return the innermost template arguments that, when applied to a
17427    template specialization whose innermost template parameters are
17428    TPARMS, and whose specialization arguments are SPEC_ARGS, yield the
17429    ARGS.
17430
17431    For example, suppose we have:
17432
17433      template <class T, class U> struct S {};
17434      template <class T> struct S<T*, int> {};
17435
17436    Then, suppose we want to get `S<double*, int>'.  The TPARMS will be
17437    {T}, the SPEC_ARGS will be {T*, int} and the ARGS will be {double*,
17438    int}.  The resulting vector will be {double}, indicating that `T'
17439    is bound to `double'.  */
17440
17441 static tree
17442 get_class_bindings (tree tparms, tree spec_args, tree args)
17443 {
17444   int i, ntparms = TREE_VEC_LENGTH (tparms);
17445   tree deduced_args;
17446   tree innermost_deduced_args;
17447
17448   innermost_deduced_args = make_tree_vec (ntparms);
17449   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
17450     {
17451       deduced_args = copy_node (args);
17452       SET_TMPL_ARGS_LEVEL (deduced_args,
17453                            TMPL_ARGS_DEPTH (deduced_args),
17454                            innermost_deduced_args);
17455     }
17456   else
17457     deduced_args = innermost_deduced_args;
17458
17459   if (unify (tparms, deduced_args,
17460              INNERMOST_TEMPLATE_ARGS (spec_args),
17461              INNERMOST_TEMPLATE_ARGS (args),
17462              UNIFY_ALLOW_NONE, /*explain_p=*/false))
17463     return NULL_TREE;
17464
17465   for (i =  0; i < ntparms; ++i)
17466     if (! TREE_VEC_ELT (innermost_deduced_args, i))
17467       return NULL_TREE;
17468
17469   /* Verify that nondeduced template arguments agree with the type
17470      obtained from argument deduction.
17471
17472      For example:
17473
17474        struct A { typedef int X; };
17475        template <class T, class U> struct C {};
17476        template <class T> struct C<T, typename T::X> {};
17477
17478      Then with the instantiation `C<A, int>', we can deduce that
17479      `T' is `A' but unify () does not check whether `typename T::X'
17480      is `int'.  */
17481   spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
17482   if (spec_args == error_mark_node
17483       /* We only need to check the innermost arguments; the other
17484          arguments will always agree.  */
17485       || !comp_template_args (INNERMOST_TEMPLATE_ARGS (spec_args),
17486                               INNERMOST_TEMPLATE_ARGS (args)))
17487     return NULL_TREE;
17488
17489   /* Now that we have bindings for all of the template arguments,
17490      ensure that the arguments deduced for the template template
17491      parameters have compatible template parameter lists.  See the use
17492      of template_template_parm_bindings_ok_p in fn_type_unification
17493      for more information.  */
17494   if (!template_template_parm_bindings_ok_p (tparms, deduced_args))
17495     return NULL_TREE;
17496
17497   return deduced_args;
17498 }
17499
17500 /* TEMPLATES is a TREE_LIST.  Each TREE_VALUE is a TEMPLATE_DECL.
17501    Return the TREE_LIST node with the most specialized template, if
17502    any.  If there is no most specialized template, the error_mark_node
17503    is returned.
17504
17505    Note that this function does not look at, or modify, the
17506    TREE_PURPOSE or TREE_TYPE of any of the nodes.  Since the node
17507    returned is one of the elements of INSTANTIATIONS, callers may
17508    store information in the TREE_PURPOSE or TREE_TYPE of the nodes,
17509    and retrieve it from the value returned.  */
17510
17511 tree
17512 most_specialized_instantiation (tree templates)
17513 {
17514   tree fn, champ;
17515
17516   ++processing_template_decl;
17517
17518   champ = templates;
17519   for (fn = TREE_CHAIN (templates); fn; fn = TREE_CHAIN (fn))
17520     {
17521       int fate = 0;
17522
17523       if (get_bindings (TREE_VALUE (champ),
17524                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
17525                         NULL_TREE, /*check_ret=*/true))
17526         fate--;
17527
17528       if (get_bindings (TREE_VALUE (fn),
17529                         DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
17530                         NULL_TREE, /*check_ret=*/true))
17531         fate++;
17532
17533       if (fate == -1)
17534         champ = fn;
17535       else if (!fate)
17536         {
17537           /* Equally specialized, move to next function.  If there
17538              is no next function, nothing's most specialized.  */
17539           fn = TREE_CHAIN (fn);
17540           champ = fn;
17541           if (!fn)
17542             break;
17543         }
17544     }
17545
17546   if (champ)
17547     /* Now verify that champ is better than everything earlier in the
17548        instantiation list.  */
17549     for (fn = templates; fn != champ; fn = TREE_CHAIN (fn))
17550       if (get_bindings (TREE_VALUE (champ),
17551                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
17552                         NULL_TREE, /*check_ret=*/true)
17553           || !get_bindings (TREE_VALUE (fn),
17554                             DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
17555                             NULL_TREE, /*check_ret=*/true))
17556         {
17557           champ = NULL_TREE;
17558           break;
17559         }
17560
17561   processing_template_decl--;
17562
17563   if (!champ)
17564     return error_mark_node;
17565
17566   return champ;
17567 }
17568
17569 /* If DECL is a specialization of some template, return the most
17570    general such template.  Otherwise, returns NULL_TREE.
17571
17572    For example, given:
17573
17574      template <class T> struct S { template <class U> void f(U); };
17575
17576    if TMPL is `template <class U> void S<int>::f(U)' this will return
17577    the full template.  This function will not trace past partial
17578    specializations, however.  For example, given in addition:
17579
17580      template <class T> struct S<T*> { template <class U> void f(U); };
17581
17582    if TMPL is `template <class U> void S<int*>::f(U)' this will return
17583    `template <class T> template <class U> S<T*>::f(U)'.  */
17584
17585 tree
17586 most_general_template (tree decl)
17587 {
17588   /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
17589      an immediate specialization.  */
17590   if (TREE_CODE (decl) == FUNCTION_DECL)
17591     {
17592       if (DECL_TEMPLATE_INFO (decl)) {
17593         decl = DECL_TI_TEMPLATE (decl);
17594
17595         /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
17596            template friend.  */
17597         if (TREE_CODE (decl) != TEMPLATE_DECL)
17598           return NULL_TREE;
17599       } else
17600         return NULL_TREE;
17601     }
17602
17603   /* Look for more and more general templates.  */
17604   while (DECL_TEMPLATE_INFO (decl))
17605     {
17606       /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
17607          (See cp-tree.h for details.)  */
17608       if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
17609         break;
17610
17611       if (CLASS_TYPE_P (TREE_TYPE (decl))
17612           && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
17613         break;
17614
17615       /* Stop if we run into an explicitly specialized class template.  */
17616       if (!DECL_NAMESPACE_SCOPE_P (decl)
17617           && DECL_CONTEXT (decl)
17618           && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
17619         break;
17620
17621       decl = DECL_TI_TEMPLATE (decl);
17622     }
17623
17624   return decl;
17625 }
17626
17627 /* Return the most specialized of the class template partial
17628    specializations of TMPL which can produce TYPE, a specialization of
17629    TMPL.  The value returned is actually a TREE_LIST; the TREE_TYPE is
17630    a _TYPE node corresponding to the partial specialization, while the
17631    TREE_PURPOSE is the set of template arguments that must be
17632    substituted into the TREE_TYPE in order to generate TYPE.
17633
17634    If the choice of partial specialization is ambiguous, a diagnostic
17635    is issued, and the error_mark_node is returned.  If there are no
17636    partial specializations of TMPL matching TYPE, then NULL_TREE is
17637    returned.  */
17638
17639 static tree
17640 most_specialized_class (tree type, tree tmpl, tsubst_flags_t complain)
17641 {
17642   tree list = NULL_TREE;
17643   tree t;
17644   tree champ;
17645   int fate;
17646   bool ambiguous_p;
17647   tree args;
17648   tree outer_args = NULL_TREE;
17649
17650   tmpl = most_general_template (tmpl);
17651   args = CLASSTYPE_TI_ARGS (type);
17652
17653   /* For determining which partial specialization to use, only the
17654      innermost args are interesting.  */
17655   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
17656     {
17657       outer_args = strip_innermost_template_args (args, 1);
17658       args = INNERMOST_TEMPLATE_ARGS (args);
17659     }
17660
17661   for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
17662     {
17663       tree partial_spec_args;
17664       tree spec_args;
17665       tree parms = TREE_VALUE (t);
17666
17667       partial_spec_args = CLASSTYPE_TI_ARGS (TREE_TYPE (t));
17668
17669       ++processing_template_decl;
17670
17671       if (outer_args)
17672         {
17673           int i;
17674
17675           /* Discard the outer levels of args, and then substitute in the
17676              template args from the enclosing class.  */
17677           partial_spec_args = INNERMOST_TEMPLATE_ARGS (partial_spec_args);
17678           partial_spec_args = tsubst_template_args
17679             (partial_spec_args, outer_args, tf_none, NULL_TREE);
17680
17681           /* PARMS already refers to just the innermost parms, but the
17682              template parms in partial_spec_args had their levels lowered
17683              by tsubst, so we need to do the same for the parm list.  We
17684              can't just tsubst the TREE_VEC itself, as tsubst wants to
17685              treat a TREE_VEC as an argument vector.  */
17686           parms = copy_node (parms);
17687           for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
17688             TREE_VEC_ELT (parms, i) =
17689               tsubst (TREE_VEC_ELT (parms, i), outer_args, tf_none, NULL_TREE);
17690
17691         }
17692
17693       partial_spec_args =
17694           coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
17695                                  add_to_template_args (outer_args,
17696                                                        partial_spec_args),
17697                                  tmpl, tf_none,
17698                                  /*require_all_args=*/true,
17699                                  /*use_default_args=*/true);
17700
17701       --processing_template_decl;
17702
17703       if (partial_spec_args == error_mark_node)
17704         return error_mark_node;
17705
17706       spec_args = get_class_bindings (parms,
17707                                       partial_spec_args,
17708                                       args);
17709       if (spec_args)
17710         {
17711           if (outer_args)
17712             spec_args = add_to_template_args (outer_args, spec_args);
17713           list = tree_cons (spec_args, TREE_VALUE (t), list);
17714           TREE_TYPE (list) = TREE_TYPE (t);
17715         }
17716     }
17717
17718   if (! list)
17719     return NULL_TREE;
17720
17721   ambiguous_p = false;
17722   t = list;
17723   champ = t;
17724   t = TREE_CHAIN (t);
17725   for (; t; t = TREE_CHAIN (t))
17726     {
17727       fate = more_specialized_class (champ, t);
17728       if (fate == 1)
17729         ;
17730       else
17731         {
17732           if (fate == 0)
17733             {
17734               t = TREE_CHAIN (t);
17735               if (! t)
17736                 {
17737                   ambiguous_p = true;
17738                   break;
17739                 }
17740             }
17741           champ = t;
17742         }
17743     }
17744
17745   if (!ambiguous_p)
17746     for (t = list; t && t != champ; t = TREE_CHAIN (t))
17747       {
17748         fate = more_specialized_class (champ, t);
17749         if (fate != 1)
17750           {
17751             ambiguous_p = true;
17752             break;
17753           }
17754       }
17755
17756   if (ambiguous_p)
17757     {
17758       const char *str;
17759       char *spaces = NULL;
17760       if (!(complain & tf_error))
17761         return error_mark_node;
17762       error ("ambiguous class template instantiation for %q#T", type);
17763       str = ngettext ("candidate is:", "candidates are:", list_length (list));
17764       for (t = list; t; t = TREE_CHAIN (t))
17765         {
17766           error ("%s %+#T", spaces ? spaces : str, TREE_TYPE (t));
17767           spaces = spaces ? spaces : get_spaces (str);
17768         }
17769       free (spaces);
17770       return error_mark_node;
17771     }
17772
17773   return champ;
17774 }
17775
17776 /* Explicitly instantiate DECL.  */
17777
17778 void
17779 do_decl_instantiation (tree decl, tree storage)
17780 {
17781   tree result = NULL_TREE;
17782   int extern_p = 0;
17783
17784   if (!decl || decl == error_mark_node)
17785     /* An error occurred, for which grokdeclarator has already issued
17786        an appropriate message.  */
17787     return;
17788   else if (! DECL_LANG_SPECIFIC (decl))
17789     {
17790       error ("explicit instantiation of non-template %q#D", decl);
17791       return;
17792     }
17793   else if (TREE_CODE (decl) == VAR_DECL)
17794     {
17795       /* There is an asymmetry here in the way VAR_DECLs and
17796          FUNCTION_DECLs are handled by grokdeclarator.  In the case of
17797          the latter, the DECL we get back will be marked as a
17798          template instantiation, and the appropriate
17799          DECL_TEMPLATE_INFO will be set up.  This does not happen for
17800          VAR_DECLs so we do the lookup here.  Probably, grokdeclarator
17801          should handle VAR_DECLs as it currently handles
17802          FUNCTION_DECLs.  */
17803       if (!DECL_CLASS_SCOPE_P (decl))
17804         {
17805           error ("%qD is not a static data member of a class template", decl);
17806           return;
17807         }
17808       result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
17809       if (!result || TREE_CODE (result) != VAR_DECL)
17810         {
17811           error ("no matching template for %qD found", decl);
17812           return;
17813         }
17814       if (!same_type_p (TREE_TYPE (result), TREE_TYPE (decl)))
17815         {
17816           error ("type %qT for explicit instantiation %qD does not match "
17817                  "declared type %qT", TREE_TYPE (result), decl,
17818                  TREE_TYPE (decl));
17819           return;
17820         }
17821     }
17822   else if (TREE_CODE (decl) != FUNCTION_DECL)
17823     {
17824       error ("explicit instantiation of %q#D", decl);
17825       return;
17826     }
17827   else
17828     result = decl;
17829
17830   /* Check for various error cases.  Note that if the explicit
17831      instantiation is valid the RESULT will currently be marked as an
17832      *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
17833      until we get here.  */
17834
17835   if (DECL_TEMPLATE_SPECIALIZATION (result))
17836     {
17837       /* DR 259 [temp.spec].
17838
17839          Both an explicit instantiation and a declaration of an explicit
17840          specialization shall not appear in a program unless the explicit
17841          instantiation follows a declaration of the explicit specialization.
17842
17843          For a given set of template parameters, if an explicit
17844          instantiation of a template appears after a declaration of an
17845          explicit specialization for that template, the explicit
17846          instantiation has no effect.  */
17847       return;
17848     }
17849   else if (DECL_EXPLICIT_INSTANTIATION (result))
17850     {
17851       /* [temp.spec]
17852
17853          No program shall explicitly instantiate any template more
17854          than once.
17855
17856          We check DECL_NOT_REALLY_EXTERN so as not to complain when
17857          the first instantiation was `extern' and the second is not,
17858          and EXTERN_P for the opposite case.  */
17859       if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
17860         permerror (input_location, "duplicate explicit instantiation of %q#D", result);
17861       /* If an "extern" explicit instantiation follows an ordinary
17862          explicit instantiation, the template is instantiated.  */
17863       if (extern_p)
17864         return;
17865     }
17866   else if (!DECL_IMPLICIT_INSTANTIATION (result))
17867     {
17868       error ("no matching template for %qD found", result);
17869       return;
17870     }
17871   else if (!DECL_TEMPLATE_INFO (result))
17872     {
17873       permerror (input_location, "explicit instantiation of non-template %q#D", result);
17874       return;
17875     }
17876
17877   if (storage == NULL_TREE)
17878     ;
17879   else if (storage == ridpointers[(int) RID_EXTERN])
17880     {
17881       if (!in_system_header && (cxx_dialect == cxx98))
17882         pedwarn (input_location, OPT_pedantic, 
17883                  "ISO C++ 1998 forbids the use of %<extern%> on explicit "
17884                  "instantiations");
17885       extern_p = 1;
17886     }
17887   else
17888     error ("storage class %qD applied to template instantiation", storage);
17889
17890   check_explicit_instantiation_namespace (result);
17891   mark_decl_instantiated (result, extern_p);
17892   if (! extern_p)
17893     instantiate_decl (result, /*defer_ok=*/1,
17894                       /*expl_inst_class_mem_p=*/false);
17895 }
17896
17897 static void
17898 mark_class_instantiated (tree t, int extern_p)
17899 {
17900   SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
17901   SET_CLASSTYPE_INTERFACE_KNOWN (t);
17902   CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
17903   TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
17904   if (! extern_p)
17905     {
17906       CLASSTYPE_DEBUG_REQUESTED (t) = 1;
17907       rest_of_type_compilation (t, 1);
17908     }
17909 }
17910
17911 /* Called from do_type_instantiation through binding_table_foreach to
17912    do recursive instantiation for the type bound in ENTRY.  */
17913 static void
17914 bt_instantiate_type_proc (binding_entry entry, void *data)
17915 {
17916   tree storage = *(tree *) data;
17917
17918   if (MAYBE_CLASS_TYPE_P (entry->type)
17919       && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
17920     do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
17921 }
17922
17923 /* Called from do_type_instantiation to instantiate a member
17924    (a member function or a static member variable) of an
17925    explicitly instantiated class template.  */
17926 static void
17927 instantiate_class_member (tree decl, int extern_p)
17928 {
17929   mark_decl_instantiated (decl, extern_p);
17930   if (! extern_p)
17931     instantiate_decl (decl, /*defer_ok=*/1,
17932                       /*expl_inst_class_mem_p=*/true);
17933 }
17934
17935 /* Perform an explicit instantiation of template class T.  STORAGE, if
17936    non-null, is the RID for extern, inline or static.  COMPLAIN is
17937    nonzero if this is called from the parser, zero if called recursively,
17938    since the standard is unclear (as detailed below).  */
17939
17940 void
17941 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
17942 {
17943   int extern_p = 0;
17944   int nomem_p = 0;
17945   int static_p = 0;
17946   int previous_instantiation_extern_p = 0;
17947
17948   if (TREE_CODE (t) == TYPE_DECL)
17949     t = TREE_TYPE (t);
17950
17951   if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
17952     {
17953       tree tmpl =
17954         (TYPE_TEMPLATE_INFO (t)) ? TYPE_TI_TEMPLATE (t) : NULL;
17955       if (tmpl)
17956         error ("explicit instantiation of non-class template %qD", tmpl);
17957       else
17958         error ("explicit instantiation of non-template type %qT", t);
17959       return;
17960     }
17961
17962   complete_type (t);
17963
17964   if (!COMPLETE_TYPE_P (t))
17965     {
17966       if (complain & tf_error)
17967         error ("explicit instantiation of %q#T before definition of template",
17968                t);
17969       return;
17970     }
17971
17972   if (storage != NULL_TREE)
17973     {
17974       if (!in_system_header)
17975         {
17976           if (storage == ridpointers[(int) RID_EXTERN])
17977             {
17978               if (cxx_dialect == cxx98)
17979                 pedwarn (input_location, OPT_pedantic, 
17980                          "ISO C++ 1998 forbids the use of %<extern%> on "
17981                          "explicit instantiations");
17982             }
17983           else
17984             pedwarn (input_location, OPT_pedantic, 
17985                      "ISO C++ forbids the use of %qE"
17986                      " on explicit instantiations", storage);
17987         }
17988
17989       if (storage == ridpointers[(int) RID_INLINE])
17990         nomem_p = 1;
17991       else if (storage == ridpointers[(int) RID_EXTERN])
17992         extern_p = 1;
17993       else if (storage == ridpointers[(int) RID_STATIC])
17994         static_p = 1;
17995       else
17996         {
17997           error ("storage class %qD applied to template instantiation",
17998                  storage);
17999           extern_p = 0;
18000         }
18001     }
18002
18003   if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
18004     {
18005       /* DR 259 [temp.spec].
18006
18007          Both an explicit instantiation and a declaration of an explicit
18008          specialization shall not appear in a program unless the explicit
18009          instantiation follows a declaration of the explicit specialization.
18010
18011          For a given set of template parameters, if an explicit
18012          instantiation of a template appears after a declaration of an
18013          explicit specialization for that template, the explicit
18014          instantiation has no effect.  */
18015       return;
18016     }
18017   else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
18018     {
18019       /* [temp.spec]
18020
18021          No program shall explicitly instantiate any template more
18022          than once.
18023
18024          If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
18025          instantiation was `extern'.  If EXTERN_P then the second is.
18026          These cases are OK.  */
18027       previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
18028
18029       if (!previous_instantiation_extern_p && !extern_p
18030           && (complain & tf_error))
18031         permerror (input_location, "duplicate explicit instantiation of %q#T", t);
18032
18033       /* If we've already instantiated the template, just return now.  */
18034       if (!CLASSTYPE_INTERFACE_ONLY (t))
18035         return;
18036     }
18037
18038   check_explicit_instantiation_namespace (TYPE_NAME (t));
18039   mark_class_instantiated (t, extern_p);
18040
18041   if (nomem_p)
18042     return;
18043
18044   {
18045     tree tmp;
18046
18047     /* In contrast to implicit instantiation, where only the
18048        declarations, and not the definitions, of members are
18049        instantiated, we have here:
18050
18051          [temp.explicit]
18052
18053          The explicit instantiation of a class template specialization
18054          implies the instantiation of all of its members not
18055          previously explicitly specialized in the translation unit
18056          containing the explicit instantiation.
18057
18058        Of course, we can't instantiate member template classes, since
18059        we don't have any arguments for them.  Note that the standard
18060        is unclear on whether the instantiation of the members are
18061        *explicit* instantiations or not.  However, the most natural
18062        interpretation is that it should be an explicit instantiation.  */
18063
18064     if (! static_p)
18065       for (tmp = TYPE_METHODS (t); tmp; tmp = DECL_CHAIN (tmp))
18066         if (TREE_CODE (tmp) == FUNCTION_DECL
18067             && DECL_TEMPLATE_INSTANTIATION (tmp))
18068           instantiate_class_member (tmp, extern_p);
18069
18070     for (tmp = TYPE_FIELDS (t); tmp; tmp = DECL_CHAIN (tmp))
18071       if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
18072         instantiate_class_member (tmp, extern_p);
18073
18074     if (CLASSTYPE_NESTED_UTDS (t))
18075       binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
18076                              bt_instantiate_type_proc, &storage);
18077   }
18078 }
18079
18080 /* Given a function DECL, which is a specialization of TMPL, modify
18081    DECL to be a re-instantiation of TMPL with the same template
18082    arguments.  TMPL should be the template into which tsubst'ing
18083    should occur for DECL, not the most general template.
18084
18085    One reason for doing this is a scenario like this:
18086
18087      template <class T>
18088      void f(const T&, int i);
18089
18090      void g() { f(3, 7); }
18091
18092      template <class T>
18093      void f(const T& t, const int i) { }
18094
18095    Note that when the template is first instantiated, with
18096    instantiate_template, the resulting DECL will have no name for the
18097    first parameter, and the wrong type for the second.  So, when we go
18098    to instantiate the DECL, we regenerate it.  */
18099
18100 static void
18101 regenerate_decl_from_template (tree decl, tree tmpl)
18102 {
18103   /* The arguments used to instantiate DECL, from the most general
18104      template.  */
18105   tree args;
18106   tree code_pattern;
18107
18108   args = DECL_TI_ARGS (decl);
18109   code_pattern = DECL_TEMPLATE_RESULT (tmpl);
18110
18111   /* Make sure that we can see identifiers, and compute access
18112      correctly.  */
18113   push_access_scope (decl);
18114
18115   if (TREE_CODE (decl) == FUNCTION_DECL)
18116     {
18117       tree decl_parm;
18118       tree pattern_parm;
18119       tree specs;
18120       int args_depth;
18121       int parms_depth;
18122
18123       args_depth = TMPL_ARGS_DEPTH (args);
18124       parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
18125       if (args_depth > parms_depth)
18126         args = get_innermost_template_args (args, parms_depth);
18127
18128       specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
18129                                               args, tf_error, NULL_TREE,
18130                                               /*defer_ok*/false);
18131       if (specs && specs != error_mark_node)
18132         TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
18133                                                     specs);
18134
18135       /* Merge parameter declarations.  */
18136       decl_parm = skip_artificial_parms_for (decl,
18137                                              DECL_ARGUMENTS (decl));
18138       pattern_parm
18139         = skip_artificial_parms_for (code_pattern,
18140                                      DECL_ARGUMENTS (code_pattern));
18141       while (decl_parm && !FUNCTION_PARAMETER_PACK_P (pattern_parm))
18142         {
18143           tree parm_type;
18144           tree attributes;
18145           
18146           if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
18147             DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
18148           parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
18149                               NULL_TREE);
18150           parm_type = type_decays_to (parm_type);
18151           if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
18152             TREE_TYPE (decl_parm) = parm_type;
18153           attributes = DECL_ATTRIBUTES (pattern_parm);
18154           if (DECL_ATTRIBUTES (decl_parm) != attributes)
18155             {
18156               DECL_ATTRIBUTES (decl_parm) = attributes;
18157               cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
18158             }
18159           decl_parm = DECL_CHAIN (decl_parm);
18160           pattern_parm = DECL_CHAIN (pattern_parm);
18161         }
18162       /* Merge any parameters that match with the function parameter
18163          pack.  */
18164       if (pattern_parm && FUNCTION_PARAMETER_PACK_P (pattern_parm))
18165         {
18166           int i, len;
18167           tree expanded_types;
18168           /* Expand the TYPE_PACK_EXPANSION that provides the types for
18169              the parameters in this function parameter pack.  */
18170           expanded_types = tsubst_pack_expansion (TREE_TYPE (pattern_parm), 
18171                                                  args, tf_error, NULL_TREE);
18172           len = TREE_VEC_LENGTH (expanded_types);
18173           for (i = 0; i < len; i++)
18174             {
18175               tree parm_type;
18176               tree attributes;
18177           
18178               if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
18179                 /* Rename the parameter to include the index.  */
18180                 DECL_NAME (decl_parm) = 
18181                   make_ith_pack_parameter_name (DECL_NAME (pattern_parm), i);
18182               parm_type = TREE_VEC_ELT (expanded_types, i);
18183               parm_type = type_decays_to (parm_type);
18184               if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
18185                 TREE_TYPE (decl_parm) = parm_type;
18186               attributes = DECL_ATTRIBUTES (pattern_parm);
18187               if (DECL_ATTRIBUTES (decl_parm) != attributes)
18188                 {
18189                   DECL_ATTRIBUTES (decl_parm) = attributes;
18190                   cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
18191                 }
18192               decl_parm = DECL_CHAIN (decl_parm);
18193             }
18194         }
18195       /* Merge additional specifiers from the CODE_PATTERN.  */
18196       if (DECL_DECLARED_INLINE_P (code_pattern)
18197           && !DECL_DECLARED_INLINE_P (decl))
18198         DECL_DECLARED_INLINE_P (decl) = 1;
18199     }
18200   else if (TREE_CODE (decl) == VAR_DECL)
18201     {
18202       DECL_INITIAL (decl) =
18203         tsubst_expr (DECL_INITIAL (code_pattern), args,
18204                      tf_error, DECL_TI_TEMPLATE (decl),
18205                      /*integral_constant_expression_p=*/false);
18206       if (VAR_HAD_UNKNOWN_BOUND (decl))
18207         TREE_TYPE (decl) = tsubst (TREE_TYPE (code_pattern), args,
18208                                    tf_error, DECL_TI_TEMPLATE (decl));
18209     }
18210   else
18211     gcc_unreachable ();
18212
18213   pop_access_scope (decl);
18214 }
18215
18216 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
18217    substituted to get DECL.  */
18218
18219 tree
18220 template_for_substitution (tree decl)
18221 {
18222   tree tmpl = DECL_TI_TEMPLATE (decl);
18223
18224   /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
18225      for the instantiation.  This is not always the most general
18226      template.  Consider, for example:
18227
18228         template <class T>
18229         struct S { template <class U> void f();
18230                    template <> void f<int>(); };
18231
18232      and an instantiation of S<double>::f<int>.  We want TD to be the
18233      specialization S<T>::f<int>, not the more general S<T>::f<U>.  */
18234   while (/* An instantiation cannot have a definition, so we need a
18235             more general template.  */
18236          DECL_TEMPLATE_INSTANTIATION (tmpl)
18237            /* We must also deal with friend templates.  Given:
18238
18239                 template <class T> struct S {
18240                   template <class U> friend void f() {};
18241                 };
18242
18243               S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
18244               so far as the language is concerned, but that's still
18245               where we get the pattern for the instantiation from.  On
18246               other hand, if the definition comes outside the class, say:
18247
18248                 template <class T> struct S {
18249                   template <class U> friend void f();
18250                 };
18251                 template <class U> friend void f() {}
18252
18253               we don't need to look any further.  That's what the check for
18254               DECL_INITIAL is for.  */
18255           || (TREE_CODE (decl) == FUNCTION_DECL
18256               && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
18257               && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
18258     {
18259       /* The present template, TD, should not be a definition.  If it
18260          were a definition, we should be using it!  Note that we
18261          cannot restructure the loop to just keep going until we find
18262          a template with a definition, since that might go too far if
18263          a specialization was declared, but not defined.  */
18264       gcc_assert (TREE_CODE (decl) != VAR_DECL
18265                   || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl)));
18266
18267       /* Fetch the more general template.  */
18268       tmpl = DECL_TI_TEMPLATE (tmpl);
18269     }
18270
18271   return tmpl;
18272 }
18273
18274 /* Returns true if we need to instantiate this template instance even if we
18275    know we aren't going to emit it..  */
18276
18277 bool
18278 always_instantiate_p (tree decl)
18279 {
18280   /* We always instantiate inline functions so that we can inline them.  An
18281      explicit instantiation declaration prohibits implicit instantiation of
18282      non-inline functions.  With high levels of optimization, we would
18283      normally inline non-inline functions -- but we're not allowed to do
18284      that for "extern template" functions.  Therefore, we check
18285      DECL_DECLARED_INLINE_P, rather than possibly_inlined_p.  */
18286   return ((TREE_CODE (decl) == FUNCTION_DECL
18287            && DECL_DECLARED_INLINE_P (decl))
18288           /* And we need to instantiate static data members so that
18289              their initializers are available in integral constant
18290              expressions.  */
18291           || (TREE_CODE (decl) == VAR_DECL
18292               && decl_maybe_constant_var_p (decl)));
18293 }
18294
18295 /* If FN has a noexcept-specifier that hasn't been instantiated yet,
18296    instantiate it now, modifying TREE_TYPE (fn).  */
18297
18298 void
18299 maybe_instantiate_noexcept (tree fn)
18300 {
18301   tree fntype, spec, noex, clone;
18302
18303   if (DECL_CLONED_FUNCTION_P (fn))
18304     fn = DECL_CLONED_FUNCTION (fn);
18305   fntype = TREE_TYPE (fn);
18306   spec = TYPE_RAISES_EXCEPTIONS (fntype);
18307
18308   if (!DEFERRED_NOEXCEPT_SPEC_P (spec))
18309     return;
18310
18311   noex = TREE_PURPOSE (spec);
18312
18313   if (TREE_CODE (noex) == DEFERRED_NOEXCEPT)
18314     {
18315       if (push_tinst_level (fn))
18316         {
18317           push_access_scope (fn);
18318           input_location = DECL_SOURCE_LOCATION (fn);
18319           noex = tsubst_copy_and_build (DEFERRED_NOEXCEPT_PATTERN (noex),
18320                                         DEFERRED_NOEXCEPT_ARGS (noex),
18321                                         tf_warning_or_error, fn,
18322                                         /*function_p=*/false,
18323                                         /*integral_constant_expression_p=*/true);
18324           pop_access_scope (fn);
18325           pop_tinst_level ();
18326           spec = build_noexcept_spec (noex, tf_warning_or_error);
18327           if (spec == error_mark_node)
18328             spec = noexcept_false_spec;
18329         }
18330       else
18331         spec = noexcept_false_spec;
18332     }
18333   else
18334     {
18335       /* This is an implicitly declared function, so NOEX is a list of
18336          other functions to evaluate and merge.  */
18337       tree elt;
18338       spec = noexcept_true_spec;
18339       for (elt = noex; elt; elt = OVL_NEXT (elt))
18340         {
18341           tree fn = OVL_CURRENT (elt);
18342           tree subspec;
18343           maybe_instantiate_noexcept (fn);
18344           subspec = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn));
18345           spec = merge_exception_specifiers (spec, subspec, NULL_TREE);
18346         }
18347     }
18348
18349   TREE_TYPE (fn) = build_exception_variant (fntype, spec);
18350
18351   FOR_EACH_CLONE (clone, fn)
18352     {
18353       if (TREE_TYPE (clone) == fntype)
18354         TREE_TYPE (clone) = TREE_TYPE (fn);
18355       else
18356         TREE_TYPE (clone) = build_exception_variant (TREE_TYPE (clone), spec);
18357     }
18358 }
18359
18360 /* Produce the definition of D, a _DECL generated from a template.  If
18361    DEFER_OK is nonzero, then we don't have to actually do the
18362    instantiation now; we just have to do it sometime.  Normally it is
18363    an error if this is an explicit instantiation but D is undefined.
18364    EXPL_INST_CLASS_MEM_P is true iff D is a member of an
18365    explicitly instantiated class template.  */
18366
18367 tree
18368 instantiate_decl (tree d, int defer_ok,
18369                   bool expl_inst_class_mem_p)
18370 {
18371   tree tmpl = DECL_TI_TEMPLATE (d);
18372   tree gen_args;
18373   tree args;
18374   tree td;
18375   tree code_pattern;
18376   tree spec;
18377   tree gen_tmpl;
18378   bool pattern_defined;
18379   int need_push;
18380   location_t saved_loc = input_location;
18381   bool external_p;
18382
18383   /* This function should only be used to instantiate templates for
18384      functions and static member variables.  */
18385   gcc_assert (TREE_CODE (d) == FUNCTION_DECL
18386               || TREE_CODE (d) == VAR_DECL);
18387
18388   /* Variables are never deferred; if instantiation is required, they
18389      are instantiated right away.  That allows for better code in the
18390      case that an expression refers to the value of the variable --
18391      if the variable has a constant value the referring expression can
18392      take advantage of that fact.  */
18393   if (TREE_CODE (d) == VAR_DECL
18394       || DECL_DECLARED_CONSTEXPR_P (d))
18395     defer_ok = 0;
18396
18397   /* Don't instantiate cloned functions.  Instead, instantiate the
18398      functions they cloned.  */
18399   if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
18400     d = DECL_CLONED_FUNCTION (d);
18401
18402   if (DECL_TEMPLATE_INSTANTIATED (d)
18403       || (TREE_CODE (d) == FUNCTION_DECL
18404           && DECL_DEFAULTED_FN (d) && DECL_INITIAL (d))
18405       || DECL_TEMPLATE_SPECIALIZATION (d))
18406     /* D has already been instantiated or explicitly specialized, so
18407        there's nothing for us to do here.
18408
18409        It might seem reasonable to check whether or not D is an explicit
18410        instantiation, and, if so, stop here.  But when an explicit
18411        instantiation is deferred until the end of the compilation,
18412        DECL_EXPLICIT_INSTANTIATION is set, even though we still need to do
18413        the instantiation.  */
18414     return d;
18415
18416   /* Check to see whether we know that this template will be
18417      instantiated in some other file, as with "extern template"
18418      extension.  */
18419   external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
18420
18421   /* In general, we do not instantiate such templates.  */
18422   if (external_p && !always_instantiate_p (d))
18423     return d;
18424
18425   gen_tmpl = most_general_template (tmpl);
18426   gen_args = DECL_TI_ARGS (d);
18427
18428   if (tmpl != gen_tmpl)
18429     /* We should already have the extra args.  */
18430     gcc_assert (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (gen_tmpl))
18431                 == TMPL_ARGS_DEPTH (gen_args));
18432   /* And what's in the hash table should match D.  */
18433   gcc_assert ((spec = retrieve_specialization (gen_tmpl, gen_args, 0)) == d
18434               || spec == NULL_TREE);
18435
18436   /* This needs to happen before any tsubsting.  */
18437   if (! push_tinst_level (d))
18438     return d;
18439
18440   timevar_push (TV_TEMPLATE_INST);
18441
18442   /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
18443      for the instantiation.  */
18444   td = template_for_substitution (d);
18445   code_pattern = DECL_TEMPLATE_RESULT (td);
18446
18447   /* We should never be trying to instantiate a member of a class
18448      template or partial specialization.  */
18449   gcc_assert (d != code_pattern);
18450
18451   if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
18452       || DECL_TEMPLATE_SPECIALIZATION (td))
18453     /* In the case of a friend template whose definition is provided
18454        outside the class, we may have too many arguments.  Drop the
18455        ones we don't need.  The same is true for specializations.  */
18456     args = get_innermost_template_args
18457       (gen_args, TMPL_PARMS_DEPTH  (DECL_TEMPLATE_PARMS (td)));
18458   else
18459     args = gen_args;
18460
18461   if (TREE_CODE (d) == FUNCTION_DECL)
18462     pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE
18463                        || DECL_DEFAULTED_OUTSIDE_CLASS_P (code_pattern));
18464   else
18465     pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
18466
18467   /* We may be in the middle of deferred access check.  Disable it now.  */
18468   push_deferring_access_checks (dk_no_deferred);
18469
18470   /* Unless an explicit instantiation directive has already determined
18471      the linkage of D, remember that a definition is available for
18472      this entity.  */
18473   if (pattern_defined
18474       && !DECL_INTERFACE_KNOWN (d)
18475       && !DECL_NOT_REALLY_EXTERN (d))
18476     mark_definable (d);
18477
18478   DECL_SOURCE_LOCATION (td) = DECL_SOURCE_LOCATION (code_pattern);
18479   DECL_SOURCE_LOCATION (d) = DECL_SOURCE_LOCATION (code_pattern);
18480   input_location = DECL_SOURCE_LOCATION (d);
18481
18482   /* If D is a member of an explicitly instantiated class template,
18483      and no definition is available, treat it like an implicit
18484      instantiation.  */
18485   if (!pattern_defined && expl_inst_class_mem_p
18486       && DECL_EXPLICIT_INSTANTIATION (d))
18487     {
18488       /* Leave linkage flags alone on instantiations with anonymous
18489          visibility.  */
18490       if (TREE_PUBLIC (d))
18491         {
18492           DECL_NOT_REALLY_EXTERN (d) = 0;
18493           DECL_INTERFACE_KNOWN (d) = 0;
18494         }
18495       SET_DECL_IMPLICIT_INSTANTIATION (d);
18496     }
18497
18498   if (TREE_CODE (d) == FUNCTION_DECL)
18499     maybe_instantiate_noexcept (d);
18500
18501   /* Recheck the substitutions to obtain any warning messages
18502      about ignoring cv qualifiers.  Don't do this for artificial decls,
18503      as it breaks the context-sensitive substitution for lambda op(). */
18504   if (!defer_ok && !DECL_ARTIFICIAL (d))
18505     {
18506       tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
18507       tree type = TREE_TYPE (gen);
18508
18509       /* Make sure that we can see identifiers, and compute access
18510          correctly.  D is already the target FUNCTION_DECL with the
18511          right context.  */
18512       push_access_scope (d);
18513
18514       if (TREE_CODE (gen) == FUNCTION_DECL)
18515         {
18516           tsubst (DECL_ARGUMENTS (gen), gen_args, tf_warning_or_error, d);
18517           tsubst_exception_specification (type, gen_args, tf_warning_or_error,
18518                                           d, /*defer_ok*/true);
18519           /* Don't simply tsubst the function type, as that will give
18520              duplicate warnings about poor parameter qualifications.
18521              The function arguments are the same as the decl_arguments
18522              without the top level cv qualifiers.  */
18523           type = TREE_TYPE (type);
18524         }
18525       tsubst (type, gen_args, tf_warning_or_error, d);
18526
18527       pop_access_scope (d);
18528     }
18529
18530   /* Defer all other templates, unless we have been explicitly
18531      forbidden from doing so.  */
18532   if (/* If there is no definition, we cannot instantiate the
18533          template.  */
18534       ! pattern_defined
18535       /* If it's OK to postpone instantiation, do so.  */
18536       || defer_ok
18537       /* If this is a static data member that will be defined
18538          elsewhere, we don't want to instantiate the entire data
18539          member, but we do want to instantiate the initializer so that
18540          we can substitute that elsewhere.  */
18541       || (external_p && TREE_CODE (d) == VAR_DECL))
18542     {
18543       /* The definition of the static data member is now required so
18544          we must substitute the initializer.  */
18545       if (TREE_CODE (d) == VAR_DECL
18546           && !DECL_INITIAL (d)
18547           && DECL_INITIAL (code_pattern))
18548         {
18549           tree ns;
18550           tree init;
18551           bool const_init = false;
18552
18553           ns = decl_namespace_context (d);
18554           push_nested_namespace (ns);
18555           push_nested_class (DECL_CONTEXT (d));
18556           init = tsubst_expr (DECL_INITIAL (code_pattern),
18557                               args,
18558                               tf_warning_or_error, NULL_TREE,
18559                               /*integral_constant_expression_p=*/false);
18560           /* Make sure the initializer is still constant, in case of
18561              circular dependency (template/instantiate6.C). */
18562           const_init
18563             = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (code_pattern);
18564           cp_finish_decl (d, init, /*init_const_expr_p=*/const_init,
18565                           /*asmspec_tree=*/NULL_TREE,
18566                           LOOKUP_ONLYCONVERTING);
18567           pop_nested_class ();
18568           pop_nested_namespace (ns);
18569         }
18570
18571       /* We restore the source position here because it's used by
18572          add_pending_template.  */
18573       input_location = saved_loc;
18574
18575       if (at_eof && !pattern_defined
18576           && DECL_EXPLICIT_INSTANTIATION (d)
18577           && DECL_NOT_REALLY_EXTERN (d))
18578         /* [temp.explicit]
18579
18580            The definition of a non-exported function template, a
18581            non-exported member function template, or a non-exported
18582            member function or static data member of a class template
18583            shall be present in every translation unit in which it is
18584            explicitly instantiated.  */
18585         permerror (input_location,  "explicit instantiation of %qD "
18586                    "but no definition available", d);
18587
18588       /* If we're in unevaluated context, we just wanted to get the
18589          constant value; this isn't an odr use, so don't queue
18590          a full instantiation.  */
18591       if (cp_unevaluated_operand != 0)
18592         goto out;
18593       /* ??? Historically, we have instantiated inline functions, even
18594          when marked as "extern template".  */
18595       if (!(external_p && TREE_CODE (d) == VAR_DECL))
18596         add_pending_template (d);
18597       goto out;
18598     }
18599   /* Tell the repository that D is available in this translation unit
18600      -- and see if it is supposed to be instantiated here.  */
18601   if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
18602     {
18603       /* In a PCH file, despite the fact that the repository hasn't
18604          requested instantiation in the PCH it is still possible that
18605          an instantiation will be required in a file that includes the
18606          PCH.  */
18607       if (pch_file)
18608         add_pending_template (d);
18609       /* Instantiate inline functions so that the inliner can do its
18610          job, even though we'll not be emitting a copy of this
18611          function.  */
18612       if (!(TREE_CODE (d) == FUNCTION_DECL && possibly_inlined_p (d)))
18613         goto out;
18614     }
18615
18616   need_push = !cfun || !global_bindings_p ();
18617   if (need_push)
18618     push_to_top_level ();
18619
18620   /* Mark D as instantiated so that recursive calls to
18621      instantiate_decl do not try to instantiate it again.  */
18622   DECL_TEMPLATE_INSTANTIATED (d) = 1;
18623
18624   /* Regenerate the declaration in case the template has been modified
18625      by a subsequent redeclaration.  */
18626   regenerate_decl_from_template (d, td);
18627
18628   /* We already set the file and line above.  Reset them now in case
18629      they changed as a result of calling regenerate_decl_from_template.  */
18630   input_location = DECL_SOURCE_LOCATION (d);
18631
18632   if (TREE_CODE (d) == VAR_DECL)
18633     {
18634       tree init;
18635       bool const_init = false;
18636
18637       /* Clear out DECL_RTL; whatever was there before may not be right
18638          since we've reset the type of the declaration.  */
18639       SET_DECL_RTL (d, NULL);
18640       DECL_IN_AGGR_P (d) = 0;
18641
18642       /* The initializer is placed in DECL_INITIAL by
18643          regenerate_decl_from_template so we don't need to
18644          push/pop_access_scope again here.  Pull it out so that
18645          cp_finish_decl can process it.  */
18646       init = DECL_INITIAL (d);
18647       DECL_INITIAL (d) = NULL_TREE;
18648       DECL_INITIALIZED_P (d) = 0;
18649
18650       /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
18651          initializer.  That function will defer actual emission until
18652          we have a chance to determine linkage.  */
18653       DECL_EXTERNAL (d) = 0;
18654
18655       /* Enter the scope of D so that access-checking works correctly.  */
18656       push_nested_class (DECL_CONTEXT (d));
18657       const_init = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (code_pattern);
18658       cp_finish_decl (d, init, const_init, NULL_TREE, 0);
18659       pop_nested_class ();
18660     }
18661   else if (TREE_CODE (d) == FUNCTION_DECL && DECL_DEFAULTED_FN (code_pattern))
18662     synthesize_method (d);
18663   else if (TREE_CODE (d) == FUNCTION_DECL)
18664     {
18665       htab_t saved_local_specializations;
18666       tree subst_decl;
18667       tree tmpl_parm;
18668       tree spec_parm;
18669
18670       /* Save away the current list, in case we are instantiating one
18671          template from within the body of another.  */
18672       saved_local_specializations = local_specializations;
18673
18674       /* Set up the list of local specializations.  */
18675       local_specializations = htab_create (37,
18676                                            hash_local_specialization,
18677                                            eq_local_specializations,
18678                                            NULL);
18679
18680       /* Set up context.  */
18681       start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
18682
18683       /* Create substitution entries for the parameters.  */
18684       subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
18685       tmpl_parm = DECL_ARGUMENTS (subst_decl);
18686       spec_parm = DECL_ARGUMENTS (d);
18687       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
18688         {
18689           register_local_specialization (spec_parm, tmpl_parm);
18690           spec_parm = skip_artificial_parms_for (d, spec_parm);
18691           tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
18692         }
18693       for (; tmpl_parm; tmpl_parm = DECL_CHAIN (tmpl_parm))
18694         {
18695           if (!FUNCTION_PARAMETER_PACK_P (tmpl_parm))
18696             {
18697               register_local_specialization (spec_parm, tmpl_parm);
18698               spec_parm = DECL_CHAIN (spec_parm);
18699             }
18700           else
18701             {
18702               /* Register the (value) argument pack as a specialization of
18703                  TMPL_PARM, then move on.  */
18704               tree argpack = extract_fnparm_pack (tmpl_parm, &spec_parm);
18705               register_local_specialization (argpack, tmpl_parm);
18706             }
18707         }
18708       gcc_assert (!spec_parm);
18709
18710       /* Substitute into the body of the function.  */
18711       tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
18712                    tf_warning_or_error, tmpl,
18713                    /*integral_constant_expression_p=*/false);
18714
18715       /* Set the current input_location to the end of the function
18716          so that finish_function knows where we are.  */
18717       input_location = DECL_STRUCT_FUNCTION (code_pattern)->function_end_locus;
18718
18719       /* We don't need the local specializations any more.  */
18720       htab_delete (local_specializations);
18721       local_specializations = saved_local_specializations;
18722
18723       /* Finish the function.  */
18724       d = finish_function (0);
18725       expand_or_defer_fn (d);
18726     }
18727
18728   /* We're not deferring instantiation any more.  */
18729   TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
18730
18731   if (need_push)
18732     pop_from_top_level ();
18733
18734 out:
18735   input_location = saved_loc;
18736   pop_deferring_access_checks ();
18737   pop_tinst_level ();
18738
18739   timevar_pop (TV_TEMPLATE_INST);
18740
18741   return d;
18742 }
18743
18744 /* Run through the list of templates that we wish we could
18745    instantiate, and instantiate any we can.  RETRIES is the
18746    number of times we retry pending template instantiation.  */
18747
18748 void
18749 instantiate_pending_templates (int retries)
18750 {
18751   int reconsider;
18752   location_t saved_loc = input_location;
18753
18754   /* Instantiating templates may trigger vtable generation.  This in turn
18755      may require further template instantiations.  We place a limit here
18756      to avoid infinite loop.  */
18757   if (pending_templates && retries >= max_tinst_depth)
18758     {
18759       tree decl = pending_templates->tinst->decl;
18760
18761       error ("template instantiation depth exceeds maximum of %d"
18762              " instantiating %q+D, possibly from virtual table generation"
18763              " (use -ftemplate-depth= to increase the maximum)",
18764              max_tinst_depth, decl);
18765       if (TREE_CODE (decl) == FUNCTION_DECL)
18766         /* Pretend that we defined it.  */
18767         DECL_INITIAL (decl) = error_mark_node;
18768       return;
18769     }
18770
18771   do
18772     {
18773       struct pending_template **t = &pending_templates;
18774       struct pending_template *last = NULL;
18775       reconsider = 0;
18776       while (*t)
18777         {
18778           tree instantiation = reopen_tinst_level ((*t)->tinst);
18779           bool complete = false;
18780
18781           if (TYPE_P (instantiation))
18782             {
18783               tree fn;
18784
18785               if (!COMPLETE_TYPE_P (instantiation))
18786                 {
18787                   instantiate_class_template (instantiation);
18788                   if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
18789                     for (fn = TYPE_METHODS (instantiation);
18790                          fn;
18791                          fn = TREE_CHAIN (fn))
18792                       if (! DECL_ARTIFICIAL (fn))
18793                         instantiate_decl (fn,
18794                                           /*defer_ok=*/0,
18795                                           /*expl_inst_class_mem_p=*/false);
18796                   if (COMPLETE_TYPE_P (instantiation))
18797                     reconsider = 1;
18798                 }
18799
18800               complete = COMPLETE_TYPE_P (instantiation);
18801             }
18802           else
18803             {
18804               if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
18805                   && !DECL_TEMPLATE_INSTANTIATED (instantiation))
18806                 {
18807                   instantiation
18808                     = instantiate_decl (instantiation,
18809                                         /*defer_ok=*/0,
18810                                         /*expl_inst_class_mem_p=*/false);
18811                   if (DECL_TEMPLATE_INSTANTIATED (instantiation))
18812                     reconsider = 1;
18813                 }
18814
18815               complete = (DECL_TEMPLATE_SPECIALIZATION (instantiation)
18816                           || DECL_TEMPLATE_INSTANTIATED (instantiation));
18817             }
18818
18819           if (complete)
18820             /* If INSTANTIATION has been instantiated, then we don't
18821                need to consider it again in the future.  */
18822             *t = (*t)->next;
18823           else
18824             {
18825               last = *t;
18826               t = &(*t)->next;
18827             }
18828           tinst_depth = 0;
18829           current_tinst_level = NULL;
18830         }
18831       last_pending_template = last;
18832     }
18833   while (reconsider);
18834
18835   input_location = saved_loc;
18836 }
18837
18838 /* Substitute ARGVEC into T, which is a list of initializers for
18839    either base class or a non-static data member.  The TREE_PURPOSEs
18840    are DECLs, and the TREE_VALUEs are the initializer values.  Used by
18841    instantiate_decl.  */
18842
18843 static tree
18844 tsubst_initializer_list (tree t, tree argvec)
18845 {
18846   tree inits = NULL_TREE;
18847
18848   for (; t; t = TREE_CHAIN (t))
18849     {
18850       tree decl;
18851       tree init;
18852       tree expanded_bases = NULL_TREE;
18853       tree expanded_arguments = NULL_TREE;
18854       int i, len = 1;
18855
18856       if (TREE_CODE (TREE_PURPOSE (t)) == TYPE_PACK_EXPANSION)
18857         {
18858           tree expr;
18859           tree arg;
18860
18861           /* Expand the base class expansion type into separate base
18862              classes.  */
18863           expanded_bases = tsubst_pack_expansion (TREE_PURPOSE (t), argvec,
18864                                                  tf_warning_or_error,
18865                                                  NULL_TREE);
18866           if (expanded_bases == error_mark_node)
18867             continue;
18868           
18869           /* We'll be building separate TREE_LISTs of arguments for
18870              each base.  */
18871           len = TREE_VEC_LENGTH (expanded_bases);
18872           expanded_arguments = make_tree_vec (len);
18873           for (i = 0; i < len; i++)
18874             TREE_VEC_ELT (expanded_arguments, i) = NULL_TREE;
18875
18876           /* Build a dummy EXPR_PACK_EXPANSION that will be used to
18877              expand each argument in the TREE_VALUE of t.  */
18878           expr = make_node (EXPR_PACK_EXPANSION);
18879           PACK_EXPANSION_PARAMETER_PACKS (expr) =
18880             PACK_EXPANSION_PARAMETER_PACKS (TREE_PURPOSE (t));
18881
18882           if (TREE_VALUE (t) == void_type_node)
18883             /* VOID_TYPE_NODE is used to indicate
18884                value-initialization.  */
18885             {
18886               for (i = 0; i < len; i++)
18887                 TREE_VEC_ELT (expanded_arguments, i) = void_type_node;
18888             }
18889           else
18890             {
18891               /* Substitute parameter packs into each argument in the
18892                  TREE_LIST.  */
18893               in_base_initializer = 1;
18894               for (arg = TREE_VALUE (t); arg; arg = TREE_CHAIN (arg))
18895                 {
18896                   tree expanded_exprs;
18897
18898                   /* Expand the argument.  */
18899                   SET_PACK_EXPANSION_PATTERN (expr, TREE_VALUE (arg));
18900                   expanded_exprs 
18901                     = tsubst_pack_expansion (expr, argvec,
18902                                              tf_warning_or_error,
18903                                              NULL_TREE);
18904                   if (expanded_exprs == error_mark_node)
18905                     continue;
18906
18907                   /* Prepend each of the expanded expressions to the
18908                      corresponding TREE_LIST in EXPANDED_ARGUMENTS.  */
18909                   for (i = 0; i < len; i++)
18910                     {
18911                       TREE_VEC_ELT (expanded_arguments, i) = 
18912                         tree_cons (NULL_TREE, 
18913                                    TREE_VEC_ELT (expanded_exprs, i),
18914                                    TREE_VEC_ELT (expanded_arguments, i));
18915                     }
18916                 }
18917               in_base_initializer = 0;
18918
18919               /* Reverse all of the TREE_LISTs in EXPANDED_ARGUMENTS,
18920                  since we built them backwards.  */
18921               for (i = 0; i < len; i++)
18922                 {
18923                   TREE_VEC_ELT (expanded_arguments, i) = 
18924                     nreverse (TREE_VEC_ELT (expanded_arguments, i));
18925                 }
18926             }
18927         }
18928
18929       for (i = 0; i < len; ++i)
18930         {
18931           if (expanded_bases)
18932             {
18933               decl = TREE_VEC_ELT (expanded_bases, i);
18934               decl = expand_member_init (decl);
18935               init = TREE_VEC_ELT (expanded_arguments, i);
18936             }
18937           else
18938             {
18939               decl = tsubst_copy (TREE_PURPOSE (t), argvec, 
18940                                   tf_warning_or_error, NULL_TREE);
18941
18942               decl = expand_member_init (decl);
18943               if (decl && !DECL_P (decl))
18944                 in_base_initializer = 1;
18945
18946               init = TREE_VALUE (t);
18947               if (init != void_type_node)
18948                 init = tsubst_expr (init, argvec,
18949                                     tf_warning_or_error, NULL_TREE,
18950                                     /*integral_constant_expression_p=*/false);
18951               in_base_initializer = 0;
18952             }
18953
18954           if (decl)
18955             {
18956               init = build_tree_list (decl, init);
18957               TREE_CHAIN (init) = inits;
18958               inits = init;
18959             }
18960         }
18961     }
18962   return inits;
18963 }
18964
18965 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL.  */
18966
18967 static void
18968 set_current_access_from_decl (tree decl)
18969 {
18970   if (TREE_PRIVATE (decl))
18971     current_access_specifier = access_private_node;
18972   else if (TREE_PROTECTED (decl))
18973     current_access_specifier = access_protected_node;
18974   else
18975     current_access_specifier = access_public_node;
18976 }
18977
18978 /* Instantiate an enumerated type.  TAG is the template type, NEWTAG
18979    is the instantiation (which should have been created with
18980    start_enum) and ARGS are the template arguments to use.  */
18981
18982 static void
18983 tsubst_enum (tree tag, tree newtag, tree args)
18984 {
18985   tree e;
18986
18987   if (SCOPED_ENUM_P (newtag))
18988     begin_scope (sk_scoped_enum, newtag);
18989
18990   for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
18991     {
18992       tree value;
18993       tree decl;
18994
18995       decl = TREE_VALUE (e);
18996       /* Note that in a template enum, the TREE_VALUE is the
18997          CONST_DECL, not the corresponding INTEGER_CST.  */
18998       value = tsubst_expr (DECL_INITIAL (decl),
18999                            args, tf_warning_or_error, NULL_TREE,
19000                            /*integral_constant_expression_p=*/true);
19001
19002       /* Give this enumeration constant the correct access.  */
19003       set_current_access_from_decl (decl);
19004
19005       /* Actually build the enumerator itself.  */
19006       build_enumerator
19007         (DECL_NAME (decl), value, newtag, DECL_SOURCE_LOCATION (decl));
19008     }
19009
19010   if (SCOPED_ENUM_P (newtag))
19011     finish_scope ();
19012
19013   finish_enum_value_list (newtag);
19014   finish_enum (newtag);
19015
19016   DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
19017     = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
19018 }
19019
19020 /* DECL is a FUNCTION_DECL that is a template specialization.  Return
19021    its type -- but without substituting the innermost set of template
19022    arguments.  So, innermost set of template parameters will appear in
19023    the type.  */
19024
19025 tree
19026 get_mostly_instantiated_function_type (tree decl)
19027 {
19028   tree fn_type;
19029   tree tmpl;
19030   tree targs;
19031   tree tparms;
19032   int parm_depth;
19033
19034   tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
19035   targs = DECL_TI_ARGS (decl);
19036   tparms = DECL_TEMPLATE_PARMS (tmpl);
19037   parm_depth = TMPL_PARMS_DEPTH (tparms);
19038
19039   /* There should be as many levels of arguments as there are levels
19040      of parameters.  */
19041   gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
19042
19043   fn_type = TREE_TYPE (tmpl);
19044
19045   if (parm_depth == 1)
19046     /* No substitution is necessary.  */
19047     ;
19048   else
19049     {
19050       int i;
19051       tree partial_args;
19052
19053       /* Replace the innermost level of the TARGS with NULL_TREEs to
19054          let tsubst know not to substitute for those parameters.  */
19055       partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
19056       for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
19057         SET_TMPL_ARGS_LEVEL (partial_args, i,
19058                              TMPL_ARGS_LEVEL (targs, i));
19059       SET_TMPL_ARGS_LEVEL (partial_args,
19060                            TMPL_ARGS_DEPTH (targs),
19061                            make_tree_vec (DECL_NTPARMS (tmpl)));
19062
19063       /* Make sure that we can see identifiers, and compute access
19064          correctly.  */
19065       push_access_scope (decl);
19066
19067       ++processing_template_decl;
19068       /* Now, do the (partial) substitution to figure out the
19069          appropriate function type.  */
19070       fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
19071       --processing_template_decl;
19072
19073       /* Substitute into the template parameters to obtain the real
19074          innermost set of parameters.  This step is important if the
19075          innermost set of template parameters contains value
19076          parameters whose types depend on outer template parameters.  */
19077       TREE_VEC_LENGTH (partial_args)--;
19078       tparms = tsubst_template_parms (tparms, partial_args, tf_error);
19079
19080       pop_access_scope (decl);
19081     }
19082
19083   return fn_type;
19084 }
19085
19086 /* Return truthvalue if we're processing a template different from
19087    the last one involved in diagnostics.  */
19088 int
19089 problematic_instantiation_changed (void)
19090 {
19091   return current_tinst_level != last_error_tinst_level;
19092 }
19093
19094 /* Remember current template involved in diagnostics.  */
19095 void
19096 record_last_problematic_instantiation (void)
19097 {
19098   last_error_tinst_level = current_tinst_level;
19099 }
19100
19101 struct tinst_level *
19102 current_instantiation (void)
19103 {
19104   return current_tinst_level;
19105 }
19106
19107 /* [temp.param] Check that template non-type parm TYPE is of an allowable
19108    type. Return zero for ok, nonzero for disallowed. Issue error and
19109    warning messages under control of COMPLAIN.  */
19110
19111 static int
19112 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
19113 {
19114   if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
19115     return 0;
19116   else if (POINTER_TYPE_P (type))
19117     return 0;
19118   else if (TYPE_PTR_TO_MEMBER_P (type))
19119     return 0;
19120   else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
19121     return 0;
19122   else if (TREE_CODE (type) == TYPENAME_TYPE)
19123     return 0;
19124   else if (TREE_CODE (type) == DECLTYPE_TYPE)
19125     return 0;
19126   else if (TREE_CODE (type) == NULLPTR_TYPE)
19127     return 0;
19128
19129   if (complain & tf_error)
19130     {
19131       if (type == error_mark_node)
19132         inform (input_location, "invalid template non-type parameter");
19133       else
19134         error ("%q#T is not a valid type for a template non-type parameter",
19135                type);
19136     }
19137   return 1;
19138 }
19139
19140 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
19141    Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
19142
19143 static bool
19144 dependent_type_p_r (tree type)
19145 {
19146   tree scope;
19147
19148   /* [temp.dep.type]
19149
19150      A type is dependent if it is:
19151
19152      -- a template parameter. Template template parameters are types
19153         for us (since TYPE_P holds true for them) so we handle
19154         them here.  */
19155   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
19156       || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
19157     return true;
19158   /* -- a qualified-id with a nested-name-specifier which contains a
19159         class-name that names a dependent type or whose unqualified-id
19160         names a dependent type.  */
19161   if (TREE_CODE (type) == TYPENAME_TYPE)
19162     return true;
19163   /* -- a cv-qualified type where the cv-unqualified type is
19164         dependent.  */
19165   type = TYPE_MAIN_VARIANT (type);
19166   /* -- a compound type constructed from any dependent type.  */
19167   if (TYPE_PTR_TO_MEMBER_P (type))
19168     return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
19169             || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
19170                                            (type)));
19171   else if (TREE_CODE (type) == POINTER_TYPE
19172            || TREE_CODE (type) == REFERENCE_TYPE)
19173     return dependent_type_p (TREE_TYPE (type));
19174   else if (TREE_CODE (type) == FUNCTION_TYPE
19175            || TREE_CODE (type) == METHOD_TYPE)
19176     {
19177       tree arg_type;
19178
19179       if (dependent_type_p (TREE_TYPE (type)))
19180         return true;
19181       for (arg_type = TYPE_ARG_TYPES (type);
19182            arg_type;
19183            arg_type = TREE_CHAIN (arg_type))
19184         if (dependent_type_p (TREE_VALUE (arg_type)))
19185           return true;
19186       return false;
19187     }
19188   /* -- an array type constructed from any dependent type or whose
19189         size is specified by a constant expression that is
19190         value-dependent.
19191
19192         We checked for type- and value-dependence of the bounds in
19193         compute_array_index_type, so TYPE_DEPENDENT_P is already set.  */
19194   if (TREE_CODE (type) == ARRAY_TYPE)
19195     {
19196       if (TYPE_DOMAIN (type)
19197           && dependent_type_p (TYPE_DOMAIN (type)))
19198         return true;
19199       return dependent_type_p (TREE_TYPE (type));
19200     }
19201
19202   /* -- a template-id in which either the template name is a template
19203      parameter ...  */
19204   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
19205     return true;
19206   /* ... or any of the template arguments is a dependent type or
19207         an expression that is type-dependent or value-dependent.  */
19208   else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
19209            && (any_dependent_template_arguments_p
19210                (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
19211     return true;
19212
19213   /* All TYPEOF_TYPEs, DECLTYPE_TYPEs, and UNDERLYING_TYPEs are
19214      dependent; if the argument of the `typeof' expression is not
19215      type-dependent, then it should already been have resolved.  */
19216   if (TREE_CODE (type) == TYPEOF_TYPE
19217       || TREE_CODE (type) == DECLTYPE_TYPE
19218       || TREE_CODE (type) == UNDERLYING_TYPE)
19219     return true;
19220
19221   /* A template argument pack is dependent if any of its packed
19222      arguments are.  */
19223   if (TREE_CODE (type) == TYPE_ARGUMENT_PACK)
19224     {
19225       tree args = ARGUMENT_PACK_ARGS (type);
19226       int i, len = TREE_VEC_LENGTH (args);
19227       for (i = 0; i < len; ++i)
19228         if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
19229           return true;
19230     }
19231
19232   /* All TYPE_PACK_EXPANSIONs are dependent, because parameter packs must
19233      be template parameters.  */
19234   if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
19235     return true;
19236
19237   /* The standard does not specifically mention types that are local
19238      to template functions or local classes, but they should be
19239      considered dependent too.  For example:
19240
19241        template <int I> void f() {
19242          enum E { a = I };
19243          S<sizeof (E)> s;
19244        }
19245
19246      The size of `E' cannot be known until the value of `I' has been
19247      determined.  Therefore, `E' must be considered dependent.  */
19248   scope = TYPE_CONTEXT (type);
19249   if (scope && TYPE_P (scope))
19250     return dependent_type_p (scope);
19251   /* Don't use type_dependent_expression_p here, as it can lead
19252      to infinite recursion trying to determine whether a lambda
19253      nested in a lambda is dependent (c++/47687).  */
19254   else if (scope && TREE_CODE (scope) == FUNCTION_DECL
19255            && DECL_LANG_SPECIFIC (scope)
19256            && DECL_TEMPLATE_INFO (scope)
19257            && (any_dependent_template_arguments_p
19258                (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (scope)))))
19259     return true;
19260
19261   /* Other types are non-dependent.  */
19262   return false;
19263 }
19264
19265 /* Returns TRUE if TYPE is dependent, in the sense of
19266    [temp.dep.type].  Note that a NULL type is considered dependent.  */
19267
19268 bool
19269 dependent_type_p (tree type)
19270 {
19271   /* If there are no template parameters in scope, then there can't be
19272      any dependent types.  */
19273   if (!processing_template_decl)
19274     {
19275       /* If we are not processing a template, then nobody should be
19276          providing us with a dependent type.  */
19277       gcc_assert (type);
19278       gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM || is_auto (type));
19279       return false;
19280     }
19281
19282   /* If the type is NULL, we have not computed a type for the entity
19283      in question; in that case, the type is dependent.  */
19284   if (!type)
19285     return true;
19286
19287   /* Erroneous types can be considered non-dependent.  */
19288   if (type == error_mark_node)
19289     return false;
19290
19291   /* If we have not already computed the appropriate value for TYPE,
19292      do so now.  */
19293   if (!TYPE_DEPENDENT_P_VALID (type))
19294     {
19295       TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
19296       TYPE_DEPENDENT_P_VALID (type) = 1;
19297     }
19298
19299   return TYPE_DEPENDENT_P (type);
19300 }
19301
19302 /* Returns TRUE if SCOPE is a dependent scope, in which we can't do any
19303    lookup.  In other words, a dependent type that is not the current
19304    instantiation.  */
19305
19306 bool
19307 dependent_scope_p (tree scope)
19308 {
19309   return (scope && TYPE_P (scope) && dependent_type_p (scope)
19310           && !currently_open_class (scope));
19311 }
19312
19313 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
19314    [temp.dep.constexpr].  EXPRESSION is already known to be a constant
19315    expression.  */
19316
19317 /* Note that this predicate is not appropriate for general expressions;
19318    only constant expressions (that satisfy potential_constant_expression)
19319    can be tested for value dependence.
19320
19321    We should really also have a predicate for "instantiation-dependent".
19322
19323    fold_non_dependent_expr: fold if constant and not type-dependent and not value-dependent.
19324      (what about instantiation-dependent constant-expressions?)
19325    is_late_template_attribute: defer if instantiation-dependent.
19326    compute_array_index_type: proceed if constant and not t- or v-dependent
19327      if instantiation-dependent, need to remember full expression
19328    uses_template_parms: FIXME - need to audit callers
19329    tsubst_decl [function_decl]: Why is this using value_dependent_expression_p?
19330    dependent_type_p [array_type]: dependent if index type is dependent
19331      (or non-constant?)
19332    static_assert - instantiation-dependent */
19333
19334 bool
19335 value_dependent_expression_p (tree expression)
19336 {
19337   if (!processing_template_decl)
19338     return false;
19339
19340   /* A name declared with a dependent type.  */
19341   if (DECL_P (expression) && type_dependent_expression_p (expression))
19342     return true;
19343
19344   switch (TREE_CODE (expression))
19345     {
19346     case IDENTIFIER_NODE:
19347       /* A name that has not been looked up -- must be dependent.  */
19348       return true;
19349
19350     case TEMPLATE_PARM_INDEX:
19351       /* A non-type template parm.  */
19352       return true;
19353
19354     case CONST_DECL:
19355       /* A non-type template parm.  */
19356       if (DECL_TEMPLATE_PARM_P (expression))
19357         return true;
19358       return value_dependent_expression_p (DECL_INITIAL (expression));
19359
19360     case VAR_DECL:
19361        /* A constant with literal type and is initialized
19362           with an expression that is value-dependent.  */
19363       if (DECL_INITIAL (expression)
19364           && decl_constant_var_p (expression)
19365           && value_dependent_expression_p (DECL_INITIAL (expression)))
19366         return true;
19367       return false;
19368
19369     case DYNAMIC_CAST_EXPR:
19370     case STATIC_CAST_EXPR:
19371     case CONST_CAST_EXPR:
19372     case REINTERPRET_CAST_EXPR:
19373     case CAST_EXPR:
19374       /* These expressions are value-dependent if the type to which
19375          the cast occurs is dependent or the expression being casted
19376          is value-dependent.  */
19377       {
19378         tree type = TREE_TYPE (expression);
19379
19380         if (dependent_type_p (type))
19381           return true;
19382
19383         /* A functional cast has a list of operands.  */
19384         expression = TREE_OPERAND (expression, 0);
19385         if (!expression)
19386           {
19387             /* If there are no operands, it must be an expression such
19388                as "int()". This should not happen for aggregate types
19389                because it would form non-constant expressions.  */
19390             gcc_assert (cxx_dialect >= cxx0x
19391                         || INTEGRAL_OR_ENUMERATION_TYPE_P (type));
19392
19393             return false;
19394           }
19395
19396         if (TREE_CODE (expression) == TREE_LIST)
19397           return any_value_dependent_elements_p (expression);
19398
19399         return value_dependent_expression_p (expression);
19400       }
19401
19402     case SIZEOF_EXPR:
19403     case ALIGNOF_EXPR:
19404     case TYPEID_EXPR:
19405       /* A `sizeof' expression is value-dependent if the operand is
19406          type-dependent or is a pack expansion.  */
19407       expression = TREE_OPERAND (expression, 0);
19408       if (PACK_EXPANSION_P (expression))
19409         return true;
19410       else if (TYPE_P (expression))
19411         return dependent_type_p (expression);
19412       return type_dependent_expression_p (expression);
19413
19414     case AT_ENCODE_EXPR:
19415       /* An 'encode' expression is value-dependent if the operand is
19416          type-dependent.  */
19417       expression = TREE_OPERAND (expression, 0);
19418       return dependent_type_p (expression);
19419
19420     case NOEXCEPT_EXPR:
19421       expression = TREE_OPERAND (expression, 0);
19422       return type_dependent_expression_p (expression);
19423
19424     case SCOPE_REF:
19425       {
19426         tree name = TREE_OPERAND (expression, 1);
19427         return value_dependent_expression_p (name);
19428       }
19429
19430     case COMPONENT_REF:
19431       return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
19432               || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
19433
19434     case NONTYPE_ARGUMENT_PACK:
19435       /* A NONTYPE_ARGUMENT_PACK is value-dependent if any packed argument
19436          is value-dependent.  */
19437       {
19438         tree values = ARGUMENT_PACK_ARGS (expression);
19439         int i, len = TREE_VEC_LENGTH (values);
19440         
19441         for (i = 0; i < len; ++i)
19442           if (value_dependent_expression_p (TREE_VEC_ELT (values, i)))
19443             return true;
19444         
19445         return false;
19446       }
19447
19448     case TRAIT_EXPR:
19449       {
19450         tree type2 = TRAIT_EXPR_TYPE2 (expression);
19451         return (dependent_type_p (TRAIT_EXPR_TYPE1 (expression))
19452                 || (type2 ? dependent_type_p (type2) : false));
19453       }
19454
19455     case MODOP_EXPR:
19456       return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
19457               || (value_dependent_expression_p (TREE_OPERAND (expression, 2))));
19458
19459     case ARRAY_REF:
19460       return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
19461               || (value_dependent_expression_p (TREE_OPERAND (expression, 1))));
19462
19463     case ADDR_EXPR:
19464       {
19465         tree op = TREE_OPERAND (expression, 0);
19466         return (value_dependent_expression_p (op)
19467                 || has_value_dependent_address (op));
19468       }
19469
19470     case CALL_EXPR:
19471       {
19472         tree fn = get_callee_fndecl (expression);
19473         int i, nargs;
19474         if (!fn && value_dependent_expression_p (CALL_EXPR_FN (expression)))
19475           return true;
19476         nargs = call_expr_nargs (expression);
19477         for (i = 0; i < nargs; ++i)
19478           {
19479             tree op = CALL_EXPR_ARG (expression, i);
19480             /* In a call to a constexpr member function, look through the
19481                implicit ADDR_EXPR on the object argument so that it doesn't
19482                cause the call to be considered value-dependent.  We also
19483                look through it in potential_constant_expression.  */
19484             if (i == 0 && fn && DECL_DECLARED_CONSTEXPR_P (fn)
19485                 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
19486                 && TREE_CODE (op) == ADDR_EXPR)
19487               op = TREE_OPERAND (op, 0);
19488             if (value_dependent_expression_p (op))
19489               return true;
19490           }
19491         return false;
19492       }
19493
19494     case TEMPLATE_ID_EXPR:
19495       /* If a TEMPLATE_ID_EXPR involves a dependent name, it will be
19496          type-dependent.  */
19497       return type_dependent_expression_p (expression);
19498
19499     case CONSTRUCTOR:
19500       {
19501         unsigned ix;
19502         tree val;
19503         FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), ix, val)
19504           if (value_dependent_expression_p (val))
19505             return true;
19506         return false;
19507       }
19508
19509     default:
19510       /* A constant expression is value-dependent if any subexpression is
19511          value-dependent.  */
19512       switch (TREE_CODE_CLASS (TREE_CODE (expression)))
19513         {
19514         case tcc_reference:
19515         case tcc_unary:
19516         case tcc_comparison:
19517         case tcc_binary:
19518         case tcc_expression:
19519         case tcc_vl_exp:
19520           {
19521             int i, len = cp_tree_operand_length (expression);
19522
19523             for (i = 0; i < len; i++)
19524               {
19525                 tree t = TREE_OPERAND (expression, i);
19526
19527                 /* In some cases, some of the operands may be missing.l
19528                    (For example, in the case of PREDECREMENT_EXPR, the
19529                    amount to increment by may be missing.)  That doesn't
19530                    make the expression dependent.  */
19531                 if (t && value_dependent_expression_p (t))
19532                   return true;
19533               }
19534           }
19535           break;
19536         default:
19537           break;
19538         }
19539       break;
19540     }
19541
19542   /* The expression is not value-dependent.  */
19543   return false;
19544 }
19545
19546 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
19547    [temp.dep.expr].  Note that an expression with no type is
19548    considered dependent.  Other parts of the compiler arrange for an
19549    expression with type-dependent subexpressions to have no type, so
19550    this function doesn't have to be fully recursive.  */
19551
19552 bool
19553 type_dependent_expression_p (tree expression)
19554 {
19555   if (!processing_template_decl)
19556     return false;
19557
19558   if (expression == error_mark_node)
19559     return false;
19560
19561   /* An unresolved name is always dependent.  */
19562   if (TREE_CODE (expression) == IDENTIFIER_NODE
19563       || TREE_CODE (expression) == USING_DECL)
19564     return true;
19565
19566   /* Some expression forms are never type-dependent.  */
19567   if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
19568       || TREE_CODE (expression) == SIZEOF_EXPR
19569       || TREE_CODE (expression) == ALIGNOF_EXPR
19570       || TREE_CODE (expression) == AT_ENCODE_EXPR
19571       || TREE_CODE (expression) == NOEXCEPT_EXPR
19572       || TREE_CODE (expression) == TRAIT_EXPR
19573       || TREE_CODE (expression) == TYPEID_EXPR
19574       || TREE_CODE (expression) == DELETE_EXPR
19575       || TREE_CODE (expression) == VEC_DELETE_EXPR
19576       || TREE_CODE (expression) == THROW_EXPR)
19577     return false;
19578
19579   /* The types of these expressions depends only on the type to which
19580      the cast occurs.  */
19581   if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
19582       || TREE_CODE (expression) == STATIC_CAST_EXPR
19583       || TREE_CODE (expression) == CONST_CAST_EXPR
19584       || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
19585       || TREE_CODE (expression) == IMPLICIT_CONV_EXPR
19586       || TREE_CODE (expression) == CAST_EXPR)
19587     return dependent_type_p (TREE_TYPE (expression));
19588
19589   /* The types of these expressions depends only on the type created
19590      by the expression.  */
19591   if (TREE_CODE (expression) == NEW_EXPR
19592       || TREE_CODE (expression) == VEC_NEW_EXPR)
19593     {
19594       /* For NEW_EXPR tree nodes created inside a template, either
19595          the object type itself or a TREE_LIST may appear as the
19596          operand 1.  */
19597       tree type = TREE_OPERAND (expression, 1);
19598       if (TREE_CODE (type) == TREE_LIST)
19599         /* This is an array type.  We need to check array dimensions
19600            as well.  */
19601         return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
19602                || value_dependent_expression_p
19603                     (TREE_OPERAND (TREE_VALUE (type), 1));
19604       else
19605         return dependent_type_p (type);
19606     }
19607
19608   if (TREE_CODE (expression) == SCOPE_REF)
19609     {
19610       tree scope = TREE_OPERAND (expression, 0);
19611       tree name = TREE_OPERAND (expression, 1);
19612
19613       /* 14.6.2.2 [temp.dep.expr]: An id-expression is type-dependent if it
19614          contains an identifier associated by name lookup with one or more
19615          declarations declared with a dependent type, or...a
19616          nested-name-specifier or qualified-id that names a member of an
19617          unknown specialization.  */
19618       return (type_dependent_expression_p (name)
19619               || dependent_scope_p (scope));
19620     }
19621
19622   if (TREE_CODE (expression) == FUNCTION_DECL
19623       && DECL_LANG_SPECIFIC (expression)
19624       && DECL_TEMPLATE_INFO (expression)
19625       && (any_dependent_template_arguments_p
19626           (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
19627     return true;
19628
19629   if (TREE_CODE (expression) == TEMPLATE_DECL
19630       && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
19631     return false;
19632
19633   if (TREE_CODE (expression) == STMT_EXPR)
19634     expression = stmt_expr_value_expr (expression);
19635
19636   if (BRACE_ENCLOSED_INITIALIZER_P (expression))
19637     {
19638       tree elt;
19639       unsigned i;
19640
19641       FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), i, elt)
19642         {
19643           if (type_dependent_expression_p (elt))
19644             return true;
19645         }
19646       return false;
19647     }
19648
19649   /* A static data member of the current instantiation with incomplete
19650      array type is type-dependent, as the definition and specializations
19651      can have different bounds.  */
19652   if (TREE_CODE (expression) == VAR_DECL
19653       && DECL_CLASS_SCOPE_P (expression)
19654       && dependent_type_p (DECL_CONTEXT (expression))
19655       && VAR_HAD_UNKNOWN_BOUND (expression))
19656     return true;
19657
19658   if (TREE_TYPE (expression) == unknown_type_node)
19659     {
19660       if (TREE_CODE (expression) == ADDR_EXPR)
19661         return type_dependent_expression_p (TREE_OPERAND (expression, 0));
19662       if (TREE_CODE (expression) == COMPONENT_REF
19663           || TREE_CODE (expression) == OFFSET_REF)
19664         {
19665           if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
19666             return true;
19667           expression = TREE_OPERAND (expression, 1);
19668           if (TREE_CODE (expression) == IDENTIFIER_NODE)
19669             return false;
19670         }
19671       /* SCOPE_REF with non-null TREE_TYPE is always non-dependent.  */
19672       if (TREE_CODE (expression) == SCOPE_REF)
19673         return false;
19674
19675       if (BASELINK_P (expression))
19676         expression = BASELINK_FUNCTIONS (expression);
19677
19678       if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
19679         {
19680           if (any_dependent_template_arguments_p
19681               (TREE_OPERAND (expression, 1)))
19682             return true;
19683           expression = TREE_OPERAND (expression, 0);
19684         }
19685       gcc_assert (TREE_CODE (expression) == OVERLOAD
19686                   || TREE_CODE (expression) == FUNCTION_DECL);
19687
19688       while (expression)
19689         {
19690           if (type_dependent_expression_p (OVL_CURRENT (expression)))
19691             return true;
19692           expression = OVL_NEXT (expression);
19693         }
19694       return false;
19695     }
19696
19697   gcc_assert (TREE_CODE (expression) != TYPE_DECL);
19698
19699   return (dependent_type_p (TREE_TYPE (expression)));
19700 }
19701
19702 /* Like type_dependent_expression_p, but it also works while not processing
19703    a template definition, i.e. during substitution or mangling.  */
19704
19705 bool
19706 type_dependent_expression_p_push (tree expr)
19707 {
19708   bool b;
19709   ++processing_template_decl;
19710   b = type_dependent_expression_p (expr);
19711   --processing_template_decl;
19712   return b;
19713 }
19714
19715 /* Returns TRUE if ARGS contains a type-dependent expression.  */
19716
19717 bool
19718 any_type_dependent_arguments_p (const VEC(tree,gc) *args)
19719 {
19720   unsigned int i;
19721   tree arg;
19722
19723   FOR_EACH_VEC_ELT (tree, args, i, arg)
19724     {
19725       if (type_dependent_expression_p (arg))
19726         return true;
19727     }
19728   return false;
19729 }
19730
19731 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
19732    expressions) contains any type-dependent expressions.  */
19733
19734 bool
19735 any_type_dependent_elements_p (const_tree list)
19736 {
19737   for (; list; list = TREE_CHAIN (list))
19738     if (value_dependent_expression_p (TREE_VALUE (list)))
19739       return true;
19740
19741   return false;
19742 }
19743
19744 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
19745    expressions) contains any value-dependent expressions.  */
19746
19747 bool
19748 any_value_dependent_elements_p (const_tree list)
19749 {
19750   for (; list; list = TREE_CHAIN (list))
19751     if (value_dependent_expression_p (TREE_VALUE (list)))
19752       return true;
19753
19754   return false;
19755 }
19756
19757 /* Returns TRUE if the ARG (a template argument) is dependent.  */
19758
19759 bool
19760 dependent_template_arg_p (tree arg)
19761 {
19762   if (!processing_template_decl)
19763     return false;
19764
19765   /* Assume a template argument that was wrongly written by the user
19766      is dependent. This is consistent with what
19767      any_dependent_template_arguments_p [that calls this function]
19768      does.  */
19769   if (!arg || arg == error_mark_node)
19770     return true;
19771
19772   if (TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
19773     arg = ARGUMENT_PACK_SELECT_ARG (arg);
19774
19775   if (TREE_CODE (arg) == TEMPLATE_DECL
19776       || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
19777     return dependent_template_p (arg);
19778   else if (ARGUMENT_PACK_P (arg))
19779     {
19780       tree args = ARGUMENT_PACK_ARGS (arg);
19781       int i, len = TREE_VEC_LENGTH (args);
19782       for (i = 0; i < len; ++i)
19783         {
19784           if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
19785             return true;
19786         }
19787
19788       return false;
19789     }
19790   else if (TYPE_P (arg))
19791     return dependent_type_p (arg);
19792   else
19793     return (type_dependent_expression_p (arg)
19794             || value_dependent_expression_p (arg));
19795 }
19796
19797 /* Returns true if ARGS (a collection of template arguments) contains
19798    any types that require structural equality testing.  */
19799
19800 bool
19801 any_template_arguments_need_structural_equality_p (tree args)
19802 {
19803   int i;
19804   int j;
19805
19806   if (!args)
19807     return false;
19808   if (args == error_mark_node)
19809     return true;
19810
19811   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
19812     {
19813       tree level = TMPL_ARGS_LEVEL (args, i + 1);
19814       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
19815         {
19816           tree arg = TREE_VEC_ELT (level, j);
19817           tree packed_args = NULL_TREE;
19818           int k, len = 1;
19819
19820           if (ARGUMENT_PACK_P (arg))
19821             {
19822               /* Look inside the argument pack.  */
19823               packed_args = ARGUMENT_PACK_ARGS (arg);
19824               len = TREE_VEC_LENGTH (packed_args);
19825             }
19826
19827           for (k = 0; k < len; ++k)
19828             {
19829               if (packed_args)
19830                 arg = TREE_VEC_ELT (packed_args, k);
19831
19832               if (error_operand_p (arg))
19833                 return true;
19834               else if (TREE_CODE (arg) == TEMPLATE_DECL
19835                        || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
19836                 continue;
19837               else if (TYPE_P (arg) && TYPE_STRUCTURAL_EQUALITY_P (arg))
19838                 return true;
19839               else if (!TYPE_P (arg) && TREE_TYPE (arg)
19840                        && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (arg)))
19841                 return true;
19842             }
19843         }
19844     }
19845
19846   return false;
19847 }
19848
19849 /* Returns true if ARGS (a collection of template arguments) contains
19850    any dependent arguments.  */
19851
19852 bool
19853 any_dependent_template_arguments_p (const_tree args)
19854 {
19855   int i;
19856   int j;
19857
19858   if (!args)
19859     return false;
19860   if (args == error_mark_node)
19861     return true;
19862
19863   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
19864     {
19865       const_tree level = TMPL_ARGS_LEVEL (args, i + 1);
19866       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
19867         if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
19868           return true;
19869     }
19870
19871   return false;
19872 }
19873
19874 /* Returns TRUE if the template TMPL is dependent.  */
19875
19876 bool
19877 dependent_template_p (tree tmpl)
19878 {
19879   if (TREE_CODE (tmpl) == OVERLOAD)
19880     {
19881       while (tmpl)
19882         {
19883           if (dependent_template_p (OVL_CURRENT (tmpl)))
19884             return true;
19885           tmpl = OVL_NEXT (tmpl);
19886         }
19887       return false;
19888     }
19889
19890   /* Template template parameters are dependent.  */
19891   if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
19892       || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
19893     return true;
19894   /* So are names that have not been looked up.  */
19895   if (TREE_CODE (tmpl) == SCOPE_REF
19896       || TREE_CODE (tmpl) == IDENTIFIER_NODE)
19897     return true;
19898   /* So are member templates of dependent classes.  */
19899   if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
19900     return dependent_type_p (DECL_CONTEXT (tmpl));
19901   return false;
19902 }
19903
19904 /* Returns TRUE if the specialization TMPL<ARGS> is dependent.  */
19905
19906 bool
19907 dependent_template_id_p (tree tmpl, tree args)
19908 {
19909   return (dependent_template_p (tmpl)
19910           || any_dependent_template_arguments_p (args));
19911 }
19912
19913 /* Returns TRUE if OMP_FOR with DECLV, INITV, CONDV and INCRV vectors
19914    is dependent.  */
19915
19916 bool
19917 dependent_omp_for_p (tree declv, tree initv, tree condv, tree incrv)
19918 {
19919   int i;
19920
19921   if (!processing_template_decl)
19922     return false;
19923
19924   for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
19925     {
19926       tree decl = TREE_VEC_ELT (declv, i);
19927       tree init = TREE_VEC_ELT (initv, i);
19928       tree cond = TREE_VEC_ELT (condv, i);
19929       tree incr = TREE_VEC_ELT (incrv, i);
19930
19931       if (type_dependent_expression_p (decl))
19932         return true;
19933
19934       if (init && type_dependent_expression_p (init))
19935         return true;
19936
19937       if (type_dependent_expression_p (cond))
19938         return true;
19939
19940       if (COMPARISON_CLASS_P (cond)
19941           && (type_dependent_expression_p (TREE_OPERAND (cond, 0))
19942               || type_dependent_expression_p (TREE_OPERAND (cond, 1))))
19943         return true;
19944
19945       if (TREE_CODE (incr) == MODOP_EXPR)
19946         {
19947           if (type_dependent_expression_p (TREE_OPERAND (incr, 0))
19948               || type_dependent_expression_p (TREE_OPERAND (incr, 2)))
19949             return true;
19950         }
19951       else if (type_dependent_expression_p (incr))
19952         return true;
19953       else if (TREE_CODE (incr) == MODIFY_EXPR)
19954         {
19955           if (type_dependent_expression_p (TREE_OPERAND (incr, 0)))
19956             return true;
19957           else if (BINARY_CLASS_P (TREE_OPERAND (incr, 1)))
19958             {
19959               tree t = TREE_OPERAND (incr, 1);
19960               if (type_dependent_expression_p (TREE_OPERAND (t, 0))
19961                   || type_dependent_expression_p (TREE_OPERAND (t, 1)))
19962                 return true;
19963             }
19964         }
19965     }
19966
19967   return false;
19968 }
19969
19970 /* TYPE is a TYPENAME_TYPE.  Returns the ordinary TYPE to which the
19971    TYPENAME_TYPE corresponds.  Returns the original TYPENAME_TYPE if
19972    no such TYPE can be found.  Note that this function peers inside
19973    uninstantiated templates and therefore should be used only in
19974    extremely limited situations.  ONLY_CURRENT_P restricts this
19975    peering to the currently open classes hierarchy (which is required
19976    when comparing types).  */
19977
19978 tree
19979 resolve_typename_type (tree type, bool only_current_p)
19980 {
19981   tree scope;
19982   tree name;
19983   tree decl;
19984   int quals;
19985   tree pushed_scope;
19986   tree result;
19987
19988   gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
19989
19990   scope = TYPE_CONTEXT (type);
19991   /* Usually the non-qualified identifier of a TYPENAME_TYPE is
19992      TYPE_IDENTIFIER (type). But when 'type' is a typedef variant of
19993      a TYPENAME_TYPE node, then TYPE_NAME (type) is set to the TYPE_DECL representing
19994      the typedef. In that case TYPE_IDENTIFIER (type) is not the non-qualified
19995      identifier  of the TYPENAME_TYPE anymore.
19996      So by getting the TYPE_IDENTIFIER of the _main declaration_ of the
19997      TYPENAME_TYPE instead, we avoid messing up with a possible
19998      typedef variant case.  */
19999   name = TYPE_IDENTIFIER (TYPE_MAIN_VARIANT (type));
20000
20001   /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
20002      it first before we can figure out what NAME refers to.  */
20003   if (TREE_CODE (scope) == TYPENAME_TYPE)
20004     scope = resolve_typename_type (scope, only_current_p);
20005   /* If we don't know what SCOPE refers to, then we cannot resolve the
20006      TYPENAME_TYPE.  */
20007   if (TREE_CODE (scope) == TYPENAME_TYPE)
20008     return type;
20009   /* If the SCOPE is a template type parameter, we have no way of
20010      resolving the name.  */
20011   if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
20012     return type;
20013   /* If the SCOPE is not the current instantiation, there's no reason
20014      to look inside it.  */
20015   if (only_current_p && !currently_open_class (scope))
20016     return type;
20017   /* If this is a typedef, we don't want to look inside (c++/11987).  */
20018   if (typedef_variant_p (type))
20019     return type;
20020   /* If SCOPE isn't the template itself, it will not have a valid
20021      TYPE_FIELDS list.  */
20022   if (same_type_p (scope, CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope)))
20023     /* scope is either the template itself or a compatible instantiation
20024        like X<T>, so look up the name in the original template.  */
20025     scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
20026   else
20027     /* scope is a partial instantiation, so we can't do the lookup or we
20028        will lose the template arguments.  */
20029     return type;
20030   /* Enter the SCOPE so that name lookup will be resolved as if we
20031      were in the class definition.  In particular, SCOPE will no
20032      longer be considered a dependent type.  */
20033   pushed_scope = push_scope (scope);
20034   /* Look up the declaration.  */
20035   decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true,
20036                         tf_warning_or_error);
20037
20038   result = NULL_TREE;
20039   
20040   /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
20041      find a TEMPLATE_DECL.  Otherwise, we want to find a TYPE_DECL.  */
20042   if (!decl)
20043     /*nop*/;
20044   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
20045            && TREE_CODE (decl) == TYPE_DECL)
20046     {
20047       result = TREE_TYPE (decl);
20048       if (result == error_mark_node)
20049         result = NULL_TREE;
20050     }
20051   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
20052            && DECL_CLASS_TEMPLATE_P (decl))
20053     {
20054       tree tmpl;
20055       tree args;
20056       /* Obtain the template and the arguments.  */
20057       tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
20058       args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
20059       /* Instantiate the template.  */
20060       result = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
20061                                       /*entering_scope=*/0,
20062                                       tf_error | tf_user);
20063       if (result == error_mark_node)
20064         result = NULL_TREE;
20065     }
20066   
20067   /* Leave the SCOPE.  */
20068   if (pushed_scope)
20069     pop_scope (pushed_scope);
20070
20071   /* If we failed to resolve it, return the original typename.  */
20072   if (!result)
20073     return type;
20074   
20075   /* If lookup found a typename type, resolve that too.  */
20076   if (TREE_CODE (result) == TYPENAME_TYPE && !TYPENAME_IS_RESOLVING_P (result))
20077     {
20078       /* Ill-formed programs can cause infinite recursion here, so we
20079          must catch that.  */
20080       TYPENAME_IS_RESOLVING_P (type) = 1;
20081       result = resolve_typename_type (result, only_current_p);
20082       TYPENAME_IS_RESOLVING_P (type) = 0;
20083     }
20084   
20085   /* Qualify the resulting type.  */
20086   quals = cp_type_quals (type);
20087   if (quals)
20088     result = cp_build_qualified_type (result, cp_type_quals (result) | quals);
20089
20090   return result;
20091 }
20092
20093 /* EXPR is an expression which is not type-dependent.  Return a proxy
20094    for EXPR that can be used to compute the types of larger
20095    expressions containing EXPR.  */
20096
20097 tree
20098 build_non_dependent_expr (tree expr)
20099 {
20100   tree inner_expr;
20101
20102 #ifdef ENABLE_CHECKING
20103   /* Try to get a constant value for all non-type-dependent expressions in
20104       order to expose bugs in *_dependent_expression_p and constexpr.  */
20105   if (cxx_dialect >= cxx0x)
20106     maybe_constant_value (fold_non_dependent_expr_sfinae (expr, tf_none));
20107 #endif
20108
20109   /* Preserve OVERLOADs; the functions must be available to resolve
20110      types.  */
20111   inner_expr = expr;
20112   if (TREE_CODE (inner_expr) == STMT_EXPR)
20113     inner_expr = stmt_expr_value_expr (inner_expr);
20114   if (TREE_CODE (inner_expr) == ADDR_EXPR)
20115     inner_expr = TREE_OPERAND (inner_expr, 0);
20116   if (TREE_CODE (inner_expr) == COMPONENT_REF)
20117     inner_expr = TREE_OPERAND (inner_expr, 1);
20118   if (is_overloaded_fn (inner_expr)
20119       || TREE_CODE (inner_expr) == OFFSET_REF)
20120     return expr;
20121   /* There is no need to return a proxy for a variable.  */
20122   if (TREE_CODE (expr) == VAR_DECL)
20123     return expr;
20124   /* Preserve string constants; conversions from string constants to
20125      "char *" are allowed, even though normally a "const char *"
20126      cannot be used to initialize a "char *".  */
20127   if (TREE_CODE (expr) == STRING_CST)
20128     return expr;
20129   /* Preserve arithmetic constants, as an optimization -- there is no
20130      reason to create a new node.  */
20131   if (TREE_CODE (expr) == INTEGER_CST || TREE_CODE (expr) == REAL_CST)
20132     return expr;
20133   /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
20134      There is at least one place where we want to know that a
20135      particular expression is a throw-expression: when checking a ?:
20136      expression, there are special rules if the second or third
20137      argument is a throw-expression.  */
20138   if (TREE_CODE (expr) == THROW_EXPR)
20139     return expr;
20140
20141   /* Don't wrap an initializer list, we need to be able to look inside.  */
20142   if (BRACE_ENCLOSED_INITIALIZER_P (expr))
20143     return expr;
20144
20145   if (TREE_CODE (expr) == COND_EXPR)
20146     return build3 (COND_EXPR,
20147                    TREE_TYPE (expr),
20148                    TREE_OPERAND (expr, 0),
20149                    (TREE_OPERAND (expr, 1)
20150                     ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
20151                     : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
20152                    build_non_dependent_expr (TREE_OPERAND (expr, 2)));
20153   if (TREE_CODE (expr) == COMPOUND_EXPR
20154       && !COMPOUND_EXPR_OVERLOADED (expr))
20155     return build2 (COMPOUND_EXPR,
20156                    TREE_TYPE (expr),
20157                    TREE_OPERAND (expr, 0),
20158                    build_non_dependent_expr (TREE_OPERAND (expr, 1)));
20159
20160   /* If the type is unknown, it can't really be non-dependent */
20161   gcc_assert (TREE_TYPE (expr) != unknown_type_node);
20162
20163   /* Otherwise, build a NON_DEPENDENT_EXPR.  */
20164   return build1 (NON_DEPENDENT_EXPR, TREE_TYPE (expr), expr);
20165 }
20166
20167 /* ARGS is a vector of expressions as arguments to a function call.
20168    Replace the arguments with equivalent non-dependent expressions.
20169    This modifies ARGS in place.  */
20170
20171 void
20172 make_args_non_dependent (VEC(tree,gc) *args)
20173 {
20174   unsigned int ix;
20175   tree arg;
20176
20177   FOR_EACH_VEC_ELT (tree, args, ix, arg)
20178     {
20179       tree newarg = build_non_dependent_expr (arg);
20180       if (newarg != arg)
20181         VEC_replace (tree, args, ix, newarg);
20182     }
20183 }
20184
20185 /* Returns a type which represents 'auto'.  We use a TEMPLATE_TYPE_PARM
20186    with a level one deeper than the actual template parms.  */
20187
20188 tree
20189 make_auto (void)
20190 {
20191   tree au = cxx_make_type (TEMPLATE_TYPE_PARM);
20192   TYPE_NAME (au) = build_decl (BUILTINS_LOCATION,
20193                                TYPE_DECL, get_identifier ("auto"), au);
20194   TYPE_STUB_DECL (au) = TYPE_NAME (au);
20195   TEMPLATE_TYPE_PARM_INDEX (au) = build_template_parm_index
20196     (0, processing_template_decl + 1, processing_template_decl + 1,
20197      0, TYPE_NAME (au), NULL_TREE);
20198   TYPE_CANONICAL (au) = canonical_type_parameter (au);
20199   DECL_ARTIFICIAL (TYPE_NAME (au)) = 1;
20200   SET_DECL_TEMPLATE_PARM_P (TYPE_NAME (au));
20201
20202   return au;
20203 }
20204
20205 /* Given type ARG, return std::initializer_list<ARG>.  */
20206
20207 static tree
20208 listify (tree arg)
20209 {
20210   tree std_init_list = namespace_binding
20211     (get_identifier ("initializer_list"), std_node);
20212   tree argvec;
20213   if (!std_init_list || !DECL_CLASS_TEMPLATE_P (std_init_list))
20214     {    
20215       error ("deducing from brace-enclosed initializer list requires "
20216              "#include <initializer_list>");
20217       return error_mark_node;
20218     }
20219   argvec = make_tree_vec (1);
20220   TREE_VEC_ELT (argvec, 0) = arg;
20221   return lookup_template_class (std_init_list, argvec, NULL_TREE,
20222                                 NULL_TREE, 0, tf_warning_or_error);
20223 }
20224
20225 /* Replace auto in TYPE with std::initializer_list<auto>.  */
20226
20227 static tree
20228 listify_autos (tree type, tree auto_node)
20229 {
20230   tree init_auto = listify (auto_node);
20231   tree argvec = make_tree_vec (1);
20232   TREE_VEC_ELT (argvec, 0) = init_auto;
20233   if (processing_template_decl)
20234     argvec = add_to_template_args (current_template_args (), argvec);
20235   return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
20236 }
20237
20238 /* walk_tree helper for do_auto_deduction.  */
20239
20240 static tree
20241 contains_auto_r (tree *tp, int *walk_subtrees ATTRIBUTE_UNUSED,
20242                  void *type)
20243 {
20244   /* Is this a variable with the type we're looking for?  */
20245   if (DECL_P (*tp)
20246       && TREE_TYPE (*tp) == type)
20247     return *tp;
20248   else
20249     return NULL_TREE;
20250 }
20251
20252 /* Replace occurrences of 'auto' in TYPE with the appropriate type deduced
20253    from INIT.  AUTO_NODE is the TEMPLATE_TYPE_PARM used for 'auto' in TYPE.  */
20254
20255 tree
20256 do_auto_deduction (tree type, tree init, tree auto_node)
20257 {
20258   tree parms, tparms, targs;
20259   tree args[1];
20260   tree decl;
20261   int val;
20262
20263   if (processing_template_decl
20264       && (TREE_TYPE (init) == NULL_TREE
20265           || BRACE_ENCLOSED_INITIALIZER_P (init)))
20266     /* Not enough information to try this yet.  */
20267     return type;
20268
20269   /* The name of the object being declared shall not appear in the
20270      initializer expression.  */
20271   decl = cp_walk_tree_without_duplicates (&init, contains_auto_r, type);
20272   if (decl)
20273     {
20274       error ("variable %q#D with %<auto%> type used in its own "
20275              "initializer", decl);
20276       return error_mark_node;
20277     }
20278
20279   /* [dcl.spec.auto]: Obtain P from T by replacing the occurrences of auto
20280      with either a new invented type template parameter U or, if the
20281      initializer is a braced-init-list (8.5.4), with
20282      std::initializer_list<U>.  */
20283   if (BRACE_ENCLOSED_INITIALIZER_P (init))
20284     type = listify_autos (type, auto_node);
20285
20286   init = resolve_nondeduced_context (init);
20287
20288   parms = build_tree_list (NULL_TREE, type);
20289   args[0] = init;
20290   tparms = make_tree_vec (1);
20291   targs = make_tree_vec (1);
20292   TREE_VEC_ELT (tparms, 0)
20293     = build_tree_list (NULL_TREE, TYPE_NAME (auto_node));
20294   val = type_unification_real (tparms, targs, parms, args, 1, 0,
20295                                DEDUCE_CALL, LOOKUP_NORMAL,
20296                                /*explain_p=*/false);
20297   if (val > 0)
20298     {
20299       if (processing_template_decl)
20300         /* Try again at instantiation time.  */
20301         return type;
20302       if (type && type != error_mark_node)
20303         /* If type is error_mark_node a diagnostic must have been
20304            emitted by now.  Also, having a mention to '<type error>'
20305            in the diagnostic is not really useful to the user.  */
20306         error ("unable to deduce %qT from %qE", type, init);
20307       return error_mark_node;
20308     }
20309
20310   /* If the list of declarators contains more than one declarator, the type
20311      of each declared variable is determined as described above. If the
20312      type deduced for the template parameter U is not the same in each
20313      deduction, the program is ill-formed.  */
20314   if (TREE_TYPE (auto_node)
20315       && !same_type_p (TREE_TYPE (auto_node), TREE_VEC_ELT (targs, 0)))
20316     {
20317       error ("inconsistent deduction for %qT: %qT and then %qT",
20318              auto_node, TREE_TYPE (auto_node), TREE_VEC_ELT (targs, 0));
20319       return error_mark_node;
20320     }
20321   TREE_TYPE (auto_node) = TREE_VEC_ELT (targs, 0);
20322
20323   if (processing_template_decl)
20324     targs = add_to_template_args (current_template_args (), targs);
20325   return tsubst (type, targs, tf_warning_or_error, NULL_TREE);
20326 }
20327
20328 /* Substitutes LATE_RETURN_TYPE for 'auto' in TYPE and returns the
20329    result.  */
20330
20331 tree
20332 splice_late_return_type (tree type, tree late_return_type)
20333 {
20334   tree argvec;
20335
20336   if (late_return_type == NULL_TREE)
20337     return type;
20338   argvec = make_tree_vec (1);
20339   TREE_VEC_ELT (argvec, 0) = late_return_type;
20340   if (processing_template_parmlist)
20341     /* For a late-specified return type in a template type-parameter, we
20342        need to add a dummy argument level for its parmlist.  */
20343     argvec = add_to_template_args
20344       (make_tree_vec (processing_template_parmlist), argvec);
20345   if (current_template_parms)
20346     argvec = add_to_template_args (current_template_args (), argvec);
20347   return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
20348 }
20349
20350 /* Returns true iff TYPE is a TEMPLATE_TYPE_PARM representing 'auto'.  */
20351
20352 bool
20353 is_auto (const_tree type)
20354 {
20355   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
20356       && TYPE_IDENTIFIER (type) == get_identifier ("auto"))
20357     return true;
20358   else
20359     return false;
20360 }
20361
20362 /* Returns true iff TYPE contains a use of 'auto'.  Since auto can only
20363    appear as a type-specifier for the declaration in question, we don't
20364    have to look through the whole type.  */
20365
20366 tree
20367 type_uses_auto (tree type)
20368 {
20369   enum tree_code code;
20370   if (is_auto (type))
20371     return type;
20372
20373   code = TREE_CODE (type);
20374
20375   if (code == POINTER_TYPE || code == REFERENCE_TYPE
20376       || code == OFFSET_TYPE || code == FUNCTION_TYPE
20377       || code == METHOD_TYPE || code == ARRAY_TYPE)
20378     return type_uses_auto (TREE_TYPE (type));
20379
20380   if (TYPE_PTRMEMFUNC_P (type))
20381     return type_uses_auto (TREE_TYPE (TREE_TYPE
20382                                    (TYPE_PTRMEMFUNC_FN_TYPE (type))));
20383
20384   return NULL_TREE;
20385 }
20386
20387 /* For a given template T, return the vector of typedefs referenced
20388    in T for which access check is needed at T instantiation time.
20389    T is either  a FUNCTION_DECL or a RECORD_TYPE.
20390    Those typedefs were added to T by the function
20391    append_type_to_template_for_access_check.  */
20392
20393 VEC(qualified_typedef_usage_t,gc)*
20394 get_types_needing_access_check (tree t)
20395 {
20396   tree ti;
20397   VEC(qualified_typedef_usage_t,gc) *result = NULL;
20398
20399   if (!t || t == error_mark_node)
20400     return NULL;
20401
20402   if (!(ti = get_template_info (t)))
20403     return NULL;
20404
20405   if (CLASS_TYPE_P (t)
20406       || TREE_CODE (t) == FUNCTION_DECL)
20407     {
20408       if (!TI_TEMPLATE (ti))
20409         return NULL;
20410
20411       result = TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti);
20412     }
20413
20414   return result;
20415 }
20416
20417 /* Append the typedef TYPE_DECL used in template T to a list of typedefs
20418    tied to T. That list of typedefs will be access checked at
20419    T instantiation time.
20420    T is either a FUNCTION_DECL or a RECORD_TYPE.
20421    TYPE_DECL is a TYPE_DECL node representing a typedef.
20422    SCOPE is the scope through which TYPE_DECL is accessed.
20423    LOCATION is the location of the usage point of TYPE_DECL.
20424
20425    This function is a subroutine of
20426    append_type_to_template_for_access_check.  */
20427
20428 static void
20429 append_type_to_template_for_access_check_1 (tree t,
20430                                             tree type_decl,
20431                                             tree scope,
20432                                             location_t location)
20433 {
20434   qualified_typedef_usage_t typedef_usage;
20435   tree ti;
20436
20437   if (!t || t == error_mark_node)
20438     return;
20439
20440   gcc_assert ((TREE_CODE (t) == FUNCTION_DECL
20441                || CLASS_TYPE_P (t))
20442               && type_decl
20443               && TREE_CODE (type_decl) == TYPE_DECL
20444               && scope);
20445
20446   if (!(ti = get_template_info (t)))
20447     return;
20448
20449   gcc_assert (TI_TEMPLATE (ti));
20450
20451   typedef_usage.typedef_decl = type_decl;
20452   typedef_usage.context = scope;
20453   typedef_usage.locus = location;
20454
20455   VEC_safe_push (qualified_typedef_usage_t, gc,
20456                  TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti),
20457                  &typedef_usage);
20458 }
20459
20460 /* Append TYPE_DECL to the template TEMPL.
20461    TEMPL is either a class type, a FUNCTION_DECL or a a TEMPLATE_DECL.
20462    At TEMPL instanciation time, TYPE_DECL will be checked to see
20463    if it can be accessed through SCOPE.
20464    LOCATION is the location of the usage point of TYPE_DECL.
20465
20466    e.g. consider the following code snippet:
20467
20468      class C
20469      {
20470        typedef int myint;
20471      };
20472
20473      template<class U> struct S
20474      {
20475        C::myint mi; // <-- usage point of the typedef C::myint
20476      };
20477
20478      S<char> s;
20479
20480    At S<char> instantiation time, we need to check the access of C::myint
20481    In other words, we need to check the access of the myint typedef through
20482    the C scope. For that purpose, this function will add the myint typedef
20483    and the scope C through which its being accessed to a list of typedefs
20484    tied to the template S. That list will be walked at template instantiation
20485    time and access check performed on each typedefs it contains.
20486    Note that this particular code snippet should yield an error because
20487    myint is private to C.  */
20488
20489 void
20490 append_type_to_template_for_access_check (tree templ,
20491                                           tree type_decl,
20492                                           tree scope,
20493                                           location_t location)
20494 {
20495   qualified_typedef_usage_t *iter;
20496   int i;
20497
20498   gcc_assert (type_decl && (TREE_CODE (type_decl) == TYPE_DECL));
20499
20500   /* Make sure we don't append the type to the template twice.  */
20501   FOR_EACH_VEC_ELT (qualified_typedef_usage_t,
20502                     get_types_needing_access_check (templ),
20503                     i, iter)
20504     if (iter->typedef_decl == type_decl && scope == iter->context)
20505       return;
20506
20507   append_type_to_template_for_access_check_1 (templ, type_decl,
20508                                               scope, location);
20509 }
20510
20511 /* Set up the hash tables for template instantiations.  */
20512
20513 void
20514 init_template_processing (void)
20515 {
20516   decl_specializations = htab_create_ggc (37,
20517                                           hash_specialization,
20518                                           eq_specializations,
20519                                           ggc_free);
20520   type_specializations = htab_create_ggc (37,
20521                                           hash_specialization,
20522                                           eq_specializations,
20523                                           ggc_free);
20524 }
20525
20526 /* Print stats about the template hash tables for -fstats.  */
20527
20528 void
20529 print_template_statistics (void)
20530 {
20531   fprintf (stderr, "decl_specializations: size %ld, %ld elements, "
20532            "%f collisions\n", (long) htab_size (decl_specializations),
20533            (long) htab_elements (decl_specializations),
20534            htab_collisions (decl_specializations));
20535   fprintf (stderr, "type_specializations: size %ld, %ld elements, "
20536            "%f collisions\n", (long) htab_size (type_specializations),
20537            (long) htab_elements (type_specializations),
20538            htab_collisions (type_specializations));
20539 }
20540
20541 #include "gt-cp-pt.h"