OSDN Git Service

/cp
[pf3gnuchains/gcc-fork.git] / gcc / cp / pt.c
1 /* Handle parameterized types (templates) for GNU C++.
2    Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3    2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011, 2012
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               if (processing_template_decl
5811                   && !require_potential_constant_expression (expr))
5812                 return NULL_TREE;
5813               expr = cxx_constant_value (expr);
5814               if (errorcount > errs || warningcount > warns)
5815                 inform (EXPR_LOC_OR_HERE (expr),
5816                         "in template argument for type %qT ", type);
5817               if (expr == error_mark_node)
5818                 return NULL_TREE;
5819               /* else cxx_constant_value complained but gave us
5820                  a real constant, so go ahead.  */
5821               gcc_assert (TREE_CODE (expr) == INTEGER_CST);
5822             }
5823           else
5824             return NULL_TREE;
5825         }
5826     }
5827   /* [temp.arg.nontype]/5, bullet 2
5828
5829      For a non-type template-parameter of type pointer to object,
5830      qualification conversions (_conv.qual_) and the array-to-pointer
5831      conversion (_conv.array_) are applied.  */
5832   else if (TYPE_PTROBV_P (type))
5833     {
5834       /* [temp.arg.nontype]/1  (TC1 version, DR 49):
5835
5836          A template-argument for a non-type, non-template template-parameter
5837          shall be one of: [...]
5838
5839          -- the name of a non-type template-parameter;
5840          -- the address of an object or function with external linkage, [...]
5841             expressed as "& id-expression" where the & is optional if the name
5842             refers to a function or array, or if the corresponding
5843             template-parameter is a reference.
5844
5845         Here, we do not care about functions, as they are invalid anyway
5846         for a parameter of type pointer-to-object.  */
5847
5848       if (DECL_P (expr) && DECL_TEMPLATE_PARM_P (expr))
5849         /* Non-type template parameters are OK.  */
5850         ;
5851       else if (cxx_dialect >= cxx0x && integer_zerop (expr))
5852         /* Null pointer values are OK in C++11.  */;
5853       else if (TREE_CODE (expr) != ADDR_EXPR
5854                && TREE_CODE (expr_type) != ARRAY_TYPE)
5855         {
5856           if (TREE_CODE (expr) == VAR_DECL)
5857             {
5858               error ("%qD is not a valid template argument "
5859                      "because %qD is a variable, not the address of "
5860                      "a variable",
5861                      expr, expr);
5862               return NULL_TREE;
5863             }
5864           /* Other values, like integer constants, might be valid
5865              non-type arguments of some other type.  */
5866           return error_mark_node;
5867         }
5868       else
5869         {
5870           tree decl;
5871
5872           decl = ((TREE_CODE (expr) == ADDR_EXPR)
5873                   ? TREE_OPERAND (expr, 0) : expr);
5874           if (TREE_CODE (decl) != VAR_DECL)
5875             {
5876               error ("%qE is not a valid template argument of type %qT "
5877                      "because %qE is not a variable",
5878                      expr, type, decl);
5879               return NULL_TREE;
5880             }
5881           else if (cxx_dialect < cxx0x && !DECL_EXTERNAL_LINKAGE_P (decl))
5882             {
5883               error ("%qE is not a valid template argument of type %qT "
5884                      "because %qD does not have external linkage",
5885                      expr, type, decl);
5886               return NULL_TREE;
5887             }
5888           else if (cxx_dialect >= cxx0x && decl_linkage (decl) == lk_none)
5889             {
5890               error ("%qE is not a valid template argument of type %qT "
5891                      "because %qD has no linkage",
5892                      expr, type, decl);
5893               return NULL_TREE;
5894             }
5895         }
5896
5897       expr = decay_conversion (expr);
5898       if (expr == error_mark_node)
5899         return error_mark_node;
5900
5901       expr = perform_qualification_conversions (type, expr);
5902       if (expr == error_mark_node)
5903         return error_mark_node;
5904     }
5905   /* [temp.arg.nontype]/5, bullet 3
5906
5907      For a non-type template-parameter of type reference to object, no
5908      conversions apply. The type referred to by the reference may be more
5909      cv-qualified than the (otherwise identical) type of the
5910      template-argument. The template-parameter is bound directly to the
5911      template-argument, which must be an lvalue.  */
5912   else if (TYPE_REF_OBJ_P (type))
5913     {
5914       if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type),
5915                                                       expr_type))
5916         return error_mark_node;
5917
5918       if (!at_least_as_qualified_p (TREE_TYPE (type), expr_type))
5919         {
5920           error ("%qE is not a valid template argument for type %qT "
5921                  "because of conflicts in cv-qualification", expr, type);
5922           return NULL_TREE;
5923         }
5924
5925       if (!real_lvalue_p (expr))
5926         {
5927           error ("%qE is not a valid template argument for type %qT "
5928                  "because it is not an lvalue", expr, type);
5929           return NULL_TREE;
5930         }
5931
5932       /* [temp.arg.nontype]/1
5933
5934          A template-argument for a non-type, non-template template-parameter
5935          shall be one of: [...]
5936
5937          -- the address of an object or function with external linkage.  */
5938       if (TREE_CODE (expr) == INDIRECT_REF
5939           && TYPE_REF_OBJ_P (TREE_TYPE (TREE_OPERAND (expr, 0))))
5940         {
5941           expr = TREE_OPERAND (expr, 0);
5942           if (DECL_P (expr))
5943             {
5944               error ("%q#D is not a valid template argument for type %qT "
5945                      "because a reference variable does not have a constant "
5946                      "address", expr, type);
5947               return NULL_TREE;
5948             }
5949         }
5950
5951       if (!DECL_P (expr))
5952         {
5953           error ("%qE is not a valid template argument for type %qT "
5954                  "because it is not an object with external linkage",
5955                  expr, type);
5956           return NULL_TREE;
5957         }
5958
5959       if (!DECL_EXTERNAL_LINKAGE_P (expr))
5960         {
5961           error ("%qE is not a valid template argument for type %qT "
5962                  "because object %qD has not external linkage",
5963                  expr, type, expr);
5964           return NULL_TREE;
5965         }
5966
5967       expr = build_nop (type, build_address (expr));
5968     }
5969   /* [temp.arg.nontype]/5, bullet 4
5970
5971      For a non-type template-parameter of type pointer to function, only
5972      the function-to-pointer conversion (_conv.func_) is applied. If the
5973      template-argument represents a set of overloaded functions (or a
5974      pointer to such), the matching function is selected from the set
5975      (_over.over_).  */
5976   else if (TYPE_PTRFN_P (type))
5977     {
5978       /* If the argument is a template-id, we might not have enough
5979          context information to decay the pointer.  */
5980       if (!type_unknown_p (expr_type))
5981         {
5982           expr = decay_conversion (expr);
5983           if (expr == error_mark_node)
5984             return error_mark_node;
5985         }
5986
5987       if (cxx_dialect >= cxx0x && integer_zerop (expr))
5988         /* Null pointer values are OK in C++11.  */
5989         return perform_qualification_conversions (type, expr);
5990
5991       expr = convert_nontype_argument_function (type, expr);
5992       if (!expr || expr == error_mark_node)
5993         return expr;
5994
5995       if (TREE_CODE (expr) != ADDR_EXPR)
5996         {
5997           error ("%qE is not a valid template argument for type %qT", expr, type);
5998           error ("it must be the address of a function with external linkage");
5999           return NULL_TREE;
6000         }
6001     }
6002   /* [temp.arg.nontype]/5, bullet 5
6003
6004      For a non-type template-parameter of type reference to function, no
6005      conversions apply. If the template-argument represents a set of
6006      overloaded functions, the matching function is selected from the set
6007      (_over.over_).  */
6008   else if (TYPE_REFFN_P (type))
6009     {
6010       if (TREE_CODE (expr) == ADDR_EXPR)
6011         {
6012           error ("%qE is not a valid template argument for type %qT "
6013                  "because it is a pointer", expr, type);
6014           inform (input_location, "try using %qE instead", TREE_OPERAND (expr, 0));
6015           return NULL_TREE;
6016         }
6017
6018       expr = convert_nontype_argument_function (TREE_TYPE (type), expr);
6019       if (!expr || expr == error_mark_node)
6020         return expr;
6021
6022       expr = build_nop (type, build_address (expr));
6023     }
6024   /* [temp.arg.nontype]/5, bullet 6
6025
6026      For a non-type template-parameter of type pointer to member function,
6027      no conversions apply. If the template-argument represents a set of
6028      overloaded member functions, the matching member function is selected
6029      from the set (_over.over_).  */
6030   else if (TYPE_PTRMEMFUNC_P (type))
6031     {
6032       expr = instantiate_type (type, expr, tf_none);
6033       if (expr == error_mark_node)
6034         return error_mark_node;
6035
6036       /* [temp.arg.nontype] bullet 1 says the pointer to member
6037          expression must be a pointer-to-member constant.  */
6038       if (!check_valid_ptrmem_cst_expr (type, expr, complain))
6039         return error_mark_node;
6040
6041       /* There is no way to disable standard conversions in
6042          resolve_address_of_overloaded_function (called by
6043          instantiate_type). It is possible that the call succeeded by
6044          converting &B::I to &D::I (where B is a base of D), so we need
6045          to reject this conversion here.
6046
6047          Actually, even if there was a way to disable standard conversions,
6048          it would still be better to reject them here so that we can
6049          provide a superior diagnostic.  */
6050       if (!same_type_p (TREE_TYPE (expr), type))
6051         {
6052           error ("%qE is not a valid template argument for type %qT "
6053                  "because it is of type %qT", expr, type,
6054                  TREE_TYPE (expr));
6055           /* If we are just one standard conversion off, explain.  */
6056           if (can_convert (type, TREE_TYPE (expr)))
6057             inform (input_location,
6058                     "standard conversions are not allowed in this context");
6059           return NULL_TREE;
6060         }
6061     }
6062   /* [temp.arg.nontype]/5, bullet 7
6063
6064      For a non-type template-parameter of type pointer to data member,
6065      qualification conversions (_conv.qual_) are applied.  */
6066   else if (TYPE_PTRMEM_P (type))
6067     {
6068       /* [temp.arg.nontype] bullet 1 says the pointer to member
6069          expression must be a pointer-to-member constant.  */
6070       if (!check_valid_ptrmem_cst_expr (type, expr, complain))
6071         return error_mark_node;
6072
6073       expr = perform_qualification_conversions (type, expr);
6074       if (expr == error_mark_node)
6075         return expr;
6076     }
6077   else if (NULLPTR_TYPE_P (type))
6078     {
6079       if (expr != nullptr_node)
6080         {
6081           error ("%qE is not a valid template argument for type %qT "
6082                  "because it is of type %qT", expr, type, TREE_TYPE (expr));
6083           return NULL_TREE;
6084         }
6085       return expr;
6086     }
6087   /* A template non-type parameter must be one of the above.  */
6088   else
6089     gcc_unreachable ();
6090
6091   /* Sanity check: did we actually convert the argument to the
6092      right type?  */
6093   gcc_assert (same_type_ignoring_top_level_qualifiers_p
6094               (type, TREE_TYPE (expr)));
6095   return expr;
6096 }
6097
6098 /* Subroutine of coerce_template_template_parms, which returns 1 if
6099    PARM_PARM and ARG_PARM match using the rule for the template
6100    parameters of template template parameters. Both PARM and ARG are
6101    template parameters; the rest of the arguments are the same as for
6102    coerce_template_template_parms.
6103  */
6104 static int
6105 coerce_template_template_parm (tree parm,
6106                               tree arg,
6107                               tsubst_flags_t complain,
6108                               tree in_decl,
6109                               tree outer_args)
6110 {
6111   if (arg == NULL_TREE || arg == error_mark_node
6112       || parm == NULL_TREE || parm == error_mark_node)
6113     return 0;
6114   
6115   if (TREE_CODE (arg) != TREE_CODE (parm))
6116     return 0;
6117   
6118   switch (TREE_CODE (parm))
6119     {
6120     case TEMPLATE_DECL:
6121       /* We encounter instantiations of templates like
6122          template <template <template <class> class> class TT>
6123          class C;  */
6124       {
6125         tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
6126         tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
6127         
6128         if (!coerce_template_template_parms
6129             (parmparm, argparm, complain, in_decl, outer_args))
6130           return 0;
6131       }
6132       /* Fall through.  */
6133       
6134     case TYPE_DECL:
6135       if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (arg))
6136           && !TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
6137         /* Argument is a parameter pack but parameter is not.  */
6138         return 0;
6139       break;
6140       
6141     case PARM_DECL:
6142       /* The tsubst call is used to handle cases such as
6143          
6144            template <int> class C {};
6145            template <class T, template <T> class TT> class D {};
6146            D<int, C> d;
6147
6148          i.e. the parameter list of TT depends on earlier parameters.  */
6149       if (!uses_template_parms (TREE_TYPE (arg))
6150           && !same_type_p
6151                 (tsubst (TREE_TYPE (parm), outer_args, complain, in_decl),
6152                  TREE_TYPE (arg)))
6153         return 0;
6154       
6155       if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (arg))
6156           && !TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
6157         /* Argument is a parameter pack but parameter is not.  */
6158         return 0;
6159       
6160       break;
6161
6162     default:
6163       gcc_unreachable ();
6164     }
6165
6166   return 1;
6167 }
6168
6169
6170 /* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
6171    template template parameters.  Both PARM_PARMS and ARG_PARMS are
6172    vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
6173    or PARM_DECL.
6174
6175    Consider the example:
6176      template <class T> class A;
6177      template<template <class U> class TT> class B;
6178
6179    For B<A>, PARM_PARMS are the parameters to TT, while ARG_PARMS are
6180    the parameters to A, and OUTER_ARGS contains A.  */
6181
6182 static int
6183 coerce_template_template_parms (tree parm_parms,
6184                                 tree arg_parms,
6185                                 tsubst_flags_t complain,
6186                                 tree in_decl,
6187                                 tree outer_args)
6188 {
6189   int nparms, nargs, i;
6190   tree parm, arg;
6191   int variadic_p = 0;
6192
6193   gcc_assert (TREE_CODE (parm_parms) == TREE_VEC);
6194   gcc_assert (TREE_CODE (arg_parms) == TREE_VEC);
6195
6196   nparms = TREE_VEC_LENGTH (parm_parms);
6197   nargs = TREE_VEC_LENGTH (arg_parms);
6198
6199   /* Determine whether we have a parameter pack at the end of the
6200      template template parameter's template parameter list.  */
6201   if (TREE_VEC_ELT (parm_parms, nparms - 1) != error_mark_node)
6202     {
6203       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, nparms - 1));
6204       
6205       if (parm == error_mark_node)
6206         return 0;
6207
6208       switch (TREE_CODE (parm))
6209         {
6210         case TEMPLATE_DECL:
6211         case TYPE_DECL:
6212           if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
6213             variadic_p = 1;
6214           break;
6215           
6216         case PARM_DECL:
6217           if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
6218             variadic_p = 1;
6219           break;
6220           
6221         default:
6222           gcc_unreachable ();
6223         }
6224     }
6225  
6226   if (nargs != nparms
6227       && !(variadic_p && nargs >= nparms - 1))
6228     return 0;
6229
6230   /* Check all of the template parameters except the parameter pack at
6231      the end (if any).  */
6232   for (i = 0; i < nparms - variadic_p; ++i)
6233     {
6234       if (TREE_VEC_ELT (parm_parms, i) == error_mark_node
6235           || TREE_VEC_ELT (arg_parms, i) == error_mark_node)
6236         continue;
6237
6238       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
6239       arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
6240
6241       if (!coerce_template_template_parm (parm, arg, complain, in_decl,
6242                                           outer_args))
6243         return 0;
6244
6245     }
6246
6247   if (variadic_p)
6248     {
6249       /* Check each of the template parameters in the template
6250          argument against the template parameter pack at the end of
6251          the template template parameter.  */
6252       if (TREE_VEC_ELT (parm_parms, i) == error_mark_node)
6253         return 0;
6254
6255       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
6256
6257       for (; i < nargs; ++i)
6258         {
6259           if (TREE_VEC_ELT (arg_parms, i) == error_mark_node)
6260             continue;
6261  
6262           arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
6263  
6264           if (!coerce_template_template_parm (parm, arg, complain, in_decl,
6265                                               outer_args))
6266             return 0;
6267         }
6268     }
6269
6270   return 1;
6271 }
6272
6273 /* Verifies that the deduced template arguments (in TARGS) for the
6274    template template parameters (in TPARMS) represent valid bindings,
6275    by comparing the template parameter list of each template argument
6276    to the template parameter list of its corresponding template
6277    template parameter, in accordance with DR150. This
6278    routine can only be called after all template arguments have been
6279    deduced. It will return TRUE if all of the template template
6280    parameter bindings are okay, FALSE otherwise.  */
6281 bool 
6282 template_template_parm_bindings_ok_p (tree tparms, tree targs)
6283 {
6284   int i, ntparms = TREE_VEC_LENGTH (tparms);
6285   bool ret = true;
6286
6287   /* We're dealing with template parms in this process.  */
6288   ++processing_template_decl;
6289
6290   targs = INNERMOST_TEMPLATE_ARGS (targs);
6291
6292   for (i = 0; i < ntparms; ++i)
6293     {
6294       tree tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
6295       tree targ = TREE_VEC_ELT (targs, i);
6296
6297       if (TREE_CODE (tparm) == TEMPLATE_DECL && targ)
6298         {
6299           tree packed_args = NULL_TREE;
6300           int idx, len = 1;
6301
6302           if (ARGUMENT_PACK_P (targ))
6303             {
6304               /* Look inside the argument pack.  */
6305               packed_args = ARGUMENT_PACK_ARGS (targ);
6306               len = TREE_VEC_LENGTH (packed_args);
6307             }
6308
6309           for (idx = 0; idx < len; ++idx)
6310             {
6311               tree targ_parms = NULL_TREE;
6312
6313               if (packed_args)
6314                 /* Extract the next argument from the argument
6315                    pack.  */
6316                 targ = TREE_VEC_ELT (packed_args, idx);
6317
6318               if (PACK_EXPANSION_P (targ))
6319                 /* Look at the pattern of the pack expansion.  */
6320                 targ = PACK_EXPANSION_PATTERN (targ);
6321
6322               /* Extract the template parameters from the template
6323                  argument.  */
6324               if (TREE_CODE (targ) == TEMPLATE_DECL)
6325                 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (targ);
6326               else if (TREE_CODE (targ) == TEMPLATE_TEMPLATE_PARM)
6327                 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_NAME (targ));
6328
6329               /* Verify that we can coerce the template template
6330                  parameters from the template argument to the template
6331                  parameter.  This requires an exact match.  */
6332               if (targ_parms
6333                   && !coerce_template_template_parms
6334                        (DECL_INNERMOST_TEMPLATE_PARMS (tparm),
6335                         targ_parms,
6336                         tf_none,
6337                         tparm,
6338                         targs))
6339                 {
6340                   ret = false;
6341                   goto out;
6342                 }
6343             }
6344         }
6345     }
6346
6347  out:
6348
6349   --processing_template_decl;
6350   return ret;
6351 }
6352
6353 /* Since type attributes aren't mangled, we need to strip them from
6354    template type arguments.  */
6355
6356 static tree
6357 canonicalize_type_argument (tree arg, tsubst_flags_t complain)
6358 {
6359   tree mv;
6360   if (!arg || arg == error_mark_node || arg == TYPE_CANONICAL (arg))
6361     return arg;
6362   mv = TYPE_MAIN_VARIANT (arg);
6363   arg = strip_typedefs (arg);
6364   if (TYPE_ALIGN (arg) != TYPE_ALIGN (mv)
6365       || TYPE_ATTRIBUTES (arg) != TYPE_ATTRIBUTES (mv))
6366     {
6367       if (complain & tf_warning)
6368         warning (0, "ignoring attributes on template argument %qT", arg);
6369       arg = build_aligned_type (arg, TYPE_ALIGN (mv));
6370       arg = cp_build_type_attribute_variant (arg, TYPE_ATTRIBUTES (mv));
6371     }
6372   return arg;
6373 }
6374
6375 /* Convert the indicated template ARG as necessary to match the
6376    indicated template PARM.  Returns the converted ARG, or
6377    error_mark_node if the conversion was unsuccessful.  Error and
6378    warning messages are issued under control of COMPLAIN.  This
6379    conversion is for the Ith parameter in the parameter list.  ARGS is
6380    the full set of template arguments deduced so far.  */
6381
6382 static tree
6383 convert_template_argument (tree parm,
6384                            tree arg,
6385                            tree args,
6386                            tsubst_flags_t complain,
6387                            int i,
6388                            tree in_decl)
6389 {
6390   tree orig_arg;
6391   tree val;
6392   int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
6393
6394   if (TREE_CODE (arg) == TREE_LIST
6395       && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
6396     {
6397       /* The template argument was the name of some
6398          member function.  That's usually
6399          invalid, but static members are OK.  In any
6400          case, grab the underlying fields/functions
6401          and issue an error later if required.  */
6402       orig_arg = TREE_VALUE (arg);
6403       TREE_TYPE (arg) = unknown_type_node;
6404     }
6405
6406   orig_arg = arg;
6407
6408   requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
6409   requires_type = (TREE_CODE (parm) == TYPE_DECL
6410                    || requires_tmpl_type);
6411
6412   /* When determining whether an argument pack expansion is a template,
6413      look at the pattern.  */
6414   if (TREE_CODE (arg) == TYPE_PACK_EXPANSION)
6415     arg = PACK_EXPANSION_PATTERN (arg);
6416
6417   /* Deal with an injected-class-name used as a template template arg.  */
6418   if (requires_tmpl_type && CLASS_TYPE_P (arg))
6419     {
6420       tree t = maybe_get_template_decl_from_type_decl (TYPE_NAME (arg));
6421       if (TREE_CODE (t) == TEMPLATE_DECL)
6422         {
6423           if (cxx_dialect >= cxx0x)
6424             /* OK under DR 1004.  */;
6425           else if (complain & tf_warning_or_error)
6426             pedwarn (input_location, OPT_pedantic, "injected-class-name %qD"
6427                      " used as template template argument", TYPE_NAME (arg));
6428           else if (flag_pedantic_errors)
6429             t = arg;
6430
6431           arg = t;
6432         }
6433     }
6434
6435   is_tmpl_type = 
6436     ((TREE_CODE (arg) == TEMPLATE_DECL
6437       && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
6438      || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
6439      || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
6440
6441   if (is_tmpl_type
6442       && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
6443           || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
6444     arg = TYPE_STUB_DECL (arg);
6445
6446   is_type = TYPE_P (arg) || is_tmpl_type;
6447
6448   if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
6449       && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
6450     {
6451       if (TREE_CODE (TREE_OPERAND (arg, 1)) == BIT_NOT_EXPR)
6452         {
6453           if (complain & tf_error)
6454             error ("invalid use of destructor %qE as a type", orig_arg);
6455           return error_mark_node;
6456         }
6457
6458       permerror (input_location,
6459                  "to refer to a type member of a template parameter, "
6460                  "use %<typename %E%>", orig_arg);
6461
6462       orig_arg = make_typename_type (TREE_OPERAND (arg, 0),
6463                                      TREE_OPERAND (arg, 1),
6464                                      typename_type,
6465                                      complain & tf_error);
6466       arg = orig_arg;
6467       is_type = 1;
6468     }
6469   if (is_type != requires_type)
6470     {
6471       if (in_decl)
6472         {
6473           if (complain & tf_error)
6474             {
6475               error ("type/value mismatch at argument %d in template "
6476                      "parameter list for %qD",
6477                      i + 1, in_decl);
6478               if (is_type)
6479                 error ("  expected a constant of type %qT, got %qT",
6480                        TREE_TYPE (parm),
6481                        (DECL_P (arg) ? DECL_NAME (arg) : orig_arg));
6482               else if (requires_tmpl_type)
6483                 error ("  expected a class template, got %qE", orig_arg);
6484               else
6485                 error ("  expected a type, got %qE", orig_arg);
6486             }
6487         }
6488       return error_mark_node;
6489     }
6490   if (is_tmpl_type ^ requires_tmpl_type)
6491     {
6492       if (in_decl && (complain & tf_error))
6493         {
6494           error ("type/value mismatch at argument %d in template "
6495                  "parameter list for %qD",
6496                  i + 1, in_decl);
6497           if (is_tmpl_type)
6498             error ("  expected a type, got %qT", DECL_NAME (arg));
6499           else
6500             error ("  expected a class template, got %qT", orig_arg);
6501         }
6502       return error_mark_node;
6503     }
6504
6505   if (is_type)
6506     {
6507       if (requires_tmpl_type)
6508         {
6509           if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
6510             /* The number of argument required is not known yet.
6511                Just accept it for now.  */
6512             val = TREE_TYPE (arg);
6513           else
6514             {
6515               tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
6516               tree argparm;
6517
6518               argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
6519
6520               if (coerce_template_template_parms (parmparm, argparm,
6521                                                   complain, in_decl,
6522                                                   args))
6523                 {
6524                   val = arg;
6525
6526                   /* TEMPLATE_TEMPLATE_PARM node is preferred over
6527                      TEMPLATE_DECL.  */
6528                   if (val != error_mark_node)
6529                     {
6530                       if (DECL_TEMPLATE_TEMPLATE_PARM_P (val))
6531                         val = TREE_TYPE (val);
6532                       if (TREE_CODE (orig_arg) == TYPE_PACK_EXPANSION)
6533                         val = make_pack_expansion (val);
6534                     }
6535                 }
6536               else
6537                 {
6538                   if (in_decl && (complain & tf_error))
6539                     {
6540                       error ("type/value mismatch at argument %d in "
6541                              "template parameter list for %qD",
6542                              i + 1, in_decl);
6543                       error ("  expected a template of type %qD, got %qT",
6544                              parm, orig_arg);
6545                     }
6546
6547                   val = error_mark_node;
6548                 }
6549             }
6550         }
6551       else
6552         val = orig_arg;
6553       /* We only form one instance of each template specialization.
6554          Therefore, if we use a non-canonical variant (i.e., a
6555          typedef), any future messages referring to the type will use
6556          the typedef, which is confusing if those future uses do not
6557          themselves also use the typedef.  */
6558       if (TYPE_P (val))
6559         val = canonicalize_type_argument (val, complain);
6560     }
6561   else
6562     {
6563       tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
6564
6565       if (invalid_nontype_parm_type_p (t, complain))
6566         return error_mark_node;
6567
6568       if (template_parameter_pack_p (parm) && ARGUMENT_PACK_P (orig_arg))
6569         {
6570           if (same_type_p (t, TREE_TYPE (orig_arg)))
6571             val = orig_arg;
6572           else
6573             {
6574               /* Not sure if this is reachable, but it doesn't hurt
6575                  to be robust.  */
6576               error ("type mismatch in nontype parameter pack");
6577               val = error_mark_node;
6578             }
6579         }
6580       else if (!uses_template_parms (orig_arg) && !uses_template_parms (t))
6581         /* We used to call digest_init here.  However, digest_init
6582            will report errors, which we don't want when complain
6583            is zero.  More importantly, digest_init will try too
6584            hard to convert things: for example, `0' should not be
6585            converted to pointer type at this point according to
6586            the standard.  Accepting this is not merely an
6587            extension, since deciding whether or not these
6588            conversions can occur is part of determining which
6589            function template to call, or whether a given explicit
6590            argument specification is valid.  */
6591         val = convert_nontype_argument (t, orig_arg, complain);
6592       else
6593         val = orig_arg;
6594
6595       if (val == NULL_TREE)
6596         val = error_mark_node;
6597       else if (val == error_mark_node && (complain & tf_error))
6598         error ("could not convert template argument %qE to %qT",  orig_arg, t);
6599
6600       if (TREE_CODE (val) == SCOPE_REF)
6601         {
6602           /* Strip typedefs from the SCOPE_REF.  */
6603           tree type = canonicalize_type_argument (TREE_TYPE (val), complain);
6604           tree scope = canonicalize_type_argument (TREE_OPERAND (val, 0),
6605                                                    complain);
6606           val = build_qualified_name (type, scope, TREE_OPERAND (val, 1),
6607                                       QUALIFIED_NAME_IS_TEMPLATE (val));
6608         }
6609     }
6610
6611   return val;
6612 }
6613
6614 /* Coerces the remaining template arguments in INNER_ARGS (from
6615    ARG_IDX to the end) into the parameter pack at PARM_IDX in PARMS.
6616    Returns the coerced argument pack. PARM_IDX is the position of this
6617    parameter in the template parameter list. ARGS is the original
6618    template argument list.  */
6619 static tree
6620 coerce_template_parameter_pack (tree parms,
6621                                 int parm_idx,
6622                                 tree args,
6623                                 tree inner_args,
6624                                 int arg_idx,
6625                                 tree new_args,
6626                                 int* lost,
6627                                 tree in_decl,
6628                                 tsubst_flags_t complain)
6629 {
6630   tree parm = TREE_VEC_ELT (parms, parm_idx);
6631   int nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
6632   tree packed_args;
6633   tree argument_pack;
6634   tree packed_types = NULL_TREE;
6635
6636   if (arg_idx > nargs)
6637     arg_idx = nargs;
6638
6639   packed_args = make_tree_vec (nargs - arg_idx);
6640
6641   if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL
6642       && uses_parameter_packs (TREE_TYPE (TREE_VALUE (parm))))
6643     {
6644       /* When the template parameter is a non-type template
6645          parameter pack whose type uses parameter packs, we need
6646          to look at each of the template arguments
6647          separately. Build a vector of the types for these
6648          non-type template parameters in PACKED_TYPES.  */
6649       tree expansion 
6650         = make_pack_expansion (TREE_TYPE (TREE_VALUE (parm)));
6651       packed_types = tsubst_pack_expansion (expansion, args,
6652                                             complain, in_decl);
6653
6654       if (packed_types == error_mark_node)
6655         return error_mark_node;
6656
6657       /* Check that we have the right number of arguments.  */
6658       if (arg_idx < nargs
6659           && !PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx))
6660           && nargs - arg_idx != TREE_VEC_LENGTH (packed_types))
6661         {
6662           int needed_parms 
6663             = TREE_VEC_LENGTH (parms) - 1 + TREE_VEC_LENGTH (packed_types);
6664           error ("wrong number of template arguments (%d, should be %d)",
6665                  nargs, needed_parms);
6666           return error_mark_node;
6667         }
6668
6669       /* If we aren't able to check the actual arguments now
6670          (because they haven't been expanded yet), we can at least
6671          verify that all of the types used for the non-type
6672          template parameter pack are, in fact, valid for non-type
6673          template parameters.  */
6674       if (arg_idx < nargs 
6675           && PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx)))
6676         {
6677           int j, len = TREE_VEC_LENGTH (packed_types);
6678           for (j = 0; j < len; ++j)
6679             {
6680               tree t = TREE_VEC_ELT (packed_types, j);
6681               if (invalid_nontype_parm_type_p (t, complain))
6682                 return error_mark_node;
6683             }
6684         }
6685     }
6686
6687   /* Convert the remaining arguments, which will be a part of the
6688      parameter pack "parm".  */
6689   for (; arg_idx < nargs; ++arg_idx)
6690     {
6691       tree arg = TREE_VEC_ELT (inner_args, arg_idx);
6692       tree actual_parm = TREE_VALUE (parm);
6693
6694       if (packed_types && !PACK_EXPANSION_P (arg))
6695         {
6696           /* When we have a vector of types (corresponding to the
6697              non-type template parameter pack that uses parameter
6698              packs in its type, as mention above), and the
6699              argument is not an expansion (which expands to a
6700              currently unknown number of arguments), clone the
6701              parm and give it the next type in PACKED_TYPES.  */
6702           actual_parm = copy_node (actual_parm);
6703           TREE_TYPE (actual_parm) = 
6704             TREE_VEC_ELT (packed_types, arg_idx - parm_idx);
6705         }
6706
6707       if (arg != error_mark_node)
6708         arg = convert_template_argument (actual_parm, 
6709                                          arg, new_args, complain, parm_idx,
6710                                          in_decl);
6711       if (arg == error_mark_node)
6712         (*lost)++;
6713       TREE_VEC_ELT (packed_args, arg_idx - parm_idx) = arg; 
6714     }
6715
6716   if (TREE_CODE (TREE_VALUE (parm)) == TYPE_DECL
6717       || TREE_CODE (TREE_VALUE (parm)) == TEMPLATE_DECL)
6718     argument_pack = cxx_make_type (TYPE_ARGUMENT_PACK);
6719   else
6720     {
6721       argument_pack = make_node (NONTYPE_ARGUMENT_PACK);
6722       TREE_TYPE (argument_pack) 
6723         = tsubst (TREE_TYPE (TREE_VALUE (parm)), new_args, complain, in_decl);
6724       TREE_CONSTANT (argument_pack) = 1;
6725     }
6726
6727   SET_ARGUMENT_PACK_ARGS (argument_pack, packed_args);
6728 #ifdef ENABLE_CHECKING
6729   SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (packed_args,
6730                                        TREE_VEC_LENGTH (packed_args));
6731 #endif
6732   return argument_pack;
6733 }
6734
6735 /* Convert all template arguments to their appropriate types, and
6736    return a vector containing the innermost resulting template
6737    arguments.  If any error occurs, return error_mark_node. Error and
6738    warning messages are issued under control of COMPLAIN.
6739
6740    If REQUIRE_ALL_ARGS is false, argument deduction will be performed
6741    for arguments not specified in ARGS.  Otherwise, if
6742    USE_DEFAULT_ARGS is true, default arguments will be used to fill in
6743    unspecified arguments.  If REQUIRE_ALL_ARGS is true, but
6744    USE_DEFAULT_ARGS is false, then all arguments must be specified in
6745    ARGS.  */
6746
6747 static tree
6748 coerce_template_parms (tree parms,
6749                        tree args,
6750                        tree in_decl,
6751                        tsubst_flags_t complain,
6752                        bool require_all_args,
6753                        bool use_default_args)
6754 {
6755   int nparms, nargs, parm_idx, arg_idx, lost = 0;
6756   tree inner_args;
6757   tree new_args;
6758   tree new_inner_args;
6759   int saved_unevaluated_operand;
6760   int saved_inhibit_evaluation_warnings;
6761
6762   /* When used as a boolean value, indicates whether this is a
6763      variadic template parameter list. Since it's an int, we can also
6764      subtract it from nparms to get the number of non-variadic
6765      parameters.  */
6766   int variadic_p = 0;
6767   int post_variadic_parms = 0;
6768
6769   if (args == error_mark_node)
6770     return error_mark_node;
6771
6772   nparms = TREE_VEC_LENGTH (parms);
6773
6774   /* Determine if there are any parameter packs.  */
6775   for (parm_idx = 0; parm_idx < nparms; ++parm_idx)
6776     {
6777       tree tparm = TREE_VALUE (TREE_VEC_ELT (parms, parm_idx));
6778       if (variadic_p)
6779         ++post_variadic_parms;
6780       if (template_parameter_pack_p (tparm))
6781         ++variadic_p;
6782     }
6783
6784   inner_args = INNERMOST_TEMPLATE_ARGS (args);
6785   /* If there are no parameters that follow a parameter pack, we need to
6786      expand any argument packs so that we can deduce a parameter pack from
6787      some non-packed args followed by an argument pack, as in variadic85.C.
6788      If there are such parameters, we need to leave argument packs intact
6789      so the arguments are assigned properly.  This can happen when dealing
6790      with a nested class inside a partial specialization of a class
6791      template, as in variadic92.C, or when deducing a template parameter pack
6792      from a sub-declarator, as in variadic114.C.  */
6793   if (!post_variadic_parms)
6794     inner_args = expand_template_argument_pack (inner_args);
6795
6796   nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
6797   if ((nargs > nparms && !variadic_p)
6798       || (nargs < nparms - variadic_p
6799           && require_all_args
6800           && (!use_default_args
6801               || (TREE_VEC_ELT (parms, nargs) != error_mark_node
6802                   && !TREE_PURPOSE (TREE_VEC_ELT (parms, nargs))))))
6803     {
6804       if (complain & tf_error)
6805         {
6806           if (variadic_p)
6807             {
6808               nparms -= variadic_p;
6809               error ("wrong number of template arguments "
6810                      "(%d, should be %d or more)", nargs, nparms);
6811             }
6812           else
6813              error ("wrong number of template arguments "
6814                     "(%d, should be %d)", nargs, nparms);
6815
6816           if (in_decl)
6817             error ("provided for %q+D", in_decl);
6818         }
6819
6820       return error_mark_node;
6821     }
6822
6823   /* We need to evaluate the template arguments, even though this
6824      template-id may be nested within a "sizeof".  */
6825   saved_unevaluated_operand = cp_unevaluated_operand;
6826   cp_unevaluated_operand = 0;
6827   saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
6828   c_inhibit_evaluation_warnings = 0;
6829   new_inner_args = make_tree_vec (nparms);
6830   new_args = add_outermost_template_args (args, new_inner_args);
6831   for (parm_idx = 0, arg_idx = 0; parm_idx < nparms; parm_idx++, arg_idx++)
6832     {
6833       tree arg;
6834       tree parm;
6835
6836       /* Get the Ith template parameter.  */
6837       parm = TREE_VEC_ELT (parms, parm_idx);
6838  
6839       if (parm == error_mark_node)
6840       {
6841         TREE_VEC_ELT (new_inner_args, arg_idx) = error_mark_node;
6842         continue;
6843       }
6844
6845       /* Calculate the next argument.  */
6846       if (arg_idx < nargs)
6847         arg = TREE_VEC_ELT (inner_args, arg_idx);
6848       else
6849         arg = NULL_TREE;
6850
6851       if (template_parameter_pack_p (TREE_VALUE (parm))
6852           && !(arg && ARGUMENT_PACK_P (arg)))
6853         {
6854           /* All remaining arguments will be placed in the
6855              template parameter pack PARM.  */
6856           arg = coerce_template_parameter_pack (parms, parm_idx, args, 
6857                                                 inner_args, arg_idx,
6858                                                 new_args, &lost,
6859                                                 in_decl, complain);
6860
6861           /* Store this argument.  */
6862           if (arg == error_mark_node)
6863             lost++;
6864           TREE_VEC_ELT (new_inner_args, parm_idx) = arg;
6865
6866           /* We are done with all of the arguments.  */
6867           arg_idx = nargs;
6868           
6869           continue;
6870         }
6871       else if (arg)
6872         {
6873           if (PACK_EXPANSION_P (arg))
6874             {
6875               /* We don't know how many args we have yet, just
6876                  use the unconverted ones for now.  */
6877               new_inner_args = args;
6878               break;
6879             }
6880         }
6881       else if (require_all_args)
6882         {
6883           /* There must be a default arg in this case.  */
6884           arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
6885                                      complain, in_decl);
6886           /* The position of the first default template argument,
6887              is also the number of non-defaulted arguments in NEW_INNER_ARGS.
6888              Record that.  */
6889           if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args))
6890             SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args, arg_idx);
6891         }
6892       else
6893         break;
6894
6895       if (arg == error_mark_node)
6896         {
6897           if (complain & tf_error)
6898             error ("template argument %d is invalid", arg_idx + 1);
6899         }
6900       else if (!arg)
6901         /* This only occurs if there was an error in the template
6902            parameter list itself (which we would already have
6903            reported) that we are trying to recover from, e.g., a class
6904            template with a parameter list such as
6905            template<typename..., typename>.  */
6906         ++lost;
6907       else
6908         arg = convert_template_argument (TREE_VALUE (parm),
6909                                          arg, new_args, complain, 
6910                                          parm_idx, in_decl);
6911
6912       if (arg == error_mark_node)
6913         lost++;
6914       TREE_VEC_ELT (new_inner_args, arg_idx) = arg;
6915     }
6916   cp_unevaluated_operand = saved_unevaluated_operand;
6917   c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
6918
6919   if (lost)
6920     return error_mark_node;
6921
6922 #ifdef ENABLE_CHECKING
6923   if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args))
6924     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args,
6925                                          TREE_VEC_LENGTH (new_inner_args));
6926 #endif
6927
6928   return new_inner_args;
6929 }
6930
6931 /* Returns 1 if template args OT and NT are equivalent.  */
6932
6933 static int
6934 template_args_equal (tree ot, tree nt)
6935 {
6936   if (nt == ot)
6937     return 1;
6938   if (nt == NULL_TREE || ot == NULL_TREE)
6939     return false;
6940
6941   if (TREE_CODE (nt) == TREE_VEC)
6942     /* For member templates */
6943     return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
6944   else if (PACK_EXPANSION_P (ot))
6945     return (PACK_EXPANSION_P (nt)
6946             && template_args_equal (PACK_EXPANSION_PATTERN (ot),
6947                                     PACK_EXPANSION_PATTERN (nt))
6948             && template_args_equal (PACK_EXPANSION_EXTRA_ARGS (ot),
6949                                     PACK_EXPANSION_EXTRA_ARGS (nt)));
6950   else if (ARGUMENT_PACK_P (ot))
6951     {
6952       int i, len;
6953       tree opack, npack;
6954
6955       if (!ARGUMENT_PACK_P (nt))
6956         return 0;
6957
6958       opack = ARGUMENT_PACK_ARGS (ot);
6959       npack = ARGUMENT_PACK_ARGS (nt);
6960       len = TREE_VEC_LENGTH (opack);
6961       if (TREE_VEC_LENGTH (npack) != len)
6962         return 0;
6963       for (i = 0; i < len; ++i)
6964         if (!template_args_equal (TREE_VEC_ELT (opack, i),
6965                                   TREE_VEC_ELT (npack, i)))
6966           return 0;
6967       return 1;
6968     }
6969   else if (ot && TREE_CODE (ot) == ARGUMENT_PACK_SELECT)
6970     {
6971       /* We get here probably because we are in the middle of substituting
6972          into the pattern of a pack expansion. In that case the
6973          ARGUMENT_PACK_SELECT temporarily replaces the pack argument we are
6974          interested in. So we want to use the initial pack argument for
6975          the comparison.  */
6976       ot = ARGUMENT_PACK_SELECT_FROM_PACK (ot);
6977       if (nt && TREE_CODE (nt) == ARGUMENT_PACK_SELECT)
6978         nt = ARGUMENT_PACK_SELECT_FROM_PACK (nt);
6979       return template_args_equal (ot, nt);
6980     }
6981   else if (TYPE_P (nt))
6982     return TYPE_P (ot) && same_type_p (ot, nt);
6983   else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
6984     return 0;
6985   else
6986     return cp_tree_equal (ot, nt);
6987 }
6988
6989 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets of
6990    template arguments.  Returns 0 otherwise, and updates OLDARG_PTR and
6991    NEWARG_PTR with the offending arguments if they are non-NULL.  */
6992
6993 static int
6994 comp_template_args_with_info (tree oldargs, tree newargs,
6995                               tree *oldarg_ptr, tree *newarg_ptr)
6996 {
6997   int i;
6998
6999   if (oldargs == newargs)
7000     return 1;
7001
7002   if (!oldargs || !newargs)
7003     return 0;
7004
7005   if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
7006     return 0;
7007
7008   for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
7009     {
7010       tree nt = TREE_VEC_ELT (newargs, i);
7011       tree ot = TREE_VEC_ELT (oldargs, i);
7012
7013       if (! template_args_equal (ot, nt))
7014         {
7015           if (oldarg_ptr != NULL)
7016             *oldarg_ptr = ot;
7017           if (newarg_ptr != NULL)
7018             *newarg_ptr = nt;
7019           return 0;
7020         }
7021     }
7022   return 1;
7023 }
7024
7025 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
7026    of template arguments.  Returns 0 otherwise.  */
7027
7028 int
7029 comp_template_args (tree oldargs, tree newargs)
7030 {
7031   return comp_template_args_with_info (oldargs, newargs, NULL, NULL);
7032 }
7033
7034 static void
7035 add_pending_template (tree d)
7036 {
7037   tree ti = (TYPE_P (d)
7038              ? CLASSTYPE_TEMPLATE_INFO (d)
7039              : DECL_TEMPLATE_INFO (d));
7040   struct pending_template *pt;
7041   int level;
7042
7043   if (TI_PENDING_TEMPLATE_FLAG (ti))
7044     return;
7045
7046   /* We are called both from instantiate_decl, where we've already had a
7047      tinst_level pushed, and instantiate_template, where we haven't.
7048      Compensate.  */
7049   level = !current_tinst_level || current_tinst_level->decl != d;
7050
7051   if (level)
7052     push_tinst_level (d);
7053
7054   pt = ggc_alloc_pending_template ();
7055   pt->next = NULL;
7056   pt->tinst = current_tinst_level;
7057   if (last_pending_template)
7058     last_pending_template->next = pt;
7059   else
7060     pending_templates = pt;
7061
7062   last_pending_template = pt;
7063
7064   TI_PENDING_TEMPLATE_FLAG (ti) = 1;
7065
7066   if (level)
7067     pop_tinst_level ();
7068 }
7069
7070
7071 /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
7072    ARGLIST.  Valid choices for FNS are given in the cp-tree.def
7073    documentation for TEMPLATE_ID_EXPR.  */
7074
7075 tree
7076 lookup_template_function (tree fns, tree arglist)
7077 {
7078   tree type;
7079
7080   if (fns == error_mark_node || arglist == error_mark_node)
7081     return error_mark_node;
7082
7083   gcc_assert (!arglist || TREE_CODE (arglist) == TREE_VEC);
7084
7085   if (!is_overloaded_fn (fns) && TREE_CODE (fns) != IDENTIFIER_NODE)
7086     {
7087       error ("%q#D is not a function template", fns);
7088       return error_mark_node;
7089     }
7090
7091   if (BASELINK_P (fns))
7092     {
7093       BASELINK_FUNCTIONS (fns) = build2 (TEMPLATE_ID_EXPR,
7094                                          unknown_type_node,
7095                                          BASELINK_FUNCTIONS (fns),
7096                                          arglist);
7097       return fns;
7098     }
7099
7100   type = TREE_TYPE (fns);
7101   if (TREE_CODE (fns) == OVERLOAD || !type)
7102     type = unknown_type_node;
7103
7104   return build2 (TEMPLATE_ID_EXPR, type, fns, arglist);
7105 }
7106
7107 /* Within the scope of a template class S<T>, the name S gets bound
7108    (in build_self_reference) to a TYPE_DECL for the class, not a
7109    TEMPLATE_DECL.  If DECL is a TYPE_DECL for current_class_type,
7110    or one of its enclosing classes, and that type is a template,
7111    return the associated TEMPLATE_DECL.  Otherwise, the original
7112    DECL is returned.
7113
7114    Also handle the case when DECL is a TREE_LIST of ambiguous
7115    injected-class-names from different bases.  */
7116
7117 tree
7118 maybe_get_template_decl_from_type_decl (tree decl)
7119 {
7120   if (decl == NULL_TREE)
7121     return decl;
7122
7123   /* DR 176: A lookup that finds an injected-class-name (10.2
7124      [class.member.lookup]) can result in an ambiguity in certain cases
7125      (for example, if it is found in more than one base class). If all of
7126      the injected-class-names that are found refer to specializations of
7127      the same class template, and if the name is followed by a
7128      template-argument-list, the reference refers to the class template
7129      itself and not a specialization thereof, and is not ambiguous.  */
7130   if (TREE_CODE (decl) == TREE_LIST)
7131     {
7132       tree t, tmpl = NULL_TREE;
7133       for (t = decl; t; t = TREE_CHAIN (t))
7134         {
7135           tree elt = maybe_get_template_decl_from_type_decl (TREE_VALUE (t));
7136           if (!tmpl)
7137             tmpl = elt;
7138           else if (tmpl != elt)
7139             break;
7140         }
7141       if (tmpl && t == NULL_TREE)
7142         return tmpl;
7143       else
7144         return decl;
7145     }
7146
7147   return (decl != NULL_TREE
7148           && DECL_SELF_REFERENCE_P (decl)
7149           && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
7150     ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
7151 }
7152
7153 /* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of
7154    parameters, find the desired type.
7155
7156    D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
7157
7158    IN_DECL, if non-NULL, is the template declaration we are trying to
7159    instantiate.
7160
7161    If ENTERING_SCOPE is nonzero, we are about to enter the scope of
7162    the class we are looking up.
7163
7164    Issue error and warning messages under control of COMPLAIN.
7165
7166    If the template class is really a local class in a template
7167    function, then the FUNCTION_CONTEXT is the function in which it is
7168    being instantiated.
7169
7170    ??? Note that this function is currently called *twice* for each
7171    template-id: the first time from the parser, while creating the
7172    incomplete type (finish_template_type), and the second type during the
7173    real instantiation (instantiate_template_class). This is surely something
7174    that we want to avoid. It also causes some problems with argument
7175    coercion (see convert_nontype_argument for more information on this).  */
7176
7177 static tree
7178 lookup_template_class_1 (tree d1, tree arglist, tree in_decl, tree context,
7179                          int entering_scope, tsubst_flags_t complain)
7180 {
7181   tree templ = NULL_TREE, parmlist;
7182   tree t;
7183   void **slot;
7184   spec_entry *entry;
7185   spec_entry elt;
7186   hashval_t hash;
7187
7188   if (TREE_CODE (d1) == IDENTIFIER_NODE)
7189     {
7190       tree value = innermost_non_namespace_value (d1);
7191       if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
7192         templ = value;
7193       else
7194         {
7195           if (context)
7196             push_decl_namespace (context);
7197           templ = lookup_name (d1);
7198           templ = maybe_get_template_decl_from_type_decl (templ);
7199           if (context)
7200             pop_decl_namespace ();
7201         }
7202       if (templ)
7203         context = DECL_CONTEXT (templ);
7204     }
7205   else if (TREE_CODE (d1) == TYPE_DECL && MAYBE_CLASS_TYPE_P (TREE_TYPE (d1)))
7206     {
7207       tree type = TREE_TYPE (d1);
7208
7209       /* If we are declaring a constructor, say A<T>::A<T>, we will get
7210          an implicit typename for the second A.  Deal with it.  */
7211       if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
7212         type = TREE_TYPE (type);
7213
7214       if (CLASSTYPE_TEMPLATE_INFO (type))
7215         {
7216           templ = CLASSTYPE_TI_TEMPLATE (type);
7217           d1 = DECL_NAME (templ);
7218         }
7219     }
7220   else if (TREE_CODE (d1) == ENUMERAL_TYPE
7221            || (TYPE_P (d1) && MAYBE_CLASS_TYPE_P (d1)))
7222     {
7223       templ = TYPE_TI_TEMPLATE (d1);
7224       d1 = DECL_NAME (templ);
7225     }
7226   else if (TREE_CODE (d1) == TEMPLATE_DECL
7227            && DECL_TEMPLATE_RESULT (d1)
7228            && TREE_CODE (DECL_TEMPLATE_RESULT (d1)) == TYPE_DECL)
7229     {
7230       templ = d1;
7231       d1 = DECL_NAME (templ);
7232       context = DECL_CONTEXT (templ);
7233     }
7234
7235   /* Issue an error message if we didn't find a template.  */
7236   if (! templ)
7237     {
7238       if (complain & tf_error)
7239         error ("%qT is not a template", d1);
7240       return error_mark_node;
7241     }
7242
7243   if (TREE_CODE (templ) != TEMPLATE_DECL
7244          /* Make sure it's a user visible template, if it was named by
7245             the user.  */
7246       || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (templ)
7247           && !PRIMARY_TEMPLATE_P (templ)))
7248     {
7249       if (complain & tf_error)
7250         {
7251           error ("non-template type %qT used as a template", d1);
7252           if (in_decl)
7253             error ("for template declaration %q+D", in_decl);
7254         }
7255       return error_mark_node;
7256     }
7257
7258   complain &= ~tf_user;
7259
7260   if (DECL_TEMPLATE_TEMPLATE_PARM_P (templ))
7261     {
7262       /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
7263          template arguments */
7264
7265       tree parm;
7266       tree arglist2;
7267       tree outer;
7268
7269       parmlist = DECL_INNERMOST_TEMPLATE_PARMS (templ);
7270
7271       /* Consider an example where a template template parameter declared as
7272
7273            template <class T, class U = std::allocator<T> > class TT
7274
7275          The template parameter level of T and U are one level larger than
7276          of TT.  To proper process the default argument of U, say when an
7277          instantiation `TT<int>' is seen, we need to build the full
7278          arguments containing {int} as the innermost level.  Outer levels,
7279          available when not appearing as default template argument, can be
7280          obtained from the arguments of the enclosing template.
7281
7282          Suppose that TT is later substituted with std::vector.  The above
7283          instantiation is `TT<int, std::allocator<T> >' with TT at
7284          level 1, and T at level 2, while the template arguments at level 1
7285          becomes {std::vector} and the inner level 2 is {int}.  */
7286
7287       outer = DECL_CONTEXT (templ);
7288       if (outer)
7289         outer = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (outer)));
7290       else if (current_template_parms)
7291         /* This is an argument of the current template, so we haven't set
7292            DECL_CONTEXT yet.  */
7293         outer = current_template_args ();
7294
7295       if (outer)
7296         arglist = add_to_template_args (outer, arglist);
7297
7298       arglist2 = coerce_template_parms (parmlist, arglist, templ,
7299                                         complain,
7300                                         /*require_all_args=*/true,
7301                                         /*use_default_args=*/true);
7302       if (arglist2 == error_mark_node
7303           || (!uses_template_parms (arglist2)
7304               && check_instantiated_args (templ, arglist2, complain)))
7305         return error_mark_node;
7306
7307       parm = bind_template_template_parm (TREE_TYPE (templ), arglist2);
7308       return parm;
7309     }
7310   else
7311     {
7312       tree template_type = TREE_TYPE (templ);
7313       tree gen_tmpl;
7314       tree type_decl;
7315       tree found = NULL_TREE;
7316       int arg_depth;
7317       int parm_depth;
7318       int is_dependent_type;
7319       int use_partial_inst_tmpl = false;
7320
7321       if (template_type == error_mark_node)
7322         /* An error occured while building the template TEMPL, and a
7323            diagnostic has most certainly been emitted for that
7324            already.  Let's propagate that error.  */
7325         return error_mark_node;
7326
7327       gen_tmpl = most_general_template (templ);
7328       parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
7329       parm_depth = TMPL_PARMS_DEPTH (parmlist);
7330       arg_depth = TMPL_ARGS_DEPTH (arglist);
7331
7332       if (arg_depth == 1 && parm_depth > 1)
7333         {
7334           /* We've been given an incomplete set of template arguments.
7335              For example, given:
7336
7337                template <class T> struct S1 {
7338                  template <class U> struct S2 {};
7339                  template <class U> struct S2<U*> {};
7340                 };
7341
7342              we will be called with an ARGLIST of `U*', but the
7343              TEMPLATE will be `template <class T> template
7344              <class U> struct S1<T>::S2'.  We must fill in the missing
7345              arguments.  */
7346           arglist
7347             = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (templ)),
7348                                            arglist);
7349           arg_depth = TMPL_ARGS_DEPTH (arglist);
7350         }
7351
7352       /* Now we should have enough arguments.  */
7353       gcc_assert (parm_depth == arg_depth);
7354
7355       /* From here on, we're only interested in the most general
7356          template.  */
7357
7358       /* Calculate the BOUND_ARGS.  These will be the args that are
7359          actually tsubst'd into the definition to create the
7360          instantiation.  */
7361       if (parm_depth > 1)
7362         {
7363           /* We have multiple levels of arguments to coerce, at once.  */
7364           int i;
7365           int saved_depth = TMPL_ARGS_DEPTH (arglist);
7366
7367           tree bound_args = make_tree_vec (parm_depth);
7368
7369           for (i = saved_depth,
7370                  t = DECL_TEMPLATE_PARMS (gen_tmpl);
7371                i > 0 && t != NULL_TREE;
7372                --i, t = TREE_CHAIN (t))
7373             {
7374               tree a;
7375               if (i == saved_depth)
7376                 a = coerce_template_parms (TREE_VALUE (t),
7377                                            arglist, gen_tmpl,
7378                                            complain,
7379                                            /*require_all_args=*/true,
7380                                            /*use_default_args=*/true);
7381               else
7382                 /* Outer levels should have already been coerced.  */
7383                 a = TMPL_ARGS_LEVEL (arglist, i);
7384
7385               /* Don't process further if one of the levels fails.  */
7386               if (a == error_mark_node)
7387                 {
7388                   /* Restore the ARGLIST to its full size.  */
7389                   TREE_VEC_LENGTH (arglist) = saved_depth;
7390                   return error_mark_node;
7391                 }
7392
7393               SET_TMPL_ARGS_LEVEL (bound_args, i, a);
7394
7395               /* We temporarily reduce the length of the ARGLIST so
7396                  that coerce_template_parms will see only the arguments
7397                  corresponding to the template parameters it is
7398                  examining.  */
7399               TREE_VEC_LENGTH (arglist)--;
7400             }
7401
7402           /* Restore the ARGLIST to its full size.  */
7403           TREE_VEC_LENGTH (arglist) = saved_depth;
7404
7405           arglist = bound_args;
7406         }
7407       else
7408         arglist
7409           = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
7410                                    INNERMOST_TEMPLATE_ARGS (arglist),
7411                                    gen_tmpl,
7412                                    complain,
7413                                    /*require_all_args=*/true,
7414                                    /*use_default_args=*/true);
7415
7416       if (arglist == error_mark_node)
7417         /* We were unable to bind the arguments.  */
7418         return error_mark_node;
7419
7420       /* In the scope of a template class, explicit references to the
7421          template class refer to the type of the template, not any
7422          instantiation of it.  For example, in:
7423
7424            template <class T> class C { void f(C<T>); }
7425
7426          the `C<T>' is just the same as `C'.  Outside of the
7427          class, however, such a reference is an instantiation.  */
7428       if ((entering_scope
7429            || !PRIMARY_TEMPLATE_P (gen_tmpl)
7430            || currently_open_class (template_type))
7431           /* comp_template_args is expensive, check it last.  */
7432           && comp_template_args (TYPE_TI_ARGS (template_type),
7433                                  arglist))
7434         return template_type;
7435
7436       /* If we already have this specialization, return it.  */
7437       elt.tmpl = gen_tmpl;
7438       elt.args = arglist;
7439       hash = hash_specialization (&elt);
7440       entry = (spec_entry *) htab_find_with_hash (type_specializations,
7441                                                   &elt, hash);
7442
7443       if (entry)
7444         return entry->spec;
7445
7446       is_dependent_type = uses_template_parms (arglist);
7447
7448       /* If the deduced arguments are invalid, then the binding
7449          failed.  */
7450       if (!is_dependent_type
7451           && check_instantiated_args (gen_tmpl,
7452                                       INNERMOST_TEMPLATE_ARGS (arglist),
7453                                       complain))
7454         return error_mark_node;
7455
7456       if (!is_dependent_type
7457           && !PRIMARY_TEMPLATE_P (gen_tmpl)
7458           && !LAMBDA_TYPE_P (TREE_TYPE (gen_tmpl))
7459           && TREE_CODE (CP_DECL_CONTEXT (gen_tmpl)) == NAMESPACE_DECL)
7460         {
7461           found = xref_tag_from_type (TREE_TYPE (gen_tmpl),
7462                                       DECL_NAME (gen_tmpl),
7463                                       /*tag_scope=*/ts_global);
7464           return found;
7465         }
7466
7467       context = tsubst (DECL_CONTEXT (gen_tmpl), arglist,
7468                         complain, in_decl);
7469       if (context == error_mark_node)
7470         return error_mark_node;
7471
7472       if (!context)
7473         context = global_namespace;
7474
7475       /* Create the type.  */
7476       if (TREE_CODE (template_type) == ENUMERAL_TYPE)
7477         {
7478           if (!is_dependent_type)
7479             {
7480               set_current_access_from_decl (TYPE_NAME (template_type));
7481               t = start_enum (TYPE_IDENTIFIER (template_type), NULL_TREE,
7482                               tsubst (ENUM_UNDERLYING_TYPE (template_type),
7483                                       arglist, complain, in_decl),
7484                               SCOPED_ENUM_P (template_type), NULL);
7485             }
7486           else
7487             {
7488               /* We don't want to call start_enum for this type, since
7489                  the values for the enumeration constants may involve
7490                  template parameters.  And, no one should be interested
7491                  in the enumeration constants for such a type.  */
7492               t = cxx_make_type (ENUMERAL_TYPE);
7493               SET_SCOPED_ENUM_P (t, SCOPED_ENUM_P (template_type));
7494             }
7495           SET_OPAQUE_ENUM_P (t, OPAQUE_ENUM_P (template_type));
7496           ENUM_FIXED_UNDERLYING_TYPE_P (t)
7497             = ENUM_FIXED_UNDERLYING_TYPE_P (template_type);
7498         }
7499       else if (DECL_ALIAS_TEMPLATE_P (gen_tmpl))
7500         {
7501           /* The user referred to a specialization of an alias
7502             template represented by GEN_TMPL.
7503
7504             [temp.alias]/2 says:
7505
7506                 When a template-id refers to the specialization of an
7507                 alias template, it is equivalent to the associated
7508                 type obtained by substitution of its
7509                 template-arguments for the template-parameters in the
7510                 type-id of the alias template.  */
7511
7512           t = tsubst (TREE_TYPE (gen_tmpl), arglist, complain, in_decl);
7513           /* Note that the call above (by indirectly calling
7514              register_specialization in tsubst_decl) registers the
7515              TYPE_DECL representing the specialization of the alias
7516              template.  So next time someone substitutes ARGLIST for
7517              the template parms into the alias template (GEN_TMPL),
7518              she'll get that TYPE_DECL back.  */
7519
7520           if (t == error_mark_node)
7521             return t;
7522         }
7523       else if (CLASS_TYPE_P (template_type))
7524         {
7525           t = make_class_type (TREE_CODE (template_type));
7526           CLASSTYPE_DECLARED_CLASS (t)
7527             = CLASSTYPE_DECLARED_CLASS (template_type);
7528           SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
7529           TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
7530
7531           /* A local class.  Make sure the decl gets registered properly.  */
7532           if (context == current_function_decl)
7533             pushtag (DECL_NAME (gen_tmpl), t, /*tag_scope=*/ts_current);
7534
7535           if (comp_template_args (CLASSTYPE_TI_ARGS (template_type), arglist))
7536             /* This instantiation is another name for the primary
7537                template type. Set the TYPE_CANONICAL field
7538                appropriately. */
7539             TYPE_CANONICAL (t) = template_type;
7540           else if (any_template_arguments_need_structural_equality_p (arglist))
7541             /* Some of the template arguments require structural
7542                equality testing, so this template class requires
7543                structural equality testing. */
7544             SET_TYPE_STRUCTURAL_EQUALITY (t);
7545         }
7546       else
7547         gcc_unreachable ();
7548
7549       /* If we called start_enum or pushtag above, this information
7550          will already be set up.  */
7551       if (!TYPE_NAME (t))
7552         {
7553           TYPE_CONTEXT (t) = FROB_CONTEXT (context);
7554
7555           type_decl = create_implicit_typedef (DECL_NAME (gen_tmpl), t);
7556           DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
7557           DECL_SOURCE_LOCATION (type_decl)
7558             = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
7559         }
7560       else
7561         type_decl = TYPE_NAME (t);
7562
7563       if (CLASS_TYPE_P (template_type))
7564         {
7565           TREE_PRIVATE (type_decl)
7566             = TREE_PRIVATE (TYPE_STUB_DECL (template_type));
7567           TREE_PROTECTED (type_decl)
7568             = TREE_PROTECTED (TYPE_STUB_DECL (template_type));
7569           if (CLASSTYPE_VISIBILITY_SPECIFIED (template_type))
7570             {
7571               DECL_VISIBILITY_SPECIFIED (type_decl) = 1;
7572               DECL_VISIBILITY (type_decl) = CLASSTYPE_VISIBILITY (template_type);
7573             }
7574         }
7575
7576       /* Let's consider the explicit specialization of a member
7577          of a class template specialization that is implicitely instantiated,
7578          e.g.:
7579              template<class T>
7580              struct S
7581              {
7582                template<class U> struct M {}; //#0
7583              };
7584
7585              template<>
7586              template<>
7587              struct S<int>::M<char> //#1
7588              {
7589                int i;
7590              };
7591         [temp.expl.spec]/4 says this is valid.
7592
7593         In this case, when we write:
7594         S<int>::M<char> m;
7595
7596         M is instantiated from the CLASSTYPE_TI_TEMPLATE of #1, not from
7597         the one of #0.
7598
7599         When we encounter #1, we want to store the partial instantiation
7600         of M (template<class T> S<int>::M<T>) in it's CLASSTYPE_TI_TEMPLATE.
7601
7602         For all cases other than this "explicit specialization of member of a
7603         class template", we just want to store the most general template into
7604         the CLASSTYPE_TI_TEMPLATE of M.
7605
7606         This case of "explicit specialization of member of a class template"
7607         only happens when:
7608         1/ the enclosing class is an instantiation of, and therefore not
7609         the same as, the context of the most general template, and
7610         2/ we aren't looking at the partial instantiation itself, i.e.
7611         the innermost arguments are not the same as the innermost parms of
7612         the most general template.
7613
7614         So it's only when 1/ and 2/ happens that we want to use the partial
7615         instantiation of the member template in lieu of its most general
7616         template.  */
7617
7618       if (PRIMARY_TEMPLATE_P (gen_tmpl)
7619           && TMPL_ARGS_HAVE_MULTIPLE_LEVELS (arglist)
7620           /* the enclosing class must be an instantiation...  */
7621           && CLASS_TYPE_P (context)
7622           && !same_type_p (context, DECL_CONTEXT (gen_tmpl)))
7623         {
7624           tree partial_inst_args;
7625           TREE_VEC_LENGTH (arglist)--;
7626           ++processing_template_decl;
7627           partial_inst_args =
7628             tsubst (INNERMOST_TEMPLATE_ARGS
7629                         (TYPE_TI_ARGS (TREE_TYPE (gen_tmpl))),
7630                     arglist, complain, NULL_TREE);
7631           --processing_template_decl;
7632           TREE_VEC_LENGTH (arglist)++;
7633           use_partial_inst_tmpl =
7634             /*...and we must not be looking at the partial instantiation
7635              itself. */
7636             !comp_template_args (INNERMOST_TEMPLATE_ARGS (arglist),
7637                                  partial_inst_args);
7638         }
7639
7640       if (!use_partial_inst_tmpl)
7641         /* This case is easy; there are no member templates involved.  */
7642         found = gen_tmpl;
7643       else
7644         {
7645           /* This is a full instantiation of a member template.  Find
7646              the partial instantiation of which this is an instance.  */
7647
7648           /* Temporarily reduce by one the number of levels in the ARGLIST
7649              so as to avoid comparing the last set of arguments.  */
7650           TREE_VEC_LENGTH (arglist)--;
7651           found = tsubst (gen_tmpl, arglist, complain, NULL_TREE);
7652           TREE_VEC_LENGTH (arglist)++;
7653           /* FOUND is either a proper class type, or an alias
7654              template specialization.  In the later case, it's a
7655              TYPE_DECL, resulting from the substituting of arguments
7656              for parameters in the TYPE_DECL of the alias template
7657              done earlier.  So be careful while getting the template
7658              of FOUND.  */
7659           found = TREE_CODE (found) == TYPE_DECL
7660             ? TYPE_TI_TEMPLATE (TREE_TYPE (found))
7661             : CLASSTYPE_TI_TEMPLATE (found);
7662         }
7663
7664       SET_TYPE_TEMPLATE_INFO (t, build_template_info (found, arglist));
7665
7666       elt.spec = t;
7667       slot = htab_find_slot_with_hash (type_specializations,
7668                                        &elt, hash, INSERT);
7669       entry = ggc_alloc_spec_entry ();
7670       *entry = elt;
7671       *slot = entry;
7672
7673       /* Note this use of the partial instantiation so we can check it
7674          later in maybe_process_partial_specialization.  */
7675       DECL_TEMPLATE_INSTANTIATIONS (templ)
7676         = tree_cons (arglist, t,
7677                      DECL_TEMPLATE_INSTANTIATIONS (templ));
7678
7679       if (TREE_CODE (t) == ENUMERAL_TYPE && !is_dependent_type)
7680         /* Now that the type has been registered on the instantiations
7681            list, we set up the enumerators.  Because the enumeration
7682            constants may involve the enumeration type itself, we make
7683            sure to register the type first, and then create the
7684            constants.  That way, doing tsubst_expr for the enumeration
7685            constants won't result in recursive calls here; we'll find
7686            the instantiation and exit above.  */
7687         tsubst_enum (template_type, t, arglist);
7688
7689       if (CLASS_TYPE_P (template_type) && is_dependent_type)
7690         /* If the type makes use of template parameters, the
7691            code that generates debugging information will crash.  */
7692         DECL_IGNORED_P (TYPE_STUB_DECL (t)) = 1;
7693
7694       /* Possibly limit visibility based on template args.  */
7695       TREE_PUBLIC (type_decl) = 1;
7696       determine_visibility (type_decl);
7697
7698       return t;
7699     }
7700 }
7701
7702 /* Wrapper for lookup_template_class_1.  */
7703
7704 tree
7705 lookup_template_class (tree d1, tree arglist, tree in_decl, tree context,
7706                        int entering_scope, tsubst_flags_t complain)
7707 {
7708   tree ret;
7709   timevar_push (TV_TEMPLATE_INST);
7710   ret = lookup_template_class_1 (d1, arglist, in_decl, context,
7711                                  entering_scope, complain);
7712   timevar_pop (TV_TEMPLATE_INST);
7713   return ret;
7714 }
7715 \f
7716 struct pair_fn_data
7717 {
7718   tree_fn_t fn;
7719   void *data;
7720   /* True when we should also visit template parameters that occur in
7721      non-deduced contexts.  */
7722   bool include_nondeduced_p;
7723   struct pointer_set_t *visited;
7724 };
7725
7726 /* Called from for_each_template_parm via walk_tree.  */
7727
7728 static tree
7729 for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
7730 {
7731   tree t = *tp;
7732   struct pair_fn_data *pfd = (struct pair_fn_data *) d;
7733   tree_fn_t fn = pfd->fn;
7734   void *data = pfd->data;
7735
7736   if (TYPE_P (t)
7737       && (pfd->include_nondeduced_p || TREE_CODE (t) != TYPENAME_TYPE)
7738       && for_each_template_parm (TYPE_CONTEXT (t), fn, data, pfd->visited,
7739                                  pfd->include_nondeduced_p))
7740     return error_mark_node;
7741
7742   switch (TREE_CODE (t))
7743     {
7744     case RECORD_TYPE:
7745       if (TYPE_PTRMEMFUNC_P (t))
7746         break;
7747       /* Fall through.  */
7748
7749     case UNION_TYPE:
7750     case ENUMERAL_TYPE:
7751       if (!TYPE_TEMPLATE_INFO (t))
7752         *walk_subtrees = 0;
7753       else if (for_each_template_parm (TI_ARGS (TYPE_TEMPLATE_INFO (t)),
7754                                        fn, data, pfd->visited, 
7755                                        pfd->include_nondeduced_p))
7756         return error_mark_node;
7757       break;
7758
7759     case INTEGER_TYPE:
7760       if (for_each_template_parm (TYPE_MIN_VALUE (t),
7761                                   fn, data, pfd->visited, 
7762                                   pfd->include_nondeduced_p)
7763           || for_each_template_parm (TYPE_MAX_VALUE (t),
7764                                      fn, data, pfd->visited,
7765                                      pfd->include_nondeduced_p))
7766         return error_mark_node;
7767       break;
7768
7769     case METHOD_TYPE:
7770       /* Since we're not going to walk subtrees, we have to do this
7771          explicitly here.  */
7772       if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data,
7773                                   pfd->visited, pfd->include_nondeduced_p))
7774         return error_mark_node;
7775       /* Fall through.  */
7776
7777     case FUNCTION_TYPE:
7778       /* Check the return type.  */
7779       if (for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
7780                                   pfd->include_nondeduced_p))
7781         return error_mark_node;
7782
7783       /* Check the parameter types.  Since default arguments are not
7784          instantiated until they are needed, the TYPE_ARG_TYPES may
7785          contain expressions that involve template parameters.  But,
7786          no-one should be looking at them yet.  And, once they're
7787          instantiated, they don't contain template parameters, so
7788          there's no point in looking at them then, either.  */
7789       {
7790         tree parm;
7791
7792         for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
7793           if (for_each_template_parm (TREE_VALUE (parm), fn, data,
7794                                       pfd->visited, pfd->include_nondeduced_p))
7795             return error_mark_node;
7796
7797         /* Since we've already handled the TYPE_ARG_TYPES, we don't
7798            want walk_tree walking into them itself.  */
7799         *walk_subtrees = 0;
7800       }
7801       break;
7802
7803     case TYPEOF_TYPE:
7804     case UNDERLYING_TYPE:
7805       if (pfd->include_nondeduced_p
7806           && for_each_template_parm (TYPE_FIELDS (t), fn, data,
7807                                      pfd->visited, 
7808                                      pfd->include_nondeduced_p))
7809         return error_mark_node;
7810       break;
7811
7812     case FUNCTION_DECL:
7813     case VAR_DECL:
7814       if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
7815           && for_each_template_parm (DECL_TI_ARGS (t), fn, data,
7816                                      pfd->visited, pfd->include_nondeduced_p))
7817         return error_mark_node;
7818       /* Fall through.  */
7819
7820     case PARM_DECL:
7821     case CONST_DECL:
7822       if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t)
7823           && for_each_template_parm (DECL_INITIAL (t), fn, data,
7824                                      pfd->visited, pfd->include_nondeduced_p))
7825         return error_mark_node;
7826       if (DECL_CONTEXT (t)
7827           && pfd->include_nondeduced_p
7828           && for_each_template_parm (DECL_CONTEXT (t), fn, data,
7829                                      pfd->visited, pfd->include_nondeduced_p))
7830         return error_mark_node;
7831       break;
7832
7833     case BOUND_TEMPLATE_TEMPLATE_PARM:
7834       /* Record template parameters such as `T' inside `TT<T>'.  */
7835       if (for_each_template_parm (TYPE_TI_ARGS (t), fn, data, pfd->visited,
7836                                   pfd->include_nondeduced_p))
7837         return error_mark_node;
7838       /* Fall through.  */
7839
7840     case TEMPLATE_TEMPLATE_PARM:
7841     case TEMPLATE_TYPE_PARM:
7842     case TEMPLATE_PARM_INDEX:
7843       if (fn && (*fn)(t, data))
7844         return error_mark_node;
7845       else if (!fn)
7846         return error_mark_node;
7847       break;
7848
7849     case TEMPLATE_DECL:
7850       /* A template template parameter is encountered.  */
7851       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
7852           && for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
7853                                      pfd->include_nondeduced_p))
7854         return error_mark_node;
7855
7856       /* Already substituted template template parameter */
7857       *walk_subtrees = 0;
7858       break;
7859
7860     case TYPENAME_TYPE:
7861       if (!fn
7862           || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn,
7863                                      data, pfd->visited, 
7864                                      pfd->include_nondeduced_p))
7865         return error_mark_node;
7866       break;
7867
7868     case CONSTRUCTOR:
7869       if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
7870           && pfd->include_nondeduced_p
7871           && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
7872                                      (TREE_TYPE (t)), fn, data,
7873                                      pfd->visited, pfd->include_nondeduced_p))
7874         return error_mark_node;
7875       break;
7876
7877     case INDIRECT_REF:
7878     case COMPONENT_REF:
7879       /* If there's no type, then this thing must be some expression
7880          involving template parameters.  */
7881       if (!fn && !TREE_TYPE (t))
7882         return error_mark_node;
7883       break;
7884
7885     case MODOP_EXPR:
7886     case CAST_EXPR:
7887     case IMPLICIT_CONV_EXPR:
7888     case REINTERPRET_CAST_EXPR:
7889     case CONST_CAST_EXPR:
7890     case STATIC_CAST_EXPR:
7891     case DYNAMIC_CAST_EXPR:
7892     case ARROW_EXPR:
7893     case DOTSTAR_EXPR:
7894     case TYPEID_EXPR:
7895     case PSEUDO_DTOR_EXPR:
7896       if (!fn)
7897         return error_mark_node;
7898       break;
7899
7900     default:
7901       break;
7902     }
7903
7904   /* We didn't find any template parameters we liked.  */
7905   return NULL_TREE;
7906 }
7907
7908 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
7909    BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
7910    call FN with the parameter and the DATA.
7911    If FN returns nonzero, the iteration is terminated, and
7912    for_each_template_parm returns 1.  Otherwise, the iteration
7913    continues.  If FN never returns a nonzero value, the value
7914    returned by for_each_template_parm is 0.  If FN is NULL, it is
7915    considered to be the function which always returns 1.
7916
7917    If INCLUDE_NONDEDUCED_P, then this routine will also visit template
7918    parameters that occur in non-deduced contexts.  When false, only
7919    visits those template parameters that can be deduced.  */
7920
7921 static int
7922 for_each_template_parm (tree t, tree_fn_t fn, void* data,
7923                         struct pointer_set_t *visited,
7924                         bool include_nondeduced_p)
7925 {
7926   struct pair_fn_data pfd;
7927   int result;
7928
7929   /* Set up.  */
7930   pfd.fn = fn;
7931   pfd.data = data;
7932   pfd.include_nondeduced_p = include_nondeduced_p;
7933
7934   /* Walk the tree.  (Conceptually, we would like to walk without
7935      duplicates, but for_each_template_parm_r recursively calls
7936      for_each_template_parm, so we would need to reorganize a fair
7937      bit to use walk_tree_without_duplicates, so we keep our own
7938      visited list.)  */
7939   if (visited)
7940     pfd.visited = visited;
7941   else
7942     pfd.visited = pointer_set_create ();
7943   result = cp_walk_tree (&t,
7944                          for_each_template_parm_r,
7945                          &pfd,
7946                          pfd.visited) != NULL_TREE;
7947
7948   /* Clean up.  */
7949   if (!visited)
7950     {
7951       pointer_set_destroy (pfd.visited);
7952       pfd.visited = 0;
7953     }
7954
7955   return result;
7956 }
7957
7958 /* Returns true if T depends on any template parameter.  */
7959
7960 int
7961 uses_template_parms (tree t)
7962 {
7963   bool dependent_p;
7964   int saved_processing_template_decl;
7965
7966   saved_processing_template_decl = processing_template_decl;
7967   if (!saved_processing_template_decl)
7968     processing_template_decl = 1;
7969   if (TYPE_P (t))
7970     dependent_p = dependent_type_p (t);
7971   else if (TREE_CODE (t) == TREE_VEC)
7972     dependent_p = any_dependent_template_arguments_p (t);
7973   else if (TREE_CODE (t) == TREE_LIST)
7974     dependent_p = (uses_template_parms (TREE_VALUE (t))
7975                    || uses_template_parms (TREE_CHAIN (t)));
7976   else if (TREE_CODE (t) == TYPE_DECL)
7977     dependent_p = dependent_type_p (TREE_TYPE (t));
7978   else if (DECL_P (t)
7979            || EXPR_P (t)
7980            || TREE_CODE (t) == TEMPLATE_PARM_INDEX
7981            || TREE_CODE (t) == OVERLOAD
7982            || BASELINK_P (t)
7983            || TREE_CODE (t) == IDENTIFIER_NODE
7984            || TREE_CODE (t) == TRAIT_EXPR
7985            || TREE_CODE (t) == CONSTRUCTOR
7986            || CONSTANT_CLASS_P (t))
7987     dependent_p = (type_dependent_expression_p (t)
7988                    || value_dependent_expression_p (t));
7989   else
7990     {
7991       gcc_assert (t == error_mark_node);
7992       dependent_p = false;
7993     }
7994
7995   processing_template_decl = saved_processing_template_decl;
7996
7997   return dependent_p;
7998 }
7999
8000 /* Returns true if T depends on any template parameter with level LEVEL.  */
8001
8002 int
8003 uses_template_parms_level (tree t, int level)
8004 {
8005   return for_each_template_parm (t, template_parm_this_level_p, &level, NULL,
8006                                  /*include_nondeduced_p=*/true);
8007 }
8008
8009 /* Returns TRUE iff INST is an instantiation we don't need to do in an
8010    ill-formed translation unit, i.e. a variable or function that isn't
8011    usable in a constant expression.  */
8012
8013 static inline bool
8014 neglectable_inst_p (tree d)
8015 {
8016   return (DECL_P (d)
8017           && !(TREE_CODE (d) == FUNCTION_DECL ? DECL_DECLARED_CONSTEXPR_P (d)
8018                : decl_maybe_constant_var_p (d)));
8019 }
8020
8021 /* Returns TRUE iff we should refuse to instantiate DECL because it's
8022    neglectable and instantiated from within an erroneous instantiation.  */
8023
8024 static bool
8025 limit_bad_template_recursion (tree decl)
8026 {
8027   struct tinst_level *lev = current_tinst_level;
8028   int errs = errorcount + sorrycount;
8029   if (lev == NULL || errs == 0 || !neglectable_inst_p (decl))
8030     return false;
8031
8032   for (; lev; lev = lev->next)
8033     if (neglectable_inst_p (lev->decl))
8034       break;
8035
8036   return (lev && errs > lev->errors);
8037 }
8038
8039 static int tinst_depth;
8040 extern int max_tinst_depth;
8041 #ifdef GATHER_STATISTICS
8042 int depth_reached;
8043 #endif
8044 static GTY(()) struct tinst_level *last_error_tinst_level;
8045
8046 /* We're starting to instantiate D; record the template instantiation context
8047    for diagnostics and to restore it later.  */
8048
8049 int
8050 push_tinst_level (tree d)
8051 {
8052   struct tinst_level *new_level;
8053
8054   if (tinst_depth >= max_tinst_depth)
8055     {
8056       last_error_tinst_level = current_tinst_level;
8057       if (TREE_CODE (d) == TREE_LIST)
8058         error ("template instantiation depth exceeds maximum of %d (use "
8059                "-ftemplate-depth= to increase the maximum) substituting %qS",
8060                max_tinst_depth, d);
8061       else
8062         error ("template instantiation depth exceeds maximum of %d (use "
8063                "-ftemplate-depth= to increase the maximum) instantiating %qD",
8064                max_tinst_depth, d);
8065
8066       print_instantiation_context ();
8067
8068       return 0;
8069     }
8070
8071   /* If the current instantiation caused problems, don't let it instantiate
8072      anything else.  Do allow deduction substitution and decls usable in
8073      constant expressions.  */
8074   if (limit_bad_template_recursion (d))
8075     return 0;
8076
8077   new_level = ggc_alloc_tinst_level ();
8078   new_level->decl = d;
8079   new_level->locus = input_location;
8080   new_level->errors = errorcount+sorrycount;
8081   new_level->in_system_header_p = in_system_header;
8082   new_level->next = current_tinst_level;
8083   current_tinst_level = new_level;
8084
8085   ++tinst_depth;
8086 #ifdef GATHER_STATISTICS
8087   if (tinst_depth > depth_reached)
8088     depth_reached = tinst_depth;
8089 #endif
8090
8091   return 1;
8092 }
8093
8094 /* We're done instantiating this template; return to the instantiation
8095    context.  */
8096
8097 void
8098 pop_tinst_level (void)
8099 {
8100   /* Restore the filename and line number stashed away when we started
8101      this instantiation.  */
8102   input_location = current_tinst_level->locus;
8103   current_tinst_level = current_tinst_level->next;
8104   --tinst_depth;
8105 }
8106
8107 /* We're instantiating a deferred template; restore the template
8108    instantiation context in which the instantiation was requested, which
8109    is one step out from LEVEL.  Return the corresponding DECL or TYPE.  */
8110
8111 static tree
8112 reopen_tinst_level (struct tinst_level *level)
8113 {
8114   struct tinst_level *t;
8115
8116   tinst_depth = 0;
8117   for (t = level; t; t = t->next)
8118     ++tinst_depth;
8119
8120   current_tinst_level = level;
8121   pop_tinst_level ();
8122   if (current_tinst_level)
8123     current_tinst_level->errors = errorcount+sorrycount;
8124   return level->decl;
8125 }
8126
8127 /* Returns the TINST_LEVEL which gives the original instantiation
8128    context.  */
8129
8130 struct tinst_level *
8131 outermost_tinst_level (void)
8132 {
8133   struct tinst_level *level = current_tinst_level;
8134   if (level)
8135     while (level->next)
8136       level = level->next;
8137   return level;
8138 }
8139
8140 /* Returns TRUE if PARM is a parameter of the template TEMPL.  */
8141
8142 bool
8143 parameter_of_template_p (tree parm, tree templ)
8144 {
8145   tree parms;
8146   int i;
8147
8148   if (!parm || !templ)
8149     return false;
8150
8151   gcc_assert (DECL_TEMPLATE_PARM_P (parm));
8152   gcc_assert (TREE_CODE (templ) == TEMPLATE_DECL);
8153
8154   parms = DECL_TEMPLATE_PARMS (templ);
8155   parms = INNERMOST_TEMPLATE_PARMS (parms);
8156
8157   for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
8158     {
8159       tree p = TREE_VALUE (TREE_VEC_ELT (parms, i));
8160       if (parm == p
8161           || (DECL_INITIAL (parm)
8162               && DECL_INITIAL (parm) == DECL_INITIAL (p)))
8163         return true;
8164     }
8165
8166   return false;
8167 }
8168
8169 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL.  ARGS is the
8170    vector of template arguments, as for tsubst.
8171
8172    Returns an appropriate tsubst'd friend declaration.  */
8173
8174 static tree
8175 tsubst_friend_function (tree decl, tree args)
8176 {
8177   tree new_friend;
8178
8179   if (TREE_CODE (decl) == FUNCTION_DECL
8180       && DECL_TEMPLATE_INSTANTIATION (decl)
8181       && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
8182     /* This was a friend declared with an explicit template
8183        argument list, e.g.:
8184
8185        friend void f<>(T);
8186
8187        to indicate that f was a template instantiation, not a new
8188        function declaration.  Now, we have to figure out what
8189        instantiation of what template.  */
8190     {
8191       tree template_id, arglist, fns;
8192       tree new_args;
8193       tree tmpl;
8194       tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
8195
8196       /* Friend functions are looked up in the containing namespace scope.
8197          We must enter that scope, to avoid finding member functions of the
8198          current class with same name.  */
8199       push_nested_namespace (ns);
8200       fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
8201                          tf_warning_or_error, NULL_TREE,
8202                          /*integral_constant_expression_p=*/false);
8203       pop_nested_namespace (ns);
8204       arglist = tsubst (DECL_TI_ARGS (decl), args,
8205                         tf_warning_or_error, NULL_TREE);
8206       template_id = lookup_template_function (fns, arglist);
8207
8208       new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
8209       tmpl = determine_specialization (template_id, new_friend,
8210                                        &new_args,
8211                                        /*need_member_template=*/0,
8212                                        TREE_VEC_LENGTH (args),
8213                                        tsk_none);
8214       return instantiate_template (tmpl, new_args, tf_error);
8215     }
8216
8217   new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
8218
8219   /* The NEW_FRIEND will look like an instantiation, to the
8220      compiler, but is not an instantiation from the point of view of
8221      the language.  For example, we might have had:
8222
8223      template <class T> struct S {
8224        template <class U> friend void f(T, U);
8225      };
8226
8227      Then, in S<int>, template <class U> void f(int, U) is not an
8228      instantiation of anything.  */
8229   if (new_friend == error_mark_node)
8230     return error_mark_node;
8231
8232   DECL_USE_TEMPLATE (new_friend) = 0;
8233   if (TREE_CODE (decl) == TEMPLATE_DECL)
8234     {
8235       DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
8236       DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
8237         = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
8238     }
8239
8240   /* The mangled name for the NEW_FRIEND is incorrect.  The function
8241      is not a template instantiation and should not be mangled like
8242      one.  Therefore, we forget the mangling here; we'll recompute it
8243      later if we need it.  */
8244   if (TREE_CODE (new_friend) != TEMPLATE_DECL)
8245     {
8246       SET_DECL_RTL (new_friend, NULL);
8247       SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
8248     }
8249
8250   if (DECL_NAMESPACE_SCOPE_P (new_friend))
8251     {
8252       tree old_decl;
8253       tree new_friend_template_info;
8254       tree new_friend_result_template_info;
8255       tree ns;
8256       int  new_friend_is_defn;
8257
8258       /* We must save some information from NEW_FRIEND before calling
8259          duplicate decls since that function will free NEW_FRIEND if
8260          possible.  */
8261       new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
8262       new_friend_is_defn =
8263             (DECL_INITIAL (DECL_TEMPLATE_RESULT
8264                            (template_for_substitution (new_friend)))
8265              != NULL_TREE);
8266       if (TREE_CODE (new_friend) == TEMPLATE_DECL)
8267         {
8268           /* This declaration is a `primary' template.  */
8269           DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
8270
8271           new_friend_result_template_info
8272             = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
8273         }
8274       else
8275         new_friend_result_template_info = NULL_TREE;
8276
8277       /* Make the init_value nonzero so pushdecl knows this is a defn.  */
8278       if (new_friend_is_defn)
8279         DECL_INITIAL (new_friend) = error_mark_node;
8280
8281       /* Inside pushdecl_namespace_level, we will push into the
8282          current namespace. However, the friend function should go
8283          into the namespace of the template.  */
8284       ns = decl_namespace_context (new_friend);
8285       push_nested_namespace (ns);
8286       old_decl = pushdecl_namespace_level (new_friend, /*is_friend=*/true);
8287       pop_nested_namespace (ns);
8288
8289       if (old_decl == error_mark_node)
8290         return error_mark_node;
8291
8292       if (old_decl != new_friend)
8293         {
8294           /* This new friend declaration matched an existing
8295              declaration.  For example, given:
8296
8297                template <class T> void f(T);
8298                template <class U> class C {
8299                  template <class T> friend void f(T) {}
8300                };
8301
8302              the friend declaration actually provides the definition
8303              of `f', once C has been instantiated for some type.  So,
8304              old_decl will be the out-of-class template declaration,
8305              while new_friend is the in-class definition.
8306
8307              But, if `f' was called before this point, the
8308              instantiation of `f' will have DECL_TI_ARGS corresponding
8309              to `T' but not to `U', references to which might appear
8310              in the definition of `f'.  Previously, the most general
8311              template for an instantiation of `f' was the out-of-class
8312              version; now it is the in-class version.  Therefore, we
8313              run through all specialization of `f', adding to their
8314              DECL_TI_ARGS appropriately.  In particular, they need a
8315              new set of outer arguments, corresponding to the
8316              arguments for this class instantiation.
8317
8318              The same situation can arise with something like this:
8319
8320                friend void f(int);
8321                template <class T> class C {
8322                  friend void f(T) {}
8323                };
8324
8325              when `C<int>' is instantiated.  Now, `f(int)' is defined
8326              in the class.  */
8327
8328           if (!new_friend_is_defn)
8329             /* On the other hand, if the in-class declaration does
8330                *not* provide a definition, then we don't want to alter
8331                existing definitions.  We can just leave everything
8332                alone.  */
8333             ;
8334           else
8335             {
8336               tree new_template = TI_TEMPLATE (new_friend_template_info);
8337               tree new_args = TI_ARGS (new_friend_template_info);
8338
8339               /* Overwrite whatever template info was there before, if
8340                  any, with the new template information pertaining to
8341                  the declaration.  */
8342               DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
8343
8344               if (TREE_CODE (old_decl) != TEMPLATE_DECL)
8345                 {
8346                   /* We should have called reregister_specialization in
8347                      duplicate_decls.  */
8348                   gcc_assert (retrieve_specialization (new_template,
8349                                                        new_args, 0)
8350                               == old_decl);
8351
8352                   /* Instantiate it if the global has already been used.  */
8353                   if (DECL_ODR_USED (old_decl))
8354                     instantiate_decl (old_decl, /*defer_ok=*/true,
8355                                       /*expl_inst_class_mem_p=*/false);
8356                 }
8357               else
8358                 {
8359                   tree t;
8360
8361                   /* Indicate that the old function template is a partial
8362                      instantiation.  */
8363                   DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
8364                     = new_friend_result_template_info;
8365
8366                   gcc_assert (new_template
8367                               == most_general_template (new_template));
8368                   gcc_assert (new_template != old_decl);
8369
8370                   /* Reassign any specializations already in the hash table
8371                      to the new more general template, and add the
8372                      additional template args.  */
8373                   for (t = DECL_TEMPLATE_INSTANTIATIONS (old_decl);
8374                        t != NULL_TREE;
8375                        t = TREE_CHAIN (t))
8376                     {
8377                       tree spec = TREE_VALUE (t);
8378                       spec_entry elt;
8379
8380                       elt.tmpl = old_decl;
8381                       elt.args = DECL_TI_ARGS (spec);
8382                       elt.spec = NULL_TREE;
8383
8384                       htab_remove_elt (decl_specializations, &elt);
8385
8386                       DECL_TI_ARGS (spec)
8387                         = add_outermost_template_args (new_args,
8388                                                        DECL_TI_ARGS (spec));
8389
8390                       register_specialization
8391                         (spec, new_template, DECL_TI_ARGS (spec), true, 0);
8392
8393                     }
8394                   DECL_TEMPLATE_INSTANTIATIONS (old_decl) = NULL_TREE;
8395                 }
8396             }
8397
8398           /* The information from NEW_FRIEND has been merged into OLD_DECL
8399              by duplicate_decls.  */
8400           new_friend = old_decl;
8401         }
8402     }
8403   else
8404     {
8405       tree context = DECL_CONTEXT (new_friend);
8406       bool dependent_p;
8407
8408       /* In the code
8409            template <class T> class C {
8410              template <class U> friend void C1<U>::f (); // case 1
8411              friend void C2<T>::f ();                    // case 2
8412            };
8413          we only need to make sure CONTEXT is a complete type for
8414          case 2.  To distinguish between the two cases, we note that
8415          CONTEXT of case 1 remains dependent type after tsubst while
8416          this isn't true for case 2.  */
8417       ++processing_template_decl;
8418       dependent_p = dependent_type_p (context);
8419       --processing_template_decl;
8420
8421       if (!dependent_p
8422           && !complete_type_or_else (context, NULL_TREE))
8423         return error_mark_node;
8424
8425       if (COMPLETE_TYPE_P (context))
8426         {
8427           /* Check to see that the declaration is really present, and,
8428              possibly obtain an improved declaration.  */
8429           tree fn = check_classfn (context,
8430                                    new_friend, NULL_TREE);
8431
8432           if (fn)
8433             new_friend = fn;
8434         }
8435     }
8436
8437   return new_friend;
8438 }
8439
8440 /* FRIEND_TMPL is a friend TEMPLATE_DECL.  ARGS is the vector of
8441    template arguments, as for tsubst.
8442
8443    Returns an appropriate tsubst'd friend type or error_mark_node on
8444    failure.  */
8445
8446 static tree
8447 tsubst_friend_class (tree friend_tmpl, tree args)
8448 {
8449   tree friend_type;
8450   tree tmpl;
8451   tree context;
8452
8453   context = CP_DECL_CONTEXT (friend_tmpl);
8454
8455   if (context != global_namespace)
8456     {
8457       if (TREE_CODE (context) == NAMESPACE_DECL)
8458         push_nested_namespace (context);
8459       else
8460         push_nested_class (tsubst (context, args, tf_none, NULL_TREE));
8461     }
8462
8463   /* Look for a class template declaration.  We look for hidden names
8464      because two friend declarations of the same template are the
8465      same.  For example, in:
8466
8467        struct A { 
8468          template <typename> friend class F;
8469        };
8470        template <typename> struct B { 
8471          template <typename> friend class F;
8472        };
8473
8474      both F templates are the same.  */
8475   tmpl = lookup_name_real (DECL_NAME (friend_tmpl), 0, 0,
8476                            /*block_p=*/true, 0, 
8477                            LOOKUP_COMPLAIN | LOOKUP_HIDDEN);
8478
8479   /* But, if we don't find one, it might be because we're in a
8480      situation like this:
8481
8482        template <class T>
8483        struct S {
8484          template <class U>
8485          friend struct S;
8486        };
8487
8488      Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
8489      for `S<int>', not the TEMPLATE_DECL.  */
8490   if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
8491     {
8492       tmpl = lookup_name_prefer_type (DECL_NAME (friend_tmpl), 1);
8493       tmpl = maybe_get_template_decl_from_type_decl (tmpl);
8494     }
8495
8496   if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
8497     {
8498       /* The friend template has already been declared.  Just
8499          check to see that the declarations match, and install any new
8500          default parameters.  We must tsubst the default parameters,
8501          of course.  We only need the innermost template parameters
8502          because that is all that redeclare_class_template will look
8503          at.  */
8504       if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
8505           > TMPL_ARGS_DEPTH (args))
8506         {
8507           tree parms;
8508           location_t saved_input_location;
8509           parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
8510                                          args, tf_warning_or_error);
8511
8512           saved_input_location = input_location;
8513           input_location = DECL_SOURCE_LOCATION (friend_tmpl);
8514           redeclare_class_template (TREE_TYPE (tmpl), parms);
8515           input_location = saved_input_location;
8516           
8517         }
8518
8519       friend_type = TREE_TYPE (tmpl);
8520     }
8521   else
8522     {
8523       /* The friend template has not already been declared.  In this
8524          case, the instantiation of the template class will cause the
8525          injection of this template into the global scope.  */
8526       tmpl = tsubst (friend_tmpl, args, tf_warning_or_error, NULL_TREE);
8527       if (tmpl == error_mark_node)
8528         return error_mark_node;
8529
8530       /* The new TMPL is not an instantiation of anything, so we
8531          forget its origins.  We don't reset CLASSTYPE_TI_TEMPLATE for
8532          the new type because that is supposed to be the corresponding
8533          template decl, i.e., TMPL.  */
8534       DECL_USE_TEMPLATE (tmpl) = 0;
8535       DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
8536       CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
8537       CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
8538         = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
8539
8540       /* Inject this template into the global scope.  */
8541       friend_type = TREE_TYPE (pushdecl_top_level_maybe_friend (tmpl, true));
8542     }
8543
8544   if (context != global_namespace)
8545     {
8546       if (TREE_CODE (context) == NAMESPACE_DECL)
8547         pop_nested_namespace (context);
8548       else
8549         pop_nested_class ();
8550     }
8551
8552   return friend_type;
8553 }
8554
8555 /* Returns zero if TYPE cannot be completed later due to circularity.
8556    Otherwise returns one.  */
8557
8558 static int
8559 can_complete_type_without_circularity (tree type)
8560 {
8561   if (type == NULL_TREE || type == error_mark_node)
8562     return 0;
8563   else if (COMPLETE_TYPE_P (type))
8564     return 1;
8565   else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
8566     return can_complete_type_without_circularity (TREE_TYPE (type));
8567   else if (CLASS_TYPE_P (type)
8568            && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
8569     return 0;
8570   else
8571     return 1;
8572 }
8573
8574 /* Apply any attributes which had to be deferred until instantiation
8575    time.  DECL_P, ATTRIBUTES and ATTR_FLAGS are as cplus_decl_attributes;
8576    ARGS, COMPLAIN, IN_DECL are as tsubst.  */
8577
8578 static void
8579 apply_late_template_attributes (tree *decl_p, tree attributes, int attr_flags,
8580                                 tree args, tsubst_flags_t complain, tree in_decl)
8581 {
8582   tree last_dep = NULL_TREE;
8583   tree t;
8584   tree *p;
8585
8586   for (t = attributes; t; t = TREE_CHAIN (t))
8587     if (ATTR_IS_DEPENDENT (t))
8588       {
8589         last_dep = t;
8590         attributes = copy_list (attributes);
8591         break;
8592       }
8593
8594   if (DECL_P (*decl_p))
8595     {
8596       if (TREE_TYPE (*decl_p) == error_mark_node)
8597         return;
8598       p = &DECL_ATTRIBUTES (*decl_p);
8599     }
8600   else
8601     p = &TYPE_ATTRIBUTES (*decl_p);
8602
8603   if (last_dep)
8604     {
8605       tree late_attrs = NULL_TREE;
8606       tree *q = &late_attrs;
8607
8608       for (*p = attributes; *p; )
8609         {
8610           t = *p;
8611           if (ATTR_IS_DEPENDENT (t))
8612             {
8613               *p = TREE_CHAIN (t);
8614               TREE_CHAIN (t) = NULL_TREE;
8615               /* If the first attribute argument is an identifier, don't
8616                  pass it through tsubst.  Attributes like mode, format,
8617                  cleanup and several target specific attributes expect it
8618                  unmodified.  */
8619               if (TREE_VALUE (t)
8620                   && TREE_CODE (TREE_VALUE (t)) == TREE_LIST
8621                   && TREE_VALUE (TREE_VALUE (t))
8622                   && (TREE_CODE (TREE_VALUE (TREE_VALUE (t)))
8623                       == IDENTIFIER_NODE))
8624                 {
8625                   tree chain
8626                     = tsubst_expr (TREE_CHAIN (TREE_VALUE (t)), args, complain,
8627                                    in_decl,
8628                                    /*integral_constant_expression_p=*/false);
8629                   if (chain != TREE_CHAIN (TREE_VALUE (t)))
8630                     TREE_VALUE (t)
8631                       = tree_cons (NULL_TREE, TREE_VALUE (TREE_VALUE (t)),
8632                                    chain);
8633                 }
8634               else
8635                 TREE_VALUE (t)
8636                   = tsubst_expr (TREE_VALUE (t), args, complain, in_decl,
8637                                  /*integral_constant_expression_p=*/false);
8638               *q = t;
8639               q = &TREE_CHAIN (t);
8640             }
8641           else
8642             p = &TREE_CHAIN (t);
8643         }
8644
8645       cplus_decl_attributes (decl_p, late_attrs, attr_flags);
8646     }
8647 }
8648
8649 /* Perform (or defer) access check for typedefs that were referenced
8650    from within the template TMPL code.
8651    This is a subroutine of instantiate_template and instantiate_class_template.
8652    TMPL is the template to consider and TARGS is the list of arguments of
8653    that template.  */
8654
8655 static void
8656 perform_typedefs_access_check (tree tmpl, tree targs)
8657 {
8658   location_t saved_location;
8659   int i;
8660   qualified_typedef_usage_t *iter;
8661
8662   if (!tmpl
8663       || (!CLASS_TYPE_P (tmpl)
8664           && TREE_CODE (tmpl) != FUNCTION_DECL))
8665     return;
8666
8667   saved_location = input_location;
8668   FOR_EACH_VEC_ELT (qualified_typedef_usage_t,
8669                     get_types_needing_access_check (tmpl),
8670                     i, iter)
8671     {
8672       tree type_decl = iter->typedef_decl;
8673       tree type_scope = iter->context;
8674
8675       if (!type_decl || !type_scope || !CLASS_TYPE_P (type_scope))
8676         continue;
8677
8678       if (uses_template_parms (type_decl))
8679         type_decl = tsubst (type_decl, targs, tf_error, NULL_TREE);
8680       if (uses_template_parms (type_scope))
8681         type_scope = tsubst (type_scope, targs, tf_error, NULL_TREE);
8682
8683       /* Make access check error messages point to the location
8684          of the use of the typedef.  */
8685       input_location = iter->locus;
8686       perform_or_defer_access_check (TYPE_BINFO (type_scope),
8687                                      type_decl, type_decl);
8688     }
8689     input_location = saved_location;
8690 }
8691
8692 static tree
8693 instantiate_class_template_1 (tree type)
8694 {
8695   tree templ, args, pattern, t, member;
8696   tree typedecl;
8697   tree pbinfo;
8698   tree base_list;
8699   unsigned int saved_maximum_field_alignment;
8700
8701   if (type == error_mark_node)
8702     return error_mark_node;
8703
8704   if (COMPLETE_OR_OPEN_TYPE_P (type)
8705       || uses_template_parms (type))
8706     return type;
8707
8708   /* Figure out which template is being instantiated.  */
8709   templ = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
8710   gcc_assert (TREE_CODE (templ) == TEMPLATE_DECL);
8711
8712   /* Determine what specialization of the original template to
8713      instantiate.  */
8714   t = most_specialized_class (type, templ, tf_warning_or_error);
8715   if (t == error_mark_node)
8716     {
8717       TYPE_BEING_DEFINED (type) = 1;
8718       return error_mark_node;
8719     }
8720   else if (t)
8721     {
8722       /* This TYPE is actually an instantiation of a partial
8723          specialization.  We replace the innermost set of ARGS with
8724          the arguments appropriate for substitution.  For example,
8725          given:
8726
8727            template <class T> struct S {};
8728            template <class T> struct S<T*> {};
8729
8730          and supposing that we are instantiating S<int*>, ARGS will
8731          presently be {int*} -- but we need {int}.  */
8732       pattern = TREE_TYPE (t);
8733       args = TREE_PURPOSE (t);
8734     }
8735   else
8736     {
8737       pattern = TREE_TYPE (templ);
8738       args = CLASSTYPE_TI_ARGS (type);
8739     }
8740
8741   /* If the template we're instantiating is incomplete, then clearly
8742      there's nothing we can do.  */
8743   if (!COMPLETE_TYPE_P (pattern))
8744     return type;
8745
8746   /* If we've recursively instantiated too many templates, stop.  */
8747   if (! push_tinst_level (type))
8748     return type;
8749
8750   /* Now we're really doing the instantiation.  Mark the type as in
8751      the process of being defined.  */
8752   TYPE_BEING_DEFINED (type) = 1;
8753
8754   /* We may be in the middle of deferred access check.  Disable
8755      it now.  */
8756   push_deferring_access_checks (dk_no_deferred);
8757
8758   push_to_top_level ();
8759   /* Use #pragma pack from the template context.  */
8760   saved_maximum_field_alignment = maximum_field_alignment;
8761   maximum_field_alignment = TYPE_PRECISION (pattern);
8762
8763   SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
8764
8765   /* Set the input location to the most specialized template definition.
8766      This is needed if tsubsting causes an error.  */
8767   typedecl = TYPE_MAIN_DECL (pattern);
8768   input_location = DECL_SOURCE_LOCATION (TYPE_NAME (type)) =
8769     DECL_SOURCE_LOCATION (typedecl);
8770
8771   TYPE_PACKED (type) = TYPE_PACKED (pattern);
8772   TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
8773   TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
8774   TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
8775   if (ANON_AGGR_TYPE_P (pattern))
8776     SET_ANON_AGGR_TYPE_P (type);
8777   if (CLASSTYPE_VISIBILITY_SPECIFIED (pattern))
8778     {
8779       CLASSTYPE_VISIBILITY_SPECIFIED (type) = 1;
8780       CLASSTYPE_VISIBILITY (type) = CLASSTYPE_VISIBILITY (pattern);
8781       /* Adjust visibility for template arguments.  */
8782       determine_visibility (TYPE_MAIN_DECL (type));
8783     }
8784   CLASSTYPE_FINAL (type) = CLASSTYPE_FINAL (pattern);
8785
8786   pbinfo = TYPE_BINFO (pattern);
8787
8788   /* We should never instantiate a nested class before its enclosing
8789      class; we need to look up the nested class by name before we can
8790      instantiate it, and that lookup should instantiate the enclosing
8791      class.  */
8792   gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
8793               || COMPLETE_OR_OPEN_TYPE_P (TYPE_CONTEXT (type)));
8794
8795   base_list = NULL_TREE;
8796   if (BINFO_N_BASE_BINFOS (pbinfo))
8797     {
8798       tree pbase_binfo;
8799       tree pushed_scope;
8800       int i;
8801
8802       /* We must enter the scope containing the type, as that is where
8803          the accessibility of types named in dependent bases are
8804          looked up from.  */
8805       pushed_scope = push_scope (CP_TYPE_CONTEXT (type));
8806
8807       /* Substitute into each of the bases to determine the actual
8808          basetypes.  */
8809       for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
8810         {
8811           tree base;
8812           tree access = BINFO_BASE_ACCESS (pbinfo, i);
8813           tree expanded_bases = NULL_TREE;
8814           int idx, len = 1;
8815
8816           if (PACK_EXPANSION_P (BINFO_TYPE (pbase_binfo)))
8817             {
8818               expanded_bases = 
8819                 tsubst_pack_expansion (BINFO_TYPE (pbase_binfo),
8820                                        args, tf_error, NULL_TREE);
8821               if (expanded_bases == error_mark_node)
8822                 continue;
8823
8824               len = TREE_VEC_LENGTH (expanded_bases);
8825             }
8826
8827           for (idx = 0; idx < len; idx++)
8828             {
8829               if (expanded_bases)
8830                 /* Extract the already-expanded base class.  */
8831                 base = TREE_VEC_ELT (expanded_bases, idx);
8832               else
8833                 /* Substitute to figure out the base class.  */
8834                 base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error, 
8835                                NULL_TREE);
8836
8837               if (base == error_mark_node)
8838                 continue;
8839
8840               base_list = tree_cons (access, base, base_list);
8841               if (BINFO_VIRTUAL_P (pbase_binfo))
8842                 TREE_TYPE (base_list) = integer_type_node;
8843             }
8844         }
8845
8846       /* The list is now in reverse order; correct that.  */
8847       base_list = nreverse (base_list);
8848
8849       if (pushed_scope)
8850         pop_scope (pushed_scope);
8851     }
8852   /* Now call xref_basetypes to set up all the base-class
8853      information.  */
8854   xref_basetypes (type, base_list);
8855
8856   apply_late_template_attributes (&type, TYPE_ATTRIBUTES (pattern),
8857                                   (int) ATTR_FLAG_TYPE_IN_PLACE,
8858                                   args, tf_error, NULL_TREE);
8859   fixup_attribute_variants (type);
8860
8861   /* Now that our base classes are set up, enter the scope of the
8862      class, so that name lookups into base classes, etc. will work
8863      correctly.  This is precisely analogous to what we do in
8864      begin_class_definition when defining an ordinary non-template
8865      class, except we also need to push the enclosing classes.  */
8866   push_nested_class (type);
8867
8868   /* Now members are processed in the order of declaration.  */
8869   for (member = CLASSTYPE_DECL_LIST (pattern);
8870        member; member = TREE_CHAIN (member))
8871     {
8872       tree t = TREE_VALUE (member);
8873
8874       if (TREE_PURPOSE (member))
8875         {
8876           if (TYPE_P (t))
8877             {
8878               /* Build new CLASSTYPE_NESTED_UTDS.  */
8879
8880               tree newtag;
8881               bool class_template_p;
8882
8883               class_template_p = (TREE_CODE (t) != ENUMERAL_TYPE
8884                                   && TYPE_LANG_SPECIFIC (t)
8885                                   && CLASSTYPE_IS_TEMPLATE (t));
8886               /* If the member is a class template, then -- even after
8887                  substitution -- there may be dependent types in the
8888                  template argument list for the class.  We increment
8889                  PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
8890                  that function will assume that no types are dependent
8891                  when outside of a template.  */
8892               if (class_template_p)
8893                 ++processing_template_decl;
8894               newtag = tsubst (t, args, tf_error, NULL_TREE);
8895               if (class_template_p)
8896                 --processing_template_decl;
8897               if (newtag == error_mark_node)
8898                 continue;
8899
8900               if (TREE_CODE (newtag) != ENUMERAL_TYPE)
8901                 {
8902                   tree name = TYPE_IDENTIFIER (t);
8903
8904                   if (class_template_p)
8905                     /* Unfortunately, lookup_template_class sets
8906                        CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
8907                        instantiation (i.e., for the type of a member
8908                        template class nested within a template class.)
8909                        This behavior is required for
8910                        maybe_process_partial_specialization to work
8911                        correctly, but is not accurate in this case;
8912                        the TAG is not an instantiation of anything.
8913                        (The corresponding TEMPLATE_DECL is an
8914                        instantiation, but the TYPE is not.) */
8915                     CLASSTYPE_USE_TEMPLATE (newtag) = 0;
8916
8917                   /* Now, we call pushtag to put this NEWTAG into the scope of
8918                      TYPE.  We first set up the IDENTIFIER_TYPE_VALUE to avoid
8919                      pushtag calling push_template_decl.  We don't have to do
8920                      this for enums because it will already have been done in
8921                      tsubst_enum.  */
8922                   if (name)
8923                     SET_IDENTIFIER_TYPE_VALUE (name, newtag);
8924                   pushtag (name, newtag, /*tag_scope=*/ts_current);
8925                 }
8926             }
8927           else if (TREE_CODE (t) == FUNCTION_DECL
8928                    || DECL_FUNCTION_TEMPLATE_P (t))
8929             {
8930               /* Build new TYPE_METHODS.  */
8931               tree r;
8932
8933               if (TREE_CODE (t) == TEMPLATE_DECL)
8934                 ++processing_template_decl;
8935               r = tsubst (t, args, tf_error, NULL_TREE);
8936               if (TREE_CODE (t) == TEMPLATE_DECL)
8937                 --processing_template_decl;
8938               set_current_access_from_decl (r);
8939               finish_member_declaration (r);
8940               /* Instantiate members marked with attribute used.  */
8941               if (r != error_mark_node && DECL_PRESERVE_P (r))
8942                 mark_used (r);
8943             }
8944           else
8945             {
8946               /* Build new TYPE_FIELDS.  */
8947               if (TREE_CODE (t) == STATIC_ASSERT)
8948                 {
8949                   tree condition = 
8950                     tsubst_expr (STATIC_ASSERT_CONDITION (t), args, 
8951                                  tf_warning_or_error, NULL_TREE,
8952                                  /*integral_constant_expression_p=*/true);
8953                   finish_static_assert (condition,
8954                                         STATIC_ASSERT_MESSAGE (t), 
8955                                         STATIC_ASSERT_SOURCE_LOCATION (t),
8956                                         /*member_p=*/true);
8957                 }
8958               else if (TREE_CODE (t) != CONST_DECL)
8959                 {
8960                   tree r;
8961
8962                   /* The file and line for this declaration, to
8963                      assist in error message reporting.  Since we
8964                      called push_tinst_level above, we don't need to
8965                      restore these.  */
8966                   input_location = DECL_SOURCE_LOCATION (t);
8967
8968                   if (TREE_CODE (t) == TEMPLATE_DECL)
8969                     ++processing_template_decl;
8970                   r = tsubst (t, args, tf_warning_or_error, NULL_TREE);
8971                   if (TREE_CODE (t) == TEMPLATE_DECL)
8972                     --processing_template_decl;
8973                   if (TREE_CODE (r) == VAR_DECL)
8974                     {
8975                       /* In [temp.inst]:
8976
8977                            [t]he initialization (and any associated
8978                            side-effects) of a static data member does
8979                            not occur unless the static data member is
8980                            itself used in a way that requires the
8981                            definition of the static data member to
8982                            exist.
8983
8984                          Therefore, we do not substitute into the
8985                          initialized for the static data member here.  */
8986                       finish_static_data_member_decl
8987                         (r,
8988                          /*init=*/NULL_TREE,
8989                          /*init_const_expr_p=*/false,
8990                          /*asmspec_tree=*/NULL_TREE,
8991                          /*flags=*/0);
8992                       /* Instantiate members marked with attribute used.  */
8993                       if (r != error_mark_node && DECL_PRESERVE_P (r))
8994                         mark_used (r);
8995                     }
8996                   else if (TREE_CODE (r) == FIELD_DECL)
8997                     {
8998                       /* Determine whether R has a valid type and can be
8999                          completed later.  If R is invalid, then it is
9000                          replaced by error_mark_node so that it will not be
9001                          added to TYPE_FIELDS.  */
9002                       tree rtype = TREE_TYPE (r);
9003                       if (can_complete_type_without_circularity (rtype))
9004                         complete_type (rtype);
9005
9006                       if (!COMPLETE_TYPE_P (rtype))
9007                         {
9008                           cxx_incomplete_type_error (r, rtype);
9009                           r = error_mark_node;
9010                         }
9011                     }
9012
9013                   /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
9014                      such a thing will already have been added to the field
9015                      list by tsubst_enum in finish_member_declaration in the
9016                      CLASSTYPE_NESTED_UTDS case above.  */
9017                   if (!(TREE_CODE (r) == TYPE_DECL
9018                         && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
9019                         && DECL_ARTIFICIAL (r)))
9020                     {
9021                       set_current_access_from_decl (r);
9022                       finish_member_declaration (r);
9023                     }
9024                 }
9025             }
9026         }
9027       else
9028         {
9029           if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t))
9030             {
9031               /* Build new CLASSTYPE_FRIEND_CLASSES.  */
9032
9033               tree friend_type = t;
9034               bool adjust_processing_template_decl = false;
9035
9036               if (TREE_CODE (friend_type) == TEMPLATE_DECL)
9037                 {
9038                   /* template <class T> friend class C;  */
9039                   friend_type = tsubst_friend_class (friend_type, args);
9040                   adjust_processing_template_decl = true;
9041                 }
9042               else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
9043                 {
9044                   /* template <class T> friend class C::D;  */
9045                   friend_type = tsubst (friend_type, args,
9046                                         tf_warning_or_error, NULL_TREE);
9047                   if (TREE_CODE (friend_type) == TEMPLATE_DECL)
9048                     friend_type = TREE_TYPE (friend_type);
9049                   adjust_processing_template_decl = true;
9050                 }
9051               else if (TREE_CODE (friend_type) == TYPENAME_TYPE
9052                        || TREE_CODE (friend_type) == TEMPLATE_TYPE_PARM)
9053                 {
9054                   /* This could be either
9055
9056                        friend class T::C;
9057
9058                      when dependent_type_p is false or
9059
9060                        template <class U> friend class T::C;
9061
9062                      otherwise.  */
9063                   friend_type = tsubst (friend_type, args,
9064                                         tf_warning_or_error, NULL_TREE);
9065                   /* Bump processing_template_decl for correct
9066                      dependent_type_p calculation.  */
9067                   ++processing_template_decl;
9068                   if (dependent_type_p (friend_type))
9069                     adjust_processing_template_decl = true;
9070                   --processing_template_decl;
9071                 }
9072               else if (!CLASSTYPE_USE_TEMPLATE (friend_type)
9073                        && hidden_name_p (TYPE_NAME (friend_type)))
9074                 {
9075                   /* friend class C;
9076
9077                      where C hasn't been declared yet.  Let's lookup name
9078                      from namespace scope directly, bypassing any name that
9079                      come from dependent base class.  */
9080                   tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
9081
9082                   /* The call to xref_tag_from_type does injection for friend
9083                      classes.  */
9084                   push_nested_namespace (ns);
9085                   friend_type =
9086                     xref_tag_from_type (friend_type, NULL_TREE,
9087                                         /*tag_scope=*/ts_current);
9088                   pop_nested_namespace (ns);
9089                 }
9090               else if (uses_template_parms (friend_type))
9091                 /* friend class C<T>;  */
9092                 friend_type = tsubst (friend_type, args,
9093                                       tf_warning_or_error, NULL_TREE);
9094               /* Otherwise it's
9095
9096                    friend class C;
9097
9098                  where C is already declared or
9099
9100                    friend class C<int>;
9101
9102                  We don't have to do anything in these cases.  */
9103
9104               if (adjust_processing_template_decl)
9105                 /* Trick make_friend_class into realizing that the friend
9106                    we're adding is a template, not an ordinary class.  It's
9107                    important that we use make_friend_class since it will
9108                    perform some error-checking and output cross-reference
9109                    information.  */
9110                 ++processing_template_decl;
9111
9112               if (friend_type != error_mark_node)
9113                 make_friend_class (type, friend_type, /*complain=*/false);
9114
9115               if (adjust_processing_template_decl)
9116                 --processing_template_decl;
9117             }
9118           else
9119             {
9120               /* Build new DECL_FRIENDLIST.  */
9121               tree r;
9122
9123               /* The file and line for this declaration, to
9124                  assist in error message reporting.  Since we
9125                  called push_tinst_level above, we don't need to
9126                  restore these.  */
9127               input_location = DECL_SOURCE_LOCATION (t);
9128
9129               if (TREE_CODE (t) == TEMPLATE_DECL)
9130                 {
9131                   ++processing_template_decl;
9132                   push_deferring_access_checks (dk_no_check);
9133                 }
9134
9135               r = tsubst_friend_function (t, args);
9136               add_friend (type, r, /*complain=*/false);
9137               if (TREE_CODE (t) == TEMPLATE_DECL)
9138                 {
9139                   pop_deferring_access_checks ();
9140                   --processing_template_decl;
9141                 }
9142             }
9143         }
9144     }
9145
9146   if (CLASSTYPE_LAMBDA_EXPR (type))
9147     {
9148       tree decl = lambda_function (type);
9149       if (decl)
9150         {
9151           tree lambda = CLASSTYPE_LAMBDA_EXPR (type);
9152           if (LAMBDA_EXPR_DEDUCE_RETURN_TYPE_P (lambda))
9153             {
9154               apply_lambda_return_type (lambda, void_type_node);
9155               LAMBDA_EXPR_RETURN_TYPE (lambda) = NULL_TREE;
9156             }
9157           instantiate_decl (decl, false, false);
9158           maybe_add_lambda_conv_op (type);
9159         }
9160       else
9161         gcc_assert (errorcount);
9162     }
9163
9164   /* Set the file and line number information to whatever is given for
9165      the class itself.  This puts error messages involving generated
9166      implicit functions at a predictable point, and the same point
9167      that would be used for non-template classes.  */
9168   input_location = DECL_SOURCE_LOCATION (typedecl);
9169
9170   unreverse_member_declarations (type);
9171   finish_struct_1 (type);
9172   TYPE_BEING_DEFINED (type) = 0;
9173
9174   /* We don't instantiate default arguments for member functions.  14.7.1:
9175
9176      The implicit instantiation of a class template specialization causes
9177      the implicit instantiation of the declarations, but not of the
9178      definitions or default arguments, of the class member functions,
9179      member classes, static data members and member templates....  */
9180
9181   /* Some typedefs referenced from within the template code need to be access
9182      checked at template instantiation time, i.e now. These types were
9183      added to the template at parsing time. Let's get those and perform
9184      the access checks then.  */
9185   perform_typedefs_access_check (pattern, args);
9186   perform_deferred_access_checks ();
9187   pop_nested_class ();
9188   maximum_field_alignment = saved_maximum_field_alignment;
9189   pop_from_top_level ();
9190   pop_deferring_access_checks ();
9191   pop_tinst_level ();
9192
9193   /* The vtable for a template class can be emitted in any translation
9194      unit in which the class is instantiated.  When there is no key
9195      method, however, finish_struct_1 will already have added TYPE to
9196      the keyed_classes list.  */
9197   if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
9198     keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
9199
9200   return type;
9201 }
9202
9203 /* Wrapper for instantiate_class_template_1.  */
9204
9205 tree
9206 instantiate_class_template (tree type)
9207 {
9208   tree ret;
9209   timevar_push (TV_TEMPLATE_INST);
9210   ret = instantiate_class_template_1 (type);
9211   timevar_pop (TV_TEMPLATE_INST);
9212   return ret;
9213 }
9214
9215 static tree
9216 tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
9217 {
9218   tree r;
9219
9220   if (!t)
9221     r = t;
9222   else if (TYPE_P (t))
9223     r = tsubst (t, args, complain, in_decl);
9224   else
9225     {
9226       if (!(complain & tf_warning))
9227         ++c_inhibit_evaluation_warnings;
9228       r = tsubst_expr (t, args, complain, in_decl,
9229                        /*integral_constant_expression_p=*/true);
9230       if (!(complain & tf_warning))
9231         --c_inhibit_evaluation_warnings;
9232       /* Preserve the raw-reference nature of T.  */
9233       if (TREE_TYPE (t) && TREE_CODE (TREE_TYPE (t)) == REFERENCE_TYPE
9234           && REFERENCE_REF_P (r))
9235         r = TREE_OPERAND (r, 0);
9236     }
9237   return r;
9238 }
9239
9240 /* Given a function parameter pack TMPL_PARM and some function parameters
9241    instantiated from it at *SPEC_P, return a NONTYPE_ARGUMENT_PACK of them
9242    and set *SPEC_P to point at the next point in the list.  */
9243
9244 static tree
9245 extract_fnparm_pack (tree tmpl_parm, tree *spec_p)
9246 {
9247   /* Collect all of the extra "packed" parameters into an
9248      argument pack.  */
9249   tree parmvec;
9250   tree parmtypevec;
9251   tree argpack = make_node (NONTYPE_ARGUMENT_PACK);
9252   tree argtypepack = cxx_make_type (TYPE_ARGUMENT_PACK);
9253   tree spec_parm = *spec_p;
9254   int i, len;
9255
9256   for (len = 0; spec_parm; ++len, spec_parm = TREE_CHAIN (spec_parm))
9257     if (tmpl_parm
9258         && !function_parameter_expanded_from_pack_p (spec_parm, tmpl_parm))
9259       break;
9260
9261   /* Fill in PARMVEC and PARMTYPEVEC with all of the parameters.  */
9262   parmvec = make_tree_vec (len);
9263   parmtypevec = make_tree_vec (len);
9264   spec_parm = *spec_p;
9265   for (i = 0; i < len; i++, spec_parm = DECL_CHAIN (spec_parm))
9266     {
9267       TREE_VEC_ELT (parmvec, i) = spec_parm;
9268       TREE_VEC_ELT (parmtypevec, i) = TREE_TYPE (spec_parm);
9269     }
9270
9271   /* Build the argument packs.  */
9272   SET_ARGUMENT_PACK_ARGS (argpack, parmvec);
9273   SET_ARGUMENT_PACK_ARGS (argtypepack, parmtypevec);
9274   TREE_TYPE (argpack) = argtypepack;
9275   *spec_p = spec_parm;
9276
9277   return argpack;
9278 }
9279
9280 /* Give a chain SPEC_PARM of PARM_DECLs, pack them into a
9281    NONTYPE_ARGUMENT_PACK.  */
9282
9283 static tree
9284 make_fnparm_pack (tree spec_parm)
9285 {
9286   return extract_fnparm_pack (NULL_TREE, &spec_parm);
9287 }
9288
9289 /* Substitute ARGS into T, which is an pack expansion
9290    (i.e. TYPE_PACK_EXPANSION or EXPR_PACK_EXPANSION). Returns a
9291    TREE_VEC with the substituted arguments, a PACK_EXPANSION_* node
9292    (if only a partial substitution could be performed) or
9293    ERROR_MARK_NODE if there was an error.  */
9294 tree
9295 tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
9296                        tree in_decl)
9297 {
9298   tree pattern;
9299   tree pack, packs = NULL_TREE;
9300   bool unsubstituted_packs = false;
9301   bool real_packs = false;
9302   int missing_level = 0;
9303   int i, len = -1;
9304   tree result;
9305   htab_t saved_local_specializations = NULL;
9306   bool need_local_specializations = false;
9307   int levels;
9308
9309   gcc_assert (PACK_EXPANSION_P (t));
9310   pattern = PACK_EXPANSION_PATTERN (t);
9311
9312   /* Add in any args remembered from an earlier partial instantiation.  */
9313   args = add_to_template_args (PACK_EXPANSION_EXTRA_ARGS (t), args);
9314
9315   levels = TMPL_ARGS_DEPTH (args);
9316
9317   /* Determine the argument packs that will instantiate the parameter
9318      packs used in the expansion expression. While we're at it,
9319      compute the number of arguments to be expanded and make sure it
9320      is consistent.  */
9321   for (pack = PACK_EXPANSION_PARAMETER_PACKS (t); pack; 
9322        pack = TREE_CHAIN (pack))
9323     {
9324       tree parm_pack = TREE_VALUE (pack);
9325       tree arg_pack = NULL_TREE;
9326       tree orig_arg = NULL_TREE;
9327       int level = 0;
9328
9329       if (TREE_CODE (parm_pack) == BASES)
9330        {
9331          if (BASES_DIRECT (parm_pack))
9332            return calculate_direct_bases (tsubst_expr (BASES_TYPE (parm_pack),
9333                                                         args, complain, in_decl, false));
9334          else
9335            return calculate_bases (tsubst_expr (BASES_TYPE (parm_pack),
9336                                                  args, complain, in_decl, false));
9337        }
9338       if (TREE_CODE (parm_pack) == PARM_DECL)
9339         {
9340           if (at_function_scope_p ())
9341             arg_pack = retrieve_local_specialization (parm_pack);
9342           else
9343             {
9344               /* We can't rely on local_specializations for a parameter
9345                  name used later in a function declaration (such as in a
9346                  late-specified return type).  Even if it exists, it might
9347                  have the wrong value for a recursive call.  Just make a
9348                  dummy decl, since it's only used for its type.  */
9349               arg_pack = tsubst_decl (parm_pack, args, complain);
9350               if (arg_pack && FUNCTION_PARAMETER_PACK_P (arg_pack))
9351                 /* Partial instantiation of the parm_pack, we can't build
9352                    up an argument pack yet.  */
9353                 arg_pack = NULL_TREE;
9354               else
9355                 arg_pack = make_fnparm_pack (arg_pack);
9356               need_local_specializations = true;
9357             }
9358         }
9359       else
9360         {
9361           int idx;
9362           template_parm_level_and_index (parm_pack, &level, &idx);
9363
9364           if (level <= levels)
9365             arg_pack = TMPL_ARG (args, level, idx);
9366         }
9367
9368       orig_arg = arg_pack;
9369       if (arg_pack && TREE_CODE (arg_pack) == ARGUMENT_PACK_SELECT)
9370         arg_pack = ARGUMENT_PACK_SELECT_FROM_PACK (arg_pack);
9371       
9372       if (arg_pack && !ARGUMENT_PACK_P (arg_pack))
9373         /* This can only happen if we forget to expand an argument
9374            pack somewhere else. Just return an error, silently.  */
9375         {
9376           result = make_tree_vec (1);
9377           TREE_VEC_ELT (result, 0) = error_mark_node;
9378           return result;
9379         }
9380
9381       if (arg_from_parm_pack_p (arg_pack, parm_pack))
9382         /* The argument pack that the parameter maps to is just an
9383            expansion of the parameter itself, such as one would find
9384            in the implicit typedef of a class inside the class itself.
9385            Consider this parameter "unsubstituted", so that we will
9386            maintain the outer pack expansion.  */
9387         arg_pack = NULL_TREE;
9388           
9389       if (arg_pack)
9390         {
9391           int my_len = 
9392             TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack));
9393
9394           /* Don't bother trying to do a partial substitution with
9395              incomplete packs; we'll try again after deduction.  */
9396           if (ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
9397             return t;
9398
9399           if (len < 0)
9400             len = my_len;
9401           else if (len != my_len)
9402             {
9403               if (!(complain & tf_error))
9404                 /* Fail quietly.  */;
9405               else if (TREE_CODE (t) == TYPE_PACK_EXPANSION)
9406                 error ("mismatched argument pack lengths while expanding "
9407                        "%<%T%>",
9408                        pattern);
9409               else
9410                 error ("mismatched argument pack lengths while expanding "
9411                        "%<%E%>",
9412                        pattern);
9413               return error_mark_node;
9414             }
9415
9416           if (TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack)) == 1
9417               && PACK_EXPANSION_P (TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack),
9418                                                  0)))
9419             /* This isn't a real argument pack yet.  */;
9420           else
9421             real_packs = true;
9422
9423           /* Keep track of the parameter packs and their corresponding
9424              argument packs.  */
9425           packs = tree_cons (parm_pack, arg_pack, packs);
9426           TREE_TYPE (packs) = orig_arg;
9427         }
9428       else
9429         {
9430           /* We can't substitute for this parameter pack.  We use a flag as
9431              well as the missing_level counter because function parameter
9432              packs don't have a level.  */
9433           unsubstituted_packs = true;
9434           if (!missing_level || missing_level > level)
9435             missing_level = level;
9436         }
9437     }
9438
9439   /* We cannot expand this expansion expression, because we don't have
9440      all of the argument packs we need.  */
9441   if (unsubstituted_packs)
9442     {
9443       if (real_packs)
9444         {
9445           /* We got some full packs, but we can't substitute them in until we
9446              have values for all the packs.  So remember these until then.  */
9447           tree save_args;
9448
9449           t = make_pack_expansion (pattern);
9450
9451           /* The call to add_to_template_args above assumes no overlap
9452              between saved args and new args, so prune away any fake
9453              args, i.e. those that satisfied arg_from_parm_pack_p above.  */
9454           if (missing_level && levels >= missing_level)
9455             {
9456               gcc_assert (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args)
9457                           && missing_level > 1);
9458               TREE_VEC_LENGTH (args) = missing_level - 1;
9459               save_args = copy_node (args);
9460               TREE_VEC_LENGTH (args) = levels;
9461             }
9462           else
9463             save_args = args;
9464
9465           PACK_EXPANSION_EXTRA_ARGS (t) = save_args;
9466         }
9467       else
9468         {
9469           /* There were no real arguments, we're just replacing a parameter
9470              pack with another version of itself. Substitute into the
9471              pattern and return a PACK_EXPANSION_*. The caller will need to
9472              deal with that.  */
9473           if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
9474             t = tsubst_expr (pattern, args, complain, in_decl,
9475                              /*integral_constant_expression_p=*/false);
9476           else
9477             t = tsubst (pattern, args, complain, in_decl);
9478           t = make_pack_expansion (t);
9479         }
9480       return t;
9481     }
9482
9483   /* We could not find any argument packs that work.  */
9484   if (len < 0)
9485     return error_mark_node;
9486
9487   if (need_local_specializations)
9488     {
9489       /* We're in a late-specified return type, so create our own local
9490          specializations table; the current table is either NULL or (in the
9491          case of recursive unification) might have bindings that we don't
9492          want to use or alter.  */
9493       saved_local_specializations = local_specializations;
9494       local_specializations = htab_create (37,
9495                                            hash_local_specialization,
9496                                            eq_local_specializations,
9497                                            NULL);
9498     }
9499
9500   /* For each argument in each argument pack, substitute into the
9501      pattern.  */
9502   result = make_tree_vec (len);
9503   for (i = 0; i < len; ++i)
9504     {
9505       /* For parameter pack, change the substitution of the parameter
9506          pack to the ith argument in its argument pack, then expand
9507          the pattern.  */
9508       for (pack = packs; pack; pack = TREE_CHAIN (pack))
9509         {
9510           tree parm = TREE_PURPOSE (pack);
9511           tree arg;
9512
9513           /* Select the Ith argument from the pack.  */
9514           if (TREE_CODE (parm) == PARM_DECL)
9515             {
9516               if (i == 0)
9517                 {
9518                   arg = make_node (ARGUMENT_PACK_SELECT);
9519                   ARGUMENT_PACK_SELECT_FROM_PACK (arg) = TREE_VALUE (pack);
9520                   mark_used (parm);
9521                   register_local_specialization (arg, parm);
9522                 }
9523               else
9524                 arg = retrieve_local_specialization (parm);
9525             }
9526           else
9527             {
9528               int idx, level;
9529               template_parm_level_and_index (parm, &level, &idx);
9530
9531               if (i == 0)
9532                 {
9533                   arg = make_node (ARGUMENT_PACK_SELECT);
9534                   ARGUMENT_PACK_SELECT_FROM_PACK (arg) = TREE_VALUE (pack);
9535                   /* Update the corresponding argument.  */
9536                   TMPL_ARG (args, level, idx) = arg;
9537                 }
9538               else
9539                 /* Re-use the ARGUMENT_PACK_SELECT.  */
9540                 arg = TMPL_ARG (args, level, idx);
9541             }
9542           ARGUMENT_PACK_SELECT_INDEX (arg) = i;
9543         }
9544
9545       /* Substitute into the PATTERN with the altered arguments.  */
9546       if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
9547         TREE_VEC_ELT (result, i) = 
9548           tsubst_expr (pattern, args, complain, in_decl,
9549                        /*integral_constant_expression_p=*/false);
9550       else
9551         TREE_VEC_ELT (result, i) = tsubst (pattern, args, complain, in_decl);
9552
9553       if (TREE_VEC_ELT (result, i) == error_mark_node)
9554         {
9555           result = error_mark_node;
9556           break;
9557         }
9558     }
9559
9560   /* Update ARGS to restore the substitution from parameter packs to
9561      their argument packs.  */
9562   for (pack = packs; pack; pack = TREE_CHAIN (pack))
9563     {
9564       tree parm = TREE_PURPOSE (pack);
9565
9566       if (TREE_CODE (parm) == PARM_DECL)
9567         register_local_specialization (TREE_TYPE (pack), parm);
9568       else
9569         {
9570           int idx, level;
9571           template_parm_level_and_index (parm, &level, &idx);
9572           
9573           /* Update the corresponding argument.  */
9574           if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
9575             TREE_VEC_ELT (TREE_VEC_ELT (args, level -1 ), idx) =
9576               TREE_TYPE (pack);
9577           else
9578             TREE_VEC_ELT (args, idx) = TREE_TYPE (pack);
9579         }
9580     }
9581
9582   if (saved_local_specializations)
9583     {
9584       htab_delete (local_specializations);
9585       local_specializations = saved_local_specializations;
9586     }
9587   
9588   return result;
9589 }
9590
9591 /* Given PARM_DECL PARM, find the corresponding PARM_DECL in the template
9592    TMPL.  We do this using DECL_PARM_INDEX, which should work even with
9593    parameter packs; all parms generated from a function parameter pack will
9594    have the same DECL_PARM_INDEX.  */
9595
9596 tree
9597 get_pattern_parm (tree parm, tree tmpl)
9598 {
9599   tree pattern = DECL_TEMPLATE_RESULT (tmpl);
9600   tree patparm;
9601
9602   if (DECL_ARTIFICIAL (parm))
9603     {
9604       for (patparm = DECL_ARGUMENTS (pattern);
9605            patparm; patparm = DECL_CHAIN (patparm))
9606         if (DECL_ARTIFICIAL (patparm)
9607             && DECL_NAME (parm) == DECL_NAME (patparm))
9608           break;
9609     }
9610   else
9611     {
9612       patparm = FUNCTION_FIRST_USER_PARM (DECL_TEMPLATE_RESULT (tmpl));
9613       patparm = chain_index (DECL_PARM_INDEX (parm)-1, patparm);
9614       gcc_assert (DECL_PARM_INDEX (patparm)
9615                   == DECL_PARM_INDEX (parm));
9616     }
9617
9618   return patparm;
9619 }
9620
9621 /* Substitute ARGS into the vector or list of template arguments T.  */
9622
9623 static tree
9624 tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
9625 {
9626   tree orig_t = t;
9627   int len, need_new = 0, i, expanded_len_adjust = 0, out;
9628   tree *elts;
9629
9630   if (t == error_mark_node)
9631     return error_mark_node;
9632
9633   len = TREE_VEC_LENGTH (t);
9634   elts = XALLOCAVEC (tree, len);
9635
9636   for (i = 0; i < len; i++)
9637     {
9638       tree orig_arg = TREE_VEC_ELT (t, i);
9639       tree new_arg;
9640
9641       if (TREE_CODE (orig_arg) == TREE_VEC)
9642         new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
9643       else if (PACK_EXPANSION_P (orig_arg))
9644         {
9645           /* Substitute into an expansion expression.  */
9646           new_arg = tsubst_pack_expansion (orig_arg, args, complain, in_decl);
9647
9648           if (TREE_CODE (new_arg) == TREE_VEC)
9649             /* Add to the expanded length adjustment the number of
9650                expanded arguments. We subtract one from this
9651                measurement, because the argument pack expression
9652                itself is already counted as 1 in
9653                LEN. EXPANDED_LEN_ADJUST can actually be negative, if
9654                the argument pack is empty.  */
9655             expanded_len_adjust += TREE_VEC_LENGTH (new_arg) - 1;
9656         }
9657       else if (ARGUMENT_PACK_P (orig_arg))
9658         {
9659           /* Substitute into each of the arguments.  */
9660           new_arg = TYPE_P (orig_arg)
9661             ? cxx_make_type (TREE_CODE (orig_arg))
9662             : make_node (TREE_CODE (orig_arg));
9663           
9664           SET_ARGUMENT_PACK_ARGS (
9665             new_arg,
9666             tsubst_template_args (ARGUMENT_PACK_ARGS (orig_arg),
9667                                   args, complain, in_decl));
9668
9669           if (ARGUMENT_PACK_ARGS (new_arg) == error_mark_node)
9670             new_arg = error_mark_node;
9671
9672           if (TREE_CODE (new_arg) == NONTYPE_ARGUMENT_PACK) {
9673             TREE_TYPE (new_arg) = tsubst (TREE_TYPE (orig_arg), args,
9674                                           complain, in_decl);
9675             TREE_CONSTANT (new_arg) = TREE_CONSTANT (orig_arg);
9676
9677             if (TREE_TYPE (new_arg) == error_mark_node)
9678               new_arg = error_mark_node;
9679           }
9680         }
9681       else
9682         new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
9683
9684       if (new_arg == error_mark_node)
9685         return error_mark_node;
9686
9687       elts[i] = new_arg;
9688       if (new_arg != orig_arg)
9689         need_new = 1;
9690     }
9691
9692   if (!need_new)
9693     return t;
9694
9695   /* Make space for the expanded arguments coming from template
9696      argument packs.  */
9697   t = make_tree_vec (len + expanded_len_adjust);
9698   /* ORIG_T can contain TREE_VECs. That happens if ORIG_T contains the
9699      arguments for a member template.
9700      In that case each TREE_VEC in ORIG_T represents a level of template
9701      arguments, and ORIG_T won't carry any non defaulted argument count.
9702      It will rather be the nested TREE_VECs that will carry one.
9703      In other words, ORIG_T carries a non defaulted argument count only
9704      if it doesn't contain any nested TREE_VEC.  */
9705   if (NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t))
9706     {
9707       int count = GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t);
9708       count += expanded_len_adjust;
9709       SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (t, count);
9710     }
9711   for (i = 0, out = 0; i < len; i++)
9712     {
9713       if ((PACK_EXPANSION_P (TREE_VEC_ELT (orig_t, i))
9714            || ARGUMENT_PACK_P (TREE_VEC_ELT (orig_t, i)))
9715           && TREE_CODE (elts[i]) == TREE_VEC)
9716         {
9717           int idx;
9718
9719           /* Now expand the template argument pack "in place".  */
9720           for (idx = 0; idx < TREE_VEC_LENGTH (elts[i]); idx++, out++)
9721             TREE_VEC_ELT (t, out) = TREE_VEC_ELT (elts[i], idx);
9722         }
9723       else
9724         {
9725           TREE_VEC_ELT (t, out) = elts[i];
9726           out++;
9727         }
9728     }
9729
9730   return t;
9731 }
9732
9733 /* Return the result of substituting ARGS into the template parameters
9734    given by PARMS.  If there are m levels of ARGS and m + n levels of
9735    PARMS, then the result will contain n levels of PARMS.  For
9736    example, if PARMS is `template <class T> template <class U>
9737    template <T*, U, class V>' and ARGS is {{int}, {double}} then the
9738    result will be `template <int*, double, class V>'.  */
9739
9740 static tree
9741 tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
9742 {
9743   tree r = NULL_TREE;
9744   tree* new_parms;
9745
9746   /* When substituting into a template, we must set
9747      PROCESSING_TEMPLATE_DECL as the template parameters may be
9748      dependent if they are based on one-another, and the dependency
9749      predicates are short-circuit outside of templates.  */
9750   ++processing_template_decl;
9751
9752   for (new_parms = &r;
9753        TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
9754        new_parms = &(TREE_CHAIN (*new_parms)),
9755          parms = TREE_CHAIN (parms))
9756     {
9757       tree new_vec =
9758         make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
9759       int i;
9760
9761       for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
9762         {
9763           tree tuple;
9764
9765           if (parms == error_mark_node)
9766             continue;
9767
9768           tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
9769
9770           if (tuple == error_mark_node)
9771             continue;
9772
9773           TREE_VEC_ELT (new_vec, i) =
9774             tsubst_template_parm (tuple, args, complain);
9775         }
9776
9777       *new_parms =
9778         tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
9779                              - TMPL_ARGS_DEPTH (args)),
9780                    new_vec, NULL_TREE);
9781     }
9782
9783   --processing_template_decl;
9784
9785   return r;
9786 }
9787
9788 /* Return the result of substituting ARGS into one template parameter
9789    given by T. T Must be a TREE_LIST which TREE_VALUE is the template
9790    parameter and which TREE_PURPOSE is the default argument of the
9791    template parameter.  */
9792
9793 static tree
9794 tsubst_template_parm (tree t, tree args, tsubst_flags_t complain)
9795 {
9796   tree default_value, parm_decl;
9797
9798   if (args == NULL_TREE
9799       || t == NULL_TREE
9800       || t == error_mark_node)
9801     return t;
9802
9803   gcc_assert (TREE_CODE (t) == TREE_LIST);
9804
9805   default_value = TREE_PURPOSE (t);
9806   parm_decl = TREE_VALUE (t);
9807
9808   parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
9809   if (TREE_CODE (parm_decl) == PARM_DECL
9810       && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl), complain))
9811     parm_decl = error_mark_node;
9812   default_value = tsubst_template_arg (default_value, args,
9813                                        complain, NULL_TREE);
9814
9815   return build_tree_list (default_value, parm_decl);
9816 }
9817
9818 /* Substitute the ARGS into the indicated aggregate (or enumeration)
9819    type T.  If T is not an aggregate or enumeration type, it is
9820    handled as if by tsubst.  IN_DECL is as for tsubst.  If
9821    ENTERING_SCOPE is nonzero, T is the context for a template which
9822    we are presently tsubst'ing.  Return the substituted value.  */
9823
9824 static tree
9825 tsubst_aggr_type (tree t,
9826                   tree args,
9827                   tsubst_flags_t complain,
9828                   tree in_decl,
9829                   int entering_scope)
9830 {
9831   if (t == NULL_TREE)
9832     return NULL_TREE;
9833
9834   switch (TREE_CODE (t))
9835     {
9836     case RECORD_TYPE:
9837       if (TYPE_PTRMEMFUNC_P (t))
9838         return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
9839
9840       /* Else fall through.  */
9841     case ENUMERAL_TYPE:
9842     case UNION_TYPE:
9843       if (TYPE_TEMPLATE_INFO (t) && uses_template_parms (t))
9844         {
9845           tree argvec;
9846           tree context;
9847           tree r;
9848           int saved_unevaluated_operand;
9849           int saved_inhibit_evaluation_warnings;
9850
9851           /* In "sizeof(X<I>)" we need to evaluate "I".  */
9852           saved_unevaluated_operand = cp_unevaluated_operand;
9853           cp_unevaluated_operand = 0;
9854           saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
9855           c_inhibit_evaluation_warnings = 0;
9856
9857           /* First, determine the context for the type we are looking
9858              up.  */
9859           context = TYPE_CONTEXT (t);
9860           if (context && TYPE_P (context))
9861             {
9862               context = tsubst_aggr_type (context, args, complain,
9863                                           in_decl, /*entering_scope=*/1);
9864               /* If context is a nested class inside a class template,
9865                  it may still need to be instantiated (c++/33959).  */
9866               context = complete_type (context);
9867             }
9868
9869           /* Then, figure out what arguments are appropriate for the
9870              type we are trying to find.  For example, given:
9871
9872                template <class T> struct S;
9873                template <class T, class U> void f(T, U) { S<U> su; }
9874
9875              and supposing that we are instantiating f<int, double>,
9876              then our ARGS will be {int, double}, but, when looking up
9877              S we only want {double}.  */
9878           argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
9879                                          complain, in_decl);
9880           if (argvec == error_mark_node)
9881             r = error_mark_node;
9882           else
9883             {
9884               r = lookup_template_class (t, argvec, in_decl, context,
9885                                          entering_scope, complain);
9886               r = cp_build_qualified_type_real (r, cp_type_quals (t), complain);
9887             }
9888
9889           cp_unevaluated_operand = saved_unevaluated_operand;
9890           c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
9891
9892           return r;
9893         }
9894       else
9895         /* This is not a template type, so there's nothing to do.  */
9896         return t;
9897
9898     default:
9899       return tsubst (t, args, complain, in_decl);
9900     }
9901 }
9902
9903 /* Substitute into the default argument ARG (a default argument for
9904    FN), which has the indicated TYPE.  */
9905
9906 tree
9907 tsubst_default_argument (tree fn, tree type, tree arg)
9908 {
9909   tree saved_class_ptr = NULL_TREE;
9910   tree saved_class_ref = NULL_TREE;
9911
9912   /* This can happen in invalid code.  */
9913   if (TREE_CODE (arg) == DEFAULT_ARG)
9914     return arg;
9915
9916   /* This default argument came from a template.  Instantiate the
9917      default argument here, not in tsubst.  In the case of
9918      something like:
9919
9920        template <class T>
9921        struct S {
9922          static T t();
9923          void f(T = t());
9924        };
9925
9926      we must be careful to do name lookup in the scope of S<T>,
9927      rather than in the current class.  */
9928   push_access_scope (fn);
9929   /* The "this" pointer is not valid in a default argument.  */
9930   if (cfun)
9931     {
9932       saved_class_ptr = current_class_ptr;
9933       cp_function_chain->x_current_class_ptr = NULL_TREE;
9934       saved_class_ref = current_class_ref;
9935       cp_function_chain->x_current_class_ref = NULL_TREE;
9936     }
9937
9938   push_deferring_access_checks(dk_no_deferred);
9939   /* The default argument expression may cause implicitly defined
9940      member functions to be synthesized, which will result in garbage
9941      collection.  We must treat this situation as if we were within
9942      the body of function so as to avoid collecting live data on the
9943      stack.  */
9944   ++function_depth;
9945   arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
9946                      tf_warning_or_error, NULL_TREE,
9947                      /*integral_constant_expression_p=*/false);
9948   --function_depth;
9949   pop_deferring_access_checks();
9950
9951   /* Restore the "this" pointer.  */
9952   if (cfun)
9953     {
9954       cp_function_chain->x_current_class_ptr = saved_class_ptr;
9955       cp_function_chain->x_current_class_ref = saved_class_ref;
9956     }
9957
9958   /* Make sure the default argument is reasonable.  */
9959   arg = check_default_argument (type, arg);
9960
9961   pop_access_scope (fn);
9962
9963   return arg;
9964 }
9965
9966 /* Substitute into all the default arguments for FN.  */
9967
9968 static void
9969 tsubst_default_arguments (tree fn)
9970 {
9971   tree arg;
9972   tree tmpl_args;
9973
9974   tmpl_args = DECL_TI_ARGS (fn);
9975
9976   /* If this function is not yet instantiated, we certainly don't need
9977      its default arguments.  */
9978   if (uses_template_parms (tmpl_args))
9979     return;
9980   /* Don't do this again for clones.  */
9981   if (DECL_CLONED_FUNCTION_P (fn))
9982     return;
9983
9984   for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
9985        arg;
9986        arg = TREE_CHAIN (arg))
9987     if (TREE_PURPOSE (arg))
9988       TREE_PURPOSE (arg) = tsubst_default_argument (fn,
9989                                                     TREE_VALUE (arg),
9990                                                     TREE_PURPOSE (arg));
9991 }
9992
9993 /* Substitute the ARGS into the T, which is a _DECL.  Return the
9994    result of the substitution.  Issue error and warning messages under
9995    control of COMPLAIN.  */
9996
9997 static tree
9998 tsubst_decl (tree t, tree args, tsubst_flags_t complain)
9999 {
10000 #define RETURN(EXP) do { r = (EXP); goto out; } while(0)
10001   location_t saved_loc;
10002   tree r = NULL_TREE;
10003   tree in_decl = t;
10004   hashval_t hash = 0;
10005
10006   /* Set the filename and linenumber to improve error-reporting.  */
10007   saved_loc = input_location;
10008   input_location = DECL_SOURCE_LOCATION (t);
10009
10010   switch (TREE_CODE (t))
10011     {
10012     case TEMPLATE_DECL:
10013       {
10014         /* We can get here when processing a member function template,
10015            member class template, or template template parameter.  */
10016         tree decl = DECL_TEMPLATE_RESULT (t);
10017         tree spec;
10018         tree tmpl_args;
10019         tree full_args;
10020
10021         if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
10022           {
10023             /* Template template parameter is treated here.  */
10024             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10025             if (new_type == error_mark_node)
10026               RETURN (error_mark_node);
10027
10028             r = copy_decl (t);
10029             DECL_CHAIN (r) = NULL_TREE;
10030             TREE_TYPE (r) = new_type;
10031             DECL_TEMPLATE_RESULT (r)
10032               = build_decl (DECL_SOURCE_LOCATION (decl),
10033                             TYPE_DECL, DECL_NAME (decl), new_type);
10034             DECL_TEMPLATE_PARMS (r)
10035               = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
10036                                        complain);
10037             TYPE_NAME (new_type) = r;
10038             break;
10039           }
10040
10041         /* We might already have an instance of this template.
10042            The ARGS are for the surrounding class type, so the
10043            full args contain the tsubst'd args for the context,
10044            plus the innermost args from the template decl.  */
10045         tmpl_args = DECL_CLASS_TEMPLATE_P (t)
10046           ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
10047           : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
10048         /* Because this is a template, the arguments will still be
10049            dependent, even after substitution.  If
10050            PROCESSING_TEMPLATE_DECL is not set, the dependency
10051            predicates will short-circuit.  */
10052         ++processing_template_decl;
10053         full_args = tsubst_template_args (tmpl_args, args,
10054                                           complain, in_decl);
10055         --processing_template_decl;
10056         if (full_args == error_mark_node)
10057           RETURN (error_mark_node);
10058
10059         /* If this is a default template template argument,
10060            tsubst might not have changed anything.  */
10061         if (full_args == tmpl_args)
10062           RETURN (t);
10063
10064         hash = hash_tmpl_and_args (t, full_args);
10065         spec = retrieve_specialization (t, full_args, hash);
10066         if (spec != NULL_TREE)
10067           {
10068             r = spec;
10069             break;
10070           }
10071
10072         /* Make a new template decl.  It will be similar to the
10073            original, but will record the current template arguments.
10074            We also create a new function declaration, which is just
10075            like the old one, but points to this new template, rather
10076            than the old one.  */
10077         r = copy_decl (t);
10078         gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
10079         DECL_CHAIN (r) = NULL_TREE;
10080
10081         DECL_TEMPLATE_INFO (r) = build_template_info (t, args);
10082
10083         if (TREE_CODE (decl) == TYPE_DECL
10084             && !TYPE_DECL_ALIAS_P (decl))
10085           {
10086             tree new_type;
10087             ++processing_template_decl;
10088             new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10089             --processing_template_decl;
10090             if (new_type == error_mark_node)
10091               RETURN (error_mark_node);
10092
10093             TREE_TYPE (r) = new_type;
10094             CLASSTYPE_TI_TEMPLATE (new_type) = r;
10095             DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
10096             DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
10097             DECL_CONTEXT (r) = TYPE_CONTEXT (new_type);
10098           }
10099         else
10100           {
10101             tree new_decl;
10102             ++processing_template_decl;
10103             new_decl = tsubst (decl, args, complain, in_decl);
10104             --processing_template_decl;
10105             if (new_decl == error_mark_node)
10106               RETURN (error_mark_node);
10107
10108             DECL_TEMPLATE_RESULT (r) = new_decl;
10109             DECL_TI_TEMPLATE (new_decl) = r;
10110             TREE_TYPE (r) = TREE_TYPE (new_decl);
10111             DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
10112             DECL_CONTEXT (r) = DECL_CONTEXT (new_decl);
10113           }
10114
10115         SET_DECL_IMPLICIT_INSTANTIATION (r);
10116         DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
10117         DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
10118
10119         /* The template parameters for this new template are all the
10120            template parameters for the old template, except the
10121            outermost level of parameters.  */
10122         DECL_TEMPLATE_PARMS (r)
10123           = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
10124                                    complain);
10125
10126         if (PRIMARY_TEMPLATE_P (t))
10127           DECL_PRIMARY_TEMPLATE (r) = r;
10128
10129         if (TREE_CODE (decl) != TYPE_DECL)
10130           /* Record this non-type partial instantiation.  */
10131           register_specialization (r, t,
10132                                    DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)),
10133                                    false, hash);
10134       }
10135       break;
10136
10137     case FUNCTION_DECL:
10138       {
10139         tree ctx;
10140         tree argvec = NULL_TREE;
10141         tree *friends;
10142         tree gen_tmpl;
10143         tree type;
10144         int member;
10145         int args_depth;
10146         int parms_depth;
10147
10148         /* Nobody should be tsubst'ing into non-template functions.  */
10149         gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
10150
10151         if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
10152           {
10153             tree spec;
10154             bool dependent_p;
10155
10156             /* If T is not dependent, just return it.  We have to
10157                increment PROCESSING_TEMPLATE_DECL because
10158                value_dependent_expression_p assumes that nothing is
10159                dependent when PROCESSING_TEMPLATE_DECL is zero.  */
10160             ++processing_template_decl;
10161             dependent_p = value_dependent_expression_p (t);
10162             --processing_template_decl;
10163             if (!dependent_p)
10164               RETURN (t);
10165
10166             /* Calculate the most general template of which R is a
10167                specialization, and the complete set of arguments used to
10168                specialize R.  */
10169             gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
10170             argvec = tsubst_template_args (DECL_TI_ARGS
10171                                           (DECL_TEMPLATE_RESULT
10172                                                  (DECL_TI_TEMPLATE (t))),
10173                                            args, complain, in_decl);
10174             if (argvec == error_mark_node)
10175               RETURN (error_mark_node);
10176
10177             /* Check to see if we already have this specialization.  */
10178             hash = hash_tmpl_and_args (gen_tmpl, argvec);
10179             spec = retrieve_specialization (gen_tmpl, argvec, hash);
10180
10181             if (spec)
10182               {
10183                 r = spec;
10184                 break;
10185               }
10186
10187             /* We can see more levels of arguments than parameters if
10188                there was a specialization of a member template, like
10189                this:
10190
10191                  template <class T> struct S { template <class U> void f(); }
10192                  template <> template <class U> void S<int>::f(U);
10193
10194                Here, we'll be substituting into the specialization,
10195                because that's where we can find the code we actually
10196                want to generate, but we'll have enough arguments for
10197                the most general template.
10198
10199                We also deal with the peculiar case:
10200
10201                  template <class T> struct S {
10202                    template <class U> friend void f();
10203                  };
10204                  template <class U> void f() {}
10205                  template S<int>;
10206                  template void f<double>();
10207
10208                Here, the ARGS for the instantiation of will be {int,
10209                double}.  But, we only need as many ARGS as there are
10210                levels of template parameters in CODE_PATTERN.  We are
10211                careful not to get fooled into reducing the ARGS in
10212                situations like:
10213
10214                  template <class T> struct S { template <class U> void f(U); }
10215                  template <class T> template <> void S<T>::f(int) {}
10216
10217                which we can spot because the pattern will be a
10218                specialization in this case.  */
10219             args_depth = TMPL_ARGS_DEPTH (args);
10220             parms_depth =
10221               TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
10222             if (args_depth > parms_depth
10223                 && !DECL_TEMPLATE_SPECIALIZATION (t))
10224               args = get_innermost_template_args (args, parms_depth);
10225           }
10226         else
10227           {
10228             /* This special case arises when we have something like this:
10229
10230                  template <class T> struct S {
10231                    friend void f<int>(int, double);
10232                  };
10233
10234                Here, the DECL_TI_TEMPLATE for the friend declaration
10235                will be an IDENTIFIER_NODE.  We are being called from
10236                tsubst_friend_function, and we want only to create a
10237                new decl (R) with appropriate types so that we can call
10238                determine_specialization.  */
10239             gen_tmpl = NULL_TREE;
10240           }
10241
10242         if (DECL_CLASS_SCOPE_P (t))
10243           {
10244             if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
10245               member = 2;
10246             else
10247               member = 1;
10248             ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
10249                                     complain, t, /*entering_scope=*/1);
10250           }
10251         else
10252           {
10253             member = 0;
10254             ctx = DECL_CONTEXT (t);
10255           }
10256         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10257         if (type == error_mark_node)
10258           RETURN (error_mark_node);
10259
10260         /* We do NOT check for matching decls pushed separately at this
10261            point, as they may not represent instantiations of this
10262            template, and in any case are considered separate under the
10263            discrete model.  */
10264         r = copy_decl (t);
10265         DECL_USE_TEMPLATE (r) = 0;
10266         TREE_TYPE (r) = type;
10267         /* Clear out the mangled name and RTL for the instantiation.  */
10268         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
10269         SET_DECL_RTL (r, NULL);
10270         /* Leave DECL_INITIAL set on deleted instantiations.  */
10271         if (!DECL_DELETED_FN (r))
10272           DECL_INITIAL (r) = NULL_TREE;
10273         DECL_CONTEXT (r) = ctx;
10274
10275         if (member && DECL_CONV_FN_P (r))
10276           /* Type-conversion operator.  Reconstruct the name, in
10277              case it's the name of one of the template's parameters.  */
10278           DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
10279
10280         DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
10281                                      complain, t);
10282         DECL_RESULT (r) = NULL_TREE;
10283
10284         TREE_STATIC (r) = 0;
10285         TREE_PUBLIC (r) = TREE_PUBLIC (t);
10286         DECL_EXTERNAL (r) = 1;
10287         /* If this is an instantiation of a function with internal
10288            linkage, we already know what object file linkage will be
10289            assigned to the instantiation.  */
10290         DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
10291         DECL_DEFER_OUTPUT (r) = 0;
10292         DECL_CHAIN (r) = NULL_TREE;
10293         DECL_PENDING_INLINE_INFO (r) = 0;
10294         DECL_PENDING_INLINE_P (r) = 0;
10295         DECL_SAVED_TREE (r) = NULL_TREE;
10296         DECL_STRUCT_FUNCTION (r) = NULL;
10297         TREE_USED (r) = 0;
10298         /* We'll re-clone as appropriate in instantiate_template.  */
10299         DECL_CLONED_FUNCTION (r) = NULL_TREE;
10300
10301         /* If we aren't complaining now, return on error before we register
10302            the specialization so that we'll complain eventually.  */
10303         if ((complain & tf_error) == 0
10304             && IDENTIFIER_OPNAME_P (DECL_NAME (r))
10305             && !grok_op_properties (r, /*complain=*/false))
10306           RETURN (error_mark_node);
10307
10308         /* Set up the DECL_TEMPLATE_INFO for R.  There's no need to do
10309            this in the special friend case mentioned above where
10310            GEN_TMPL is NULL.  */
10311         if (gen_tmpl)
10312           {
10313             DECL_TEMPLATE_INFO (r)
10314               = build_template_info (gen_tmpl, argvec);
10315             SET_DECL_IMPLICIT_INSTANTIATION (r);
10316             register_specialization (r, gen_tmpl, argvec, false, hash);
10317
10318             /* We're not supposed to instantiate default arguments
10319                until they are called, for a template.  But, for a
10320                declaration like:
10321
10322                  template <class T> void f ()
10323                  { extern void g(int i = T()); }
10324
10325                we should do the substitution when the template is
10326                instantiated.  We handle the member function case in
10327                instantiate_class_template since the default arguments
10328                might refer to other members of the class.  */
10329             if (!member
10330                 && !PRIMARY_TEMPLATE_P (gen_tmpl)
10331                 && !uses_template_parms (argvec))
10332               tsubst_default_arguments (r);
10333           }
10334         else
10335           DECL_TEMPLATE_INFO (r) = NULL_TREE;
10336
10337         /* Copy the list of befriending classes.  */
10338         for (friends = &DECL_BEFRIENDING_CLASSES (r);
10339              *friends;
10340              friends = &TREE_CHAIN (*friends))
10341           {
10342             *friends = copy_node (*friends);
10343             TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
10344                                             args, complain,
10345                                             in_decl);
10346           }
10347
10348         if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
10349           {
10350             maybe_retrofit_in_chrg (r);
10351             if (DECL_CONSTRUCTOR_P (r))
10352               grok_ctor_properties (ctx, r);
10353             /* If this is an instantiation of a member template, clone it.
10354                If it isn't, that'll be handled by
10355                clone_constructors_and_destructors.  */
10356             if (PRIMARY_TEMPLATE_P (gen_tmpl))
10357               clone_function_decl (r, /*update_method_vec_p=*/0);
10358           }
10359         else if ((complain & tf_error) != 0
10360                  && IDENTIFIER_OPNAME_P (DECL_NAME (r))
10361                  && !grok_op_properties (r, /*complain=*/true))
10362           RETURN (error_mark_node);
10363
10364         if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
10365           SET_DECL_FRIEND_CONTEXT (r,
10366                                    tsubst (DECL_FRIEND_CONTEXT (t),
10367                                             args, complain, in_decl));
10368
10369         /* Possibly limit visibility based on template args.  */
10370         DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
10371         if (DECL_VISIBILITY_SPECIFIED (t))
10372           {
10373             DECL_VISIBILITY_SPECIFIED (r) = 0;
10374             DECL_ATTRIBUTES (r)
10375               = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
10376           }
10377         determine_visibility (r);
10378         if (DECL_DEFAULTED_OUTSIDE_CLASS_P (r)
10379             && !processing_template_decl)
10380           defaulted_late_check (r);
10381
10382         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
10383                                         args, complain, in_decl);
10384       }
10385       break;
10386
10387     case PARM_DECL:
10388       {
10389         tree type = NULL_TREE;
10390         int i, len = 1;
10391         tree expanded_types = NULL_TREE;
10392         tree prev_r = NULL_TREE;
10393         tree first_r = NULL_TREE;
10394
10395         if (FUNCTION_PARAMETER_PACK_P (t))
10396           {
10397             /* If there is a local specialization that isn't a
10398                parameter pack, it means that we're doing a "simple"
10399                substitution from inside tsubst_pack_expansion. Just
10400                return the local specialization (which will be a single
10401                parm).  */
10402             tree spec = retrieve_local_specialization (t);
10403             if (spec 
10404                 && TREE_CODE (spec) == PARM_DECL
10405                 && TREE_CODE (TREE_TYPE (spec)) != TYPE_PACK_EXPANSION)
10406               RETURN (spec);
10407
10408             /* Expand the TYPE_PACK_EXPANSION that provides the types for
10409                the parameters in this function parameter pack.  */
10410             expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
10411                                                     complain, in_decl);
10412             if (TREE_CODE (expanded_types) == TREE_VEC)
10413               {
10414                 len = TREE_VEC_LENGTH (expanded_types);
10415
10416                 /* Zero-length parameter packs are boring. Just substitute
10417                    into the chain.  */
10418                 if (len == 0)
10419                   RETURN (tsubst (TREE_CHAIN (t), args, complain,
10420                                   TREE_CHAIN (t)));
10421               }
10422             else
10423               {
10424                 /* All we did was update the type. Make a note of that.  */
10425                 type = expanded_types;
10426                 expanded_types = NULL_TREE;
10427               }
10428           }
10429
10430         /* Loop through all of the parameter's we'll build. When T is
10431            a function parameter pack, LEN is the number of expanded
10432            types in EXPANDED_TYPES; otherwise, LEN is 1.  */
10433         r = NULL_TREE;
10434         for (i = 0; i < len; ++i)
10435           {
10436             prev_r = r;
10437             r = copy_node (t);
10438             if (DECL_TEMPLATE_PARM_P (t))
10439               SET_DECL_TEMPLATE_PARM_P (r);
10440
10441             if (expanded_types)
10442               /* We're on the Ith parameter of the function parameter
10443                  pack.  */
10444               {
10445                 /* An argument of a function parameter pack is not a parameter
10446                    pack.  */
10447                 FUNCTION_PARAMETER_PACK_P (r) = false;
10448
10449                 /* Get the Ith type.  */
10450                 type = TREE_VEC_ELT (expanded_types, i);
10451
10452                 if (DECL_NAME (r))
10453                   /* Rename the parameter to include the index.  */
10454                   DECL_NAME (r) =
10455                     make_ith_pack_parameter_name (DECL_NAME (r), i);
10456               }
10457             else if (!type)
10458               /* We're dealing with a normal parameter.  */
10459               type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10460
10461             type = type_decays_to (type);
10462             TREE_TYPE (r) = type;
10463             cp_apply_type_quals_to_decl (cp_type_quals (type), r);
10464
10465             if (DECL_INITIAL (r))
10466               {
10467                 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
10468                   DECL_INITIAL (r) = TREE_TYPE (r);
10469                 else
10470                   DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
10471                                              complain, in_decl);
10472               }
10473
10474             DECL_CONTEXT (r) = NULL_TREE;
10475
10476             if (!DECL_TEMPLATE_PARM_P (r))
10477               DECL_ARG_TYPE (r) = type_passed_as (type);
10478
10479             apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
10480                                             args, complain, in_decl);
10481
10482             /* Keep track of the first new parameter we
10483                generate. That's what will be returned to the
10484                caller.  */
10485             if (!first_r)
10486               first_r = r;
10487
10488             /* Build a proper chain of parameters when substituting
10489                into a function parameter pack.  */
10490             if (prev_r)
10491               DECL_CHAIN (prev_r) = r;
10492           }
10493
10494         if (DECL_CHAIN (t))
10495           DECL_CHAIN (r) = tsubst (DECL_CHAIN (t), args,
10496                                    complain, DECL_CHAIN (t));
10497
10498         /* FIRST_R contains the start of the chain we've built.  */
10499         r = first_r;
10500       }
10501       break;
10502
10503     case FIELD_DECL:
10504       {
10505         tree type;
10506
10507         r = copy_decl (t);
10508         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10509         if (type == error_mark_node)
10510           RETURN (error_mark_node);
10511         TREE_TYPE (r) = type;
10512         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
10513
10514         if (DECL_C_BIT_FIELD (r))
10515           /* For bit-fields, DECL_INITIAL gives the number of bits.  For
10516              non-bit-fields DECL_INITIAL is a non-static data member
10517              initializer, which gets deferred instantiation.  */
10518           DECL_INITIAL (r)
10519             = tsubst_expr (DECL_INITIAL (t), args,
10520                            complain, in_decl,
10521                            /*integral_constant_expression_p=*/true);
10522         else if (DECL_INITIAL (t))
10523           {
10524             /* Set up DECL_TEMPLATE_INFO so that we can get at the
10525                NSDMI in perform_member_init.  Still set DECL_INITIAL
10526                so that we know there is one.  */
10527             DECL_INITIAL (r) = void_zero_node;
10528             gcc_assert (DECL_LANG_SPECIFIC (r) == NULL);
10529             retrofit_lang_decl (r);
10530             DECL_TEMPLATE_INFO (r) = build_template_info (t, args);
10531           }
10532         /* We don't have to set DECL_CONTEXT here; it is set by
10533            finish_member_declaration.  */
10534         DECL_CHAIN (r) = NULL_TREE;
10535         if (VOID_TYPE_P (type))
10536           error ("instantiation of %q+D as type %qT", r, type);
10537
10538         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
10539                                         args, complain, in_decl);
10540       }
10541       break;
10542
10543     case USING_DECL:
10544       /* We reach here only for member using decls.  */
10545       if (DECL_DEPENDENT_P (t))
10546         {
10547           r = do_class_using_decl
10548             (tsubst_copy (USING_DECL_SCOPE (t), args, complain, in_decl),
10549              tsubst_copy (DECL_NAME (t), args, complain, in_decl));
10550           if (!r)
10551             r = error_mark_node;
10552           else
10553             {
10554               TREE_PROTECTED (r) = TREE_PROTECTED (t);
10555               TREE_PRIVATE (r) = TREE_PRIVATE (t);
10556             }
10557         }
10558       else
10559         {
10560           r = copy_node (t);
10561           DECL_CHAIN (r) = NULL_TREE;
10562         }
10563       break;
10564
10565     case TYPE_DECL:
10566     case VAR_DECL:
10567       {
10568         tree argvec = NULL_TREE;
10569         tree gen_tmpl = NULL_TREE;
10570         tree spec;
10571         tree tmpl = NULL_TREE;
10572         tree ctx;
10573         tree type = NULL_TREE;
10574         bool local_p;
10575
10576         if (TREE_CODE (t) == TYPE_DECL
10577             && t == TYPE_MAIN_DECL (TREE_TYPE (t)))
10578           {
10579             /* If this is the canonical decl, we don't have to
10580                mess with instantiations, and often we can't (for
10581                typename, template type parms and such).  Note that
10582                TYPE_NAME is not correct for the above test if
10583                we've copied the type for a typedef.  */
10584             type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10585             if (type == error_mark_node)
10586               RETURN (error_mark_node);
10587             r = TYPE_NAME (type);
10588             break;
10589           }
10590
10591         /* Check to see if we already have the specialization we
10592            need.  */
10593         spec = NULL_TREE;
10594         if (DECL_CLASS_SCOPE_P (t) || DECL_NAMESPACE_SCOPE_P (t))
10595           {
10596             /* T is a static data member or namespace-scope entity.
10597                We have to substitute into namespace-scope variables
10598                (even though such entities are never templates) because
10599                of cases like:
10600                
10601                  template <class T> void f() { extern T t; }
10602
10603                where the entity referenced is not known until
10604                instantiation time.  */
10605             local_p = false;
10606             ctx = DECL_CONTEXT (t);
10607             if (DECL_CLASS_SCOPE_P (t))
10608               {
10609                 ctx = tsubst_aggr_type (ctx, args,
10610                                         complain,
10611                                         in_decl, /*entering_scope=*/1);
10612                 /* If CTX is unchanged, then T is in fact the
10613                    specialization we want.  That situation occurs when
10614                    referencing a static data member within in its own
10615                    class.  We can use pointer equality, rather than
10616                    same_type_p, because DECL_CONTEXT is always
10617                    canonical...  */
10618                 if (ctx == DECL_CONTEXT (t)
10619                     && (TREE_CODE (t) != TYPE_DECL
10620                         /* ... unless T is a member template; in which
10621                            case our caller can be willing to create a
10622                            specialization of that template represented
10623                            by T.  */
10624                         || !(DECL_TI_TEMPLATE (t)
10625                              && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (t)))))
10626                   spec = t;
10627               }
10628
10629             if (!spec)
10630               {
10631                 tmpl = DECL_TI_TEMPLATE (t);
10632                 gen_tmpl = most_general_template (tmpl);
10633                 argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
10634                 hash = hash_tmpl_and_args (gen_tmpl, argvec);
10635                 spec = retrieve_specialization (gen_tmpl, argvec, hash);
10636               }
10637           }
10638         else
10639           {
10640             /* A local variable.  */
10641             local_p = true;
10642             /* Subsequent calls to pushdecl will fill this in.  */
10643             ctx = NULL_TREE;
10644             spec = retrieve_local_specialization (t);
10645           }
10646         /* If we already have the specialization we need, there is
10647            nothing more to do.  */ 
10648         if (spec)
10649           {
10650             r = spec;
10651             break;
10652           }
10653
10654         /* Create a new node for the specialization we need.  */
10655         r = copy_decl (t);
10656         if (type == NULL_TREE)
10657           {
10658             if (is_typedef_decl (t))
10659               type = DECL_ORIGINAL_TYPE (t);
10660             else
10661               type = TREE_TYPE (t);
10662             if (TREE_CODE (t) == VAR_DECL
10663                 && VAR_HAD_UNKNOWN_BOUND (t)
10664                 && type != error_mark_node)
10665               type = strip_array_domain (type);
10666             type = tsubst (type, args, complain, in_decl);
10667           }
10668         if (TREE_CODE (r) == VAR_DECL)
10669           {
10670             /* Even if the original location is out of scope, the
10671                newly substituted one is not.  */
10672             DECL_DEAD_FOR_LOCAL (r) = 0;
10673             DECL_INITIALIZED_P (r) = 0;
10674             DECL_TEMPLATE_INSTANTIATED (r) = 0;
10675             if (type == error_mark_node)
10676               RETURN (error_mark_node);
10677             if (TREE_CODE (type) == FUNCTION_TYPE)
10678               {
10679                 /* It may seem that this case cannot occur, since:
10680
10681                      typedef void f();
10682                      void g() { f x; }
10683
10684                    declares a function, not a variable.  However:
10685       
10686                      typedef void f();
10687                      template <typename T> void g() { T t; }
10688                      template void g<f>();
10689
10690                    is an attempt to declare a variable with function
10691                    type.  */
10692                 error ("variable %qD has function type",
10693                        /* R is not yet sufficiently initialized, so we
10694                           just use its name.  */
10695                        DECL_NAME (r));
10696                 RETURN (error_mark_node);
10697               }
10698             type = complete_type (type);
10699             /* Wait until cp_finish_decl to set this again, to handle
10700                circular dependency (template/instantiate6.C). */
10701             DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r) = 0;
10702             type = check_var_type (DECL_NAME (r), type);
10703
10704             if (DECL_HAS_VALUE_EXPR_P (t))
10705               {
10706                 tree ve = DECL_VALUE_EXPR (t);
10707                 ve = tsubst_expr (ve, args, complain, in_decl,
10708                                   /*constant_expression_p=*/false);
10709                 if (REFERENCE_REF_P (ve))
10710                   {
10711                     gcc_assert (TREE_CODE (type) == REFERENCE_TYPE);
10712                     ve = TREE_OPERAND (ve, 0);
10713                   }
10714                 SET_DECL_VALUE_EXPR (r, ve);
10715               }
10716           }
10717         else if (DECL_SELF_REFERENCE_P (t))
10718           SET_DECL_SELF_REFERENCE_P (r);
10719         TREE_TYPE (r) = type;
10720         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
10721         DECL_CONTEXT (r) = ctx;
10722         /* Clear out the mangled name and RTL for the instantiation.  */
10723         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
10724         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
10725           SET_DECL_RTL (r, NULL);
10726         /* The initializer must not be expanded until it is required;
10727            see [temp.inst].  */
10728         DECL_INITIAL (r) = NULL_TREE;
10729         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
10730           SET_DECL_RTL (r, NULL);
10731         DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
10732         if (TREE_CODE (r) == VAR_DECL)
10733           {
10734             /* Possibly limit visibility based on template args.  */
10735             DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
10736             if (DECL_VISIBILITY_SPECIFIED (t))
10737               {
10738                 DECL_VISIBILITY_SPECIFIED (r) = 0;
10739                 DECL_ATTRIBUTES (r)
10740                   = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
10741               }
10742             determine_visibility (r);
10743           }
10744
10745         if (!local_p)
10746           {
10747             /* A static data member declaration is always marked
10748                external when it is declared in-class, even if an
10749                initializer is present.  We mimic the non-template
10750                processing here.  */
10751             DECL_EXTERNAL (r) = 1;
10752
10753             register_specialization (r, gen_tmpl, argvec, false, hash);
10754             DECL_TEMPLATE_INFO (r) = build_template_info (tmpl, argvec);
10755             SET_DECL_IMPLICIT_INSTANTIATION (r);
10756           }
10757         else if (cp_unevaluated_operand)
10758           {
10759             /* We're substituting this var in a decltype outside of its
10760                scope, such as for a lambda return type.  Don't add it to
10761                local_specializations, do perform auto deduction.  */
10762             tree auto_node = type_uses_auto (type);
10763             if (auto_node)
10764               {
10765                 tree init
10766                   = tsubst_expr (DECL_INITIAL (t), args, complain, in_decl,
10767                                  /*constant_expression_p=*/false);
10768                 init = resolve_nondeduced_context (init);
10769                 TREE_TYPE (r) = type
10770                   = do_auto_deduction (type, init, auto_node);
10771               }
10772           }
10773         else
10774           register_local_specialization (r, t);
10775
10776         DECL_CHAIN (r) = NULL_TREE;
10777
10778         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r),
10779                                         /*flags=*/0,
10780                                         args, complain, in_decl);
10781
10782         /* Preserve a typedef that names a type.  */
10783         if (is_typedef_decl (r))
10784           {
10785             DECL_ORIGINAL_TYPE (r) = NULL_TREE;
10786             set_underlying_type (r);
10787           }
10788
10789         layout_decl (r, 0);
10790       }
10791       break;
10792
10793     default:
10794       gcc_unreachable ();
10795     }
10796 #undef RETURN
10797
10798  out:
10799   /* Restore the file and line information.  */
10800   input_location = saved_loc;
10801
10802   return r;
10803 }
10804
10805 /* Substitute into the ARG_TYPES of a function type.  */
10806
10807 static tree
10808 tsubst_arg_types (tree arg_types,
10809                   tree args,
10810                   tsubst_flags_t complain,
10811                   tree in_decl)
10812 {
10813   tree remaining_arg_types;
10814   tree type = NULL_TREE;
10815   int i = 1;
10816   tree expanded_args = NULL_TREE;
10817   tree default_arg;
10818
10819   if (!arg_types || arg_types == void_list_node)
10820     return arg_types;
10821
10822   remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
10823                                           args, complain, in_decl);
10824   if (remaining_arg_types == error_mark_node)
10825     return error_mark_node;
10826
10827   if (PACK_EXPANSION_P (TREE_VALUE (arg_types)))
10828     {
10829       /* For a pack expansion, perform substitution on the
10830          entire expression. Later on, we'll handle the arguments
10831          one-by-one.  */
10832       expanded_args = tsubst_pack_expansion (TREE_VALUE (arg_types),
10833                                             args, complain, in_decl);
10834
10835       if (TREE_CODE (expanded_args) == TREE_VEC)
10836         /* So that we'll spin through the parameters, one by one.  */
10837         i = TREE_VEC_LENGTH (expanded_args);
10838       else
10839         {
10840           /* We only partially substituted into the parameter
10841              pack. Our type is TYPE_PACK_EXPANSION.  */
10842           type = expanded_args;
10843           expanded_args = NULL_TREE;
10844         }
10845     }
10846
10847   while (i > 0) {
10848     --i;
10849     
10850     if (expanded_args)
10851       type = TREE_VEC_ELT (expanded_args, i);
10852     else if (!type)
10853       type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
10854
10855     if (type == error_mark_node)
10856       return error_mark_node;
10857     if (VOID_TYPE_P (type))
10858       {
10859         if (complain & tf_error)
10860           {
10861             error ("invalid parameter type %qT", type);
10862             if (in_decl)
10863               error ("in declaration %q+D", in_decl);
10864           }
10865         return error_mark_node;
10866     }
10867     
10868     /* Do array-to-pointer, function-to-pointer conversion, and ignore
10869        top-level qualifiers as required.  */
10870     type = cv_unqualified (type_decays_to (type));
10871
10872     /* We do not substitute into default arguments here.  The standard
10873        mandates that they be instantiated only when needed, which is
10874        done in build_over_call.  */
10875     default_arg = TREE_PURPOSE (arg_types);
10876
10877     if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
10878       {
10879         /* We've instantiated a template before its default arguments
10880            have been parsed.  This can happen for a nested template
10881            class, and is not an error unless we require the default
10882            argument in a call of this function.  */
10883         remaining_arg_types = 
10884           tree_cons (default_arg, type, remaining_arg_types);
10885         VEC_safe_push (tree, gc, DEFARG_INSTANTIATIONS (default_arg), 
10886                        remaining_arg_types);
10887       }
10888     else
10889       remaining_arg_types = 
10890         hash_tree_cons (default_arg, type, remaining_arg_types);
10891   }
10892         
10893   return remaining_arg_types;
10894 }
10895
10896 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE.  This routine does
10897    *not* handle the exception-specification for FNTYPE, because the
10898    initial substitution of explicitly provided template parameters
10899    during argument deduction forbids substitution into the
10900    exception-specification:
10901
10902      [temp.deduct]
10903
10904      All references in the function type of the function template to  the
10905      corresponding template parameters are replaced by the specified tem-
10906      plate argument values.  If a substitution in a template parameter or
10907      in  the function type of the function template results in an invalid
10908      type, type deduction fails.  [Note: The equivalent  substitution  in
10909      exception specifications is done only when the function is instanti-
10910      ated, at which point a program is  ill-formed  if  the  substitution
10911      results in an invalid type.]  */
10912
10913 static tree
10914 tsubst_function_type (tree t,
10915                       tree args,
10916                       tsubst_flags_t complain,
10917                       tree in_decl)
10918 {
10919   tree return_type;
10920   tree arg_types;
10921   tree fntype;
10922
10923   /* The TYPE_CONTEXT is not used for function/method types.  */
10924   gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
10925
10926   /* Substitute the return type.  */
10927   return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10928   if (return_type == error_mark_node)
10929     return error_mark_node;
10930   /* The standard does not presently indicate that creation of a
10931      function type with an invalid return type is a deduction failure.
10932      However, that is clearly analogous to creating an array of "void"
10933      or a reference to a reference.  This is core issue #486.  */
10934   if (TREE_CODE (return_type) == ARRAY_TYPE
10935       || TREE_CODE (return_type) == FUNCTION_TYPE)
10936     {
10937       if (complain & tf_error)
10938         {
10939           if (TREE_CODE (return_type) == ARRAY_TYPE)
10940             error ("function returning an array");
10941           else
10942             error ("function returning a function");
10943         }
10944       return error_mark_node;
10945     }
10946
10947   /* Substitute the argument types.  */
10948   arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
10949                                 complain, in_decl);
10950   if (arg_types == error_mark_node)
10951     return error_mark_node;
10952
10953   /* Construct a new type node and return it.  */
10954   if (TREE_CODE (t) == FUNCTION_TYPE)
10955     {
10956       fntype = build_function_type (return_type, arg_types);
10957       fntype = apply_memfn_quals (fntype, type_memfn_quals (t));
10958     }
10959   else
10960     {
10961       tree r = TREE_TYPE (TREE_VALUE (arg_types));
10962       if (! MAYBE_CLASS_TYPE_P (r))
10963         {
10964           /* [temp.deduct]
10965
10966              Type deduction may fail for any of the following
10967              reasons:
10968
10969              -- Attempting to create "pointer to member of T" when T
10970              is not a class type.  */
10971           if (complain & tf_error)
10972             error ("creating pointer to member function of non-class type %qT",
10973                       r);
10974           return error_mark_node;
10975         }
10976
10977       fntype = build_method_type_directly (r, return_type,
10978                                            TREE_CHAIN (arg_types));
10979     }
10980   fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
10981
10982   return fntype;
10983 }
10984
10985 /* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE.  Substitute the template
10986    ARGS into that specification, and return the substituted
10987    specification.  If there is no specification, return NULL_TREE.  */
10988
10989 static tree
10990 tsubst_exception_specification (tree fntype,
10991                                 tree args,
10992                                 tsubst_flags_t complain,
10993                                 tree in_decl,
10994                                 bool defer_ok)
10995 {
10996   tree specs;
10997   tree new_specs;
10998
10999   specs = TYPE_RAISES_EXCEPTIONS (fntype);
11000   new_specs = NULL_TREE;
11001   if (specs && TREE_PURPOSE (specs))
11002     {
11003       /* A noexcept-specifier.  */
11004       tree expr = TREE_PURPOSE (specs);
11005       if (expr == boolean_true_node || expr == boolean_false_node)
11006         new_specs = expr;
11007       else if (defer_ok)
11008         {
11009           /* Defer instantiation of noexcept-specifiers to avoid
11010              excessive instantiations (c++/49107).  */
11011           new_specs = make_node (DEFERRED_NOEXCEPT);
11012           if (DEFERRED_NOEXCEPT_SPEC_P (specs))
11013             {
11014               /* We already partially instantiated this member template,
11015                  so combine the new args with the old.  */
11016               DEFERRED_NOEXCEPT_PATTERN (new_specs)
11017                 = DEFERRED_NOEXCEPT_PATTERN (expr);
11018               DEFERRED_NOEXCEPT_ARGS (new_specs)
11019                 = add_to_template_args (DEFERRED_NOEXCEPT_ARGS (expr), args);
11020             }
11021           else
11022             {
11023               DEFERRED_NOEXCEPT_PATTERN (new_specs) = expr;
11024               DEFERRED_NOEXCEPT_ARGS (new_specs) = args;
11025             }
11026         }
11027       else
11028         new_specs = tsubst_copy_and_build
11029           (expr, args, complain, in_decl, /*function_p=*/false,
11030            /*integral_constant_expression_p=*/true);
11031       new_specs = build_noexcept_spec (new_specs, complain);
11032     }
11033   else if (specs)
11034     {
11035       if (! TREE_VALUE (specs))
11036         new_specs = specs;
11037       else
11038         while (specs)
11039           {
11040             tree spec;
11041             int i, len = 1;
11042             tree expanded_specs = NULL_TREE;
11043
11044             if (PACK_EXPANSION_P (TREE_VALUE (specs)))
11045               {
11046                 /* Expand the pack expansion type.  */
11047                 expanded_specs = tsubst_pack_expansion (TREE_VALUE (specs),
11048                                                        args, complain,
11049                                                        in_decl);
11050
11051                 if (expanded_specs == error_mark_node)
11052                   return error_mark_node;
11053                 else if (TREE_CODE (expanded_specs) == TREE_VEC)
11054                   len = TREE_VEC_LENGTH (expanded_specs);
11055                 else
11056                   {
11057                     /* We're substituting into a member template, so
11058                        we got a TYPE_PACK_EXPANSION back.  Add that
11059                        expansion and move on.  */
11060                     gcc_assert (TREE_CODE (expanded_specs) 
11061                                 == TYPE_PACK_EXPANSION);
11062                     new_specs = add_exception_specifier (new_specs,
11063                                                          expanded_specs,
11064                                                          complain);
11065                     specs = TREE_CHAIN (specs);
11066                     continue;
11067                   }
11068               }
11069
11070             for (i = 0; i < len; ++i)
11071               {
11072                 if (expanded_specs)
11073                   spec = TREE_VEC_ELT (expanded_specs, i);
11074                 else
11075                   spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
11076                 if (spec == error_mark_node)
11077                   return spec;
11078                 new_specs = add_exception_specifier (new_specs, spec, 
11079                                                      complain);
11080               }
11081
11082             specs = TREE_CHAIN (specs);
11083           }
11084     }
11085   return new_specs;
11086 }
11087
11088 /* Take the tree structure T and replace template parameters used
11089    therein with the argument vector ARGS.  IN_DECL is an associated
11090    decl for diagnostics.  If an error occurs, returns ERROR_MARK_NODE.
11091    Issue error and warning messages under control of COMPLAIN.  Note
11092    that we must be relatively non-tolerant of extensions here, in
11093    order to preserve conformance; if we allow substitutions that
11094    should not be allowed, we may allow argument deductions that should
11095    not succeed, and therefore report ambiguous overload situations
11096    where there are none.  In theory, we could allow the substitution,
11097    but indicate that it should have failed, and allow our caller to
11098    make sure that the right thing happens, but we don't try to do this
11099    yet.
11100
11101    This function is used for dealing with types, decls and the like;
11102    for expressions, use tsubst_expr or tsubst_copy.  */
11103
11104 tree
11105 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
11106 {
11107   enum tree_code code;
11108   tree type, r = NULL_TREE;
11109
11110   if (t == NULL_TREE || t == error_mark_node
11111       || t == integer_type_node
11112       || t == void_type_node
11113       || t == char_type_node
11114       || t == unknown_type_node
11115       || TREE_CODE (t) == NAMESPACE_DECL
11116       || TREE_CODE (t) == TRANSLATION_UNIT_DECL)
11117     return t;
11118
11119   if (DECL_P (t))
11120     return tsubst_decl (t, args, complain);
11121
11122   if (args == NULL_TREE)
11123     return t;
11124
11125   code = TREE_CODE (t);
11126
11127   if (code == IDENTIFIER_NODE)
11128     type = IDENTIFIER_TYPE_VALUE (t);
11129   else
11130     type = TREE_TYPE (t);
11131
11132   gcc_assert (type != unknown_type_node);
11133
11134   /* Reuse typedefs.  We need to do this to handle dependent attributes,
11135      such as attribute aligned.  */
11136   if (TYPE_P (t)
11137       && typedef_variant_p (t))
11138     {
11139       tree decl = TYPE_NAME (t);
11140
11141       if (TYPE_DECL_ALIAS_P (decl)
11142           && DECL_LANG_SPECIFIC (decl)
11143           && DECL_TEMPLATE_INFO (decl)
11144           && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl)))
11145         {
11146           /* DECL represents an alias template and we want to
11147              instantiate it.  Let's substitute our arguments for the
11148              template parameters into the declaration and get the
11149              resulting type.  */
11150           r = tsubst (decl, args, complain, decl);
11151         }
11152       else if (DECL_CLASS_SCOPE_P (decl)
11153                && CLASSTYPE_TEMPLATE_INFO (DECL_CONTEXT (decl))
11154                && uses_template_parms (DECL_CONTEXT (decl)))
11155         {
11156           tree tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
11157           tree gen_args = tsubst (DECL_TI_ARGS (decl), args, complain, in_decl);
11158           r = retrieve_specialization (tmpl, gen_args, 0);
11159         }
11160       else if (DECL_FUNCTION_SCOPE_P (decl)
11161                && DECL_TEMPLATE_INFO (DECL_CONTEXT (decl))
11162                && uses_template_parms (DECL_TI_ARGS (DECL_CONTEXT (decl))))
11163         r = retrieve_local_specialization (decl);
11164       else
11165         /* The typedef is from a non-template context.  */
11166         return t;
11167
11168       if (r)
11169         {
11170           r = TREE_TYPE (r);
11171           r = cp_build_qualified_type_real
11172             (r, cp_type_quals (t) | cp_type_quals (r),
11173              complain | tf_ignore_bad_quals);
11174           return r;
11175         }
11176       /* Else we must be instantiating the typedef, so fall through.  */
11177     }
11178
11179   if (type
11180       && code != TYPENAME_TYPE
11181       && code != TEMPLATE_TYPE_PARM
11182       && code != IDENTIFIER_NODE
11183       && code != FUNCTION_TYPE
11184       && code != METHOD_TYPE)
11185     type = tsubst (type, args, complain, in_decl);
11186   if (type == error_mark_node)
11187     return error_mark_node;
11188
11189   switch (code)
11190     {
11191     case RECORD_TYPE:
11192     case UNION_TYPE:
11193     case ENUMERAL_TYPE:
11194       return tsubst_aggr_type (t, args, complain, in_decl,
11195                                /*entering_scope=*/0);
11196
11197     case ERROR_MARK:
11198     case IDENTIFIER_NODE:
11199     case VOID_TYPE:
11200     case REAL_TYPE:
11201     case COMPLEX_TYPE:
11202     case VECTOR_TYPE:
11203     case BOOLEAN_TYPE:
11204     case NULLPTR_TYPE:
11205     case LANG_TYPE:
11206       return t;
11207
11208     case INTEGER_TYPE:
11209       if (t == integer_type_node)
11210         return t;
11211
11212       if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
11213           && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
11214         return t;
11215
11216       {
11217         tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
11218
11219         max = tsubst_expr (omax, args, complain, in_decl,
11220                            /*integral_constant_expression_p=*/false);
11221
11222         /* Fix up type of the magic NOP_EXPR with TREE_SIDE_EFFECTS if
11223            needed.  */
11224         if (TREE_CODE (max) == NOP_EXPR
11225             && TREE_SIDE_EFFECTS (omax)
11226             && !TREE_TYPE (max))
11227           TREE_TYPE (max) = TREE_TYPE (TREE_OPERAND (max, 0));
11228
11229         /* If we're in a partial instantiation, preserve the magic NOP_EXPR
11230            with TREE_SIDE_EFFECTS that indicates this is not an integral
11231            constant expression.  */
11232         if (processing_template_decl
11233             && TREE_SIDE_EFFECTS (omax) && TREE_CODE (omax) == NOP_EXPR)
11234           {
11235             gcc_assert (TREE_CODE (max) == NOP_EXPR);
11236             TREE_SIDE_EFFECTS (max) = 1;
11237           }
11238
11239         return compute_array_index_type (NULL_TREE, max, complain);
11240       }
11241
11242     case TEMPLATE_TYPE_PARM:
11243     case TEMPLATE_TEMPLATE_PARM:
11244     case BOUND_TEMPLATE_TEMPLATE_PARM:
11245     case TEMPLATE_PARM_INDEX:
11246       {
11247         int idx;
11248         int level;
11249         int levels;
11250         tree arg = NULL_TREE;
11251
11252         r = NULL_TREE;
11253
11254         gcc_assert (TREE_VEC_LENGTH (args) > 0);
11255         template_parm_level_and_index (t, &level, &idx); 
11256
11257         levels = TMPL_ARGS_DEPTH (args);
11258         if (level <= levels)
11259           {
11260             arg = TMPL_ARG (args, level, idx);
11261
11262             if (arg && TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
11263               /* See through ARGUMENT_PACK_SELECT arguments. */
11264               arg = ARGUMENT_PACK_SELECT_ARG (arg);
11265           }
11266
11267         if (arg == error_mark_node)
11268           return error_mark_node;
11269         else if (arg != NULL_TREE)
11270           {
11271             if (ARGUMENT_PACK_P (arg))
11272               /* If ARG is an argument pack, we don't actually want to
11273                  perform a substitution here, because substitutions
11274                  for argument packs are only done
11275                  element-by-element. We can get to this point when
11276                  substituting the type of a non-type template
11277                  parameter pack, when that type actually contains
11278                  template parameter packs from an outer template, e.g.,
11279
11280                  template<typename... Types> struct A {
11281                    template<Types... Values> struct B { };
11282                  };  */
11283               return t;
11284
11285             if (code == TEMPLATE_TYPE_PARM)
11286               {
11287                 int quals;
11288                 gcc_assert (TYPE_P (arg));
11289
11290                 quals = cp_type_quals (arg) | cp_type_quals (t);
11291                   
11292                 return cp_build_qualified_type_real
11293                   (arg, quals, complain | tf_ignore_bad_quals);
11294               }
11295             else if (code == BOUND_TEMPLATE_TEMPLATE_PARM)
11296               {
11297                 /* We are processing a type constructed from a
11298                    template template parameter.  */
11299                 tree argvec = tsubst (TYPE_TI_ARGS (t),
11300                                       args, complain, in_decl);
11301                 if (argvec == error_mark_node)
11302                   return error_mark_node;
11303
11304                 gcc_assert (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
11305                             || TREE_CODE (arg) == TEMPLATE_DECL
11306                             || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
11307
11308                 if (TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE)
11309                   /* Consider this code:
11310
11311                         template <template <class> class Template>
11312                         struct Internal {
11313                         template <class Arg> using Bind = Template<Arg>;
11314                         };
11315
11316                         template <template <class> class Template, class Arg>
11317                         using Instantiate = Template<Arg>; //#0
11318
11319                         template <template <class> class Template,
11320                                   class Argument>
11321                         using Bind =
11322                           Instantiate<Internal<Template>::template Bind,
11323                                       Argument>; //#1
11324
11325                      When #1 is parsed, the
11326                      BOUND_TEMPLATE_TEMPLATE_PARM representing the
11327                      parameter `Template' in #0 matches the
11328                      UNBOUND_CLASS_TEMPLATE representing the argument
11329                      `Internal<Template>::template Bind'; We then want
11330                      to assemble the type `Bind<Argument>' that can't
11331                      be fully created right now, because
11332                      `Internal<Template>' not being complete, the Bind
11333                      template cannot be looked up in that context.  So
11334                      we need to "store" `Bind<Argument>' for later
11335                      when the context of Bind becomes complete.  Let's
11336                      store that in a TYPENAME_TYPE.  */
11337                   return make_typename_type (TYPE_CONTEXT (arg),
11338                                              build_nt (TEMPLATE_ID_EXPR,
11339                                                        TYPE_IDENTIFIER (arg),
11340                                                        argvec),
11341                                              typename_type,
11342                                              complain);
11343
11344                 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
11345                    are resolving nested-types in the signature of a
11346                    member function templates.  Otherwise ARG is a
11347                    TEMPLATE_DECL and is the real template to be
11348                    instantiated.  */
11349                 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
11350                   arg = TYPE_NAME (arg);
11351
11352                 r = lookup_template_class (arg,
11353                                            argvec, in_decl,
11354                                            DECL_CONTEXT (arg),
11355                                             /*entering_scope=*/0,
11356                                            complain);
11357                 return cp_build_qualified_type_real
11358                   (r, cp_type_quals (t), complain);
11359               }
11360             else
11361               /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX.  */
11362               return convert_from_reference (unshare_expr (arg));
11363           }
11364
11365         if (level == 1)
11366           /* This can happen during the attempted tsubst'ing in
11367              unify.  This means that we don't yet have any information
11368              about the template parameter in question.  */
11369           return t;
11370
11371         /* If we get here, we must have been looking at a parm for a
11372            more deeply nested template.  Make a new version of this
11373            template parameter, but with a lower level.  */
11374         switch (code)
11375           {
11376           case TEMPLATE_TYPE_PARM:
11377           case TEMPLATE_TEMPLATE_PARM:
11378           case BOUND_TEMPLATE_TEMPLATE_PARM:
11379             if (cp_type_quals (t))
11380               {
11381                 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
11382                 r = cp_build_qualified_type_real
11383                   (r, cp_type_quals (t),
11384                    complain | (code == TEMPLATE_TYPE_PARM
11385                                ? tf_ignore_bad_quals : 0));
11386               }
11387             else
11388               {
11389                 r = copy_type (t);
11390                 TEMPLATE_TYPE_PARM_INDEX (r)
11391                   = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
11392                                                 r, levels, args, complain);
11393                 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
11394                 TYPE_MAIN_VARIANT (r) = r;
11395                 TYPE_POINTER_TO (r) = NULL_TREE;
11396                 TYPE_REFERENCE_TO (r) = NULL_TREE;
11397
11398                 if (TREE_CODE (r) == TEMPLATE_TEMPLATE_PARM)
11399                   /* We have reduced the level of the template
11400                      template parameter, but not the levels of its
11401                      template parameters, so canonical_type_parameter
11402                      will not be able to find the canonical template
11403                      template parameter for this level. Thus, we
11404                      require structural equality checking to compare
11405                      TEMPLATE_TEMPLATE_PARMs. */
11406                   SET_TYPE_STRUCTURAL_EQUALITY (r);
11407                 else if (TYPE_STRUCTURAL_EQUALITY_P (t))
11408                   SET_TYPE_STRUCTURAL_EQUALITY (r);
11409                 else
11410                   TYPE_CANONICAL (r) = canonical_type_parameter (r);
11411
11412                 if (code == BOUND_TEMPLATE_TEMPLATE_PARM)
11413                   {
11414                     tree argvec = tsubst (TYPE_TI_ARGS (t), args,
11415                                           complain, in_decl);
11416                     if (argvec == error_mark_node)
11417                       return error_mark_node;
11418
11419                     TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
11420                       = build_template_info (TYPE_TI_TEMPLATE (t), argvec);
11421                   }
11422               }
11423             break;
11424
11425           case TEMPLATE_PARM_INDEX:
11426             r = reduce_template_parm_level (t, type, levels, args, complain);
11427             break;
11428
11429           default:
11430             gcc_unreachable ();
11431           }
11432
11433         return r;
11434       }
11435
11436     case TREE_LIST:
11437       {
11438         tree purpose, value, chain;
11439
11440         if (t == void_list_node)
11441           return t;
11442
11443         purpose = TREE_PURPOSE (t);
11444         if (purpose)
11445           {
11446             purpose = tsubst (purpose, args, complain, in_decl);
11447             if (purpose == error_mark_node)
11448               return error_mark_node;
11449           }
11450         value = TREE_VALUE (t);
11451         if (value)
11452           {
11453             value = tsubst (value, args, complain, in_decl);
11454             if (value == error_mark_node)
11455               return error_mark_node;
11456           }
11457         chain = TREE_CHAIN (t);
11458         if (chain && chain != void_type_node)
11459           {
11460             chain = tsubst (chain, args, complain, in_decl);
11461             if (chain == error_mark_node)
11462               return error_mark_node;
11463           }
11464         if (purpose == TREE_PURPOSE (t)
11465             && value == TREE_VALUE (t)
11466             && chain == TREE_CHAIN (t))
11467           return t;
11468         return hash_tree_cons (purpose, value, chain);
11469       }
11470
11471     case TREE_BINFO:
11472       /* We should never be tsubsting a binfo.  */
11473       gcc_unreachable ();
11474
11475     case TREE_VEC:
11476       /* A vector of template arguments.  */
11477       gcc_assert (!type);
11478       return tsubst_template_args (t, args, complain, in_decl);
11479
11480     case POINTER_TYPE:
11481     case REFERENCE_TYPE:
11482       {
11483         if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
11484           return t;
11485
11486         /* [temp.deduct]
11487
11488            Type deduction may fail for any of the following
11489            reasons:
11490
11491            -- Attempting to create a pointer to reference type.
11492            -- Attempting to create a reference to a reference type or
11493               a reference to void.
11494
11495           Core issue 106 says that creating a reference to a reference
11496           during instantiation is no longer a cause for failure. We
11497           only enforce this check in strict C++98 mode.  */
11498         if ((TREE_CODE (type) == REFERENCE_TYPE
11499              && (((cxx_dialect == cxx98) && flag_iso) || code != REFERENCE_TYPE))
11500             || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
11501           {
11502             static location_t last_loc;
11503
11504             /* We keep track of the last time we issued this error
11505                message to avoid spewing a ton of messages during a
11506                single bad template instantiation.  */
11507             if (complain & tf_error
11508                 && last_loc != input_location)
11509               {
11510                 if (TREE_CODE (type) == VOID_TYPE)
11511                   error ("forming reference to void");
11512                else if (code == POINTER_TYPE)
11513                  error ("forming pointer to reference type %qT", type);
11514                else
11515                   error ("forming reference to reference type %qT", type);
11516                 last_loc = input_location;
11517               }
11518
11519             return error_mark_node;
11520           }
11521         else if (code == POINTER_TYPE)
11522           {
11523             r = build_pointer_type (type);
11524             if (TREE_CODE (type) == METHOD_TYPE)
11525               r = build_ptrmemfunc_type (r);
11526           }
11527         else if (TREE_CODE (type) == REFERENCE_TYPE)
11528           /* In C++0x, during template argument substitution, when there is an
11529              attempt to create a reference to a reference type, reference
11530              collapsing is applied as described in [14.3.1/4 temp.arg.type]:
11531
11532              "If a template-argument for a template-parameter T names a type
11533              that is a reference to a type A, an attempt to create the type
11534              'lvalue reference to cv T' creates the type 'lvalue reference to
11535              A,' while an attempt to create the type type rvalue reference to
11536              cv T' creates the type T"
11537           */
11538           r = cp_build_reference_type
11539               (TREE_TYPE (type),
11540                TYPE_REF_IS_RVALUE (t) && TYPE_REF_IS_RVALUE (type));
11541         else
11542           r = cp_build_reference_type (type, TYPE_REF_IS_RVALUE (t));
11543         r = cp_build_qualified_type_real (r, cp_type_quals (t), complain);
11544
11545         if (r != error_mark_node)
11546           /* Will this ever be needed for TYPE_..._TO values?  */
11547           layout_type (r);
11548
11549         return r;
11550       }
11551     case OFFSET_TYPE:
11552       {
11553         r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
11554         if (r == error_mark_node || !MAYBE_CLASS_TYPE_P (r))
11555           {
11556             /* [temp.deduct]
11557
11558                Type deduction may fail for any of the following
11559                reasons:
11560
11561                -- Attempting to create "pointer to member of T" when T
11562                   is not a class type.  */
11563             if (complain & tf_error)
11564               error ("creating pointer to member of non-class type %qT", r);
11565             return error_mark_node;
11566           }
11567         if (TREE_CODE (type) == REFERENCE_TYPE)
11568           {
11569             if (complain & tf_error)
11570               error ("creating pointer to member reference type %qT", type);
11571             return error_mark_node;
11572           }
11573         if (TREE_CODE (type) == VOID_TYPE)
11574           {
11575             if (complain & tf_error)
11576               error ("creating pointer to member of type void");
11577             return error_mark_node;
11578           }
11579         gcc_assert (TREE_CODE (type) != METHOD_TYPE);
11580         if (TREE_CODE (type) == FUNCTION_TYPE)
11581           {
11582             /* The type of the implicit object parameter gets its
11583                cv-qualifiers from the FUNCTION_TYPE. */
11584             tree memptr;
11585             tree method_type = build_memfn_type (type, r, type_memfn_quals (type));
11586             memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
11587             return cp_build_qualified_type_real (memptr, cp_type_quals (t),
11588                                                  complain);
11589           }
11590         else
11591           return cp_build_qualified_type_real (build_ptrmem_type (r, type),
11592                                                cp_type_quals (t),
11593                                                complain);
11594       }
11595     case FUNCTION_TYPE:
11596     case METHOD_TYPE:
11597       {
11598         tree fntype;
11599         tree specs;
11600         fntype = tsubst_function_type (t, args, complain, in_decl);
11601         if (fntype == error_mark_node)
11602           return error_mark_node;
11603
11604         /* Substitute the exception specification.  */
11605         specs = tsubst_exception_specification (t, args, complain,
11606                                                 in_decl, /*defer_ok*/true);
11607         if (specs == error_mark_node)
11608           return error_mark_node;
11609         if (specs)
11610           fntype = build_exception_variant (fntype, specs);
11611         return fntype;
11612       }
11613     case ARRAY_TYPE:
11614       {
11615         tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
11616         if (domain == error_mark_node)
11617           return error_mark_node;
11618
11619         /* As an optimization, we avoid regenerating the array type if
11620            it will obviously be the same as T.  */
11621         if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
11622           return t;
11623
11624         /* These checks should match the ones in grokdeclarator.
11625
11626            [temp.deduct]
11627
11628            The deduction may fail for any of the following reasons:
11629
11630            -- Attempting to create an array with an element type that
11631               is void, a function type, or a reference type, or [DR337]
11632               an abstract class type.  */
11633         if (TREE_CODE (type) == VOID_TYPE
11634             || TREE_CODE (type) == FUNCTION_TYPE
11635             || TREE_CODE (type) == REFERENCE_TYPE)
11636           {
11637             if (complain & tf_error)
11638               error ("creating array of %qT", type);
11639             return error_mark_node;
11640           }
11641         if (CLASS_TYPE_P (type) && CLASSTYPE_PURE_VIRTUALS (type))
11642           {
11643             if (complain & tf_error)
11644               error ("creating array of %qT, which is an abstract class type",
11645                      type);
11646             return error_mark_node;
11647           }
11648
11649         r = build_cplus_array_type (type, domain);
11650
11651         if (TYPE_USER_ALIGN (t))
11652           {
11653             TYPE_ALIGN (r) = TYPE_ALIGN (t);
11654             TYPE_USER_ALIGN (r) = 1;
11655           }
11656
11657         return r;
11658       }
11659
11660     case TYPENAME_TYPE:
11661       {
11662         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
11663                                      in_decl, /*entering_scope=*/1);
11664         tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
11665                               complain, in_decl);
11666
11667         if (ctx == error_mark_node || f == error_mark_node)
11668           return error_mark_node;
11669
11670         if (!MAYBE_CLASS_TYPE_P (ctx))
11671           {
11672             if (complain & tf_error)
11673               error ("%qT is not a class, struct, or union type", ctx);
11674             return error_mark_node;
11675           }
11676         else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
11677           {
11678             /* Normally, make_typename_type does not require that the CTX
11679                have complete type in order to allow things like:
11680
11681                  template <class T> struct S { typename S<T>::X Y; };
11682
11683                But, such constructs have already been resolved by this
11684                point, so here CTX really should have complete type, unless
11685                it's a partial instantiation.  */
11686             ctx = complete_type (ctx);
11687             if (!COMPLETE_TYPE_P (ctx))
11688               {
11689                 if (complain & tf_error)
11690                   cxx_incomplete_type_error (NULL_TREE, ctx);
11691                 return error_mark_node;
11692               }
11693           }
11694
11695         f = make_typename_type (ctx, f, typename_type,
11696                                 (complain & tf_error) | tf_keep_type_decl);
11697         if (f == error_mark_node)
11698           return f;
11699         if (TREE_CODE (f) == TYPE_DECL)
11700           {
11701             complain |= tf_ignore_bad_quals;
11702             f = TREE_TYPE (f);
11703           }
11704
11705         if (TREE_CODE (f) != TYPENAME_TYPE)
11706           {
11707             if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
11708               {
11709                 if (complain & tf_error)
11710                   error ("%qT resolves to %qT, which is not an enumeration type",
11711                          t, f);
11712                 else
11713                   return error_mark_node;
11714               }
11715             else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
11716               {
11717                 if (complain & tf_error)
11718                   error ("%qT resolves to %qT, which is is not a class type",
11719                          t, f);
11720                 else
11721                   return error_mark_node;
11722               }
11723           }
11724
11725         return cp_build_qualified_type_real
11726           (f, cp_type_quals (f) | cp_type_quals (t), complain);
11727       }
11728
11729     case UNBOUND_CLASS_TEMPLATE:
11730       {
11731         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
11732                                      in_decl, /*entering_scope=*/1);
11733         tree name = TYPE_IDENTIFIER (t);
11734         tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
11735
11736         if (ctx == error_mark_node || name == error_mark_node)
11737           return error_mark_node;
11738
11739         if (parm_list)
11740           parm_list = tsubst_template_parms (parm_list, args, complain);
11741         return make_unbound_class_template (ctx, name, parm_list, complain);
11742       }
11743
11744     case TYPEOF_TYPE:
11745       {
11746         tree type;
11747
11748         ++cp_unevaluated_operand;
11749         ++c_inhibit_evaluation_warnings;
11750
11751         type = tsubst_expr (TYPEOF_TYPE_EXPR (t), args,
11752                             complain, in_decl,
11753                             /*integral_constant_expression_p=*/false);
11754
11755         --cp_unevaluated_operand;
11756         --c_inhibit_evaluation_warnings;
11757
11758         type = finish_typeof (type);
11759         return cp_build_qualified_type_real (type,
11760                                              cp_type_quals (t)
11761                                              | cp_type_quals (type),
11762                                              complain);
11763       }
11764
11765     case DECLTYPE_TYPE:
11766       {
11767         tree type;
11768
11769         ++cp_unevaluated_operand;
11770         ++c_inhibit_evaluation_warnings;
11771
11772         type = tsubst_expr (DECLTYPE_TYPE_EXPR (t), args,
11773                             complain, in_decl,
11774                             /*integral_constant_expression_p=*/false);
11775
11776         --cp_unevaluated_operand;
11777         --c_inhibit_evaluation_warnings;
11778
11779         if (DECLTYPE_FOR_LAMBDA_CAPTURE (t))
11780           type = lambda_capture_field_type (type);
11781         else if (DECLTYPE_FOR_LAMBDA_PROXY (t))
11782           type = lambda_proxy_type (type);
11783         else
11784           type = finish_decltype_type
11785             (type, DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t), complain);
11786         return cp_build_qualified_type_real (type,
11787                                              cp_type_quals (t)
11788                                              | cp_type_quals (type),
11789                                              complain);
11790       }
11791
11792     case UNDERLYING_TYPE:
11793       {
11794         tree type = tsubst (UNDERLYING_TYPE_TYPE (t), args,
11795                             complain, in_decl);
11796         return finish_underlying_type (type);
11797       }
11798
11799     case TYPE_ARGUMENT_PACK:
11800     case NONTYPE_ARGUMENT_PACK:
11801       {
11802         tree r = TYPE_P (t) ? cxx_make_type (code) : make_node (code);
11803         tree packed_out = 
11804           tsubst_template_args (ARGUMENT_PACK_ARGS (t), 
11805                                 args,
11806                                 complain,
11807                                 in_decl);
11808         SET_ARGUMENT_PACK_ARGS (r, packed_out);
11809
11810         /* For template nontype argument packs, also substitute into
11811            the type.  */
11812         if (code == NONTYPE_ARGUMENT_PACK)
11813           TREE_TYPE (r) = tsubst (TREE_TYPE (t), args, complain, in_decl);
11814
11815         return r;
11816       }
11817       break;
11818
11819     case INTEGER_CST:
11820     case REAL_CST:
11821     case STRING_CST:
11822     case PLUS_EXPR:
11823     case MINUS_EXPR:
11824     case NEGATE_EXPR:
11825     case NOP_EXPR:
11826     case INDIRECT_REF:
11827     case ADDR_EXPR:
11828     case CALL_EXPR:
11829     case ARRAY_REF:
11830     case SCOPE_REF:
11831       /* We should use one of the expression tsubsts for these codes.  */
11832       gcc_unreachable ();
11833
11834     default:
11835       sorry ("use of %qs in template", tree_code_name [(int) code]);
11836       return error_mark_node;
11837     }
11838 }
11839
11840 /* Like tsubst_expr for a BASELINK.  OBJECT_TYPE, if non-NULL, is the
11841    type of the expression on the left-hand side of the "." or "->"
11842    operator.  */
11843
11844 static tree
11845 tsubst_baselink (tree baselink, tree object_type,
11846                  tree args, tsubst_flags_t complain, tree in_decl)
11847 {
11848     tree name;
11849     tree qualifying_scope;
11850     tree fns;
11851     tree optype;
11852     tree template_args = 0;
11853     bool template_id_p = false;
11854
11855     /* A baselink indicates a function from a base class.  Both the
11856        BASELINK_ACCESS_BINFO and the base class referenced may
11857        indicate bases of the template class, rather than the
11858        instantiated class.  In addition, lookups that were not
11859        ambiguous before may be ambiguous now.  Therefore, we perform
11860        the lookup again.  */
11861     qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
11862     qualifying_scope = tsubst (qualifying_scope, args,
11863                                complain, in_decl);
11864     fns = BASELINK_FUNCTIONS (baselink);
11865     optype = tsubst (BASELINK_OPTYPE (baselink), args, complain, in_decl);
11866     if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
11867       {
11868         template_id_p = true;
11869         template_args = TREE_OPERAND (fns, 1);
11870         fns = TREE_OPERAND (fns, 0);
11871         if (template_args)
11872           template_args = tsubst_template_args (template_args, args,
11873                                                 complain, in_decl);
11874       }
11875     name = DECL_NAME (get_first_fn (fns));
11876     if (IDENTIFIER_TYPENAME_P (name))
11877       name = mangle_conv_op_name_for_type (optype);
11878     baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
11879     if (!baselink)
11880       return error_mark_node;
11881
11882     /* If lookup found a single function, mark it as used at this
11883        point.  (If it lookup found multiple functions the one selected
11884        later by overload resolution will be marked as used at that
11885        point.)  */
11886     if (BASELINK_P (baselink))
11887       fns = BASELINK_FUNCTIONS (baselink);
11888     if (!template_id_p && !really_overloaded_fn (fns))
11889       mark_used (OVL_CURRENT (fns));
11890
11891     /* Add back the template arguments, if present.  */
11892     if (BASELINK_P (baselink) && template_id_p)
11893       BASELINK_FUNCTIONS (baselink)
11894         = build_nt (TEMPLATE_ID_EXPR,
11895                     BASELINK_FUNCTIONS (baselink),
11896                     template_args);
11897     /* Update the conversion operator type.  */
11898     BASELINK_OPTYPE (baselink) = optype;
11899
11900     if (!object_type)
11901       object_type = current_class_type;
11902     return adjust_result_of_qualified_name_lookup (baselink,
11903                                                    qualifying_scope,
11904                                                    object_type);
11905 }
11906
11907 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID.  DONE is
11908    true if the qualified-id will be a postfix-expression in-and-of
11909    itself; false if more of the postfix-expression follows the
11910    QUALIFIED_ID.  ADDRESS_P is true if the qualified-id is the operand
11911    of "&".  */
11912
11913 static tree
11914 tsubst_qualified_id (tree qualified_id, tree args,
11915                      tsubst_flags_t complain, tree in_decl,
11916                      bool done, bool address_p)
11917 {
11918   tree expr;
11919   tree scope;
11920   tree name;
11921   bool is_template;
11922   tree template_args;
11923
11924   gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
11925
11926   /* Figure out what name to look up.  */
11927   name = TREE_OPERAND (qualified_id, 1);
11928   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
11929     {
11930       is_template = true;
11931       template_args = TREE_OPERAND (name, 1);
11932       if (template_args)
11933         template_args = tsubst_template_args (template_args, args,
11934                                               complain, in_decl);
11935       name = TREE_OPERAND (name, 0);
11936     }
11937   else
11938     {
11939       is_template = false;
11940       template_args = NULL_TREE;
11941     }
11942
11943   /* Substitute into the qualifying scope.  When there are no ARGS, we
11944      are just trying to simplify a non-dependent expression.  In that
11945      case the qualifying scope may be dependent, and, in any case,
11946      substituting will not help.  */
11947   scope = TREE_OPERAND (qualified_id, 0);
11948   if (args)
11949     {
11950       scope = tsubst (scope, args, complain, in_decl);
11951       expr = tsubst_copy (name, args, complain, in_decl);
11952     }
11953   else
11954     expr = name;
11955
11956   if (dependent_scope_p (scope))
11957     {
11958       if (is_template)
11959         expr = build_min_nt (TEMPLATE_ID_EXPR, expr, template_args);
11960       return build_qualified_name (NULL_TREE, scope, expr,
11961                                    QUALIFIED_NAME_IS_TEMPLATE (qualified_id));
11962     }
11963
11964   if (!BASELINK_P (name) && !DECL_P (expr))
11965     {
11966       if (TREE_CODE (expr) == BIT_NOT_EXPR)
11967         {
11968           /* A BIT_NOT_EXPR is used to represent a destructor.  */
11969           if (!check_dtor_name (scope, TREE_OPERAND (expr, 0)))
11970             {
11971               error ("qualifying type %qT does not match destructor name ~%qT",
11972                      scope, TREE_OPERAND (expr, 0));
11973               expr = error_mark_node;
11974             }
11975           else
11976             expr = lookup_qualified_name (scope, complete_dtor_identifier,
11977                                           /*is_type_p=*/0, false);
11978         }
11979       else
11980         expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
11981       if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
11982                      ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
11983         {
11984           if (complain & tf_error)
11985             {
11986               error ("dependent-name %qE is parsed as a non-type, but "
11987                      "instantiation yields a type", qualified_id);
11988               inform (input_location, "say %<typename %E%> if a type is meant", qualified_id);
11989             }
11990           return error_mark_node;
11991         }
11992     }
11993
11994   if (DECL_P (expr))
11995     {
11996       check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
11997                                            scope);
11998       /* Remember that there was a reference to this entity.  */
11999       mark_used (expr);
12000     }
12001
12002   if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
12003     {
12004       if (complain & tf_error)
12005         qualified_name_lookup_error (scope,
12006                                      TREE_OPERAND (qualified_id, 1),
12007                                      expr, input_location);
12008       return error_mark_node;
12009     }
12010
12011   if (is_template)
12012     expr = lookup_template_function (expr, template_args);
12013
12014   if (expr == error_mark_node && complain & tf_error)
12015     qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
12016                                  expr, input_location);
12017   else if (TYPE_P (scope))
12018     {
12019       expr = (adjust_result_of_qualified_name_lookup
12020               (expr, scope, current_class_type));
12021       expr = (finish_qualified_id_expr
12022               (scope, expr, done, address_p && PTRMEM_OK_P (qualified_id),
12023                QUALIFIED_NAME_IS_TEMPLATE (qualified_id),
12024                /*template_arg_p=*/false));
12025     }
12026
12027   /* Expressions do not generally have reference type.  */
12028   if (TREE_CODE (expr) != SCOPE_REF
12029       /* However, if we're about to form a pointer-to-member, we just
12030          want the referenced member referenced.  */
12031       && TREE_CODE (expr) != OFFSET_REF)
12032     expr = convert_from_reference (expr);
12033
12034   return expr;
12035 }
12036
12037 /* Like tsubst, but deals with expressions.  This function just replaces
12038    template parms; to finish processing the resultant expression, use
12039    tsubst_copy_and_build or tsubst_expr.  */
12040
12041 static tree
12042 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
12043 {
12044   enum tree_code code;
12045   tree r;
12046
12047   if (t == NULL_TREE || t == error_mark_node || args == NULL_TREE)
12048     return t;
12049
12050   code = TREE_CODE (t);
12051
12052   switch (code)
12053     {
12054     case PARM_DECL:
12055       r = retrieve_local_specialization (t);
12056
12057       if (r == NULL)
12058         {
12059           tree c;
12060
12061           /* We get here for a use of 'this' in an NSDMI.  */
12062           if (DECL_NAME (t) == this_identifier
12063               && at_function_scope_p ()
12064               && DECL_CONSTRUCTOR_P (current_function_decl))
12065             return current_class_ptr;
12066
12067           /* This can happen for a parameter name used later in a function
12068              declaration (such as in a late-specified return type).  Just
12069              make a dummy decl, since it's only used for its type.  */
12070           gcc_assert (cp_unevaluated_operand != 0);
12071           /* We copy T because want to tsubst the PARM_DECL only,
12072              not the following PARM_DECLs that are chained to T.  */
12073           c = copy_node (t);
12074           r = tsubst_decl (c, args, complain);
12075           /* Give it the template pattern as its context; its true context
12076              hasn't been instantiated yet and this is good enough for
12077              mangling.  */
12078           DECL_CONTEXT (r) = DECL_CONTEXT (t);
12079         }
12080       
12081       if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
12082         r = ARGUMENT_PACK_SELECT_ARG (r);
12083       mark_used (r);
12084       return r;
12085
12086     case CONST_DECL:
12087       {
12088         tree enum_type;
12089         tree v;
12090
12091         if (DECL_TEMPLATE_PARM_P (t))
12092           return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
12093         /* There is no need to substitute into namespace-scope
12094            enumerators.  */
12095         if (DECL_NAMESPACE_SCOPE_P (t))
12096           return t;
12097         /* If ARGS is NULL, then T is known to be non-dependent.  */
12098         if (args == NULL_TREE)
12099           return integral_constant_value (t);
12100
12101         /* Unfortunately, we cannot just call lookup_name here.
12102            Consider:
12103
12104              template <int I> int f() {
12105              enum E { a = I };
12106              struct S { void g() { E e = a; } };
12107              };
12108
12109            When we instantiate f<7>::S::g(), say, lookup_name is not
12110            clever enough to find f<7>::a.  */
12111         enum_type
12112           = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl,
12113                               /*entering_scope=*/0);
12114
12115         for (v = TYPE_VALUES (enum_type);
12116              v != NULL_TREE;
12117              v = TREE_CHAIN (v))
12118           if (TREE_PURPOSE (v) == DECL_NAME (t))
12119             return TREE_VALUE (v);
12120
12121           /* We didn't find the name.  That should never happen; if
12122              name-lookup found it during preliminary parsing, we
12123              should find it again here during instantiation.  */
12124         gcc_unreachable ();
12125       }
12126       return t;
12127
12128     case FIELD_DECL:
12129       if (DECL_CONTEXT (t))
12130         {
12131           tree ctx;
12132
12133           ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
12134                                   /*entering_scope=*/1);
12135           if (ctx != DECL_CONTEXT (t))
12136             {
12137               tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
12138               if (!r)
12139                 {
12140                   if (complain & tf_error)
12141                     error ("using invalid field %qD", t);
12142                   return error_mark_node;
12143                 }
12144               return r;
12145             }
12146         }
12147
12148       return t;
12149
12150     case VAR_DECL:
12151     case FUNCTION_DECL:
12152       if ((DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
12153           || local_variable_p (t))
12154         t = tsubst (t, args, complain, in_decl);
12155       mark_used (t);
12156       return t;
12157
12158     case NAMESPACE_DECL:
12159       return t;
12160
12161     case OVERLOAD:
12162       /* An OVERLOAD will always be a non-dependent overload set; an
12163          overload set from function scope will just be represented with an
12164          IDENTIFIER_NODE, and from class scope with a BASELINK.  */
12165       gcc_assert (!uses_template_parms (t));
12166       return t;
12167
12168     case BASELINK:
12169       return tsubst_baselink (t, current_class_type, args, complain, in_decl);
12170
12171     case TEMPLATE_DECL:
12172       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
12173         return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
12174                        args, complain, in_decl);
12175       else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
12176         return tsubst (t, args, complain, in_decl);
12177       else if (DECL_CLASS_SCOPE_P (t)
12178                && uses_template_parms (DECL_CONTEXT (t)))
12179         {
12180           /* Template template argument like the following example need
12181              special treatment:
12182
12183                template <template <class> class TT> struct C {};
12184                template <class T> struct D {
12185                  template <class U> struct E {};
12186                  C<E> c;                                // #1
12187                };
12188                D<int> d;                                // #2
12189
12190              We are processing the template argument `E' in #1 for
12191              the template instantiation #2.  Originally, `E' is a
12192              TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT.  Now we
12193              have to substitute this with one having context `D<int>'.  */
12194
12195           tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
12196           return lookup_field (context, DECL_NAME(t), 0, false);
12197         }
12198       else
12199         /* Ordinary template template argument.  */
12200         return t;
12201
12202     case CAST_EXPR:
12203     case REINTERPRET_CAST_EXPR:
12204     case CONST_CAST_EXPR:
12205     case STATIC_CAST_EXPR:
12206     case DYNAMIC_CAST_EXPR:
12207     case IMPLICIT_CONV_EXPR:
12208     case CONVERT_EXPR:
12209     case NOP_EXPR:
12210       return build1
12211         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
12212          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
12213
12214     case SIZEOF_EXPR:
12215       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
12216         {
12217
12218           tree expanded;
12219           int len = 0;
12220
12221           ++cp_unevaluated_operand;
12222           ++c_inhibit_evaluation_warnings;
12223           /* We only want to compute the number of arguments.  */
12224           expanded = tsubst_pack_expansion (TREE_OPERAND (t, 0), args,
12225                                             complain, in_decl);
12226           --cp_unevaluated_operand;
12227           --c_inhibit_evaluation_warnings;
12228
12229           if (TREE_CODE (expanded) == TREE_VEC)
12230             len = TREE_VEC_LENGTH (expanded);
12231
12232           if (expanded == error_mark_node)
12233             return error_mark_node;
12234           else if (PACK_EXPANSION_P (expanded)
12235                    || (TREE_CODE (expanded) == TREE_VEC
12236                        && len > 0
12237                        && PACK_EXPANSION_P (TREE_VEC_ELT (expanded, len-1))))
12238             {
12239               if (TREE_CODE (expanded) == TREE_VEC)
12240                 expanded = TREE_VEC_ELT (expanded, len - 1);
12241
12242               if (TYPE_P (expanded))
12243                 return cxx_sizeof_or_alignof_type (expanded, SIZEOF_EXPR, 
12244                                                    complain & tf_error);
12245               else
12246                 return cxx_sizeof_or_alignof_expr (expanded, SIZEOF_EXPR,
12247                                                    complain & tf_error);
12248             }
12249           else
12250             return build_int_cst (size_type_node, len);
12251         }
12252       /* Fall through */
12253
12254     case INDIRECT_REF:
12255     case NEGATE_EXPR:
12256     case TRUTH_NOT_EXPR:
12257     case BIT_NOT_EXPR:
12258     case ADDR_EXPR:
12259     case UNARY_PLUS_EXPR:      /* Unary + */
12260     case ALIGNOF_EXPR:
12261     case AT_ENCODE_EXPR:
12262     case ARROW_EXPR:
12263     case THROW_EXPR:
12264     case TYPEID_EXPR:
12265     case REALPART_EXPR:
12266     case IMAGPART_EXPR:
12267       return build1
12268         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
12269          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
12270
12271     case COMPONENT_REF:
12272       {
12273         tree object;
12274         tree name;
12275
12276         object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
12277         name = TREE_OPERAND (t, 1);
12278         if (TREE_CODE (name) == BIT_NOT_EXPR)
12279           {
12280             name = tsubst_copy (TREE_OPERAND (name, 0), args,
12281                                 complain, in_decl);
12282             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
12283           }
12284         else if (TREE_CODE (name) == SCOPE_REF
12285                  && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
12286           {
12287             tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
12288                                      complain, in_decl);
12289             name = TREE_OPERAND (name, 1);
12290             name = tsubst_copy (TREE_OPERAND (name, 0), args,
12291                                 complain, in_decl);
12292             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
12293             name = build_qualified_name (/*type=*/NULL_TREE,
12294                                          base, name,
12295                                          /*template_p=*/false);
12296           }
12297         else if (BASELINK_P (name))
12298           name = tsubst_baselink (name,
12299                                   non_reference (TREE_TYPE (object)),
12300                                   args, complain,
12301                                   in_decl);
12302         else
12303           name = tsubst_copy (name, args, complain, in_decl);
12304         return build_nt (COMPONENT_REF, object, name, NULL_TREE);
12305       }
12306
12307     case PLUS_EXPR:
12308     case MINUS_EXPR:
12309     case MULT_EXPR:
12310     case TRUNC_DIV_EXPR:
12311     case CEIL_DIV_EXPR:
12312     case FLOOR_DIV_EXPR:
12313     case ROUND_DIV_EXPR:
12314     case EXACT_DIV_EXPR:
12315     case BIT_AND_EXPR:
12316     case BIT_IOR_EXPR:
12317     case BIT_XOR_EXPR:
12318     case TRUNC_MOD_EXPR:
12319     case FLOOR_MOD_EXPR:
12320     case TRUTH_ANDIF_EXPR:
12321     case TRUTH_ORIF_EXPR:
12322     case TRUTH_AND_EXPR:
12323     case TRUTH_OR_EXPR:
12324     case RSHIFT_EXPR:
12325     case LSHIFT_EXPR:
12326     case RROTATE_EXPR:
12327     case LROTATE_EXPR:
12328     case EQ_EXPR:
12329     case NE_EXPR:
12330     case MAX_EXPR:
12331     case MIN_EXPR:
12332     case LE_EXPR:
12333     case GE_EXPR:
12334     case LT_EXPR:
12335     case GT_EXPR:
12336     case COMPOUND_EXPR:
12337     case DOTSTAR_EXPR:
12338     case MEMBER_REF:
12339     case PREDECREMENT_EXPR:
12340     case PREINCREMENT_EXPR:
12341     case POSTDECREMENT_EXPR:
12342     case POSTINCREMENT_EXPR:
12343       return build_nt
12344         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12345          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
12346
12347     case SCOPE_REF:
12348       return build_qualified_name (/*type=*/NULL_TREE,
12349                                    tsubst_copy (TREE_OPERAND (t, 0),
12350                                                 args, complain, in_decl),
12351                                    tsubst_copy (TREE_OPERAND (t, 1),
12352                                                 args, complain, in_decl),
12353                                    QUALIFIED_NAME_IS_TEMPLATE (t));
12354
12355     case ARRAY_REF:
12356       return build_nt
12357         (ARRAY_REF,
12358          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12359          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
12360          NULL_TREE, NULL_TREE);
12361
12362     case CALL_EXPR:
12363       {
12364         int n = VL_EXP_OPERAND_LENGTH (t);
12365         tree result = build_vl_exp (CALL_EXPR, n);
12366         int i;
12367         for (i = 0; i < n; i++)
12368           TREE_OPERAND (t, i) = tsubst_copy (TREE_OPERAND (t, i), args,
12369                                              complain, in_decl);
12370         return result;
12371       }
12372
12373     case COND_EXPR:
12374     case MODOP_EXPR:
12375     case PSEUDO_DTOR_EXPR:
12376       {
12377         r = build_nt
12378           (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12379            tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
12380            tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
12381         TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
12382         return r;
12383       }
12384
12385     case NEW_EXPR:
12386       {
12387         r = build_nt
12388         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12389          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
12390          tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
12391         NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
12392         return r;
12393       }
12394
12395     case DELETE_EXPR:
12396       {
12397         r = build_nt
12398         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12399          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
12400         DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
12401         DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
12402         return r;
12403       }
12404
12405     case TEMPLATE_ID_EXPR:
12406       {
12407         /* Substituted template arguments */
12408         tree fn = TREE_OPERAND (t, 0);
12409         tree targs = TREE_OPERAND (t, 1);
12410
12411         fn = tsubst_copy (fn, args, complain, in_decl);
12412         if (targs)
12413           targs = tsubst_template_args (targs, args, complain, in_decl);
12414
12415         return lookup_template_function (fn, targs);
12416       }
12417
12418     case TREE_LIST:
12419       {
12420         tree purpose, value, chain;
12421
12422         if (t == void_list_node)
12423           return t;
12424
12425         purpose = TREE_PURPOSE (t);
12426         if (purpose)
12427           purpose = tsubst_copy (purpose, args, complain, in_decl);
12428         value = TREE_VALUE (t);
12429         if (value)
12430           value = tsubst_copy (value, args, complain, in_decl);
12431         chain = TREE_CHAIN (t);
12432         if (chain && chain != void_type_node)
12433           chain = tsubst_copy (chain, args, complain, in_decl);
12434         if (purpose == TREE_PURPOSE (t)
12435             && value == TREE_VALUE (t)
12436             && chain == TREE_CHAIN (t))
12437           return t;
12438         return tree_cons (purpose, value, chain);
12439       }
12440
12441     case RECORD_TYPE:
12442     case UNION_TYPE:
12443     case ENUMERAL_TYPE:
12444     case INTEGER_TYPE:
12445     case TEMPLATE_TYPE_PARM:
12446     case TEMPLATE_TEMPLATE_PARM:
12447     case BOUND_TEMPLATE_TEMPLATE_PARM:
12448     case TEMPLATE_PARM_INDEX:
12449     case POINTER_TYPE:
12450     case REFERENCE_TYPE:
12451     case OFFSET_TYPE:
12452     case FUNCTION_TYPE:
12453     case METHOD_TYPE:
12454     case ARRAY_TYPE:
12455     case TYPENAME_TYPE:
12456     case UNBOUND_CLASS_TEMPLATE:
12457     case TYPEOF_TYPE:
12458     case DECLTYPE_TYPE:
12459     case TYPE_DECL:
12460       return tsubst (t, args, complain, in_decl);
12461
12462     case IDENTIFIER_NODE:
12463       if (IDENTIFIER_TYPENAME_P (t))
12464         {
12465           tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
12466           return mangle_conv_op_name_for_type (new_type);
12467         }
12468       else
12469         return t;
12470
12471     case CONSTRUCTOR:
12472       /* This is handled by tsubst_copy_and_build.  */
12473       gcc_unreachable ();
12474
12475     case VA_ARG_EXPR:
12476       return build_x_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
12477                                           in_decl),
12478                              tsubst (TREE_TYPE (t), args, complain, in_decl));
12479
12480     case CLEANUP_POINT_EXPR:
12481       /* We shouldn't have built any of these during initial template
12482          generation.  Instead, they should be built during instantiation
12483          in response to the saved STMT_IS_FULL_EXPR_P setting.  */
12484       gcc_unreachable ();
12485
12486     case OFFSET_REF:
12487       r = build2
12488         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
12489          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12490          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
12491       PTRMEM_OK_P (r) = PTRMEM_OK_P (t);
12492       mark_used (TREE_OPERAND (r, 1));
12493       return r;
12494
12495     case EXPR_PACK_EXPANSION:
12496       error ("invalid use of pack expansion expression");
12497       return error_mark_node;
12498
12499     case NONTYPE_ARGUMENT_PACK:
12500       error ("use %<...%> to expand argument pack");
12501       return error_mark_node;
12502
12503     case INTEGER_CST:
12504     case REAL_CST:
12505     case STRING_CST:
12506     case COMPLEX_CST:
12507       {
12508         /* Instantiate any typedefs in the type.  */
12509         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
12510         r = fold_convert (type, t);
12511         gcc_assert (TREE_CODE (r) == code);
12512         return r;
12513       }
12514
12515     case PTRMEM_CST:
12516       /* These can sometimes show up in a partial instantiation, but never
12517          involve template parms.  */
12518       gcc_assert (!uses_template_parms (t));
12519       return t;
12520
12521     default:
12522       /* We shouldn't get here, but keep going if !ENABLE_CHECKING.  */
12523       gcc_checking_assert (false);
12524       return t;
12525     }
12526 }
12527
12528 /* Like tsubst_copy, but specifically for OpenMP clauses.  */
12529
12530 static tree
12531 tsubst_omp_clauses (tree clauses, tree args, tsubst_flags_t complain,
12532                     tree in_decl)
12533 {
12534   tree new_clauses = NULL, nc, oc;
12535
12536   for (oc = clauses; oc ; oc = OMP_CLAUSE_CHAIN (oc))
12537     {
12538       nc = copy_node (oc);
12539       OMP_CLAUSE_CHAIN (nc) = new_clauses;
12540       new_clauses = nc;
12541
12542       switch (OMP_CLAUSE_CODE (nc))
12543         {
12544         case OMP_CLAUSE_LASTPRIVATE:
12545           if (OMP_CLAUSE_LASTPRIVATE_STMT (oc))
12546             {
12547               OMP_CLAUSE_LASTPRIVATE_STMT (nc) = push_stmt_list ();
12548               tsubst_expr (OMP_CLAUSE_LASTPRIVATE_STMT (oc), args, complain,
12549                            in_decl, /*integral_constant_expression_p=*/false);
12550               OMP_CLAUSE_LASTPRIVATE_STMT (nc)
12551                 = pop_stmt_list (OMP_CLAUSE_LASTPRIVATE_STMT (nc));
12552             }
12553           /* FALLTHRU */
12554         case OMP_CLAUSE_PRIVATE:
12555         case OMP_CLAUSE_SHARED:
12556         case OMP_CLAUSE_FIRSTPRIVATE:
12557         case OMP_CLAUSE_REDUCTION:
12558         case OMP_CLAUSE_COPYIN:
12559         case OMP_CLAUSE_COPYPRIVATE:
12560         case OMP_CLAUSE_IF:
12561         case OMP_CLAUSE_NUM_THREADS:
12562         case OMP_CLAUSE_SCHEDULE:
12563         case OMP_CLAUSE_COLLAPSE:
12564         case OMP_CLAUSE_FINAL:
12565           OMP_CLAUSE_OPERAND (nc, 0)
12566             = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain, 
12567                            in_decl, /*integral_constant_expression_p=*/false);
12568           break;
12569         case OMP_CLAUSE_NOWAIT:
12570         case OMP_CLAUSE_ORDERED:
12571         case OMP_CLAUSE_DEFAULT:
12572         case OMP_CLAUSE_UNTIED:
12573         case OMP_CLAUSE_MERGEABLE:
12574           break;
12575         default:
12576           gcc_unreachable ();
12577         }
12578     }
12579
12580   return finish_omp_clauses (nreverse (new_clauses));
12581 }
12582
12583 /* Like tsubst_copy_and_build, but unshare TREE_LIST nodes.  */
12584
12585 static tree
12586 tsubst_copy_asm_operands (tree t, tree args, tsubst_flags_t complain,
12587                           tree in_decl)
12588 {
12589 #define RECUR(t) tsubst_copy_asm_operands (t, args, complain, in_decl)
12590
12591   tree purpose, value, chain;
12592
12593   if (t == NULL)
12594     return t;
12595
12596   if (TREE_CODE (t) != TREE_LIST)
12597     return tsubst_copy_and_build (t, args, complain, in_decl,
12598                                   /*function_p=*/false,
12599                                   /*integral_constant_expression_p=*/false);
12600
12601   if (t == void_list_node)
12602     return t;
12603
12604   purpose = TREE_PURPOSE (t);
12605   if (purpose)
12606     purpose = RECUR (purpose);
12607   value = TREE_VALUE (t);
12608   if (value && TREE_CODE (value) != LABEL_DECL)
12609     value = RECUR (value);
12610   chain = TREE_CHAIN (t);
12611   if (chain && chain != void_type_node)
12612     chain = RECUR (chain);
12613   return tree_cons (purpose, value, chain);
12614 #undef RECUR
12615 }
12616
12617 /* Substitute one OMP_FOR iterator.  */
12618
12619 static void
12620 tsubst_omp_for_iterator (tree t, int i, tree declv, tree initv,
12621                          tree condv, tree incrv, tree *clauses,
12622                          tree args, tsubst_flags_t complain, tree in_decl,
12623                          bool integral_constant_expression_p)
12624 {
12625 #define RECUR(NODE)                             \
12626   tsubst_expr ((NODE), args, complain, in_decl, \
12627                integral_constant_expression_p)
12628   tree decl, init, cond, incr, auto_node;
12629
12630   init = TREE_VEC_ELT (OMP_FOR_INIT (t), i);
12631   gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
12632   decl = RECUR (TREE_OPERAND (init, 0));
12633   init = TREE_OPERAND (init, 1);
12634   auto_node = type_uses_auto (TREE_TYPE (decl));
12635   if (auto_node && init)
12636     {
12637       tree init_expr = init;
12638       if (TREE_CODE (init_expr) == DECL_EXPR)
12639         init_expr = DECL_INITIAL (DECL_EXPR_DECL (init_expr));
12640       init_expr = RECUR (init_expr);
12641       TREE_TYPE (decl)
12642         = do_auto_deduction (TREE_TYPE (decl), init_expr, auto_node);
12643     }
12644   gcc_assert (!type_dependent_expression_p (decl));
12645
12646   if (!CLASS_TYPE_P (TREE_TYPE (decl)))
12647     {
12648       cond = RECUR (TREE_VEC_ELT (OMP_FOR_COND (t), i));
12649       incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
12650       if (TREE_CODE (incr) == MODIFY_EXPR)
12651         incr = build_x_modify_expr (RECUR (TREE_OPERAND (incr, 0)), NOP_EXPR,
12652                                     RECUR (TREE_OPERAND (incr, 1)),
12653                                     complain);
12654       else
12655         incr = RECUR (incr);
12656       TREE_VEC_ELT (declv, i) = decl;
12657       TREE_VEC_ELT (initv, i) = init;
12658       TREE_VEC_ELT (condv, i) = cond;
12659       TREE_VEC_ELT (incrv, i) = incr;
12660       return;
12661     }
12662
12663   if (init && TREE_CODE (init) != DECL_EXPR)
12664     {
12665       tree c;
12666       for (c = *clauses; c ; c = OMP_CLAUSE_CHAIN (c))
12667         {
12668           if ((OMP_CLAUSE_CODE (c) == OMP_CLAUSE_PRIVATE
12669                || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE)
12670               && OMP_CLAUSE_DECL (c) == decl)
12671             break;
12672           else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FIRSTPRIVATE
12673                    && OMP_CLAUSE_DECL (c) == decl)
12674             error ("iteration variable %qD should not be firstprivate", decl);
12675           else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION
12676                    && OMP_CLAUSE_DECL (c) == decl)
12677             error ("iteration variable %qD should not be reduction", decl);
12678         }
12679       if (c == NULL)
12680         {
12681           c = build_omp_clause (input_location, OMP_CLAUSE_PRIVATE);
12682           OMP_CLAUSE_DECL (c) = decl;
12683           c = finish_omp_clauses (c);
12684           if (c)
12685             {
12686               OMP_CLAUSE_CHAIN (c) = *clauses;
12687               *clauses = c;
12688             }
12689         }
12690     }
12691   cond = TREE_VEC_ELT (OMP_FOR_COND (t), i);
12692   if (COMPARISON_CLASS_P (cond))
12693     cond = build2 (TREE_CODE (cond), boolean_type_node,
12694                    RECUR (TREE_OPERAND (cond, 0)),
12695                    RECUR (TREE_OPERAND (cond, 1)));
12696   else
12697     cond = RECUR (cond);
12698   incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
12699   switch (TREE_CODE (incr))
12700     {
12701     case PREINCREMENT_EXPR:
12702     case PREDECREMENT_EXPR:
12703     case POSTINCREMENT_EXPR:
12704     case POSTDECREMENT_EXPR:
12705       incr = build2 (TREE_CODE (incr), TREE_TYPE (decl),
12706                      RECUR (TREE_OPERAND (incr, 0)), NULL_TREE);
12707       break;
12708     case MODIFY_EXPR:
12709       if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
12710           || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
12711         {
12712           tree rhs = TREE_OPERAND (incr, 1);
12713           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl),
12714                          RECUR (TREE_OPERAND (incr, 0)),
12715                          build2 (TREE_CODE (rhs), TREE_TYPE (decl),
12716                                  RECUR (TREE_OPERAND (rhs, 0)),
12717                                  RECUR (TREE_OPERAND (rhs, 1))));
12718         }
12719       else
12720         incr = RECUR (incr);
12721       break;
12722     case MODOP_EXPR:
12723       if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
12724           || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
12725         {
12726           tree lhs = RECUR (TREE_OPERAND (incr, 0));
12727           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl), lhs,
12728                          build2 (TREE_CODE (TREE_OPERAND (incr, 1)),
12729                                  TREE_TYPE (decl), lhs,
12730                                  RECUR (TREE_OPERAND (incr, 2))));
12731         }
12732       else if (TREE_CODE (TREE_OPERAND (incr, 1)) == NOP_EXPR
12733                && (TREE_CODE (TREE_OPERAND (incr, 2)) == PLUS_EXPR
12734                    || (TREE_CODE (TREE_OPERAND (incr, 2)) == MINUS_EXPR)))
12735         {
12736           tree rhs = TREE_OPERAND (incr, 2);
12737           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl),
12738                          RECUR (TREE_OPERAND (incr, 0)),
12739                          build2 (TREE_CODE (rhs), TREE_TYPE (decl),
12740                                  RECUR (TREE_OPERAND (rhs, 0)),
12741                                  RECUR (TREE_OPERAND (rhs, 1))));
12742         }
12743       else
12744         incr = RECUR (incr);
12745       break;
12746     default:
12747       incr = RECUR (incr);
12748       break;
12749     }
12750
12751   TREE_VEC_ELT (declv, i) = decl;
12752   TREE_VEC_ELT (initv, i) = init;
12753   TREE_VEC_ELT (condv, i) = cond;
12754   TREE_VEC_ELT (incrv, i) = incr;
12755 #undef RECUR
12756 }
12757
12758 /* Like tsubst_copy for expressions, etc. but also does semantic
12759    processing.  */
12760
12761 static tree
12762 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
12763              bool integral_constant_expression_p)
12764 {
12765 #define RECUR(NODE)                             \
12766   tsubst_expr ((NODE), args, complain, in_decl, \
12767                integral_constant_expression_p)
12768
12769   tree stmt, tmp;
12770
12771   if (t == NULL_TREE || t == error_mark_node)
12772     return t;
12773
12774   if (EXPR_HAS_LOCATION (t))
12775     input_location = EXPR_LOCATION (t);
12776   if (STATEMENT_CODE_P (TREE_CODE (t)))
12777     current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
12778
12779   switch (TREE_CODE (t))
12780     {
12781     case STATEMENT_LIST:
12782       {
12783         tree_stmt_iterator i;
12784         for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
12785           RECUR (tsi_stmt (i));
12786         break;
12787       }
12788
12789     case CTOR_INITIALIZER:
12790       finish_mem_initializers (tsubst_initializer_list
12791                                (TREE_OPERAND (t, 0), args));
12792       break;
12793
12794     case RETURN_EXPR:
12795       finish_return_stmt (RECUR (TREE_OPERAND (t, 0)));
12796       break;
12797
12798     case EXPR_STMT:
12799       tmp = RECUR (EXPR_STMT_EXPR (t));
12800       if (EXPR_STMT_STMT_EXPR_RESULT (t))
12801         finish_stmt_expr_expr (tmp, cur_stmt_expr);
12802       else
12803         finish_expr_stmt (tmp);
12804       break;
12805
12806     case USING_STMT:
12807       do_using_directive (USING_STMT_NAMESPACE (t));
12808       break;
12809
12810     case DECL_EXPR:
12811       {
12812         tree decl, pattern_decl;
12813         tree init;
12814
12815         pattern_decl = decl = DECL_EXPR_DECL (t);
12816         if (TREE_CODE (decl) == LABEL_DECL)
12817           finish_label_decl (DECL_NAME (decl));
12818         else if (TREE_CODE (decl) == USING_DECL)
12819           {
12820             tree scope = USING_DECL_SCOPE (decl);
12821             tree name = DECL_NAME (decl);
12822             tree decl;
12823
12824             scope = tsubst (scope, args, complain, in_decl);
12825             decl = lookup_qualified_name (scope, name,
12826                                           /*is_type_p=*/false,
12827                                           /*complain=*/false);
12828             if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
12829               qualified_name_lookup_error (scope, name, decl, input_location);
12830             else
12831               do_local_using_decl (decl, scope, name);
12832           }
12833         else
12834           {
12835             init = DECL_INITIAL (decl);
12836             decl = tsubst (decl, args, complain, in_decl);
12837             if (decl != error_mark_node)
12838               {
12839                 /* By marking the declaration as instantiated, we avoid
12840                    trying to instantiate it.  Since instantiate_decl can't
12841                    handle local variables, and since we've already done
12842                    all that needs to be done, that's the right thing to
12843                    do.  */
12844                 if (TREE_CODE (decl) == VAR_DECL)
12845                   DECL_TEMPLATE_INSTANTIATED (decl) = 1;
12846                 if (TREE_CODE (decl) == VAR_DECL
12847                     && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
12848                   /* Anonymous aggregates are a special case.  */
12849                   finish_anon_union (decl);
12850                 else if (is_capture_proxy (DECL_EXPR_DECL (t)))
12851                   {
12852                     DECL_CONTEXT (decl) = current_function_decl;
12853                     insert_capture_proxy (decl);
12854                   }
12855                 else
12856                   {
12857                     int const_init = false;
12858                     maybe_push_decl (decl);
12859                     if (TREE_CODE (decl) == VAR_DECL
12860                         && DECL_PRETTY_FUNCTION_P (decl))
12861                       {
12862                         /* For __PRETTY_FUNCTION__ we have to adjust the
12863                            initializer.  */
12864                         const char *const name
12865                           = cxx_printable_name (current_function_decl, 2);
12866                         init = cp_fname_init (name, &TREE_TYPE (decl));
12867                       }
12868                     else
12869                       {
12870                         tree t = RECUR (init);
12871
12872                         if (init && !t)
12873                           {
12874                             /* If we had an initializer but it
12875                                instantiated to nothing,
12876                                value-initialize the object.  This will
12877                                only occur when the initializer was a
12878                                pack expansion where the parameter packs
12879                                used in that expansion were of length
12880                                zero.  */
12881                             init = build_value_init (TREE_TYPE (decl),
12882                                                      complain);
12883                             if (TREE_CODE (init) == AGGR_INIT_EXPR)
12884                               init = get_target_expr_sfinae (init, complain);
12885                           }
12886                         else
12887                           init = t;
12888                       }
12889
12890                     if (TREE_CODE (decl) == VAR_DECL)
12891                       const_init = (DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P
12892                                     (pattern_decl));
12893                     cp_finish_decl (decl, init, const_init, NULL_TREE, 0);
12894                   }
12895               }
12896           }
12897
12898         /* A DECL_EXPR can also be used as an expression, in the condition
12899            clause of an if/for/while construct.  */
12900         return decl;
12901       }
12902
12903     case FOR_STMT:
12904       stmt = begin_for_stmt (NULL_TREE, NULL_TREE);
12905       RECUR (FOR_INIT_STMT (t));
12906       finish_for_init_stmt (stmt);
12907       tmp = RECUR (FOR_COND (t));
12908       finish_for_cond (tmp, stmt);
12909       tmp = RECUR (FOR_EXPR (t));
12910       finish_for_expr (tmp, stmt);
12911       RECUR (FOR_BODY (t));
12912       finish_for_stmt (stmt);
12913       break;
12914
12915     case RANGE_FOR_STMT:
12916       {
12917         tree decl, expr;
12918         stmt = begin_for_stmt (NULL_TREE, NULL_TREE);
12919         decl = RANGE_FOR_DECL (t);
12920         decl = tsubst (decl, args, complain, in_decl);
12921         maybe_push_decl (decl);
12922         expr = RECUR (RANGE_FOR_EXPR (t));
12923         stmt = cp_convert_range_for (stmt, decl, expr);
12924         RECUR (RANGE_FOR_BODY (t));
12925         finish_for_stmt (stmt);
12926       }
12927       break;
12928
12929     case WHILE_STMT:
12930       stmt = begin_while_stmt ();
12931       tmp = RECUR (WHILE_COND (t));
12932       finish_while_stmt_cond (tmp, stmt);
12933       RECUR (WHILE_BODY (t));
12934       finish_while_stmt (stmt);
12935       break;
12936
12937     case DO_STMT:
12938       stmt = begin_do_stmt ();
12939       RECUR (DO_BODY (t));
12940       finish_do_body (stmt);
12941       tmp = RECUR (DO_COND (t));
12942       finish_do_stmt (tmp, stmt);
12943       break;
12944
12945     case IF_STMT:
12946       stmt = begin_if_stmt ();
12947       tmp = RECUR (IF_COND (t));
12948       finish_if_stmt_cond (tmp, stmt);
12949       RECUR (THEN_CLAUSE (t));
12950       finish_then_clause (stmt);
12951
12952       if (ELSE_CLAUSE (t))
12953         {
12954           begin_else_clause (stmt);
12955           RECUR (ELSE_CLAUSE (t));
12956           finish_else_clause (stmt);
12957         }
12958
12959       finish_if_stmt (stmt);
12960       break;
12961
12962     case BIND_EXPR:
12963       if (BIND_EXPR_BODY_BLOCK (t))
12964         stmt = begin_function_body ();
12965       else
12966         stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
12967                                     ? BCS_TRY_BLOCK : 0);
12968
12969       RECUR (BIND_EXPR_BODY (t));
12970
12971       if (BIND_EXPR_BODY_BLOCK (t))
12972         finish_function_body (stmt);
12973       else
12974         finish_compound_stmt (stmt);
12975       break;
12976
12977     case BREAK_STMT:
12978       finish_break_stmt ();
12979       break;
12980
12981     case CONTINUE_STMT:
12982       finish_continue_stmt ();
12983       break;
12984
12985     case SWITCH_STMT:
12986       stmt = begin_switch_stmt ();
12987       tmp = RECUR (SWITCH_STMT_COND (t));
12988       finish_switch_cond (tmp, stmt);
12989       RECUR (SWITCH_STMT_BODY (t));
12990       finish_switch_stmt (stmt);
12991       break;
12992
12993     case CASE_LABEL_EXPR:
12994       finish_case_label (EXPR_LOCATION (t),
12995                          RECUR (CASE_LOW (t)),
12996                          RECUR (CASE_HIGH (t)));
12997       break;
12998
12999     case LABEL_EXPR:
13000       {
13001         tree decl = LABEL_EXPR_LABEL (t);
13002         tree label;
13003
13004         label = finish_label_stmt (DECL_NAME (decl));
13005         if (DECL_ATTRIBUTES (decl) != NULL_TREE)
13006           cplus_decl_attributes (&label, DECL_ATTRIBUTES (decl), 0);
13007       }
13008       break;
13009
13010     case GOTO_EXPR:
13011       tmp = GOTO_DESTINATION (t);
13012       if (TREE_CODE (tmp) != LABEL_DECL)
13013         /* Computed goto's must be tsubst'd into.  On the other hand,
13014            non-computed gotos must not be; the identifier in question
13015            will have no binding.  */
13016         tmp = RECUR (tmp);
13017       else
13018         tmp = DECL_NAME (tmp);
13019       finish_goto_stmt (tmp);
13020       break;
13021
13022     case ASM_EXPR:
13023       tmp = finish_asm_stmt
13024         (ASM_VOLATILE_P (t),
13025          RECUR (ASM_STRING (t)),
13026          tsubst_copy_asm_operands (ASM_OUTPUTS (t), args, complain, in_decl),
13027          tsubst_copy_asm_operands (ASM_INPUTS (t), args, complain, in_decl),
13028          tsubst_copy_asm_operands (ASM_CLOBBERS (t), args, complain, in_decl),
13029          tsubst_copy_asm_operands (ASM_LABELS (t), args, complain, in_decl));
13030       {
13031         tree asm_expr = tmp;
13032         if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
13033           asm_expr = TREE_OPERAND (asm_expr, 0);
13034         ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
13035       }
13036       break;
13037
13038     case TRY_BLOCK:
13039       if (CLEANUP_P (t))
13040         {
13041           stmt = begin_try_block ();
13042           RECUR (TRY_STMTS (t));
13043           finish_cleanup_try_block (stmt);
13044           finish_cleanup (RECUR (TRY_HANDLERS (t)), stmt);
13045         }
13046       else
13047         {
13048           tree compound_stmt = NULL_TREE;
13049
13050           if (FN_TRY_BLOCK_P (t))
13051             stmt = begin_function_try_block (&compound_stmt);
13052           else
13053             stmt = begin_try_block ();
13054
13055           RECUR (TRY_STMTS (t));
13056
13057           if (FN_TRY_BLOCK_P (t))
13058             finish_function_try_block (stmt);
13059           else
13060             finish_try_block (stmt);
13061
13062           RECUR (TRY_HANDLERS (t));
13063           if (FN_TRY_BLOCK_P (t))
13064             finish_function_handler_sequence (stmt, compound_stmt);
13065           else
13066             finish_handler_sequence (stmt);
13067         }
13068       break;
13069
13070     case HANDLER:
13071       {
13072         tree decl = HANDLER_PARMS (t);
13073
13074         if (decl)
13075           {
13076             decl = tsubst (decl, args, complain, in_decl);
13077             /* Prevent instantiate_decl from trying to instantiate
13078                this variable.  We've already done all that needs to be
13079                done.  */
13080             if (decl != error_mark_node)
13081               DECL_TEMPLATE_INSTANTIATED (decl) = 1;
13082           }
13083         stmt = begin_handler ();
13084         finish_handler_parms (decl, stmt);
13085         RECUR (HANDLER_BODY (t));
13086         finish_handler (stmt);
13087       }
13088       break;
13089
13090     case TAG_DEFN:
13091       tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
13092       break;
13093
13094     case STATIC_ASSERT:
13095       {
13096         tree condition = 
13097           tsubst_expr (STATIC_ASSERT_CONDITION (t), 
13098                        args,
13099                        complain, in_decl,
13100                        /*integral_constant_expression_p=*/true);
13101         finish_static_assert (condition,
13102                               STATIC_ASSERT_MESSAGE (t),
13103                               STATIC_ASSERT_SOURCE_LOCATION (t),
13104                               /*member_p=*/false);
13105       }
13106       break;
13107
13108     case OMP_PARALLEL:
13109       tmp = tsubst_omp_clauses (OMP_PARALLEL_CLAUSES (t),
13110                                 args, complain, in_decl);
13111       stmt = begin_omp_parallel ();
13112       RECUR (OMP_PARALLEL_BODY (t));
13113       OMP_PARALLEL_COMBINED (finish_omp_parallel (tmp, stmt))
13114         = OMP_PARALLEL_COMBINED (t);
13115       break;
13116
13117     case OMP_TASK:
13118       tmp = tsubst_omp_clauses (OMP_TASK_CLAUSES (t),
13119                                 args, complain, in_decl);
13120       stmt = begin_omp_task ();
13121       RECUR (OMP_TASK_BODY (t));
13122       finish_omp_task (tmp, stmt);
13123       break;
13124
13125     case OMP_FOR:
13126       {
13127         tree clauses, body, pre_body;
13128         tree declv, initv, condv, incrv;
13129         int i;
13130
13131         clauses = tsubst_omp_clauses (OMP_FOR_CLAUSES (t),
13132                                       args, complain, in_decl);
13133         declv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
13134         initv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
13135         condv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
13136         incrv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
13137
13138         for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INIT (t)); i++)
13139           tsubst_omp_for_iterator (t, i, declv, initv, condv, incrv,
13140                                    &clauses, args, complain, in_decl,
13141                                    integral_constant_expression_p);
13142
13143         stmt = begin_omp_structured_block ();
13144
13145         for (i = 0; i < TREE_VEC_LENGTH (initv); i++)
13146           if (TREE_VEC_ELT (initv, i) == NULL
13147               || TREE_CODE (TREE_VEC_ELT (initv, i)) != DECL_EXPR)
13148             TREE_VEC_ELT (initv, i) = RECUR (TREE_VEC_ELT (initv, i));
13149           else if (CLASS_TYPE_P (TREE_TYPE (TREE_VEC_ELT (initv, i))))
13150             {
13151               tree init = RECUR (TREE_VEC_ELT (initv, i));
13152               gcc_assert (init == TREE_VEC_ELT (declv, i));
13153               TREE_VEC_ELT (initv, i) = NULL_TREE;
13154             }
13155           else
13156             {
13157               tree decl_expr = TREE_VEC_ELT (initv, i);
13158               tree init = DECL_INITIAL (DECL_EXPR_DECL (decl_expr));
13159               gcc_assert (init != NULL);
13160               TREE_VEC_ELT (initv, i) = RECUR (init);
13161               DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = NULL;
13162               RECUR (decl_expr);
13163               DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = init;
13164             }
13165
13166         pre_body = push_stmt_list ();
13167         RECUR (OMP_FOR_PRE_BODY (t));
13168         pre_body = pop_stmt_list (pre_body);
13169
13170         body = push_stmt_list ();
13171         RECUR (OMP_FOR_BODY (t));
13172         body = pop_stmt_list (body);
13173
13174         t = finish_omp_for (EXPR_LOCATION (t), declv, initv, condv, incrv,
13175                             body, pre_body, clauses);
13176
13177         add_stmt (finish_omp_structured_block (stmt));
13178       }
13179       break;
13180
13181     case OMP_SECTIONS:
13182     case OMP_SINGLE:
13183       tmp = tsubst_omp_clauses (OMP_CLAUSES (t), args, complain, in_decl);
13184       stmt = push_stmt_list ();
13185       RECUR (OMP_BODY (t));
13186       stmt = pop_stmt_list (stmt);
13187
13188       t = copy_node (t);
13189       OMP_BODY (t) = stmt;
13190       OMP_CLAUSES (t) = tmp;
13191       add_stmt (t);
13192       break;
13193
13194     case OMP_SECTION:
13195     case OMP_CRITICAL:
13196     case OMP_MASTER:
13197     case OMP_ORDERED:
13198       stmt = push_stmt_list ();
13199       RECUR (OMP_BODY (t));
13200       stmt = pop_stmt_list (stmt);
13201
13202       t = copy_node (t);
13203       OMP_BODY (t) = stmt;
13204       add_stmt (t);
13205       break;
13206
13207     case OMP_ATOMIC:
13208       gcc_assert (OMP_ATOMIC_DEPENDENT_P (t));
13209       if (TREE_CODE (TREE_OPERAND (t, 1)) != MODIFY_EXPR)
13210         {
13211           tree op1 = TREE_OPERAND (t, 1);
13212           tree rhs1 = NULL_TREE;
13213           tree lhs, rhs;
13214           if (TREE_CODE (op1) == COMPOUND_EXPR)
13215             {
13216               rhs1 = RECUR (TREE_OPERAND (op1, 0));
13217               op1 = TREE_OPERAND (op1, 1);
13218             }
13219           lhs = RECUR (TREE_OPERAND (op1, 0));
13220           rhs = RECUR (TREE_OPERAND (op1, 1));
13221           finish_omp_atomic (OMP_ATOMIC, TREE_CODE (op1), lhs, rhs,
13222                              NULL_TREE, NULL_TREE, rhs1);
13223         }
13224       else
13225         {
13226           tree op1 = TREE_OPERAND (t, 1);
13227           tree v = NULL_TREE, lhs, rhs = NULL_TREE, lhs1 = NULL_TREE;
13228           tree rhs1 = NULL_TREE;
13229           enum tree_code code = TREE_CODE (TREE_OPERAND (op1, 1));
13230           enum tree_code opcode = NOP_EXPR;
13231           if (code == OMP_ATOMIC_READ)
13232             {
13233               v = RECUR (TREE_OPERAND (op1, 0));
13234               lhs = RECUR (TREE_OPERAND (TREE_OPERAND (op1, 1), 0));
13235             }
13236           else if (code == OMP_ATOMIC_CAPTURE_OLD
13237                    || code == OMP_ATOMIC_CAPTURE_NEW)
13238             {
13239               tree op11 = TREE_OPERAND (TREE_OPERAND (op1, 1), 1);
13240               v = RECUR (TREE_OPERAND (op1, 0));
13241               lhs1 = RECUR (TREE_OPERAND (TREE_OPERAND (op1, 1), 0));
13242               if (TREE_CODE (op11) == COMPOUND_EXPR)
13243                 {
13244                   rhs1 = RECUR (TREE_OPERAND (op11, 0));
13245                   op11 = TREE_OPERAND (op11, 1);
13246                 }
13247               lhs = RECUR (TREE_OPERAND (op11, 0));
13248               rhs = RECUR (TREE_OPERAND (op11, 1));
13249               opcode = TREE_CODE (op11);
13250             }
13251           else
13252             {
13253               code = OMP_ATOMIC;
13254               lhs = RECUR (TREE_OPERAND (op1, 0));
13255               rhs = RECUR (TREE_OPERAND (op1, 1));
13256             }
13257           finish_omp_atomic (code, opcode, lhs, rhs, v, lhs1, rhs1);
13258         }
13259       break;
13260
13261     case TRANSACTION_EXPR:
13262       {
13263         int flags = 0;
13264         flags |= (TRANSACTION_EXPR_OUTER (t) ? TM_STMT_ATTR_OUTER : 0);
13265         flags |= (TRANSACTION_EXPR_RELAXED (t) ? TM_STMT_ATTR_RELAXED : 0);
13266
13267         if (TRANSACTION_EXPR_IS_STMT (t))
13268           {
13269             tree body = TRANSACTION_EXPR_BODY (t);
13270             tree noex = NULL_TREE;
13271             if (TREE_CODE (body) == MUST_NOT_THROW_EXPR)
13272               {
13273                 noex = MUST_NOT_THROW_COND (body);
13274                 if (noex == NULL_TREE)
13275                   noex = boolean_true_node;
13276                 body = TREE_OPERAND (body, 0);
13277               }
13278             stmt = begin_transaction_stmt (input_location, NULL, flags);
13279             RECUR (body);
13280             finish_transaction_stmt (stmt, NULL, flags, RECUR (noex));
13281           }
13282         else
13283           {
13284             stmt = build_transaction_expr (EXPR_LOCATION (t),
13285                                            RECUR (TRANSACTION_EXPR_BODY (t)),
13286                                            flags, NULL_TREE);
13287             return stmt;
13288           }
13289       }
13290       break;
13291
13292     case MUST_NOT_THROW_EXPR:
13293       return build_must_not_throw_expr (RECUR (TREE_OPERAND (t, 0)),
13294                                         RECUR (MUST_NOT_THROW_COND (t)));
13295
13296     case EXPR_PACK_EXPANSION:
13297       error ("invalid use of pack expansion expression");
13298       return error_mark_node;
13299
13300     case NONTYPE_ARGUMENT_PACK:
13301       error ("use %<...%> to expand argument pack");
13302       return error_mark_node;
13303
13304     default:
13305       gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
13306
13307       return tsubst_copy_and_build (t, args, complain, in_decl,
13308                                     /*function_p=*/false,
13309                                     integral_constant_expression_p);
13310     }
13311
13312   return NULL_TREE;
13313 #undef RECUR
13314 }
13315
13316 /* T is a postfix-expression that is not being used in a function
13317    call.  Return the substituted version of T.  */
13318
13319 static tree
13320 tsubst_non_call_postfix_expression (tree t, tree args,
13321                                     tsubst_flags_t complain,
13322                                     tree in_decl)
13323 {
13324   if (TREE_CODE (t) == SCOPE_REF)
13325     t = tsubst_qualified_id (t, args, complain, in_decl,
13326                              /*done=*/false, /*address_p=*/false);
13327   else
13328     t = tsubst_copy_and_build (t, args, complain, in_decl,
13329                                /*function_p=*/false,
13330                                /*integral_constant_expression_p=*/false);
13331
13332   return t;
13333 }
13334
13335 /* Like tsubst but deals with expressions and performs semantic
13336    analysis.  FUNCTION_P is true if T is the "F" in "F (ARGS)".  */
13337
13338 tree
13339 tsubst_copy_and_build (tree t,
13340                        tree args,
13341                        tsubst_flags_t complain,
13342                        tree in_decl,
13343                        bool function_p,
13344                        bool integral_constant_expression_p)
13345 {
13346 #define RECUR(NODE)                                             \
13347   tsubst_copy_and_build (NODE, args, complain, in_decl,         \
13348                          /*function_p=*/false,                  \
13349                          integral_constant_expression_p)
13350
13351   tree op1;
13352
13353   if (t == NULL_TREE || t == error_mark_node)
13354     return t;
13355
13356   switch (TREE_CODE (t))
13357     {
13358     case USING_DECL:
13359       t = DECL_NAME (t);
13360       /* Fall through.  */
13361     case IDENTIFIER_NODE:
13362       {
13363         tree decl;
13364         cp_id_kind idk;
13365         bool non_integral_constant_expression_p;
13366         const char *error_msg;
13367
13368         if (IDENTIFIER_TYPENAME_P (t))
13369           {
13370             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13371             t = mangle_conv_op_name_for_type (new_type);
13372           }
13373
13374         /* Look up the name.  */
13375         decl = lookup_name (t);
13376
13377         /* By convention, expressions use ERROR_MARK_NODE to indicate
13378            failure, not NULL_TREE.  */
13379         if (decl == NULL_TREE)
13380           decl = error_mark_node;
13381
13382         decl = finish_id_expression (t, decl, NULL_TREE,
13383                                      &idk,
13384                                      integral_constant_expression_p,
13385           /*allow_non_integral_constant_expression_p=*/(cxx_dialect >= cxx0x),
13386                                      &non_integral_constant_expression_p,
13387                                      /*template_p=*/false,
13388                                      /*done=*/true,
13389                                      /*address_p=*/false,
13390                                      /*template_arg_p=*/false,
13391                                      &error_msg,
13392                                      input_location);
13393         if (error_msg)
13394           error (error_msg);
13395         if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
13396           {
13397             if (complain & tf_error)
13398               unqualified_name_lookup_error (decl);
13399             decl = error_mark_node;
13400           }
13401         return decl;
13402       }
13403
13404     case TEMPLATE_ID_EXPR:
13405       {
13406         tree object;
13407         tree templ = RECUR (TREE_OPERAND (t, 0));
13408         tree targs = TREE_OPERAND (t, 1);
13409
13410         if (targs)
13411           targs = tsubst_template_args (targs, args, complain, in_decl);
13412
13413         if (TREE_CODE (templ) == COMPONENT_REF)
13414           {
13415             object = TREE_OPERAND (templ, 0);
13416             templ = TREE_OPERAND (templ, 1);
13417           }
13418         else
13419           object = NULL_TREE;
13420         templ = lookup_template_function (templ, targs);
13421
13422         if (object)
13423           return build3 (COMPONENT_REF, TREE_TYPE (templ),
13424                          object, templ, NULL_TREE);
13425         else
13426           return baselink_for_fns (templ);
13427       }
13428
13429     case INDIRECT_REF:
13430       {
13431         tree r = RECUR (TREE_OPERAND (t, 0));
13432
13433         if (REFERENCE_REF_P (t))
13434           {
13435             /* A type conversion to reference type will be enclosed in
13436                such an indirect ref, but the substitution of the cast
13437                will have also added such an indirect ref.  */
13438             if (TREE_CODE (TREE_TYPE (r)) == REFERENCE_TYPE)
13439               r = convert_from_reference (r);
13440           }
13441         else
13442           r = build_x_indirect_ref (r, RO_UNARY_STAR, complain);
13443         return r;
13444       }
13445
13446     case NOP_EXPR:
13447       return build_nop
13448         (tsubst (TREE_TYPE (t), args, complain, in_decl),
13449          RECUR (TREE_OPERAND (t, 0)));
13450
13451     case IMPLICIT_CONV_EXPR:
13452       {
13453         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13454         tree expr = RECUR (TREE_OPERAND (t, 0));
13455         int flags = LOOKUP_IMPLICIT;
13456         if (IMPLICIT_CONV_EXPR_DIRECT_INIT (t))
13457           flags = LOOKUP_NORMAL;
13458         return perform_implicit_conversion_flags (type, expr, complain,
13459                                                   flags);
13460       }
13461
13462     case CONVERT_EXPR:
13463       return build1
13464         (CONVERT_EXPR,
13465          tsubst (TREE_TYPE (t), args, complain, in_decl),
13466          RECUR (TREE_OPERAND (t, 0)));
13467
13468     case CAST_EXPR:
13469     case REINTERPRET_CAST_EXPR:
13470     case CONST_CAST_EXPR:
13471     case DYNAMIC_CAST_EXPR:
13472     case STATIC_CAST_EXPR:
13473       {
13474         tree type;
13475         tree op;
13476
13477         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13478         if (integral_constant_expression_p
13479             && !cast_valid_in_integral_constant_expression_p (type))
13480           {
13481             if (complain & tf_error)
13482               error ("a cast to a type other than an integral or "
13483                      "enumeration type cannot appear in a constant-expression");
13484             return error_mark_node; 
13485           }
13486
13487         op = RECUR (TREE_OPERAND (t, 0));
13488
13489         switch (TREE_CODE (t))
13490           {
13491           case CAST_EXPR:
13492             return build_functional_cast (type, op, complain);
13493           case REINTERPRET_CAST_EXPR:
13494             return build_reinterpret_cast (type, op, complain);
13495           case CONST_CAST_EXPR:
13496             return build_const_cast (type, op, complain);
13497           case DYNAMIC_CAST_EXPR:
13498             return build_dynamic_cast (type, op, complain);
13499           case STATIC_CAST_EXPR:
13500             return build_static_cast (type, op, complain);
13501           default:
13502             gcc_unreachable ();
13503           }
13504       }
13505
13506     case POSTDECREMENT_EXPR:
13507     case POSTINCREMENT_EXPR:
13508       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
13509                                                 args, complain, in_decl);
13510       return build_x_unary_op (TREE_CODE (t), op1, complain);
13511
13512     case PREDECREMENT_EXPR:
13513     case PREINCREMENT_EXPR:
13514     case NEGATE_EXPR:
13515     case BIT_NOT_EXPR:
13516     case ABS_EXPR:
13517     case TRUTH_NOT_EXPR:
13518     case UNARY_PLUS_EXPR:  /* Unary + */
13519     case REALPART_EXPR:
13520     case IMAGPART_EXPR:
13521       return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)),
13522                                complain);
13523
13524     case FIX_TRUNC_EXPR:
13525       return cp_build_unary_op (FIX_TRUNC_EXPR, RECUR (TREE_OPERAND (t, 0)),
13526                                 0, complain);
13527
13528     case ADDR_EXPR:
13529       op1 = TREE_OPERAND (t, 0);
13530       if (TREE_CODE (op1) == LABEL_DECL)
13531         return finish_label_address_expr (DECL_NAME (op1),
13532                                           EXPR_LOCATION (op1));
13533       if (TREE_CODE (op1) == SCOPE_REF)
13534         op1 = tsubst_qualified_id (op1, args, complain, in_decl,
13535                                    /*done=*/true, /*address_p=*/true);
13536       else
13537         op1 = tsubst_non_call_postfix_expression (op1, args, complain,
13538                                                   in_decl);
13539       return build_x_unary_op (ADDR_EXPR, op1, complain);
13540
13541     case PLUS_EXPR:
13542     case MINUS_EXPR:
13543     case MULT_EXPR:
13544     case TRUNC_DIV_EXPR:
13545     case CEIL_DIV_EXPR:
13546     case FLOOR_DIV_EXPR:
13547     case ROUND_DIV_EXPR:
13548     case EXACT_DIV_EXPR:
13549     case BIT_AND_EXPR:
13550     case BIT_IOR_EXPR:
13551     case BIT_XOR_EXPR:
13552     case TRUNC_MOD_EXPR:
13553     case FLOOR_MOD_EXPR:
13554     case TRUTH_ANDIF_EXPR:
13555     case TRUTH_ORIF_EXPR:
13556     case TRUTH_AND_EXPR:
13557     case TRUTH_OR_EXPR:
13558     case RSHIFT_EXPR:
13559     case LSHIFT_EXPR:
13560     case RROTATE_EXPR:
13561     case LROTATE_EXPR:
13562     case EQ_EXPR:
13563     case NE_EXPR:
13564     case MAX_EXPR:
13565     case MIN_EXPR:
13566     case LE_EXPR:
13567     case GE_EXPR:
13568     case LT_EXPR:
13569     case GT_EXPR:
13570     case MEMBER_REF:
13571     case DOTSTAR_EXPR:
13572       {
13573         tree r = build_x_binary_op
13574           (TREE_CODE (t),
13575            RECUR (TREE_OPERAND (t, 0)),
13576            (TREE_NO_WARNING (TREE_OPERAND (t, 0))
13577             ? ERROR_MARK
13578             : TREE_CODE (TREE_OPERAND (t, 0))),
13579            RECUR (TREE_OPERAND (t, 1)),
13580            (TREE_NO_WARNING (TREE_OPERAND (t, 1))
13581             ? ERROR_MARK
13582             : TREE_CODE (TREE_OPERAND (t, 1))),
13583            /*overload=*/NULL,
13584            complain);
13585         if (EXPR_P (r) && TREE_NO_WARNING (t))
13586           TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
13587         return r;
13588       }
13589
13590     case SCOPE_REF:
13591       return tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
13592                                   /*address_p=*/false);
13593     case ARRAY_REF:
13594       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
13595                                                 args, complain, in_decl);
13596       return build_x_array_ref (op1, RECUR (TREE_OPERAND (t, 1)), complain);
13597
13598     case SIZEOF_EXPR:
13599       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
13600         return tsubst_copy (t, args, complain, in_decl);
13601       /* Fall through */
13602       
13603     case ALIGNOF_EXPR:
13604       op1 = TREE_OPERAND (t, 0);
13605       if (!args)
13606         {
13607           /* When there are no ARGS, we are trying to evaluate a
13608              non-dependent expression from the parser.  Trying to do
13609              the substitutions may not work.  */
13610           if (!TYPE_P (op1))
13611             op1 = TREE_TYPE (op1);
13612         }
13613       else
13614         {
13615           ++cp_unevaluated_operand;
13616           ++c_inhibit_evaluation_warnings;
13617           op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
13618                                        /*function_p=*/false,
13619                                        /*integral_constant_expression_p=*/false);
13620           --cp_unevaluated_operand;
13621           --c_inhibit_evaluation_warnings;
13622         }
13623       if (TYPE_P (op1))
13624         return cxx_sizeof_or_alignof_type (op1, TREE_CODE (t), 
13625                                            complain & tf_error);
13626       else
13627         return cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t), 
13628                                            complain & tf_error);
13629
13630     case AT_ENCODE_EXPR:
13631       {
13632         op1 = TREE_OPERAND (t, 0);
13633         ++cp_unevaluated_operand;
13634         ++c_inhibit_evaluation_warnings;
13635         op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
13636                                      /*function_p=*/false,
13637                                      /*integral_constant_expression_p=*/false);
13638         --cp_unevaluated_operand;
13639         --c_inhibit_evaluation_warnings;
13640         return objc_build_encode_expr (op1);
13641       }
13642
13643     case NOEXCEPT_EXPR:
13644       op1 = TREE_OPERAND (t, 0);
13645       ++cp_unevaluated_operand;
13646       ++c_inhibit_evaluation_warnings;
13647       op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
13648                                    /*function_p=*/false,
13649                                    /*integral_constant_expression_p=*/false);
13650       --cp_unevaluated_operand;
13651       --c_inhibit_evaluation_warnings;
13652       return finish_noexcept_expr (op1, complain);
13653
13654     case MODOP_EXPR:
13655       {
13656         tree r = build_x_modify_expr
13657           (RECUR (TREE_OPERAND (t, 0)),
13658            TREE_CODE (TREE_OPERAND (t, 1)),
13659            RECUR (TREE_OPERAND (t, 2)),
13660            complain);
13661         /* TREE_NO_WARNING must be set if either the expression was
13662            parenthesized or it uses an operator such as >>= rather
13663            than plain assignment.  In the former case, it was already
13664            set and must be copied.  In the latter case,
13665            build_x_modify_expr sets it and it must not be reset
13666            here.  */
13667         if (TREE_NO_WARNING (t))
13668           TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
13669         return r;
13670       }
13671
13672     case ARROW_EXPR:
13673       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
13674                                                 args, complain, in_decl);
13675       /* Remember that there was a reference to this entity.  */
13676       if (DECL_P (op1))
13677         mark_used (op1);
13678       return build_x_arrow (op1);
13679
13680     case NEW_EXPR:
13681       {
13682         tree placement = RECUR (TREE_OPERAND (t, 0));
13683         tree init = RECUR (TREE_OPERAND (t, 3));
13684         VEC(tree,gc) *placement_vec;
13685         VEC(tree,gc) *init_vec;
13686         tree ret;
13687
13688         if (placement == NULL_TREE)
13689           placement_vec = NULL;
13690         else
13691           {
13692             placement_vec = make_tree_vector ();
13693             for (; placement != NULL_TREE; placement = TREE_CHAIN (placement))
13694               VEC_safe_push (tree, gc, placement_vec, TREE_VALUE (placement));
13695           }
13696
13697         /* If there was an initializer in the original tree, but it
13698            instantiated to an empty list, then we should pass a
13699            non-NULL empty vector to tell build_new that it was an
13700            empty initializer() rather than no initializer.  This can
13701            only happen when the initializer is a pack expansion whose
13702            parameter packs are of length zero.  */
13703         if (init == NULL_TREE && TREE_OPERAND (t, 3) == NULL_TREE)
13704           init_vec = NULL;
13705         else
13706           {
13707             init_vec = make_tree_vector ();
13708             if (init == void_zero_node)
13709               gcc_assert (init_vec != NULL);
13710             else
13711               {
13712                 for (; init != NULL_TREE; init = TREE_CHAIN (init))
13713                   VEC_safe_push (tree, gc, init_vec, TREE_VALUE (init));
13714               }
13715           }
13716
13717         ret = build_new (&placement_vec,
13718                          tsubst (TREE_OPERAND (t, 1), args, complain, in_decl),
13719                          RECUR (TREE_OPERAND (t, 2)),
13720                          &init_vec,
13721                          NEW_EXPR_USE_GLOBAL (t),
13722                          complain);
13723
13724         if (placement_vec != NULL)
13725           release_tree_vector (placement_vec);
13726         if (init_vec != NULL)
13727           release_tree_vector (init_vec);
13728
13729         return ret;
13730       }
13731
13732     case DELETE_EXPR:
13733      return delete_sanity
13734        (RECUR (TREE_OPERAND (t, 0)),
13735         RECUR (TREE_OPERAND (t, 1)),
13736         DELETE_EXPR_USE_VEC (t),
13737         DELETE_EXPR_USE_GLOBAL (t),
13738         complain);
13739
13740     case COMPOUND_EXPR:
13741       return build_x_compound_expr (RECUR (TREE_OPERAND (t, 0)),
13742                                     RECUR (TREE_OPERAND (t, 1)),
13743                                     complain);
13744
13745     case CALL_EXPR:
13746       {
13747         tree function;
13748         VEC(tree,gc) *call_args;
13749         unsigned int nargs, i;
13750         bool qualified_p;
13751         bool koenig_p;
13752         tree ret;
13753
13754         function = CALL_EXPR_FN (t);
13755         /* When we parsed the expression,  we determined whether or
13756            not Koenig lookup should be performed.  */
13757         koenig_p = KOENIG_LOOKUP_P (t);
13758         if (TREE_CODE (function) == SCOPE_REF)
13759           {
13760             qualified_p = true;
13761             function = tsubst_qualified_id (function, args, complain, in_decl,
13762                                             /*done=*/false,
13763                                             /*address_p=*/false);
13764           }
13765         else if (koenig_p && TREE_CODE (function) == IDENTIFIER_NODE)
13766           {
13767             /* Do nothing; calling tsubst_copy_and_build on an identifier
13768                would incorrectly perform unqualified lookup again.
13769
13770                Note that we can also have an IDENTIFIER_NODE if the earlier
13771                unqualified lookup found a member function; in that case
13772                koenig_p will be false and we do want to do the lookup
13773                again to find the instantiated member function.
13774
13775                FIXME but doing that causes c++/15272, so we need to stop
13776                using IDENTIFIER_NODE in that situation.  */
13777             qualified_p = false;
13778           }
13779         else
13780           {
13781             if (TREE_CODE (function) == COMPONENT_REF)
13782               {
13783                 tree op = TREE_OPERAND (function, 1);
13784
13785                 qualified_p = (TREE_CODE (op) == SCOPE_REF
13786                                || (BASELINK_P (op)
13787                                    && BASELINK_QUALIFIED_P (op)));
13788               }
13789             else
13790               qualified_p = false;
13791
13792             function = tsubst_copy_and_build (function, args, complain,
13793                                               in_decl,
13794                                               !qualified_p,
13795                                               integral_constant_expression_p);
13796
13797             if (BASELINK_P (function))
13798               qualified_p = true;
13799           }
13800
13801         nargs = call_expr_nargs (t);
13802         call_args = make_tree_vector ();
13803         for (i = 0; i < nargs; ++i)
13804           {
13805             tree arg = CALL_EXPR_ARG (t, i);
13806
13807             if (!PACK_EXPANSION_P (arg))
13808               VEC_safe_push (tree, gc, call_args,
13809                              RECUR (CALL_EXPR_ARG (t, i)));
13810             else
13811               {
13812                 /* Expand the pack expansion and push each entry onto
13813                    CALL_ARGS.  */
13814                 arg = tsubst_pack_expansion (arg, args, complain, in_decl);
13815                 if (TREE_CODE (arg) == TREE_VEC)
13816                   {
13817                     unsigned int len, j;
13818
13819                     len = TREE_VEC_LENGTH (arg);
13820                     for (j = 0; j < len; ++j)
13821                       {
13822                         tree value = TREE_VEC_ELT (arg, j);
13823                         if (value != NULL_TREE)
13824                           value = convert_from_reference (value);
13825                         VEC_safe_push (tree, gc, call_args, value);
13826                       }
13827                   }
13828                 else
13829                   {
13830                     /* A partial substitution.  Add one entry.  */
13831                     VEC_safe_push (tree, gc, call_args, arg);
13832                   }
13833               }
13834           }
13835
13836         /* We do not perform argument-dependent lookup if normal
13837            lookup finds a non-function, in accordance with the
13838            expected resolution of DR 218.  */
13839         if (koenig_p
13840             && ((is_overloaded_fn (function)
13841                  /* If lookup found a member function, the Koenig lookup is
13842                     not appropriate, even if an unqualified-name was used
13843                     to denote the function.  */
13844                  && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
13845                 || TREE_CODE (function) == IDENTIFIER_NODE)
13846             /* Only do this when substitution turns a dependent call
13847                into a non-dependent call.  */
13848             && type_dependent_expression_p_push (t)
13849             && !any_type_dependent_arguments_p (call_args))
13850           function = perform_koenig_lookup (function, call_args, false,
13851                                             tf_none);
13852
13853         if (TREE_CODE (function) == IDENTIFIER_NODE
13854             && !any_type_dependent_arguments_p (call_args))
13855           {
13856             if (koenig_p && (complain & tf_warning_or_error))
13857               {
13858                 /* For backwards compatibility and good diagnostics, try
13859                    the unqualified lookup again if we aren't in SFINAE
13860                    context.  */
13861                 tree unq = (tsubst_copy_and_build
13862                             (function, args, complain, in_decl, true,
13863                              integral_constant_expression_p));
13864                 if (unq == error_mark_node)
13865                   return error_mark_node;
13866
13867                 if (unq != function)
13868                   {
13869                     tree fn = unq;
13870                     if (TREE_CODE (fn) == INDIRECT_REF)
13871                       fn = TREE_OPERAND (fn, 0);
13872                     if (TREE_CODE (fn) == COMPONENT_REF)
13873                       fn = TREE_OPERAND (fn, 1);
13874                     if (is_overloaded_fn (fn))
13875                       fn = get_first_fn (fn);
13876                     permerror (EXPR_LOC_OR_HERE (t),
13877                                "%qD was not declared in this scope, "
13878                                "and no declarations were found by "
13879                                "argument-dependent lookup at the point "
13880                                "of instantiation", function);
13881                     if (!DECL_P (fn))
13882                       /* Can't say anything more.  */;
13883                     else if (DECL_CLASS_SCOPE_P (fn))
13884                       {
13885                         inform (EXPR_LOC_OR_HERE (t),
13886                                 "declarations in dependent base %qT are "
13887                                 "not found by unqualified lookup",
13888                                 DECL_CLASS_CONTEXT (fn));
13889                         if (current_class_ptr)
13890                           inform (EXPR_LOC_OR_HERE (t),
13891                                   "use %<this->%D%> instead", function);
13892                         else
13893                           inform (EXPR_LOC_OR_HERE (t),
13894                                   "use %<%T::%D%> instead",
13895                                   current_class_name, function);
13896                       }
13897                     else
13898                       inform (0, "%q+D declared here, later in the "
13899                                 "translation unit", fn);
13900                     function = unq;
13901                   }
13902               }
13903             if (TREE_CODE (function) == IDENTIFIER_NODE)
13904               {
13905                 unqualified_name_lookup_error (function);
13906                 release_tree_vector (call_args);
13907                 return error_mark_node;
13908               }
13909           }
13910
13911         /* Remember that there was a reference to this entity.  */
13912         if (DECL_P (function))
13913           mark_used (function);
13914
13915         if (TREE_CODE (function) == OFFSET_REF)
13916           ret = build_offset_ref_call_from_tree (function, &call_args);
13917         else if (TREE_CODE (function) == COMPONENT_REF)
13918           {
13919             tree instance = TREE_OPERAND (function, 0);
13920             tree fn = TREE_OPERAND (function, 1);
13921
13922             if (processing_template_decl
13923                 && (type_dependent_expression_p (instance)
13924                     || (!BASELINK_P (fn)
13925                         && TREE_CODE (fn) != FIELD_DECL)
13926                     || type_dependent_expression_p (fn)
13927                     || any_type_dependent_arguments_p (call_args)))
13928               ret = build_nt_call_vec (function, call_args);
13929             else if (!BASELINK_P (fn))
13930               ret = finish_call_expr (function, &call_args,
13931                                        /*disallow_virtual=*/false,
13932                                        /*koenig_p=*/false,
13933                                        complain);
13934             else
13935               ret = (build_new_method_call
13936                       (instance, fn,
13937                        &call_args, NULL_TREE,
13938                        qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL,
13939                        /*fn_p=*/NULL,
13940                        complain));
13941           }
13942         else
13943           ret = finish_call_expr (function, &call_args,
13944                                   /*disallow_virtual=*/qualified_p,
13945                                   koenig_p,
13946                                   complain);
13947
13948         release_tree_vector (call_args);
13949
13950         return ret;
13951       }
13952
13953     case COND_EXPR:
13954       return build_x_conditional_expr
13955         (RECUR (TREE_OPERAND (t, 0)),
13956          RECUR (TREE_OPERAND (t, 1)),
13957          RECUR (TREE_OPERAND (t, 2)),
13958          complain);
13959
13960     case PSEUDO_DTOR_EXPR:
13961       return finish_pseudo_destructor_expr
13962         (RECUR (TREE_OPERAND (t, 0)),
13963          RECUR (TREE_OPERAND (t, 1)),
13964          tsubst (TREE_OPERAND (t, 2), args, complain, in_decl));
13965
13966     case TREE_LIST:
13967       {
13968         tree purpose, value, chain;
13969
13970         if (t == void_list_node)
13971           return t;
13972
13973         if ((TREE_PURPOSE (t) && PACK_EXPANSION_P (TREE_PURPOSE (t)))
13974             || (TREE_VALUE (t) && PACK_EXPANSION_P (TREE_VALUE (t))))
13975           {
13976             /* We have pack expansions, so expand those and
13977                create a new list out of it.  */
13978             tree purposevec = NULL_TREE;
13979             tree valuevec = NULL_TREE;
13980             tree chain;
13981             int i, len = -1;
13982
13983             /* Expand the argument expressions.  */
13984             if (TREE_PURPOSE (t))
13985               purposevec = tsubst_pack_expansion (TREE_PURPOSE (t), args,
13986                                                  complain, in_decl);
13987             if (TREE_VALUE (t))
13988               valuevec = tsubst_pack_expansion (TREE_VALUE (t), args,
13989                                                complain, in_decl);
13990
13991             /* Build the rest of the list.  */
13992             chain = TREE_CHAIN (t);
13993             if (chain && chain != void_type_node)
13994               chain = RECUR (chain);
13995
13996             /* Determine the number of arguments.  */
13997             if (purposevec && TREE_CODE (purposevec) == TREE_VEC)
13998               {
13999                 len = TREE_VEC_LENGTH (purposevec);
14000                 gcc_assert (!valuevec || len == TREE_VEC_LENGTH (valuevec));
14001               }
14002             else if (TREE_CODE (valuevec) == TREE_VEC)
14003               len = TREE_VEC_LENGTH (valuevec);
14004             else
14005               {
14006                 /* Since we only performed a partial substitution into
14007                    the argument pack, we only return a single list
14008                    node.  */
14009                 if (purposevec == TREE_PURPOSE (t)
14010                     && valuevec == TREE_VALUE (t)
14011                     && chain == TREE_CHAIN (t))
14012                   return t;
14013
14014                 return tree_cons (purposevec, valuevec, chain);
14015               }
14016             
14017             /* Convert the argument vectors into a TREE_LIST */
14018             i = len;
14019             while (i > 0)
14020               {
14021                 /* Grab the Ith values.  */
14022                 i--;
14023                 purpose = purposevec ? TREE_VEC_ELT (purposevec, i) 
14024                                      : NULL_TREE;
14025                 value 
14026                   = valuevec ? convert_from_reference (TREE_VEC_ELT (valuevec, i)) 
14027                              : NULL_TREE;
14028
14029                 /* Build the list (backwards).  */
14030                 chain = tree_cons (purpose, value, chain);
14031               }
14032
14033             return chain;
14034           }
14035
14036         purpose = TREE_PURPOSE (t);
14037         if (purpose)
14038           purpose = RECUR (purpose);
14039         value = TREE_VALUE (t);
14040         if (value)
14041           value = RECUR (value);
14042         chain = TREE_CHAIN (t);
14043         if (chain && chain != void_type_node)
14044           chain = RECUR (chain);
14045         if (purpose == TREE_PURPOSE (t)
14046             && value == TREE_VALUE (t)
14047             && chain == TREE_CHAIN (t))
14048           return t;
14049         return tree_cons (purpose, value, chain);
14050       }
14051
14052     case COMPONENT_REF:
14053       {
14054         tree object;
14055         tree object_type;
14056         tree member;
14057
14058         object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
14059                                                      args, complain, in_decl);
14060         /* Remember that there was a reference to this entity.  */
14061         if (DECL_P (object))
14062           mark_used (object);
14063         object_type = TREE_TYPE (object);
14064
14065         member = TREE_OPERAND (t, 1);
14066         if (BASELINK_P (member))
14067           member = tsubst_baselink (member,
14068                                     non_reference (TREE_TYPE (object)),
14069                                     args, complain, in_decl);
14070         else
14071           member = tsubst_copy (member, args, complain, in_decl);
14072         if (member == error_mark_node)
14073           return error_mark_node;
14074
14075         if (type_dependent_expression_p (object))
14076           /* We can't do much here.  */;
14077         else if (!CLASS_TYPE_P (object_type))
14078           {
14079             if (SCALAR_TYPE_P (object_type))
14080               {
14081                 tree s = NULL_TREE;
14082                 tree dtor = member;
14083
14084                 if (TREE_CODE (dtor) == SCOPE_REF)
14085                   {
14086                     s = TREE_OPERAND (dtor, 0);
14087                     dtor = TREE_OPERAND (dtor, 1);
14088                   }
14089                 if (TREE_CODE (dtor) == BIT_NOT_EXPR)
14090                   {
14091                     dtor = TREE_OPERAND (dtor, 0);
14092                     if (TYPE_P (dtor))
14093                       return finish_pseudo_destructor_expr (object, s, dtor);
14094                   }
14095               }
14096           }
14097         else if (TREE_CODE (member) == SCOPE_REF
14098                  && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
14099           {
14100             /* Lookup the template functions now that we know what the
14101                scope is.  */
14102             tree scope = TREE_OPERAND (member, 0);
14103             tree tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
14104             tree args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
14105             member = lookup_qualified_name (scope, tmpl,
14106                                             /*is_type_p=*/false,
14107                                             /*complain=*/false);
14108             if (BASELINK_P (member))
14109               {
14110                 BASELINK_FUNCTIONS (member)
14111                   = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
14112                               args);
14113                 member = (adjust_result_of_qualified_name_lookup
14114                           (member, BINFO_TYPE (BASELINK_BINFO (member)),
14115                            object_type));
14116               }
14117             else
14118               {
14119                 qualified_name_lookup_error (scope, tmpl, member,
14120                                              input_location);
14121                 return error_mark_node;
14122               }
14123           }
14124         else if (TREE_CODE (member) == SCOPE_REF
14125                  && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
14126                  && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
14127           {
14128             if (complain & tf_error)
14129               {
14130                 if (TYPE_P (TREE_OPERAND (member, 0)))
14131                   error ("%qT is not a class or namespace",
14132                          TREE_OPERAND (member, 0));
14133                 else
14134                   error ("%qD is not a class or namespace",
14135                          TREE_OPERAND (member, 0));
14136               }
14137             return error_mark_node;
14138           }
14139         else if (TREE_CODE (member) == FIELD_DECL)
14140           return finish_non_static_data_member (member, object, NULL_TREE);
14141
14142         return finish_class_member_access_expr (object, member,
14143                                                 /*template_p=*/false,
14144                                                 complain);
14145       }
14146
14147     case THROW_EXPR:
14148       return build_throw
14149         (RECUR (TREE_OPERAND (t, 0)));
14150
14151     case CONSTRUCTOR:
14152       {
14153         VEC(constructor_elt,gc) *n;
14154         constructor_elt *ce;
14155         unsigned HOST_WIDE_INT idx;
14156         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
14157         bool process_index_p;
14158         int newlen;
14159         bool need_copy_p = false;
14160         tree r;
14161
14162         if (type == error_mark_node)
14163           return error_mark_node;
14164
14165         /* digest_init will do the wrong thing if we let it.  */
14166         if (type && TYPE_PTRMEMFUNC_P (type))
14167           return t;
14168
14169         /* We do not want to process the index of aggregate
14170            initializers as they are identifier nodes which will be
14171            looked up by digest_init.  */
14172         process_index_p = !(type && MAYBE_CLASS_TYPE_P (type));
14173
14174         n = VEC_copy (constructor_elt, gc, CONSTRUCTOR_ELTS (t));
14175         newlen = VEC_length (constructor_elt, n);
14176         FOR_EACH_VEC_ELT (constructor_elt, n, idx, ce)
14177           {
14178             if (ce->index && process_index_p)
14179               ce->index = RECUR (ce->index);
14180
14181             if (PACK_EXPANSION_P (ce->value))
14182               {
14183                 /* Substitute into the pack expansion.  */
14184                 ce->value = tsubst_pack_expansion (ce->value, args, complain,
14185                                                   in_decl);
14186
14187                 if (ce->value == error_mark_node
14188                     || PACK_EXPANSION_P (ce->value))
14189                   ;
14190                 else if (TREE_VEC_LENGTH (ce->value) == 1)
14191                   /* Just move the argument into place.  */
14192                   ce->value = TREE_VEC_ELT (ce->value, 0);
14193                 else
14194                   {
14195                     /* Update the length of the final CONSTRUCTOR
14196                        arguments vector, and note that we will need to
14197                        copy.*/
14198                     newlen = newlen + TREE_VEC_LENGTH (ce->value) - 1;
14199                     need_copy_p = true;
14200                   }
14201               }
14202             else
14203               ce->value = RECUR (ce->value);
14204           }
14205
14206         if (need_copy_p)
14207           {
14208             VEC(constructor_elt,gc) *old_n = n;
14209
14210             n = VEC_alloc (constructor_elt, gc, newlen);
14211             FOR_EACH_VEC_ELT (constructor_elt, old_n, idx, ce)
14212               {
14213                 if (TREE_CODE (ce->value) == TREE_VEC)
14214                   {
14215                     int i, len = TREE_VEC_LENGTH (ce->value);
14216                     for (i = 0; i < len; ++i)
14217                       CONSTRUCTOR_APPEND_ELT (n, 0,
14218                                               TREE_VEC_ELT (ce->value, i));
14219                   }
14220                 else
14221                   CONSTRUCTOR_APPEND_ELT (n, 0, ce->value);
14222               }
14223           }
14224
14225         r = build_constructor (init_list_type_node, n);
14226         CONSTRUCTOR_IS_DIRECT_INIT (r) = CONSTRUCTOR_IS_DIRECT_INIT (t);
14227
14228         if (TREE_HAS_CONSTRUCTOR (t))
14229           return finish_compound_literal (type, r, complain);
14230
14231         TREE_TYPE (r) = type;
14232         return r;
14233       }
14234
14235     case TYPEID_EXPR:
14236       {
14237         tree operand_0 = TREE_OPERAND (t, 0);
14238         if (TYPE_P (operand_0))
14239           {
14240             operand_0 = tsubst (operand_0, args, complain, in_decl);
14241             return get_typeid (operand_0);
14242           }
14243         else
14244           {
14245             operand_0 = RECUR (operand_0);
14246             return build_typeid (operand_0);
14247           }
14248       }
14249
14250     case VAR_DECL:
14251       if (!args)
14252         return t;
14253       /* Fall through */
14254
14255     case PARM_DECL:
14256       {
14257         tree r = tsubst_copy (t, args, complain, in_decl);
14258
14259         if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
14260           /* If the original type was a reference, we'll be wrapped in
14261              the appropriate INDIRECT_REF.  */
14262           r = convert_from_reference (r);
14263         return r;
14264       }
14265
14266     case VA_ARG_EXPR:
14267       return build_x_va_arg (RECUR (TREE_OPERAND (t, 0)),
14268                              tsubst (TREE_TYPE (t), args, complain, in_decl));
14269
14270     case OFFSETOF_EXPR:
14271       return finish_offsetof (RECUR (TREE_OPERAND (t, 0)));
14272
14273     case TRAIT_EXPR:
14274       {
14275         tree type1 = tsubst_copy (TRAIT_EXPR_TYPE1 (t), args,
14276                                   complain, in_decl);
14277
14278         tree type2 = TRAIT_EXPR_TYPE2 (t);
14279         if (type2)
14280           type2 = tsubst_copy (type2, args, complain, in_decl);
14281         
14282         return finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2);
14283       }
14284
14285     case STMT_EXPR:
14286       {
14287         tree old_stmt_expr = cur_stmt_expr;
14288         tree stmt_expr = begin_stmt_expr ();
14289
14290         cur_stmt_expr = stmt_expr;
14291         tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl,
14292                      integral_constant_expression_p);
14293         stmt_expr = finish_stmt_expr (stmt_expr, false);
14294         cur_stmt_expr = old_stmt_expr;
14295
14296         /* If the resulting list of expression statement is empty,
14297            fold it further into void_zero_node.  */
14298         if (empty_expr_stmt_p (stmt_expr))
14299           stmt_expr = void_zero_node;
14300
14301         return stmt_expr;
14302       }
14303
14304     case CONST_DECL:
14305       t = tsubst_copy (t, args, complain, in_decl);
14306       /* As in finish_id_expression, we resolve enumeration constants
14307          to their underlying values.  */
14308       if (TREE_CODE (t) == CONST_DECL && !processing_template_decl)
14309         {
14310           used_types_insert (TREE_TYPE (t));
14311           return DECL_INITIAL (t);
14312         }
14313       return t;
14314
14315     case LAMBDA_EXPR:
14316       {
14317         tree r = build_lambda_expr ();
14318
14319         tree type = tsubst (LAMBDA_EXPR_CLOSURE (t), args, complain, NULL_TREE);
14320         LAMBDA_EXPR_CLOSURE (r) = type;
14321         CLASSTYPE_LAMBDA_EXPR (type) = r;
14322
14323         LAMBDA_EXPR_LOCATION (r)
14324           = LAMBDA_EXPR_LOCATION (t);
14325         LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (r)
14326           = LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (t);
14327         LAMBDA_EXPR_MUTABLE_P (r) = LAMBDA_EXPR_MUTABLE_P (t);
14328         LAMBDA_EXPR_DISCRIMINATOR (r)
14329           = (LAMBDA_EXPR_DISCRIMINATOR (t));
14330         LAMBDA_EXPR_EXTRA_SCOPE (r)
14331           = RECUR (LAMBDA_EXPR_EXTRA_SCOPE (t));
14332         if (LAMBDA_EXPR_RETURN_TYPE (t) == dependent_lambda_return_type_node)
14333           {
14334             LAMBDA_EXPR_RETURN_TYPE (r) = dependent_lambda_return_type_node;
14335             LAMBDA_EXPR_DEDUCE_RETURN_TYPE_P (r) = true;
14336           }
14337         else
14338           LAMBDA_EXPR_RETURN_TYPE (r)
14339             = tsubst (LAMBDA_EXPR_RETURN_TYPE (t), args, complain, in_decl);
14340
14341         gcc_assert (LAMBDA_EXPR_THIS_CAPTURE (t) == NULL_TREE
14342                     && LAMBDA_EXPR_PENDING_PROXIES (t) == NULL);
14343
14344         /* Do this again now that LAMBDA_EXPR_EXTRA_SCOPE is set.  */
14345         determine_visibility (TYPE_NAME (type));
14346         /* Now that we know visibility, instantiate the type so we have a
14347            declaration of the op() for later calls to lambda_function.  */
14348         complete_type (type);
14349
14350         /* The capture list refers to closure members, so this needs to
14351            wait until after we finish instantiating the type.  */
14352         LAMBDA_EXPR_CAPTURE_LIST (r)
14353           = RECUR (LAMBDA_EXPR_CAPTURE_LIST (t));
14354
14355         return build_lambda_object (r);
14356       }
14357
14358     case TARGET_EXPR:
14359       /* We can get here for a constant initializer of non-dependent type.
14360          FIXME stop folding in cp_parser_initializer_clause.  */
14361       gcc_assert (TREE_CONSTANT (t));
14362       {
14363         tree r = get_target_expr (RECUR (TARGET_EXPR_INITIAL (t)));
14364         TREE_CONSTANT (r) = true;
14365         return r;
14366       }
14367
14368     case TRANSACTION_EXPR:
14369       return tsubst_expr(t, args, complain, in_decl,
14370              integral_constant_expression_p);
14371
14372     default:
14373       /* Handle Objective-C++ constructs, if appropriate.  */
14374       {
14375         tree subst
14376           = objcp_tsubst_copy_and_build (t, args, complain,
14377                                          in_decl, /*function_p=*/false);
14378         if (subst)
14379           return subst;
14380       }
14381       return tsubst_copy (t, args, complain, in_decl);
14382     }
14383
14384 #undef RECUR
14385 }
14386
14387 /* Verify that the instantiated ARGS are valid. For type arguments,
14388    make sure that the type's linkage is ok. For non-type arguments,
14389    make sure they are constants if they are integral or enumerations.
14390    Emit an error under control of COMPLAIN, and return TRUE on error.  */
14391
14392 static bool
14393 check_instantiated_arg (tree tmpl, tree t, tsubst_flags_t complain)
14394 {
14395   if (ARGUMENT_PACK_P (t))
14396     {
14397       tree vec = ARGUMENT_PACK_ARGS (t);
14398       int len = TREE_VEC_LENGTH (vec);
14399       bool result = false;
14400       int i;
14401
14402       for (i = 0; i < len; ++i)
14403         if (check_instantiated_arg (tmpl, TREE_VEC_ELT (vec, i), complain))
14404           result = true;
14405       return result;
14406     }
14407   else if (TYPE_P (t))
14408     {
14409       /* [basic.link]: A name with no linkage (notably, the name
14410          of a class or enumeration declared in a local scope)
14411          shall not be used to declare an entity with linkage.
14412          This implies that names with no linkage cannot be used as
14413          template arguments
14414
14415          DR 757 relaxes this restriction for C++0x.  */
14416       tree nt = (cxx_dialect > cxx98 ? NULL_TREE
14417                  : no_linkage_check (t, /*relaxed_p=*/false));
14418
14419       if (nt)
14420         {
14421           /* DR 488 makes use of a type with no linkage cause
14422              type deduction to fail.  */
14423           if (complain & tf_error)
14424             {
14425               if (TYPE_ANONYMOUS_P (nt))
14426                 error ("%qT is/uses anonymous type", t);
14427               else
14428                 error ("template argument for %qD uses local type %qT",
14429                        tmpl, t);
14430             }
14431           return true;
14432         }
14433       /* In order to avoid all sorts of complications, we do not
14434          allow variably-modified types as template arguments.  */
14435       else if (variably_modified_type_p (t, NULL_TREE))
14436         {
14437           if (complain & tf_error)
14438             error ("%qT is a variably modified type", t);
14439           return true;
14440         }
14441     }
14442   /* A non-type argument of integral or enumerated type must be a
14443      constant.  */
14444   else if (TREE_TYPE (t)
14445            && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
14446            && !TREE_CONSTANT (t))
14447     {
14448       if (complain & tf_error)
14449         error ("integral expression %qE is not constant", t);
14450       return true;
14451     }
14452   return false;
14453 }
14454
14455 static bool
14456 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
14457 {
14458   int ix, len = DECL_NTPARMS (tmpl);
14459   bool result = false;
14460
14461   for (ix = 0; ix != len; ix++)
14462     {
14463       if (check_instantiated_arg (tmpl, TREE_VEC_ELT (args, ix), complain))
14464         result = true;
14465     }
14466   if (result && (complain & tf_error))
14467     error ("  trying to instantiate %qD", tmpl);
14468   return result;
14469 }
14470
14471 /* In C++0x, it's possible to have a function template whose type depends
14472    on itself recursively.  This is most obvious with decltype, but can also
14473    occur with enumeration scope (c++/48969).  So we need to catch infinite
14474    recursion and reject the substitution at deduction time; this function
14475    will return error_mark_node for any repeated substitution.
14476
14477    This also catches excessive recursion such as when f<N> depends on
14478    f<N-1> across all integers, and returns error_mark_node for all the
14479    substitutions back up to the initial one.
14480
14481    This is, of course, not reentrant.  */
14482
14483 static tree
14484 deduction_tsubst_fntype (tree fn, tree targs, tsubst_flags_t complain)
14485 {
14486   static bool excessive_deduction_depth;
14487   static int deduction_depth;
14488   struct pending_template *old_last_pend = last_pending_template;
14489   struct tinst_level *old_error_tinst = last_error_tinst_level;
14490
14491   tree fntype = TREE_TYPE (fn);
14492   tree tinst;
14493   tree r;
14494
14495   if (excessive_deduction_depth)
14496     return error_mark_node;
14497
14498   tinst = build_tree_list (fn, targs);
14499   if (!push_tinst_level (tinst))
14500     {
14501       excessive_deduction_depth = true;
14502       ggc_free (tinst);
14503       return error_mark_node;
14504     }
14505
14506   input_location = DECL_SOURCE_LOCATION (fn);
14507   ++deduction_depth;
14508   push_deduction_access_scope (fn);
14509   r = tsubst (fntype, targs, complain, NULL_TREE);
14510   pop_deduction_access_scope (fn);
14511   --deduction_depth;
14512
14513   if (excessive_deduction_depth)
14514     {
14515       r = error_mark_node;
14516       if (deduction_depth == 0)
14517         /* Reset once we're all the way out.  */
14518         excessive_deduction_depth = false;
14519     }
14520
14521   pop_tinst_level ();
14522   /* We can't free this if a pending_template entry or last_error_tinst_level
14523      is pointing at it.  */
14524   if (last_pending_template == old_last_pend
14525       && last_error_tinst_level == old_error_tinst)
14526     ggc_free (tinst);
14527   return r;
14528 }
14529
14530 /* Instantiate the indicated variable or function template TMPL with
14531    the template arguments in TARG_PTR.  */
14532
14533 static tree
14534 instantiate_template_1 (tree tmpl, tree orig_args, tsubst_flags_t complain)
14535 {
14536   tree targ_ptr = orig_args;
14537   tree fndecl;
14538   tree gen_tmpl;
14539   tree spec;
14540
14541   if (tmpl == error_mark_node)
14542     return error_mark_node;
14543
14544   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
14545
14546   /* If this function is a clone, handle it specially.  */
14547   if (DECL_CLONED_FUNCTION_P (tmpl))
14548     {
14549       tree spec;
14550       tree clone;
14551
14552       /* Use DECL_ABSTRACT_ORIGIN because only FUNCTION_DECLs have
14553          DECL_CLONED_FUNCTION.  */
14554       spec = instantiate_template (DECL_ABSTRACT_ORIGIN (tmpl),
14555                                    targ_ptr, complain);
14556       if (spec == error_mark_node)
14557         return error_mark_node;
14558
14559       /* Look for the clone.  */
14560       FOR_EACH_CLONE (clone, spec)
14561         if (DECL_NAME (clone) == DECL_NAME (tmpl))
14562           return clone;
14563       /* We should always have found the clone by now.  */
14564       gcc_unreachable ();
14565       return NULL_TREE;
14566     }
14567
14568   /* Check to see if we already have this specialization.  */
14569   gen_tmpl = most_general_template (tmpl);
14570   if (tmpl != gen_tmpl)
14571     /* The TMPL is a partial instantiation.  To get a full set of
14572        arguments we must add the arguments used to perform the
14573        partial instantiation.  */
14574     targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
14575                                             targ_ptr);
14576
14577   /* It would be nice to avoid hashing here and then again in tsubst_decl,
14578      but it doesn't seem to be on the hot path.  */
14579   spec = retrieve_specialization (gen_tmpl, targ_ptr, 0);
14580
14581   gcc_assert (tmpl == gen_tmpl
14582               || ((fndecl = retrieve_specialization (tmpl, orig_args, 0))
14583                   == spec)
14584               || fndecl == NULL_TREE);
14585
14586   if (spec != NULL_TREE)
14587     return spec;
14588
14589   if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
14590                                complain))
14591     return error_mark_node;
14592
14593   /* We are building a FUNCTION_DECL, during which the access of its
14594      parameters and return types have to be checked.  However this
14595      FUNCTION_DECL which is the desired context for access checking
14596      is not built yet.  We solve this chicken-and-egg problem by
14597      deferring all checks until we have the FUNCTION_DECL.  */
14598   push_deferring_access_checks (dk_deferred);
14599
14600   /* Instantiation of the function happens in the context of the function
14601      template, not the context of the overload resolution we're doing.  */
14602   push_to_top_level ();
14603   if (DECL_CLASS_SCOPE_P (gen_tmpl))
14604     {
14605       tree ctx = tsubst (DECL_CONTEXT (gen_tmpl), targ_ptr,
14606                          complain, gen_tmpl);
14607       push_nested_class (ctx);
14608     }
14609   /* Substitute template parameters to obtain the specialization.  */
14610   fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
14611                    targ_ptr, complain, gen_tmpl);
14612   if (DECL_CLASS_SCOPE_P (gen_tmpl))
14613     pop_nested_class ();
14614   pop_from_top_level ();
14615
14616   if (fndecl == error_mark_node)
14617     return error_mark_node;
14618
14619   /* Now we know the specialization, compute access previously
14620      deferred.  */
14621   push_access_scope (fndecl);
14622
14623   /* Some typedefs referenced from within the template code need to be access
14624      checked at template instantiation time, i.e now. These types were
14625      added to the template at parsing time. Let's get those and perfom
14626      the acces checks then.  */
14627   perform_typedefs_access_check (DECL_TEMPLATE_RESULT (tmpl), targ_ptr);
14628   perform_deferred_access_checks ();
14629   pop_access_scope (fndecl);
14630   pop_deferring_access_checks ();
14631
14632   /* The DECL_TI_TEMPLATE should always be the immediate parent
14633      template, not the most general template.  */
14634   DECL_TI_TEMPLATE (fndecl) = tmpl;
14635
14636   /* If we've just instantiated the main entry point for a function,
14637      instantiate all the alternate entry points as well.  We do this
14638      by cloning the instantiation of the main entry point, not by
14639      instantiating the template clones.  */
14640   if (DECL_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (DECL_CHAIN (gen_tmpl)))
14641     clone_function_decl (fndecl, /*update_method_vec_p=*/0);
14642
14643   return fndecl;
14644 }
14645
14646 /* Wrapper for instantiate_template_1.  */
14647
14648 tree
14649 instantiate_template (tree tmpl, tree orig_args, tsubst_flags_t complain)
14650 {
14651   tree ret;
14652   timevar_push (TV_TEMPLATE_INST);
14653   ret = instantiate_template_1 (tmpl, orig_args,  complain);
14654   timevar_pop (TV_TEMPLATE_INST);
14655   return ret;
14656 }
14657
14658 /* We're going to do deduction substitution on the type of TMPL, a function
14659    template.  In C++11 mode, push into that access scope.  In C++03 mode,
14660    disable access checking.  */
14661
14662 static void
14663 push_deduction_access_scope (tree tmpl)
14664 {
14665   if (cxx_dialect >= cxx0x)
14666     {
14667       int ptd = processing_template_decl;
14668       push_access_scope (DECL_TEMPLATE_RESULT (tmpl));
14669       /* Preserve processing_template_decl across push_to_top_level.  */
14670       if (ptd && !processing_template_decl)
14671         ++processing_template_decl;
14672     }
14673   else
14674     push_deferring_access_checks (dk_no_check);
14675 }
14676
14677 /* And pop back out.  */
14678
14679 static void
14680 pop_deduction_access_scope (tree tmpl)
14681 {
14682   if (cxx_dialect >= cxx0x)
14683     pop_access_scope (DECL_TEMPLATE_RESULT (tmpl));
14684   else
14685     pop_deferring_access_checks ();
14686 }
14687
14688 /* PARM is a template parameter pack for FN.  Returns true iff
14689    PARM is used in a deducible way in the argument list of FN.  */
14690
14691 static bool
14692 pack_deducible_p (tree parm, tree fn)
14693 {
14694   tree t = FUNCTION_FIRST_USER_PARMTYPE (fn);
14695   for (; t; t = TREE_CHAIN (t))
14696     {
14697       tree type = TREE_VALUE (t);
14698       tree packs;
14699       if (!PACK_EXPANSION_P (type))
14700         continue;
14701       for (packs = PACK_EXPANSION_PARAMETER_PACKS (type);
14702            packs; packs = TREE_CHAIN (packs))
14703         if (TREE_VALUE (packs) == parm)
14704           {
14705             /* The template parameter pack is used in a function parameter
14706                pack.  If this is the end of the parameter list, the
14707                template parameter pack is deducible.  */
14708             if (TREE_CHAIN (t) == void_list_node)
14709               return true;
14710             else
14711               /* Otherwise, not.  Well, it could be deduced from
14712                  a non-pack parameter, but doing so would end up with
14713                  a deduction mismatch, so don't bother.  */
14714               return false;
14715           }
14716     }
14717   /* The template parameter pack isn't used in any function parameter
14718      packs, but it might be used deeper, e.g. tuple<Args...>.  */
14719   return true;
14720 }
14721
14722 /* The FN is a TEMPLATE_DECL for a function.  ARGS is an array with
14723    NARGS elements of the arguments that are being used when calling
14724    it.  TARGS is a vector into which the deduced template arguments
14725    are placed.
14726
14727    Return zero for success, 2 for an incomplete match that doesn't resolve
14728    all the types, and 1 for complete failure.  An error message will be
14729    printed only for an incomplete match.
14730
14731    If FN is a conversion operator, or we are trying to produce a specific
14732    specialization, RETURN_TYPE is the return type desired.
14733
14734    The EXPLICIT_TARGS are explicit template arguments provided via a
14735    template-id.
14736
14737    The parameter STRICT is one of:
14738
14739    DEDUCE_CALL:
14740      We are deducing arguments for a function call, as in
14741      [temp.deduct.call].
14742
14743    DEDUCE_CONV:
14744      We are deducing arguments for a conversion function, as in
14745      [temp.deduct.conv].
14746
14747    DEDUCE_EXACT:
14748      We are deducing arguments when doing an explicit instantiation
14749      as in [temp.explicit], when determining an explicit specialization
14750      as in [temp.expl.spec], or when taking the address of a function
14751      template, as in [temp.deduct.funcaddr].  */
14752
14753 int
14754 fn_type_unification (tree fn,
14755                      tree explicit_targs,
14756                      tree targs,
14757                      const tree *args,
14758                      unsigned int nargs,
14759                      tree return_type,
14760                      unification_kind_t strict,
14761                      int flags,
14762                      bool explain_p)
14763 {
14764   tree parms;
14765   tree fntype;
14766   int result;
14767
14768   gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
14769
14770   fntype = TREE_TYPE (fn);
14771   if (explicit_targs)
14772     {
14773       /* [temp.deduct]
14774
14775          The specified template arguments must match the template
14776          parameters in kind (i.e., type, nontype, template), and there
14777          must not be more arguments than there are parameters;
14778          otherwise type deduction fails.
14779
14780          Nontype arguments must match the types of the corresponding
14781          nontype template parameters, or must be convertible to the
14782          types of the corresponding nontype parameters as specified in
14783          _temp.arg.nontype_, otherwise type deduction fails.
14784
14785          All references in the function type of the function template
14786          to the corresponding template parameters are replaced by the
14787          specified template argument values.  If a substitution in a
14788          template parameter or in the function type of the function
14789          template results in an invalid type, type deduction fails.  */
14790       tree tparms = DECL_INNERMOST_TEMPLATE_PARMS (fn);
14791       int i, len = TREE_VEC_LENGTH (tparms);
14792       tree converted_args;
14793       bool incomplete = false;
14794
14795       if (explicit_targs == error_mark_node)
14796         return unify_invalid (explain_p);
14797
14798       converted_args
14799         = (coerce_template_parms (tparms, explicit_targs, NULL_TREE,
14800                                   (explain_p
14801                                    ? tf_warning_or_error
14802                                    : tf_none),
14803                                    /*require_all_args=*/false,
14804                                    /*use_default_args=*/false));
14805       if (converted_args == error_mark_node)
14806         return 1;
14807
14808       /* Substitute the explicit args into the function type.  This is
14809          necessary so that, for instance, explicitly declared function
14810          arguments can match null pointed constants.  If we were given
14811          an incomplete set of explicit args, we must not do semantic
14812          processing during substitution as we could create partial
14813          instantiations.  */
14814       for (i = 0; i < len; i++)
14815         {
14816           tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
14817           bool parameter_pack = false;
14818           tree targ = TREE_VEC_ELT (converted_args, i);
14819
14820           /* Dig out the actual parm.  */
14821           if (TREE_CODE (parm) == TYPE_DECL
14822               || TREE_CODE (parm) == TEMPLATE_DECL)
14823             {
14824               parm = TREE_TYPE (parm);
14825               parameter_pack = TEMPLATE_TYPE_PARAMETER_PACK (parm);
14826             }
14827           else if (TREE_CODE (parm) == PARM_DECL)
14828             {
14829               parm = DECL_INITIAL (parm);
14830               parameter_pack = TEMPLATE_PARM_PARAMETER_PACK (parm);
14831             }
14832
14833           if (!parameter_pack && targ == NULL_TREE)
14834             /* No explicit argument for this template parameter.  */
14835             incomplete = true;
14836
14837           if (parameter_pack && pack_deducible_p (parm, fn))
14838             {
14839               /* Mark the argument pack as "incomplete". We could
14840                  still deduce more arguments during unification.
14841                  We remove this mark in type_unification_real.  */
14842               if (targ)
14843                 {
14844                   ARGUMENT_PACK_INCOMPLETE_P(targ) = 1;
14845                   ARGUMENT_PACK_EXPLICIT_ARGS (targ) 
14846                     = ARGUMENT_PACK_ARGS (targ);
14847                 }
14848
14849               /* We have some incomplete argument packs.  */
14850               incomplete = true;
14851             }
14852         }
14853
14854       processing_template_decl += incomplete;
14855       fntype = deduction_tsubst_fntype (fn, converted_args,
14856                                         (explain_p
14857                                          ? tf_warning_or_error
14858                                          : tf_none));
14859       processing_template_decl -= incomplete;
14860
14861       if (fntype == error_mark_node)
14862         return 1;
14863
14864       /* Place the explicitly specified arguments in TARGS.  */
14865       for (i = NUM_TMPL_ARGS (converted_args); i--;)
14866         TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
14867     }
14868
14869   /* Never do unification on the 'this' parameter.  */
14870   parms = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (fntype));
14871
14872   if (return_type)
14873     {
14874       tree *new_args;
14875
14876       parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
14877       new_args = XALLOCAVEC (tree, nargs + 1);
14878       new_args[0] = return_type;
14879       memcpy (new_args + 1, args, nargs * sizeof (tree));
14880       args = new_args;
14881       ++nargs;
14882     }
14883
14884   /* We allow incomplete unification without an error message here
14885      because the standard doesn't seem to explicitly prohibit it.  Our
14886      callers must be ready to deal with unification failures in any
14887      event.  */
14888   result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
14889                                   targs, parms, args, nargs, /*subr=*/0,
14890                                   strict, flags, explain_p);
14891
14892   /* Now that we have bindings for all of the template arguments,
14893      ensure that the arguments deduced for the template template
14894      parameters have compatible template parameter lists.  We cannot
14895      check this property before we have deduced all template
14896      arguments, because the template parameter types of a template
14897      template parameter might depend on prior template parameters
14898      deduced after the template template parameter.  The following
14899      ill-formed example illustrates this issue:
14900
14901        template<typename T, template<T> class C> void f(C<5>, T);
14902
14903        template<int N> struct X {};
14904
14905        void g() {
14906          f(X<5>(), 5l); // error: template argument deduction fails
14907        }
14908
14909      The template parameter list of 'C' depends on the template type
14910      parameter 'T', but 'C' is deduced to 'X' before 'T' is deduced to
14911      'long'.  Thus, we can't check that 'C' cannot bind to 'X' at the
14912      time that we deduce 'C'.  */
14913   if (result == 0
14914       && !template_template_parm_bindings_ok_p 
14915            (DECL_INNERMOST_TEMPLATE_PARMS (fn), targs))
14916     return unify_inconsistent_template_template_parameters (explain_p);
14917
14918   if (result == 0)
14919     /* All is well so far.  Now, check:
14920
14921        [temp.deduct]
14922
14923        When all template arguments have been deduced, all uses of
14924        template parameters in nondeduced contexts are replaced with
14925        the corresponding deduced argument values.  If the
14926        substitution results in an invalid type, as described above,
14927        type deduction fails.  */
14928     {
14929       tree substed = deduction_tsubst_fntype (fn, targs,
14930                                               (explain_p
14931                                                ? tf_warning_or_error
14932                                                : tf_none));
14933       if (substed == error_mark_node)
14934         return 1;
14935
14936       /* If we're looking for an exact match, check that what we got
14937          is indeed an exact match.  It might not be if some template
14938          parameters are used in non-deduced contexts.  */
14939       if (strict == DEDUCE_EXACT)
14940         {
14941           unsigned int i;
14942
14943           tree sarg
14944             = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (substed));
14945           if (return_type)
14946             sarg = tree_cons (NULL_TREE, TREE_TYPE (substed), sarg);
14947           for (i = 0; i < nargs && sarg; ++i, sarg = TREE_CHAIN (sarg))
14948             if (!same_type_p (args[i], TREE_VALUE (sarg)))
14949               return unify_type_mismatch (explain_p, args[i],
14950                                           TREE_VALUE (sarg));
14951         }
14952     }
14953
14954   return result;
14955 }
14956
14957 /* Adjust types before performing type deduction, as described in
14958    [temp.deduct.call] and [temp.deduct.conv].  The rules in these two
14959    sections are symmetric.  PARM is the type of a function parameter
14960    or the return type of the conversion function.  ARG is the type of
14961    the argument passed to the call, or the type of the value
14962    initialized with the result of the conversion function.
14963    ARG_EXPR is the original argument expression, which may be null.  */
14964
14965 static int
14966 maybe_adjust_types_for_deduction (unification_kind_t strict,
14967                                   tree* parm,
14968                                   tree* arg,
14969                                   tree arg_expr)
14970 {
14971   int result = 0;
14972
14973   switch (strict)
14974     {
14975     case DEDUCE_CALL:
14976       break;
14977
14978     case DEDUCE_CONV:
14979       {
14980         /* Swap PARM and ARG throughout the remainder of this
14981            function; the handling is precisely symmetric since PARM
14982            will initialize ARG rather than vice versa.  */
14983         tree* temp = parm;
14984         parm = arg;
14985         arg = temp;
14986         break;
14987       }
14988
14989     case DEDUCE_EXACT:
14990       /* Core issue #873: Do the DR606 thing (see below) for these cases,
14991          too, but here handle it by stripping the reference from PARM
14992          rather than by adding it to ARG.  */
14993       if (TREE_CODE (*parm) == REFERENCE_TYPE
14994           && TYPE_REF_IS_RVALUE (*parm)
14995           && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
14996           && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
14997           && TREE_CODE (*arg) == REFERENCE_TYPE
14998           && !TYPE_REF_IS_RVALUE (*arg))
14999         *parm = TREE_TYPE (*parm);
15000       /* Nothing else to do in this case.  */
15001       return 0;
15002
15003     default:
15004       gcc_unreachable ();
15005     }
15006
15007   if (TREE_CODE (*parm) != REFERENCE_TYPE)
15008     {
15009       /* [temp.deduct.call]
15010
15011          If P is not a reference type:
15012
15013          --If A is an array type, the pointer type produced by the
15014          array-to-pointer standard conversion (_conv.array_) is
15015          used in place of A for type deduction; otherwise,
15016
15017          --If A is a function type, the pointer type produced by
15018          the function-to-pointer standard conversion
15019          (_conv.func_) is used in place of A for type deduction;
15020          otherwise,
15021
15022          --If A is a cv-qualified type, the top level
15023          cv-qualifiers of A's type are ignored for type
15024          deduction.  */
15025       if (TREE_CODE (*arg) == ARRAY_TYPE)
15026         *arg = build_pointer_type (TREE_TYPE (*arg));
15027       else if (TREE_CODE (*arg) == FUNCTION_TYPE)
15028         *arg = build_pointer_type (*arg);
15029       else
15030         *arg = TYPE_MAIN_VARIANT (*arg);
15031     }
15032
15033   /* From C++0x [14.8.2.1/3 temp.deduct.call] (after DR606), "If P is
15034      of the form T&&, where T is a template parameter, and the argument
15035      is an lvalue, T is deduced as A& */
15036   if (TREE_CODE (*parm) == REFERENCE_TYPE
15037       && TYPE_REF_IS_RVALUE (*parm)
15038       && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
15039       && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
15040       && (arg_expr ? real_lvalue_p (arg_expr)
15041           /* try_one_overload doesn't provide an arg_expr, but
15042              functions are always lvalues.  */
15043           : TREE_CODE (*arg) == FUNCTION_TYPE))
15044     *arg = build_reference_type (*arg);
15045
15046   /* [temp.deduct.call]
15047
15048      If P is a cv-qualified type, the top level cv-qualifiers
15049      of P's type are ignored for type deduction.  If P is a
15050      reference type, the type referred to by P is used for
15051      type deduction.  */
15052   *parm = TYPE_MAIN_VARIANT (*parm);
15053   if (TREE_CODE (*parm) == REFERENCE_TYPE)
15054     {
15055       *parm = TREE_TYPE (*parm);
15056       result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
15057     }
15058
15059   /* DR 322. For conversion deduction, remove a reference type on parm
15060      too (which has been swapped into ARG).  */
15061   if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
15062     *arg = TREE_TYPE (*arg);
15063
15064   return result;
15065 }
15066
15067 /* Subroutine of unify_one_argument.  PARM is a function parameter of a
15068    template which does contain any deducible template parameters; check if
15069    ARG is a suitable match for it.  STRICT, FLAGS and EXPLAIN_P are as in
15070    unify_one_argument.  */
15071
15072 static int
15073 check_non_deducible_conversion (tree parm, tree arg, int strict,
15074                                 int flags, bool explain_p)
15075 {
15076   tree type;
15077
15078   if (!TYPE_P (arg))
15079     type = TREE_TYPE (arg);
15080   else
15081     type = arg;
15082
15083   if (same_type_p (parm, type))
15084     return unify_success (explain_p);
15085
15086   if (strict == DEDUCE_CONV)
15087     {
15088       if (can_convert_arg (type, parm, NULL_TREE, flags))
15089         return unify_success (explain_p);
15090     }
15091   else if (strict != DEDUCE_EXACT)
15092     {
15093       if (can_convert_arg (parm, type,
15094                            TYPE_P (arg) ? NULL_TREE : arg,
15095                            flags))
15096         return unify_success (explain_p);
15097     }
15098
15099   if (strict == DEDUCE_EXACT)
15100     return unify_type_mismatch (explain_p, parm, arg);
15101   else
15102     return unify_arg_conversion (explain_p, parm, type, arg);
15103 }
15104
15105 /* Subroutine of type_unification_real and unify_pack_expansion to
15106    handle unification of a single P/A pair.  Parameters are as
15107    for those functions.  */
15108
15109 static int
15110 unify_one_argument (tree tparms, tree targs, tree parm, tree arg,
15111                     int subr, unification_kind_t strict, int flags,
15112                     bool explain_p)
15113 {
15114   tree arg_expr = NULL_TREE;
15115   int arg_strict;
15116
15117   if (arg == error_mark_node || parm == error_mark_node)
15118     return unify_invalid (explain_p);
15119   if (arg == unknown_type_node)
15120     /* We can't deduce anything from this, but we might get all the
15121        template args from other function args.  */
15122     return unify_success (explain_p);
15123
15124   /* FIXME uses_deducible_template_parms */
15125   if (TYPE_P (parm) && !uses_template_parms (parm))
15126     return check_non_deducible_conversion (parm, arg, strict, flags,
15127                                            explain_p);
15128
15129   switch (strict)
15130     {
15131     case DEDUCE_CALL:
15132       arg_strict = (UNIFY_ALLOW_OUTER_LEVEL
15133                     | UNIFY_ALLOW_MORE_CV_QUAL
15134                     | UNIFY_ALLOW_DERIVED);
15135       break;
15136
15137     case DEDUCE_CONV:
15138       arg_strict = UNIFY_ALLOW_LESS_CV_QUAL;
15139       break;
15140
15141     case DEDUCE_EXACT:
15142       arg_strict = UNIFY_ALLOW_NONE;
15143       break;
15144
15145     default:
15146       gcc_unreachable ();
15147     }
15148
15149   /* We only do these transformations if this is the top-level
15150      parameter_type_list in a call or declaration matching; in other
15151      situations (nested function declarators, template argument lists) we
15152      won't be comparing a type to an expression, and we don't do any type
15153      adjustments.  */
15154   if (!subr)
15155     {
15156       if (!TYPE_P (arg))
15157         {
15158           gcc_assert (TREE_TYPE (arg) != NULL_TREE);
15159           if (type_unknown_p (arg))
15160             {
15161               /* [temp.deduct.type] A template-argument can be
15162                  deduced from a pointer to function or pointer
15163                  to member function argument if the set of
15164                  overloaded functions does not contain function
15165                  templates and at most one of a set of
15166                  overloaded functions provides a unique
15167                  match.  */
15168
15169               if (resolve_overloaded_unification
15170                   (tparms, targs, parm, arg, strict,
15171                    arg_strict, explain_p))
15172                 return unify_success (explain_p);
15173               return unify_overload_resolution_failure (explain_p, arg);
15174             }
15175
15176           arg_expr = arg;
15177           arg = unlowered_expr_type (arg);
15178           if (arg == error_mark_node)
15179             return unify_invalid (explain_p);
15180         }
15181
15182       arg_strict |=
15183         maybe_adjust_types_for_deduction (strict, &parm, &arg, arg_expr);
15184     }
15185   else
15186     gcc_assert ((TYPE_P (parm) || TREE_CODE (parm) == TEMPLATE_DECL)
15187                 == (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL));
15188
15189   /* For deduction from an init-list we need the actual list.  */
15190   if (arg_expr && BRACE_ENCLOSED_INITIALIZER_P (arg_expr))
15191     arg = arg_expr;
15192   return unify (tparms, targs, parm, arg, arg_strict, explain_p);
15193 }
15194
15195 /* Most parms like fn_type_unification.
15196
15197    If SUBR is 1, we're being called recursively (to unify the
15198    arguments of a function or method parameter of a function
15199    template). */
15200
15201 static int
15202 type_unification_real (tree tparms,
15203                        tree targs,
15204                        tree xparms,
15205                        const tree *xargs,
15206                        unsigned int xnargs,
15207                        int subr,
15208                        unification_kind_t strict,
15209                        int flags,
15210                        bool explain_p)
15211 {
15212   tree parm, arg;
15213   int i;
15214   int ntparms = TREE_VEC_LENGTH (tparms);
15215   int saw_undeduced = 0;
15216   tree parms;
15217   const tree *args;
15218   unsigned int nargs;
15219   unsigned int ia;
15220
15221   gcc_assert (TREE_CODE (tparms) == TREE_VEC);
15222   gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
15223   gcc_assert (ntparms > 0);
15224
15225   /* Reset the number of non-defaulted template arguments contained
15226      in TARGS.  */
15227   NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs) = NULL_TREE;
15228
15229  again:
15230   parms = xparms;
15231   args = xargs;
15232   nargs = xnargs;
15233
15234   ia = 0;
15235   while (parms && parms != void_list_node
15236          && ia < nargs)
15237     {
15238       parm = TREE_VALUE (parms);
15239
15240       if (TREE_CODE (parm) == TYPE_PACK_EXPANSION
15241           && (!TREE_CHAIN (parms) || TREE_CHAIN (parms) == void_list_node))
15242         /* For a function parameter pack that occurs at the end of the
15243            parameter-declaration-list, the type A of each remaining
15244            argument of the call is compared with the type P of the
15245            declarator-id of the function parameter pack.  */
15246         break;
15247
15248       parms = TREE_CHAIN (parms);
15249
15250       if (TREE_CODE (parm) == TYPE_PACK_EXPANSION)
15251         /* For a function parameter pack that does not occur at the
15252            end of the parameter-declaration-list, the type of the
15253            parameter pack is a non-deduced context.  */
15254         continue;
15255
15256       arg = args[ia];
15257       ++ia;
15258
15259       if (unify_one_argument (tparms, targs, parm, arg, subr, strict,
15260                               flags, explain_p))
15261         return 1;
15262     }
15263
15264   if (parms 
15265       && parms != void_list_node
15266       && TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
15267     {
15268       /* Unify the remaining arguments with the pack expansion type.  */
15269       tree argvec;
15270       tree parmvec = make_tree_vec (1);
15271
15272       /* Allocate a TREE_VEC and copy in all of the arguments */ 
15273       argvec = make_tree_vec (nargs - ia);
15274       for (i = 0; ia < nargs; ++ia, ++i)
15275         TREE_VEC_ELT (argvec, i) = args[ia];
15276
15277       /* Copy the parameter into parmvec.  */
15278       TREE_VEC_ELT (parmvec, 0) = TREE_VALUE (parms);
15279       if (unify_pack_expansion (tparms, targs, parmvec, argvec, strict,
15280                                 /*subr=*/subr, explain_p))
15281         return 1;
15282
15283       /* Advance to the end of the list of parameters.  */
15284       parms = TREE_CHAIN (parms);
15285     }
15286
15287   /* Fail if we've reached the end of the parm list, and more args
15288      are present, and the parm list isn't variadic.  */
15289   if (ia < nargs && parms == void_list_node)
15290     return unify_too_many_arguments (explain_p, nargs, ia);
15291   /* Fail if parms are left and they don't have default values.  */
15292   if (parms && parms != void_list_node
15293       && TREE_PURPOSE (parms) == NULL_TREE)
15294     {
15295       unsigned int count = nargs;
15296       tree p = parms;
15297       while (p && p != void_list_node)
15298         {
15299           count++;
15300           p = TREE_CHAIN (p);
15301         }
15302       return unify_too_few_arguments (explain_p, ia, count);
15303     }
15304
15305   if (!subr)
15306     {
15307       tsubst_flags_t complain = (explain_p
15308                                  ? tf_warning_or_error
15309                                  : tf_none);
15310
15311       /* Check to see if we need another pass before we start clearing
15312          ARGUMENT_PACK_INCOMPLETE_P.  */
15313       for (i = 0; i < ntparms; i++)
15314         {
15315           tree targ = TREE_VEC_ELT (targs, i);
15316           tree tparm = TREE_VEC_ELT (tparms, i);
15317
15318           if (targ || tparm == error_mark_node)
15319             continue;
15320           tparm = TREE_VALUE (tparm);
15321
15322           /* If this is an undeduced nontype parameter that depends on
15323              a type parameter, try another pass; its type may have been
15324              deduced from a later argument than the one from which
15325              this parameter can be deduced.  */
15326           if (TREE_CODE (tparm) == PARM_DECL
15327               && uses_template_parms (TREE_TYPE (tparm))
15328               && !saw_undeduced++)
15329             goto again;
15330         }
15331
15332       for (i = 0; i < ntparms; i++)
15333         {
15334           tree targ = TREE_VEC_ELT (targs, i);
15335           tree tparm = TREE_VEC_ELT (tparms, i);
15336
15337           /* Clear the "incomplete" flags on all argument packs now so that
15338              substituting them into later default arguments works.  */
15339           if (targ && ARGUMENT_PACK_P (targ))
15340             {
15341               ARGUMENT_PACK_INCOMPLETE_P (targ) = 0;
15342               ARGUMENT_PACK_EXPLICIT_ARGS (targ) = NULL_TREE;
15343             }
15344
15345           if (targ || tparm == error_mark_node)
15346             continue;
15347           tparm = TREE_VALUE (tparm);
15348
15349           /* Core issue #226 (C++0x) [temp.deduct]:
15350
15351              If a template argument has not been deduced, its
15352              default template argument, if any, is used. 
15353
15354              When we are in C++98 mode, TREE_PURPOSE will either
15355              be NULL_TREE or ERROR_MARK_NODE, so we do not need
15356              to explicitly check cxx_dialect here.  */
15357           if (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)))
15358             {
15359               tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
15360               tree arg = TREE_PURPOSE (TREE_VEC_ELT (tparms, i));
15361               location_t save_loc = input_location;
15362               if (DECL_P (parm))
15363                 input_location = DECL_SOURCE_LOCATION (parm);
15364               arg = tsubst_template_arg (arg, targs, complain, NULL_TREE);
15365               arg = convert_template_argument (parm, arg, targs, complain,
15366                                                i, NULL_TREE);
15367               input_location = save_loc;
15368               if (arg == error_mark_node)
15369                 return 1;
15370               else
15371                 {
15372                   TREE_VEC_ELT (targs, i) = arg;
15373                   /* The position of the first default template argument,
15374                      is also the number of non-defaulted arguments in TARGS.
15375                      Record that.  */
15376                   if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
15377                     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, i);
15378                   continue;
15379                 }
15380             }
15381
15382           /* If the type parameter is a parameter pack, then it will
15383              be deduced to an empty parameter pack.  */
15384           if (template_parameter_pack_p (tparm))
15385             {
15386               tree arg;
15387
15388               if (TREE_CODE (tparm) == TEMPLATE_PARM_INDEX)
15389                 {
15390                   arg = make_node (NONTYPE_ARGUMENT_PACK);
15391                   TREE_TYPE (arg)  = TREE_TYPE (TEMPLATE_PARM_DECL (tparm));
15392                   TREE_CONSTANT (arg) = 1;
15393                 }
15394               else
15395                 arg = cxx_make_type (TYPE_ARGUMENT_PACK);
15396
15397               SET_ARGUMENT_PACK_ARGS (arg, make_tree_vec (0));
15398
15399               TREE_VEC_ELT (targs, i) = arg;
15400               continue;
15401             }
15402
15403           return unify_parameter_deduction_failure (explain_p, tparm);
15404         }
15405     }
15406 #ifdef ENABLE_CHECKING
15407   if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
15408     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, TREE_VEC_LENGTH (targs));
15409 #endif
15410
15411   return unify_success (explain_p);
15412 }
15413
15414 /* Subroutine of type_unification_real.  Args are like the variables
15415    at the call site.  ARG is an overloaded function (or template-id);
15416    we try deducing template args from each of the overloads, and if
15417    only one succeeds, we go with that.  Modifies TARGS and returns
15418    true on success.  */
15419
15420 static bool
15421 resolve_overloaded_unification (tree tparms,
15422                                 tree targs,
15423                                 tree parm,
15424                                 tree arg,
15425                                 unification_kind_t strict,
15426                                 int sub_strict,
15427                                 bool explain_p)
15428 {
15429   tree tempargs = copy_node (targs);
15430   int good = 0;
15431   tree goodfn = NULL_TREE;
15432   bool addr_p;
15433
15434   if (TREE_CODE (arg) == ADDR_EXPR)
15435     {
15436       arg = TREE_OPERAND (arg, 0);
15437       addr_p = true;
15438     }
15439   else
15440     addr_p = false;
15441
15442   if (TREE_CODE (arg) == COMPONENT_REF)
15443     /* Handle `&x' where `x' is some static or non-static member
15444        function name.  */
15445     arg = TREE_OPERAND (arg, 1);
15446
15447   if (TREE_CODE (arg) == OFFSET_REF)
15448     arg = TREE_OPERAND (arg, 1);
15449
15450   /* Strip baselink information.  */
15451   if (BASELINK_P (arg))
15452     arg = BASELINK_FUNCTIONS (arg);
15453
15454   if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
15455     {
15456       /* If we got some explicit template args, we need to plug them into
15457          the affected templates before we try to unify, in case the
15458          explicit args will completely resolve the templates in question.  */
15459
15460       int ok = 0;
15461       tree expl_subargs = TREE_OPERAND (arg, 1);
15462       arg = TREE_OPERAND (arg, 0);
15463
15464       for (; arg; arg = OVL_NEXT (arg))
15465         {
15466           tree fn = OVL_CURRENT (arg);
15467           tree subargs, elem;
15468
15469           if (TREE_CODE (fn) != TEMPLATE_DECL)
15470             continue;
15471
15472           ++processing_template_decl;
15473           subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
15474                                   expl_subargs, /*check_ret=*/false);
15475           if (subargs && !any_dependent_template_arguments_p (subargs))
15476             {
15477               elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
15478               if (try_one_overload (tparms, targs, tempargs, parm,
15479                                     elem, strict, sub_strict, addr_p, explain_p)
15480                   && (!goodfn || !same_type_p (goodfn, elem)))
15481                 {
15482                   goodfn = elem;
15483                   ++good;
15484                 }
15485             }
15486           else if (subargs)
15487             ++ok;
15488           --processing_template_decl;
15489         }
15490       /* If no templates (or more than one) are fully resolved by the
15491          explicit arguments, this template-id is a non-deduced context; it
15492          could still be OK if we deduce all template arguments for the
15493          enclosing call through other arguments.  */
15494       if (good != 1)
15495         good = ok;
15496     }
15497   else if (TREE_CODE (arg) != OVERLOAD
15498            && TREE_CODE (arg) != FUNCTION_DECL)
15499     /* If ARG is, for example, "(0, &f)" then its type will be unknown
15500        -- but the deduction does not succeed because the expression is
15501        not just the function on its own.  */
15502     return false;
15503   else
15504     for (; arg; arg = OVL_NEXT (arg))
15505       if (try_one_overload (tparms, targs, tempargs, parm,
15506                             TREE_TYPE (OVL_CURRENT (arg)),
15507                             strict, sub_strict, addr_p, explain_p)
15508           && (!goodfn || !decls_match (goodfn, OVL_CURRENT (arg))))
15509         {
15510           goodfn = OVL_CURRENT (arg);
15511           ++good;
15512         }
15513
15514   /* [temp.deduct.type] A template-argument can be deduced from a pointer
15515      to function or pointer to member function argument if the set of
15516      overloaded functions does not contain function templates and at most
15517      one of a set of overloaded functions provides a unique match.
15518
15519      So if we found multiple possibilities, we return success but don't
15520      deduce anything.  */
15521
15522   if (good == 1)
15523     {
15524       int i = TREE_VEC_LENGTH (targs);
15525       for (; i--; )
15526         if (TREE_VEC_ELT (tempargs, i))
15527           TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
15528     }
15529   if (good)
15530     return true;
15531
15532   return false;
15533 }
15534
15535 /* Core DR 115: In contexts where deduction is done and fails, or in
15536    contexts where deduction is not done, if a template argument list is
15537    specified and it, along with any default template arguments, identifies
15538    a single function template specialization, then the template-id is an
15539    lvalue for the function template specialization.  */
15540
15541 tree
15542 resolve_nondeduced_context (tree orig_expr)
15543 {
15544   tree expr, offset, baselink;
15545   bool addr;
15546
15547   if (!type_unknown_p (orig_expr))
15548     return orig_expr;
15549
15550   expr = orig_expr;
15551   addr = false;
15552   offset = NULL_TREE;
15553   baselink = NULL_TREE;
15554
15555   if (TREE_CODE (expr) == ADDR_EXPR)
15556     {
15557       expr = TREE_OPERAND (expr, 0);
15558       addr = true;
15559     }
15560   if (TREE_CODE (expr) == OFFSET_REF)
15561     {
15562       offset = expr;
15563       expr = TREE_OPERAND (expr, 1);
15564     }
15565   if (BASELINK_P (expr))
15566     {
15567       baselink = expr;
15568       expr = BASELINK_FUNCTIONS (expr);
15569     }
15570
15571   if (TREE_CODE (expr) == TEMPLATE_ID_EXPR)
15572     {
15573       int good = 0;
15574       tree goodfn = NULL_TREE;
15575
15576       /* If we got some explicit template args, we need to plug them into
15577          the affected templates before we try to unify, in case the
15578          explicit args will completely resolve the templates in question.  */
15579
15580       tree expl_subargs = TREE_OPERAND (expr, 1);
15581       tree arg = TREE_OPERAND (expr, 0);
15582       tree badfn = NULL_TREE;
15583       tree badargs = NULL_TREE;
15584
15585       for (; arg; arg = OVL_NEXT (arg))
15586         {
15587           tree fn = OVL_CURRENT (arg);
15588           tree subargs, elem;
15589
15590           if (TREE_CODE (fn) != TEMPLATE_DECL)
15591             continue;
15592
15593           ++processing_template_decl;
15594           subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
15595                                   expl_subargs, /*check_ret=*/false);
15596           if (subargs && !any_dependent_template_arguments_p (subargs))
15597             {
15598               elem = instantiate_template (fn, subargs, tf_none);
15599               if (elem == error_mark_node)
15600                 {
15601                   badfn = fn;
15602                   badargs = subargs;
15603                 }
15604               else if (elem && (!goodfn || !decls_match (goodfn, elem)))
15605                 {
15606                   goodfn = elem;
15607                   ++good;
15608                 }
15609             }
15610           --processing_template_decl;
15611         }
15612       if (good == 1)
15613         {
15614           mark_used (goodfn);
15615           expr = goodfn;
15616           if (baselink)
15617             expr = build_baselink (BASELINK_BINFO (baselink),
15618                                    BASELINK_ACCESS_BINFO (baselink),
15619                                    expr, BASELINK_OPTYPE (baselink));
15620           if (offset)
15621             {
15622               tree base
15623                 = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (offset, 0)));
15624               expr = build_offset_ref (base, expr, addr);
15625             }
15626           if (addr)
15627             expr = cp_build_addr_expr (expr, tf_warning_or_error);
15628           return expr;
15629         }
15630       else if (good == 0 && badargs)
15631         /* There were no good options and at least one bad one, so let the
15632            user know what the problem is.  */
15633         instantiate_template (badfn, badargs, tf_warning_or_error);
15634     }
15635   return orig_expr;
15636 }
15637
15638 /* Subroutine of resolve_overloaded_unification; does deduction for a single
15639    overload.  Fills TARGS with any deduced arguments, or error_mark_node if
15640    different overloads deduce different arguments for a given parm.
15641    ADDR_P is true if the expression for which deduction is being
15642    performed was of the form "& fn" rather than simply "fn".
15643
15644    Returns 1 on success.  */
15645
15646 static int
15647 try_one_overload (tree tparms,
15648                   tree orig_targs,
15649                   tree targs,
15650                   tree parm,
15651                   tree arg,
15652                   unification_kind_t strict,
15653                   int sub_strict,
15654                   bool addr_p,
15655                   bool explain_p)
15656 {
15657   int nargs;
15658   tree tempargs;
15659   int i;
15660
15661   /* [temp.deduct.type] A template-argument can be deduced from a pointer
15662      to function or pointer to member function argument if the set of
15663      overloaded functions does not contain function templates and at most
15664      one of a set of overloaded functions provides a unique match.
15665
15666      So if this is a template, just return success.  */
15667
15668   if (uses_template_parms (arg))
15669     return 1;
15670
15671   if (TREE_CODE (arg) == METHOD_TYPE)
15672     arg = build_ptrmemfunc_type (build_pointer_type (arg));
15673   else if (addr_p)
15674     arg = build_pointer_type (arg);
15675
15676   sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
15677
15678   /* We don't copy orig_targs for this because if we have already deduced
15679      some template args from previous args, unify would complain when we
15680      try to deduce a template parameter for the same argument, even though
15681      there isn't really a conflict.  */
15682   nargs = TREE_VEC_LENGTH (targs);
15683   tempargs = make_tree_vec (nargs);
15684
15685   if (unify (tparms, tempargs, parm, arg, sub_strict, explain_p))
15686     return 0;
15687
15688   /* First make sure we didn't deduce anything that conflicts with
15689      explicitly specified args.  */
15690   for (i = nargs; i--; )
15691     {
15692       tree elt = TREE_VEC_ELT (tempargs, i);
15693       tree oldelt = TREE_VEC_ELT (orig_targs, i);
15694
15695       if (!elt)
15696         /*NOP*/;
15697       else if (uses_template_parms (elt))
15698         /* Since we're unifying against ourselves, we will fill in
15699            template args used in the function parm list with our own
15700            template parms.  Discard them.  */
15701         TREE_VEC_ELT (tempargs, i) = NULL_TREE;
15702       else if (oldelt && !template_args_equal (oldelt, elt))
15703         return 0;
15704     }
15705
15706   for (i = nargs; i--; )
15707     {
15708       tree elt = TREE_VEC_ELT (tempargs, i);
15709
15710       if (elt)
15711         TREE_VEC_ELT (targs, i) = elt;
15712     }
15713
15714   return 1;
15715 }
15716
15717 /* PARM is a template class (perhaps with unbound template
15718    parameters).  ARG is a fully instantiated type.  If ARG can be
15719    bound to PARM, return ARG, otherwise return NULL_TREE.  TPARMS and
15720    TARGS are as for unify.  */
15721
15722 static tree
15723 try_class_unification (tree tparms, tree targs, tree parm, tree arg,
15724                        bool explain_p)
15725 {
15726   tree copy_of_targs;
15727
15728   if (!CLASSTYPE_TEMPLATE_INFO (arg)
15729       || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
15730           != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
15731     return NULL_TREE;
15732
15733   /* We need to make a new template argument vector for the call to
15734      unify.  If we used TARGS, we'd clutter it up with the result of
15735      the attempted unification, even if this class didn't work out.
15736      We also don't want to commit ourselves to all the unifications
15737      we've already done, since unification is supposed to be done on
15738      an argument-by-argument basis.  In other words, consider the
15739      following pathological case:
15740
15741        template <int I, int J, int K>
15742        struct S {};
15743
15744        template <int I, int J>
15745        struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
15746
15747        template <int I, int J, int K>
15748        void f(S<I, J, K>, S<I, I, I>);
15749
15750        void g() {
15751          S<0, 0, 0> s0;
15752          S<0, 1, 2> s2;
15753
15754          f(s0, s2);
15755        }
15756
15757      Now, by the time we consider the unification involving `s2', we
15758      already know that we must have `f<0, 0, 0>'.  But, even though
15759      `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
15760      because there are two ways to unify base classes of S<0, 1, 2>
15761      with S<I, I, I>.  If we kept the already deduced knowledge, we
15762      would reject the possibility I=1.  */
15763   copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
15764
15765   /* If unification failed, we're done.  */
15766   if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
15767              CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE, explain_p))
15768     return NULL_TREE;
15769
15770   return arg;
15771 }
15772
15773 /* Given a template type PARM and a class type ARG, find the unique
15774    base type in ARG that is an instance of PARM.  We do not examine
15775    ARG itself; only its base-classes.  If there is not exactly one
15776    appropriate base class, return NULL_TREE.  PARM may be the type of
15777    a partial specialization, as well as a plain template type.  Used
15778    by unify.  */
15779
15780 static enum template_base_result
15781 get_template_base (tree tparms, tree targs, tree parm, tree arg,
15782                    bool explain_p, tree *result)
15783 {
15784   tree rval = NULL_TREE;
15785   tree binfo;
15786
15787   gcc_assert (RECORD_OR_UNION_CODE_P (TREE_CODE (arg)));
15788
15789   binfo = TYPE_BINFO (complete_type (arg));
15790   if (!binfo)
15791     {
15792       /* The type could not be completed.  */
15793       *result = NULL_TREE;
15794       return tbr_incomplete_type;
15795     }
15796
15797   /* Walk in inheritance graph order.  The search order is not
15798      important, and this avoids multiple walks of virtual bases.  */
15799   for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
15800     {
15801       tree r = try_class_unification (tparms, targs, parm,
15802                                       BINFO_TYPE (binfo), explain_p);
15803
15804       if (r)
15805         {
15806           /* If there is more than one satisfactory baseclass, then:
15807
15808                [temp.deduct.call]
15809
15810               If they yield more than one possible deduced A, the type
15811               deduction fails.
15812
15813              applies.  */
15814           if (rval && !same_type_p (r, rval))
15815             {
15816               *result = NULL_TREE;
15817               return tbr_ambiguous_baseclass;
15818             }
15819
15820           rval = r;
15821         }
15822     }
15823
15824   *result = rval;
15825   return tbr_success;
15826 }
15827
15828 /* Returns the level of DECL, which declares a template parameter.  */
15829
15830 static int
15831 template_decl_level (tree decl)
15832 {
15833   switch (TREE_CODE (decl))
15834     {
15835     case TYPE_DECL:
15836     case TEMPLATE_DECL:
15837       return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
15838
15839     case PARM_DECL:
15840       return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
15841
15842     default:
15843       gcc_unreachable ();
15844     }
15845   return 0;
15846 }
15847
15848 /* Decide whether ARG can be unified with PARM, considering only the
15849    cv-qualifiers of each type, given STRICT as documented for unify.
15850    Returns nonzero iff the unification is OK on that basis.  */
15851
15852 static int
15853 check_cv_quals_for_unify (int strict, tree arg, tree parm)
15854 {
15855   int arg_quals = cp_type_quals (arg);
15856   int parm_quals = cp_type_quals (parm);
15857
15858   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
15859       && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
15860     {
15861       /*  Although a CVR qualifier is ignored when being applied to a
15862           substituted template parameter ([8.3.2]/1 for example), that
15863           does not allow us to unify "const T" with "int&" because both
15864           types are not of the form "cv-list T" [14.8.2.5 temp.deduct.type].
15865           It is ok when we're allowing additional CV qualifiers
15866           at the outer level [14.8.2.1]/3,1st bullet.  */
15867       if ((TREE_CODE (arg) == REFERENCE_TYPE
15868            || TREE_CODE (arg) == FUNCTION_TYPE
15869            || TREE_CODE (arg) == METHOD_TYPE)
15870           && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
15871         return 0;
15872
15873       if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
15874           && (parm_quals & TYPE_QUAL_RESTRICT))
15875         return 0;
15876     }
15877
15878   if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
15879       && (arg_quals & parm_quals) != parm_quals)
15880     return 0;
15881
15882   if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
15883       && (parm_quals & arg_quals) != arg_quals)
15884     return 0;
15885
15886   return 1;
15887 }
15888
15889 /* Determines the LEVEL and INDEX for the template parameter PARM.  */
15890 void 
15891 template_parm_level_and_index (tree parm, int* level, int* index)
15892 {
15893   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
15894       || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
15895       || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
15896     {
15897       *index = TEMPLATE_TYPE_IDX (parm);
15898       *level = TEMPLATE_TYPE_LEVEL (parm);
15899     }
15900   else
15901     {
15902       *index = TEMPLATE_PARM_IDX (parm);
15903       *level = TEMPLATE_PARM_LEVEL (parm);
15904     }
15905 }
15906
15907 #define RECUR_AND_CHECK_FAILURE(TP, TA, P, A, S, EP)                    \
15908   do {                                                                  \
15909     if (unify (TP, TA, P, A, S, EP))                                    \
15910       return 1;                                                         \
15911   } while (0);
15912
15913 /* Unifies the remaining arguments in PACKED_ARGS with the pack
15914    expansion at the end of PACKED_PARMS. Returns 0 if the type
15915    deduction succeeds, 1 otherwise. STRICT is the same as in
15916    unify. CALL_ARGS_P is true iff PACKED_ARGS is actually a function
15917    call argument list. We'll need to adjust the arguments to make them
15918    types. SUBR tells us if this is from a recursive call to
15919    type_unification_real, or for comparing two template argument
15920    lists. */
15921
15922 static int
15923 unify_pack_expansion (tree tparms, tree targs, tree packed_parms, 
15924                       tree packed_args, unification_kind_t strict,
15925                       bool subr, bool explain_p)
15926 {
15927   tree parm 
15928     = TREE_VEC_ELT (packed_parms, TREE_VEC_LENGTH (packed_parms) - 1);
15929   tree pattern = PACK_EXPANSION_PATTERN (parm);
15930   tree pack, packs = NULL_TREE;
15931   int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
15932   int len = TREE_VEC_LENGTH (packed_args);
15933
15934   /* Determine the parameter packs we will be deducing from the
15935      pattern, and record their current deductions.  */
15936   for (pack = PACK_EXPANSION_PARAMETER_PACKS (parm); 
15937        pack; pack = TREE_CHAIN (pack))
15938     {
15939       tree parm_pack = TREE_VALUE (pack);
15940       int idx, level;
15941
15942       /* Determine the index and level of this parameter pack.  */
15943       template_parm_level_and_index (parm_pack, &level, &idx);
15944
15945       /* Keep track of the parameter packs and their corresponding
15946          argument packs.  */
15947       packs = tree_cons (parm_pack, TMPL_ARG (targs, level, idx), packs);
15948       TREE_TYPE (packs) = make_tree_vec (len - start);
15949     }
15950   
15951   /* Loop through all of the arguments that have not yet been
15952      unified and unify each with the pattern.  */
15953   for (i = start; i < len; i++)
15954     {
15955       tree parm;
15956       bool any_explicit = false;
15957       tree arg = TREE_VEC_ELT (packed_args, i);
15958
15959       /* For each parameter pack, set its TMPL_ARG to either NULL_TREE
15960          or the element of its argument pack at the current index if
15961          this argument was explicitly specified.  */
15962       for (pack = packs; pack; pack = TREE_CHAIN (pack))
15963         {
15964           int idx, level;
15965           tree arg, pargs;
15966           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
15967
15968           arg = NULL_TREE;
15969           if (TREE_VALUE (pack)
15970               && (pargs = ARGUMENT_PACK_EXPLICIT_ARGS (TREE_VALUE (pack)))
15971               && (i < TREE_VEC_LENGTH (pargs)))
15972             {
15973               any_explicit = true;
15974               arg = TREE_VEC_ELT (pargs, i);
15975             }
15976           TMPL_ARG (targs, level, idx) = arg;
15977         }
15978
15979       /* If we had explicit template arguments, substitute them into the
15980          pattern before deduction.  */
15981       if (any_explicit)
15982         {
15983           /* Some arguments might still be unspecified or dependent.  */
15984           bool dependent;
15985           ++processing_template_decl;
15986           dependent = any_dependent_template_arguments_p (targs);
15987           if (!dependent)
15988             --processing_template_decl;
15989           parm = tsubst (pattern, targs,
15990                          explain_p ? tf_warning_or_error : tf_none,
15991                          NULL_TREE);
15992           if (dependent)
15993             --processing_template_decl;
15994           if (parm == error_mark_node)
15995             return 1;
15996         }
15997       else
15998         parm = pattern;
15999
16000       /* Unify the pattern with the current argument.  */
16001       if (unify_one_argument (tparms, targs, parm, arg, subr, strict,
16002                               LOOKUP_IMPLICIT, explain_p))
16003         return 1;
16004
16005       /* For each parameter pack, collect the deduced value.  */
16006       for (pack = packs; pack; pack = TREE_CHAIN (pack))
16007         {
16008           int idx, level;
16009           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
16010
16011           TREE_VEC_ELT (TREE_TYPE (pack), i - start) = 
16012             TMPL_ARG (targs, level, idx);
16013         }
16014     }
16015
16016   /* Verify that the results of unification with the parameter packs
16017      produce results consistent with what we've seen before, and make
16018      the deduced argument packs available.  */
16019   for (pack = packs; pack; pack = TREE_CHAIN (pack))
16020     {
16021       tree old_pack = TREE_VALUE (pack);
16022       tree new_args = TREE_TYPE (pack);
16023       int i, len = TREE_VEC_LENGTH (new_args);
16024       int idx, level;
16025       bool nondeduced_p = false;
16026
16027       /* By default keep the original deduced argument pack.
16028          If necessary, more specific code is going to update the
16029          resulting deduced argument later down in this function.  */
16030       template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
16031       TMPL_ARG (targs, level, idx) = old_pack;
16032
16033       /* If NEW_ARGS contains any NULL_TREE entries, we didn't
16034          actually deduce anything.  */
16035       for (i = 0; i < len && !nondeduced_p; ++i)
16036         if (TREE_VEC_ELT (new_args, i) == NULL_TREE)
16037           nondeduced_p = true;
16038       if (nondeduced_p)
16039         continue;
16040
16041       if (old_pack && ARGUMENT_PACK_INCOMPLETE_P (old_pack))
16042         {
16043           /* If we had fewer function args than explicit template args,
16044              just use the explicits.  */
16045           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
16046           int explicit_len = TREE_VEC_LENGTH (explicit_args);
16047           if (len < explicit_len)
16048             new_args = explicit_args;
16049         }
16050
16051       if (!old_pack)
16052         {
16053           tree result;
16054           /* Build the deduced *_ARGUMENT_PACK.  */
16055           if (TREE_CODE (TREE_PURPOSE (pack)) == TEMPLATE_PARM_INDEX)
16056             {
16057               result = make_node (NONTYPE_ARGUMENT_PACK);
16058               TREE_TYPE (result) = 
16059                 TREE_TYPE (TEMPLATE_PARM_DECL (TREE_PURPOSE (pack)));
16060               TREE_CONSTANT (result) = 1;
16061             }
16062           else
16063             result = cxx_make_type (TYPE_ARGUMENT_PACK);
16064
16065           SET_ARGUMENT_PACK_ARGS (result, new_args);
16066
16067           /* Note the deduced argument packs for this parameter
16068              pack.  */
16069           TMPL_ARG (targs, level, idx) = result;
16070         }
16071       else if (ARGUMENT_PACK_INCOMPLETE_P (old_pack)
16072                && (ARGUMENT_PACK_ARGS (old_pack) 
16073                    == ARGUMENT_PACK_EXPLICIT_ARGS (old_pack)))
16074         {
16075           /* We only had the explicitly-provided arguments before, but
16076              now we have a complete set of arguments.  */
16077           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
16078
16079           SET_ARGUMENT_PACK_ARGS (old_pack, new_args);
16080           ARGUMENT_PACK_INCOMPLETE_P (old_pack) = 1;
16081           ARGUMENT_PACK_EXPLICIT_ARGS (old_pack) = explicit_args;
16082         }
16083       else
16084         {
16085           tree bad_old_arg = NULL_TREE, bad_new_arg = NULL_TREE;
16086           tree old_args = ARGUMENT_PACK_ARGS (old_pack);
16087
16088           if (!comp_template_args_with_info (old_args, new_args,
16089                                              &bad_old_arg, &bad_new_arg))
16090             /* Inconsistent unification of this parameter pack.  */
16091             return unify_parameter_pack_inconsistent (explain_p,
16092                                                       bad_old_arg,
16093                                                       bad_new_arg);
16094         }
16095     }
16096
16097   return unify_success (explain_p);
16098 }
16099
16100 /* Deduce the value of template parameters.  TPARMS is the (innermost)
16101    set of template parameters to a template.  TARGS is the bindings
16102    for those template parameters, as determined thus far; TARGS may
16103    include template arguments for outer levels of template parameters
16104    as well.  PARM is a parameter to a template function, or a
16105    subcomponent of that parameter; ARG is the corresponding argument.
16106    This function attempts to match PARM with ARG in a manner
16107    consistent with the existing assignments in TARGS.  If more values
16108    are deduced, then TARGS is updated.
16109
16110    Returns 0 if the type deduction succeeds, 1 otherwise.  The
16111    parameter STRICT is a bitwise or of the following flags:
16112
16113      UNIFY_ALLOW_NONE:
16114        Require an exact match between PARM and ARG.
16115      UNIFY_ALLOW_MORE_CV_QUAL:
16116        Allow the deduced ARG to be more cv-qualified (by qualification
16117        conversion) than ARG.
16118      UNIFY_ALLOW_LESS_CV_QUAL:
16119        Allow the deduced ARG to be less cv-qualified than ARG.
16120      UNIFY_ALLOW_DERIVED:
16121        Allow the deduced ARG to be a template base class of ARG,
16122        or a pointer to a template base class of the type pointed to by
16123        ARG.
16124      UNIFY_ALLOW_INTEGER:
16125        Allow any integral type to be deduced.  See the TEMPLATE_PARM_INDEX
16126        case for more information.
16127      UNIFY_ALLOW_OUTER_LEVEL:
16128        This is the outermost level of a deduction. Used to determine validity
16129        of qualification conversions. A valid qualification conversion must
16130        have const qualified pointers leading up to the inner type which
16131        requires additional CV quals, except at the outer level, where const
16132        is not required [conv.qual]. It would be normal to set this flag in
16133        addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
16134      UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
16135        This is the outermost level of a deduction, and PARM can be more CV
16136        qualified at this point.
16137      UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
16138        This is the outermost level of a deduction, and PARM can be less CV
16139        qualified at this point.  */
16140
16141 static int
16142 unify (tree tparms, tree targs, tree parm, tree arg, int strict,
16143        bool explain_p)
16144 {
16145   int idx;
16146   tree targ;
16147   tree tparm;
16148   int strict_in = strict;
16149
16150   /* I don't think this will do the right thing with respect to types.
16151      But the only case I've seen it in so far has been array bounds, where
16152      signedness is the only information lost, and I think that will be
16153      okay.  */
16154   while (TREE_CODE (parm) == NOP_EXPR)
16155     parm = TREE_OPERAND (parm, 0);
16156
16157   if (arg == error_mark_node)
16158     return unify_invalid (explain_p);
16159   if (arg == unknown_type_node
16160       || arg == init_list_type_node)
16161     /* We can't deduce anything from this, but we might get all the
16162        template args from other function args.  */
16163     return unify_success (explain_p);
16164
16165   /* If PARM uses template parameters, then we can't bail out here,
16166      even if ARG == PARM, since we won't record unifications for the
16167      template parameters.  We might need them if we're trying to
16168      figure out which of two things is more specialized.  */
16169   if (arg == parm && !uses_template_parms (parm))
16170     return unify_success (explain_p);
16171
16172   /* Handle init lists early, so the rest of the function can assume
16173      we're dealing with a type. */
16174   if (BRACE_ENCLOSED_INITIALIZER_P (arg))
16175     {
16176       tree elt, elttype;
16177       unsigned i;
16178       tree orig_parm = parm;
16179
16180       /* Replace T with std::initializer_list<T> for deduction.  */
16181       if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
16182           && flag_deduce_init_list)
16183         parm = listify (parm);
16184
16185       if (!is_std_init_list (parm))
16186         /* We can only deduce from an initializer list argument if the
16187            parameter is std::initializer_list; otherwise this is a
16188            non-deduced context. */
16189         return unify_success (explain_p);
16190
16191       elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (parm), 0);
16192
16193       FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (arg), i, elt)
16194         {
16195           int elt_strict = strict;
16196
16197           if (elt == error_mark_node)
16198             return unify_invalid (explain_p);
16199
16200           if (!BRACE_ENCLOSED_INITIALIZER_P (elt))
16201             {
16202               tree type = TREE_TYPE (elt);
16203               /* It should only be possible to get here for a call.  */
16204               gcc_assert (elt_strict & UNIFY_ALLOW_OUTER_LEVEL);
16205               elt_strict |= maybe_adjust_types_for_deduction
16206                 (DEDUCE_CALL, &elttype, &type, elt);
16207               elt = type;
16208             }
16209
16210           RECUR_AND_CHECK_FAILURE (tparms, targs, elttype, elt, elt_strict,
16211                                    explain_p);
16212         }
16213
16214       /* If the std::initializer_list<T> deduction worked, replace the
16215          deduced A with std::initializer_list<A>.  */
16216       if (orig_parm != parm)
16217         {
16218           idx = TEMPLATE_TYPE_IDX (orig_parm);
16219           targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
16220           targ = listify (targ);
16221           TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = targ;
16222         }
16223       return unify_success (explain_p);
16224     }
16225
16226   /* Immediately reject some pairs that won't unify because of
16227      cv-qualification mismatches.  */
16228   if (TREE_CODE (arg) == TREE_CODE (parm)
16229       && TYPE_P (arg)
16230       /* It is the elements of the array which hold the cv quals of an array
16231          type, and the elements might be template type parms. We'll check
16232          when we recurse.  */
16233       && TREE_CODE (arg) != ARRAY_TYPE
16234       /* We check the cv-qualifiers when unifying with template type
16235          parameters below.  We want to allow ARG `const T' to unify with
16236          PARM `T' for example, when computing which of two templates
16237          is more specialized, for example.  */
16238       && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
16239       && !check_cv_quals_for_unify (strict_in, arg, parm))
16240     return unify_cv_qual_mismatch (explain_p, parm, arg);
16241
16242   if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
16243       && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
16244     strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
16245   strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
16246   strict &= ~UNIFY_ALLOW_DERIVED;
16247   strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
16248   strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
16249
16250   switch (TREE_CODE (parm))
16251     {
16252     case TYPENAME_TYPE:
16253     case SCOPE_REF:
16254     case UNBOUND_CLASS_TEMPLATE:
16255       /* In a type which contains a nested-name-specifier, template
16256          argument values cannot be deduced for template parameters used
16257          within the nested-name-specifier.  */
16258       return unify_success (explain_p);
16259
16260     case TEMPLATE_TYPE_PARM:
16261     case TEMPLATE_TEMPLATE_PARM:
16262     case BOUND_TEMPLATE_TEMPLATE_PARM:
16263       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
16264       if (tparm == error_mark_node)
16265         return unify_invalid (explain_p);
16266
16267       if (TEMPLATE_TYPE_LEVEL (parm)
16268           != template_decl_level (tparm))
16269         /* The PARM is not one we're trying to unify.  Just check
16270            to see if it matches ARG.  */
16271         {
16272           if (TREE_CODE (arg) == TREE_CODE (parm)
16273               && same_type_p (parm, arg))
16274             return unify_success (explain_p);
16275           else
16276             return unify_type_mismatch (explain_p, parm, arg);
16277         }
16278       idx = TEMPLATE_TYPE_IDX (parm);
16279       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
16280       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
16281       if (tparm == error_mark_node)
16282         return unify_invalid (explain_p);
16283
16284       /* Check for mixed types and values.  */
16285       if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
16286            && TREE_CODE (tparm) != TYPE_DECL)
16287           || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
16288               && TREE_CODE (tparm) != TEMPLATE_DECL))
16289         gcc_unreachable ();
16290
16291       if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
16292         {
16293           /* ARG must be constructed from a template class or a template
16294              template parameter.  */
16295           if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
16296               && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
16297             return unify_template_deduction_failure (explain_p, parm, arg);
16298
16299           {
16300             tree parmvec = TYPE_TI_ARGS (parm);
16301             tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
16302             tree full_argvec = add_to_template_args (targs, argvec);
16303             tree parm_parms 
16304               = DECL_INNERMOST_TEMPLATE_PARMS
16305                   (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (parm));
16306             int i, len;
16307             int parm_variadic_p = 0;
16308
16309             /* The resolution to DR150 makes clear that default
16310                arguments for an N-argument may not be used to bind T
16311                to a template template parameter with fewer than N
16312                parameters.  It is not safe to permit the binding of
16313                default arguments as an extension, as that may change
16314                the meaning of a conforming program.  Consider:
16315
16316                   struct Dense { static const unsigned int dim = 1; };
16317
16318                   template <template <typename> class View,
16319                             typename Block>
16320                   void operator+(float, View<Block> const&);
16321
16322                   template <typename Block,
16323                             unsigned int Dim = Block::dim>
16324                   struct Lvalue_proxy { operator float() const; };
16325
16326                   void
16327                   test_1d (void) {
16328                     Lvalue_proxy<Dense> p;
16329                     float b;
16330                     b + p;
16331                   }
16332
16333               Here, if Lvalue_proxy is permitted to bind to View, then
16334               the global operator+ will be used; if they are not, the
16335               Lvalue_proxy will be converted to float.  */
16336             if (coerce_template_parms (parm_parms,
16337                                        full_argvec,
16338                                        TYPE_TI_TEMPLATE (parm),
16339                                        (explain_p
16340                                         ? tf_warning_or_error
16341                                         : tf_none),
16342                                        /*require_all_args=*/true,
16343                                        /*use_default_args=*/false)
16344                 == error_mark_node)
16345               return 1;
16346
16347             /* Deduce arguments T, i from TT<T> or TT<i>.
16348                We check each element of PARMVEC and ARGVEC individually
16349                rather than the whole TREE_VEC since they can have
16350                different number of elements.  */
16351
16352             parmvec = expand_template_argument_pack (parmvec);
16353             argvec = expand_template_argument_pack (argvec);
16354
16355             len = TREE_VEC_LENGTH (parmvec);
16356
16357             /* Check if the parameters end in a pack, making them
16358                variadic.  */
16359             if (len > 0
16360                 && PACK_EXPANSION_P (TREE_VEC_ELT (parmvec, len - 1)))
16361               parm_variadic_p = 1;
16362             
16363             if (TREE_VEC_LENGTH (argvec) < len - parm_variadic_p)
16364               return unify_too_few_arguments (explain_p,
16365                                               TREE_VEC_LENGTH (argvec), len);
16366
16367              for (i = 0; i < len - parm_variadic_p; ++i)
16368               {
16369                 RECUR_AND_CHECK_FAILURE (tparms, targs,
16370                                          TREE_VEC_ELT (parmvec, i),
16371                                          TREE_VEC_ELT (argvec, i),
16372                                          UNIFY_ALLOW_NONE, explain_p);
16373               }
16374
16375             if (parm_variadic_p
16376                 && unify_pack_expansion (tparms, targs,
16377                                          parmvec, argvec,
16378                                          DEDUCE_EXACT,
16379                                          /*subr=*/true, explain_p))
16380               return 1;
16381           }
16382           arg = TYPE_TI_TEMPLATE (arg);
16383
16384           /* Fall through to deduce template name.  */
16385         }
16386
16387       if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
16388           || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
16389         {
16390           /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>.  */
16391
16392           /* Simple cases: Value already set, does match or doesn't.  */
16393           if (targ != NULL_TREE && template_args_equal (targ, arg))
16394             return unify_success (explain_p);
16395           else if (targ)
16396             return unify_inconsistency (explain_p, parm, targ, arg);
16397         }
16398       else
16399         {
16400           /* If PARM is `const T' and ARG is only `int', we don't have
16401              a match unless we are allowing additional qualification.
16402              If ARG is `const int' and PARM is just `T' that's OK;
16403              that binds `const int' to `T'.  */
16404           if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
16405                                          arg, parm))
16406             return unify_cv_qual_mismatch (explain_p, parm, arg);
16407
16408           /* Consider the case where ARG is `const volatile int' and
16409              PARM is `const T'.  Then, T should be `volatile int'.  */
16410           arg = cp_build_qualified_type_real
16411             (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
16412           if (arg == error_mark_node)
16413             return unify_invalid (explain_p);
16414
16415           /* Simple cases: Value already set, does match or doesn't.  */
16416           if (targ != NULL_TREE && same_type_p (targ, arg))
16417             return unify_success (explain_p);
16418           else if (targ)
16419             return unify_inconsistency (explain_p, parm, targ, arg);
16420
16421           /* Make sure that ARG is not a variable-sized array.  (Note
16422              that were talking about variable-sized arrays (like
16423              `int[n]'), rather than arrays of unknown size (like
16424              `int[]').)  We'll get very confused by such a type since
16425              the bound of the array is not constant, and therefore
16426              not mangleable.  Besides, such types are not allowed in
16427              ISO C++, so we can do as we please here.  We do allow
16428              them for 'auto' deduction, since that isn't ABI-exposed.  */
16429           if (!is_auto (parm) && variably_modified_type_p (arg, NULL_TREE))
16430             return unify_vla_arg (explain_p, arg);
16431
16432           /* Strip typedefs as in convert_template_argument.  */
16433           arg = canonicalize_type_argument (arg, tf_none);
16434         }
16435
16436       /* If ARG is a parameter pack or an expansion, we cannot unify
16437          against it unless PARM is also a parameter pack.  */
16438       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
16439           && !template_parameter_pack_p (parm))
16440         return unify_parameter_pack_mismatch (explain_p, parm, arg);
16441
16442       /* If the argument deduction results is a METHOD_TYPE,
16443          then there is a problem.
16444          METHOD_TYPE doesn't map to any real C++ type the result of
16445          the deduction can not be of that type.  */
16446       if (TREE_CODE (arg) == METHOD_TYPE)
16447         return unify_method_type_error (explain_p, arg);
16448
16449       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
16450       return unify_success (explain_p);
16451
16452     case TEMPLATE_PARM_INDEX:
16453       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
16454       if (tparm == error_mark_node)
16455         return unify_invalid (explain_p);
16456
16457       if (TEMPLATE_PARM_LEVEL (parm)
16458           != template_decl_level (tparm))
16459         {
16460           /* The PARM is not one we're trying to unify.  Just check
16461              to see if it matches ARG.  */
16462           int result = !(TREE_CODE (arg) == TREE_CODE (parm)
16463                          && cp_tree_equal (parm, arg));
16464           if (result)
16465             unify_expression_unequal (explain_p, parm, arg);
16466           return result;
16467         }
16468
16469       idx = TEMPLATE_PARM_IDX (parm);
16470       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
16471
16472       if (targ)
16473         {
16474           int x = !cp_tree_equal (targ, arg);
16475           if (x)
16476             unify_inconsistency (explain_p, parm, targ, arg);
16477           return x;
16478         }
16479
16480       /* [temp.deduct.type] If, in the declaration of a function template
16481          with a non-type template-parameter, the non-type
16482          template-parameter is used in an expression in the function
16483          parameter-list and, if the corresponding template-argument is
16484          deduced, the template-argument type shall match the type of the
16485          template-parameter exactly, except that a template-argument
16486          deduced from an array bound may be of any integral type.
16487          The non-type parameter might use already deduced type parameters.  */
16488       tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
16489       if (!TREE_TYPE (arg))
16490         /* Template-parameter dependent expression.  Just accept it for now.
16491            It will later be processed in convert_template_argument.  */
16492         ;
16493       else if (same_type_p (TREE_TYPE (arg), tparm))
16494         /* OK */;
16495       else if ((strict & UNIFY_ALLOW_INTEGER)
16496                && (TREE_CODE (tparm) == INTEGER_TYPE
16497                    || TREE_CODE (tparm) == BOOLEAN_TYPE))
16498         /* Convert the ARG to the type of PARM; the deduced non-type
16499            template argument must exactly match the types of the
16500            corresponding parameter.  */
16501         arg = fold (build_nop (tparm, arg));
16502       else if (uses_template_parms (tparm))
16503         /* We haven't deduced the type of this parameter yet.  Try again
16504            later.  */
16505         return unify_success (explain_p);
16506       else
16507         return unify_type_mismatch (explain_p, tparm, arg);
16508
16509       /* If ARG is a parameter pack or an expansion, we cannot unify
16510          against it unless PARM is also a parameter pack.  */
16511       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
16512           && !TEMPLATE_PARM_PARAMETER_PACK (parm))
16513         return unify_parameter_pack_mismatch (explain_p, parm, arg);
16514
16515       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
16516       return unify_success (explain_p);
16517
16518     case PTRMEM_CST:
16519      {
16520         /* A pointer-to-member constant can be unified only with
16521          another constant.  */
16522       if (TREE_CODE (arg) != PTRMEM_CST)
16523         return unify_ptrmem_cst_mismatch (explain_p, parm, arg);
16524
16525       /* Just unify the class member. It would be useless (and possibly
16526          wrong, depending on the strict flags) to unify also
16527          PTRMEM_CST_CLASS, because we want to be sure that both parm and
16528          arg refer to the same variable, even if through different
16529          classes. For instance:
16530
16531          struct A { int x; };
16532          struct B : A { };
16533
16534          Unification of &A::x and &B::x must succeed.  */
16535       return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
16536                     PTRMEM_CST_MEMBER (arg), strict, explain_p);
16537      }
16538
16539     case POINTER_TYPE:
16540       {
16541         if (TREE_CODE (arg) != POINTER_TYPE)
16542           return unify_type_mismatch (explain_p, parm, arg);
16543
16544         /* [temp.deduct.call]
16545
16546            A can be another pointer or pointer to member type that can
16547            be converted to the deduced A via a qualification
16548            conversion (_conv.qual_).
16549
16550            We pass down STRICT here rather than UNIFY_ALLOW_NONE.
16551            This will allow for additional cv-qualification of the
16552            pointed-to types if appropriate.  */
16553
16554         if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
16555           /* The derived-to-base conversion only persists through one
16556              level of pointers.  */
16557           strict |= (strict_in & UNIFY_ALLOW_DERIVED);
16558
16559         return unify (tparms, targs, TREE_TYPE (parm),
16560                       TREE_TYPE (arg), strict, explain_p);
16561       }
16562
16563     case REFERENCE_TYPE:
16564       if (TREE_CODE (arg) != REFERENCE_TYPE)
16565         return unify_type_mismatch (explain_p, parm, arg);
16566       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
16567                     strict & UNIFY_ALLOW_MORE_CV_QUAL, explain_p);
16568
16569     case ARRAY_TYPE:
16570       if (TREE_CODE (arg) != ARRAY_TYPE)
16571         return unify_type_mismatch (explain_p, parm, arg);
16572       if ((TYPE_DOMAIN (parm) == NULL_TREE)
16573           != (TYPE_DOMAIN (arg) == NULL_TREE))
16574         return unify_type_mismatch (explain_p, parm, arg);
16575       if (TYPE_DOMAIN (parm) != NULL_TREE)
16576         {
16577           tree parm_max;
16578           tree arg_max;
16579           bool parm_cst;
16580           bool arg_cst;
16581
16582           /* Our representation of array types uses "N - 1" as the
16583              TYPE_MAX_VALUE for an array with "N" elements, if "N" is
16584              not an integer constant.  We cannot unify arbitrarily
16585              complex expressions, so we eliminate the MINUS_EXPRs
16586              here.  */
16587           parm_max = TYPE_MAX_VALUE (TYPE_DOMAIN (parm));
16588           parm_cst = TREE_CODE (parm_max) == INTEGER_CST;
16589           if (!parm_cst)
16590             {
16591               gcc_assert (TREE_CODE (parm_max) == MINUS_EXPR);
16592               parm_max = TREE_OPERAND (parm_max, 0);
16593             }
16594           arg_max = TYPE_MAX_VALUE (TYPE_DOMAIN (arg));
16595           arg_cst = TREE_CODE (arg_max) == INTEGER_CST;
16596           if (!arg_cst)
16597             {
16598               /* The ARG_MAX may not be a simple MINUS_EXPR, if we are
16599                  trying to unify the type of a variable with the type
16600                  of a template parameter.  For example:
16601
16602                    template <unsigned int N>
16603                    void f (char (&) [N]);
16604                    int g(); 
16605                    void h(int i) {
16606                      char a[g(i)];
16607                      f(a); 
16608                    }
16609
16610                 Here, the type of the ARG will be "int [g(i)]", and
16611                 may be a SAVE_EXPR, etc.  */
16612               if (TREE_CODE (arg_max) != MINUS_EXPR)
16613                 return unify_vla_arg (explain_p, arg);
16614               arg_max = TREE_OPERAND (arg_max, 0);
16615             }
16616
16617           /* If only one of the bounds used a MINUS_EXPR, compensate
16618              by adding one to the other bound.  */
16619           if (parm_cst && !arg_cst)
16620             parm_max = fold_build2_loc (input_location, PLUS_EXPR,
16621                                     integer_type_node,
16622                                     parm_max,
16623                                     integer_one_node);
16624           else if (arg_cst && !parm_cst)
16625             arg_max = fold_build2_loc (input_location, PLUS_EXPR,
16626                                    integer_type_node,
16627                                    arg_max,
16628                                    integer_one_node);
16629
16630           RECUR_AND_CHECK_FAILURE (tparms, targs, parm_max, arg_max,
16631                                    UNIFY_ALLOW_INTEGER, explain_p);
16632         }
16633       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
16634                     strict & UNIFY_ALLOW_MORE_CV_QUAL, explain_p);
16635
16636     case REAL_TYPE:
16637     case COMPLEX_TYPE:
16638     case VECTOR_TYPE:
16639     case INTEGER_TYPE:
16640     case BOOLEAN_TYPE:
16641     case ENUMERAL_TYPE:
16642     case VOID_TYPE:
16643     case NULLPTR_TYPE:
16644       if (TREE_CODE (arg) != TREE_CODE (parm))
16645         return unify_type_mismatch (explain_p, parm, arg);
16646
16647       /* We have already checked cv-qualification at the top of the
16648          function.  */
16649       if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
16650         return unify_type_mismatch (explain_p, parm, arg);
16651
16652       /* As far as unification is concerned, this wins.  Later checks
16653          will invalidate it if necessary.  */
16654       return unify_success (explain_p);
16655
16656       /* Types INTEGER_CST and MINUS_EXPR can come from array bounds.  */
16657       /* Type INTEGER_CST can come from ordinary constant template args.  */
16658     case INTEGER_CST:
16659       while (TREE_CODE (arg) == NOP_EXPR)
16660         arg = TREE_OPERAND (arg, 0);
16661
16662       if (TREE_CODE (arg) != INTEGER_CST)
16663         return unify_template_argument_mismatch (explain_p, parm, arg);
16664       return (tree_int_cst_equal (parm, arg)
16665               ? unify_success (explain_p)
16666               : unify_template_argument_mismatch (explain_p, parm, arg));
16667
16668     case TREE_VEC:
16669       {
16670         int i, len, argslen;
16671         int parm_variadic_p = 0;
16672
16673         if (TREE_CODE (arg) != TREE_VEC)
16674           return unify_template_argument_mismatch (explain_p, parm, arg);
16675
16676         len = TREE_VEC_LENGTH (parm);
16677         argslen = TREE_VEC_LENGTH (arg);
16678
16679         /* Check for pack expansions in the parameters.  */
16680         for (i = 0; i < len; ++i)
16681           {
16682             if (PACK_EXPANSION_P (TREE_VEC_ELT (parm, i)))
16683               {
16684                 if (i == len - 1)
16685                   /* We can unify against something with a trailing
16686                      parameter pack.  */
16687                   parm_variadic_p = 1;
16688                 else
16689                   /* [temp.deduct.type]/9: If the template argument list of
16690                      P contains a pack expansion that is not the last
16691                      template argument, the entire template argument list
16692                      is a non-deduced context.  */
16693                   return unify_success (explain_p);
16694               }
16695           }
16696
16697         /* If we don't have enough arguments to satisfy the parameters
16698            (not counting the pack expression at the end), or we have
16699            too many arguments for a parameter list that doesn't end in
16700            a pack expression, we can't unify.  */
16701         if (parm_variadic_p
16702             ? argslen < len - parm_variadic_p
16703             : argslen != len)
16704           return unify_arity (explain_p, TREE_VEC_LENGTH (arg), len);
16705
16706         /* Unify all of the parameters that precede the (optional)
16707            pack expression.  */
16708         for (i = 0; i < len - parm_variadic_p; ++i)
16709           {
16710             RECUR_AND_CHECK_FAILURE (tparms, targs,
16711                                      TREE_VEC_ELT (parm, i),
16712                                      TREE_VEC_ELT (arg, i),
16713                                      UNIFY_ALLOW_NONE, explain_p);
16714           }
16715         if (parm_variadic_p)
16716           return unify_pack_expansion (tparms, targs, parm, arg,
16717                                        DEDUCE_EXACT,
16718                                        /*subr=*/true, explain_p);
16719         return unify_success (explain_p);
16720       }
16721
16722     case RECORD_TYPE:
16723     case UNION_TYPE:
16724       if (TREE_CODE (arg) != TREE_CODE (parm))
16725         return unify_type_mismatch (explain_p, parm, arg);
16726
16727       if (TYPE_PTRMEMFUNC_P (parm))
16728         {
16729           if (!TYPE_PTRMEMFUNC_P (arg))
16730             return unify_type_mismatch (explain_p, parm, arg);
16731
16732           return unify (tparms, targs,
16733                         TYPE_PTRMEMFUNC_FN_TYPE (parm),
16734                         TYPE_PTRMEMFUNC_FN_TYPE (arg),
16735                         strict, explain_p);
16736         }
16737
16738       if (CLASSTYPE_TEMPLATE_INFO (parm))
16739         {
16740           tree t = NULL_TREE;
16741
16742           if (strict_in & UNIFY_ALLOW_DERIVED)
16743             {
16744               /* First, we try to unify the PARM and ARG directly.  */
16745               t = try_class_unification (tparms, targs,
16746                                          parm, arg, explain_p);
16747
16748               if (!t)
16749                 {
16750                   /* Fallback to the special case allowed in
16751                      [temp.deduct.call]:
16752
16753                        If P is a class, and P has the form
16754                        template-id, then A can be a derived class of
16755                        the deduced A.  Likewise, if P is a pointer to
16756                        a class of the form template-id, A can be a
16757                        pointer to a derived class pointed to by the
16758                        deduced A.  */
16759                   enum template_base_result r;
16760                   r = get_template_base (tparms, targs, parm, arg,
16761                                          explain_p, &t);
16762
16763                   if (!t)
16764                     return unify_no_common_base (explain_p, r, parm, arg);
16765                 }
16766             }
16767           else if (CLASSTYPE_TEMPLATE_INFO (arg)
16768                    && (CLASSTYPE_TI_TEMPLATE (parm)
16769                        == CLASSTYPE_TI_TEMPLATE (arg)))
16770             /* Perhaps PARM is something like S<U> and ARG is S<int>.
16771                Then, we should unify `int' and `U'.  */
16772             t = arg;
16773           else
16774             /* There's no chance of unification succeeding.  */
16775             return unify_type_mismatch (explain_p, parm, arg);
16776
16777           return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
16778                         CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE, explain_p);
16779         }
16780       else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
16781         return unify_type_mismatch (explain_p, parm, arg);
16782       return unify_success (explain_p);
16783
16784     case METHOD_TYPE:
16785     case FUNCTION_TYPE:
16786       {
16787         unsigned int nargs;
16788         tree *args;
16789         tree a;
16790         unsigned int i;
16791
16792         if (TREE_CODE (arg) != TREE_CODE (parm))
16793           return unify_type_mismatch (explain_p, parm, arg);
16794
16795         /* CV qualifications for methods can never be deduced, they must
16796            match exactly.  We need to check them explicitly here,
16797            because type_unification_real treats them as any other
16798            cv-qualified parameter.  */
16799         if (TREE_CODE (parm) == METHOD_TYPE
16800             && (!check_cv_quals_for_unify
16801                 (UNIFY_ALLOW_NONE,
16802                  class_of_this_parm (arg),
16803                  class_of_this_parm (parm))))
16804           return unify_cv_qual_mismatch (explain_p, parm, arg);
16805
16806         RECUR_AND_CHECK_FAILURE (tparms, targs, TREE_TYPE (parm),
16807                                  TREE_TYPE (arg), UNIFY_ALLOW_NONE, explain_p);
16808
16809         nargs = list_length (TYPE_ARG_TYPES (arg));
16810         args = XALLOCAVEC (tree, nargs);
16811         for (a = TYPE_ARG_TYPES (arg), i = 0;
16812              a != NULL_TREE && a != void_list_node;
16813              a = TREE_CHAIN (a), ++i)
16814           args[i] = TREE_VALUE (a);
16815         nargs = i;
16816
16817         return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
16818                                       args, nargs, 1, DEDUCE_EXACT,
16819                                       LOOKUP_NORMAL, explain_p);
16820       }
16821
16822     case OFFSET_TYPE:
16823       /* Unify a pointer to member with a pointer to member function, which
16824          deduces the type of the member as a function type. */
16825       if (TYPE_PTRMEMFUNC_P (arg))
16826         {
16827           tree method_type;
16828           tree fntype;
16829
16830           /* Check top-level cv qualifiers */
16831           if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
16832             return unify_cv_qual_mismatch (explain_p, parm, arg);
16833
16834           RECUR_AND_CHECK_FAILURE (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
16835                                    TYPE_PTRMEMFUNC_OBJECT_TYPE (arg),
16836                                    UNIFY_ALLOW_NONE, explain_p);
16837
16838           /* Determine the type of the function we are unifying against. */
16839           method_type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (arg));
16840           fntype =
16841             build_function_type (TREE_TYPE (method_type),
16842                                  TREE_CHAIN (TYPE_ARG_TYPES (method_type)));
16843
16844           /* Extract the cv-qualifiers of the member function from the
16845              implicit object parameter and place them on the function
16846              type to be restored later. */
16847           fntype = apply_memfn_quals (fntype, type_memfn_quals (method_type));
16848           return unify (tparms, targs, TREE_TYPE (parm), fntype, strict, explain_p);
16849         }
16850
16851       if (TREE_CODE (arg) != OFFSET_TYPE)
16852         return unify_type_mismatch (explain_p, parm, arg);
16853       RECUR_AND_CHECK_FAILURE (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
16854                                TYPE_OFFSET_BASETYPE (arg),
16855                                UNIFY_ALLOW_NONE, explain_p);
16856       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
16857                     strict, explain_p);
16858
16859     case CONST_DECL:
16860       if (DECL_TEMPLATE_PARM_P (parm))
16861         return unify (tparms, targs, DECL_INITIAL (parm), arg, strict, explain_p);
16862       if (arg != integral_constant_value (parm))
16863         return unify_template_argument_mismatch (explain_p, parm, arg);
16864       return unify_success (explain_p);
16865
16866     case FIELD_DECL:
16867     case TEMPLATE_DECL:
16868       /* Matched cases are handled by the ARG == PARM test above.  */
16869       return unify_template_argument_mismatch (explain_p, parm, arg);
16870
16871     case VAR_DECL:
16872       /* A non-type template parameter that is a variable should be a
16873          an integral constant, in which case, it whould have been
16874          folded into its (constant) value. So we should not be getting
16875          a variable here.  */
16876       gcc_unreachable ();
16877
16878     case TYPE_ARGUMENT_PACK:
16879     case NONTYPE_ARGUMENT_PACK:
16880       return unify (tparms, targs, ARGUMENT_PACK_ARGS (parm),
16881                     ARGUMENT_PACK_ARGS (arg), strict, explain_p);
16882
16883     case TYPEOF_TYPE:
16884     case DECLTYPE_TYPE:
16885     case UNDERLYING_TYPE:
16886       /* Cannot deduce anything from TYPEOF_TYPE, DECLTYPE_TYPE,
16887          or UNDERLYING_TYPE nodes.  */
16888       return unify_success (explain_p);
16889
16890     case ERROR_MARK:
16891       /* Unification fails if we hit an error node.  */
16892       return unify_invalid (explain_p);
16893
16894     default:
16895       /* An unresolved overload is a nondeduced context.  */
16896       if (is_overloaded_fn (parm) || type_unknown_p (parm))
16897         return unify_success (explain_p);
16898       gcc_assert (EXPR_P (parm));
16899
16900       /* We must be looking at an expression.  This can happen with
16901          something like:
16902
16903            template <int I>
16904            void foo(S<I>, S<I + 2>);
16905
16906          This is a "nondeduced context":
16907
16908            [deduct.type]
16909
16910            The nondeduced contexts are:
16911
16912            --A type that is a template-id in which one or more of
16913              the template-arguments is an expression that references
16914              a template-parameter.
16915
16916          In these cases, we assume deduction succeeded, but don't
16917          actually infer any unifications.  */
16918
16919       if (!uses_template_parms (parm)
16920           && !template_args_equal (parm, arg))
16921         return unify_expression_unequal (explain_p, parm, arg);
16922       else
16923         return unify_success (explain_p);
16924     }
16925 }
16926 #undef RECUR_AND_CHECK_FAILURE
16927 \f
16928 /* Note that DECL can be defined in this translation unit, if
16929    required.  */
16930
16931 static void
16932 mark_definable (tree decl)
16933 {
16934   tree clone;
16935   DECL_NOT_REALLY_EXTERN (decl) = 1;
16936   FOR_EACH_CLONE (clone, decl)
16937     DECL_NOT_REALLY_EXTERN (clone) = 1;
16938 }
16939
16940 /* Called if RESULT is explicitly instantiated, or is a member of an
16941    explicitly instantiated class.  */
16942
16943 void
16944 mark_decl_instantiated (tree result, int extern_p)
16945 {
16946   SET_DECL_EXPLICIT_INSTANTIATION (result);
16947
16948   /* If this entity has already been written out, it's too late to
16949      make any modifications.  */
16950   if (TREE_ASM_WRITTEN (result))
16951     return;
16952
16953   if (TREE_CODE (result) != FUNCTION_DECL)
16954     /* The TREE_PUBLIC flag for function declarations will have been
16955        set correctly by tsubst.  */
16956     TREE_PUBLIC (result) = 1;
16957
16958   /* This might have been set by an earlier implicit instantiation.  */
16959   DECL_COMDAT (result) = 0;
16960
16961   if (extern_p)
16962     DECL_NOT_REALLY_EXTERN (result) = 0;
16963   else
16964     {
16965       mark_definable (result);
16966       /* Always make artificials weak.  */
16967       if (DECL_ARTIFICIAL (result) && flag_weak)
16968         comdat_linkage (result);
16969       /* For WIN32 we also want to put explicit instantiations in
16970          linkonce sections.  */
16971       else if (TREE_PUBLIC (result))
16972         maybe_make_one_only (result);
16973     }
16974
16975   /* If EXTERN_P, then this function will not be emitted -- unless
16976      followed by an explicit instantiation, at which point its linkage
16977      will be adjusted.  If !EXTERN_P, then this function will be
16978      emitted here.  In neither circumstance do we want
16979      import_export_decl to adjust the linkage.  */
16980   DECL_INTERFACE_KNOWN (result) = 1;
16981 }
16982
16983 /* Subroutine of more_specialized_fn: check whether TARGS is missing any
16984    important template arguments.  If any are missing, we check whether
16985    they're important by using error_mark_node for substituting into any
16986    args that were used for partial ordering (the ones between ARGS and END)
16987    and seeing if it bubbles up.  */
16988
16989 static bool
16990 check_undeduced_parms (tree targs, tree args, tree end)
16991 {
16992   bool found = false;
16993   int i;
16994   for (i = TREE_VEC_LENGTH (targs) - 1; i >= 0; --i)
16995     if (TREE_VEC_ELT (targs, i) == NULL_TREE)
16996       {
16997         found = true;
16998         TREE_VEC_ELT (targs, i) = error_mark_node;
16999       }
17000   if (found)
17001     {
17002       for (; args != end; args = TREE_CHAIN (args))
17003         {
17004           tree substed = tsubst (TREE_VALUE (args), targs, tf_none, NULL_TREE);
17005           if (substed == error_mark_node)
17006             return true;
17007         }
17008     }
17009   return false;
17010 }
17011
17012 /* Given two function templates PAT1 and PAT2, return:
17013
17014    1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
17015    -1 if PAT2 is more specialized than PAT1.
17016    0 if neither is more specialized.
17017
17018    LEN indicates the number of parameters we should consider
17019    (defaulted parameters should not be considered).
17020
17021    The 1998 std underspecified function template partial ordering, and
17022    DR214 addresses the issue.  We take pairs of arguments, one from
17023    each of the templates, and deduce them against each other.  One of
17024    the templates will be more specialized if all the *other*
17025    template's arguments deduce against its arguments and at least one
17026    of its arguments *does* *not* deduce against the other template's
17027    corresponding argument.  Deduction is done as for class templates.
17028    The arguments used in deduction have reference and top level cv
17029    qualifiers removed.  Iff both arguments were originally reference
17030    types *and* deduction succeeds in both directions, the template
17031    with the more cv-qualified argument wins for that pairing (if
17032    neither is more cv-qualified, they both are equal).  Unlike regular
17033    deduction, after all the arguments have been deduced in this way,
17034    we do *not* verify the deduced template argument values can be
17035    substituted into non-deduced contexts.
17036
17037    The logic can be a bit confusing here, because we look at deduce1 and
17038    targs1 to see if pat2 is at least as specialized, and vice versa; if we
17039    can find template arguments for pat1 to make arg1 look like arg2, that
17040    means that arg2 is at least as specialized as arg1.  */
17041
17042 int
17043 more_specialized_fn (tree pat1, tree pat2, int len)
17044 {
17045   tree decl1 = DECL_TEMPLATE_RESULT (pat1);
17046   tree decl2 = DECL_TEMPLATE_RESULT (pat2);
17047   tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
17048   tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
17049   tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
17050   tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
17051   tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
17052   tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
17053   tree origs1, origs2;
17054   bool lose1 = false;
17055   bool lose2 = false;
17056
17057   /* Remove the this parameter from non-static member functions.  If
17058      one is a non-static member function and the other is not a static
17059      member function, remove the first parameter from that function
17060      also.  This situation occurs for operator functions where we
17061      locate both a member function (with this pointer) and non-member
17062      operator (with explicit first operand).  */
17063   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
17064     {
17065       len--; /* LEN is the number of significant arguments for DECL1 */
17066       args1 = TREE_CHAIN (args1);
17067       if (!DECL_STATIC_FUNCTION_P (decl2))
17068         args2 = TREE_CHAIN (args2);
17069     }
17070   else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
17071     {
17072       args2 = TREE_CHAIN (args2);
17073       if (!DECL_STATIC_FUNCTION_P (decl1))
17074         {
17075           len--;
17076           args1 = TREE_CHAIN (args1);
17077         }
17078     }
17079
17080   /* If only one is a conversion operator, they are unordered.  */
17081   if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
17082     return 0;
17083
17084   /* Consider the return type for a conversion function */
17085   if (DECL_CONV_FN_P (decl1))
17086     {
17087       args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
17088       args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
17089       len++;
17090     }
17091
17092   processing_template_decl++;
17093
17094   origs1 = args1;
17095   origs2 = args2;
17096
17097   while (len--
17098          /* Stop when an ellipsis is seen.  */
17099          && args1 != NULL_TREE && args2 != NULL_TREE)
17100     {
17101       tree arg1 = TREE_VALUE (args1);
17102       tree arg2 = TREE_VALUE (args2);
17103       int deduce1, deduce2;
17104       int quals1 = -1;
17105       int quals2 = -1;
17106
17107       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
17108           && TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
17109         {
17110           /* When both arguments are pack expansions, we need only
17111              unify the patterns themselves.  */
17112           arg1 = PACK_EXPANSION_PATTERN (arg1);
17113           arg2 = PACK_EXPANSION_PATTERN (arg2);
17114
17115           /* This is the last comparison we need to do.  */
17116           len = 0;
17117         }
17118
17119       if (TREE_CODE (arg1) == REFERENCE_TYPE)
17120         {
17121           arg1 = TREE_TYPE (arg1);
17122           quals1 = cp_type_quals (arg1);
17123         }
17124
17125       if (TREE_CODE (arg2) == REFERENCE_TYPE)
17126         {
17127           arg2 = TREE_TYPE (arg2);
17128           quals2 = cp_type_quals (arg2);
17129         }
17130
17131       if ((quals1 < 0) != (quals2 < 0))
17132         {
17133           /* Only of the args is a reference, see if we should apply
17134              array/function pointer decay to it.  This is not part of
17135              DR214, but is, IMHO, consistent with the deduction rules
17136              for the function call itself, and with our earlier
17137              implementation of the underspecified partial ordering
17138              rules.  (nathan).  */
17139           if (quals1 >= 0)
17140             {
17141               switch (TREE_CODE (arg1))
17142                 {
17143                 case ARRAY_TYPE:
17144                   arg1 = TREE_TYPE (arg1);
17145                   /* FALLTHROUGH. */
17146                 case FUNCTION_TYPE:
17147                   arg1 = build_pointer_type (arg1);
17148                   break;
17149
17150                 default:
17151                   break;
17152                 }
17153             }
17154           else
17155             {
17156               switch (TREE_CODE (arg2))
17157                 {
17158                 case ARRAY_TYPE:
17159                   arg2 = TREE_TYPE (arg2);
17160                   /* FALLTHROUGH. */
17161                 case FUNCTION_TYPE:
17162                   arg2 = build_pointer_type (arg2);
17163                   break;
17164
17165                 default:
17166                   break;
17167                 }
17168             }
17169         }
17170
17171       arg1 = TYPE_MAIN_VARIANT (arg1);
17172       arg2 = TYPE_MAIN_VARIANT (arg2);
17173
17174       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION)
17175         {
17176           int i, len2 = list_length (args2);
17177           tree parmvec = make_tree_vec (1);
17178           tree argvec = make_tree_vec (len2);
17179           tree ta = args2;
17180
17181           /* Setup the parameter vector, which contains only ARG1.  */
17182           TREE_VEC_ELT (parmvec, 0) = arg1;
17183
17184           /* Setup the argument vector, which contains the remaining
17185              arguments.  */
17186           for (i = 0; i < len2; i++, ta = TREE_CHAIN (ta))
17187             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
17188
17189           deduce1 = (unify_pack_expansion (tparms1, targs1, parmvec,
17190                                            argvec, DEDUCE_EXACT,
17191                                            /*subr=*/true, /*explain_p=*/false)
17192                      == 0);
17193
17194           /* We cannot deduce in the other direction, because ARG1 is
17195              a pack expansion but ARG2 is not.  */
17196           deduce2 = 0;
17197         }
17198       else if (TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
17199         {
17200           int i, len1 = list_length (args1);
17201           tree parmvec = make_tree_vec (1);
17202           tree argvec = make_tree_vec (len1);
17203           tree ta = args1;
17204
17205           /* Setup the parameter vector, which contains only ARG1.  */
17206           TREE_VEC_ELT (parmvec, 0) = arg2;
17207
17208           /* Setup the argument vector, which contains the remaining
17209              arguments.  */
17210           for (i = 0; i < len1; i++, ta = TREE_CHAIN (ta))
17211             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
17212
17213           deduce2 = (unify_pack_expansion (tparms2, targs2, parmvec,
17214                                            argvec, DEDUCE_EXACT,
17215                                            /*subr=*/true, /*explain_p=*/false)
17216                      == 0);
17217
17218           /* We cannot deduce in the other direction, because ARG2 is
17219              a pack expansion but ARG1 is not.*/
17220           deduce1 = 0;
17221         }
17222
17223       else
17224         {
17225           /* The normal case, where neither argument is a pack
17226              expansion.  */
17227           deduce1 = (unify (tparms1, targs1, arg1, arg2,
17228                             UNIFY_ALLOW_NONE, /*explain_p=*/false)
17229                      == 0);
17230           deduce2 = (unify (tparms2, targs2, arg2, arg1,
17231                             UNIFY_ALLOW_NONE, /*explain_p=*/false)
17232                      == 0);
17233         }
17234
17235       /* If we couldn't deduce arguments for tparms1 to make arg1 match
17236          arg2, then arg2 is not as specialized as arg1.  */
17237       if (!deduce1)
17238         lose2 = true;
17239       if (!deduce2)
17240         lose1 = true;
17241
17242       /* "If, for a given type, deduction succeeds in both directions
17243          (i.e., the types are identical after the transformations above)
17244          and if the type from the argument template is more cv-qualified
17245          than the type from the parameter template (as described above)
17246          that type is considered to be more specialized than the other. If
17247          neither type is more cv-qualified than the other then neither type
17248          is more specialized than the other."  */
17249
17250       if (deduce1 && deduce2
17251           && quals1 != quals2 && quals1 >= 0 && quals2 >= 0)
17252         {
17253           if ((quals1 & quals2) == quals2)
17254             lose2 = true;
17255           if ((quals1 & quals2) == quals1)
17256             lose1 = true;
17257         }
17258
17259       if (lose1 && lose2)
17260         /* We've failed to deduce something in either direction.
17261            These must be unordered.  */
17262         break;
17263
17264       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
17265           || TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
17266         /* We have already processed all of the arguments in our
17267            handing of the pack expansion type.  */
17268         len = 0;
17269
17270       args1 = TREE_CHAIN (args1);
17271       args2 = TREE_CHAIN (args2);
17272     }
17273
17274   /* "In most cases, all template parameters must have values in order for
17275      deduction to succeed, but for partial ordering purposes a template
17276      parameter may remain without a value provided it is not used in the
17277      types being used for partial ordering."
17278
17279      Thus, if we are missing any of the targs1 we need to substitute into
17280      origs1, then pat2 is not as specialized as pat1.  This can happen when
17281      there is a nondeduced context.  */
17282   if (!lose2 && check_undeduced_parms (targs1, origs1, args1))
17283     lose2 = true;
17284   if (!lose1 && check_undeduced_parms (targs2, origs2, args2))
17285     lose1 = true;
17286
17287   processing_template_decl--;
17288
17289   /* All things being equal, if the next argument is a pack expansion
17290      for one function but not for the other, prefer the
17291      non-variadic function.  FIXME this is bogus; see c++/41958.  */
17292   if (lose1 == lose2
17293       && args1 && TREE_VALUE (args1)
17294       && args2 && TREE_VALUE (args2))
17295     {
17296       lose1 = TREE_CODE (TREE_VALUE (args1)) == TYPE_PACK_EXPANSION;
17297       lose2 = TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION;
17298     }
17299
17300   if (lose1 == lose2)
17301     return 0;
17302   else if (!lose1)
17303     return 1;
17304   else
17305     return -1;
17306 }
17307
17308 /* Determine which of two partial specializations is more specialized.
17309
17310    PAT1 is a TREE_LIST whose TREE_TYPE is the _TYPE node corresponding
17311    to the first partial specialization.  The TREE_VALUE is the
17312    innermost set of template parameters for the partial
17313    specialization.  PAT2 is similar, but for the second template.
17314
17315    Return 1 if the first partial specialization is more specialized;
17316    -1 if the second is more specialized; 0 if neither is more
17317    specialized.
17318
17319    See [temp.class.order] for information about determining which of
17320    two templates is more specialized.  */
17321
17322 static int
17323 more_specialized_class (tree pat1, tree pat2)
17324 {
17325   tree targs;
17326   tree tmpl1, tmpl2;
17327   int winner = 0;
17328   bool any_deductions = false;
17329
17330   tmpl1 = TREE_TYPE (pat1);
17331   tmpl2 = TREE_TYPE (pat2);
17332
17333   /* Just like what happens for functions, if we are ordering between
17334      different class template specializations, we may encounter dependent
17335      types in the arguments, and we need our dependency check functions
17336      to behave correctly.  */
17337   ++processing_template_decl;
17338   targs = get_class_bindings (TREE_VALUE (pat1),
17339                               CLASSTYPE_TI_ARGS (tmpl1),
17340                               CLASSTYPE_TI_ARGS (tmpl2));
17341   if (targs)
17342     {
17343       --winner;
17344       any_deductions = true;
17345     }
17346
17347   targs = get_class_bindings (TREE_VALUE (pat2),
17348                               CLASSTYPE_TI_ARGS (tmpl2),
17349                               CLASSTYPE_TI_ARGS (tmpl1));
17350   if (targs)
17351     {
17352       ++winner;
17353       any_deductions = true;
17354     }
17355   --processing_template_decl;
17356
17357   /* In the case of a tie where at least one of the class templates
17358      has a parameter pack at the end, the template with the most
17359      non-packed parameters wins.  */
17360   if (winner == 0
17361       && any_deductions
17362       && (template_args_variadic_p (TREE_PURPOSE (pat1))
17363           || template_args_variadic_p (TREE_PURPOSE (pat2))))
17364     {
17365       tree args1 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat1));
17366       tree args2 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat2));
17367       int len1 = TREE_VEC_LENGTH (args1);
17368       int len2 = TREE_VEC_LENGTH (args2);
17369
17370       /* We don't count the pack expansion at the end.  */
17371       if (template_args_variadic_p (TREE_PURPOSE (pat1)))
17372         --len1;
17373       if (template_args_variadic_p (TREE_PURPOSE (pat2)))
17374         --len2;
17375
17376       if (len1 > len2)
17377         return 1;
17378       else if (len1 < len2)
17379         return -1;
17380     }
17381
17382   return winner;
17383 }
17384
17385 /* Return the template arguments that will produce the function signature
17386    DECL from the function template FN, with the explicit template
17387    arguments EXPLICIT_ARGS.  If CHECK_RETTYPE is true, the return type must
17388    also match.  Return NULL_TREE if no satisfactory arguments could be
17389    found.  */
17390
17391 static tree
17392 get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
17393 {
17394   int ntparms = DECL_NTPARMS (fn);
17395   tree targs = make_tree_vec (ntparms);
17396   tree decl_type;
17397   tree decl_arg_types;
17398   tree *args;
17399   unsigned int nargs, ix;
17400   tree arg;
17401
17402   /* Substitute the explicit template arguments into the type of DECL.
17403      The call to fn_type_unification will handle substitution into the
17404      FN.  */
17405   decl_type = TREE_TYPE (decl);
17406   if (explicit_args && uses_template_parms (decl_type))
17407     {
17408       tree tmpl;
17409       tree converted_args;
17410
17411       if (DECL_TEMPLATE_INFO (decl))
17412         tmpl = DECL_TI_TEMPLATE (decl);
17413       else
17414         /* We can get here for some invalid specializations.  */
17415         return NULL_TREE;
17416
17417       converted_args
17418         = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
17419                                  explicit_args, NULL_TREE,
17420                                  tf_none,
17421                                  /*require_all_args=*/false,
17422                                  /*use_default_args=*/false);
17423       if (converted_args == error_mark_node)
17424         return NULL_TREE;
17425
17426       decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE);
17427       if (decl_type == error_mark_node)
17428         return NULL_TREE;
17429     }
17430
17431   /* Never do unification on the 'this' parameter.  */
17432   decl_arg_types = skip_artificial_parms_for (decl, 
17433                                               TYPE_ARG_TYPES (decl_type));
17434
17435   nargs = list_length (decl_arg_types);
17436   args = XALLOCAVEC (tree, nargs);
17437   for (arg = decl_arg_types, ix = 0;
17438        arg != NULL_TREE && arg != void_list_node;
17439        arg = TREE_CHAIN (arg), ++ix)
17440     args[ix] = TREE_VALUE (arg);
17441
17442   if (fn_type_unification (fn, explicit_args, targs,
17443                            args, ix,
17444                            (check_rettype || DECL_CONV_FN_P (fn)
17445                             ? TREE_TYPE (decl_type) : NULL_TREE),
17446                            DEDUCE_EXACT, LOOKUP_NORMAL, /*explain_p=*/false))
17447     return NULL_TREE;
17448
17449   return targs;
17450 }
17451
17452 /* Return the innermost template arguments that, when applied to a
17453    template specialization whose innermost template parameters are
17454    TPARMS, and whose specialization arguments are SPEC_ARGS, yield the
17455    ARGS.
17456
17457    For example, suppose we have:
17458
17459      template <class T, class U> struct S {};
17460      template <class T> struct S<T*, int> {};
17461
17462    Then, suppose we want to get `S<double*, int>'.  The TPARMS will be
17463    {T}, the SPEC_ARGS will be {T*, int} and the ARGS will be {double*,
17464    int}.  The resulting vector will be {double}, indicating that `T'
17465    is bound to `double'.  */
17466
17467 static tree
17468 get_class_bindings (tree tparms, tree spec_args, tree args)
17469 {
17470   int i, ntparms = TREE_VEC_LENGTH (tparms);
17471   tree deduced_args;
17472   tree innermost_deduced_args;
17473
17474   innermost_deduced_args = make_tree_vec (ntparms);
17475   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
17476     {
17477       deduced_args = copy_node (args);
17478       SET_TMPL_ARGS_LEVEL (deduced_args,
17479                            TMPL_ARGS_DEPTH (deduced_args),
17480                            innermost_deduced_args);
17481     }
17482   else
17483     deduced_args = innermost_deduced_args;
17484
17485   if (unify (tparms, deduced_args,
17486              INNERMOST_TEMPLATE_ARGS (spec_args),
17487              INNERMOST_TEMPLATE_ARGS (args),
17488              UNIFY_ALLOW_NONE, /*explain_p=*/false))
17489     return NULL_TREE;
17490
17491   for (i =  0; i < ntparms; ++i)
17492     if (! TREE_VEC_ELT (innermost_deduced_args, i))
17493       return NULL_TREE;
17494
17495   /* Verify that nondeduced template arguments agree with the type
17496      obtained from argument deduction.
17497
17498      For example:
17499
17500        struct A { typedef int X; };
17501        template <class T, class U> struct C {};
17502        template <class T> struct C<T, typename T::X> {};
17503
17504      Then with the instantiation `C<A, int>', we can deduce that
17505      `T' is `A' but unify () does not check whether `typename T::X'
17506      is `int'.  */
17507   spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
17508   if (spec_args == error_mark_node
17509       /* We only need to check the innermost arguments; the other
17510          arguments will always agree.  */
17511       || !comp_template_args (INNERMOST_TEMPLATE_ARGS (spec_args),
17512                               INNERMOST_TEMPLATE_ARGS (args)))
17513     return NULL_TREE;
17514
17515   /* Now that we have bindings for all of the template arguments,
17516      ensure that the arguments deduced for the template template
17517      parameters have compatible template parameter lists.  See the use
17518      of template_template_parm_bindings_ok_p in fn_type_unification
17519      for more information.  */
17520   if (!template_template_parm_bindings_ok_p (tparms, deduced_args))
17521     return NULL_TREE;
17522
17523   return deduced_args;
17524 }
17525
17526 /* TEMPLATES is a TREE_LIST.  Each TREE_VALUE is a TEMPLATE_DECL.
17527    Return the TREE_LIST node with the most specialized template, if
17528    any.  If there is no most specialized template, the error_mark_node
17529    is returned.
17530
17531    Note that this function does not look at, or modify, the
17532    TREE_PURPOSE or TREE_TYPE of any of the nodes.  Since the node
17533    returned is one of the elements of INSTANTIATIONS, callers may
17534    store information in the TREE_PURPOSE or TREE_TYPE of the nodes,
17535    and retrieve it from the value returned.  */
17536
17537 tree
17538 most_specialized_instantiation (tree templates)
17539 {
17540   tree fn, champ;
17541
17542   ++processing_template_decl;
17543
17544   champ = templates;
17545   for (fn = TREE_CHAIN (templates); fn; fn = TREE_CHAIN (fn))
17546     {
17547       int fate = 0;
17548
17549       if (get_bindings (TREE_VALUE (champ),
17550                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
17551                         NULL_TREE, /*check_ret=*/true))
17552         fate--;
17553
17554       if (get_bindings (TREE_VALUE (fn),
17555                         DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
17556                         NULL_TREE, /*check_ret=*/true))
17557         fate++;
17558
17559       if (fate == -1)
17560         champ = fn;
17561       else if (!fate)
17562         {
17563           /* Equally specialized, move to next function.  If there
17564              is no next function, nothing's most specialized.  */
17565           fn = TREE_CHAIN (fn);
17566           champ = fn;
17567           if (!fn)
17568             break;
17569         }
17570     }
17571
17572   if (champ)
17573     /* Now verify that champ is better than everything earlier in the
17574        instantiation list.  */
17575     for (fn = templates; fn != champ; fn = TREE_CHAIN (fn))
17576       if (get_bindings (TREE_VALUE (champ),
17577                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
17578                         NULL_TREE, /*check_ret=*/true)
17579           || !get_bindings (TREE_VALUE (fn),
17580                             DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
17581                             NULL_TREE, /*check_ret=*/true))
17582         {
17583           champ = NULL_TREE;
17584           break;
17585         }
17586
17587   processing_template_decl--;
17588
17589   if (!champ)
17590     return error_mark_node;
17591
17592   return champ;
17593 }
17594
17595 /* If DECL is a specialization of some template, return the most
17596    general such template.  Otherwise, returns NULL_TREE.
17597
17598    For example, given:
17599
17600      template <class T> struct S { template <class U> void f(U); };
17601
17602    if TMPL is `template <class U> void S<int>::f(U)' this will return
17603    the full template.  This function will not trace past partial
17604    specializations, however.  For example, given in addition:
17605
17606      template <class T> struct S<T*> { template <class U> void f(U); };
17607
17608    if TMPL is `template <class U> void S<int*>::f(U)' this will return
17609    `template <class T> template <class U> S<T*>::f(U)'.  */
17610
17611 tree
17612 most_general_template (tree decl)
17613 {
17614   /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
17615      an immediate specialization.  */
17616   if (TREE_CODE (decl) == FUNCTION_DECL)
17617     {
17618       if (DECL_TEMPLATE_INFO (decl)) {
17619         decl = DECL_TI_TEMPLATE (decl);
17620
17621         /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
17622            template friend.  */
17623         if (TREE_CODE (decl) != TEMPLATE_DECL)
17624           return NULL_TREE;
17625       } else
17626         return NULL_TREE;
17627     }
17628
17629   /* Look for more and more general templates.  */
17630   while (DECL_TEMPLATE_INFO (decl))
17631     {
17632       /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
17633          (See cp-tree.h for details.)  */
17634       if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
17635         break;
17636
17637       if (CLASS_TYPE_P (TREE_TYPE (decl))
17638           && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
17639         break;
17640
17641       /* Stop if we run into an explicitly specialized class template.  */
17642       if (!DECL_NAMESPACE_SCOPE_P (decl)
17643           && DECL_CONTEXT (decl)
17644           && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
17645         break;
17646
17647       decl = DECL_TI_TEMPLATE (decl);
17648     }
17649
17650   return decl;
17651 }
17652
17653 /* Return the most specialized of the class template partial
17654    specializations of TMPL which can produce TYPE, a specialization of
17655    TMPL.  The value returned is actually a TREE_LIST; the TREE_TYPE is
17656    a _TYPE node corresponding to the partial specialization, while the
17657    TREE_PURPOSE is the set of template arguments that must be
17658    substituted into the TREE_TYPE in order to generate TYPE.
17659
17660    If the choice of partial specialization is ambiguous, a diagnostic
17661    is issued, and the error_mark_node is returned.  If there are no
17662    partial specializations of TMPL matching TYPE, then NULL_TREE is
17663    returned.  */
17664
17665 static tree
17666 most_specialized_class (tree type, tree tmpl, tsubst_flags_t complain)
17667 {
17668   tree list = NULL_TREE;
17669   tree t;
17670   tree champ;
17671   int fate;
17672   bool ambiguous_p;
17673   tree args;
17674   tree outer_args = NULL_TREE;
17675
17676   tmpl = most_general_template (tmpl);
17677   args = CLASSTYPE_TI_ARGS (type);
17678
17679   /* For determining which partial specialization to use, only the
17680      innermost args are interesting.  */
17681   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
17682     {
17683       outer_args = strip_innermost_template_args (args, 1);
17684       args = INNERMOST_TEMPLATE_ARGS (args);
17685     }
17686
17687   for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
17688     {
17689       tree partial_spec_args;
17690       tree spec_args;
17691       tree parms = TREE_VALUE (t);
17692
17693       partial_spec_args = CLASSTYPE_TI_ARGS (TREE_TYPE (t));
17694
17695       ++processing_template_decl;
17696
17697       if (outer_args)
17698         {
17699           int i;
17700
17701           /* Discard the outer levels of args, and then substitute in the
17702              template args from the enclosing class.  */
17703           partial_spec_args = INNERMOST_TEMPLATE_ARGS (partial_spec_args);
17704           partial_spec_args = tsubst_template_args
17705             (partial_spec_args, outer_args, tf_none, NULL_TREE);
17706
17707           /* PARMS already refers to just the innermost parms, but the
17708              template parms in partial_spec_args had their levels lowered
17709              by tsubst, so we need to do the same for the parm list.  We
17710              can't just tsubst the TREE_VEC itself, as tsubst wants to
17711              treat a TREE_VEC as an argument vector.  */
17712           parms = copy_node (parms);
17713           for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
17714             TREE_VEC_ELT (parms, i) =
17715               tsubst (TREE_VEC_ELT (parms, i), outer_args, tf_none, NULL_TREE);
17716
17717         }
17718
17719       partial_spec_args =
17720           coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
17721                                  add_to_template_args (outer_args,
17722                                                        partial_spec_args),
17723                                  tmpl, tf_none,
17724                                  /*require_all_args=*/true,
17725                                  /*use_default_args=*/true);
17726
17727       --processing_template_decl;
17728
17729       if (partial_spec_args == error_mark_node)
17730         return error_mark_node;
17731
17732       spec_args = get_class_bindings (parms,
17733                                       partial_spec_args,
17734                                       args);
17735       if (spec_args)
17736         {
17737           if (outer_args)
17738             spec_args = add_to_template_args (outer_args, spec_args);
17739           list = tree_cons (spec_args, TREE_VALUE (t), list);
17740           TREE_TYPE (list) = TREE_TYPE (t);
17741         }
17742     }
17743
17744   if (! list)
17745     return NULL_TREE;
17746
17747   ambiguous_p = false;
17748   t = list;
17749   champ = t;
17750   t = TREE_CHAIN (t);
17751   for (; t; t = TREE_CHAIN (t))
17752     {
17753       fate = more_specialized_class (champ, t);
17754       if (fate == 1)
17755         ;
17756       else
17757         {
17758           if (fate == 0)
17759             {
17760               t = TREE_CHAIN (t);
17761               if (! t)
17762                 {
17763                   ambiguous_p = true;
17764                   break;
17765                 }
17766             }
17767           champ = t;
17768         }
17769     }
17770
17771   if (!ambiguous_p)
17772     for (t = list; t && t != champ; t = TREE_CHAIN (t))
17773       {
17774         fate = more_specialized_class (champ, t);
17775         if (fate != 1)
17776           {
17777             ambiguous_p = true;
17778             break;
17779           }
17780       }
17781
17782   if (ambiguous_p)
17783     {
17784       const char *str;
17785       char *spaces = NULL;
17786       if (!(complain & tf_error))
17787         return error_mark_node;
17788       error ("ambiguous class template instantiation for %q#T", type);
17789       str = ngettext ("candidate is:", "candidates are:", list_length (list));
17790       for (t = list; t; t = TREE_CHAIN (t))
17791         {
17792           error ("%s %+#T", spaces ? spaces : str, TREE_TYPE (t));
17793           spaces = spaces ? spaces : get_spaces (str);
17794         }
17795       free (spaces);
17796       return error_mark_node;
17797     }
17798
17799   return champ;
17800 }
17801
17802 /* Explicitly instantiate DECL.  */
17803
17804 void
17805 do_decl_instantiation (tree decl, tree storage)
17806 {
17807   tree result = NULL_TREE;
17808   int extern_p = 0;
17809
17810   if (!decl || decl == error_mark_node)
17811     /* An error occurred, for which grokdeclarator has already issued
17812        an appropriate message.  */
17813     return;
17814   else if (! DECL_LANG_SPECIFIC (decl))
17815     {
17816       error ("explicit instantiation of non-template %q#D", decl);
17817       return;
17818     }
17819   else if (TREE_CODE (decl) == VAR_DECL)
17820     {
17821       /* There is an asymmetry here in the way VAR_DECLs and
17822          FUNCTION_DECLs are handled by grokdeclarator.  In the case of
17823          the latter, the DECL we get back will be marked as a
17824          template instantiation, and the appropriate
17825          DECL_TEMPLATE_INFO will be set up.  This does not happen for
17826          VAR_DECLs so we do the lookup here.  Probably, grokdeclarator
17827          should handle VAR_DECLs as it currently handles
17828          FUNCTION_DECLs.  */
17829       if (!DECL_CLASS_SCOPE_P (decl))
17830         {
17831           error ("%qD is not a static data member of a class template", decl);
17832           return;
17833         }
17834       result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
17835       if (!result || TREE_CODE (result) != VAR_DECL)
17836         {
17837           error ("no matching template for %qD found", decl);
17838           return;
17839         }
17840       if (!same_type_p (TREE_TYPE (result), TREE_TYPE (decl)))
17841         {
17842           error ("type %qT for explicit instantiation %qD does not match "
17843                  "declared type %qT", TREE_TYPE (result), decl,
17844                  TREE_TYPE (decl));
17845           return;
17846         }
17847     }
17848   else if (TREE_CODE (decl) != FUNCTION_DECL)
17849     {
17850       error ("explicit instantiation of %q#D", decl);
17851       return;
17852     }
17853   else
17854     result = decl;
17855
17856   /* Check for various error cases.  Note that if the explicit
17857      instantiation is valid the RESULT will currently be marked as an
17858      *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
17859      until we get here.  */
17860
17861   if (DECL_TEMPLATE_SPECIALIZATION (result))
17862     {
17863       /* DR 259 [temp.spec].
17864
17865          Both an explicit instantiation and a declaration of an explicit
17866          specialization shall not appear in a program unless the explicit
17867          instantiation follows a declaration of the explicit specialization.
17868
17869          For a given set of template parameters, if an explicit
17870          instantiation of a template appears after a declaration of an
17871          explicit specialization for that template, the explicit
17872          instantiation has no effect.  */
17873       return;
17874     }
17875   else if (DECL_EXPLICIT_INSTANTIATION (result))
17876     {
17877       /* [temp.spec]
17878
17879          No program shall explicitly instantiate any template more
17880          than once.
17881
17882          We check DECL_NOT_REALLY_EXTERN so as not to complain when
17883          the first instantiation was `extern' and the second is not,
17884          and EXTERN_P for the opposite case.  */
17885       if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
17886         permerror (input_location, "duplicate explicit instantiation of %q#D", result);
17887       /* If an "extern" explicit instantiation follows an ordinary
17888          explicit instantiation, the template is instantiated.  */
17889       if (extern_p)
17890         return;
17891     }
17892   else if (!DECL_IMPLICIT_INSTANTIATION (result))
17893     {
17894       error ("no matching template for %qD found", result);
17895       return;
17896     }
17897   else if (!DECL_TEMPLATE_INFO (result))
17898     {
17899       permerror (input_location, "explicit instantiation of non-template %q#D", result);
17900       return;
17901     }
17902
17903   if (storage == NULL_TREE)
17904     ;
17905   else if (storage == ridpointers[(int) RID_EXTERN])
17906     {
17907       if (!in_system_header && (cxx_dialect == cxx98))
17908         pedwarn (input_location, OPT_pedantic, 
17909                  "ISO C++ 1998 forbids the use of %<extern%> on explicit "
17910                  "instantiations");
17911       extern_p = 1;
17912     }
17913   else
17914     error ("storage class %qD applied to template instantiation", storage);
17915
17916   check_explicit_instantiation_namespace (result);
17917   mark_decl_instantiated (result, extern_p);
17918   if (! extern_p)
17919     instantiate_decl (result, /*defer_ok=*/1,
17920                       /*expl_inst_class_mem_p=*/false);
17921 }
17922
17923 static void
17924 mark_class_instantiated (tree t, int extern_p)
17925 {
17926   SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
17927   SET_CLASSTYPE_INTERFACE_KNOWN (t);
17928   CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
17929   TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
17930   if (! extern_p)
17931     {
17932       CLASSTYPE_DEBUG_REQUESTED (t) = 1;
17933       rest_of_type_compilation (t, 1);
17934     }
17935 }
17936
17937 /* Called from do_type_instantiation through binding_table_foreach to
17938    do recursive instantiation for the type bound in ENTRY.  */
17939 static void
17940 bt_instantiate_type_proc (binding_entry entry, void *data)
17941 {
17942   tree storage = *(tree *) data;
17943
17944   if (MAYBE_CLASS_TYPE_P (entry->type)
17945       && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
17946     do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
17947 }
17948
17949 /* Called from do_type_instantiation to instantiate a member
17950    (a member function or a static member variable) of an
17951    explicitly instantiated class template.  */
17952 static void
17953 instantiate_class_member (tree decl, int extern_p)
17954 {
17955   mark_decl_instantiated (decl, extern_p);
17956   if (! extern_p)
17957     instantiate_decl (decl, /*defer_ok=*/1,
17958                       /*expl_inst_class_mem_p=*/true);
17959 }
17960
17961 /* Perform an explicit instantiation of template class T.  STORAGE, if
17962    non-null, is the RID for extern, inline or static.  COMPLAIN is
17963    nonzero if this is called from the parser, zero if called recursively,
17964    since the standard is unclear (as detailed below).  */
17965
17966 void
17967 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
17968 {
17969   int extern_p = 0;
17970   int nomem_p = 0;
17971   int static_p = 0;
17972   int previous_instantiation_extern_p = 0;
17973
17974   if (TREE_CODE (t) == TYPE_DECL)
17975     t = TREE_TYPE (t);
17976
17977   if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
17978     {
17979       tree tmpl =
17980         (TYPE_TEMPLATE_INFO (t)) ? TYPE_TI_TEMPLATE (t) : NULL;
17981       if (tmpl)
17982         error ("explicit instantiation of non-class template %qD", tmpl);
17983       else
17984         error ("explicit instantiation of non-template type %qT", t);
17985       return;
17986     }
17987
17988   complete_type (t);
17989
17990   if (!COMPLETE_TYPE_P (t))
17991     {
17992       if (complain & tf_error)
17993         error ("explicit instantiation of %q#T before definition of template",
17994                t);
17995       return;
17996     }
17997
17998   if (storage != NULL_TREE)
17999     {
18000       if (!in_system_header)
18001         {
18002           if (storage == ridpointers[(int) RID_EXTERN])
18003             {
18004               if (cxx_dialect == cxx98)
18005                 pedwarn (input_location, OPT_pedantic, 
18006                          "ISO C++ 1998 forbids the use of %<extern%> on "
18007                          "explicit instantiations");
18008             }
18009           else
18010             pedwarn (input_location, OPT_pedantic, 
18011                      "ISO C++ forbids the use of %qE"
18012                      " on explicit instantiations", storage);
18013         }
18014
18015       if (storage == ridpointers[(int) RID_INLINE])
18016         nomem_p = 1;
18017       else if (storage == ridpointers[(int) RID_EXTERN])
18018         extern_p = 1;
18019       else if (storage == ridpointers[(int) RID_STATIC])
18020         static_p = 1;
18021       else
18022         {
18023           error ("storage class %qD applied to template instantiation",
18024                  storage);
18025           extern_p = 0;
18026         }
18027     }
18028
18029   if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
18030     {
18031       /* DR 259 [temp.spec].
18032
18033          Both an explicit instantiation and a declaration of an explicit
18034          specialization shall not appear in a program unless the explicit
18035          instantiation follows a declaration of the explicit specialization.
18036
18037          For a given set of template parameters, if an explicit
18038          instantiation of a template appears after a declaration of an
18039          explicit specialization for that template, the explicit
18040          instantiation has no effect.  */
18041       return;
18042     }
18043   else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
18044     {
18045       /* [temp.spec]
18046
18047          No program shall explicitly instantiate any template more
18048          than once.
18049
18050          If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
18051          instantiation was `extern'.  If EXTERN_P then the second is.
18052          These cases are OK.  */
18053       previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
18054
18055       if (!previous_instantiation_extern_p && !extern_p
18056           && (complain & tf_error))
18057         permerror (input_location, "duplicate explicit instantiation of %q#T", t);
18058
18059       /* If we've already instantiated the template, just return now.  */
18060       if (!CLASSTYPE_INTERFACE_ONLY (t))
18061         return;
18062     }
18063
18064   check_explicit_instantiation_namespace (TYPE_NAME (t));
18065   mark_class_instantiated (t, extern_p);
18066
18067   if (nomem_p)
18068     return;
18069
18070   {
18071     tree tmp;
18072
18073     /* In contrast to implicit instantiation, where only the
18074        declarations, and not the definitions, of members are
18075        instantiated, we have here:
18076
18077          [temp.explicit]
18078
18079          The explicit instantiation of a class template specialization
18080          implies the instantiation of all of its members not
18081          previously explicitly specialized in the translation unit
18082          containing the explicit instantiation.
18083
18084        Of course, we can't instantiate member template classes, since
18085        we don't have any arguments for them.  Note that the standard
18086        is unclear on whether the instantiation of the members are
18087        *explicit* instantiations or not.  However, the most natural
18088        interpretation is that it should be an explicit instantiation.  */
18089
18090     if (! static_p)
18091       for (tmp = TYPE_METHODS (t); tmp; tmp = DECL_CHAIN (tmp))
18092         if (TREE_CODE (tmp) == FUNCTION_DECL
18093             && DECL_TEMPLATE_INSTANTIATION (tmp))
18094           instantiate_class_member (tmp, extern_p);
18095
18096     for (tmp = TYPE_FIELDS (t); tmp; tmp = DECL_CHAIN (tmp))
18097       if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
18098         instantiate_class_member (tmp, extern_p);
18099
18100     if (CLASSTYPE_NESTED_UTDS (t))
18101       binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
18102                              bt_instantiate_type_proc, &storage);
18103   }
18104 }
18105
18106 /* Given a function DECL, which is a specialization of TMPL, modify
18107    DECL to be a re-instantiation of TMPL with the same template
18108    arguments.  TMPL should be the template into which tsubst'ing
18109    should occur for DECL, not the most general template.
18110
18111    One reason for doing this is a scenario like this:
18112
18113      template <class T>
18114      void f(const T&, int i);
18115
18116      void g() { f(3, 7); }
18117
18118      template <class T>
18119      void f(const T& t, const int i) { }
18120
18121    Note that when the template is first instantiated, with
18122    instantiate_template, the resulting DECL will have no name for the
18123    first parameter, and the wrong type for the second.  So, when we go
18124    to instantiate the DECL, we regenerate it.  */
18125
18126 static void
18127 regenerate_decl_from_template (tree decl, tree tmpl)
18128 {
18129   /* The arguments used to instantiate DECL, from the most general
18130      template.  */
18131   tree args;
18132   tree code_pattern;
18133
18134   args = DECL_TI_ARGS (decl);
18135   code_pattern = DECL_TEMPLATE_RESULT (tmpl);
18136
18137   /* Make sure that we can see identifiers, and compute access
18138      correctly.  */
18139   push_access_scope (decl);
18140
18141   if (TREE_CODE (decl) == FUNCTION_DECL)
18142     {
18143       tree decl_parm;
18144       tree pattern_parm;
18145       tree specs;
18146       int args_depth;
18147       int parms_depth;
18148
18149       args_depth = TMPL_ARGS_DEPTH (args);
18150       parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
18151       if (args_depth > parms_depth)
18152         args = get_innermost_template_args (args, parms_depth);
18153
18154       specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
18155                                               args, tf_error, NULL_TREE,
18156                                               /*defer_ok*/false);
18157       if (specs && specs != error_mark_node)
18158         TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
18159                                                     specs);
18160
18161       /* Merge parameter declarations.  */
18162       decl_parm = skip_artificial_parms_for (decl,
18163                                              DECL_ARGUMENTS (decl));
18164       pattern_parm
18165         = skip_artificial_parms_for (code_pattern,
18166                                      DECL_ARGUMENTS (code_pattern));
18167       while (decl_parm && !FUNCTION_PARAMETER_PACK_P (pattern_parm))
18168         {
18169           tree parm_type;
18170           tree attributes;
18171           
18172           if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
18173             DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
18174           parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
18175                               NULL_TREE);
18176           parm_type = type_decays_to (parm_type);
18177           if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
18178             TREE_TYPE (decl_parm) = parm_type;
18179           attributes = DECL_ATTRIBUTES (pattern_parm);
18180           if (DECL_ATTRIBUTES (decl_parm) != attributes)
18181             {
18182               DECL_ATTRIBUTES (decl_parm) = attributes;
18183               cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
18184             }
18185           decl_parm = DECL_CHAIN (decl_parm);
18186           pattern_parm = DECL_CHAIN (pattern_parm);
18187         }
18188       /* Merge any parameters that match with the function parameter
18189          pack.  */
18190       if (pattern_parm && FUNCTION_PARAMETER_PACK_P (pattern_parm))
18191         {
18192           int i, len;
18193           tree expanded_types;
18194           /* Expand the TYPE_PACK_EXPANSION that provides the types for
18195              the parameters in this function parameter pack.  */
18196           expanded_types = tsubst_pack_expansion (TREE_TYPE (pattern_parm), 
18197                                                  args, tf_error, NULL_TREE);
18198           len = TREE_VEC_LENGTH (expanded_types);
18199           for (i = 0; i < len; i++)
18200             {
18201               tree parm_type;
18202               tree attributes;
18203           
18204               if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
18205                 /* Rename the parameter to include the index.  */
18206                 DECL_NAME (decl_parm) = 
18207                   make_ith_pack_parameter_name (DECL_NAME (pattern_parm), i);
18208               parm_type = TREE_VEC_ELT (expanded_types, i);
18209               parm_type = type_decays_to (parm_type);
18210               if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
18211                 TREE_TYPE (decl_parm) = parm_type;
18212               attributes = DECL_ATTRIBUTES (pattern_parm);
18213               if (DECL_ATTRIBUTES (decl_parm) != attributes)
18214                 {
18215                   DECL_ATTRIBUTES (decl_parm) = attributes;
18216                   cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
18217                 }
18218               decl_parm = DECL_CHAIN (decl_parm);
18219             }
18220         }
18221       /* Merge additional specifiers from the CODE_PATTERN.  */
18222       if (DECL_DECLARED_INLINE_P (code_pattern)
18223           && !DECL_DECLARED_INLINE_P (decl))
18224         DECL_DECLARED_INLINE_P (decl) = 1;
18225     }
18226   else if (TREE_CODE (decl) == VAR_DECL)
18227     {
18228       DECL_INITIAL (decl) =
18229         tsubst_expr (DECL_INITIAL (code_pattern), args,
18230                      tf_error, DECL_TI_TEMPLATE (decl),
18231                      /*integral_constant_expression_p=*/false);
18232       if (VAR_HAD_UNKNOWN_BOUND (decl))
18233         TREE_TYPE (decl) = tsubst (TREE_TYPE (code_pattern), args,
18234                                    tf_error, DECL_TI_TEMPLATE (decl));
18235     }
18236   else
18237     gcc_unreachable ();
18238
18239   pop_access_scope (decl);
18240 }
18241
18242 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
18243    substituted to get DECL.  */
18244
18245 tree
18246 template_for_substitution (tree decl)
18247 {
18248   tree tmpl = DECL_TI_TEMPLATE (decl);
18249
18250   /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
18251      for the instantiation.  This is not always the most general
18252      template.  Consider, for example:
18253
18254         template <class T>
18255         struct S { template <class U> void f();
18256                    template <> void f<int>(); };
18257
18258      and an instantiation of S<double>::f<int>.  We want TD to be the
18259      specialization S<T>::f<int>, not the more general S<T>::f<U>.  */
18260   while (/* An instantiation cannot have a definition, so we need a
18261             more general template.  */
18262          DECL_TEMPLATE_INSTANTIATION (tmpl)
18263            /* We must also deal with friend templates.  Given:
18264
18265                 template <class T> struct S {
18266                   template <class U> friend void f() {};
18267                 };
18268
18269               S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
18270               so far as the language is concerned, but that's still
18271               where we get the pattern for the instantiation from.  On
18272               other hand, if the definition comes outside the class, say:
18273
18274                 template <class T> struct S {
18275                   template <class U> friend void f();
18276                 };
18277                 template <class U> friend void f() {}
18278
18279               we don't need to look any further.  That's what the check for
18280               DECL_INITIAL is for.  */
18281           || (TREE_CODE (decl) == FUNCTION_DECL
18282               && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
18283               && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
18284     {
18285       /* The present template, TD, should not be a definition.  If it
18286          were a definition, we should be using it!  Note that we
18287          cannot restructure the loop to just keep going until we find
18288          a template with a definition, since that might go too far if
18289          a specialization was declared, but not defined.  */
18290       gcc_assert (TREE_CODE (decl) != VAR_DECL
18291                   || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl)));
18292
18293       /* Fetch the more general template.  */
18294       tmpl = DECL_TI_TEMPLATE (tmpl);
18295     }
18296
18297   return tmpl;
18298 }
18299
18300 /* Returns true if we need to instantiate this template instance even if we
18301    know we aren't going to emit it..  */
18302
18303 bool
18304 always_instantiate_p (tree decl)
18305 {
18306   /* We always instantiate inline functions so that we can inline them.  An
18307      explicit instantiation declaration prohibits implicit instantiation of
18308      non-inline functions.  With high levels of optimization, we would
18309      normally inline non-inline functions -- but we're not allowed to do
18310      that for "extern template" functions.  Therefore, we check
18311      DECL_DECLARED_INLINE_P, rather than possibly_inlined_p.  */
18312   return ((TREE_CODE (decl) == FUNCTION_DECL
18313            && DECL_DECLARED_INLINE_P (decl))
18314           /* And we need to instantiate static data members so that
18315              their initializers are available in integral constant
18316              expressions.  */
18317           || (TREE_CODE (decl) == VAR_DECL
18318               && decl_maybe_constant_var_p (decl)));
18319 }
18320
18321 /* If FN has a noexcept-specifier that hasn't been instantiated yet,
18322    instantiate it now, modifying TREE_TYPE (fn).  */
18323
18324 void
18325 maybe_instantiate_noexcept (tree fn)
18326 {
18327   tree fntype, spec, noex, clone;
18328
18329   if (DECL_CLONED_FUNCTION_P (fn))
18330     fn = DECL_CLONED_FUNCTION (fn);
18331   fntype = TREE_TYPE (fn);
18332   spec = TYPE_RAISES_EXCEPTIONS (fntype);
18333
18334   if (!DEFERRED_NOEXCEPT_SPEC_P (spec))
18335     return;
18336
18337   noex = TREE_PURPOSE (spec);
18338
18339   if (TREE_CODE (noex) == DEFERRED_NOEXCEPT)
18340     {
18341       if (push_tinst_level (fn))
18342         {
18343           push_access_scope (fn);
18344           input_location = DECL_SOURCE_LOCATION (fn);
18345           noex = tsubst_copy_and_build (DEFERRED_NOEXCEPT_PATTERN (noex),
18346                                         DEFERRED_NOEXCEPT_ARGS (noex),
18347                                         tf_warning_or_error, fn,
18348                                         /*function_p=*/false,
18349                                         /*integral_constant_expression_p=*/true);
18350           pop_access_scope (fn);
18351           pop_tinst_level ();
18352           spec = build_noexcept_spec (noex, tf_warning_or_error);
18353           if (spec == error_mark_node)
18354             spec = noexcept_false_spec;
18355         }
18356       else
18357         spec = noexcept_false_spec;
18358     }
18359   else
18360     {
18361       /* This is an implicitly declared function, so NOEX is a list of
18362          other functions to evaluate and merge.  */
18363       tree elt;
18364       spec = noexcept_true_spec;
18365       for (elt = noex; elt; elt = OVL_NEXT (elt))
18366         {
18367           tree fn = OVL_CURRENT (elt);
18368           tree subspec;
18369           maybe_instantiate_noexcept (fn);
18370           subspec = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn));
18371           spec = merge_exception_specifiers (spec, subspec, NULL_TREE);
18372         }
18373     }
18374
18375   TREE_TYPE (fn) = build_exception_variant (fntype, spec);
18376
18377   FOR_EACH_CLONE (clone, fn)
18378     {
18379       if (TREE_TYPE (clone) == fntype)
18380         TREE_TYPE (clone) = TREE_TYPE (fn);
18381       else
18382         TREE_TYPE (clone) = build_exception_variant (TREE_TYPE (clone), spec);
18383     }
18384 }
18385
18386 /* Produce the definition of D, a _DECL generated from a template.  If
18387    DEFER_OK is nonzero, then we don't have to actually do the
18388    instantiation now; we just have to do it sometime.  Normally it is
18389    an error if this is an explicit instantiation but D is undefined.
18390    EXPL_INST_CLASS_MEM_P is true iff D is a member of an
18391    explicitly instantiated class template.  */
18392
18393 tree
18394 instantiate_decl (tree d, int defer_ok,
18395                   bool expl_inst_class_mem_p)
18396 {
18397   tree tmpl = DECL_TI_TEMPLATE (d);
18398   tree gen_args;
18399   tree args;
18400   tree td;
18401   tree code_pattern;
18402   tree spec;
18403   tree gen_tmpl;
18404   bool pattern_defined;
18405   int need_push;
18406   location_t saved_loc = input_location;
18407   bool external_p;
18408
18409   /* This function should only be used to instantiate templates for
18410      functions and static member variables.  */
18411   gcc_assert (TREE_CODE (d) == FUNCTION_DECL
18412               || TREE_CODE (d) == VAR_DECL);
18413
18414   /* Variables are never deferred; if instantiation is required, they
18415      are instantiated right away.  That allows for better code in the
18416      case that an expression refers to the value of the variable --
18417      if the variable has a constant value the referring expression can
18418      take advantage of that fact.  */
18419   if (TREE_CODE (d) == VAR_DECL
18420       || DECL_DECLARED_CONSTEXPR_P (d))
18421     defer_ok = 0;
18422
18423   /* Don't instantiate cloned functions.  Instead, instantiate the
18424      functions they cloned.  */
18425   if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
18426     d = DECL_CLONED_FUNCTION (d);
18427
18428   if (DECL_TEMPLATE_INSTANTIATED (d)
18429       || (TREE_CODE (d) == FUNCTION_DECL
18430           && DECL_DEFAULTED_FN (d) && DECL_INITIAL (d))
18431       || DECL_TEMPLATE_SPECIALIZATION (d))
18432     /* D has already been instantiated or explicitly specialized, so
18433        there's nothing for us to do here.
18434
18435        It might seem reasonable to check whether or not D is an explicit
18436        instantiation, and, if so, stop here.  But when an explicit
18437        instantiation is deferred until the end of the compilation,
18438        DECL_EXPLICIT_INSTANTIATION is set, even though we still need to do
18439        the instantiation.  */
18440     return d;
18441
18442   /* Check to see whether we know that this template will be
18443      instantiated in some other file, as with "extern template"
18444      extension.  */
18445   external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
18446
18447   /* In general, we do not instantiate such templates.  */
18448   if (external_p && !always_instantiate_p (d))
18449     return d;
18450
18451   gen_tmpl = most_general_template (tmpl);
18452   gen_args = DECL_TI_ARGS (d);
18453
18454   if (tmpl != gen_tmpl)
18455     /* We should already have the extra args.  */
18456     gcc_assert (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (gen_tmpl))
18457                 == TMPL_ARGS_DEPTH (gen_args));
18458   /* And what's in the hash table should match D.  */
18459   gcc_assert ((spec = retrieve_specialization (gen_tmpl, gen_args, 0)) == d
18460               || spec == NULL_TREE);
18461
18462   /* This needs to happen before any tsubsting.  */
18463   if (! push_tinst_level (d))
18464     return d;
18465
18466   timevar_push (TV_TEMPLATE_INST);
18467
18468   /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
18469      for the instantiation.  */
18470   td = template_for_substitution (d);
18471   code_pattern = DECL_TEMPLATE_RESULT (td);
18472
18473   /* We should never be trying to instantiate a member of a class
18474      template or partial specialization.  */
18475   gcc_assert (d != code_pattern);
18476
18477   if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
18478       || DECL_TEMPLATE_SPECIALIZATION (td))
18479     /* In the case of a friend template whose definition is provided
18480        outside the class, we may have too many arguments.  Drop the
18481        ones we don't need.  The same is true for specializations.  */
18482     args = get_innermost_template_args
18483       (gen_args, TMPL_PARMS_DEPTH  (DECL_TEMPLATE_PARMS (td)));
18484   else
18485     args = gen_args;
18486
18487   if (TREE_CODE (d) == FUNCTION_DECL)
18488     pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE
18489                        || DECL_DEFAULTED_OUTSIDE_CLASS_P (code_pattern));
18490   else
18491     pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
18492
18493   /* We may be in the middle of deferred access check.  Disable it now.  */
18494   push_deferring_access_checks (dk_no_deferred);
18495
18496   /* Unless an explicit instantiation directive has already determined
18497      the linkage of D, remember that a definition is available for
18498      this entity.  */
18499   if (pattern_defined
18500       && !DECL_INTERFACE_KNOWN (d)
18501       && !DECL_NOT_REALLY_EXTERN (d))
18502     mark_definable (d);
18503
18504   DECL_SOURCE_LOCATION (td) = DECL_SOURCE_LOCATION (code_pattern);
18505   DECL_SOURCE_LOCATION (d) = DECL_SOURCE_LOCATION (code_pattern);
18506   input_location = DECL_SOURCE_LOCATION (d);
18507
18508   /* If D is a member of an explicitly instantiated class template,
18509      and no definition is available, treat it like an implicit
18510      instantiation.  */
18511   if (!pattern_defined && expl_inst_class_mem_p
18512       && DECL_EXPLICIT_INSTANTIATION (d))
18513     {
18514       /* Leave linkage flags alone on instantiations with anonymous
18515          visibility.  */
18516       if (TREE_PUBLIC (d))
18517         {
18518           DECL_NOT_REALLY_EXTERN (d) = 0;
18519           DECL_INTERFACE_KNOWN (d) = 0;
18520         }
18521       SET_DECL_IMPLICIT_INSTANTIATION (d);
18522     }
18523
18524   if (TREE_CODE (d) == FUNCTION_DECL)
18525     maybe_instantiate_noexcept (d);
18526
18527   /* Recheck the substitutions to obtain any warning messages
18528      about ignoring cv qualifiers.  Don't do this for artificial decls,
18529      as it breaks the context-sensitive substitution for lambda op(). */
18530   if (!defer_ok && !DECL_ARTIFICIAL (d))
18531     {
18532       tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
18533       tree type = TREE_TYPE (gen);
18534
18535       /* Make sure that we can see identifiers, and compute access
18536          correctly.  D is already the target FUNCTION_DECL with the
18537          right context.  */
18538       push_access_scope (d);
18539
18540       if (TREE_CODE (gen) == FUNCTION_DECL)
18541         {
18542           tsubst (DECL_ARGUMENTS (gen), gen_args, tf_warning_or_error, d);
18543           tsubst_exception_specification (type, gen_args, tf_warning_or_error,
18544                                           d, /*defer_ok*/true);
18545           /* Don't simply tsubst the function type, as that will give
18546              duplicate warnings about poor parameter qualifications.
18547              The function arguments are the same as the decl_arguments
18548              without the top level cv qualifiers.  */
18549           type = TREE_TYPE (type);
18550         }
18551       tsubst (type, gen_args, tf_warning_or_error, d);
18552
18553       pop_access_scope (d);
18554     }
18555
18556   /* Defer all other templates, unless we have been explicitly
18557      forbidden from doing so.  */
18558   if (/* If there is no definition, we cannot instantiate the
18559          template.  */
18560       ! pattern_defined
18561       /* If it's OK to postpone instantiation, do so.  */
18562       || defer_ok
18563       /* If this is a static data member that will be defined
18564          elsewhere, we don't want to instantiate the entire data
18565          member, but we do want to instantiate the initializer so that
18566          we can substitute that elsewhere.  */
18567       || (external_p && TREE_CODE (d) == VAR_DECL))
18568     {
18569       /* The definition of the static data member is now required so
18570          we must substitute the initializer.  */
18571       if (TREE_CODE (d) == VAR_DECL
18572           && !DECL_INITIAL (d)
18573           && DECL_INITIAL (code_pattern))
18574         {
18575           tree ns;
18576           tree init;
18577           bool const_init = false;
18578
18579           ns = decl_namespace_context (d);
18580           push_nested_namespace (ns);
18581           push_nested_class (DECL_CONTEXT (d));
18582           init = tsubst_expr (DECL_INITIAL (code_pattern),
18583                               args,
18584                               tf_warning_or_error, NULL_TREE,
18585                               /*integral_constant_expression_p=*/false);
18586           /* Make sure the initializer is still constant, in case of
18587              circular dependency (template/instantiate6.C). */
18588           const_init
18589             = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (code_pattern);
18590           cp_finish_decl (d, init, /*init_const_expr_p=*/const_init,
18591                           /*asmspec_tree=*/NULL_TREE,
18592                           LOOKUP_ONLYCONVERTING);
18593           pop_nested_class ();
18594           pop_nested_namespace (ns);
18595         }
18596
18597       /* We restore the source position here because it's used by
18598          add_pending_template.  */
18599       input_location = saved_loc;
18600
18601       if (at_eof && !pattern_defined
18602           && DECL_EXPLICIT_INSTANTIATION (d)
18603           && DECL_NOT_REALLY_EXTERN (d))
18604         /* [temp.explicit]
18605
18606            The definition of a non-exported function template, a
18607            non-exported member function template, or a non-exported
18608            member function or static data member of a class template
18609            shall be present in every translation unit in which it is
18610            explicitly instantiated.  */
18611         permerror (input_location,  "explicit instantiation of %qD "
18612                    "but no definition available", d);
18613
18614       /* If we're in unevaluated context, we just wanted to get the
18615          constant value; this isn't an odr use, so don't queue
18616          a full instantiation.  */
18617       if (cp_unevaluated_operand != 0)
18618         goto out;
18619       /* ??? Historically, we have instantiated inline functions, even
18620          when marked as "extern template".  */
18621       if (!(external_p && TREE_CODE (d) == VAR_DECL))
18622         add_pending_template (d);
18623       goto out;
18624     }
18625   /* Tell the repository that D is available in this translation unit
18626      -- and see if it is supposed to be instantiated here.  */
18627   if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
18628     {
18629       /* In a PCH file, despite the fact that the repository hasn't
18630          requested instantiation in the PCH it is still possible that
18631          an instantiation will be required in a file that includes the
18632          PCH.  */
18633       if (pch_file)
18634         add_pending_template (d);
18635       /* Instantiate inline functions so that the inliner can do its
18636          job, even though we'll not be emitting a copy of this
18637          function.  */
18638       if (!(TREE_CODE (d) == FUNCTION_DECL && possibly_inlined_p (d)))
18639         goto out;
18640     }
18641
18642   need_push = !cfun || !global_bindings_p ();
18643   if (need_push)
18644     push_to_top_level ();
18645
18646   /* Mark D as instantiated so that recursive calls to
18647      instantiate_decl do not try to instantiate it again.  */
18648   DECL_TEMPLATE_INSTANTIATED (d) = 1;
18649
18650   /* Regenerate the declaration in case the template has been modified
18651      by a subsequent redeclaration.  */
18652   regenerate_decl_from_template (d, td);
18653
18654   /* We already set the file and line above.  Reset them now in case
18655      they changed as a result of calling regenerate_decl_from_template.  */
18656   input_location = DECL_SOURCE_LOCATION (d);
18657
18658   if (TREE_CODE (d) == VAR_DECL)
18659     {
18660       tree init;
18661       bool const_init = false;
18662
18663       /* Clear out DECL_RTL; whatever was there before may not be right
18664          since we've reset the type of the declaration.  */
18665       SET_DECL_RTL (d, NULL);
18666       DECL_IN_AGGR_P (d) = 0;
18667
18668       /* The initializer is placed in DECL_INITIAL by
18669          regenerate_decl_from_template so we don't need to
18670          push/pop_access_scope again here.  Pull it out so that
18671          cp_finish_decl can process it.  */
18672       init = DECL_INITIAL (d);
18673       DECL_INITIAL (d) = NULL_TREE;
18674       DECL_INITIALIZED_P (d) = 0;
18675
18676       /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
18677          initializer.  That function will defer actual emission until
18678          we have a chance to determine linkage.  */
18679       DECL_EXTERNAL (d) = 0;
18680
18681       /* Enter the scope of D so that access-checking works correctly.  */
18682       push_nested_class (DECL_CONTEXT (d));
18683       const_init = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (code_pattern);
18684       cp_finish_decl (d, init, const_init, NULL_TREE, 0);
18685       pop_nested_class ();
18686     }
18687   else if (TREE_CODE (d) == FUNCTION_DECL && DECL_DEFAULTED_FN (code_pattern))
18688     synthesize_method (d);
18689   else if (TREE_CODE (d) == FUNCTION_DECL)
18690     {
18691       htab_t saved_local_specializations;
18692       tree subst_decl;
18693       tree tmpl_parm;
18694       tree spec_parm;
18695
18696       /* Save away the current list, in case we are instantiating one
18697          template from within the body of another.  */
18698       saved_local_specializations = local_specializations;
18699
18700       /* Set up the list of local specializations.  */
18701       local_specializations = htab_create (37,
18702                                            hash_local_specialization,
18703                                            eq_local_specializations,
18704                                            NULL);
18705
18706       /* Set up context.  */
18707       start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
18708
18709       /* Create substitution entries for the parameters.  */
18710       subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
18711       tmpl_parm = DECL_ARGUMENTS (subst_decl);
18712       spec_parm = DECL_ARGUMENTS (d);
18713       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
18714         {
18715           register_local_specialization (spec_parm, tmpl_parm);
18716           spec_parm = skip_artificial_parms_for (d, spec_parm);
18717           tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
18718         }
18719       for (; tmpl_parm; tmpl_parm = DECL_CHAIN (tmpl_parm))
18720         {
18721           if (!FUNCTION_PARAMETER_PACK_P (tmpl_parm))
18722             {
18723               register_local_specialization (spec_parm, tmpl_parm);
18724               spec_parm = DECL_CHAIN (spec_parm);
18725             }
18726           else
18727             {
18728               /* Register the (value) argument pack as a specialization of
18729                  TMPL_PARM, then move on.  */
18730               tree argpack = extract_fnparm_pack (tmpl_parm, &spec_parm);
18731               register_local_specialization (argpack, tmpl_parm);
18732             }
18733         }
18734       gcc_assert (!spec_parm);
18735
18736       /* Substitute into the body of the function.  */
18737       tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
18738                    tf_warning_or_error, tmpl,
18739                    /*integral_constant_expression_p=*/false);
18740
18741       /* Set the current input_location to the end of the function
18742          so that finish_function knows where we are.  */
18743       input_location = DECL_STRUCT_FUNCTION (code_pattern)->function_end_locus;
18744
18745       /* We don't need the local specializations any more.  */
18746       htab_delete (local_specializations);
18747       local_specializations = saved_local_specializations;
18748
18749       /* Finish the function.  */
18750       d = finish_function (0);
18751       expand_or_defer_fn (d);
18752     }
18753
18754   /* We're not deferring instantiation any more.  */
18755   TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
18756
18757   if (need_push)
18758     pop_from_top_level ();
18759
18760 out:
18761   input_location = saved_loc;
18762   pop_deferring_access_checks ();
18763   pop_tinst_level ();
18764
18765   timevar_pop (TV_TEMPLATE_INST);
18766
18767   return d;
18768 }
18769
18770 /* Run through the list of templates that we wish we could
18771    instantiate, and instantiate any we can.  RETRIES is the
18772    number of times we retry pending template instantiation.  */
18773
18774 void
18775 instantiate_pending_templates (int retries)
18776 {
18777   int reconsider;
18778   location_t saved_loc = input_location;
18779
18780   /* Instantiating templates may trigger vtable generation.  This in turn
18781      may require further template instantiations.  We place a limit here
18782      to avoid infinite loop.  */
18783   if (pending_templates && retries >= max_tinst_depth)
18784     {
18785       tree decl = pending_templates->tinst->decl;
18786
18787       error ("template instantiation depth exceeds maximum of %d"
18788              " instantiating %q+D, possibly from virtual table generation"
18789              " (use -ftemplate-depth= to increase the maximum)",
18790              max_tinst_depth, decl);
18791       if (TREE_CODE (decl) == FUNCTION_DECL)
18792         /* Pretend that we defined it.  */
18793         DECL_INITIAL (decl) = error_mark_node;
18794       return;
18795     }
18796
18797   do
18798     {
18799       struct pending_template **t = &pending_templates;
18800       struct pending_template *last = NULL;
18801       reconsider = 0;
18802       while (*t)
18803         {
18804           tree instantiation = reopen_tinst_level ((*t)->tinst);
18805           bool complete = false;
18806
18807           if (TYPE_P (instantiation))
18808             {
18809               tree fn;
18810
18811               if (!COMPLETE_TYPE_P (instantiation))
18812                 {
18813                   instantiate_class_template (instantiation);
18814                   if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
18815                     for (fn = TYPE_METHODS (instantiation);
18816                          fn;
18817                          fn = TREE_CHAIN (fn))
18818                       if (! DECL_ARTIFICIAL (fn))
18819                         instantiate_decl (fn,
18820                                           /*defer_ok=*/0,
18821                                           /*expl_inst_class_mem_p=*/false);
18822                   if (COMPLETE_TYPE_P (instantiation))
18823                     reconsider = 1;
18824                 }
18825
18826               complete = COMPLETE_TYPE_P (instantiation);
18827             }
18828           else
18829             {
18830               if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
18831                   && !DECL_TEMPLATE_INSTANTIATED (instantiation))
18832                 {
18833                   instantiation
18834                     = instantiate_decl (instantiation,
18835                                         /*defer_ok=*/0,
18836                                         /*expl_inst_class_mem_p=*/false);
18837                   if (DECL_TEMPLATE_INSTANTIATED (instantiation))
18838                     reconsider = 1;
18839                 }
18840
18841               complete = (DECL_TEMPLATE_SPECIALIZATION (instantiation)
18842                           || DECL_TEMPLATE_INSTANTIATED (instantiation));
18843             }
18844
18845           if (complete)
18846             /* If INSTANTIATION has been instantiated, then we don't
18847                need to consider it again in the future.  */
18848             *t = (*t)->next;
18849           else
18850             {
18851               last = *t;
18852               t = &(*t)->next;
18853             }
18854           tinst_depth = 0;
18855           current_tinst_level = NULL;
18856         }
18857       last_pending_template = last;
18858     }
18859   while (reconsider);
18860
18861   input_location = saved_loc;
18862 }
18863
18864 /* Substitute ARGVEC into T, which is a list of initializers for
18865    either base class or a non-static data member.  The TREE_PURPOSEs
18866    are DECLs, and the TREE_VALUEs are the initializer values.  Used by
18867    instantiate_decl.  */
18868
18869 static tree
18870 tsubst_initializer_list (tree t, tree argvec)
18871 {
18872   tree inits = NULL_TREE;
18873
18874   for (; t; t = TREE_CHAIN (t))
18875     {
18876       tree decl;
18877       tree init;
18878       tree expanded_bases = NULL_TREE;
18879       tree expanded_arguments = NULL_TREE;
18880       int i, len = 1;
18881
18882       if (TREE_CODE (TREE_PURPOSE (t)) == TYPE_PACK_EXPANSION)
18883         {
18884           tree expr;
18885           tree arg;
18886
18887           /* Expand the base class expansion type into separate base
18888              classes.  */
18889           expanded_bases = tsubst_pack_expansion (TREE_PURPOSE (t), argvec,
18890                                                  tf_warning_or_error,
18891                                                  NULL_TREE);
18892           if (expanded_bases == error_mark_node)
18893             continue;
18894           
18895           /* We'll be building separate TREE_LISTs of arguments for
18896              each base.  */
18897           len = TREE_VEC_LENGTH (expanded_bases);
18898           expanded_arguments = make_tree_vec (len);
18899           for (i = 0; i < len; i++)
18900             TREE_VEC_ELT (expanded_arguments, i) = NULL_TREE;
18901
18902           /* Build a dummy EXPR_PACK_EXPANSION that will be used to
18903              expand each argument in the TREE_VALUE of t.  */
18904           expr = make_node (EXPR_PACK_EXPANSION);
18905           PACK_EXPANSION_PARAMETER_PACKS (expr) =
18906             PACK_EXPANSION_PARAMETER_PACKS (TREE_PURPOSE (t));
18907
18908           if (TREE_VALUE (t) == void_type_node)
18909             /* VOID_TYPE_NODE is used to indicate
18910                value-initialization.  */
18911             {
18912               for (i = 0; i < len; i++)
18913                 TREE_VEC_ELT (expanded_arguments, i) = void_type_node;
18914             }
18915           else
18916             {
18917               /* Substitute parameter packs into each argument in the
18918                  TREE_LIST.  */
18919               in_base_initializer = 1;
18920               for (arg = TREE_VALUE (t); arg; arg = TREE_CHAIN (arg))
18921                 {
18922                   tree expanded_exprs;
18923
18924                   /* Expand the argument.  */
18925                   SET_PACK_EXPANSION_PATTERN (expr, TREE_VALUE (arg));
18926                   expanded_exprs 
18927                     = tsubst_pack_expansion (expr, argvec,
18928                                              tf_warning_or_error,
18929                                              NULL_TREE);
18930                   if (expanded_exprs == error_mark_node)
18931                     continue;
18932
18933                   /* Prepend each of the expanded expressions to the
18934                      corresponding TREE_LIST in EXPANDED_ARGUMENTS.  */
18935                   for (i = 0; i < len; i++)
18936                     {
18937                       TREE_VEC_ELT (expanded_arguments, i) = 
18938                         tree_cons (NULL_TREE, 
18939                                    TREE_VEC_ELT (expanded_exprs, i),
18940                                    TREE_VEC_ELT (expanded_arguments, i));
18941                     }
18942                 }
18943               in_base_initializer = 0;
18944
18945               /* Reverse all of the TREE_LISTs in EXPANDED_ARGUMENTS,
18946                  since we built them backwards.  */
18947               for (i = 0; i < len; i++)
18948                 {
18949                   TREE_VEC_ELT (expanded_arguments, i) = 
18950                     nreverse (TREE_VEC_ELT (expanded_arguments, i));
18951                 }
18952             }
18953         }
18954
18955       for (i = 0; i < len; ++i)
18956         {
18957           if (expanded_bases)
18958             {
18959               decl = TREE_VEC_ELT (expanded_bases, i);
18960               decl = expand_member_init (decl);
18961               init = TREE_VEC_ELT (expanded_arguments, i);
18962             }
18963           else
18964             {
18965               decl = tsubst_copy (TREE_PURPOSE (t), argvec, 
18966                                   tf_warning_or_error, NULL_TREE);
18967
18968               decl = expand_member_init (decl);
18969               if (decl && !DECL_P (decl))
18970                 in_base_initializer = 1;
18971
18972               init = TREE_VALUE (t);
18973               if (init != void_type_node)
18974                 init = tsubst_expr (init, argvec,
18975                                     tf_warning_or_error, NULL_TREE,
18976                                     /*integral_constant_expression_p=*/false);
18977               in_base_initializer = 0;
18978             }
18979
18980           if (decl)
18981             {
18982               init = build_tree_list (decl, init);
18983               TREE_CHAIN (init) = inits;
18984               inits = init;
18985             }
18986         }
18987     }
18988   return inits;
18989 }
18990
18991 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL.  */
18992
18993 static void
18994 set_current_access_from_decl (tree decl)
18995 {
18996   if (TREE_PRIVATE (decl))
18997     current_access_specifier = access_private_node;
18998   else if (TREE_PROTECTED (decl))
18999     current_access_specifier = access_protected_node;
19000   else
19001     current_access_specifier = access_public_node;
19002 }
19003
19004 /* Instantiate an enumerated type.  TAG is the template type, NEWTAG
19005    is the instantiation (which should have been created with
19006    start_enum) and ARGS are the template arguments to use.  */
19007
19008 static void
19009 tsubst_enum (tree tag, tree newtag, tree args)
19010 {
19011   tree e;
19012
19013   if (SCOPED_ENUM_P (newtag))
19014     begin_scope (sk_scoped_enum, newtag);
19015
19016   for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
19017     {
19018       tree value;
19019       tree decl;
19020
19021       decl = TREE_VALUE (e);
19022       /* Note that in a template enum, the TREE_VALUE is the
19023          CONST_DECL, not the corresponding INTEGER_CST.  */
19024       value = tsubst_expr (DECL_INITIAL (decl),
19025                            args, tf_warning_or_error, NULL_TREE,
19026                            /*integral_constant_expression_p=*/true);
19027
19028       /* Give this enumeration constant the correct access.  */
19029       set_current_access_from_decl (decl);
19030
19031       /* Actually build the enumerator itself.  */
19032       build_enumerator
19033         (DECL_NAME (decl), value, newtag, DECL_SOURCE_LOCATION (decl));
19034     }
19035
19036   if (SCOPED_ENUM_P (newtag))
19037     finish_scope ();
19038
19039   finish_enum_value_list (newtag);
19040   finish_enum (newtag);
19041
19042   DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
19043     = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
19044 }
19045
19046 /* DECL is a FUNCTION_DECL that is a template specialization.  Return
19047    its type -- but without substituting the innermost set of template
19048    arguments.  So, innermost set of template parameters will appear in
19049    the type.  */
19050
19051 tree
19052 get_mostly_instantiated_function_type (tree decl)
19053 {
19054   tree fn_type;
19055   tree tmpl;
19056   tree targs;
19057   tree tparms;
19058   int parm_depth;
19059
19060   tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
19061   targs = DECL_TI_ARGS (decl);
19062   tparms = DECL_TEMPLATE_PARMS (tmpl);
19063   parm_depth = TMPL_PARMS_DEPTH (tparms);
19064
19065   /* There should be as many levels of arguments as there are levels
19066      of parameters.  */
19067   gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
19068
19069   fn_type = TREE_TYPE (tmpl);
19070
19071   if (parm_depth == 1)
19072     /* No substitution is necessary.  */
19073     ;
19074   else
19075     {
19076       int i;
19077       tree partial_args;
19078
19079       /* Replace the innermost level of the TARGS with NULL_TREEs to
19080          let tsubst know not to substitute for those parameters.  */
19081       partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
19082       for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
19083         SET_TMPL_ARGS_LEVEL (partial_args, i,
19084                              TMPL_ARGS_LEVEL (targs, i));
19085       SET_TMPL_ARGS_LEVEL (partial_args,
19086                            TMPL_ARGS_DEPTH (targs),
19087                            make_tree_vec (DECL_NTPARMS (tmpl)));
19088
19089       /* Make sure that we can see identifiers, and compute access
19090          correctly.  */
19091       push_access_scope (decl);
19092
19093       ++processing_template_decl;
19094       /* Now, do the (partial) substitution to figure out the
19095          appropriate function type.  */
19096       fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
19097       --processing_template_decl;
19098
19099       /* Substitute into the template parameters to obtain the real
19100          innermost set of parameters.  This step is important if the
19101          innermost set of template parameters contains value
19102          parameters whose types depend on outer template parameters.  */
19103       TREE_VEC_LENGTH (partial_args)--;
19104       tparms = tsubst_template_parms (tparms, partial_args, tf_error);
19105
19106       pop_access_scope (decl);
19107     }
19108
19109   return fn_type;
19110 }
19111
19112 /* Return truthvalue if we're processing a template different from
19113    the last one involved in diagnostics.  */
19114 int
19115 problematic_instantiation_changed (void)
19116 {
19117   return current_tinst_level != last_error_tinst_level;
19118 }
19119
19120 /* Remember current template involved in diagnostics.  */
19121 void
19122 record_last_problematic_instantiation (void)
19123 {
19124   last_error_tinst_level = current_tinst_level;
19125 }
19126
19127 struct tinst_level *
19128 current_instantiation (void)
19129 {
19130   return current_tinst_level;
19131 }
19132
19133 /* [temp.param] Check that template non-type parm TYPE is of an allowable
19134    type. Return zero for ok, nonzero for disallowed. Issue error and
19135    warning messages under control of COMPLAIN.  */
19136
19137 static int
19138 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
19139 {
19140   if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
19141     return 0;
19142   else if (POINTER_TYPE_P (type))
19143     return 0;
19144   else if (TYPE_PTR_TO_MEMBER_P (type))
19145     return 0;
19146   else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
19147     return 0;
19148   else if (TREE_CODE (type) == TYPENAME_TYPE)
19149     return 0;
19150   else if (TREE_CODE (type) == DECLTYPE_TYPE)
19151     return 0;
19152   else if (TREE_CODE (type) == NULLPTR_TYPE)
19153     return 0;
19154
19155   if (complain & tf_error)
19156     {
19157       if (type == error_mark_node)
19158         inform (input_location, "invalid template non-type parameter");
19159       else
19160         error ("%q#T is not a valid type for a template non-type parameter",
19161                type);
19162     }
19163   return 1;
19164 }
19165
19166 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
19167    Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
19168
19169 static bool
19170 dependent_type_p_r (tree type)
19171 {
19172   tree scope;
19173
19174   /* [temp.dep.type]
19175
19176      A type is dependent if it is:
19177
19178      -- a template parameter. Template template parameters are types
19179         for us (since TYPE_P holds true for them) so we handle
19180         them here.  */
19181   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
19182       || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
19183     return true;
19184   /* -- a qualified-id with a nested-name-specifier which contains a
19185         class-name that names a dependent type or whose unqualified-id
19186         names a dependent type.  */
19187   if (TREE_CODE (type) == TYPENAME_TYPE)
19188     return true;
19189   /* -- a cv-qualified type where the cv-unqualified type is
19190         dependent.  */
19191   type = TYPE_MAIN_VARIANT (type);
19192   /* -- a compound type constructed from any dependent type.  */
19193   if (TYPE_PTR_TO_MEMBER_P (type))
19194     return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
19195             || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
19196                                            (type)));
19197   else if (TREE_CODE (type) == POINTER_TYPE
19198            || TREE_CODE (type) == REFERENCE_TYPE)
19199     return dependent_type_p (TREE_TYPE (type));
19200   else if (TREE_CODE (type) == FUNCTION_TYPE
19201            || TREE_CODE (type) == METHOD_TYPE)
19202     {
19203       tree arg_type;
19204
19205       if (dependent_type_p (TREE_TYPE (type)))
19206         return true;
19207       for (arg_type = TYPE_ARG_TYPES (type);
19208            arg_type;
19209            arg_type = TREE_CHAIN (arg_type))
19210         if (dependent_type_p (TREE_VALUE (arg_type)))
19211           return true;
19212       return false;
19213     }
19214   /* -- an array type constructed from any dependent type or whose
19215         size is specified by a constant expression that is
19216         value-dependent.
19217
19218         We checked for type- and value-dependence of the bounds in
19219         compute_array_index_type, so TYPE_DEPENDENT_P is already set.  */
19220   if (TREE_CODE (type) == ARRAY_TYPE)
19221     {
19222       if (TYPE_DOMAIN (type)
19223           && dependent_type_p (TYPE_DOMAIN (type)))
19224         return true;
19225       return dependent_type_p (TREE_TYPE (type));
19226     }
19227
19228   /* -- a template-id in which either the template name is a template
19229      parameter ...  */
19230   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
19231     return true;
19232   /* ... or any of the template arguments is a dependent type or
19233         an expression that is type-dependent or value-dependent.  */
19234   else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
19235            && (any_dependent_template_arguments_p
19236                (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
19237     return true;
19238
19239   /* All TYPEOF_TYPEs, DECLTYPE_TYPEs, and UNDERLYING_TYPEs are
19240      dependent; if the argument of the `typeof' expression is not
19241      type-dependent, then it should already been have resolved.  */
19242   if (TREE_CODE (type) == TYPEOF_TYPE
19243       || TREE_CODE (type) == DECLTYPE_TYPE
19244       || TREE_CODE (type) == UNDERLYING_TYPE)
19245     return true;
19246
19247   /* A template argument pack is dependent if any of its packed
19248      arguments are.  */
19249   if (TREE_CODE (type) == TYPE_ARGUMENT_PACK)
19250     {
19251       tree args = ARGUMENT_PACK_ARGS (type);
19252       int i, len = TREE_VEC_LENGTH (args);
19253       for (i = 0; i < len; ++i)
19254         if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
19255           return true;
19256     }
19257
19258   /* All TYPE_PACK_EXPANSIONs are dependent, because parameter packs must
19259      be template parameters.  */
19260   if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
19261     return true;
19262
19263   /* The standard does not specifically mention types that are local
19264      to template functions or local classes, but they should be
19265      considered dependent too.  For example:
19266
19267        template <int I> void f() {
19268          enum E { a = I };
19269          S<sizeof (E)> s;
19270        }
19271
19272      The size of `E' cannot be known until the value of `I' has been
19273      determined.  Therefore, `E' must be considered dependent.  */
19274   scope = TYPE_CONTEXT (type);
19275   if (scope && TYPE_P (scope))
19276     return dependent_type_p (scope);
19277   /* Don't use type_dependent_expression_p here, as it can lead
19278      to infinite recursion trying to determine whether a lambda
19279      nested in a lambda is dependent (c++/47687).  */
19280   else if (scope && TREE_CODE (scope) == FUNCTION_DECL
19281            && DECL_LANG_SPECIFIC (scope)
19282            && DECL_TEMPLATE_INFO (scope)
19283            && (any_dependent_template_arguments_p
19284                (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (scope)))))
19285     return true;
19286
19287   /* Other types are non-dependent.  */
19288   return false;
19289 }
19290
19291 /* Returns TRUE if TYPE is dependent, in the sense of
19292    [temp.dep.type].  Note that a NULL type is considered dependent.  */
19293
19294 bool
19295 dependent_type_p (tree type)
19296 {
19297   /* If there are no template parameters in scope, then there can't be
19298      any dependent types.  */
19299   if (!processing_template_decl)
19300     {
19301       /* If we are not processing a template, then nobody should be
19302          providing us with a dependent type.  */
19303       gcc_assert (type);
19304       gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM || is_auto (type));
19305       return false;
19306     }
19307
19308   /* If the type is NULL, we have not computed a type for the entity
19309      in question; in that case, the type is dependent.  */
19310   if (!type)
19311     return true;
19312
19313   /* Erroneous types can be considered non-dependent.  */
19314   if (type == error_mark_node)
19315     return false;
19316
19317   /* If we have not already computed the appropriate value for TYPE,
19318      do so now.  */
19319   if (!TYPE_DEPENDENT_P_VALID (type))
19320     {
19321       TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
19322       TYPE_DEPENDENT_P_VALID (type) = 1;
19323     }
19324
19325   return TYPE_DEPENDENT_P (type);
19326 }
19327
19328 /* Returns TRUE if SCOPE is a dependent scope, in which we can't do any
19329    lookup.  In other words, a dependent type that is not the current
19330    instantiation.  */
19331
19332 bool
19333 dependent_scope_p (tree scope)
19334 {
19335   return (scope && TYPE_P (scope) && dependent_type_p (scope)
19336           && !currently_open_class (scope));
19337 }
19338
19339 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
19340    [temp.dep.constexpr].  EXPRESSION is already known to be a constant
19341    expression.  */
19342
19343 /* Note that this predicate is not appropriate for general expressions;
19344    only constant expressions (that satisfy potential_constant_expression)
19345    can be tested for value dependence.
19346
19347    We should really also have a predicate for "instantiation-dependent".
19348
19349    fold_non_dependent_expr: fold if constant and not type-dependent and not value-dependent.
19350      (what about instantiation-dependent constant-expressions?)
19351    is_late_template_attribute: defer if instantiation-dependent.
19352    compute_array_index_type: proceed if constant and not t- or v-dependent
19353      if instantiation-dependent, need to remember full expression
19354    uses_template_parms: FIXME - need to audit callers
19355    tsubst_decl [function_decl]: Why is this using value_dependent_expression_p?
19356    dependent_type_p [array_type]: dependent if index type is dependent
19357      (or non-constant?)
19358    static_assert - instantiation-dependent */
19359
19360 bool
19361 value_dependent_expression_p (tree expression)
19362 {
19363   if (!processing_template_decl)
19364     return false;
19365
19366   /* A name declared with a dependent type.  */
19367   if (DECL_P (expression) && type_dependent_expression_p (expression))
19368     return true;
19369
19370   switch (TREE_CODE (expression))
19371     {
19372     case IDENTIFIER_NODE:
19373       /* A name that has not been looked up -- must be dependent.  */
19374       return true;
19375
19376     case TEMPLATE_PARM_INDEX:
19377       /* A non-type template parm.  */
19378       return true;
19379
19380     case CONST_DECL:
19381       /* A non-type template parm.  */
19382       if (DECL_TEMPLATE_PARM_P (expression))
19383         return true;
19384       return value_dependent_expression_p (DECL_INITIAL (expression));
19385
19386     case VAR_DECL:
19387        /* A constant with literal type and is initialized
19388           with an expression that is value-dependent.  */
19389       if (DECL_INITIAL (expression)
19390           && decl_constant_var_p (expression)
19391           && value_dependent_expression_p (DECL_INITIAL (expression)))
19392         return true;
19393       return false;
19394
19395     case DYNAMIC_CAST_EXPR:
19396     case STATIC_CAST_EXPR:
19397     case CONST_CAST_EXPR:
19398     case REINTERPRET_CAST_EXPR:
19399     case CAST_EXPR:
19400       /* These expressions are value-dependent if the type to which
19401          the cast occurs is dependent or the expression being casted
19402          is value-dependent.  */
19403       {
19404         tree type = TREE_TYPE (expression);
19405
19406         if (dependent_type_p (type))
19407           return true;
19408
19409         /* A functional cast has a list of operands.  */
19410         expression = TREE_OPERAND (expression, 0);
19411         if (!expression)
19412           {
19413             /* If there are no operands, it must be an expression such
19414                as "int()". This should not happen for aggregate types
19415                because it would form non-constant expressions.  */
19416             gcc_assert (cxx_dialect >= cxx0x
19417                         || INTEGRAL_OR_ENUMERATION_TYPE_P (type));
19418
19419             return false;
19420           }
19421
19422         if (TREE_CODE (expression) == TREE_LIST)
19423           return any_value_dependent_elements_p (expression);
19424
19425         return value_dependent_expression_p (expression);
19426       }
19427
19428     case SIZEOF_EXPR:
19429     case ALIGNOF_EXPR:
19430     case TYPEID_EXPR:
19431       /* A `sizeof' expression is value-dependent if the operand is
19432          type-dependent or is a pack expansion.  */
19433       expression = TREE_OPERAND (expression, 0);
19434       if (PACK_EXPANSION_P (expression))
19435         return true;
19436       else if (TYPE_P (expression))
19437         return dependent_type_p (expression);
19438       return type_dependent_expression_p (expression);
19439
19440     case AT_ENCODE_EXPR:
19441       /* An 'encode' expression is value-dependent if the operand is
19442          type-dependent.  */
19443       expression = TREE_OPERAND (expression, 0);
19444       return dependent_type_p (expression);
19445
19446     case NOEXCEPT_EXPR:
19447       expression = TREE_OPERAND (expression, 0);
19448       return type_dependent_expression_p (expression);
19449
19450     case SCOPE_REF:
19451       {
19452         tree name = TREE_OPERAND (expression, 1);
19453         return value_dependent_expression_p (name);
19454       }
19455
19456     case COMPONENT_REF:
19457       return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
19458               || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
19459
19460     case NONTYPE_ARGUMENT_PACK:
19461       /* A NONTYPE_ARGUMENT_PACK is value-dependent if any packed argument
19462          is value-dependent.  */
19463       {
19464         tree values = ARGUMENT_PACK_ARGS (expression);
19465         int i, len = TREE_VEC_LENGTH (values);
19466         
19467         for (i = 0; i < len; ++i)
19468           if (value_dependent_expression_p (TREE_VEC_ELT (values, i)))
19469             return true;
19470         
19471         return false;
19472       }
19473
19474     case TRAIT_EXPR:
19475       {
19476         tree type2 = TRAIT_EXPR_TYPE2 (expression);
19477         return (dependent_type_p (TRAIT_EXPR_TYPE1 (expression))
19478                 || (type2 ? dependent_type_p (type2) : false));
19479       }
19480
19481     case MODOP_EXPR:
19482       return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
19483               || (value_dependent_expression_p (TREE_OPERAND (expression, 2))));
19484
19485     case ARRAY_REF:
19486       return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
19487               || (value_dependent_expression_p (TREE_OPERAND (expression, 1))));
19488
19489     case ADDR_EXPR:
19490       {
19491         tree op = TREE_OPERAND (expression, 0);
19492         return (value_dependent_expression_p (op)
19493                 || has_value_dependent_address (op));
19494       }
19495
19496     case CALL_EXPR:
19497       {
19498         tree fn = get_callee_fndecl (expression);
19499         int i, nargs;
19500         if (!fn && value_dependent_expression_p (CALL_EXPR_FN (expression)))
19501           return true;
19502         nargs = call_expr_nargs (expression);
19503         for (i = 0; i < nargs; ++i)
19504           {
19505             tree op = CALL_EXPR_ARG (expression, i);
19506             /* In a call to a constexpr member function, look through the
19507                implicit ADDR_EXPR on the object argument so that it doesn't
19508                cause the call to be considered value-dependent.  We also
19509                look through it in potential_constant_expression.  */
19510             if (i == 0 && fn && DECL_DECLARED_CONSTEXPR_P (fn)
19511                 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
19512                 && TREE_CODE (op) == ADDR_EXPR)
19513               op = TREE_OPERAND (op, 0);
19514             if (value_dependent_expression_p (op))
19515               return true;
19516           }
19517         return false;
19518       }
19519
19520     case TEMPLATE_ID_EXPR:
19521       /* If a TEMPLATE_ID_EXPR involves a dependent name, it will be
19522          type-dependent.  */
19523       return type_dependent_expression_p (expression);
19524
19525     case CONSTRUCTOR:
19526       {
19527         unsigned ix;
19528         tree val;
19529         FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), ix, val)
19530           if (value_dependent_expression_p (val))
19531             return true;
19532         return false;
19533       }
19534
19535     case STMT_EXPR:
19536       /* Treat a GNU statement expression as dependent to avoid crashing
19537          under fold_non_dependent_expr; it can't be constant.  */
19538       return true;
19539
19540     default:
19541       /* A constant expression is value-dependent if any subexpression is
19542          value-dependent.  */
19543       switch (TREE_CODE_CLASS (TREE_CODE (expression)))
19544         {
19545         case tcc_reference:
19546         case tcc_unary:
19547         case tcc_comparison:
19548         case tcc_binary:
19549         case tcc_expression:
19550         case tcc_vl_exp:
19551           {
19552             int i, len = cp_tree_operand_length (expression);
19553
19554             for (i = 0; i < len; i++)
19555               {
19556                 tree t = TREE_OPERAND (expression, i);
19557
19558                 /* In some cases, some of the operands may be missing.l
19559                    (For example, in the case of PREDECREMENT_EXPR, the
19560                    amount to increment by may be missing.)  That doesn't
19561                    make the expression dependent.  */
19562                 if (t && value_dependent_expression_p (t))
19563                   return true;
19564               }
19565           }
19566           break;
19567         default:
19568           break;
19569         }
19570       break;
19571     }
19572
19573   /* The expression is not value-dependent.  */
19574   return false;
19575 }
19576
19577 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
19578    [temp.dep.expr].  Note that an expression with no type is
19579    considered dependent.  Other parts of the compiler arrange for an
19580    expression with type-dependent subexpressions to have no type, so
19581    this function doesn't have to be fully recursive.  */
19582
19583 bool
19584 type_dependent_expression_p (tree expression)
19585 {
19586   if (!processing_template_decl)
19587     return false;
19588
19589   if (expression == error_mark_node)
19590     return false;
19591
19592   /* An unresolved name is always dependent.  */
19593   if (TREE_CODE (expression) == IDENTIFIER_NODE
19594       || TREE_CODE (expression) == USING_DECL)
19595     return true;
19596
19597   /* Some expression forms are never type-dependent.  */
19598   if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
19599       || TREE_CODE (expression) == SIZEOF_EXPR
19600       || TREE_CODE (expression) == ALIGNOF_EXPR
19601       || TREE_CODE (expression) == AT_ENCODE_EXPR
19602       || TREE_CODE (expression) == NOEXCEPT_EXPR
19603       || TREE_CODE (expression) == TRAIT_EXPR
19604       || TREE_CODE (expression) == TYPEID_EXPR
19605       || TREE_CODE (expression) == DELETE_EXPR
19606       || TREE_CODE (expression) == VEC_DELETE_EXPR
19607       || TREE_CODE (expression) == THROW_EXPR)
19608     return false;
19609
19610   /* The types of these expressions depends only on the type to which
19611      the cast occurs.  */
19612   if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
19613       || TREE_CODE (expression) == STATIC_CAST_EXPR
19614       || TREE_CODE (expression) == CONST_CAST_EXPR
19615       || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
19616       || TREE_CODE (expression) == IMPLICIT_CONV_EXPR
19617       || TREE_CODE (expression) == CAST_EXPR)
19618     return dependent_type_p (TREE_TYPE (expression));
19619
19620   /* The types of these expressions depends only on the type created
19621      by the expression.  */
19622   if (TREE_CODE (expression) == NEW_EXPR
19623       || TREE_CODE (expression) == VEC_NEW_EXPR)
19624     {
19625       /* For NEW_EXPR tree nodes created inside a template, either
19626          the object type itself or a TREE_LIST may appear as the
19627          operand 1.  */
19628       tree type = TREE_OPERAND (expression, 1);
19629       if (TREE_CODE (type) == TREE_LIST)
19630         /* This is an array type.  We need to check array dimensions
19631            as well.  */
19632         return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
19633                || value_dependent_expression_p
19634                     (TREE_OPERAND (TREE_VALUE (type), 1));
19635       else
19636         return dependent_type_p (type);
19637     }
19638
19639   if (TREE_CODE (expression) == SCOPE_REF)
19640     {
19641       tree scope = TREE_OPERAND (expression, 0);
19642       tree name = TREE_OPERAND (expression, 1);
19643
19644       /* 14.6.2.2 [temp.dep.expr]: An id-expression is type-dependent if it
19645          contains an identifier associated by name lookup with one or more
19646          declarations declared with a dependent type, or...a
19647          nested-name-specifier or qualified-id that names a member of an
19648          unknown specialization.  */
19649       return (type_dependent_expression_p (name)
19650               || dependent_scope_p (scope));
19651     }
19652
19653   if (TREE_CODE (expression) == FUNCTION_DECL
19654       && DECL_LANG_SPECIFIC (expression)
19655       && DECL_TEMPLATE_INFO (expression)
19656       && (any_dependent_template_arguments_p
19657           (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
19658     return true;
19659
19660   if (TREE_CODE (expression) == TEMPLATE_DECL
19661       && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
19662     return false;
19663
19664   if (TREE_CODE (expression) == STMT_EXPR)
19665     expression = stmt_expr_value_expr (expression);
19666
19667   if (BRACE_ENCLOSED_INITIALIZER_P (expression))
19668     {
19669       tree elt;
19670       unsigned i;
19671
19672       FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), i, elt)
19673         {
19674           if (type_dependent_expression_p (elt))
19675             return true;
19676         }
19677       return false;
19678     }
19679
19680   /* A static data member of the current instantiation with incomplete
19681      array type is type-dependent, as the definition and specializations
19682      can have different bounds.  */
19683   if (TREE_CODE (expression) == VAR_DECL
19684       && DECL_CLASS_SCOPE_P (expression)
19685       && dependent_type_p (DECL_CONTEXT (expression))
19686       && VAR_HAD_UNKNOWN_BOUND (expression))
19687     return true;
19688
19689   if (TREE_TYPE (expression) == unknown_type_node)
19690     {
19691       if (TREE_CODE (expression) == ADDR_EXPR)
19692         return type_dependent_expression_p (TREE_OPERAND (expression, 0));
19693       if (TREE_CODE (expression) == COMPONENT_REF
19694           || TREE_CODE (expression) == OFFSET_REF)
19695         {
19696           if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
19697             return true;
19698           expression = TREE_OPERAND (expression, 1);
19699           if (TREE_CODE (expression) == IDENTIFIER_NODE)
19700             return false;
19701         }
19702       /* SCOPE_REF with non-null TREE_TYPE is always non-dependent.  */
19703       if (TREE_CODE (expression) == SCOPE_REF)
19704         return false;
19705
19706       if (BASELINK_P (expression))
19707         expression = BASELINK_FUNCTIONS (expression);
19708
19709       if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
19710         {
19711           if (any_dependent_template_arguments_p
19712               (TREE_OPERAND (expression, 1)))
19713             return true;
19714           expression = TREE_OPERAND (expression, 0);
19715         }
19716       gcc_assert (TREE_CODE (expression) == OVERLOAD
19717                   || TREE_CODE (expression) == FUNCTION_DECL);
19718
19719       while (expression)
19720         {
19721           if (type_dependent_expression_p (OVL_CURRENT (expression)))
19722             return true;
19723           expression = OVL_NEXT (expression);
19724         }
19725       return false;
19726     }
19727
19728   gcc_assert (TREE_CODE (expression) != TYPE_DECL);
19729
19730   return (dependent_type_p (TREE_TYPE (expression)));
19731 }
19732
19733 /* Like type_dependent_expression_p, but it also works while not processing
19734    a template definition, i.e. during substitution or mangling.  */
19735
19736 bool
19737 type_dependent_expression_p_push (tree expr)
19738 {
19739   bool b;
19740   ++processing_template_decl;
19741   b = type_dependent_expression_p (expr);
19742   --processing_template_decl;
19743   return b;
19744 }
19745
19746 /* Returns TRUE if ARGS contains a type-dependent expression.  */
19747
19748 bool
19749 any_type_dependent_arguments_p (const VEC(tree,gc) *args)
19750 {
19751   unsigned int i;
19752   tree arg;
19753
19754   FOR_EACH_VEC_ELT (tree, args, i, arg)
19755     {
19756       if (type_dependent_expression_p (arg))
19757         return true;
19758     }
19759   return false;
19760 }
19761
19762 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
19763    expressions) contains any type-dependent expressions.  */
19764
19765 bool
19766 any_type_dependent_elements_p (const_tree list)
19767 {
19768   for (; list; list = TREE_CHAIN (list))
19769     if (value_dependent_expression_p (TREE_VALUE (list)))
19770       return true;
19771
19772   return false;
19773 }
19774
19775 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
19776    expressions) contains any value-dependent expressions.  */
19777
19778 bool
19779 any_value_dependent_elements_p (const_tree list)
19780 {
19781   for (; list; list = TREE_CHAIN (list))
19782     if (value_dependent_expression_p (TREE_VALUE (list)))
19783       return true;
19784
19785   return false;
19786 }
19787
19788 /* Returns TRUE if the ARG (a template argument) is dependent.  */
19789
19790 bool
19791 dependent_template_arg_p (tree arg)
19792 {
19793   if (!processing_template_decl)
19794     return false;
19795
19796   /* Assume a template argument that was wrongly written by the user
19797      is dependent. This is consistent with what
19798      any_dependent_template_arguments_p [that calls this function]
19799      does.  */
19800   if (!arg || arg == error_mark_node)
19801     return true;
19802
19803   if (TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
19804     arg = ARGUMENT_PACK_SELECT_ARG (arg);
19805
19806   if (TREE_CODE (arg) == TEMPLATE_DECL
19807       || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
19808     return dependent_template_p (arg);
19809   else if (ARGUMENT_PACK_P (arg))
19810     {
19811       tree args = ARGUMENT_PACK_ARGS (arg);
19812       int i, len = TREE_VEC_LENGTH (args);
19813       for (i = 0; i < len; ++i)
19814         {
19815           if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
19816             return true;
19817         }
19818
19819       return false;
19820     }
19821   else if (TYPE_P (arg))
19822     return dependent_type_p (arg);
19823   else
19824     return (type_dependent_expression_p (arg)
19825             || value_dependent_expression_p (arg));
19826 }
19827
19828 /* Returns true if ARGS (a collection of template arguments) contains
19829    any types that require structural equality testing.  */
19830
19831 bool
19832 any_template_arguments_need_structural_equality_p (tree args)
19833 {
19834   int i;
19835   int j;
19836
19837   if (!args)
19838     return false;
19839   if (args == error_mark_node)
19840     return true;
19841
19842   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
19843     {
19844       tree level = TMPL_ARGS_LEVEL (args, i + 1);
19845       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
19846         {
19847           tree arg = TREE_VEC_ELT (level, j);
19848           tree packed_args = NULL_TREE;
19849           int k, len = 1;
19850
19851           if (ARGUMENT_PACK_P (arg))
19852             {
19853               /* Look inside the argument pack.  */
19854               packed_args = ARGUMENT_PACK_ARGS (arg);
19855               len = TREE_VEC_LENGTH (packed_args);
19856             }
19857
19858           for (k = 0; k < len; ++k)
19859             {
19860               if (packed_args)
19861                 arg = TREE_VEC_ELT (packed_args, k);
19862
19863               if (error_operand_p (arg))
19864                 return true;
19865               else if (TREE_CODE (arg) == TEMPLATE_DECL
19866                        || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
19867                 continue;
19868               else if (TYPE_P (arg) && TYPE_STRUCTURAL_EQUALITY_P (arg))
19869                 return true;
19870               else if (!TYPE_P (arg) && TREE_TYPE (arg)
19871                        && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (arg)))
19872                 return true;
19873             }
19874         }
19875     }
19876
19877   return false;
19878 }
19879
19880 /* Returns true if ARGS (a collection of template arguments) contains
19881    any dependent arguments.  */
19882
19883 bool
19884 any_dependent_template_arguments_p (const_tree args)
19885 {
19886   int i;
19887   int j;
19888
19889   if (!args)
19890     return false;
19891   if (args == error_mark_node)
19892     return true;
19893
19894   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
19895     {
19896       const_tree level = TMPL_ARGS_LEVEL (args, i + 1);
19897       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
19898         if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
19899           return true;
19900     }
19901
19902   return false;
19903 }
19904
19905 /* Returns TRUE if the template TMPL is dependent.  */
19906
19907 bool
19908 dependent_template_p (tree tmpl)
19909 {
19910   if (TREE_CODE (tmpl) == OVERLOAD)
19911     {
19912       while (tmpl)
19913         {
19914           if (dependent_template_p (OVL_CURRENT (tmpl)))
19915             return true;
19916           tmpl = OVL_NEXT (tmpl);
19917         }
19918       return false;
19919     }
19920
19921   /* Template template parameters are dependent.  */
19922   if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
19923       || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
19924     return true;
19925   /* So are names that have not been looked up.  */
19926   if (TREE_CODE (tmpl) == SCOPE_REF
19927       || TREE_CODE (tmpl) == IDENTIFIER_NODE)
19928     return true;
19929   /* So are member templates of dependent classes.  */
19930   if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
19931     return dependent_type_p (DECL_CONTEXT (tmpl));
19932   return false;
19933 }
19934
19935 /* Returns TRUE if the specialization TMPL<ARGS> is dependent.  */
19936
19937 bool
19938 dependent_template_id_p (tree tmpl, tree args)
19939 {
19940   return (dependent_template_p (tmpl)
19941           || any_dependent_template_arguments_p (args));
19942 }
19943
19944 /* Returns TRUE if OMP_FOR with DECLV, INITV, CONDV and INCRV vectors
19945    is dependent.  */
19946
19947 bool
19948 dependent_omp_for_p (tree declv, tree initv, tree condv, tree incrv)
19949 {
19950   int i;
19951
19952   if (!processing_template_decl)
19953     return false;
19954
19955   for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
19956     {
19957       tree decl = TREE_VEC_ELT (declv, i);
19958       tree init = TREE_VEC_ELT (initv, i);
19959       tree cond = TREE_VEC_ELT (condv, i);
19960       tree incr = TREE_VEC_ELT (incrv, i);
19961
19962       if (type_dependent_expression_p (decl))
19963         return true;
19964
19965       if (init && type_dependent_expression_p (init))
19966         return true;
19967
19968       if (type_dependent_expression_p (cond))
19969         return true;
19970
19971       if (COMPARISON_CLASS_P (cond)
19972           && (type_dependent_expression_p (TREE_OPERAND (cond, 0))
19973               || type_dependent_expression_p (TREE_OPERAND (cond, 1))))
19974         return true;
19975
19976       if (TREE_CODE (incr) == MODOP_EXPR)
19977         {
19978           if (type_dependent_expression_p (TREE_OPERAND (incr, 0))
19979               || type_dependent_expression_p (TREE_OPERAND (incr, 2)))
19980             return true;
19981         }
19982       else if (type_dependent_expression_p (incr))
19983         return true;
19984       else if (TREE_CODE (incr) == MODIFY_EXPR)
19985         {
19986           if (type_dependent_expression_p (TREE_OPERAND (incr, 0)))
19987             return true;
19988           else if (BINARY_CLASS_P (TREE_OPERAND (incr, 1)))
19989             {
19990               tree t = TREE_OPERAND (incr, 1);
19991               if (type_dependent_expression_p (TREE_OPERAND (t, 0))
19992                   || type_dependent_expression_p (TREE_OPERAND (t, 1)))
19993                 return true;
19994             }
19995         }
19996     }
19997
19998   return false;
19999 }
20000
20001 /* TYPE is a TYPENAME_TYPE.  Returns the ordinary TYPE to which the
20002    TYPENAME_TYPE corresponds.  Returns the original TYPENAME_TYPE if
20003    no such TYPE can be found.  Note that this function peers inside
20004    uninstantiated templates and therefore should be used only in
20005    extremely limited situations.  ONLY_CURRENT_P restricts this
20006    peering to the currently open classes hierarchy (which is required
20007    when comparing types).  */
20008
20009 tree
20010 resolve_typename_type (tree type, bool only_current_p)
20011 {
20012   tree scope;
20013   tree name;
20014   tree decl;
20015   int quals;
20016   tree pushed_scope;
20017   tree result;
20018
20019   gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
20020
20021   scope = TYPE_CONTEXT (type);
20022   /* Usually the non-qualified identifier of a TYPENAME_TYPE is
20023      TYPE_IDENTIFIER (type). But when 'type' is a typedef variant of
20024      a TYPENAME_TYPE node, then TYPE_NAME (type) is set to the TYPE_DECL representing
20025      the typedef. In that case TYPE_IDENTIFIER (type) is not the non-qualified
20026      identifier  of the TYPENAME_TYPE anymore.
20027      So by getting the TYPE_IDENTIFIER of the _main declaration_ of the
20028      TYPENAME_TYPE instead, we avoid messing up with a possible
20029      typedef variant case.  */
20030   name = TYPE_IDENTIFIER (TYPE_MAIN_VARIANT (type));
20031
20032   /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
20033      it first before we can figure out what NAME refers to.  */
20034   if (TREE_CODE (scope) == TYPENAME_TYPE)
20035     scope = resolve_typename_type (scope, only_current_p);
20036   /* If we don't know what SCOPE refers to, then we cannot resolve the
20037      TYPENAME_TYPE.  */
20038   if (TREE_CODE (scope) == TYPENAME_TYPE)
20039     return type;
20040   /* If the SCOPE is a template type parameter, we have no way of
20041      resolving the name.  */
20042   if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
20043     return type;
20044   /* If the SCOPE is not the current instantiation, there's no reason
20045      to look inside it.  */
20046   if (only_current_p && !currently_open_class (scope))
20047     return type;
20048   /* If this is a typedef, we don't want to look inside (c++/11987).  */
20049   if (typedef_variant_p (type))
20050     return type;
20051   /* If SCOPE isn't the template itself, it will not have a valid
20052      TYPE_FIELDS list.  */
20053   if (same_type_p (scope, CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope)))
20054     /* scope is either the template itself or a compatible instantiation
20055        like X<T>, so look up the name in the original template.  */
20056     scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
20057   else
20058     /* scope is a partial instantiation, so we can't do the lookup or we
20059        will lose the template arguments.  */
20060     return type;
20061   /* Enter the SCOPE so that name lookup will be resolved as if we
20062      were in the class definition.  In particular, SCOPE will no
20063      longer be considered a dependent type.  */
20064   pushed_scope = push_scope (scope);
20065   /* Look up the declaration.  */
20066   decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true,
20067                         tf_warning_or_error);
20068
20069   result = NULL_TREE;
20070   
20071   /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
20072      find a TEMPLATE_DECL.  Otherwise, we want to find a TYPE_DECL.  */
20073   if (!decl)
20074     /*nop*/;
20075   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
20076            && TREE_CODE (decl) == TYPE_DECL)
20077     {
20078       result = TREE_TYPE (decl);
20079       if (result == error_mark_node)
20080         result = NULL_TREE;
20081     }
20082   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
20083            && DECL_CLASS_TEMPLATE_P (decl))
20084     {
20085       tree tmpl;
20086       tree args;
20087       /* Obtain the template and the arguments.  */
20088       tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
20089       args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
20090       /* Instantiate the template.  */
20091       result = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
20092                                       /*entering_scope=*/0,
20093                                       tf_error | tf_user);
20094       if (result == error_mark_node)
20095         result = NULL_TREE;
20096     }
20097   
20098   /* Leave the SCOPE.  */
20099   if (pushed_scope)
20100     pop_scope (pushed_scope);
20101
20102   /* If we failed to resolve it, return the original typename.  */
20103   if (!result)
20104     return type;
20105   
20106   /* If lookup found a typename type, resolve that too.  */
20107   if (TREE_CODE (result) == TYPENAME_TYPE && !TYPENAME_IS_RESOLVING_P (result))
20108     {
20109       /* Ill-formed programs can cause infinite recursion here, so we
20110          must catch that.  */
20111       TYPENAME_IS_RESOLVING_P (type) = 1;
20112       result = resolve_typename_type (result, only_current_p);
20113       TYPENAME_IS_RESOLVING_P (type) = 0;
20114     }
20115   
20116   /* Qualify the resulting type.  */
20117   quals = cp_type_quals (type);
20118   if (quals)
20119     result = cp_build_qualified_type (result, cp_type_quals (result) | quals);
20120
20121   return result;
20122 }
20123
20124 /* EXPR is an expression which is not type-dependent.  Return a proxy
20125    for EXPR that can be used to compute the types of larger
20126    expressions containing EXPR.  */
20127
20128 tree
20129 build_non_dependent_expr (tree expr)
20130 {
20131   tree inner_expr;
20132
20133 #ifdef ENABLE_CHECKING
20134   /* Try to get a constant value for all non-type-dependent expressions in
20135       order to expose bugs in *_dependent_expression_p and constexpr.  */
20136   if (cxx_dialect >= cxx0x)
20137     maybe_constant_value (fold_non_dependent_expr_sfinae (expr, tf_none));
20138 #endif
20139
20140   /* Preserve OVERLOADs; the functions must be available to resolve
20141      types.  */
20142   inner_expr = expr;
20143   if (TREE_CODE (inner_expr) == STMT_EXPR)
20144     inner_expr = stmt_expr_value_expr (inner_expr);
20145   if (TREE_CODE (inner_expr) == ADDR_EXPR)
20146     inner_expr = TREE_OPERAND (inner_expr, 0);
20147   if (TREE_CODE (inner_expr) == COMPONENT_REF)
20148     inner_expr = TREE_OPERAND (inner_expr, 1);
20149   if (is_overloaded_fn (inner_expr)
20150       || TREE_CODE (inner_expr) == OFFSET_REF)
20151     return expr;
20152   /* There is no need to return a proxy for a variable.  */
20153   if (TREE_CODE (expr) == VAR_DECL)
20154     return expr;
20155   /* Preserve string constants; conversions from string constants to
20156      "char *" are allowed, even though normally a "const char *"
20157      cannot be used to initialize a "char *".  */
20158   if (TREE_CODE (expr) == STRING_CST)
20159     return expr;
20160   /* Preserve arithmetic constants, as an optimization -- there is no
20161      reason to create a new node.  */
20162   if (TREE_CODE (expr) == INTEGER_CST || TREE_CODE (expr) == REAL_CST)
20163     return expr;
20164   /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
20165      There is at least one place where we want to know that a
20166      particular expression is a throw-expression: when checking a ?:
20167      expression, there are special rules if the second or third
20168      argument is a throw-expression.  */
20169   if (TREE_CODE (expr) == THROW_EXPR)
20170     return expr;
20171
20172   /* Don't wrap an initializer list, we need to be able to look inside.  */
20173   if (BRACE_ENCLOSED_INITIALIZER_P (expr))
20174     return expr;
20175
20176   if (TREE_CODE (expr) == COND_EXPR)
20177     return build3 (COND_EXPR,
20178                    TREE_TYPE (expr),
20179                    TREE_OPERAND (expr, 0),
20180                    (TREE_OPERAND (expr, 1)
20181                     ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
20182                     : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
20183                    build_non_dependent_expr (TREE_OPERAND (expr, 2)));
20184   if (TREE_CODE (expr) == COMPOUND_EXPR
20185       && !COMPOUND_EXPR_OVERLOADED (expr))
20186     return build2 (COMPOUND_EXPR,
20187                    TREE_TYPE (expr),
20188                    TREE_OPERAND (expr, 0),
20189                    build_non_dependent_expr (TREE_OPERAND (expr, 1)));
20190
20191   /* If the type is unknown, it can't really be non-dependent */
20192   gcc_assert (TREE_TYPE (expr) != unknown_type_node);
20193
20194   /* Otherwise, build a NON_DEPENDENT_EXPR.  */
20195   return build1 (NON_DEPENDENT_EXPR, TREE_TYPE (expr), expr);
20196 }
20197
20198 /* ARGS is a vector of expressions as arguments to a function call.
20199    Replace the arguments with equivalent non-dependent expressions.
20200    This modifies ARGS in place.  */
20201
20202 void
20203 make_args_non_dependent (VEC(tree,gc) *args)
20204 {
20205   unsigned int ix;
20206   tree arg;
20207
20208   FOR_EACH_VEC_ELT (tree, args, ix, arg)
20209     {
20210       tree newarg = build_non_dependent_expr (arg);
20211       if (newarg != arg)
20212         VEC_replace (tree, args, ix, newarg);
20213     }
20214 }
20215
20216 /* Returns a type which represents 'auto'.  We use a TEMPLATE_TYPE_PARM
20217    with a level one deeper than the actual template parms.  */
20218
20219 tree
20220 make_auto (void)
20221 {
20222   tree au = cxx_make_type (TEMPLATE_TYPE_PARM);
20223   TYPE_NAME (au) = build_decl (BUILTINS_LOCATION,
20224                                TYPE_DECL, get_identifier ("auto"), au);
20225   TYPE_STUB_DECL (au) = TYPE_NAME (au);
20226   TEMPLATE_TYPE_PARM_INDEX (au) = build_template_parm_index
20227     (0, processing_template_decl + 1, processing_template_decl + 1,
20228      0, TYPE_NAME (au), NULL_TREE);
20229   TYPE_CANONICAL (au) = canonical_type_parameter (au);
20230   DECL_ARTIFICIAL (TYPE_NAME (au)) = 1;
20231   SET_DECL_TEMPLATE_PARM_P (TYPE_NAME (au));
20232
20233   return au;
20234 }
20235
20236 /* Given type ARG, return std::initializer_list<ARG>.  */
20237
20238 static tree
20239 listify (tree arg)
20240 {
20241   tree std_init_list = namespace_binding
20242     (get_identifier ("initializer_list"), std_node);
20243   tree argvec;
20244   if (!std_init_list || !DECL_CLASS_TEMPLATE_P (std_init_list))
20245     {    
20246       error ("deducing from brace-enclosed initializer list requires "
20247              "#include <initializer_list>");
20248       return error_mark_node;
20249     }
20250   argvec = make_tree_vec (1);
20251   TREE_VEC_ELT (argvec, 0) = arg;
20252   return lookup_template_class (std_init_list, argvec, NULL_TREE,
20253                                 NULL_TREE, 0, tf_warning_or_error);
20254 }
20255
20256 /* Replace auto in TYPE with std::initializer_list<auto>.  */
20257
20258 static tree
20259 listify_autos (tree type, tree auto_node)
20260 {
20261   tree init_auto = listify (auto_node);
20262   tree argvec = make_tree_vec (1);
20263   TREE_VEC_ELT (argvec, 0) = init_auto;
20264   if (processing_template_decl)
20265     argvec = add_to_template_args (current_template_args (), argvec);
20266   return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
20267 }
20268
20269 /* walk_tree helper for do_auto_deduction.  */
20270
20271 static tree
20272 contains_auto_r (tree *tp, int *walk_subtrees ATTRIBUTE_UNUSED,
20273                  void *type)
20274 {
20275   /* Is this a variable with the type we're looking for?  */
20276   if (DECL_P (*tp)
20277       && TREE_TYPE (*tp) == type)
20278     return *tp;
20279   else
20280     return NULL_TREE;
20281 }
20282
20283 /* Replace occurrences of 'auto' in TYPE with the appropriate type deduced
20284    from INIT.  AUTO_NODE is the TEMPLATE_TYPE_PARM used for 'auto' in TYPE.  */
20285
20286 tree
20287 do_auto_deduction (tree type, tree init, tree auto_node)
20288 {
20289   tree parms, tparms, targs;
20290   tree args[1];
20291   tree decl;
20292   int val;
20293
20294   if (processing_template_decl
20295       && (TREE_TYPE (init) == NULL_TREE
20296           || BRACE_ENCLOSED_INITIALIZER_P (init)))
20297     /* Not enough information to try this yet.  */
20298     return type;
20299
20300   /* The name of the object being declared shall not appear in the
20301      initializer expression.  */
20302   decl = cp_walk_tree_without_duplicates (&init, contains_auto_r, type);
20303   if (decl)
20304     {
20305       error ("variable %q#D with %<auto%> type used in its own "
20306              "initializer", decl);
20307       return error_mark_node;
20308     }
20309
20310   /* [dcl.spec.auto]: Obtain P from T by replacing the occurrences of auto
20311      with either a new invented type template parameter U or, if the
20312      initializer is a braced-init-list (8.5.4), with
20313      std::initializer_list<U>.  */
20314   if (BRACE_ENCLOSED_INITIALIZER_P (init))
20315     type = listify_autos (type, auto_node);
20316
20317   init = resolve_nondeduced_context (init);
20318
20319   parms = build_tree_list (NULL_TREE, type);
20320   args[0] = init;
20321   tparms = make_tree_vec (1);
20322   targs = make_tree_vec (1);
20323   TREE_VEC_ELT (tparms, 0)
20324     = build_tree_list (NULL_TREE, TYPE_NAME (auto_node));
20325   val = type_unification_real (tparms, targs, parms, args, 1, 0,
20326                                DEDUCE_CALL, LOOKUP_NORMAL,
20327                                /*explain_p=*/false);
20328   if (val > 0)
20329     {
20330       if (processing_template_decl)
20331         /* Try again at instantiation time.  */
20332         return type;
20333       if (type && type != error_mark_node)
20334         /* If type is error_mark_node a diagnostic must have been
20335            emitted by now.  Also, having a mention to '<type error>'
20336            in the diagnostic is not really useful to the user.  */
20337         error ("unable to deduce %qT from %qE", type, init);
20338       return error_mark_node;
20339     }
20340
20341   /* If the list of declarators contains more than one declarator, the type
20342      of each declared variable is determined as described above. If the
20343      type deduced for the template parameter U is not the same in each
20344      deduction, the program is ill-formed.  */
20345   if (TREE_TYPE (auto_node)
20346       && !same_type_p (TREE_TYPE (auto_node), TREE_VEC_ELT (targs, 0)))
20347     {
20348       error ("inconsistent deduction for %qT: %qT and then %qT",
20349              auto_node, TREE_TYPE (auto_node), TREE_VEC_ELT (targs, 0));
20350       return error_mark_node;
20351     }
20352   TREE_TYPE (auto_node) = TREE_VEC_ELT (targs, 0);
20353
20354   if (processing_template_decl)
20355     targs = add_to_template_args (current_template_args (), targs);
20356   return tsubst (type, targs, tf_warning_or_error, NULL_TREE);
20357 }
20358
20359 /* Substitutes LATE_RETURN_TYPE for 'auto' in TYPE and returns the
20360    result.  */
20361
20362 tree
20363 splice_late_return_type (tree type, tree late_return_type)
20364 {
20365   tree argvec;
20366
20367   if (late_return_type == NULL_TREE)
20368     return type;
20369   argvec = make_tree_vec (1);
20370   TREE_VEC_ELT (argvec, 0) = late_return_type;
20371   if (processing_template_parmlist)
20372     /* For a late-specified return type in a template type-parameter, we
20373        need to add a dummy argument level for its parmlist.  */
20374     argvec = add_to_template_args
20375       (make_tree_vec (processing_template_parmlist), argvec);
20376   if (current_template_parms)
20377     argvec = add_to_template_args (current_template_args (), argvec);
20378   return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
20379 }
20380
20381 /* Returns true iff TYPE is a TEMPLATE_TYPE_PARM representing 'auto'.  */
20382
20383 bool
20384 is_auto (const_tree type)
20385 {
20386   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
20387       && TYPE_IDENTIFIER (type) == get_identifier ("auto"))
20388     return true;
20389   else
20390     return false;
20391 }
20392
20393 /* Returns true iff TYPE contains a use of 'auto'.  Since auto can only
20394    appear as a type-specifier for the declaration in question, we don't
20395    have to look through the whole type.  */
20396
20397 tree
20398 type_uses_auto (tree type)
20399 {
20400   enum tree_code code;
20401   if (is_auto (type))
20402     return type;
20403
20404   code = TREE_CODE (type);
20405
20406   if (code == POINTER_TYPE || code == REFERENCE_TYPE
20407       || code == OFFSET_TYPE || code == FUNCTION_TYPE
20408       || code == METHOD_TYPE || code == ARRAY_TYPE)
20409     return type_uses_auto (TREE_TYPE (type));
20410
20411   if (TYPE_PTRMEMFUNC_P (type))
20412     return type_uses_auto (TREE_TYPE (TREE_TYPE
20413                                    (TYPE_PTRMEMFUNC_FN_TYPE (type))));
20414
20415   return NULL_TREE;
20416 }
20417
20418 /* For a given template T, return the vector of typedefs referenced
20419    in T for which access check is needed at T instantiation time.
20420    T is either  a FUNCTION_DECL or a RECORD_TYPE.
20421    Those typedefs were added to T by the function
20422    append_type_to_template_for_access_check.  */
20423
20424 VEC(qualified_typedef_usage_t,gc)*
20425 get_types_needing_access_check (tree t)
20426 {
20427   tree ti;
20428   VEC(qualified_typedef_usage_t,gc) *result = NULL;
20429
20430   if (!t || t == error_mark_node)
20431     return NULL;
20432
20433   if (!(ti = get_template_info (t)))
20434     return NULL;
20435
20436   if (CLASS_TYPE_P (t)
20437       || TREE_CODE (t) == FUNCTION_DECL)
20438     {
20439       if (!TI_TEMPLATE (ti))
20440         return NULL;
20441
20442       result = TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti);
20443     }
20444
20445   return result;
20446 }
20447
20448 /* Append the typedef TYPE_DECL used in template T to a list of typedefs
20449    tied to T. That list of typedefs will be access checked at
20450    T instantiation time.
20451    T is either a FUNCTION_DECL or a RECORD_TYPE.
20452    TYPE_DECL is a TYPE_DECL node representing a typedef.
20453    SCOPE is the scope through which TYPE_DECL is accessed.
20454    LOCATION is the location of the usage point of TYPE_DECL.
20455
20456    This function is a subroutine of
20457    append_type_to_template_for_access_check.  */
20458
20459 static void
20460 append_type_to_template_for_access_check_1 (tree t,
20461                                             tree type_decl,
20462                                             tree scope,
20463                                             location_t location)
20464 {
20465   qualified_typedef_usage_t typedef_usage;
20466   tree ti;
20467
20468   if (!t || t == error_mark_node)
20469     return;
20470
20471   gcc_assert ((TREE_CODE (t) == FUNCTION_DECL
20472                || CLASS_TYPE_P (t))
20473               && type_decl
20474               && TREE_CODE (type_decl) == TYPE_DECL
20475               && scope);
20476
20477   if (!(ti = get_template_info (t)))
20478     return;
20479
20480   gcc_assert (TI_TEMPLATE (ti));
20481
20482   typedef_usage.typedef_decl = type_decl;
20483   typedef_usage.context = scope;
20484   typedef_usage.locus = location;
20485
20486   VEC_safe_push (qualified_typedef_usage_t, gc,
20487                  TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti),
20488                  &typedef_usage);
20489 }
20490
20491 /* Append TYPE_DECL to the template TEMPL.
20492    TEMPL is either a class type, a FUNCTION_DECL or a a TEMPLATE_DECL.
20493    At TEMPL instanciation time, TYPE_DECL will be checked to see
20494    if it can be accessed through SCOPE.
20495    LOCATION is the location of the usage point of TYPE_DECL.
20496
20497    e.g. consider the following code snippet:
20498
20499      class C
20500      {
20501        typedef int myint;
20502      };
20503
20504      template<class U> struct S
20505      {
20506        C::myint mi; // <-- usage point of the typedef C::myint
20507      };
20508
20509      S<char> s;
20510
20511    At S<char> instantiation time, we need to check the access of C::myint
20512    In other words, we need to check the access of the myint typedef through
20513    the C scope. For that purpose, this function will add the myint typedef
20514    and the scope C through which its being accessed to a list of typedefs
20515    tied to the template S. That list will be walked at template instantiation
20516    time and access check performed on each typedefs it contains.
20517    Note that this particular code snippet should yield an error because
20518    myint is private to C.  */
20519
20520 void
20521 append_type_to_template_for_access_check (tree templ,
20522                                           tree type_decl,
20523                                           tree scope,
20524                                           location_t location)
20525 {
20526   qualified_typedef_usage_t *iter;
20527   int i;
20528
20529   gcc_assert (type_decl && (TREE_CODE (type_decl) == TYPE_DECL));
20530
20531   /* Make sure we don't append the type to the template twice.  */
20532   FOR_EACH_VEC_ELT (qualified_typedef_usage_t,
20533                     get_types_needing_access_check (templ),
20534                     i, iter)
20535     if (iter->typedef_decl == type_decl && scope == iter->context)
20536       return;
20537
20538   append_type_to_template_for_access_check_1 (templ, type_decl,
20539                                               scope, location);
20540 }
20541
20542 /* Set up the hash tables for template instantiations.  */
20543
20544 void
20545 init_template_processing (void)
20546 {
20547   decl_specializations = htab_create_ggc (37,
20548                                           hash_specialization,
20549                                           eq_specializations,
20550                                           ggc_free);
20551   type_specializations = htab_create_ggc (37,
20552                                           hash_specialization,
20553                                           eq_specializations,
20554                                           ggc_free);
20555 }
20556
20557 /* Print stats about the template hash tables for -fstats.  */
20558
20559 void
20560 print_template_statistics (void)
20561 {
20562   fprintf (stderr, "decl_specializations: size %ld, %ld elements, "
20563            "%f collisions\n", (long) htab_size (decl_specializations),
20564            (long) htab_elements (decl_specializations),
20565            htab_collisions (decl_specializations));
20566   fprintf (stderr, "type_specializations: size %ld, %ld elements, "
20567            "%f collisions\n", (long) htab_size (type_specializations),
20568            (long) htab_elements (type_specializations),
20569            htab_collisions (type_specializations));
20570 }
20571
20572 #include "gt-cp-pt.h"