OSDN Git Service

PR c++/48322
[pf3gnuchains/gcc-fork.git] / gcc / cp / pt.c
1 /* Handle parameterized types (templates) for GNU C++.
2    Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3    2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011
4    Free Software Foundation, Inc.
5    Written by Ken Raeburn (raeburn@cygnus.com) while at Watchmaker Computing.
6    Rewritten by Jason Merrill (jason@cygnus.com).
7
8 This file is part of GCC.
9
10 GCC is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 3, or (at your option)
13 any later version.
14
15 GCC is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18 GNU General Public License for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with GCC; see the file COPYING3.  If not see
22 <http://www.gnu.org/licenses/>.  */
23
24 /* Known bugs or deficiencies include:
25
26      all methods must be provided in header files; can't use a source
27      file that contains only the method templates and "just win".  */
28
29 #include "config.h"
30 #include "system.h"
31 #include "coretypes.h"
32 #include "tm.h"
33 #include "tree.h"
34 #include "intl.h"
35 #include "pointer-set.h"
36 #include "flags.h"
37 #include "cp-tree.h"
38 #include "c-family/c-common.h"
39 #include "c-family/c-objc.h"
40 #include "cp-objcp-common.h"
41 #include "tree-inline.h"
42 #include "decl.h"
43 #include "output.h"
44 #include "toplev.h"
45 #include "timevar.h"
46 #include "tree-iterator.h"
47 #include "vecprim.h"
48
49 /* The type of functions taking a tree, and some additional data, and
50    returning an int.  */
51 typedef int (*tree_fn_t) (tree, void*);
52
53 /* The PENDING_TEMPLATES is a TREE_LIST of templates whose
54    instantiations have been deferred, either because their definitions
55    were not yet available, or because we were putting off doing the work.  */
56 struct GTY ((chain_next ("%h.next"))) pending_template {
57   struct pending_template *next;
58   struct tinst_level *tinst;
59 };
60
61 static GTY(()) struct pending_template *pending_templates;
62 static GTY(()) struct pending_template *last_pending_template;
63
64 int processing_template_parmlist;
65 static int template_header_count;
66
67 static GTY(()) tree saved_trees;
68 static VEC(int,heap) *inline_parm_levels;
69
70 static GTY(()) struct tinst_level *current_tinst_level;
71
72 static GTY(()) tree saved_access_scope;
73
74 /* Live only within one (recursive) call to tsubst_expr.  We use
75    this to pass the statement expression node from the STMT_EXPR
76    to the EXPR_STMT that is its result.  */
77 static tree cur_stmt_expr;
78
79 /* A map from local variable declarations in the body of the template
80    presently being instantiated to the corresponding instantiated
81    local variables.  */
82 static htab_t local_specializations;
83
84 typedef struct GTY(()) spec_entry
85 {
86   tree tmpl;
87   tree args;
88   tree spec;
89 } spec_entry;
90
91 static GTY ((param_is (spec_entry)))
92   htab_t decl_specializations;
93
94 static GTY ((param_is (spec_entry)))
95   htab_t type_specializations;
96
97 /* Contains canonical template parameter types. The vector is indexed by
98    the TEMPLATE_TYPE_IDX of the template parameter. Each element is a
99    TREE_LIST, whose TREE_VALUEs contain the canonical template
100    parameters of various types and levels.  */
101 static GTY(()) VEC(tree,gc) *canonical_template_parms;
102
103 #define UNIFY_ALLOW_NONE 0
104 #define UNIFY_ALLOW_MORE_CV_QUAL 1
105 #define UNIFY_ALLOW_LESS_CV_QUAL 2
106 #define UNIFY_ALLOW_DERIVED 4
107 #define UNIFY_ALLOW_INTEGER 8
108 #define UNIFY_ALLOW_OUTER_LEVEL 16
109 #define UNIFY_ALLOW_OUTER_MORE_CV_QUAL 32
110 #define UNIFY_ALLOW_OUTER_LESS_CV_QUAL 64
111
112 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   /* Identify whether this is a parameter pack or not.  */
2980   switch (TREE_CODE (t))
2981     {
2982     case TEMPLATE_PARM_INDEX:
2983       if (TEMPLATE_PARM_PARAMETER_PACK (t))
2984         parameter_pack_p = true;
2985       break;
2986
2987     case TEMPLATE_TYPE_PARM:
2988       t = TYPE_MAIN_VARIANT (t);
2989     case TEMPLATE_TEMPLATE_PARM:
2990       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
2991         parameter_pack_p = true;
2992       break;
2993
2994     case PARM_DECL:
2995       if (FUNCTION_PARAMETER_PACK_P (t))
2996         {
2997           /* We don't want to walk into the type of a PARM_DECL,
2998              because we don't want to see the type parameter pack.  */
2999           *walk_subtrees = 0;
3000           parameter_pack_p = true;
3001         }
3002       break;
3003
3004     case BASES:
3005       parameter_pack_p = true;
3006       break;
3007     default:
3008       /* Not a parameter pack.  */
3009       break;
3010     }
3011
3012   if (parameter_pack_p)
3013     {
3014       /* Add this parameter pack to the list.  */
3015       *ppd->parameter_packs = tree_cons (NULL_TREE, t, *ppd->parameter_packs);
3016     }
3017
3018   if (TYPE_P (t))
3019     cp_walk_tree (&TYPE_CONTEXT (t), 
3020                   &find_parameter_packs_r, ppd, ppd->visited);
3021
3022   /* This switch statement will return immediately if we don't find a
3023      parameter pack.  */
3024   switch (TREE_CODE (t)) 
3025     {
3026     case TEMPLATE_PARM_INDEX:
3027       return NULL_TREE;
3028
3029     case BOUND_TEMPLATE_TEMPLATE_PARM:
3030       /* Check the template itself.  */
3031       cp_walk_tree (&TREE_TYPE (TYPE_TI_TEMPLATE (t)), 
3032                     &find_parameter_packs_r, ppd, ppd->visited);
3033       /* Check the template arguments.  */
3034       cp_walk_tree (&TYPE_TI_ARGS (t), &find_parameter_packs_r, ppd, 
3035                     ppd->visited);
3036       *walk_subtrees = 0;
3037       return NULL_TREE;
3038
3039     case TEMPLATE_TYPE_PARM:
3040     case TEMPLATE_TEMPLATE_PARM:
3041       return NULL_TREE;
3042
3043     case PARM_DECL:
3044       return NULL_TREE;
3045
3046     case RECORD_TYPE:
3047       if (TYPE_PTRMEMFUNC_P (t))
3048         return NULL_TREE;
3049       /* Fall through.  */
3050
3051     case UNION_TYPE:
3052     case ENUMERAL_TYPE:
3053       if (TYPE_TEMPLATE_INFO (t))
3054         cp_walk_tree (&TI_ARGS (TYPE_TEMPLATE_INFO (t)),
3055                       &find_parameter_packs_r, ppd, ppd->visited);
3056
3057       *walk_subtrees = 0;
3058       return NULL_TREE;
3059
3060     case CONSTRUCTOR:
3061     case TEMPLATE_DECL:
3062       cp_walk_tree (&TREE_TYPE (t),
3063                     &find_parameter_packs_r, ppd, ppd->visited);
3064       return NULL_TREE;
3065  
3066     case TYPENAME_TYPE:
3067       cp_walk_tree (&TYPENAME_TYPE_FULLNAME (t), &find_parameter_packs_r,
3068                    ppd, ppd->visited);
3069       *walk_subtrees = 0;
3070       return NULL_TREE;
3071       
3072     case TYPE_PACK_EXPANSION:
3073     case EXPR_PACK_EXPANSION:
3074       *walk_subtrees = 0;
3075       return NULL_TREE;
3076
3077     case INTEGER_TYPE:
3078       cp_walk_tree (&TYPE_MAX_VALUE (t), &find_parameter_packs_r, 
3079                     ppd, ppd->visited);
3080       *walk_subtrees = 0;
3081       return NULL_TREE;
3082
3083     case IDENTIFIER_NODE:
3084       cp_walk_tree (&TREE_TYPE (t), &find_parameter_packs_r, ppd, 
3085                     ppd->visited);
3086       *walk_subtrees = 0;
3087       return NULL_TREE;
3088
3089     default:
3090       return NULL_TREE;
3091     }
3092
3093   return NULL_TREE;
3094 }
3095
3096 /* Determines if the expression or type T uses any parameter packs.  */
3097 bool
3098 uses_parameter_packs (tree t)
3099 {
3100   tree parameter_packs = NULL_TREE;
3101   struct find_parameter_pack_data ppd;
3102   ppd.parameter_packs = &parameter_packs;
3103   ppd.visited = pointer_set_create ();
3104   cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
3105   pointer_set_destroy (ppd.visited);
3106   return parameter_packs != NULL_TREE;
3107 }
3108
3109 /* Turn ARG, which may be an expression, type, or a TREE_LIST
3110    representation a base-class initializer into a parameter pack
3111    expansion. If all goes well, the resulting node will be an
3112    EXPR_PACK_EXPANSION, TYPE_PACK_EXPANSION, or TREE_LIST,
3113    respectively.  */
3114 tree 
3115 make_pack_expansion (tree arg)
3116 {
3117   tree result;
3118   tree parameter_packs = NULL_TREE;
3119   bool for_types = false;
3120   struct find_parameter_pack_data ppd;
3121
3122   if (!arg || arg == error_mark_node)
3123     return arg;
3124
3125   if (TREE_CODE (arg) == TREE_LIST)
3126     {
3127       /* The only time we will see a TREE_LIST here is for a base
3128          class initializer.  In this case, the TREE_PURPOSE will be a
3129          _TYPE node (representing the base class expansion we're
3130          initializing) and the TREE_VALUE will be a TREE_LIST
3131          containing the initialization arguments. 
3132
3133          The resulting expansion looks somewhat different from most
3134          expansions. Rather than returning just one _EXPANSION, we
3135          return a TREE_LIST whose TREE_PURPOSE is a
3136          TYPE_PACK_EXPANSION containing the bases that will be
3137          initialized.  The TREE_VALUE will be identical to the
3138          original TREE_VALUE, which is a list of arguments that will
3139          be passed to each base.  We do not introduce any new pack
3140          expansion nodes into the TREE_VALUE (although it is possible
3141          that some already exist), because the TREE_PURPOSE and
3142          TREE_VALUE all need to be expanded together with the same
3143          _EXPANSION node.  Note that the TYPE_PACK_EXPANSION in the
3144          resulting TREE_PURPOSE will mention the parameter packs in
3145          both the bases and the arguments to the bases.  */
3146       tree purpose;
3147       tree value;
3148       tree parameter_packs = NULL_TREE;
3149
3150       /* Determine which parameter packs will be used by the base
3151          class expansion.  */
3152       ppd.visited = pointer_set_create ();
3153       ppd.parameter_packs = &parameter_packs;
3154       cp_walk_tree (&TREE_PURPOSE (arg), &find_parameter_packs_r, 
3155                     &ppd, ppd.visited);
3156
3157       if (parameter_packs == NULL_TREE)
3158         {
3159           error ("base initializer expansion %<%T%> contains no parameter packs", arg);
3160           pointer_set_destroy (ppd.visited);
3161           return error_mark_node;
3162         }
3163
3164       if (TREE_VALUE (arg) != void_type_node)
3165         {
3166           /* Collect the sets of parameter packs used in each of the
3167              initialization arguments.  */
3168           for (value = TREE_VALUE (arg); value; value = TREE_CHAIN (value))
3169             {
3170               /* Determine which parameter packs will be expanded in this
3171                  argument.  */
3172               cp_walk_tree (&TREE_VALUE (value), &find_parameter_packs_r, 
3173                             &ppd, ppd.visited);
3174             }
3175         }
3176
3177       pointer_set_destroy (ppd.visited);
3178
3179       /* Create the pack expansion type for the base type.  */
3180       purpose = cxx_make_type (TYPE_PACK_EXPANSION);
3181       SET_PACK_EXPANSION_PATTERN (purpose, TREE_PURPOSE (arg));
3182       PACK_EXPANSION_PARAMETER_PACKS (purpose) = parameter_packs;
3183
3184       /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
3185          they will rarely be compared to anything.  */
3186       SET_TYPE_STRUCTURAL_EQUALITY (purpose);
3187
3188       return tree_cons (purpose, TREE_VALUE (arg), NULL_TREE);
3189     }
3190
3191   if (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL)
3192     for_types = true;
3193
3194   /* Build the PACK_EXPANSION_* node.  */
3195   result = for_types
3196      ? cxx_make_type (TYPE_PACK_EXPANSION)
3197      : make_node (EXPR_PACK_EXPANSION);
3198   SET_PACK_EXPANSION_PATTERN (result, arg);
3199   if (TREE_CODE (result) == EXPR_PACK_EXPANSION)
3200     {
3201       /* Propagate type and const-expression information.  */
3202       TREE_TYPE (result) = TREE_TYPE (arg);
3203       TREE_CONSTANT (result) = TREE_CONSTANT (arg);
3204     }
3205   else
3206     /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
3207        they will rarely be compared to anything.  */
3208     SET_TYPE_STRUCTURAL_EQUALITY (result);
3209
3210   /* Determine which parameter packs will be expanded.  */
3211   ppd.parameter_packs = &parameter_packs;
3212   ppd.visited = pointer_set_create ();
3213   cp_walk_tree (&arg, &find_parameter_packs_r, &ppd, ppd.visited);
3214   pointer_set_destroy (ppd.visited);
3215
3216   /* Make sure we found some parameter packs.  */
3217   if (parameter_packs == NULL_TREE)
3218     {
3219       if (TYPE_P (arg))
3220         error ("expansion pattern %<%T%> contains no argument packs", arg);
3221       else
3222         error ("expansion pattern %<%E%> contains no argument packs", arg);
3223       return error_mark_node;
3224     }
3225   PACK_EXPANSION_PARAMETER_PACKS (result) = parameter_packs;
3226
3227   return result;
3228 }
3229
3230 /* Checks T for any "bare" parameter packs, which have not yet been
3231    expanded, and issues an error if any are found. This operation can
3232    only be done on full expressions or types (e.g., an expression
3233    statement, "if" condition, etc.), because we could have expressions like:
3234
3235      foo(f(g(h(args)))...)
3236
3237    where "args" is a parameter pack. check_for_bare_parameter_packs
3238    should not be called for the subexpressions args, h(args),
3239    g(h(args)), or f(g(h(args))), because we would produce erroneous
3240    error messages. 
3241
3242    Returns TRUE and emits an error if there were bare parameter packs,
3243    returns FALSE otherwise.  */
3244 bool 
3245 check_for_bare_parameter_packs (tree t)
3246 {
3247   tree parameter_packs = NULL_TREE;
3248   struct find_parameter_pack_data ppd;
3249
3250   if (!processing_template_decl || !t || t == error_mark_node)
3251     return false;
3252
3253   if (TREE_CODE (t) == TYPE_DECL)
3254     t = TREE_TYPE (t);
3255
3256   ppd.parameter_packs = &parameter_packs;
3257   ppd.visited = pointer_set_create ();
3258   cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
3259   pointer_set_destroy (ppd.visited);
3260
3261   if (parameter_packs) 
3262     {
3263       error ("parameter packs not expanded with %<...%>:");
3264       while (parameter_packs)
3265         {
3266           tree pack = TREE_VALUE (parameter_packs);
3267           tree name = NULL_TREE;
3268
3269           if (TREE_CODE (pack) == TEMPLATE_TYPE_PARM
3270               || TREE_CODE (pack) == TEMPLATE_TEMPLATE_PARM)
3271             name = TYPE_NAME (pack);
3272           else if (TREE_CODE (pack) == TEMPLATE_PARM_INDEX)
3273             name = DECL_NAME (TEMPLATE_PARM_DECL (pack));
3274           else
3275             name = DECL_NAME (pack);
3276
3277           if (name)
3278             inform (input_location, "        %qD", name);
3279           else
3280             inform (input_location, "        <anonymous>");
3281
3282           parameter_packs = TREE_CHAIN (parameter_packs);
3283         }
3284
3285       return true;
3286     }
3287
3288   return false;
3289 }
3290
3291 /* Expand any parameter packs that occur in the template arguments in
3292    ARGS.  */
3293 tree
3294 expand_template_argument_pack (tree args)
3295 {
3296   tree result_args = NULL_TREE;
3297   int in_arg, out_arg = 0, nargs = args ? TREE_VEC_LENGTH (args) : 0;
3298   int num_result_args = -1;
3299   int non_default_args_count = -1;
3300
3301   /* First, determine if we need to expand anything, and the number of
3302      slots we'll need.  */
3303   for (in_arg = 0; in_arg < nargs; ++in_arg)
3304     {
3305       tree arg = TREE_VEC_ELT (args, in_arg);
3306       if (arg == NULL_TREE)
3307         return args;
3308       if (ARGUMENT_PACK_P (arg))
3309         {
3310           int num_packed = TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg));
3311           if (num_result_args < 0)
3312             num_result_args = in_arg + num_packed;
3313           else
3314             num_result_args += num_packed;
3315         }
3316       else
3317         {
3318           if (num_result_args >= 0)
3319             num_result_args++;
3320         }
3321     }
3322
3323   /* If no expansion is necessary, we're done.  */
3324   if (num_result_args < 0)
3325     return args;
3326
3327   /* Expand arguments.  */
3328   result_args = make_tree_vec (num_result_args);
3329   if (NON_DEFAULT_TEMPLATE_ARGS_COUNT (args))
3330     non_default_args_count =
3331       GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (args);
3332   for (in_arg = 0; in_arg < nargs; ++in_arg)
3333     {
3334       tree arg = TREE_VEC_ELT (args, in_arg);
3335       if (ARGUMENT_PACK_P (arg))
3336         {
3337           tree packed = ARGUMENT_PACK_ARGS (arg);
3338           int i, num_packed = TREE_VEC_LENGTH (packed);
3339           for (i = 0; i < num_packed; ++i, ++out_arg)
3340             TREE_VEC_ELT (result_args, out_arg) = TREE_VEC_ELT(packed, i);
3341           if (non_default_args_count > 0)
3342             non_default_args_count += num_packed;
3343         }
3344       else
3345         {
3346           TREE_VEC_ELT (result_args, out_arg) = arg;
3347           ++out_arg;
3348         }
3349     }
3350   if (non_default_args_count >= 0)
3351     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (result_args, non_default_args_count);
3352   return result_args;
3353 }
3354
3355 /* Checks if DECL shadows a template parameter.
3356
3357    [temp.local]: A template-parameter shall not be redeclared within its
3358    scope (including nested scopes).
3359
3360    Emits an error and returns TRUE if the DECL shadows a parameter,
3361    returns FALSE otherwise.  */
3362
3363 bool
3364 check_template_shadow (tree decl)
3365 {
3366   tree olddecl;
3367
3368   /* If we're not in a template, we can't possibly shadow a template
3369      parameter.  */
3370   if (!current_template_parms)
3371     return true;
3372
3373   /* Figure out what we're shadowing.  */
3374   if (TREE_CODE (decl) == OVERLOAD)
3375     decl = OVL_CURRENT (decl);
3376   olddecl = innermost_non_namespace_value (DECL_NAME (decl));
3377
3378   /* If there's no previous binding for this name, we're not shadowing
3379      anything, let alone a template parameter.  */
3380   if (!olddecl)
3381     return true;
3382
3383   /* If we're not shadowing a template parameter, we're done.  Note
3384      that OLDDECL might be an OVERLOAD (or perhaps even an
3385      ERROR_MARK), so we can't just blithely assume it to be a _DECL
3386      node.  */
3387   if (!DECL_P (olddecl) || !DECL_TEMPLATE_PARM_P (olddecl))
3388     return true;
3389
3390   /* We check for decl != olddecl to avoid bogus errors for using a
3391      name inside a class.  We check TPFI to avoid duplicate errors for
3392      inline member templates.  */
3393   if (decl == olddecl
3394       || TEMPLATE_PARMS_FOR_INLINE (current_template_parms))
3395     return true;
3396
3397   error ("declaration of %q+#D", decl);
3398   error (" shadows template parm %q+#D", olddecl);
3399   return false;
3400 }
3401
3402 /* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
3403    ORIG_LEVEL, DECL, and TYPE.  NUM_SIBLINGS is the total number of
3404    template parameters.  */
3405
3406 static tree
3407 build_template_parm_index (int index,
3408                            int level,
3409                            int orig_level,
3410                            int num_siblings,
3411                            tree decl,
3412                            tree type)
3413 {
3414   tree t = make_node (TEMPLATE_PARM_INDEX);
3415   TEMPLATE_PARM_IDX (t) = index;
3416   TEMPLATE_PARM_LEVEL (t) = level;
3417   TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
3418   TEMPLATE_PARM_NUM_SIBLINGS (t) = num_siblings;
3419   TEMPLATE_PARM_DECL (t) = decl;
3420   TREE_TYPE (t) = type;
3421   TREE_CONSTANT (t) = TREE_CONSTANT (decl);
3422   TREE_READONLY (t) = TREE_READONLY (decl);
3423
3424   return t;
3425 }
3426
3427 /* Find the canonical type parameter for the given template type
3428    parameter.  Returns the canonical type parameter, which may be TYPE
3429    if no such parameter existed.  */
3430
3431 static tree
3432 canonical_type_parameter (tree type)
3433 {
3434   tree list;
3435   int idx = TEMPLATE_TYPE_IDX (type);
3436   if (!canonical_template_parms)
3437     canonical_template_parms = VEC_alloc (tree, gc, idx+1);
3438
3439   while (VEC_length (tree, canonical_template_parms) <= (unsigned)idx)
3440     VEC_safe_push (tree, gc, canonical_template_parms, NULL_TREE);
3441
3442   list = VEC_index (tree, canonical_template_parms, idx);
3443   while (list && !comptypes (type, TREE_VALUE (list), COMPARE_STRUCTURAL))
3444     list = TREE_CHAIN (list);
3445
3446   if (list)
3447     return TREE_VALUE (list);
3448   else
3449     {
3450       VEC_replace(tree, canonical_template_parms, idx,
3451                   tree_cons (NULL_TREE, type, 
3452                              VEC_index (tree, canonical_template_parms, idx)));
3453       return type;
3454     }
3455 }
3456
3457 /* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
3458    TEMPLATE_PARM_LEVEL has been decreased by LEVELS.  If such a
3459    TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
3460    new one is created.  */
3461
3462 static tree
3463 reduce_template_parm_level (tree index, tree type, int levels, tree args,
3464                             tsubst_flags_t complain)
3465 {
3466   if (TEMPLATE_PARM_DESCENDANTS (index) == NULL_TREE
3467       || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
3468           != TEMPLATE_PARM_LEVEL (index) - levels)
3469       || !same_type_p (type, TREE_TYPE (TEMPLATE_PARM_DESCENDANTS (index))))
3470     {
3471       tree orig_decl = TEMPLATE_PARM_DECL (index);
3472       tree decl, t;
3473
3474       decl = build_decl (DECL_SOURCE_LOCATION (orig_decl),
3475                          TREE_CODE (orig_decl), DECL_NAME (orig_decl), type);
3476       TREE_CONSTANT (decl) = TREE_CONSTANT (orig_decl);
3477       TREE_READONLY (decl) = TREE_READONLY (orig_decl);
3478       DECL_ARTIFICIAL (decl) = 1;
3479       SET_DECL_TEMPLATE_PARM_P (decl);
3480
3481       t = build_template_parm_index (TEMPLATE_PARM_IDX (index),
3482                                      TEMPLATE_PARM_LEVEL (index) - levels,
3483                                      TEMPLATE_PARM_ORIG_LEVEL (index),
3484                                      TEMPLATE_PARM_NUM_SIBLINGS (index),
3485                                      decl, type);
3486       TEMPLATE_PARM_DESCENDANTS (index) = t;
3487       TEMPLATE_PARM_PARAMETER_PACK (t) 
3488         = TEMPLATE_PARM_PARAMETER_PACK (index);
3489
3490         /* Template template parameters need this.  */
3491       if (TREE_CODE (decl) == TEMPLATE_DECL)
3492         DECL_TEMPLATE_PARMS (decl) = tsubst_template_parms
3493           (DECL_TEMPLATE_PARMS (TEMPLATE_PARM_DECL (index)),
3494            args, complain);
3495     }
3496
3497   return TEMPLATE_PARM_DESCENDANTS (index);
3498 }
3499
3500 /* Process information from new template parameter PARM and append it
3501    to the LIST being built.  This new parameter is a non-type
3502    parameter iff IS_NON_TYPE is true. This new parameter is a
3503    parameter pack iff IS_PARAMETER_PACK is true.  The location of PARM
3504    is in PARM_LOC. NUM_TEMPLATE_PARMS is the size of the template
3505    parameter list PARM belongs to. This is used used to create a
3506    proper canonical type for the type of PARM that is to be created,
3507    iff PARM is a type.  If the size is not known, this parameter shall
3508    be set to 0.  */
3509
3510 tree
3511 process_template_parm (tree list, location_t parm_loc, tree parm,
3512                        bool is_non_type, bool is_parameter_pack,
3513                        unsigned num_template_parms)
3514 {
3515   tree decl = 0;
3516   tree defval;
3517   tree err_parm_list;
3518   int idx = 0;
3519
3520   gcc_assert (TREE_CODE (parm) == TREE_LIST);
3521   defval = TREE_PURPOSE (parm);
3522
3523   if (list)
3524     {
3525       tree p = tree_last (list);
3526
3527       if (p && TREE_VALUE (p) != error_mark_node)
3528         {
3529           p = TREE_VALUE (p);
3530           if (TREE_CODE (p) == TYPE_DECL || TREE_CODE (p) == TEMPLATE_DECL)
3531             idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
3532           else
3533             idx = TEMPLATE_PARM_IDX (DECL_INITIAL (p));
3534         }
3535
3536       ++idx;
3537     }
3538   else
3539     idx = 0;
3540
3541   if (is_non_type)
3542     {
3543       parm = TREE_VALUE (parm);
3544
3545       SET_DECL_TEMPLATE_PARM_P (parm);
3546
3547       if (TREE_TYPE (parm) == error_mark_node)
3548         {
3549           err_parm_list = build_tree_list (defval, parm);
3550           TREE_VALUE (err_parm_list) = error_mark_node;
3551            return chainon (list, err_parm_list);
3552         }
3553       else
3554       {
3555         /* [temp.param]
3556
3557            The top-level cv-qualifiers on the template-parameter are
3558            ignored when determining its type.  */
3559         TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
3560         if (invalid_nontype_parm_type_p (TREE_TYPE (parm), 1))
3561           {
3562             err_parm_list = build_tree_list (defval, parm);
3563             TREE_VALUE (err_parm_list) = error_mark_node;
3564              return chainon (list, err_parm_list);
3565           }
3566
3567         if (uses_parameter_packs (TREE_TYPE (parm)) && !is_parameter_pack)
3568           {
3569             /* This template parameter is not a parameter pack, but it
3570                should be. Complain about "bare" parameter packs.  */
3571             check_for_bare_parameter_packs (TREE_TYPE (parm));
3572             
3573             /* Recover by calling this a parameter pack.  */
3574             is_parameter_pack = true;
3575           }
3576       }
3577
3578       /* A template parameter is not modifiable.  */
3579       TREE_CONSTANT (parm) = 1;
3580       TREE_READONLY (parm) = 1;
3581       decl = build_decl (parm_loc,
3582                          CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
3583       TREE_CONSTANT (decl) = 1;
3584       TREE_READONLY (decl) = 1;
3585       DECL_INITIAL (parm) = DECL_INITIAL (decl)
3586         = build_template_parm_index (idx, processing_template_decl,
3587                                      processing_template_decl,
3588                                      num_template_parms,
3589                                      decl, TREE_TYPE (parm));
3590
3591       TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)) 
3592         = is_parameter_pack;
3593     }
3594   else
3595     {
3596       tree t;
3597       parm = TREE_VALUE (TREE_VALUE (parm));
3598
3599       if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
3600         {
3601           t = cxx_make_type (TEMPLATE_TEMPLATE_PARM);
3602           /* This is for distinguishing between real templates and template
3603              template parameters */
3604           TREE_TYPE (parm) = t;
3605           TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
3606           decl = parm;
3607         }
3608       else
3609         {
3610           t = cxx_make_type (TEMPLATE_TYPE_PARM);
3611           /* parm is either IDENTIFIER_NODE or NULL_TREE.  */
3612           decl = build_decl (parm_loc,
3613                              TYPE_DECL, parm, t);
3614         }
3615
3616       TYPE_NAME (t) = decl;
3617       TYPE_STUB_DECL (t) = decl;
3618       parm = decl;
3619       TEMPLATE_TYPE_PARM_INDEX (t)
3620         = build_template_parm_index (idx, processing_template_decl,
3621                                      processing_template_decl,
3622                                      num_template_parms,
3623                                      decl, TREE_TYPE (parm));
3624       TEMPLATE_TYPE_PARAMETER_PACK (t) = is_parameter_pack;
3625       TYPE_CANONICAL (t) = canonical_type_parameter (t);
3626     }
3627   DECL_ARTIFICIAL (decl) = 1;
3628   SET_DECL_TEMPLATE_PARM_P (decl);
3629   pushdecl (decl);
3630   parm = build_tree_list (defval, parm);
3631   return chainon (list, parm);
3632 }
3633
3634 /* The end of a template parameter list has been reached.  Process the
3635    tree list into a parameter vector, converting each parameter into a more
3636    useful form.  Type parameters are saved as IDENTIFIER_NODEs, and others
3637    as PARM_DECLs.  */
3638
3639 tree
3640 end_template_parm_list (tree parms)
3641 {
3642   int nparms;
3643   tree parm, next;
3644   tree saved_parmlist = make_tree_vec (list_length (parms));
3645
3646   current_template_parms
3647     = tree_cons (size_int (processing_template_decl),
3648                  saved_parmlist, current_template_parms);
3649
3650   for (parm = parms, nparms = 0; parm; parm = next, nparms++)
3651     {
3652       next = TREE_CHAIN (parm);
3653       TREE_VEC_ELT (saved_parmlist, nparms) = parm;
3654       TREE_CHAIN (parm) = NULL_TREE;
3655     }
3656
3657   --processing_template_parmlist;
3658
3659   return saved_parmlist;
3660 }
3661
3662 /* Create a new type almost identical to TYPE but which has the
3663    following differences:
3664
3665      1/ T has a new TEMPLATE_PARM_INDEX that carries the new number of
3666      template sibling parameters of T.
3667
3668      2/ T has a new canonical type that matches the new number
3669      of sibling parms.
3670
3671      3/ From now on, T is going to be what lookups referring to the
3672      name of TYPE will return. No lookup should return TYPE anymore.
3673
3674    NUM_PARMS is the new number of sibling parms TYPE belongs to.
3675
3676    This is a subroutine of fixup_template_parms.  */
3677
3678 static tree
3679 fixup_template_type_parm_type (tree type, int num_parms)
3680 {
3681   tree orig_idx = TEMPLATE_TYPE_PARM_INDEX (type), idx;
3682   tree t;
3683   /* This is the decl which name is inserted into the symbol table for
3684      the template parm type. So whenever we lookup the type name, this
3685      is the DECL we get.  */
3686   tree decl;
3687
3688   /* Do not fix up the type twice.  */
3689   if (orig_idx && TEMPLATE_PARM_NUM_SIBLINGS (orig_idx) != 0)
3690     return type;
3691
3692   t = copy_type (type);
3693   decl = TYPE_NAME (t);
3694
3695   TYPE_MAIN_VARIANT (t) = t;
3696   TYPE_NEXT_VARIANT (t)= NULL_TREE;
3697   TYPE_POINTER_TO (t) = 0;
3698   TYPE_REFERENCE_TO (t) = 0;
3699
3700   idx = build_template_parm_index (TEMPLATE_PARM_IDX (orig_idx),
3701                                    TEMPLATE_PARM_LEVEL (orig_idx),
3702                                    TEMPLATE_PARM_ORIG_LEVEL (orig_idx),
3703                                    num_parms,
3704                                    decl, t);
3705   TEMPLATE_PARM_DESCENDANTS (idx) = TEMPLATE_PARM_DESCENDANTS (orig_idx);
3706   TEMPLATE_PARM_PARAMETER_PACK (idx) = TEMPLATE_PARM_PARAMETER_PACK (orig_idx);
3707   TEMPLATE_TYPE_PARM_INDEX (t) = idx;
3708
3709   TYPE_STUB_DECL (t) = decl;
3710   TEMPLATE_TYPE_DECL (t) = decl;
3711   if (TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
3712     TREE_TYPE (DECL_TEMPLATE_RESULT  (decl)) = t;
3713
3714   /* Update the type associated to the type name stored in the symbol
3715      table. Now, whenever the type name is looked up, the resulting
3716      type is properly fixed up.  */
3717   TREE_TYPE (decl) = t;
3718
3719   TYPE_CANONICAL (t) = canonical_type_parameter (t);
3720
3721   return t;
3722 }
3723
3724 /* Create and return a new TEMPLATE_PARM_INDEX that is almost
3725    identical to I, but that is fixed up as to:
3726
3727    1/ carry the number of sibling parms (NUM_PARMS) of the template
3728    parm represented by I.
3729
3730    2/ replace all references to template parm types declared before I
3731    (in the same template parm list as I) by references to template
3732    parm types contained in ARGS. ARGS should contain the list of
3733    template parms that have been fixed up so far, in a form suitable
3734    to be passed to tsubst.
3735
3736    This is a subroutine of fixup_template_parms.  */
3737
3738 static tree
3739 fixup_template_parm_index (tree i, tree args, int num_parms)
3740 {
3741   tree index, decl, type;
3742
3743   if (i == NULL_TREE
3744       || TREE_CODE (i) != TEMPLATE_PARM_INDEX
3745       /* Do not fix up the index twice.  */
3746       || (TEMPLATE_PARM_NUM_SIBLINGS (i) != 0))
3747     return i;
3748
3749   decl = TEMPLATE_PARM_DECL (i);
3750   type = TREE_TYPE (decl);
3751
3752   index = build_template_parm_index (TEMPLATE_PARM_IDX (i),
3753                                      TEMPLATE_PARM_LEVEL (i),
3754                                      TEMPLATE_PARM_ORIG_LEVEL (i),
3755                                      num_parms,
3756                                      decl, type);
3757
3758   TEMPLATE_PARM_DESCENDANTS (index) = TEMPLATE_PARM_DESCENDANTS (i);
3759   TEMPLATE_PARM_PARAMETER_PACK (index) = TEMPLATE_PARM_PARAMETER_PACK (i);
3760
3761   type = tsubst (type, args, tf_none, NULL_TREE);
3762   
3763   TREE_TYPE (decl) = type;
3764   TREE_TYPE (index) = type;
3765
3766   return index;
3767 }
3768
3769 /* 
3770    This is a subroutine of fixup_template_parms.
3771
3772    It computes the canonical type of the type of the template
3773    parameter PARM_DESC and update all references to that type so that
3774    they use the newly computed canonical type. No access check is
3775    performed during the fixup. PARM_DESC is a TREE_LIST which
3776    TREE_VALUE is the template parameter and its TREE_PURPOSE is the
3777    default argument of the template parm if any. IDX is the index of
3778    the template parameter, starting at 0. NUM_PARMS is the number of
3779    template parameters in the set PARM_DESC belongs to. ARGLIST is a
3780    TREE_VEC containing the full set of template parameters in a form
3781    suitable to be passed to substs functions as their ARGS
3782    argument. This is what current_template_args returns for a given
3783    template. The innermost vector of args in ARGLIST is the set of
3784    template parms that have been fixed up so far. This function adds
3785    the fixed up parameter into that vector.  */
3786
3787 static void
3788 fixup_template_parm (tree parm_desc,
3789                      int idx,
3790                      int num_parms,
3791                      tree arglist)
3792 {
3793   tree parm = TREE_VALUE (parm_desc);
3794   tree fixedup_args = INNERMOST_TEMPLATE_ARGS (arglist);
3795
3796   push_deferring_access_checks (dk_no_check);
3797
3798   if (TREE_CODE (parm) == TYPE_DECL)
3799     {
3800       /* PARM is a template type parameter. Fix up its type, add
3801          the fixed-up template parm to the vector of fixed-up
3802          template parms so far, and substitute the fixed-up
3803          template parms into the default argument of this
3804          parameter.  */
3805       tree t =
3806         fixup_template_type_parm_type (TREE_TYPE (parm), num_parms);
3807       TREE_TYPE (parm) = t;
3808
3809       TREE_VEC_ELT (fixedup_args, idx) = template_parm_to_arg (parm_desc);
3810     }
3811   else if (TREE_CODE (parm) == TEMPLATE_DECL)
3812     {
3813       /* PARM is a template template parameter. This is going to
3814          be interesting.  */
3815       tree tparms, targs, innermost_args, t;
3816       int j;
3817
3818       /* First, fix up the parms of the template template parm
3819          because the parms are involved in defining the new canonical
3820          type of the template template parm.  */
3821
3822       /* So we need to substitute the template parm types that have
3823          been fixed up so far into the template parms of this template
3824          template parm. E.g, consider this:
3825
3826          template<class T, template<T u> class TT> class S;
3827
3828          In this case we want to substitute T into the
3829          template parameters of TT.
3830
3831          So let's walk the template parms of PARM here, and
3832          tsubst ARGLIST into into each of the template
3833          parms.   */
3834
3835       /* For this substitution we need to build the full set of
3836          template parameters and use that as arguments for the
3837          tsubsting function.  */
3838       tparms = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (parm));
3839
3840       /* This will contain the innermost parms of PARM into which
3841          we have substituted so far.  */
3842       innermost_args = make_tree_vec (TREE_VEC_LENGTH (tparms));
3843       targs = add_to_template_args (arglist, innermost_args);
3844       for (j = 0; j < TREE_VEC_LENGTH (tparms); ++j)
3845         {
3846           tree parameter;
3847
3848           parameter = TREE_VEC_ELT (tparms, j);
3849
3850           /* INNERMOST_ARGS needs to have at least the same number
3851              of elements as the index PARAMETER, ortherwise
3852              tsubsting into PARAMETER will result in partially
3853              instantiating it, reducing its tempate parm
3854              level. Let's tactically fill INNERMOST_ARGS for that
3855              purpose.  */
3856           TREE_VEC_ELT (innermost_args, j) =
3857             template_parm_to_arg (parameter);
3858
3859           fixup_template_parm (parameter, j,
3860                                TREE_VEC_LENGTH (tparms),
3861                                targs);
3862         }
3863
3864       /* Now fix up the type of the template template parm.  */
3865
3866       t = fixup_template_type_parm_type (TREE_TYPE (parm), num_parms);
3867       TREE_TYPE (parm) = t;
3868
3869       TREE_VEC_ELT (fixedup_args, idx) =
3870         template_parm_to_arg (parm_desc);
3871     }
3872   else if (TREE_CODE (parm) == PARM_DECL)
3873     {
3874       /* PARM is a non-type template parameter. We need to:
3875
3876        * Fix up its TEMPLATE_PARM_INDEX to make it carry the
3877        proper number of sibling parameters.
3878
3879        * Make lookups of the template parameter return a reference
3880        to the fixed-up index. No lookup should return references
3881        to the former index anymore.
3882
3883        * Substitute the template parms that got fixed up so far
3884
3885        * into the type of PARM.  */
3886
3887       tree index = DECL_INITIAL (parm);
3888
3889       /* PUSHED_DECL is the decl added to the symbol table with
3890          the name of the parameter. E,g:
3891              
3892          template<class T, T u> //#0
3893          auto my_function(T t) -> decltype(u); //#1
3894
3895          Here, when looking up u at //#1, we get the decl of u
3896          resulting from the declaration in #0. This is what
3897          PUSHED_DECL is. We need to replace the reference to the
3898          old TEMPLATE_PARM_INDEX carried by PUSHED_DECL by the
3899          fixed-up TEMPLATE_PARM_INDEX.  */
3900       tree pushed_decl = TEMPLATE_PARM_DECL (index);
3901
3902       /* Let's fix up the TEMPLATE_PARM_INDEX then. Note that we must
3903          fixup the type of PUSHED_DECL as well and luckily
3904          fixup_template_parm_index does it for us too.  */
3905       tree fixed_up_index =
3906         fixup_template_parm_index (index, arglist, num_parms);
3907
3908       DECL_INITIAL (pushed_decl) = DECL_INITIAL (parm) = fixed_up_index;
3909
3910       /* Add this fixed up PARM to the template parms we've fixed
3911          up so far and use that to substitute the fixed-up
3912          template parms into the type of PARM.  */
3913       TREE_VEC_ELT (fixedup_args, idx) =
3914         template_parm_to_arg (parm_desc);
3915       TREE_TYPE (parm) = tsubst (TREE_TYPE (parm), arglist,
3916                                  tf_none, NULL_TREE);
3917     }
3918
3919   TREE_PURPOSE (parm_desc) =
3920     tsubst_template_arg (TREE_PURPOSE (parm_desc),
3921                          arglist, tf_none, parm);
3922
3923   pop_deferring_access_checks ();
3924 }
3925
3926 /* Walk the current template parms and properly compute the canonical
3927    types of the dependent types created during
3928    cp_parser_template_parameter_list.  */
3929
3930 void
3931 fixup_template_parms (void)
3932 {
3933   tree arglist;
3934   tree parameter_vec;
3935   tree fixedup_args;
3936   int i, num_parms;
3937
3938   parameter_vec = INNERMOST_TEMPLATE_PARMS (current_template_parms);
3939   if (parameter_vec == NULL_TREE)
3940     return;
3941
3942   num_parms = TREE_VEC_LENGTH (parameter_vec);
3943
3944   /* This vector contains the current innermost template parms that
3945      have been fixed up so far.  The form of FIXEDUP_ARGS is suitable
3946      to be passed to tsubst* functions as their ARGS argument.  */
3947   fixedup_args = make_tree_vec (num_parms);
3948
3949   /* This vector contains the full set of template parms in a form
3950      suitable to be passed to substs functions as their ARGS
3951      argument.  */
3952   arglist = current_template_args ();
3953   arglist = add_outermost_template_args (arglist, fixedup_args);
3954
3955   /* Let's do the proper fixup now.  */
3956   for (i = 0; i < num_parms; ++i)
3957     fixup_template_parm (TREE_VEC_ELT (parameter_vec, i),
3958                          i, num_parms, arglist);
3959 }
3960
3961 /* end_template_decl is called after a template declaration is seen.  */
3962
3963 void
3964 end_template_decl (void)
3965 {
3966   reset_specialization ();
3967
3968   if (! processing_template_decl)
3969     return;
3970
3971   /* This matches the pushlevel in begin_template_parm_list.  */
3972   finish_scope ();
3973
3974   --processing_template_decl;
3975   current_template_parms = TREE_CHAIN (current_template_parms);
3976 }
3977
3978 /* Takes a TREE_LIST representing a template parameter and convert it
3979    into an argument suitable to be passed to the type substitution
3980    functions.  Note that If the TREE_LIST contains an error_mark
3981    node, the returned argument is error_mark_node.  */
3982
3983 static tree
3984 template_parm_to_arg (tree t)
3985 {
3986
3987   if (t == NULL_TREE
3988       || TREE_CODE (t) != TREE_LIST)
3989     return t;
3990
3991   if (error_operand_p (TREE_VALUE (t)))
3992     return error_mark_node;
3993
3994   t = TREE_VALUE (t);
3995
3996   if (TREE_CODE (t) == TYPE_DECL
3997       || TREE_CODE (t) == TEMPLATE_DECL)
3998     {
3999       t = TREE_TYPE (t);
4000
4001       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
4002         {
4003           /* Turn this argument into a TYPE_ARGUMENT_PACK
4004              with a single element, which expands T.  */
4005           tree vec = make_tree_vec (1);
4006 #ifdef ENABLE_CHECKING
4007           SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT
4008             (vec, TREE_VEC_LENGTH (vec));
4009 #endif
4010           TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
4011
4012           t = cxx_make_type (TYPE_ARGUMENT_PACK);
4013           SET_ARGUMENT_PACK_ARGS (t, vec);
4014         }
4015     }
4016   else
4017     {
4018       t = DECL_INITIAL (t);
4019
4020       if (TEMPLATE_PARM_PARAMETER_PACK (t))
4021         {
4022           /* Turn this argument into a NONTYPE_ARGUMENT_PACK
4023              with a single element, which expands T.  */
4024           tree vec = make_tree_vec (1);
4025           tree type = TREE_TYPE (TEMPLATE_PARM_DECL (t));
4026 #ifdef ENABLE_CHECKING
4027           SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT
4028             (vec, TREE_VEC_LENGTH (vec));
4029 #endif
4030           TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
4031
4032           t  = make_node (NONTYPE_ARGUMENT_PACK);
4033           SET_ARGUMENT_PACK_ARGS (t, vec);
4034           TREE_TYPE (t) = type;
4035         }
4036     }
4037   return t;
4038 }
4039
4040 /* This function returns TRUE if PARM_PACK is a template parameter
4041    pack and if ARG_PACK is what template_parm_to_arg returned when
4042    passed PARM_PACK.  */
4043
4044 static bool
4045 arg_from_parm_pack_p (tree arg_pack, tree parm_pack)
4046 {
4047   /* For clarity in the comments below let's use the representation
4048      argument_pack<elements>' to denote an argument pack and its
4049      elements.
4050
4051      In the 'if' block below, we want to detect cases where
4052      ARG_PACK is argument_pack<PARM_PACK...>.  I.e, we want to
4053      check if ARG_PACK is an argument pack which sole element is
4054      the expansion of PARM_PACK.  That argument pack is typically
4055      created by template_parm_to_arg when passed a parameter
4056      pack.  */
4057
4058   if (arg_pack
4059       && TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack)) == 1
4060       && PACK_EXPANSION_P (TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0)))
4061     {
4062       tree expansion = TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0);
4063       tree pattern = PACK_EXPANSION_PATTERN (expansion);
4064       /* So we have an argument_pack<P...>.  We want to test if P
4065          is actually PARM_PACK.  We will not use cp_tree_equal to
4066          test P and PARM_PACK because during type fixup (by
4067          fixup_template_parm) P can be a pre-fixup version of a
4068          type and PARM_PACK be its post-fixup version.
4069          cp_tree_equal would consider them as different even
4070          though we would want to consider them compatible for our
4071          precise purpose here.
4072
4073          Thus we are going to consider that P and PARM_PACK are
4074          compatible if they have the same DECL.  */
4075       if ((/* If ARG_PACK is a type parameter pack named by the
4076               same DECL as parm_pack ...  */
4077            (TYPE_P (pattern)
4078             && TYPE_P (parm_pack)
4079             && TYPE_NAME (pattern) == TYPE_NAME (parm_pack))
4080            /* ... or if PARM_PACK is a non-type parameter named by the
4081               same DECL as ARG_PACK.  Note that PARM_PACK being a
4082               non-type parameter means it's either a PARM_DECL or a
4083               TEMPLATE_PARM_INDEX.  */
4084            || (TREE_CODE (pattern) == TEMPLATE_PARM_INDEX
4085                && ((TREE_CODE (parm_pack) == PARM_DECL
4086                     && (TEMPLATE_PARM_DECL (pattern)
4087                         == TEMPLATE_PARM_DECL (DECL_INITIAL (parm_pack))))
4088                    || (TREE_CODE (parm_pack) == TEMPLATE_PARM_INDEX
4089                        && (TEMPLATE_PARM_DECL (pattern)
4090                            == TEMPLATE_PARM_DECL (parm_pack))))))
4091           && template_parameter_pack_p (pattern))
4092         return true;
4093     }
4094   return false;
4095 }
4096
4097 /* Within the declaration of a template, return all levels of template
4098    parameters that apply.  The template parameters are represented as
4099    a TREE_VEC, in the form documented in cp-tree.h for template
4100    arguments.  */
4101
4102 static tree
4103 current_template_args (void)
4104 {
4105   tree header;
4106   tree args = NULL_TREE;
4107   int length = TMPL_PARMS_DEPTH (current_template_parms);
4108   int l = length;
4109
4110   /* If there is only one level of template parameters, we do not
4111      create a TREE_VEC of TREE_VECs.  Instead, we return a single
4112      TREE_VEC containing the arguments.  */
4113   if (length > 1)
4114     args = make_tree_vec (length);
4115
4116   for (header = current_template_parms; header; header = TREE_CHAIN (header))
4117     {
4118       tree a = copy_node (TREE_VALUE (header));
4119       int i;
4120
4121       TREE_TYPE (a) = NULL_TREE;
4122       for (i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
4123         TREE_VEC_ELT (a, i) = template_parm_to_arg (TREE_VEC_ELT (a, i));
4124
4125 #ifdef ENABLE_CHECKING
4126       SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (a, TREE_VEC_LENGTH (a));
4127 #endif
4128
4129       if (length > 1)
4130         TREE_VEC_ELT (args, --l) = a;
4131       else
4132         args = a;
4133     }
4134
4135     if (length > 1 && TREE_VEC_ELT (args, 0) == NULL_TREE)
4136       /* This can happen for template parms of a template template
4137          parameter, e.g:
4138
4139          template<template<class T, class U> class TT> struct S;
4140
4141          Consider the level of the parms of TT; T and U both have
4142          level 2; TT has no template parm of level 1. So in this case
4143          the first element of full_template_args is NULL_TREE. If we
4144          leave it like this TMPL_ARG_DEPTH on args returns 1 instead
4145          of 2. This will make tsubst wrongly consider that T and U
4146          have level 1. Instead, let's create a dummy vector as the
4147          first element of full_template_args so that TMPL_ARG_DEPTH
4148          returns the correct depth for args.  */
4149       TREE_VEC_ELT (args, 0) = make_tree_vec (1);
4150   return args;
4151 }
4152
4153 /* Update the declared TYPE by doing any lookups which were thought to be
4154    dependent, but are not now that we know the SCOPE of the declarator.  */
4155
4156 tree
4157 maybe_update_decl_type (tree orig_type, tree scope)
4158 {
4159   tree type = orig_type;
4160
4161   if (type == NULL_TREE)
4162     return type;
4163
4164   if (TREE_CODE (orig_type) == TYPE_DECL)
4165     type = TREE_TYPE (type);
4166
4167   if (scope && TYPE_P (scope) && dependent_type_p (scope)
4168       && dependent_type_p (type)
4169       /* Don't bother building up the args in this case.  */
4170       && TREE_CODE (type) != TEMPLATE_TYPE_PARM)
4171     {
4172       /* tsubst in the args corresponding to the template parameters,
4173          including auto if present.  Most things will be unchanged, but
4174          make_typename_type and tsubst_qualified_id will resolve
4175          TYPENAME_TYPEs and SCOPE_REFs that were previously dependent.  */
4176       tree args = current_template_args ();
4177       tree auto_node = type_uses_auto (type);
4178       tree pushed;
4179       if (auto_node)
4180         {
4181           tree auto_vec = make_tree_vec (1);
4182           TREE_VEC_ELT (auto_vec, 0) = auto_node;
4183           args = add_to_template_args (args, auto_vec);
4184         }
4185       pushed = push_scope (scope);
4186       type = tsubst (type, args, tf_warning_or_error, NULL_TREE);
4187       if (pushed)
4188         pop_scope (scope);
4189     }
4190
4191   if (type == error_mark_node)
4192     return orig_type;
4193
4194   if (TREE_CODE (orig_type) == TYPE_DECL)
4195     {
4196       if (same_type_p (type, TREE_TYPE (orig_type)))
4197         type = orig_type;
4198       else
4199         type = TYPE_NAME (type);
4200     }
4201   return type;
4202 }
4203
4204 /* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
4205    template PARMS.  If MEMBER_TEMPLATE_P is true, the new template is
4206    a member template.  Used by push_template_decl below.  */
4207
4208 static tree
4209 build_template_decl (tree decl, tree parms, bool member_template_p)
4210 {
4211   tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
4212   DECL_TEMPLATE_PARMS (tmpl) = parms;
4213   DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
4214   DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
4215   DECL_MEMBER_TEMPLATE_P (tmpl) = member_template_p;
4216
4217   return tmpl;
4218 }
4219
4220 struct template_parm_data
4221 {
4222   /* The level of the template parameters we are currently
4223      processing.  */
4224   int level;
4225
4226   /* The index of the specialization argument we are currently
4227      processing.  */
4228   int current_arg;
4229
4230   /* An array whose size is the number of template parameters.  The
4231      elements are nonzero if the parameter has been used in any one
4232      of the arguments processed so far.  */
4233   int* parms;
4234
4235   /* An array whose size is the number of template arguments.  The
4236      elements are nonzero if the argument makes use of template
4237      parameters of this level.  */
4238   int* arg_uses_template_parms;
4239 };
4240
4241 /* Subroutine of push_template_decl used to see if each template
4242    parameter in a partial specialization is used in the explicit
4243    argument list.  If T is of the LEVEL given in DATA (which is
4244    treated as a template_parm_data*), then DATA->PARMS is marked
4245    appropriately.  */
4246
4247 static int
4248 mark_template_parm (tree t, void* data)
4249 {
4250   int level;
4251   int idx;
4252   struct template_parm_data* tpd = (struct template_parm_data*) data;
4253
4254   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
4255     {
4256       level = TEMPLATE_PARM_LEVEL (t);
4257       idx = TEMPLATE_PARM_IDX (t);
4258     }
4259   else
4260     {
4261       level = TEMPLATE_TYPE_LEVEL (t);
4262       idx = TEMPLATE_TYPE_IDX (t);
4263     }
4264
4265   if (level == tpd->level)
4266     {
4267       tpd->parms[idx] = 1;
4268       tpd->arg_uses_template_parms[tpd->current_arg] = 1;
4269     }
4270
4271   /* Return zero so that for_each_template_parm will continue the
4272      traversal of the tree; we want to mark *every* template parm.  */
4273   return 0;
4274 }
4275
4276 /* Process the partial specialization DECL.  */
4277
4278 static tree
4279 process_partial_specialization (tree decl)
4280 {
4281   tree type = TREE_TYPE (decl);
4282   tree maintmpl = CLASSTYPE_TI_TEMPLATE (type);
4283   tree specargs = CLASSTYPE_TI_ARGS (type);
4284   tree inner_args = INNERMOST_TEMPLATE_ARGS (specargs);
4285   tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
4286   tree inner_parms;
4287   tree inst;
4288   int nargs = TREE_VEC_LENGTH (inner_args);
4289   int ntparms;
4290   int  i;
4291   bool did_error_intro = false;
4292   struct template_parm_data tpd;
4293   struct template_parm_data tpd2;
4294
4295   gcc_assert (current_template_parms);
4296
4297   inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
4298   ntparms = TREE_VEC_LENGTH (inner_parms);
4299
4300   /* We check that each of the template parameters given in the
4301      partial specialization is used in the argument list to the
4302      specialization.  For example:
4303
4304        template <class T> struct S;
4305        template <class T> struct S<T*>;
4306
4307      The second declaration is OK because `T*' uses the template
4308      parameter T, whereas
4309
4310        template <class T> struct S<int>;
4311
4312      is no good.  Even trickier is:
4313
4314        template <class T>
4315        struct S1
4316        {
4317           template <class U>
4318           struct S2;
4319           template <class U>
4320           struct S2<T>;
4321        };
4322
4323      The S2<T> declaration is actually invalid; it is a
4324      full-specialization.  Of course,
4325
4326           template <class U>
4327           struct S2<T (*)(U)>;
4328
4329      or some such would have been OK.  */
4330   tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
4331   tpd.parms = XALLOCAVEC (int, ntparms);
4332   memset (tpd.parms, 0, sizeof (int) * ntparms);
4333
4334   tpd.arg_uses_template_parms = XALLOCAVEC (int, nargs);
4335   memset (tpd.arg_uses_template_parms, 0, sizeof (int) * nargs);
4336   for (i = 0; i < nargs; ++i)
4337     {
4338       tpd.current_arg = i;
4339       for_each_template_parm (TREE_VEC_ELT (inner_args, i),
4340                               &mark_template_parm,
4341                               &tpd,
4342                               NULL,
4343                               /*include_nondeduced_p=*/false);
4344     }
4345   for (i = 0; i < ntparms; ++i)
4346     if (tpd.parms[i] == 0)
4347       {
4348         /* One of the template parms was not used in the
4349            specialization.  */
4350         if (!did_error_intro)
4351           {
4352             error ("template parameters not used in partial specialization:");
4353             did_error_intro = true;
4354           }
4355
4356         error ("        %qD", TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
4357       }
4358
4359   if (did_error_intro)
4360     return error_mark_node;
4361
4362   /* [temp.class.spec]
4363
4364      The argument list of the specialization shall not be identical to
4365      the implicit argument list of the primary template.  */
4366   if (comp_template_args
4367       (inner_args,
4368        INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE
4369                                                    (maintmpl)))))
4370     error ("partial specialization %qT does not specialize any template arguments", type);
4371
4372   /* [temp.class.spec]
4373
4374      A partially specialized non-type argument expression shall not
4375      involve template parameters of the partial specialization except
4376      when the argument expression is a simple identifier.
4377
4378      The type of a template parameter corresponding to a specialized
4379      non-type argument shall not be dependent on a parameter of the
4380      specialization. 
4381
4382      Also, we verify that pack expansions only occur at the
4383      end of the argument list.  */
4384   gcc_assert (nargs == DECL_NTPARMS (maintmpl));
4385   tpd2.parms = 0;
4386   for (i = 0; i < nargs; ++i)
4387     {
4388       tree parm = TREE_VALUE (TREE_VEC_ELT (main_inner_parms, i));
4389       tree arg = TREE_VEC_ELT (inner_args, i);
4390       tree packed_args = NULL_TREE;
4391       int j, len = 1;
4392
4393       if (ARGUMENT_PACK_P (arg))
4394         {
4395           /* Extract the arguments from the argument pack. We'll be
4396              iterating over these in the following loop.  */
4397           packed_args = ARGUMENT_PACK_ARGS (arg);
4398           len = TREE_VEC_LENGTH (packed_args);
4399         }
4400
4401       for (j = 0; j < len; j++)
4402         {
4403           if (packed_args)
4404             /* Get the Jth argument in the parameter pack.  */
4405             arg = TREE_VEC_ELT (packed_args, j);
4406
4407           if (PACK_EXPANSION_P (arg))
4408             {
4409               /* Pack expansions must come at the end of the
4410                  argument list.  */
4411               if ((packed_args && j < len - 1)
4412                   || (!packed_args && i < nargs - 1))
4413                 {
4414                   if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
4415                     error ("parameter pack argument %qE must be at the "
4416                            "end of the template argument list", arg);
4417                   else
4418                     error ("parameter pack argument %qT must be at the "
4419                            "end of the template argument list", arg);
4420                 }
4421             }
4422
4423           if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
4424             /* We only care about the pattern.  */
4425             arg = PACK_EXPANSION_PATTERN (arg);
4426
4427           if (/* These first two lines are the `non-type' bit.  */
4428               !TYPE_P (arg)
4429               && TREE_CODE (arg) != TEMPLATE_DECL
4430               /* This next line is the `argument expression is not just a
4431                  simple identifier' condition and also the `specialized
4432                  non-type argument' bit.  */
4433               && TREE_CODE (arg) != TEMPLATE_PARM_INDEX)
4434             {
4435               if ((!packed_args && tpd.arg_uses_template_parms[i])
4436                   || (packed_args && uses_template_parms (arg)))
4437                 error ("template argument %qE involves template parameter(s)",
4438                        arg);
4439               else 
4440                 {
4441                   /* Look at the corresponding template parameter,
4442                      marking which template parameters its type depends
4443                      upon.  */
4444                   tree type = TREE_TYPE (parm);
4445
4446                   if (!tpd2.parms)
4447                     {
4448                       /* We haven't yet initialized TPD2.  Do so now.  */
4449                       tpd2.arg_uses_template_parms = XALLOCAVEC (int, nargs);
4450                       /* The number of parameters here is the number in the
4451                          main template, which, as checked in the assertion
4452                          above, is NARGS.  */
4453                       tpd2.parms = XALLOCAVEC (int, nargs);
4454                       tpd2.level = 
4455                         TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
4456                     }
4457
4458                   /* Mark the template parameters.  But this time, we're
4459                      looking for the template parameters of the main
4460                      template, not in the specialization.  */
4461                   tpd2.current_arg = i;
4462                   tpd2.arg_uses_template_parms[i] = 0;
4463                   memset (tpd2.parms, 0, sizeof (int) * nargs);
4464                   for_each_template_parm (type,
4465                                           &mark_template_parm,
4466                                           &tpd2,
4467                                           NULL,
4468                                           /*include_nondeduced_p=*/false);
4469
4470                   if (tpd2.arg_uses_template_parms [i])
4471                     {
4472                       /* The type depended on some template parameters.
4473                          If they are fully specialized in the
4474                          specialization, that's OK.  */
4475                       int j;
4476                       int count = 0;
4477                       for (j = 0; j < nargs; ++j)
4478                         if (tpd2.parms[j] != 0
4479                             && tpd.arg_uses_template_parms [j])
4480                           ++count;
4481                       if (count != 0)
4482                         error_n (input_location, count,
4483                                  "type %qT of template argument %qE depends "
4484                                  "on a template parameter",
4485                                  "type %qT of template argument %qE depends "
4486                                  "on template parameters",
4487                                  type,
4488                                  arg);
4489                     }
4490                 }
4491             }
4492         }
4493     }
4494
4495   /* We should only get here once.  */
4496   gcc_assert (!COMPLETE_TYPE_P (type));
4497
4498   DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
4499     = tree_cons (specargs, inner_parms,
4500                  DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
4501   TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
4502
4503   for (inst = DECL_TEMPLATE_INSTANTIATIONS (maintmpl); inst;
4504        inst = TREE_CHAIN (inst))
4505     {
4506       tree inst_type = TREE_VALUE (inst);
4507       if (COMPLETE_TYPE_P (inst_type)
4508           && CLASSTYPE_IMPLICIT_INSTANTIATION (inst_type))
4509         {
4510           tree spec = most_specialized_class (inst_type, maintmpl, tf_none);
4511           if (spec && TREE_TYPE (spec) == type)
4512             permerror (input_location,
4513                        "partial specialization of %qT after instantiation "
4514                        "of %qT", type, inst_type);
4515         }
4516     }
4517
4518   return decl;
4519 }
4520
4521 /* Check that a template declaration's use of default arguments and
4522    parameter packs is not invalid.  Here, PARMS are the template
4523    parameters.  IS_PRIMARY is nonzero if DECL is the thing declared by
4524    a primary template.  IS_PARTIAL is nonzero if DECL is a partial
4525    specialization.
4526    
4527
4528    IS_FRIEND_DECL is nonzero if DECL is a friend function template
4529    declaration (but not a definition); 1 indicates a declaration, 2
4530    indicates a redeclaration. When IS_FRIEND_DECL=2, no errors are
4531    emitted for extraneous default arguments.
4532
4533    Returns TRUE if there were no errors found, FALSE otherwise. */
4534
4535 bool
4536 check_default_tmpl_args (tree decl, tree parms, int is_primary, 
4537                          int is_partial, int is_friend_decl)
4538 {
4539   const char *msg;
4540   int last_level_to_check;
4541   tree parm_level;
4542   bool no_errors = true;
4543
4544   /* [temp.param]
4545
4546      A default template-argument shall not be specified in a
4547      function template declaration or a function template definition, nor
4548      in the template-parameter-list of the definition of a member of a
4549      class template.  */
4550
4551   if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
4552     /* You can't have a function template declaration in a local
4553        scope, nor you can you define a member of a class template in a
4554        local scope.  */
4555     return true;
4556
4557   if (current_class_type
4558       && !TYPE_BEING_DEFINED (current_class_type)
4559       && DECL_LANG_SPECIFIC (decl)
4560       && DECL_DECLARES_FUNCTION_P (decl)
4561       /* If this is either a friend defined in the scope of the class
4562          or a member function.  */
4563       && (DECL_FUNCTION_MEMBER_P (decl)
4564           ? same_type_p (DECL_CONTEXT (decl), current_class_type)
4565           : DECL_FRIEND_CONTEXT (decl)
4566           ? same_type_p (DECL_FRIEND_CONTEXT (decl), current_class_type)
4567           : false)
4568       /* And, if it was a member function, it really was defined in
4569          the scope of the class.  */
4570       && (!DECL_FUNCTION_MEMBER_P (decl)
4571           || DECL_INITIALIZED_IN_CLASS_P (decl)))
4572     /* We already checked these parameters when the template was
4573        declared, so there's no need to do it again now.  This function
4574        was defined in class scope, but we're processing it's body now
4575        that the class is complete.  */
4576     return true;
4577
4578   /* Core issue 226 (C++0x only): the following only applies to class
4579      templates.  */
4580   if ((cxx_dialect == cxx98) || TREE_CODE (decl) != FUNCTION_DECL)
4581     {
4582       /* [temp.param]
4583
4584          If a template-parameter has a default template-argument, all
4585          subsequent template-parameters shall have a default
4586          template-argument supplied.  */
4587       for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
4588         {
4589           tree inner_parms = TREE_VALUE (parm_level);
4590           int ntparms = TREE_VEC_LENGTH (inner_parms);
4591           int seen_def_arg_p = 0;
4592           int i;
4593
4594           for (i = 0; i < ntparms; ++i)
4595             {
4596               tree parm = TREE_VEC_ELT (inner_parms, i);
4597
4598               if (parm == error_mark_node)
4599                 continue;
4600
4601               if (TREE_PURPOSE (parm))
4602                 seen_def_arg_p = 1;
4603               else if (seen_def_arg_p
4604                        && !template_parameter_pack_p (TREE_VALUE (parm)))
4605                 {
4606                   error ("no default argument for %qD", TREE_VALUE (parm));
4607                   /* For better subsequent error-recovery, we indicate that
4608                      there should have been a default argument.  */
4609                   TREE_PURPOSE (parm) = error_mark_node;
4610                   no_errors = false;
4611                 }
4612               else if (is_primary
4613                        && !is_partial
4614                        && !is_friend_decl
4615                        /* Don't complain about an enclosing partial
4616                           specialization.  */
4617                        && parm_level == parms
4618                        && TREE_CODE (decl) == TYPE_DECL
4619                        && i < ntparms - 1
4620                        && template_parameter_pack_p (TREE_VALUE (parm)))
4621                 {
4622                   /* A primary class template can only have one
4623                      parameter pack, at the end of the template
4624                      parameter list.  */
4625
4626                   if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL)
4627                     error ("parameter pack %qE must be at the end of the"
4628                            " template parameter list", TREE_VALUE (parm));
4629                   else
4630                     error ("parameter pack %qT must be at the end of the"
4631                            " template parameter list", 
4632                            TREE_TYPE (TREE_VALUE (parm)));
4633
4634                   TREE_VALUE (TREE_VEC_ELT (inner_parms, i)) 
4635                     = error_mark_node;
4636                   no_errors = false;
4637                 }
4638             }
4639         }
4640     }
4641
4642   if (((cxx_dialect == cxx98) && TREE_CODE (decl) != TYPE_DECL)
4643       || is_partial 
4644       || !is_primary
4645       || is_friend_decl)
4646     /* For an ordinary class template, default template arguments are
4647        allowed at the innermost level, e.g.:
4648          template <class T = int>
4649          struct S {};
4650        but, in a partial specialization, they're not allowed even
4651        there, as we have in [temp.class.spec]:
4652
4653          The template parameter list of a specialization shall not
4654          contain default template argument values.
4655
4656        So, for a partial specialization, or for a function template
4657        (in C++98/C++03), we look at all of them.  */
4658     ;
4659   else
4660     /* But, for a primary class template that is not a partial
4661        specialization we look at all template parameters except the
4662        innermost ones.  */
4663     parms = TREE_CHAIN (parms);
4664
4665   /* Figure out what error message to issue.  */
4666   if (is_friend_decl == 2)
4667     msg = G_("default template arguments may not be used in function template "
4668              "friend re-declaration");
4669   else if (is_friend_decl)
4670     msg = G_("default template arguments may not be used in function template "
4671              "friend declarations");
4672   else if (TREE_CODE (decl) == FUNCTION_DECL && (cxx_dialect == cxx98))
4673     msg = G_("default template arguments may not be used in function templates "
4674              "without -std=c++11 or -std=gnu++11");
4675   else if (is_partial)
4676     msg = G_("default template arguments may not be used in "
4677              "partial specializations");
4678   else
4679     msg = G_("default argument for template parameter for class enclosing %qD");
4680
4681   if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
4682     /* If we're inside a class definition, there's no need to
4683        examine the parameters to the class itself.  On the one
4684        hand, they will be checked when the class is defined, and,
4685        on the other, default arguments are valid in things like:
4686          template <class T = double>
4687          struct S { template <class U> void f(U); };
4688        Here the default argument for `S' has no bearing on the
4689        declaration of `f'.  */
4690     last_level_to_check = template_class_depth (current_class_type) + 1;
4691   else
4692     /* Check everything.  */
4693     last_level_to_check = 0;
4694
4695   for (parm_level = parms;
4696        parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check;
4697        parm_level = TREE_CHAIN (parm_level))
4698     {
4699       tree inner_parms = TREE_VALUE (parm_level);
4700       int i;
4701       int ntparms;
4702
4703       ntparms = TREE_VEC_LENGTH (inner_parms);
4704       for (i = 0; i < ntparms; ++i)
4705         {
4706           if (TREE_VEC_ELT (inner_parms, i) == error_mark_node)
4707             continue;
4708
4709           if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
4710             {
4711               if (msg)
4712                 {
4713                   no_errors = false;
4714                   if (is_friend_decl == 2)
4715                     return no_errors;
4716
4717                   error (msg, decl);
4718                   msg = 0;
4719                 }
4720
4721               /* Clear out the default argument so that we are not
4722                  confused later.  */
4723               TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
4724             }
4725         }
4726
4727       /* At this point, if we're still interested in issuing messages,
4728          they must apply to classes surrounding the object declared.  */
4729       if (msg)
4730         msg = G_("default argument for template parameter for class "
4731                  "enclosing %qD");
4732     }
4733
4734   return no_errors;
4735 }
4736
4737 /* Worker for push_template_decl_real, called via
4738    for_each_template_parm.  DATA is really an int, indicating the
4739    level of the parameters we are interested in.  If T is a template
4740    parameter of that level, return nonzero.  */
4741
4742 static int
4743 template_parm_this_level_p (tree t, void* data)
4744 {
4745   int this_level = *(int *)data;
4746   int level;
4747
4748   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
4749     level = TEMPLATE_PARM_LEVEL (t);
4750   else
4751     level = TEMPLATE_TYPE_LEVEL (t);
4752   return level == this_level;
4753 }
4754
4755 /* Creates a TEMPLATE_DECL for the indicated DECL using the template
4756    parameters given by current_template_args, or reuses a
4757    previously existing one, if appropriate.  Returns the DECL, or an
4758    equivalent one, if it is replaced via a call to duplicate_decls.
4759
4760    If IS_FRIEND is true, DECL is a friend declaration.  */
4761
4762 tree
4763 push_template_decl_real (tree decl, bool is_friend)
4764 {
4765   tree tmpl;
4766   tree args;
4767   tree info;
4768   tree ctx;
4769   int primary;
4770   int is_partial;
4771   int new_template_p = 0;
4772   /* True if the template is a member template, in the sense of
4773      [temp.mem].  */
4774   bool member_template_p = false;
4775
4776   if (decl == error_mark_node || !current_template_parms)
4777     return error_mark_node;
4778
4779   /* See if this is a partial specialization.  */
4780   is_partial = (DECL_IMPLICIT_TYPEDEF_P (decl)
4781                 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
4782                 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)));
4783
4784   if (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl))
4785     is_friend = true;
4786
4787   if (is_friend)
4788     /* For a friend, we want the context of the friend function, not
4789        the type of which it is a friend.  */
4790     ctx = CP_DECL_CONTEXT (decl);
4791   else if (CP_DECL_CONTEXT (decl)
4792            && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
4793     /* In the case of a virtual function, we want the class in which
4794        it is defined.  */
4795     ctx = CP_DECL_CONTEXT (decl);
4796   else
4797     /* Otherwise, if we're currently defining some class, the DECL
4798        is assumed to be a member of the class.  */
4799     ctx = current_scope ();
4800
4801   if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
4802     ctx = NULL_TREE;
4803
4804   if (!DECL_CONTEXT (decl))
4805     DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
4806
4807   /* See if this is a primary template.  */
4808   if (is_friend && ctx)
4809     /* A friend template that specifies a class context, i.e.
4810          template <typename T> friend void A<T>::f();
4811        is not primary.  */
4812     primary = 0;
4813   else
4814     primary = template_parm_scope_p ();
4815
4816   if (primary)
4817     {
4818       if (DECL_CLASS_SCOPE_P (decl))
4819         member_template_p = true;
4820       if (TREE_CODE (decl) == TYPE_DECL
4821           && ANON_AGGRNAME_P (DECL_NAME (decl)))
4822         {
4823           error ("template class without a name");
4824           return error_mark_node;
4825         }
4826       else if (TREE_CODE (decl) == FUNCTION_DECL)
4827         {
4828           if (DECL_DESTRUCTOR_P (decl))
4829             {
4830               /* [temp.mem]
4831
4832                  A destructor shall not be a member template.  */
4833               error ("destructor %qD declared as member template", decl);
4834               return error_mark_node;
4835             }
4836           if (NEW_DELETE_OPNAME_P (DECL_NAME (decl))
4837               && (!prototype_p (TREE_TYPE (decl))
4838                   || TYPE_ARG_TYPES (TREE_TYPE (decl)) == void_list_node
4839                   || !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
4840                   || (TREE_CHAIN (TYPE_ARG_TYPES ((TREE_TYPE (decl))))
4841                       == void_list_node)))
4842             {
4843               /* [basic.stc.dynamic.allocation]
4844
4845                  An allocation function can be a function
4846                  template. ... Template allocation functions shall
4847                  have two or more parameters.  */
4848               error ("invalid template declaration of %qD", decl);
4849               return error_mark_node;
4850             }
4851         }
4852       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
4853                && CLASS_TYPE_P (TREE_TYPE (decl)))
4854         /* OK */;
4855       else if (TREE_CODE (decl) == TYPE_DECL
4856                && TYPE_DECL_ALIAS_P (decl))
4857         /* alias-declaration */
4858         gcc_assert (!DECL_ARTIFICIAL (decl));
4859       else
4860         {
4861           error ("template declaration of %q#D", decl);
4862           return error_mark_node;
4863         }
4864     }
4865
4866   /* Check to see that the rules regarding the use of default
4867      arguments are not being violated.  */
4868   check_default_tmpl_args (decl, current_template_parms,
4869                            primary, is_partial, /*is_friend_decl=*/0);
4870
4871   /* Ensure that there are no parameter packs in the type of this
4872      declaration that have not been expanded.  */
4873   if (TREE_CODE (decl) == FUNCTION_DECL)
4874     {
4875       /* Check each of the arguments individually to see if there are
4876          any bare parameter packs.  */
4877       tree type = TREE_TYPE (decl);
4878       tree arg = DECL_ARGUMENTS (decl);
4879       tree argtype = TYPE_ARG_TYPES (type);
4880
4881       while (arg && argtype)
4882         {
4883           if (!FUNCTION_PARAMETER_PACK_P (arg)
4884               && check_for_bare_parameter_packs (TREE_TYPE (arg)))
4885             {
4886             /* This is a PARM_DECL that contains unexpanded parameter
4887                packs. We have already complained about this in the
4888                check_for_bare_parameter_packs call, so just replace
4889                these types with ERROR_MARK_NODE.  */
4890               TREE_TYPE (arg) = error_mark_node;
4891               TREE_VALUE (argtype) = error_mark_node;
4892             }
4893
4894           arg = DECL_CHAIN (arg);
4895           argtype = TREE_CHAIN (argtype);
4896         }
4897
4898       /* Check for bare parameter packs in the return type and the
4899          exception specifiers.  */
4900       if (check_for_bare_parameter_packs (TREE_TYPE (type)))
4901         /* Errors were already issued, set return type to int
4902            as the frontend doesn't expect error_mark_node as
4903            the return type.  */
4904         TREE_TYPE (type) = integer_type_node;
4905       if (check_for_bare_parameter_packs (TYPE_RAISES_EXCEPTIONS (type)))
4906         TYPE_RAISES_EXCEPTIONS (type) = NULL_TREE;
4907     }
4908   else if (check_for_bare_parameter_packs (TREE_TYPE (decl)))
4909     {
4910       TREE_TYPE (decl) = error_mark_node;
4911       return error_mark_node;
4912     }
4913
4914   if (is_partial)
4915     return process_partial_specialization (decl);
4916
4917   args = current_template_args ();
4918
4919   if (!ctx
4920       || TREE_CODE (ctx) == FUNCTION_DECL
4921       || (CLASS_TYPE_P (ctx) && TYPE_BEING_DEFINED (ctx))
4922       || (is_friend && !DECL_TEMPLATE_INFO (decl)))
4923     {
4924       if (DECL_LANG_SPECIFIC (decl)
4925           && DECL_TEMPLATE_INFO (decl)
4926           && DECL_TI_TEMPLATE (decl))
4927         tmpl = DECL_TI_TEMPLATE (decl);
4928       /* If DECL is a TYPE_DECL for a class-template, then there won't
4929          be DECL_LANG_SPECIFIC.  The information equivalent to
4930          DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead.  */
4931       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
4932                && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
4933                && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
4934         {
4935           /* Since a template declaration already existed for this
4936              class-type, we must be redeclaring it here.  Make sure
4937              that the redeclaration is valid.  */
4938           redeclare_class_template (TREE_TYPE (decl),
4939                                     current_template_parms);
4940           /* We don't need to create a new TEMPLATE_DECL; just use the
4941              one we already had.  */
4942           tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
4943         }
4944       else
4945         {
4946           tmpl = build_template_decl (decl, current_template_parms,
4947                                       member_template_p);
4948           new_template_p = 1;
4949
4950           if (DECL_LANG_SPECIFIC (decl)
4951               && DECL_TEMPLATE_SPECIALIZATION (decl))
4952             {
4953               /* A specialization of a member template of a template
4954                  class.  */
4955               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
4956               DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
4957               DECL_TEMPLATE_INFO (decl) = NULL_TREE;
4958             }
4959         }
4960     }
4961   else
4962     {
4963       tree a, t, current, parms;
4964       int i;
4965       tree tinfo = get_template_info (decl);
4966
4967       if (!tinfo)
4968         {
4969           error ("template definition of non-template %q#D", decl);
4970           return error_mark_node;
4971         }
4972
4973       tmpl = TI_TEMPLATE (tinfo);
4974
4975       if (DECL_FUNCTION_TEMPLATE_P (tmpl)
4976           && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
4977           && DECL_TEMPLATE_SPECIALIZATION (decl)
4978           && DECL_MEMBER_TEMPLATE_P (tmpl))
4979         {
4980           tree new_tmpl;
4981
4982           /* The declaration is a specialization of a member
4983              template, declared outside the class.  Therefore, the
4984              innermost template arguments will be NULL, so we
4985              replace them with the arguments determined by the
4986              earlier call to check_explicit_specialization.  */
4987           args = DECL_TI_ARGS (decl);
4988
4989           new_tmpl
4990             = build_template_decl (decl, current_template_parms,
4991                                    member_template_p);
4992           DECL_TEMPLATE_RESULT (new_tmpl) = decl;
4993           TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
4994           DECL_TI_TEMPLATE (decl) = new_tmpl;
4995           SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
4996           DECL_TEMPLATE_INFO (new_tmpl)
4997             = build_template_info (tmpl, args);
4998
4999           register_specialization (new_tmpl,
5000                                    most_general_template (tmpl),
5001                                    args,
5002                                    is_friend, 0);
5003           return decl;
5004         }
5005
5006       /* Make sure the template headers we got make sense.  */
5007
5008       parms = DECL_TEMPLATE_PARMS (tmpl);
5009       i = TMPL_PARMS_DEPTH (parms);
5010       if (TMPL_ARGS_DEPTH (args) != i)
5011         {
5012           error ("expected %d levels of template parms for %q#D, got %d",
5013                  i, decl, TMPL_ARGS_DEPTH (args));
5014         }
5015       else
5016         for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
5017           {
5018             a = TMPL_ARGS_LEVEL (args, i);
5019             t = INNERMOST_TEMPLATE_PARMS (parms);
5020
5021             if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
5022               {
5023                 if (current == decl)
5024                   error ("got %d template parameters for %q#D",
5025                          TREE_VEC_LENGTH (a), decl);
5026                 else
5027                   error ("got %d template parameters for %q#T",
5028                          TREE_VEC_LENGTH (a), current);
5029                 error ("  but %d required", TREE_VEC_LENGTH (t));
5030                 return error_mark_node;
5031               }
5032
5033             if (current == decl)
5034               current = ctx;
5035             else if (current == NULL_TREE)
5036               /* Can happen in erroneous input.  */
5037               break;
5038             else
5039               current = (TYPE_P (current)
5040                          ? TYPE_CONTEXT (current)
5041                          : DECL_CONTEXT (current));
5042           }
5043
5044       /* Check that the parms are used in the appropriate qualifying scopes
5045          in the declarator.  */
5046       if (!comp_template_args
5047           (TI_ARGS (tinfo),
5048            TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (tmpl)))))
5049         {
5050           error ("\
5051 template arguments to %qD do not match original template %qD",
5052                  decl, DECL_TEMPLATE_RESULT (tmpl));
5053           if (!uses_template_parms (TI_ARGS (tinfo)))
5054             inform (input_location, "use template<> for an explicit specialization");
5055           /* Avoid crash in import_export_decl.  */
5056           DECL_INTERFACE_KNOWN (decl) = 1;
5057           return error_mark_node;
5058         }
5059     }
5060
5061   DECL_TEMPLATE_RESULT (tmpl) = decl;
5062   TREE_TYPE (tmpl) = TREE_TYPE (decl);
5063
5064   /* Push template declarations for global functions and types.  Note
5065      that we do not try to push a global template friend declared in a
5066      template class; such a thing may well depend on the template
5067      parameters of the class.  */
5068   if (new_template_p && !ctx
5069       && !(is_friend && template_class_depth (current_class_type) > 0))
5070     {
5071       tmpl = pushdecl_namespace_level (tmpl, is_friend);
5072       if (tmpl == error_mark_node)
5073         return error_mark_node;
5074
5075       /* Hide template friend classes that haven't been declared yet.  */
5076       if (is_friend && TREE_CODE (decl) == TYPE_DECL)
5077         {
5078           DECL_ANTICIPATED (tmpl) = 1;
5079           DECL_FRIEND_P (tmpl) = 1;
5080         }
5081     }
5082
5083   if (primary)
5084     {
5085       tree parms = DECL_TEMPLATE_PARMS (tmpl);
5086       int i;
5087
5088       DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
5089       if (DECL_CONV_FN_P (tmpl))
5090         {
5091           int depth = TMPL_PARMS_DEPTH (parms);
5092
5093           /* It is a conversion operator. See if the type converted to
5094              depends on innermost template operands.  */
5095
5096           if (uses_template_parms_level (TREE_TYPE (TREE_TYPE (tmpl)),
5097                                          depth))
5098             DECL_TEMPLATE_CONV_FN_P (tmpl) = 1;
5099         }
5100
5101       /* Give template template parms a DECL_CONTEXT of the template
5102          for which they are a parameter.  */
5103       parms = INNERMOST_TEMPLATE_PARMS (parms);
5104       for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
5105         {
5106           tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
5107           if (TREE_CODE (parm) == TEMPLATE_DECL)
5108             DECL_CONTEXT (parm) = tmpl;
5109         }
5110     }
5111
5112   /* The DECL_TI_ARGS of DECL contains full set of arguments referring
5113      back to its most general template.  If TMPL is a specialization,
5114      ARGS may only have the innermost set of arguments.  Add the missing
5115      argument levels if necessary.  */
5116   if (DECL_TEMPLATE_INFO (tmpl))
5117     args = add_outermost_template_args (DECL_TI_ARGS (tmpl), args);
5118
5119   info = build_template_info (tmpl, args);
5120
5121   if (DECL_IMPLICIT_TYPEDEF_P (decl))
5122     SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
5123   else
5124     {
5125       if (primary && !DECL_LANG_SPECIFIC (decl))
5126         retrofit_lang_decl (decl);
5127       if (DECL_LANG_SPECIFIC (decl))
5128         DECL_TEMPLATE_INFO (decl) = info;
5129     }
5130
5131   return DECL_TEMPLATE_RESULT (tmpl);
5132 }
5133
5134 tree
5135 push_template_decl (tree decl)
5136 {
5137   return push_template_decl_real (decl, false);
5138 }
5139
5140 /* Called when a class template TYPE is redeclared with the indicated
5141    template PARMS, e.g.:
5142
5143      template <class T> struct S;
5144      template <class T> struct S {};  */
5145
5146 bool
5147 redeclare_class_template (tree type, tree parms)
5148 {
5149   tree tmpl;
5150   tree tmpl_parms;
5151   int i;
5152
5153   if (!TYPE_TEMPLATE_INFO (type))
5154     {
5155       error ("%qT is not a template type", type);
5156       return false;
5157     }
5158
5159   tmpl = TYPE_TI_TEMPLATE (type);
5160   if (!PRIMARY_TEMPLATE_P (tmpl))
5161     /* The type is nested in some template class.  Nothing to worry
5162        about here; there are no new template parameters for the nested
5163        type.  */
5164     return true;
5165
5166   if (!parms)
5167     {
5168       error ("template specifiers not specified in declaration of %qD",
5169              tmpl);
5170       return false;
5171     }
5172
5173   parms = INNERMOST_TEMPLATE_PARMS (parms);
5174   tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
5175
5176   if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
5177     {
5178       error_n (input_location, TREE_VEC_LENGTH (parms),
5179                "redeclared with %d template parameter",
5180                "redeclared with %d template parameters",
5181                TREE_VEC_LENGTH (parms));
5182       inform_n (input_location, TREE_VEC_LENGTH (tmpl_parms),
5183                 "previous declaration %q+D used %d template parameter",
5184                 "previous declaration %q+D used %d template parameters",
5185                 tmpl, TREE_VEC_LENGTH (tmpl_parms));
5186       return false;
5187     }
5188
5189   for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
5190     {
5191       tree tmpl_parm;
5192       tree parm;
5193       tree tmpl_default;
5194       tree parm_default;
5195
5196       if (TREE_VEC_ELT (tmpl_parms, i) == error_mark_node
5197           || TREE_VEC_ELT (parms, i) == error_mark_node)
5198         continue;
5199
5200       tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
5201       if (tmpl_parm == error_mark_node)
5202         return false;
5203
5204       parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
5205       tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
5206       parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
5207
5208       /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
5209          TEMPLATE_DECL.  */
5210       if (TREE_CODE (tmpl_parm) != TREE_CODE (parm)
5211           || (TREE_CODE (tmpl_parm) != TYPE_DECL
5212               && !same_type_p (TREE_TYPE (tmpl_parm), TREE_TYPE (parm)))
5213           || (TREE_CODE (tmpl_parm) != PARM_DECL
5214               && (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (tmpl_parm))
5215                   != TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm))))
5216           || (TREE_CODE (tmpl_parm) == PARM_DECL
5217               && (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (tmpl_parm))
5218                   != TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))))
5219         {
5220           error ("template parameter %q+#D", tmpl_parm);
5221           error ("redeclared here as %q#D", parm);
5222           return false;
5223         }
5224
5225       if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
5226         {
5227           /* We have in [temp.param]:
5228
5229              A template-parameter may not be given default arguments
5230              by two different declarations in the same scope.  */
5231           error_at (input_location, "redefinition of default argument for %q#D", parm);
5232           inform (DECL_SOURCE_LOCATION (tmpl_parm),
5233                   "original definition appeared here");
5234           return false;
5235         }
5236
5237       if (parm_default != NULL_TREE)
5238         /* Update the previous template parameters (which are the ones
5239            that will really count) with the new default value.  */
5240         TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
5241       else if (tmpl_default != NULL_TREE)
5242         /* Update the new parameters, too; they'll be used as the
5243            parameters for any members.  */
5244         TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
5245     }
5246
5247     return true;
5248 }
5249
5250 /* Simplify EXPR if it is a non-dependent expression.  Returns the
5251    (possibly simplified) expression.  */
5252
5253 static tree
5254 fold_non_dependent_expr_sfinae (tree expr, tsubst_flags_t complain)
5255 {
5256   if (expr == NULL_TREE)
5257     return NULL_TREE;
5258
5259   /* If we're in a template, but EXPR isn't value dependent, simplify
5260      it.  We're supposed to treat:
5261
5262        template <typename T> void f(T[1 + 1]);
5263        template <typename T> void f(T[2]);
5264
5265      as two declarations of the same function, for example.  */
5266   if (processing_template_decl
5267       && !type_dependent_expression_p (expr)
5268       && potential_constant_expression (expr)
5269       && !value_dependent_expression_p (expr))
5270     {
5271       HOST_WIDE_INT saved_processing_template_decl;
5272
5273       saved_processing_template_decl = processing_template_decl;
5274       processing_template_decl = 0;
5275       expr = tsubst_copy_and_build (expr,
5276                                     /*args=*/NULL_TREE,
5277                                     complain,
5278                                     /*in_decl=*/NULL_TREE,
5279                                     /*function_p=*/false,
5280                                     /*integral_constant_expression_p=*/true);
5281       processing_template_decl = saved_processing_template_decl;
5282     }
5283   return expr;
5284 }
5285
5286 tree
5287 fold_non_dependent_expr (tree expr)
5288 {
5289   return fold_non_dependent_expr_sfinae (expr, tf_error);
5290 }
5291
5292 /* Return TRUE iff T is a type alias, a TEMPLATE_DECL for an alias
5293    template declaration, or a TYPE_DECL for an alias declaration.  */
5294
5295 bool
5296 alias_type_or_template_p (tree t)
5297 {
5298   if (t == NULL_TREE)
5299     return false;
5300   return ((TREE_CODE (t) == TYPE_DECL && TYPE_DECL_ALIAS_P (t))
5301           || (TYPE_P (t)
5302               && TYPE_NAME (t)
5303               && TYPE_DECL_ALIAS_P (TYPE_NAME (t)))
5304           || DECL_ALIAS_TEMPLATE_P (t));
5305 }
5306
5307 /* Return TRUE iff is a specialization of an alias template.  */
5308
5309 bool
5310 alias_template_specialization_p (tree t)
5311 {
5312   if (t == NULL_TREE)
5313     return false;
5314   return (primary_template_instantiation_p (t)
5315           && DECL_ALIAS_TEMPLATE_P (TYPE_TI_TEMPLATE (t)));
5316 }
5317
5318 /* Subroutine of convert_nontype_argument. Converts EXPR to TYPE, which
5319    must be a function or a pointer-to-function type, as specified
5320    in [temp.arg.nontype]: disambiguate EXPR if it is an overload set,
5321    and check that the resulting function has external linkage.  */
5322
5323 static tree
5324 convert_nontype_argument_function (tree type, tree expr)
5325 {
5326   tree fns = expr;
5327   tree fn, fn_no_ptr;
5328   linkage_kind linkage;
5329
5330   fn = instantiate_type (type, fns, tf_none);
5331   if (fn == error_mark_node)
5332     return error_mark_node;
5333
5334   fn_no_ptr = fn;
5335   if (TREE_CODE (fn_no_ptr) == ADDR_EXPR)
5336     fn_no_ptr = TREE_OPERAND (fn_no_ptr, 0);
5337   if (BASELINK_P (fn_no_ptr))
5338     fn_no_ptr = BASELINK_FUNCTIONS (fn_no_ptr);
5339  
5340   /* [temp.arg.nontype]/1
5341
5342      A template-argument for a non-type, non-template template-parameter
5343      shall be one of:
5344      [...]
5345      -- the address of an object or function with external [C++11: or
5346         internal] linkage.  */
5347   linkage = decl_linkage (fn_no_ptr);
5348   if (cxx_dialect >= cxx0x ? linkage == lk_none : linkage != lk_external)
5349     {
5350       if (cxx_dialect >= cxx0x)
5351         error ("%qE is not a valid template argument for type %qT "
5352                "because %qD has no linkage",
5353                expr, type, fn_no_ptr);
5354       else
5355         error ("%qE is not a valid template argument for type %qT "
5356                "because %qD does not have external linkage",
5357                expr, type, fn_no_ptr);
5358       return NULL_TREE;
5359     }
5360
5361   return fn;
5362 }
5363
5364 /* Subroutine of convert_nontype_argument.
5365    Check if EXPR of type TYPE is a valid pointer-to-member constant.
5366    Emit an error otherwise.  */
5367
5368 static bool
5369 check_valid_ptrmem_cst_expr (tree type, tree expr,
5370                              tsubst_flags_t complain)
5371 {
5372   STRIP_NOPS (expr);
5373   if (expr && (null_ptr_cst_p (expr) || TREE_CODE (expr) == PTRMEM_CST))
5374     return true;
5375   if (cxx_dialect >= cxx0x && null_member_pointer_value_p (expr))
5376     return true;
5377   if (complain & tf_error)
5378     {
5379       error ("%qE is not a valid template argument for type %qT",
5380              expr, type);
5381       error ("it must be a pointer-to-member of the form %<&X::Y%>");
5382     }
5383   return false;
5384 }
5385
5386 /* Returns TRUE iff the address of OP is value-dependent.
5387
5388    14.6.2.4 [temp.dep.temp]:
5389    A non-integral non-type template-argument is dependent if its type is
5390    dependent or it has either of the following forms
5391      qualified-id
5392      & qualified-id
5393    and contains a nested-name-specifier which specifies a class-name that
5394    names a dependent type.
5395
5396    We generalize this to just say that the address of a member of a
5397    dependent class is value-dependent; the above doesn't cover the
5398    address of a static data member named with an unqualified-id.  */
5399
5400 static bool
5401 has_value_dependent_address (tree op)
5402 {
5403   /* We could use get_inner_reference here, but there's no need;
5404      this is only relevant for template non-type arguments, which
5405      can only be expressed as &id-expression.  */
5406   if (DECL_P (op))
5407     {
5408       tree ctx = CP_DECL_CONTEXT (op);
5409       if (TYPE_P (ctx) && dependent_type_p (ctx))
5410         return true;
5411     }
5412
5413   return false;
5414 }
5415
5416 /* The next set of functions are used for providing helpful explanatory
5417    diagnostics for failed overload resolution.  Their messages should be
5418    indented by two spaces for consistency with the messages in
5419    call.c  */
5420
5421 static int
5422 unify_success (bool explain_p ATTRIBUTE_UNUSED)
5423 {
5424   return 0;
5425 }
5426
5427 static int
5428 unify_parameter_deduction_failure (bool explain_p, tree parm)
5429 {
5430   if (explain_p)
5431     inform (input_location,
5432             "  couldn't deduce template parameter %qD", parm);
5433   return 1;
5434 }
5435
5436 static int
5437 unify_invalid (bool explain_p ATTRIBUTE_UNUSED)
5438 {
5439   return 1;
5440 }
5441
5442 static int
5443 unify_cv_qual_mismatch (bool explain_p, tree parm, tree arg)
5444 {
5445   if (explain_p)
5446     inform (input_location,
5447             "  types %qT and %qT have incompatible cv-qualifiers",
5448             parm, arg);
5449   return 1;
5450 }
5451
5452 static int
5453 unify_type_mismatch (bool explain_p, tree parm, tree arg)
5454 {
5455   if (explain_p)
5456     inform (input_location, "  mismatched types %qT and %qT", parm, arg);
5457   return 1;
5458 }
5459
5460 static int
5461 unify_parameter_pack_mismatch (bool explain_p, tree parm, tree arg)
5462 {
5463   if (explain_p)
5464     inform (input_location,
5465             "  template parameter %qD is not a parameter pack, but "
5466             "argument %qD is",
5467             parm, arg);
5468   return 1;
5469 }
5470
5471 static int
5472 unify_ptrmem_cst_mismatch (bool explain_p, tree parm, tree arg)
5473 {
5474   if (explain_p)
5475     inform (input_location,
5476             "  template argument %qE does not match "
5477             "pointer-to-member constant %qE",
5478             arg, parm);
5479   return 1;
5480 }
5481
5482 static int
5483 unify_expression_unequal (bool explain_p, tree parm, tree arg)
5484 {
5485   if (explain_p)
5486     inform (input_location, "  %qE is not equivalent to %qE", parm, arg);
5487   return 1;
5488 }
5489
5490 static int
5491 unify_parameter_pack_inconsistent (bool explain_p, tree old_arg, tree new_arg)
5492 {
5493   if (explain_p)
5494     inform (input_location,
5495             "  inconsistent parameter pack deduction with %qT and %qT",
5496             old_arg, new_arg);
5497   return 1;
5498 }
5499
5500 static int
5501 unify_inconsistency (bool explain_p, tree parm, tree first, tree second)
5502 {
5503   if (explain_p)
5504     inform (input_location,
5505             "  conflicting deductions for parameter %qE (%qE and %qE)",
5506             parm, first, second);
5507   return 1;
5508 }
5509
5510 static int
5511 unify_vla_arg (bool explain_p, tree arg)
5512 {
5513   if (explain_p)
5514     inform (input_location,
5515             "  variable-sized array type %qT is not "
5516             "a valid template argument",
5517             arg);
5518   return 1;
5519 }
5520
5521 static int
5522 unify_method_type_error (bool explain_p, tree arg)
5523 {
5524   if (explain_p)
5525     inform (input_location,
5526             "  member function type %qT is not a valid template argument",
5527             arg);
5528   return 1;
5529 }
5530
5531 static int
5532 unify_arity (bool explain_p, int have, int wanted)
5533 {
5534   if (explain_p)
5535     inform_n (input_location, wanted,
5536               "  candidate expects %d argument, %d provided",
5537               "  candidate expects %d arguments, %d provided",
5538               wanted, have);
5539   return 1;
5540 }
5541
5542 static int
5543 unify_too_many_arguments (bool explain_p, int have, int wanted)
5544 {
5545   return unify_arity (explain_p, have, wanted);
5546 }
5547
5548 static int
5549 unify_too_few_arguments (bool explain_p, int have, int wanted)
5550 {
5551   return unify_arity (explain_p, have, wanted);
5552 }
5553
5554 static int
5555 unify_arg_conversion (bool explain_p, tree to_type,
5556                       tree from_type, tree arg)
5557 {
5558   if (explain_p)
5559     inform (input_location, "  cannot convert %qE (type %qT) to type %qT",
5560             arg, from_type, to_type);
5561   return 1;
5562 }
5563
5564 static int
5565 unify_no_common_base (bool explain_p, enum template_base_result r,
5566                       tree parm, tree arg)
5567 {
5568   if (explain_p)
5569     switch (r)
5570       {
5571       case tbr_ambiguous_baseclass:
5572         inform (input_location, "  %qT is an ambiguous base class of %qT",
5573                 arg, parm);
5574         break;
5575       default:
5576         inform (input_location, "  %qT is not derived from %qT", arg, parm);
5577         break;
5578       }
5579   return 1;
5580 }
5581
5582 static int
5583 unify_inconsistent_template_template_parameters (bool explain_p)
5584 {
5585   if (explain_p)
5586     inform (input_location,
5587             "  template parameters of a template template argument are "
5588             "inconsistent with other deduced template arguments");
5589   return 1;
5590 }
5591
5592 static int
5593 unify_template_deduction_failure (bool explain_p, tree parm, tree arg)
5594 {
5595   if (explain_p)
5596     inform (input_location,
5597             "  can't deduce a template for %qT from non-template type %qT",
5598             parm, arg);
5599   return 1;
5600 }
5601
5602 static int
5603 unify_template_argument_mismatch (bool explain_p, tree parm, tree arg)
5604 {
5605   if (explain_p)
5606     inform (input_location,
5607             "  template argument %qE does not match %qD", arg, parm);
5608   return 1;
5609 }
5610
5611 static int
5612 unify_overload_resolution_failure (bool explain_p, tree arg)
5613 {
5614   if (explain_p)
5615     inform (input_location,
5616             "  could not resolve address from overloaded function %qE",
5617             arg);
5618   return 1;
5619 }
5620
5621 /* Attempt to convert the non-type template parameter EXPR to the
5622    indicated TYPE.  If the conversion is successful, return the
5623    converted value.  If the conversion is unsuccessful, return
5624    NULL_TREE if we issued an error message, or error_mark_node if we
5625    did not.  We issue error messages for out-and-out bad template
5626    parameters, but not simply because the conversion failed, since we
5627    might be just trying to do argument deduction.  Both TYPE and EXPR
5628    must be non-dependent.
5629
5630    The conversion follows the special rules described in
5631    [temp.arg.nontype], and it is much more strict than an implicit
5632    conversion.
5633
5634    This function is called twice for each template argument (see
5635    lookup_template_class for a more accurate description of this
5636    problem). This means that we need to handle expressions which
5637    are not valid in a C++ source, but can be created from the
5638    first call (for instance, casts to perform conversions). These
5639    hacks can go away after we fix the double coercion problem.  */
5640
5641 static tree
5642 convert_nontype_argument (tree type, tree expr, tsubst_flags_t complain)
5643 {
5644   tree expr_type;
5645
5646   /* Detect immediately string literals as invalid non-type argument.
5647      This special-case is not needed for correctness (we would easily
5648      catch this later), but only to provide better diagnostic for this
5649      common user mistake. As suggested by DR 100, we do not mention
5650      linkage issues in the diagnostic as this is not the point.  */
5651   /* FIXME we're making this OK.  */
5652   if (TREE_CODE (expr) == STRING_CST)
5653     {
5654       if (complain & tf_error)
5655         error ("%qE is not a valid template argument for type %qT "
5656                "because string literals can never be used in this context",
5657                expr, type);
5658       return NULL_TREE;
5659     }
5660
5661   /* Add the ADDR_EXPR now for the benefit of
5662      value_dependent_expression_p.  */
5663   if (TYPE_PTROBV_P (type)
5664       && TREE_CODE (TREE_TYPE (expr)) == ARRAY_TYPE)
5665     expr = decay_conversion (expr);
5666
5667   /* If we are in a template, EXPR may be non-dependent, but still
5668      have a syntactic, rather than semantic, form.  For example, EXPR
5669      might be a SCOPE_REF, rather than the VAR_DECL to which the
5670      SCOPE_REF refers.  Preserving the qualifying scope is necessary
5671      so that access checking can be performed when the template is
5672      instantiated -- but here we need the resolved form so that we can
5673      convert the argument.  */
5674   if (TYPE_REF_OBJ_P (type)
5675       && has_value_dependent_address (expr))
5676     /* If we want the address and it's value-dependent, don't fold.  */;
5677   else if (!type_unknown_p (expr))
5678     expr = fold_non_dependent_expr_sfinae (expr, complain);
5679   if (error_operand_p (expr))
5680     return error_mark_node;
5681   expr_type = TREE_TYPE (expr);
5682   if (TREE_CODE (type) == REFERENCE_TYPE)
5683     expr = mark_lvalue_use (expr);
5684   else
5685     expr = mark_rvalue_use (expr);
5686
5687   /* 14.3.2/5: The null pointer{,-to-member} conversion is applied
5688      to a non-type argument of "nullptr".  */
5689   if (expr == nullptr_node
5690       && (TYPE_PTR_P (type) || TYPE_PTR_TO_MEMBER_P (type)))
5691     expr = convert (type, expr);
5692
5693   /* In C++11, integral or enumeration non-type template arguments can be
5694      arbitrary constant expressions.  Pointer and pointer to
5695      member arguments can be general constant expressions that evaluate
5696      to a null value, but otherwise still need to be of a specific form.  */
5697   if (cxx_dialect >= cxx0x)
5698     {
5699       if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
5700         expr = maybe_constant_value (expr);
5701       else if (TYPE_PTR_P (type)
5702                || (TYPE_PTR_TO_MEMBER_P (type)
5703                    && TREE_CODE (expr) != PTRMEM_CST))
5704         {
5705           tree folded = maybe_constant_value (expr);
5706           if (TYPE_PTR_P (type) ? integer_zerop (folded)
5707               : null_member_pointer_value_p (folded))
5708             expr = folded;
5709         }
5710     }
5711
5712   /* HACK: Due to double coercion, we can get a
5713      NOP_EXPR<REFERENCE_TYPE>(ADDR_EXPR<POINTER_TYPE> (arg)) here,
5714      which is the tree that we built on the first call (see
5715      below when coercing to reference to object or to reference to
5716      function). We just strip everything and get to the arg.
5717      See g++.old-deja/g++.oliva/template4.C and g++.dg/template/nontype9.C
5718      for examples.  */
5719   if (TYPE_REF_OBJ_P (type) || TYPE_REFFN_P (type))
5720     {
5721       tree probe_type, probe = expr;
5722       if (REFERENCE_REF_P (probe))
5723         probe = TREE_OPERAND (probe, 0);
5724       probe_type = TREE_TYPE (probe);
5725       if (TREE_CODE (probe) == NOP_EXPR)
5726         {
5727           /* ??? Maybe we could use convert_from_reference here, but we
5728              would need to relax its constraints because the NOP_EXPR
5729              could actually change the type to something more cv-qualified,
5730              and this is not folded by convert_from_reference.  */
5731           tree addr = TREE_OPERAND (probe, 0);
5732           gcc_assert (TREE_CODE (probe_type) == REFERENCE_TYPE);
5733           gcc_assert (TREE_CODE (addr) == ADDR_EXPR);
5734           gcc_assert (TREE_CODE (TREE_TYPE (addr)) == POINTER_TYPE);
5735           gcc_assert (same_type_ignoring_top_level_qualifiers_p
5736                       (TREE_TYPE (probe_type),
5737                        TREE_TYPE (TREE_TYPE (addr))));
5738
5739           expr = TREE_OPERAND (addr, 0);
5740           expr_type = TREE_TYPE (expr);
5741         }
5742     }
5743
5744   /* We could also generate a NOP_EXPR(ADDR_EXPR()) when the
5745      parameter is a pointer to object, through decay and
5746      qualification conversion. Let's strip everything.  */
5747   else if (TREE_CODE (expr) == NOP_EXPR && TYPE_PTROBV_P (type))
5748     {
5749       STRIP_NOPS (expr);
5750       gcc_assert (TREE_CODE (expr) == ADDR_EXPR);
5751       gcc_assert (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE);
5752       /* Skip the ADDR_EXPR only if it is part of the decay for
5753          an array. Otherwise, it is part of the original argument
5754          in the source code.  */
5755       if (TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == ARRAY_TYPE)
5756         expr = TREE_OPERAND (expr, 0);
5757       expr_type = TREE_TYPE (expr);
5758     }
5759
5760   /* [temp.arg.nontype]/5, bullet 1
5761
5762      For a non-type template-parameter of integral or enumeration type,
5763      integral promotions (_conv.prom_) and integral conversions
5764      (_conv.integral_) are applied.  */
5765   if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
5766     {
5767       tree t = build_integral_nontype_arg_conv (type, expr, complain);
5768       t = maybe_constant_value (t);
5769       if (t != error_mark_node)
5770         expr = t;
5771
5772       if (!same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (expr)))
5773         return error_mark_node;
5774
5775       /* Notice that there are constant expressions like '4 % 0' which
5776          do not fold into integer constants.  */
5777       if (TREE_CODE (expr) != INTEGER_CST)
5778         {
5779           if (complain & tf_error)
5780             {
5781               int errs = errorcount, warns = warningcount;
5782               expr = cxx_constant_value (expr);
5783               if (errorcount > errs || warningcount > warns)
5784                 inform (EXPR_LOC_OR_HERE (expr),
5785                         "in template argument for type %qT ", type);
5786               if (expr == error_mark_node)
5787                 return NULL_TREE;
5788               /* else cxx_constant_value complained but gave us
5789                  a real constant, so go ahead.  */
5790               gcc_assert (TREE_CODE (expr) == INTEGER_CST);
5791             }
5792           else
5793             return NULL_TREE;
5794         }
5795     }
5796   /* [temp.arg.nontype]/5, bullet 2
5797
5798      For a non-type template-parameter of type pointer to object,
5799      qualification conversions (_conv.qual_) and the array-to-pointer
5800      conversion (_conv.array_) are applied.  */
5801   else if (TYPE_PTROBV_P (type))
5802     {
5803       /* [temp.arg.nontype]/1  (TC1 version, DR 49):
5804
5805          A template-argument for a non-type, non-template template-parameter
5806          shall be one of: [...]
5807
5808          -- the name of a non-type template-parameter;
5809          -- the address of an object or function with external linkage, [...]
5810             expressed as "& id-expression" where the & is optional if the name
5811             refers to a function or array, or if the corresponding
5812             template-parameter is a reference.
5813
5814         Here, we do not care about functions, as they are invalid anyway
5815         for a parameter of type pointer-to-object.  */
5816
5817       if (DECL_P (expr) && DECL_TEMPLATE_PARM_P (expr))
5818         /* Non-type template parameters are OK.  */
5819         ;
5820       else if (cxx_dialect >= cxx0x && integer_zerop (expr))
5821         /* Null pointer values are OK in C++11.  */;
5822       else if (TREE_CODE (expr) != ADDR_EXPR
5823                && TREE_CODE (expr_type) != ARRAY_TYPE)
5824         {
5825           if (TREE_CODE (expr) == VAR_DECL)
5826             {
5827               error ("%qD is not a valid template argument "
5828                      "because %qD is a variable, not the address of "
5829                      "a variable",
5830                      expr, expr);
5831               return NULL_TREE;
5832             }
5833           /* Other values, like integer constants, might be valid
5834              non-type arguments of some other type.  */
5835           return error_mark_node;
5836         }
5837       else
5838         {
5839           tree decl;
5840
5841           decl = ((TREE_CODE (expr) == ADDR_EXPR)
5842                   ? TREE_OPERAND (expr, 0) : expr);
5843           if (TREE_CODE (decl) != VAR_DECL)
5844             {
5845               error ("%qE is not a valid template argument of type %qT "
5846                      "because %qE is not a variable",
5847                      expr, type, decl);
5848               return NULL_TREE;
5849             }
5850           else if (cxx_dialect < cxx0x && !DECL_EXTERNAL_LINKAGE_P (decl))
5851             {
5852               error ("%qE is not a valid template argument of type %qT "
5853                      "because %qD does not have external linkage",
5854                      expr, type, decl);
5855               return NULL_TREE;
5856             }
5857           else if (cxx_dialect >= cxx0x && decl_linkage (decl) == lk_none)
5858             {
5859               error ("%qE is not a valid template argument of type %qT "
5860                      "because %qD has no linkage",
5861                      expr, type, decl);
5862               return NULL_TREE;
5863             }
5864         }
5865
5866       expr = decay_conversion (expr);
5867       if (expr == error_mark_node)
5868         return error_mark_node;
5869
5870       expr = perform_qualification_conversions (type, expr);
5871       if (expr == error_mark_node)
5872         return error_mark_node;
5873     }
5874   /* [temp.arg.nontype]/5, bullet 3
5875
5876      For a non-type template-parameter of type reference to object, no
5877      conversions apply. The type referred to by the reference may be more
5878      cv-qualified than the (otherwise identical) type of the
5879      template-argument. The template-parameter is bound directly to the
5880      template-argument, which must be an lvalue.  */
5881   else if (TYPE_REF_OBJ_P (type))
5882     {
5883       if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type),
5884                                                       expr_type))
5885         return error_mark_node;
5886
5887       if (!at_least_as_qualified_p (TREE_TYPE (type), expr_type))
5888         {
5889           error ("%qE is not a valid template argument for type %qT "
5890                  "because of conflicts in cv-qualification", expr, type);
5891           return NULL_TREE;
5892         }
5893
5894       if (!real_lvalue_p (expr))
5895         {
5896           error ("%qE is not a valid template argument for type %qT "
5897                  "because it is not an lvalue", expr, type);
5898           return NULL_TREE;
5899         }
5900
5901       /* [temp.arg.nontype]/1
5902
5903          A template-argument for a non-type, non-template template-parameter
5904          shall be one of: [...]
5905
5906          -- the address of an object or function with external linkage.  */
5907       if (TREE_CODE (expr) == INDIRECT_REF
5908           && TYPE_REF_OBJ_P (TREE_TYPE (TREE_OPERAND (expr, 0))))
5909         {
5910           expr = TREE_OPERAND (expr, 0);
5911           if (DECL_P (expr))
5912             {
5913               error ("%q#D is not a valid template argument for type %qT "
5914                      "because a reference variable does not have a constant "
5915                      "address", expr, type);
5916               return NULL_TREE;
5917             }
5918         }
5919
5920       if (!DECL_P (expr))
5921         {
5922           error ("%qE is not a valid template argument for type %qT "
5923                  "because it is not an object with external linkage",
5924                  expr, type);
5925           return NULL_TREE;
5926         }
5927
5928       if (!DECL_EXTERNAL_LINKAGE_P (expr))
5929         {
5930           error ("%qE is not a valid template argument for type %qT "
5931                  "because object %qD has not external linkage",
5932                  expr, type, expr);
5933           return NULL_TREE;
5934         }
5935
5936       expr = build_nop (type, build_address (expr));
5937     }
5938   /* [temp.arg.nontype]/5, bullet 4
5939
5940      For a non-type template-parameter of type pointer to function, only
5941      the function-to-pointer conversion (_conv.func_) is applied. If the
5942      template-argument represents a set of overloaded functions (or a
5943      pointer to such), the matching function is selected from the set
5944      (_over.over_).  */
5945   else if (TYPE_PTRFN_P (type))
5946     {
5947       /* If the argument is a template-id, we might not have enough
5948          context information to decay the pointer.  */
5949       if (!type_unknown_p (expr_type))
5950         {
5951           expr = decay_conversion (expr);
5952           if (expr == error_mark_node)
5953             return error_mark_node;
5954         }
5955
5956       if (cxx_dialect >= cxx0x && integer_zerop (expr))
5957         /* Null pointer values are OK in C++11.  */
5958         return perform_qualification_conversions (type, expr);
5959
5960       expr = convert_nontype_argument_function (type, expr);
5961       if (!expr || expr == error_mark_node)
5962         return expr;
5963
5964       if (TREE_CODE (expr) != ADDR_EXPR)
5965         {
5966           error ("%qE is not a valid template argument for type %qT", expr, type);
5967           error ("it must be the address of a function with external linkage");
5968           return NULL_TREE;
5969         }
5970     }
5971   /* [temp.arg.nontype]/5, bullet 5
5972
5973      For a non-type template-parameter of type reference to function, no
5974      conversions apply. If the template-argument represents a set of
5975      overloaded functions, the matching function is selected from the set
5976      (_over.over_).  */
5977   else if (TYPE_REFFN_P (type))
5978     {
5979       if (TREE_CODE (expr) == ADDR_EXPR)
5980         {
5981           error ("%qE is not a valid template argument for type %qT "
5982                  "because it is a pointer", expr, type);
5983           inform (input_location, "try using %qE instead", TREE_OPERAND (expr, 0));
5984           return NULL_TREE;
5985         }
5986
5987       expr = convert_nontype_argument_function (TREE_TYPE (type), expr);
5988       if (!expr || expr == error_mark_node)
5989         return expr;
5990
5991       expr = build_nop (type, build_address (expr));
5992     }
5993   /* [temp.arg.nontype]/5, bullet 6
5994
5995      For a non-type template-parameter of type pointer to member function,
5996      no conversions apply. If the template-argument represents a set of
5997      overloaded member functions, the matching member function is selected
5998      from the set (_over.over_).  */
5999   else if (TYPE_PTRMEMFUNC_P (type))
6000     {
6001       expr = instantiate_type (type, expr, tf_none);
6002       if (expr == error_mark_node)
6003         return error_mark_node;
6004
6005       /* [temp.arg.nontype] bullet 1 says the pointer to member
6006          expression must be a pointer-to-member constant.  */
6007       if (!check_valid_ptrmem_cst_expr (type, expr, complain))
6008         return error_mark_node;
6009
6010       /* There is no way to disable standard conversions in
6011          resolve_address_of_overloaded_function (called by
6012          instantiate_type). It is possible that the call succeeded by
6013          converting &B::I to &D::I (where B is a base of D), so we need
6014          to reject this conversion here.
6015
6016          Actually, even if there was a way to disable standard conversions,
6017          it would still be better to reject them here so that we can
6018          provide a superior diagnostic.  */
6019       if (!same_type_p (TREE_TYPE (expr), type))
6020         {
6021           error ("%qE is not a valid template argument for type %qT "
6022                  "because it is of type %qT", expr, type,
6023                  TREE_TYPE (expr));
6024           /* If we are just one standard conversion off, explain.  */
6025           if (can_convert (type, TREE_TYPE (expr)))
6026             inform (input_location,
6027                     "standard conversions are not allowed in this context");
6028           return NULL_TREE;
6029         }
6030     }
6031   /* [temp.arg.nontype]/5, bullet 7
6032
6033      For a non-type template-parameter of type pointer to data member,
6034      qualification conversions (_conv.qual_) are applied.  */
6035   else if (TYPE_PTRMEM_P (type))
6036     {
6037       /* [temp.arg.nontype] bullet 1 says the pointer to member
6038          expression must be a pointer-to-member constant.  */
6039       if (!check_valid_ptrmem_cst_expr (type, expr, complain))
6040         return error_mark_node;
6041
6042       expr = perform_qualification_conversions (type, expr);
6043       if (expr == error_mark_node)
6044         return expr;
6045     }
6046   else if (NULLPTR_TYPE_P (type))
6047     {
6048       if (expr != nullptr_node)
6049         {
6050           error ("%qE is not a valid template argument for type %qT "
6051                  "because it is of type %qT", expr, type, TREE_TYPE (expr));
6052           return NULL_TREE;
6053         }
6054       return expr;
6055     }
6056   /* A template non-type parameter must be one of the above.  */
6057   else
6058     gcc_unreachable ();
6059
6060   /* Sanity check: did we actually convert the argument to the
6061      right type?  */
6062   gcc_assert (same_type_ignoring_top_level_qualifiers_p
6063               (type, TREE_TYPE (expr)));
6064   return expr;
6065 }
6066
6067 /* Subroutine of coerce_template_template_parms, which returns 1 if
6068    PARM_PARM and ARG_PARM match using the rule for the template
6069    parameters of template template parameters. Both PARM and ARG are
6070    template parameters; the rest of the arguments are the same as for
6071    coerce_template_template_parms.
6072  */
6073 static int
6074 coerce_template_template_parm (tree parm,
6075                               tree arg,
6076                               tsubst_flags_t complain,
6077                               tree in_decl,
6078                               tree outer_args)
6079 {
6080   if (arg == NULL_TREE || arg == error_mark_node
6081       || parm == NULL_TREE || parm == error_mark_node)
6082     return 0;
6083   
6084   if (TREE_CODE (arg) != TREE_CODE (parm))
6085     return 0;
6086   
6087   switch (TREE_CODE (parm))
6088     {
6089     case TEMPLATE_DECL:
6090       /* We encounter instantiations of templates like
6091          template <template <template <class> class> class TT>
6092          class C;  */
6093       {
6094         tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
6095         tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
6096         
6097         if (!coerce_template_template_parms
6098             (parmparm, argparm, complain, in_decl, outer_args))
6099           return 0;
6100       }
6101       /* Fall through.  */
6102       
6103     case TYPE_DECL:
6104       if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (arg))
6105           && !TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
6106         /* Argument is a parameter pack but parameter is not.  */
6107         return 0;
6108       break;
6109       
6110     case PARM_DECL:
6111       /* The tsubst call is used to handle cases such as
6112          
6113            template <int> class C {};
6114            template <class T, template <T> class TT> class D {};
6115            D<int, C> d;
6116
6117          i.e. the parameter list of TT depends on earlier parameters.  */
6118       if (!uses_template_parms (TREE_TYPE (arg))
6119           && !same_type_p
6120                 (tsubst (TREE_TYPE (parm), outer_args, complain, in_decl),
6121                  TREE_TYPE (arg)))
6122         return 0;
6123       
6124       if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (arg))
6125           && !TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
6126         /* Argument is a parameter pack but parameter is not.  */
6127         return 0;
6128       
6129       break;
6130
6131     default:
6132       gcc_unreachable ();
6133     }
6134
6135   return 1;
6136 }
6137
6138
6139 /* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
6140    template template parameters.  Both PARM_PARMS and ARG_PARMS are
6141    vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
6142    or PARM_DECL.
6143
6144    Consider the example:
6145      template <class T> class A;
6146      template<template <class U> class TT> class B;
6147
6148    For B<A>, PARM_PARMS are the parameters to TT, while ARG_PARMS are
6149    the parameters to A, and OUTER_ARGS contains A.  */
6150
6151 static int
6152 coerce_template_template_parms (tree parm_parms,
6153                                 tree arg_parms,
6154                                 tsubst_flags_t complain,
6155                                 tree in_decl,
6156                                 tree outer_args)
6157 {
6158   int nparms, nargs, i;
6159   tree parm, arg;
6160   int variadic_p = 0;
6161
6162   gcc_assert (TREE_CODE (parm_parms) == TREE_VEC);
6163   gcc_assert (TREE_CODE (arg_parms) == TREE_VEC);
6164
6165   nparms = TREE_VEC_LENGTH (parm_parms);
6166   nargs = TREE_VEC_LENGTH (arg_parms);
6167
6168   /* Determine whether we have a parameter pack at the end of the
6169      template template parameter's template parameter list.  */
6170   if (TREE_VEC_ELT (parm_parms, nparms - 1) != error_mark_node)
6171     {
6172       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, nparms - 1));
6173       
6174       if (parm == error_mark_node)
6175         return 0;
6176
6177       switch (TREE_CODE (parm))
6178         {
6179         case TEMPLATE_DECL:
6180         case TYPE_DECL:
6181           if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
6182             variadic_p = 1;
6183           break;
6184           
6185         case PARM_DECL:
6186           if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
6187             variadic_p = 1;
6188           break;
6189           
6190         default:
6191           gcc_unreachable ();
6192         }
6193     }
6194  
6195   if (nargs != nparms
6196       && !(variadic_p && nargs >= nparms - 1))
6197     return 0;
6198
6199   /* Check all of the template parameters except the parameter pack at
6200      the end (if any).  */
6201   for (i = 0; i < nparms - variadic_p; ++i)
6202     {
6203       if (TREE_VEC_ELT (parm_parms, i) == error_mark_node
6204           || TREE_VEC_ELT (arg_parms, i) == error_mark_node)
6205         continue;
6206
6207       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
6208       arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
6209
6210       if (!coerce_template_template_parm (parm, arg, complain, in_decl,
6211                                           outer_args))
6212         return 0;
6213
6214     }
6215
6216   if (variadic_p)
6217     {
6218       /* Check each of the template parameters in the template
6219          argument against the template parameter pack at the end of
6220          the template template parameter.  */
6221       if (TREE_VEC_ELT (parm_parms, i) == error_mark_node)
6222         return 0;
6223
6224       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
6225
6226       for (; i < nargs; ++i)
6227         {
6228           if (TREE_VEC_ELT (arg_parms, i) == error_mark_node)
6229             continue;
6230  
6231           arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
6232  
6233           if (!coerce_template_template_parm (parm, arg, complain, in_decl,
6234                                               outer_args))
6235             return 0;
6236         }
6237     }
6238
6239   return 1;
6240 }
6241
6242 /* Verifies that the deduced template arguments (in TARGS) for the
6243    template template parameters (in TPARMS) represent valid bindings,
6244    by comparing the template parameter list of each template argument
6245    to the template parameter list of its corresponding template
6246    template parameter, in accordance with DR150. This
6247    routine can only be called after all template arguments have been
6248    deduced. It will return TRUE if all of the template template
6249    parameter bindings are okay, FALSE otherwise.  */
6250 bool 
6251 template_template_parm_bindings_ok_p (tree tparms, tree targs)
6252 {
6253   int i, ntparms = TREE_VEC_LENGTH (tparms);
6254   bool ret = true;
6255
6256   /* We're dealing with template parms in this process.  */
6257   ++processing_template_decl;
6258
6259   targs = INNERMOST_TEMPLATE_ARGS (targs);
6260
6261   for (i = 0; i < ntparms; ++i)
6262     {
6263       tree tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
6264       tree targ = TREE_VEC_ELT (targs, i);
6265
6266       if (TREE_CODE (tparm) == TEMPLATE_DECL && targ)
6267         {
6268           tree packed_args = NULL_TREE;
6269           int idx, len = 1;
6270
6271           if (ARGUMENT_PACK_P (targ))
6272             {
6273               /* Look inside the argument pack.  */
6274               packed_args = ARGUMENT_PACK_ARGS (targ);
6275               len = TREE_VEC_LENGTH (packed_args);
6276             }
6277
6278           for (idx = 0; idx < len; ++idx)
6279             {
6280               tree targ_parms = NULL_TREE;
6281
6282               if (packed_args)
6283                 /* Extract the next argument from the argument
6284                    pack.  */
6285                 targ = TREE_VEC_ELT (packed_args, idx);
6286
6287               if (PACK_EXPANSION_P (targ))
6288                 /* Look at the pattern of the pack expansion.  */
6289                 targ = PACK_EXPANSION_PATTERN (targ);
6290
6291               /* Extract the template parameters from the template
6292                  argument.  */
6293               if (TREE_CODE (targ) == TEMPLATE_DECL)
6294                 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (targ);
6295               else if (TREE_CODE (targ) == TEMPLATE_TEMPLATE_PARM)
6296                 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_NAME (targ));
6297
6298               /* Verify that we can coerce the template template
6299                  parameters from the template argument to the template
6300                  parameter.  This requires an exact match.  */
6301               if (targ_parms
6302                   && !coerce_template_template_parms
6303                        (DECL_INNERMOST_TEMPLATE_PARMS (tparm),
6304                         targ_parms,
6305                         tf_none,
6306                         tparm,
6307                         targs))
6308                 {
6309                   ret = false;
6310                   goto out;
6311                 }
6312             }
6313         }
6314     }
6315
6316  out:
6317
6318   --processing_template_decl;
6319   return ret;
6320 }
6321
6322 /* Since type attributes aren't mangled, we need to strip them from
6323    template type arguments.  */
6324
6325 static tree
6326 canonicalize_type_argument (tree arg, tsubst_flags_t complain)
6327 {
6328   tree mv;
6329   if (!arg || arg == error_mark_node || arg == TYPE_CANONICAL (arg))
6330     return arg;
6331   mv = TYPE_MAIN_VARIANT (arg);
6332   arg = strip_typedefs (arg);
6333   if (TYPE_ALIGN (arg) != TYPE_ALIGN (mv)
6334       || TYPE_ATTRIBUTES (arg) != TYPE_ATTRIBUTES (mv))
6335     {
6336       if (complain & tf_warning)
6337         warning (0, "ignoring attributes on template argument %qT", arg);
6338       arg = build_aligned_type (arg, TYPE_ALIGN (mv));
6339       arg = cp_build_type_attribute_variant (arg, TYPE_ATTRIBUTES (mv));
6340     }
6341   return arg;
6342 }
6343
6344 /* Convert the indicated template ARG as necessary to match the
6345    indicated template PARM.  Returns the converted ARG, or
6346    error_mark_node if the conversion was unsuccessful.  Error and
6347    warning messages are issued under control of COMPLAIN.  This
6348    conversion is for the Ith parameter in the parameter list.  ARGS is
6349    the full set of template arguments deduced so far.  */
6350
6351 static tree
6352 convert_template_argument (tree parm,
6353                            tree arg,
6354                            tree args,
6355                            tsubst_flags_t complain,
6356                            int i,
6357                            tree in_decl)
6358 {
6359   tree orig_arg;
6360   tree val;
6361   int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
6362
6363   if (TREE_CODE (arg) == TREE_LIST
6364       && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
6365     {
6366       /* The template argument was the name of some
6367          member function.  That's usually
6368          invalid, but static members are OK.  In any
6369          case, grab the underlying fields/functions
6370          and issue an error later if required.  */
6371       orig_arg = TREE_VALUE (arg);
6372       TREE_TYPE (arg) = unknown_type_node;
6373     }
6374
6375   orig_arg = arg;
6376
6377   requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
6378   requires_type = (TREE_CODE (parm) == TYPE_DECL
6379                    || requires_tmpl_type);
6380
6381   /* When determining whether an argument pack expansion is a template,
6382      look at the pattern.  */
6383   if (TREE_CODE (arg) == TYPE_PACK_EXPANSION)
6384     arg = PACK_EXPANSION_PATTERN (arg);
6385
6386   /* Deal with an injected-class-name used as a template template arg.  */
6387   if (requires_tmpl_type && CLASS_TYPE_P (arg))
6388     {
6389       tree t = maybe_get_template_decl_from_type_decl (TYPE_NAME (arg));
6390       if (TREE_CODE (t) == TEMPLATE_DECL)
6391         {
6392           if (cxx_dialect >= cxx0x)
6393             /* OK under DR 1004.  */;
6394           else if (complain & tf_warning_or_error)
6395             pedwarn (input_location, OPT_pedantic, "injected-class-name %qD"
6396                      " used as template template argument", TYPE_NAME (arg));
6397           else if (flag_pedantic_errors)
6398             t = arg;
6399
6400           arg = t;
6401         }
6402     }
6403
6404   is_tmpl_type = 
6405     ((TREE_CODE (arg) == TEMPLATE_DECL
6406       && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
6407      || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
6408      || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
6409
6410   if (is_tmpl_type
6411       && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
6412           || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
6413     arg = TYPE_STUB_DECL (arg);
6414
6415   is_type = TYPE_P (arg) || is_tmpl_type;
6416
6417   if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
6418       && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
6419     {
6420       permerror (input_location, "to refer to a type member of a template parameter, "
6421                  "use %<typename %E%>", orig_arg);
6422
6423       orig_arg = make_typename_type (TREE_OPERAND (arg, 0),
6424                                      TREE_OPERAND (arg, 1),
6425                                      typename_type,
6426                                      complain & tf_error);
6427       arg = orig_arg;
6428       is_type = 1;
6429     }
6430   if (is_type != requires_type)
6431     {
6432       if (in_decl)
6433         {
6434           if (complain & tf_error)
6435             {
6436               error ("type/value mismatch at argument %d in template "
6437                      "parameter list for %qD",
6438                      i + 1, in_decl);
6439               if (is_type)
6440                 error ("  expected a constant of type %qT, got %qT",
6441                        TREE_TYPE (parm),
6442                        (DECL_P (arg) ? DECL_NAME (arg) : orig_arg));
6443               else if (requires_tmpl_type)
6444                 error ("  expected a class template, got %qE", orig_arg);
6445               else
6446                 error ("  expected a type, got %qE", orig_arg);
6447             }
6448         }
6449       return error_mark_node;
6450     }
6451   if (is_tmpl_type ^ requires_tmpl_type)
6452     {
6453       if (in_decl && (complain & tf_error))
6454         {
6455           error ("type/value mismatch at argument %d in template "
6456                  "parameter list for %qD",
6457                  i + 1, in_decl);
6458           if (is_tmpl_type)
6459             error ("  expected a type, got %qT", DECL_NAME (arg));
6460           else
6461             error ("  expected a class template, got %qT", orig_arg);
6462         }
6463       return error_mark_node;
6464     }
6465
6466   if (is_type)
6467     {
6468       if (requires_tmpl_type)
6469         {
6470           if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
6471             /* The number of argument required is not known yet.
6472                Just accept it for now.  */
6473             val = TREE_TYPE (arg);
6474           else
6475             {
6476               tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
6477               tree argparm;
6478
6479               argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
6480
6481               if (coerce_template_template_parms (parmparm, argparm,
6482                                                   complain, in_decl,
6483                                                   args))
6484                 {
6485                   val = arg;
6486
6487                   /* TEMPLATE_TEMPLATE_PARM node is preferred over
6488                      TEMPLATE_DECL.  */
6489                   if (val != error_mark_node)
6490                     {
6491                       if (DECL_TEMPLATE_TEMPLATE_PARM_P (val))
6492                         val = TREE_TYPE (val);
6493                       if (TREE_CODE (orig_arg) == TYPE_PACK_EXPANSION)
6494                         val = make_pack_expansion (val);
6495                     }
6496                 }
6497               else
6498                 {
6499                   if (in_decl && (complain & tf_error))
6500                     {
6501                       error ("type/value mismatch at argument %d in "
6502                              "template parameter list for %qD",
6503                              i + 1, in_decl);
6504                       error ("  expected a template of type %qD, got %qT",
6505                              parm, orig_arg);
6506                     }
6507
6508                   val = error_mark_node;
6509                 }
6510             }
6511         }
6512       else
6513         val = orig_arg;
6514       /* We only form one instance of each template specialization.
6515          Therefore, if we use a non-canonical variant (i.e., a
6516          typedef), any future messages referring to the type will use
6517          the typedef, which is confusing if those future uses do not
6518          themselves also use the typedef.  */
6519       if (TYPE_P (val))
6520         val = canonicalize_type_argument (val, complain);
6521     }
6522   else
6523     {
6524       tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
6525
6526       if (invalid_nontype_parm_type_p (t, complain))
6527         return error_mark_node;
6528
6529       if (template_parameter_pack_p (parm) && ARGUMENT_PACK_P (orig_arg))
6530         {
6531           if (same_type_p (t, TREE_TYPE (orig_arg)))
6532             val = orig_arg;
6533           else
6534             {
6535               /* Not sure if this is reachable, but it doesn't hurt
6536                  to be robust.  */
6537               error ("type mismatch in nontype parameter pack");
6538               val = error_mark_node;
6539             }
6540         }
6541       else if (!uses_template_parms (orig_arg) && !uses_template_parms (t))
6542         /* We used to call digest_init here.  However, digest_init
6543            will report errors, which we don't want when complain
6544            is zero.  More importantly, digest_init will try too
6545            hard to convert things: for example, `0' should not be
6546            converted to pointer type at this point according to
6547            the standard.  Accepting this is not merely an
6548            extension, since deciding whether or not these
6549            conversions can occur is part of determining which
6550            function template to call, or whether a given explicit
6551            argument specification is valid.  */
6552         val = convert_nontype_argument (t, orig_arg, complain);
6553       else
6554         val = orig_arg;
6555
6556       if (val == NULL_TREE)
6557         val = error_mark_node;
6558       else if (val == error_mark_node && (complain & tf_error))
6559         error ("could not convert template argument %qE to %qT",  orig_arg, t);
6560
6561       if (TREE_CODE (val) == SCOPE_REF)
6562         {
6563           /* Strip typedefs from the SCOPE_REF.  */
6564           tree type = canonicalize_type_argument (TREE_TYPE (val), complain);
6565           tree scope = canonicalize_type_argument (TREE_OPERAND (val, 0),
6566                                                    complain);
6567           val = build_qualified_name (type, scope, TREE_OPERAND (val, 1),
6568                                       QUALIFIED_NAME_IS_TEMPLATE (val));
6569         }
6570     }
6571
6572   return val;
6573 }
6574
6575 /* Coerces the remaining template arguments in INNER_ARGS (from
6576    ARG_IDX to the end) into the parameter pack at PARM_IDX in PARMS.
6577    Returns the coerced argument pack. PARM_IDX is the position of this
6578    parameter in the template parameter list. ARGS is the original
6579    template argument list.  */
6580 static tree
6581 coerce_template_parameter_pack (tree parms,
6582                                 int parm_idx,
6583                                 tree args,
6584                                 tree inner_args,
6585                                 int arg_idx,
6586                                 tree new_args,
6587                                 int* lost,
6588                                 tree in_decl,
6589                                 tsubst_flags_t complain)
6590 {
6591   tree parm = TREE_VEC_ELT (parms, parm_idx);
6592   int nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
6593   tree packed_args;
6594   tree argument_pack;
6595   tree packed_types = NULL_TREE;
6596
6597   if (arg_idx > nargs)
6598     arg_idx = nargs;
6599
6600   packed_args = make_tree_vec (nargs - arg_idx);
6601
6602   if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL
6603       && uses_parameter_packs (TREE_TYPE (TREE_VALUE (parm))))
6604     {
6605       /* When the template parameter is a non-type template
6606          parameter pack whose type uses parameter packs, we need
6607          to look at each of the template arguments
6608          separately. Build a vector of the types for these
6609          non-type template parameters in PACKED_TYPES.  */
6610       tree expansion 
6611         = make_pack_expansion (TREE_TYPE (TREE_VALUE (parm)));
6612       packed_types = tsubst_pack_expansion (expansion, args,
6613                                             complain, in_decl);
6614
6615       if (packed_types == error_mark_node)
6616         return error_mark_node;
6617
6618       /* Check that we have the right number of arguments.  */
6619       if (arg_idx < nargs
6620           && !PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx))
6621           && nargs - arg_idx != TREE_VEC_LENGTH (packed_types))
6622         {
6623           int needed_parms 
6624             = TREE_VEC_LENGTH (parms) - 1 + TREE_VEC_LENGTH (packed_types);
6625           error ("wrong number of template arguments (%d, should be %d)",
6626                  nargs, needed_parms);
6627           return error_mark_node;
6628         }
6629
6630       /* If we aren't able to check the actual arguments now
6631          (because they haven't been expanded yet), we can at least
6632          verify that all of the types used for the non-type
6633          template parameter pack are, in fact, valid for non-type
6634          template parameters.  */
6635       if (arg_idx < nargs 
6636           && PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx)))
6637         {
6638           int j, len = TREE_VEC_LENGTH (packed_types);
6639           for (j = 0; j < len; ++j)
6640             {
6641               tree t = TREE_VEC_ELT (packed_types, j);
6642               if (invalid_nontype_parm_type_p (t, complain))
6643                 return error_mark_node;
6644             }
6645         }
6646     }
6647
6648   /* Convert the remaining arguments, which will be a part of the
6649      parameter pack "parm".  */
6650   for (; arg_idx < nargs; ++arg_idx)
6651     {
6652       tree arg = TREE_VEC_ELT (inner_args, arg_idx);
6653       tree actual_parm = TREE_VALUE (parm);
6654
6655       if (packed_types && !PACK_EXPANSION_P (arg))
6656         {
6657           /* When we have a vector of types (corresponding to the
6658              non-type template parameter pack that uses parameter
6659              packs in its type, as mention above), and the
6660              argument is not an expansion (which expands to a
6661              currently unknown number of arguments), clone the
6662              parm and give it the next type in PACKED_TYPES.  */
6663           actual_parm = copy_node (actual_parm);
6664           TREE_TYPE (actual_parm) = 
6665             TREE_VEC_ELT (packed_types, arg_idx - parm_idx);
6666         }
6667
6668       if (arg != error_mark_node)
6669         arg = convert_template_argument (actual_parm, 
6670                                          arg, new_args, complain, parm_idx,
6671                                          in_decl);
6672       if (arg == error_mark_node)
6673         (*lost)++;
6674       TREE_VEC_ELT (packed_args, arg_idx - parm_idx) = arg; 
6675     }
6676
6677   if (TREE_CODE (TREE_VALUE (parm)) == TYPE_DECL
6678       || TREE_CODE (TREE_VALUE (parm)) == TEMPLATE_DECL)
6679     argument_pack = cxx_make_type (TYPE_ARGUMENT_PACK);
6680   else
6681     {
6682       argument_pack = make_node (NONTYPE_ARGUMENT_PACK);
6683       TREE_TYPE (argument_pack) 
6684         = tsubst (TREE_TYPE (TREE_VALUE (parm)), new_args, complain, in_decl);
6685       TREE_CONSTANT (argument_pack) = 1;
6686     }
6687
6688   SET_ARGUMENT_PACK_ARGS (argument_pack, packed_args);
6689 #ifdef ENABLE_CHECKING
6690   SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (packed_args,
6691                                        TREE_VEC_LENGTH (packed_args));
6692 #endif
6693   return argument_pack;
6694 }
6695
6696 /* Convert all template arguments to their appropriate types, and
6697    return a vector containing the innermost resulting template
6698    arguments.  If any error occurs, return error_mark_node. Error and
6699    warning messages are issued under control of COMPLAIN.
6700
6701    If REQUIRE_ALL_ARGS is false, argument deduction will be performed
6702    for arguments not specified in ARGS.  Otherwise, if
6703    USE_DEFAULT_ARGS is true, default arguments will be used to fill in
6704    unspecified arguments.  If REQUIRE_ALL_ARGS is true, but
6705    USE_DEFAULT_ARGS is false, then all arguments must be specified in
6706    ARGS.  */
6707
6708 static tree
6709 coerce_template_parms (tree parms,
6710                        tree args,
6711                        tree in_decl,
6712                        tsubst_flags_t complain,
6713                        bool require_all_args,
6714                        bool use_default_args)
6715 {
6716   int nparms, nargs, parm_idx, arg_idx, lost = 0;
6717   tree inner_args;
6718   tree new_args;
6719   tree new_inner_args;
6720   int saved_unevaluated_operand;
6721   int saved_inhibit_evaluation_warnings;
6722
6723   /* When used as a boolean value, indicates whether this is a
6724      variadic template parameter list. Since it's an int, we can also
6725      subtract it from nparms to get the number of non-variadic
6726      parameters.  */
6727   int variadic_p = 0;
6728   int post_variadic_parms = 0;
6729
6730   if (args == error_mark_node)
6731     return error_mark_node;
6732
6733   nparms = TREE_VEC_LENGTH (parms);
6734
6735   /* Determine if there are any parameter packs.  */
6736   for (parm_idx = 0; parm_idx < nparms; ++parm_idx)
6737     {
6738       tree tparm = TREE_VALUE (TREE_VEC_ELT (parms, parm_idx));
6739       if (variadic_p)
6740         ++post_variadic_parms;
6741       if (template_parameter_pack_p (tparm))
6742         ++variadic_p;
6743     }
6744
6745   inner_args = INNERMOST_TEMPLATE_ARGS (args);
6746   /* If there are no parameters that follow a parameter pack, we need to
6747      expand any argument packs so that we can deduce a parameter pack from
6748      some non-packed args followed by an argument pack, as in variadic85.C.
6749      If there are such parameters, we need to leave argument packs intact
6750      so the arguments are assigned properly.  This can happen when dealing
6751      with a nested class inside a partial specialization of a class
6752      template, as in variadic92.C, or when deducing a template parameter pack
6753      from a sub-declarator, as in variadic114.C.  */
6754   if (!post_variadic_parms)
6755     inner_args = expand_template_argument_pack (inner_args);
6756
6757   nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
6758   if ((nargs > nparms && !variadic_p)
6759       || (nargs < nparms - variadic_p
6760           && require_all_args
6761           && (!use_default_args
6762               || (TREE_VEC_ELT (parms, nargs) != error_mark_node
6763                   && !TREE_PURPOSE (TREE_VEC_ELT (parms, nargs))))))
6764     {
6765       if (complain & tf_error)
6766         {
6767           if (variadic_p)
6768             {
6769               nparms -= variadic_p;
6770               error ("wrong number of template arguments "
6771                      "(%d, should be %d or more)", nargs, nparms);
6772             }
6773           else
6774              error ("wrong number of template arguments "
6775                     "(%d, should be %d)", nargs, nparms);
6776
6777           if (in_decl)
6778             error ("provided for %q+D", in_decl);
6779         }
6780
6781       return error_mark_node;
6782     }
6783
6784   /* We need to evaluate the template arguments, even though this
6785      template-id may be nested within a "sizeof".  */
6786   saved_unevaluated_operand = cp_unevaluated_operand;
6787   cp_unevaluated_operand = 0;
6788   saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
6789   c_inhibit_evaluation_warnings = 0;
6790   new_inner_args = make_tree_vec (nparms);
6791   new_args = add_outermost_template_args (args, new_inner_args);
6792   for (parm_idx = 0, arg_idx = 0; parm_idx < nparms; parm_idx++, arg_idx++)
6793     {
6794       tree arg;
6795       tree parm;
6796
6797       /* Get the Ith template parameter.  */
6798       parm = TREE_VEC_ELT (parms, parm_idx);
6799  
6800       if (parm == error_mark_node)
6801       {
6802         TREE_VEC_ELT (new_inner_args, arg_idx) = error_mark_node;
6803         continue;
6804       }
6805
6806       /* Calculate the next argument.  */
6807       if (arg_idx < nargs)
6808         arg = TREE_VEC_ELT (inner_args, arg_idx);
6809       else
6810         arg = NULL_TREE;
6811
6812       if (template_parameter_pack_p (TREE_VALUE (parm))
6813           && !(arg && ARGUMENT_PACK_P (arg)))
6814         {
6815           /* All remaining arguments will be placed in the
6816              template parameter pack PARM.  */
6817           arg = coerce_template_parameter_pack (parms, parm_idx, args, 
6818                                                 inner_args, arg_idx,
6819                                                 new_args, &lost,
6820                                                 in_decl, complain);
6821
6822           /* Store this argument.  */
6823           if (arg == error_mark_node)
6824             lost++;
6825           TREE_VEC_ELT (new_inner_args, parm_idx) = arg;
6826
6827           /* We are done with all of the arguments.  */
6828           arg_idx = nargs;
6829           
6830           continue;
6831         }
6832       else if (arg)
6833         {
6834           if (PACK_EXPANSION_P (arg))
6835             {
6836               /* We don't know how many args we have yet, just
6837                  use the unconverted ones for now.  */
6838               new_inner_args = args;
6839               break;
6840             }
6841         }
6842       else if (require_all_args)
6843         {
6844           /* There must be a default arg in this case.  */
6845           arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
6846                                      complain, in_decl);
6847           /* The position of the first default template argument,
6848              is also the number of non-defaulted arguments in NEW_INNER_ARGS.
6849              Record that.  */
6850           if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args))
6851             SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args, arg_idx);
6852         }
6853       else
6854         break;
6855
6856       if (arg == error_mark_node)
6857         {
6858           if (complain & tf_error)
6859             error ("template argument %d is invalid", arg_idx + 1);
6860         }
6861       else if (!arg)
6862         /* This only occurs if there was an error in the template
6863            parameter list itself (which we would already have
6864            reported) that we are trying to recover from, e.g., a class
6865            template with a parameter list such as
6866            template<typename..., typename>.  */
6867         ++lost;
6868       else
6869         arg = convert_template_argument (TREE_VALUE (parm),
6870                                          arg, new_args, complain, 
6871                                          parm_idx, in_decl);
6872
6873       if (arg == error_mark_node)
6874         lost++;
6875       TREE_VEC_ELT (new_inner_args, arg_idx) = arg;
6876     }
6877   cp_unevaluated_operand = saved_unevaluated_operand;
6878   c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
6879
6880   if (lost)
6881     return error_mark_node;
6882
6883 #ifdef ENABLE_CHECKING
6884   if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args))
6885     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args,
6886                                          TREE_VEC_LENGTH (new_inner_args));
6887 #endif
6888
6889   return new_inner_args;
6890 }
6891
6892 /* Returns 1 if template args OT and NT are equivalent.  */
6893
6894 static int
6895 template_args_equal (tree ot, tree nt)
6896 {
6897   if (nt == ot)
6898     return 1;
6899   if (nt == NULL_TREE || ot == NULL_TREE)
6900     return false;
6901
6902   if (TREE_CODE (nt) == TREE_VEC)
6903     /* For member templates */
6904     return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
6905   else if (PACK_EXPANSION_P (ot))
6906     return (PACK_EXPANSION_P (nt)
6907             && template_args_equal (PACK_EXPANSION_PATTERN (ot),
6908                                     PACK_EXPANSION_PATTERN (nt))
6909             && template_args_equal (PACK_EXPANSION_EXTRA_ARGS (ot),
6910                                     PACK_EXPANSION_EXTRA_ARGS (nt)));
6911   else if (ARGUMENT_PACK_P (ot))
6912     {
6913       int i, len;
6914       tree opack, npack;
6915
6916       if (!ARGUMENT_PACK_P (nt))
6917         return 0;
6918
6919       opack = ARGUMENT_PACK_ARGS (ot);
6920       npack = ARGUMENT_PACK_ARGS (nt);
6921       len = TREE_VEC_LENGTH (opack);
6922       if (TREE_VEC_LENGTH (npack) != len)
6923         return 0;
6924       for (i = 0; i < len; ++i)
6925         if (!template_args_equal (TREE_VEC_ELT (opack, i),
6926                                   TREE_VEC_ELT (npack, i)))
6927           return 0;
6928       return 1;
6929     }
6930   else if (ot && TREE_CODE (ot) == ARGUMENT_PACK_SELECT)
6931     {
6932       /* We get here probably because we are in the middle of substituting
6933          into the pattern of a pack expansion. In that case the
6934          ARGUMENT_PACK_SELECT temporarily replaces the pack argument we are
6935          interested in. So we want to use the initial pack argument for
6936          the comparison.  */
6937       ot = ARGUMENT_PACK_SELECT_FROM_PACK (ot);
6938       if (nt && TREE_CODE (nt) == ARGUMENT_PACK_SELECT)
6939         nt = ARGUMENT_PACK_SELECT_FROM_PACK (nt);
6940       return template_args_equal (ot, nt);
6941     }
6942   else if (TYPE_P (nt))
6943     return TYPE_P (ot) && same_type_p (ot, nt);
6944   else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
6945     return 0;
6946   else
6947     return cp_tree_equal (ot, nt);
6948 }
6949
6950 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets of
6951    template arguments.  Returns 0 otherwise, and updates OLDARG_PTR and
6952    NEWARG_PTR with the offending arguments if they are non-NULL.  */
6953
6954 static int
6955 comp_template_args_with_info (tree oldargs, tree newargs,
6956                               tree *oldarg_ptr, tree *newarg_ptr)
6957 {
6958   int i;
6959
6960   if (oldargs == newargs)
6961     return 1;
6962
6963   if (!oldargs || !newargs)
6964     return 0;
6965
6966   if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
6967     return 0;
6968
6969   for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
6970     {
6971       tree nt = TREE_VEC_ELT (newargs, i);
6972       tree ot = TREE_VEC_ELT (oldargs, i);
6973
6974       if (! template_args_equal (ot, nt))
6975         {
6976           if (oldarg_ptr != NULL)
6977             *oldarg_ptr = ot;
6978           if (newarg_ptr != NULL)
6979             *newarg_ptr = nt;
6980           return 0;
6981         }
6982     }
6983   return 1;
6984 }
6985
6986 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
6987    of template arguments.  Returns 0 otherwise.  */
6988
6989 int
6990 comp_template_args (tree oldargs, tree newargs)
6991 {
6992   return comp_template_args_with_info (oldargs, newargs, NULL, NULL);
6993 }
6994
6995 static void
6996 add_pending_template (tree d)
6997 {
6998   tree ti = (TYPE_P (d)
6999              ? CLASSTYPE_TEMPLATE_INFO (d)
7000              : DECL_TEMPLATE_INFO (d));
7001   struct pending_template *pt;
7002   int level;
7003
7004   if (TI_PENDING_TEMPLATE_FLAG (ti))
7005     return;
7006
7007   /* We are called both from instantiate_decl, where we've already had a
7008      tinst_level pushed, and instantiate_template, where we haven't.
7009      Compensate.  */
7010   level = !current_tinst_level || current_tinst_level->decl != d;
7011
7012   if (level)
7013     push_tinst_level (d);
7014
7015   pt = ggc_alloc_pending_template ();
7016   pt->next = NULL;
7017   pt->tinst = current_tinst_level;
7018   if (last_pending_template)
7019     last_pending_template->next = pt;
7020   else
7021     pending_templates = pt;
7022
7023   last_pending_template = pt;
7024
7025   TI_PENDING_TEMPLATE_FLAG (ti) = 1;
7026
7027   if (level)
7028     pop_tinst_level ();
7029 }
7030
7031
7032 /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
7033    ARGLIST.  Valid choices for FNS are given in the cp-tree.def
7034    documentation for TEMPLATE_ID_EXPR.  */
7035
7036 tree
7037 lookup_template_function (tree fns, tree arglist)
7038 {
7039   tree type;
7040
7041   if (fns == error_mark_node || arglist == error_mark_node)
7042     return error_mark_node;
7043
7044   gcc_assert (!arglist || TREE_CODE (arglist) == TREE_VEC);
7045
7046   if (!is_overloaded_fn (fns) && TREE_CODE (fns) != IDENTIFIER_NODE)
7047     {
7048       error ("%q#D is not a function template", fns);
7049       return error_mark_node;
7050     }
7051
7052   if (BASELINK_P (fns))
7053     {
7054       BASELINK_FUNCTIONS (fns) = build2 (TEMPLATE_ID_EXPR,
7055                                          unknown_type_node,
7056                                          BASELINK_FUNCTIONS (fns),
7057                                          arglist);
7058       return fns;
7059     }
7060
7061   type = TREE_TYPE (fns);
7062   if (TREE_CODE (fns) == OVERLOAD || !type)
7063     type = unknown_type_node;
7064
7065   return build2 (TEMPLATE_ID_EXPR, type, fns, arglist);
7066 }
7067
7068 /* Within the scope of a template class S<T>, the name S gets bound
7069    (in build_self_reference) to a TYPE_DECL for the class, not a
7070    TEMPLATE_DECL.  If DECL is a TYPE_DECL for current_class_type,
7071    or one of its enclosing classes, and that type is a template,
7072    return the associated TEMPLATE_DECL.  Otherwise, the original
7073    DECL is returned.
7074
7075    Also handle the case when DECL is a TREE_LIST of ambiguous
7076    injected-class-names from different bases.  */
7077
7078 tree
7079 maybe_get_template_decl_from_type_decl (tree decl)
7080 {
7081   if (decl == NULL_TREE)
7082     return decl;
7083
7084   /* DR 176: A lookup that finds an injected-class-name (10.2
7085      [class.member.lookup]) can result in an ambiguity in certain cases
7086      (for example, if it is found in more than one base class). If all of
7087      the injected-class-names that are found refer to specializations of
7088      the same class template, and if the name is followed by a
7089      template-argument-list, the reference refers to the class template
7090      itself and not a specialization thereof, and is not ambiguous.  */
7091   if (TREE_CODE (decl) == TREE_LIST)
7092     {
7093       tree t, tmpl = NULL_TREE;
7094       for (t = decl; t; t = TREE_CHAIN (t))
7095         {
7096           tree elt = maybe_get_template_decl_from_type_decl (TREE_VALUE (t));
7097           if (!tmpl)
7098             tmpl = elt;
7099           else if (tmpl != elt)
7100             break;
7101         }
7102       if (tmpl && t == NULL_TREE)
7103         return tmpl;
7104       else
7105         return decl;
7106     }
7107
7108   return (decl != NULL_TREE
7109           && DECL_SELF_REFERENCE_P (decl)
7110           && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
7111     ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
7112 }
7113
7114 /* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of
7115    parameters, find the desired type.
7116
7117    D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
7118
7119    IN_DECL, if non-NULL, is the template declaration we are trying to
7120    instantiate.
7121
7122    If ENTERING_SCOPE is nonzero, we are about to enter the scope of
7123    the class we are looking up.
7124
7125    Issue error and warning messages under control of COMPLAIN.
7126
7127    If the template class is really a local class in a template
7128    function, then the FUNCTION_CONTEXT is the function in which it is
7129    being instantiated.
7130
7131    ??? Note that this function is currently called *twice* for each
7132    template-id: the first time from the parser, while creating the
7133    incomplete type (finish_template_type), and the second type during the
7134    real instantiation (instantiate_template_class). This is surely something
7135    that we want to avoid. It also causes some problems with argument
7136    coercion (see convert_nontype_argument for more information on this).  */
7137
7138 static tree
7139 lookup_template_class_1 (tree d1, tree arglist, tree in_decl, tree context,
7140                          int entering_scope, tsubst_flags_t complain)
7141 {
7142   tree templ = NULL_TREE, parmlist;
7143   tree t;
7144   void **slot;
7145   spec_entry *entry;
7146   spec_entry elt;
7147   hashval_t hash;
7148
7149   if (TREE_CODE (d1) == IDENTIFIER_NODE)
7150     {
7151       tree value = innermost_non_namespace_value (d1);
7152       if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
7153         templ = value;
7154       else
7155         {
7156           if (context)
7157             push_decl_namespace (context);
7158           templ = lookup_name (d1);
7159           templ = maybe_get_template_decl_from_type_decl (templ);
7160           if (context)
7161             pop_decl_namespace ();
7162         }
7163       if (templ)
7164         context = DECL_CONTEXT (templ);
7165     }
7166   else if (TREE_CODE (d1) == TYPE_DECL && MAYBE_CLASS_TYPE_P (TREE_TYPE (d1)))
7167     {
7168       tree type = TREE_TYPE (d1);
7169
7170       /* If we are declaring a constructor, say A<T>::A<T>, we will get
7171          an implicit typename for the second A.  Deal with it.  */
7172       if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
7173         type = TREE_TYPE (type);
7174
7175       if (CLASSTYPE_TEMPLATE_INFO (type))
7176         {
7177           templ = CLASSTYPE_TI_TEMPLATE (type);
7178           d1 = DECL_NAME (templ);
7179         }
7180     }
7181   else if (TREE_CODE (d1) == ENUMERAL_TYPE
7182            || (TYPE_P (d1) && MAYBE_CLASS_TYPE_P (d1)))
7183     {
7184       templ = TYPE_TI_TEMPLATE (d1);
7185       d1 = DECL_NAME (templ);
7186     }
7187   else if (TREE_CODE (d1) == TEMPLATE_DECL
7188            && DECL_TEMPLATE_RESULT (d1)
7189            && TREE_CODE (DECL_TEMPLATE_RESULT (d1)) == TYPE_DECL)
7190     {
7191       templ = d1;
7192       d1 = DECL_NAME (templ);
7193       context = DECL_CONTEXT (templ);
7194     }
7195
7196   /* Issue an error message if we didn't find a template.  */
7197   if (! templ)
7198     {
7199       if (complain & tf_error)
7200         error ("%qT is not a template", d1);
7201       return error_mark_node;
7202     }
7203
7204   if (TREE_CODE (templ) != TEMPLATE_DECL
7205          /* Make sure it's a user visible template, if it was named by
7206             the user.  */
7207       || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (templ)
7208           && !PRIMARY_TEMPLATE_P (templ)))
7209     {
7210       if (complain & tf_error)
7211         {
7212           error ("non-template type %qT used as a template", d1);
7213           if (in_decl)
7214             error ("for template declaration %q+D", in_decl);
7215         }
7216       return error_mark_node;
7217     }
7218
7219   complain &= ~tf_user;
7220
7221   if (DECL_TEMPLATE_TEMPLATE_PARM_P (templ))
7222     {
7223       /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
7224          template arguments */
7225
7226       tree parm;
7227       tree arglist2;
7228       tree outer;
7229
7230       parmlist = DECL_INNERMOST_TEMPLATE_PARMS (templ);
7231
7232       /* Consider an example where a template template parameter declared as
7233
7234            template <class T, class U = std::allocator<T> > class TT
7235
7236          The template parameter level of T and U are one level larger than
7237          of TT.  To proper process the default argument of U, say when an
7238          instantiation `TT<int>' is seen, we need to build the full
7239          arguments containing {int} as the innermost level.  Outer levels,
7240          available when not appearing as default template argument, can be
7241          obtained from the arguments of the enclosing template.
7242
7243          Suppose that TT is later substituted with std::vector.  The above
7244          instantiation is `TT<int, std::allocator<T> >' with TT at
7245          level 1, and T at level 2, while the template arguments at level 1
7246          becomes {std::vector} and the inner level 2 is {int}.  */
7247
7248       outer = DECL_CONTEXT (templ);
7249       if (outer)
7250         outer = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (outer)));
7251       else if (current_template_parms)
7252         /* This is an argument of the current template, so we haven't set
7253            DECL_CONTEXT yet.  */
7254         outer = current_template_args ();
7255
7256       if (outer)
7257         arglist = add_to_template_args (outer, arglist);
7258
7259       arglist2 = coerce_template_parms (parmlist, arglist, templ,
7260                                         complain,
7261                                         /*require_all_args=*/true,
7262                                         /*use_default_args=*/true);
7263       if (arglist2 == error_mark_node
7264           || (!uses_template_parms (arglist2)
7265               && check_instantiated_args (templ, arglist2, complain)))
7266         return error_mark_node;
7267
7268       parm = bind_template_template_parm (TREE_TYPE (templ), arglist2);
7269       return parm;
7270     }
7271   else
7272     {
7273       tree template_type = TREE_TYPE (templ);
7274       tree gen_tmpl;
7275       tree type_decl;
7276       tree found = NULL_TREE;
7277       int arg_depth;
7278       int parm_depth;
7279       int is_dependent_type;
7280       int use_partial_inst_tmpl = false;
7281
7282       if (template_type == error_mark_node)
7283         /* An error occured while building the template TEMPL, and a
7284            diagnostic has most certainly been emitted for that
7285            already.  Let's propagate that error.  */
7286         return error_mark_node;
7287
7288       gen_tmpl = most_general_template (templ);
7289       parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
7290       parm_depth = TMPL_PARMS_DEPTH (parmlist);
7291       arg_depth = TMPL_ARGS_DEPTH (arglist);
7292
7293       if (arg_depth == 1 && parm_depth > 1)
7294         {
7295           /* We've been given an incomplete set of template arguments.
7296              For example, given:
7297
7298                template <class T> struct S1 {
7299                  template <class U> struct S2 {};
7300                  template <class U> struct S2<U*> {};
7301                 };
7302
7303              we will be called with an ARGLIST of `U*', but the
7304              TEMPLATE will be `template <class T> template
7305              <class U> struct S1<T>::S2'.  We must fill in the missing
7306              arguments.  */
7307           arglist
7308             = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (templ)),
7309                                            arglist);
7310           arg_depth = TMPL_ARGS_DEPTH (arglist);
7311         }
7312
7313       /* Now we should have enough arguments.  */
7314       gcc_assert (parm_depth == arg_depth);
7315
7316       /* From here on, we're only interested in the most general
7317          template.  */
7318
7319       /* Calculate the BOUND_ARGS.  These will be the args that are
7320          actually tsubst'd into the definition to create the
7321          instantiation.  */
7322       if (parm_depth > 1)
7323         {
7324           /* We have multiple levels of arguments to coerce, at once.  */
7325           int i;
7326           int saved_depth = TMPL_ARGS_DEPTH (arglist);
7327
7328           tree bound_args = make_tree_vec (parm_depth);
7329
7330           for (i = saved_depth,
7331                  t = DECL_TEMPLATE_PARMS (gen_tmpl);
7332                i > 0 && t != NULL_TREE;
7333                --i, t = TREE_CHAIN (t))
7334             {
7335               tree a;
7336               if (i == saved_depth)
7337                 a = coerce_template_parms (TREE_VALUE (t),
7338                                            arglist, gen_tmpl,
7339                                            complain,
7340                                            /*require_all_args=*/true,
7341                                            /*use_default_args=*/true);
7342               else
7343                 /* Outer levels should have already been coerced.  */
7344                 a = TMPL_ARGS_LEVEL (arglist, i);
7345
7346               /* Don't process further if one of the levels fails.  */
7347               if (a == error_mark_node)
7348                 {
7349                   /* Restore the ARGLIST to its full size.  */
7350                   TREE_VEC_LENGTH (arglist) = saved_depth;
7351                   return error_mark_node;
7352                 }
7353
7354               SET_TMPL_ARGS_LEVEL (bound_args, i, a);
7355
7356               /* We temporarily reduce the length of the ARGLIST so
7357                  that coerce_template_parms will see only the arguments
7358                  corresponding to the template parameters it is
7359                  examining.  */
7360               TREE_VEC_LENGTH (arglist)--;
7361             }
7362
7363           /* Restore the ARGLIST to its full size.  */
7364           TREE_VEC_LENGTH (arglist) = saved_depth;
7365
7366           arglist = bound_args;
7367         }
7368       else
7369         arglist
7370           = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
7371                                    INNERMOST_TEMPLATE_ARGS (arglist),
7372                                    gen_tmpl,
7373                                    complain,
7374                                    /*require_all_args=*/true,
7375                                    /*use_default_args=*/true);
7376
7377       if (arglist == error_mark_node)
7378         /* We were unable to bind the arguments.  */
7379         return error_mark_node;
7380
7381       /* In the scope of a template class, explicit references to the
7382          template class refer to the type of the template, not any
7383          instantiation of it.  For example, in:
7384
7385            template <class T> class C { void f(C<T>); }
7386
7387          the `C<T>' is just the same as `C'.  Outside of the
7388          class, however, such a reference is an instantiation.  */
7389       if ((entering_scope
7390            || !PRIMARY_TEMPLATE_P (gen_tmpl)
7391            || currently_open_class (template_type))
7392           /* comp_template_args is expensive, check it last.  */
7393           && comp_template_args (TYPE_TI_ARGS (template_type),
7394                                  arglist))
7395         return template_type;
7396
7397       /* If we already have this specialization, return it.  */
7398       elt.tmpl = gen_tmpl;
7399       elt.args = arglist;
7400       hash = hash_specialization (&elt);
7401       entry = (spec_entry *) htab_find_with_hash (type_specializations,
7402                                                   &elt, hash);
7403
7404       if (entry)
7405         return entry->spec;
7406
7407       is_dependent_type = uses_template_parms (arglist);
7408
7409       /* If the deduced arguments are invalid, then the binding
7410          failed.  */
7411       if (!is_dependent_type
7412           && check_instantiated_args (gen_tmpl,
7413                                       INNERMOST_TEMPLATE_ARGS (arglist),
7414                                       complain))
7415         return error_mark_node;
7416
7417       if (!is_dependent_type
7418           && !PRIMARY_TEMPLATE_P (gen_tmpl)
7419           && !LAMBDA_TYPE_P (TREE_TYPE (gen_tmpl))
7420           && TREE_CODE (CP_DECL_CONTEXT (gen_tmpl)) == NAMESPACE_DECL)
7421         {
7422           found = xref_tag_from_type (TREE_TYPE (gen_tmpl),
7423                                       DECL_NAME (gen_tmpl),
7424                                       /*tag_scope=*/ts_global);
7425           return found;
7426         }
7427
7428       context = tsubst (DECL_CONTEXT (gen_tmpl), arglist,
7429                         complain, in_decl);
7430       if (!context)
7431         context = global_namespace;
7432
7433       /* Create the type.  */
7434       if (TREE_CODE (template_type) == ENUMERAL_TYPE)
7435         {
7436           if (!is_dependent_type)
7437             {
7438               set_current_access_from_decl (TYPE_NAME (template_type));
7439               t = start_enum (TYPE_IDENTIFIER (template_type), NULL_TREE,
7440                               tsubst (ENUM_UNDERLYING_TYPE (template_type),
7441                                       arglist, complain, in_decl),
7442                               SCOPED_ENUM_P (template_type), NULL);
7443             }
7444           else
7445             {
7446               /* We don't want to call start_enum for this type, since
7447                  the values for the enumeration constants may involve
7448                  template parameters.  And, no one should be interested
7449                  in the enumeration constants for such a type.  */
7450               t = cxx_make_type (ENUMERAL_TYPE);
7451               SET_SCOPED_ENUM_P (t, SCOPED_ENUM_P (template_type));
7452             }
7453           SET_OPAQUE_ENUM_P (t, OPAQUE_ENUM_P (template_type));
7454           ENUM_FIXED_UNDERLYING_TYPE_P (t)
7455             = ENUM_FIXED_UNDERLYING_TYPE_P (template_type);
7456         }
7457       else if (DECL_ALIAS_TEMPLATE_P (gen_tmpl))
7458         {
7459           /* The user referred to a specialization of an alias
7460             template represented by GEN_TMPL.
7461
7462             [temp.alias]/2 says:
7463
7464                 When a template-id refers to the specialization of an
7465                 alias template, it is equivalent to the associated
7466                 type obtained by substitution of its
7467                 template-arguments for the template-parameters in the
7468                 type-id of the alias template.  */
7469
7470           t = tsubst (TREE_TYPE (gen_tmpl), arglist, complain, in_decl);
7471           /* Note that the call above (by indirectly calling
7472              register_specialization in tsubst_decl) registers the
7473              TYPE_DECL representing the specialization of the alias
7474              template.  So next time someone substitutes ARGLIST for
7475              the template parms into the alias template (GEN_TMPL),
7476              she'll get that TYPE_DECL back.  */
7477
7478           if (t == error_mark_node)
7479             return t;
7480         }
7481       else if (CLASS_TYPE_P (template_type))
7482         {
7483           t = make_class_type (TREE_CODE (template_type));
7484           CLASSTYPE_DECLARED_CLASS (t)
7485             = CLASSTYPE_DECLARED_CLASS (template_type);
7486           SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
7487           TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
7488
7489           /* A local class.  Make sure the decl gets registered properly.  */
7490           if (context == current_function_decl)
7491             pushtag (DECL_NAME (gen_tmpl), t, /*tag_scope=*/ts_current);
7492
7493           if (comp_template_args (CLASSTYPE_TI_ARGS (template_type), arglist))
7494             /* This instantiation is another name for the primary
7495                template type. Set the TYPE_CANONICAL field
7496                appropriately. */
7497             TYPE_CANONICAL (t) = template_type;
7498           else if (any_template_arguments_need_structural_equality_p (arglist))
7499             /* Some of the template arguments require structural
7500                equality testing, so this template class requires
7501                structural equality testing. */
7502             SET_TYPE_STRUCTURAL_EQUALITY (t);
7503         }
7504       else
7505         gcc_unreachable ();
7506
7507       /* If we called start_enum or pushtag above, this information
7508          will already be set up.  */
7509       if (!TYPE_NAME (t))
7510         {
7511           TYPE_CONTEXT (t) = FROB_CONTEXT (context);
7512
7513           type_decl = create_implicit_typedef (DECL_NAME (gen_tmpl), t);
7514           DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
7515           DECL_SOURCE_LOCATION (type_decl)
7516             = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
7517         }
7518       else
7519         type_decl = TYPE_NAME (t);
7520
7521       if (CLASS_TYPE_P (template_type))
7522         {
7523           TREE_PRIVATE (type_decl)
7524             = TREE_PRIVATE (TYPE_STUB_DECL (template_type));
7525           TREE_PROTECTED (type_decl)
7526             = TREE_PROTECTED (TYPE_STUB_DECL (template_type));
7527           if (CLASSTYPE_VISIBILITY_SPECIFIED (template_type))
7528             {
7529               DECL_VISIBILITY_SPECIFIED (type_decl) = 1;
7530               DECL_VISIBILITY (type_decl) = CLASSTYPE_VISIBILITY (template_type);
7531             }
7532         }
7533
7534       /* Let's consider the explicit specialization of a member
7535          of a class template specialization that is implicitely instantiated,
7536          e.g.:
7537              template<class T>
7538              struct S
7539              {
7540                template<class U> struct M {}; //#0
7541              };
7542
7543              template<>
7544              template<>
7545              struct S<int>::M<char> //#1
7546              {
7547                int i;
7548              };
7549         [temp.expl.spec]/4 says this is valid.
7550
7551         In this case, when we write:
7552         S<int>::M<char> m;
7553
7554         M is instantiated from the CLASSTYPE_TI_TEMPLATE of #1, not from
7555         the one of #0.
7556
7557         When we encounter #1, we want to store the partial instantiation
7558         of M (template<class T> S<int>::M<T>) in it's CLASSTYPE_TI_TEMPLATE.
7559
7560         For all cases other than this "explicit specialization of member of a
7561         class template", we just want to store the most general template into
7562         the CLASSTYPE_TI_TEMPLATE of M.
7563
7564         This case of "explicit specialization of member of a class template"
7565         only happens when:
7566         1/ the enclosing class is an instantiation of, and therefore not
7567         the same as, the context of the most general template, and
7568         2/ we aren't looking at the partial instantiation itself, i.e.
7569         the innermost arguments are not the same as the innermost parms of
7570         the most general template.
7571
7572         So it's only when 1/ and 2/ happens that we want to use the partial
7573         instantiation of the member template in lieu of its most general
7574         template.  */
7575
7576       if (PRIMARY_TEMPLATE_P (gen_tmpl)
7577           && TMPL_ARGS_HAVE_MULTIPLE_LEVELS (arglist)
7578           /* the enclosing class must be an instantiation...  */
7579           && CLASS_TYPE_P (context)
7580           && !same_type_p (context, DECL_CONTEXT (gen_tmpl)))
7581         {
7582           tree partial_inst_args;
7583           TREE_VEC_LENGTH (arglist)--;
7584           ++processing_template_decl;
7585           partial_inst_args =
7586             tsubst (INNERMOST_TEMPLATE_ARGS
7587                         (TYPE_TI_ARGS (TREE_TYPE (gen_tmpl))),
7588                     arglist, complain, NULL_TREE);
7589           --processing_template_decl;
7590           TREE_VEC_LENGTH (arglist)++;
7591           use_partial_inst_tmpl =
7592             /*...and we must not be looking at the partial instantiation
7593              itself. */
7594             !comp_template_args (INNERMOST_TEMPLATE_ARGS (arglist),
7595                                  partial_inst_args);
7596         }
7597
7598       if (!use_partial_inst_tmpl)
7599         /* This case is easy; there are no member templates involved.  */
7600         found = gen_tmpl;
7601       else
7602         {
7603           /* This is a full instantiation of a member template.  Find
7604              the partial instantiation of which this is an instance.  */
7605
7606           /* Temporarily reduce by one the number of levels in the ARGLIST
7607              so as to avoid comparing the last set of arguments.  */
7608           TREE_VEC_LENGTH (arglist)--;
7609           found = tsubst (gen_tmpl, arglist, complain, NULL_TREE);
7610           TREE_VEC_LENGTH (arglist)++;
7611           /* FOUND is either a proper class type, or an alias
7612              template specialization.  In the later case, it's a
7613              TYPE_DECL, resulting from the substituting of arguments
7614              for parameters in the TYPE_DECL of the alias template
7615              done earlier.  So be careful while getting the template
7616              of FOUND.  */
7617           found = TREE_CODE (found) == TYPE_DECL
7618             ? TYPE_TI_TEMPLATE (TREE_TYPE (found))
7619             : CLASSTYPE_TI_TEMPLATE (found);
7620         }
7621
7622       SET_TYPE_TEMPLATE_INFO (t, build_template_info (found, arglist));
7623
7624       elt.spec = t;
7625       slot = htab_find_slot_with_hash (type_specializations,
7626                                        &elt, hash, INSERT);
7627       entry = ggc_alloc_spec_entry ();
7628       *entry = elt;
7629       *slot = entry;
7630
7631       /* Note this use of the partial instantiation so we can check it
7632          later in maybe_process_partial_specialization.  */
7633       DECL_TEMPLATE_INSTANTIATIONS (templ)
7634         = tree_cons (arglist, t,
7635                      DECL_TEMPLATE_INSTANTIATIONS (templ));
7636
7637       if (TREE_CODE (t) == ENUMERAL_TYPE && !is_dependent_type)
7638         /* Now that the type has been registered on the instantiations
7639            list, we set up the enumerators.  Because the enumeration
7640            constants may involve the enumeration type itself, we make
7641            sure to register the type first, and then create the
7642            constants.  That way, doing tsubst_expr for the enumeration
7643            constants won't result in recursive calls here; we'll find
7644            the instantiation and exit above.  */
7645         tsubst_enum (template_type, t, arglist);
7646
7647       if (CLASS_TYPE_P (template_type) && is_dependent_type)
7648         /* If the type makes use of template parameters, the
7649            code that generates debugging information will crash.  */
7650         DECL_IGNORED_P (TYPE_STUB_DECL (t)) = 1;
7651
7652       /* Possibly limit visibility based on template args.  */
7653       TREE_PUBLIC (type_decl) = 1;
7654       determine_visibility (type_decl);
7655
7656       return t;
7657     }
7658 }
7659
7660 /* Wrapper for lookup_template_class_1.  */
7661
7662 tree
7663 lookup_template_class (tree d1, tree arglist, tree in_decl, tree context,
7664                        int entering_scope, tsubst_flags_t complain)
7665 {
7666   tree ret;
7667   timevar_push (TV_TEMPLATE_INST);
7668   ret = lookup_template_class_1 (d1, arglist, in_decl, context,
7669                                  entering_scope, complain);
7670   timevar_pop (TV_TEMPLATE_INST);
7671   return ret;
7672 }
7673 \f
7674 struct pair_fn_data
7675 {
7676   tree_fn_t fn;
7677   void *data;
7678   /* True when we should also visit template parameters that occur in
7679      non-deduced contexts.  */
7680   bool include_nondeduced_p;
7681   struct pointer_set_t *visited;
7682 };
7683
7684 /* Called from for_each_template_parm via walk_tree.  */
7685
7686 static tree
7687 for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
7688 {
7689   tree t = *tp;
7690   struct pair_fn_data *pfd = (struct pair_fn_data *) d;
7691   tree_fn_t fn = pfd->fn;
7692   void *data = pfd->data;
7693
7694   if (TYPE_P (t)
7695       && (pfd->include_nondeduced_p || TREE_CODE (t) != TYPENAME_TYPE)
7696       && for_each_template_parm (TYPE_CONTEXT (t), fn, data, pfd->visited,
7697                                  pfd->include_nondeduced_p))
7698     return error_mark_node;
7699
7700   switch (TREE_CODE (t))
7701     {
7702     case RECORD_TYPE:
7703       if (TYPE_PTRMEMFUNC_P (t))
7704         break;
7705       /* Fall through.  */
7706
7707     case UNION_TYPE:
7708     case ENUMERAL_TYPE:
7709       if (!TYPE_TEMPLATE_INFO (t))
7710         *walk_subtrees = 0;
7711       else if (for_each_template_parm (TI_ARGS (TYPE_TEMPLATE_INFO (t)),
7712                                        fn, data, pfd->visited, 
7713                                        pfd->include_nondeduced_p))
7714         return error_mark_node;
7715       break;
7716
7717     case INTEGER_TYPE:
7718       if (for_each_template_parm (TYPE_MIN_VALUE (t),
7719                                   fn, data, pfd->visited, 
7720                                   pfd->include_nondeduced_p)
7721           || for_each_template_parm (TYPE_MAX_VALUE (t),
7722                                      fn, data, pfd->visited,
7723                                      pfd->include_nondeduced_p))
7724         return error_mark_node;
7725       break;
7726
7727     case METHOD_TYPE:
7728       /* Since we're not going to walk subtrees, we have to do this
7729          explicitly here.  */
7730       if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data,
7731                                   pfd->visited, pfd->include_nondeduced_p))
7732         return error_mark_node;
7733       /* Fall through.  */
7734
7735     case FUNCTION_TYPE:
7736       /* Check the return type.  */
7737       if (for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
7738                                   pfd->include_nondeduced_p))
7739         return error_mark_node;
7740
7741       /* Check the parameter types.  Since default arguments are not
7742          instantiated until they are needed, the TYPE_ARG_TYPES may
7743          contain expressions that involve template parameters.  But,
7744          no-one should be looking at them yet.  And, once they're
7745          instantiated, they don't contain template parameters, so
7746          there's no point in looking at them then, either.  */
7747       {
7748         tree parm;
7749
7750         for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
7751           if (for_each_template_parm (TREE_VALUE (parm), fn, data,
7752                                       pfd->visited, pfd->include_nondeduced_p))
7753             return error_mark_node;
7754
7755         /* Since we've already handled the TYPE_ARG_TYPES, we don't
7756            want walk_tree walking into them itself.  */
7757         *walk_subtrees = 0;
7758       }
7759       break;
7760
7761     case TYPEOF_TYPE:
7762     case UNDERLYING_TYPE:
7763       if (pfd->include_nondeduced_p
7764           && for_each_template_parm (TYPE_FIELDS (t), fn, data,
7765                                      pfd->visited, 
7766                                      pfd->include_nondeduced_p))
7767         return error_mark_node;
7768       break;
7769
7770     case FUNCTION_DECL:
7771     case VAR_DECL:
7772       if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
7773           && for_each_template_parm (DECL_TI_ARGS (t), fn, data,
7774                                      pfd->visited, pfd->include_nondeduced_p))
7775         return error_mark_node;
7776       /* Fall through.  */
7777
7778     case PARM_DECL:
7779     case CONST_DECL:
7780       if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t)
7781           && for_each_template_parm (DECL_INITIAL (t), fn, data,
7782                                      pfd->visited, pfd->include_nondeduced_p))
7783         return error_mark_node;
7784       if (DECL_CONTEXT (t)
7785           && pfd->include_nondeduced_p
7786           && for_each_template_parm (DECL_CONTEXT (t), fn, data,
7787                                      pfd->visited, pfd->include_nondeduced_p))
7788         return error_mark_node;
7789       break;
7790
7791     case BOUND_TEMPLATE_TEMPLATE_PARM:
7792       /* Record template parameters such as `T' inside `TT<T>'.  */
7793       if (for_each_template_parm (TYPE_TI_ARGS (t), fn, data, pfd->visited,
7794                                   pfd->include_nondeduced_p))
7795         return error_mark_node;
7796       /* Fall through.  */
7797
7798     case TEMPLATE_TEMPLATE_PARM:
7799     case TEMPLATE_TYPE_PARM:
7800     case TEMPLATE_PARM_INDEX:
7801       if (fn && (*fn)(t, data))
7802         return error_mark_node;
7803       else if (!fn)
7804         return error_mark_node;
7805       break;
7806
7807     case TEMPLATE_DECL:
7808       /* A template template parameter is encountered.  */
7809       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
7810           && for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
7811                                      pfd->include_nondeduced_p))
7812         return error_mark_node;
7813
7814       /* Already substituted template template parameter */
7815       *walk_subtrees = 0;
7816       break;
7817
7818     case TYPENAME_TYPE:
7819       if (!fn
7820           || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn,
7821                                      data, pfd->visited, 
7822                                      pfd->include_nondeduced_p))
7823         return error_mark_node;
7824       break;
7825
7826     case CONSTRUCTOR:
7827       if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
7828           && pfd->include_nondeduced_p
7829           && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
7830                                      (TREE_TYPE (t)), fn, data,
7831                                      pfd->visited, pfd->include_nondeduced_p))
7832         return error_mark_node;
7833       break;
7834
7835     case INDIRECT_REF:
7836     case COMPONENT_REF:
7837       /* If there's no type, then this thing must be some expression
7838          involving template parameters.  */
7839       if (!fn && !TREE_TYPE (t))
7840         return error_mark_node;
7841       break;
7842
7843     case MODOP_EXPR:
7844     case CAST_EXPR:
7845     case IMPLICIT_CONV_EXPR:
7846     case REINTERPRET_CAST_EXPR:
7847     case CONST_CAST_EXPR:
7848     case STATIC_CAST_EXPR:
7849     case DYNAMIC_CAST_EXPR:
7850     case ARROW_EXPR:
7851     case DOTSTAR_EXPR:
7852     case TYPEID_EXPR:
7853     case PSEUDO_DTOR_EXPR:
7854       if (!fn)
7855         return error_mark_node;
7856       break;
7857
7858     default:
7859       break;
7860     }
7861
7862   /* We didn't find any template parameters we liked.  */
7863   return NULL_TREE;
7864 }
7865
7866 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
7867    BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
7868    call FN with the parameter and the DATA.
7869    If FN returns nonzero, the iteration is terminated, and
7870    for_each_template_parm returns 1.  Otherwise, the iteration
7871    continues.  If FN never returns a nonzero value, the value
7872    returned by for_each_template_parm is 0.  If FN is NULL, it is
7873    considered to be the function which always returns 1.
7874
7875    If INCLUDE_NONDEDUCED_P, then this routine will also visit template
7876    parameters that occur in non-deduced contexts.  When false, only
7877    visits those template parameters that can be deduced.  */
7878
7879 static int
7880 for_each_template_parm (tree t, tree_fn_t fn, void* data,
7881                         struct pointer_set_t *visited,
7882                         bool include_nondeduced_p)
7883 {
7884   struct pair_fn_data pfd;
7885   int result;
7886
7887   /* Set up.  */
7888   pfd.fn = fn;
7889   pfd.data = data;
7890   pfd.include_nondeduced_p = include_nondeduced_p;
7891
7892   /* Walk the tree.  (Conceptually, we would like to walk without
7893      duplicates, but for_each_template_parm_r recursively calls
7894      for_each_template_parm, so we would need to reorganize a fair
7895      bit to use walk_tree_without_duplicates, so we keep our own
7896      visited list.)  */
7897   if (visited)
7898     pfd.visited = visited;
7899   else
7900     pfd.visited = pointer_set_create ();
7901   result = cp_walk_tree (&t,
7902                          for_each_template_parm_r,
7903                          &pfd,
7904                          pfd.visited) != NULL_TREE;
7905
7906   /* Clean up.  */
7907   if (!visited)
7908     {
7909       pointer_set_destroy (pfd.visited);
7910       pfd.visited = 0;
7911     }
7912
7913   return result;
7914 }
7915
7916 /* Returns true if T depends on any template parameter.  */
7917
7918 int
7919 uses_template_parms (tree t)
7920 {
7921   bool dependent_p;
7922   int saved_processing_template_decl;
7923
7924   saved_processing_template_decl = processing_template_decl;
7925   if (!saved_processing_template_decl)
7926     processing_template_decl = 1;
7927   if (TYPE_P (t))
7928     dependent_p = dependent_type_p (t);
7929   else if (TREE_CODE (t) == TREE_VEC)
7930     dependent_p = any_dependent_template_arguments_p (t);
7931   else if (TREE_CODE (t) == TREE_LIST)
7932     dependent_p = (uses_template_parms (TREE_VALUE (t))
7933                    || uses_template_parms (TREE_CHAIN (t)));
7934   else if (TREE_CODE (t) == TYPE_DECL)
7935     dependent_p = dependent_type_p (TREE_TYPE (t));
7936   else if (DECL_P (t)
7937            || EXPR_P (t)
7938            || TREE_CODE (t) == TEMPLATE_PARM_INDEX
7939            || TREE_CODE (t) == OVERLOAD
7940            || BASELINK_P (t)
7941            || TREE_CODE (t) == IDENTIFIER_NODE
7942            || TREE_CODE (t) == TRAIT_EXPR
7943            || TREE_CODE (t) == CONSTRUCTOR
7944            || CONSTANT_CLASS_P (t))
7945     dependent_p = (type_dependent_expression_p (t)
7946                    || value_dependent_expression_p (t));
7947   else
7948     {
7949       gcc_assert (t == error_mark_node);
7950       dependent_p = false;
7951     }
7952
7953   processing_template_decl = saved_processing_template_decl;
7954
7955   return dependent_p;
7956 }
7957
7958 /* Returns true if T depends on any template parameter with level LEVEL.  */
7959
7960 int
7961 uses_template_parms_level (tree t, int level)
7962 {
7963   return for_each_template_parm (t, template_parm_this_level_p, &level, NULL,
7964                                  /*include_nondeduced_p=*/true);
7965 }
7966
7967 /* Returns TRUE iff INST is an instantiation we don't need to do in an
7968    ill-formed translation unit, i.e. a variable or function that isn't
7969    usable in a constant expression.  */
7970
7971 static inline bool
7972 neglectable_inst_p (tree d)
7973 {
7974   return (DECL_P (d)
7975           && !(TREE_CODE (d) == FUNCTION_DECL ? DECL_DECLARED_CONSTEXPR_P (d)
7976                : decl_maybe_constant_var_p (d)));
7977 }
7978
7979 /* Returns TRUE iff we should refuse to instantiate DECL because it's
7980    neglectable and instantiated from within an erroneous instantiation.  */
7981
7982 static bool
7983 limit_bad_template_recursion (tree decl)
7984 {
7985   struct tinst_level *lev = current_tinst_level;
7986   int errs = errorcount + sorrycount;
7987   if (lev == NULL || errs == 0 || !neglectable_inst_p (decl))
7988     return false;
7989
7990   for (; lev; lev = lev->next)
7991     if (neglectable_inst_p (lev->decl))
7992       break;
7993
7994   return (lev && errs > lev->errors);
7995 }
7996
7997 static int tinst_depth;
7998 extern int max_tinst_depth;
7999 #ifdef GATHER_STATISTICS
8000 int depth_reached;
8001 #endif
8002 static GTY(()) struct tinst_level *last_error_tinst_level;
8003
8004 /* We're starting to instantiate D; record the template instantiation context
8005    for diagnostics and to restore it later.  */
8006
8007 int
8008 push_tinst_level (tree d)
8009 {
8010   struct tinst_level *new_level;
8011
8012   if (tinst_depth >= max_tinst_depth)
8013     {
8014       last_error_tinst_level = current_tinst_level;
8015       if (TREE_CODE (d) == TREE_LIST)
8016         error ("template instantiation depth exceeds maximum of %d (use "
8017                "-ftemplate-depth= to increase the maximum) substituting %qS",
8018                max_tinst_depth, d);
8019       else
8020         error ("template instantiation depth exceeds maximum of %d (use "
8021                "-ftemplate-depth= to increase the maximum) instantiating %qD",
8022                max_tinst_depth, d);
8023
8024       print_instantiation_context ();
8025
8026       return 0;
8027     }
8028
8029   /* If the current instantiation caused problems, don't let it instantiate
8030      anything else.  Do allow deduction substitution and decls usable in
8031      constant expressions.  */
8032   if (limit_bad_template_recursion (d))
8033     return 0;
8034
8035   new_level = ggc_alloc_tinst_level ();
8036   new_level->decl = d;
8037   new_level->locus = input_location;
8038   new_level->errors = errorcount+sorrycount;
8039   new_level->in_system_header_p = in_system_header;
8040   new_level->next = current_tinst_level;
8041   current_tinst_level = new_level;
8042
8043   ++tinst_depth;
8044 #ifdef GATHER_STATISTICS
8045   if (tinst_depth > depth_reached)
8046     depth_reached = tinst_depth;
8047 #endif
8048
8049   return 1;
8050 }
8051
8052 /* We're done instantiating this template; return to the instantiation
8053    context.  */
8054
8055 void
8056 pop_tinst_level (void)
8057 {
8058   /* Restore the filename and line number stashed away when we started
8059      this instantiation.  */
8060   input_location = current_tinst_level->locus;
8061   current_tinst_level = current_tinst_level->next;
8062   --tinst_depth;
8063 }
8064
8065 /* We're instantiating a deferred template; restore the template
8066    instantiation context in which the instantiation was requested, which
8067    is one step out from LEVEL.  Return the corresponding DECL or TYPE.  */
8068
8069 static tree
8070 reopen_tinst_level (struct tinst_level *level)
8071 {
8072   struct tinst_level *t;
8073
8074   tinst_depth = 0;
8075   for (t = level; t; t = t->next)
8076     ++tinst_depth;
8077
8078   current_tinst_level = level;
8079   pop_tinst_level ();
8080   if (current_tinst_level)
8081     current_tinst_level->errors = errorcount+sorrycount;
8082   return level->decl;
8083 }
8084
8085 /* Returns the TINST_LEVEL which gives the original instantiation
8086    context.  */
8087
8088 struct tinst_level *
8089 outermost_tinst_level (void)
8090 {
8091   struct tinst_level *level = current_tinst_level;
8092   if (level)
8093     while (level->next)
8094       level = level->next;
8095   return level;
8096 }
8097
8098 /* Returns TRUE if PARM is a parameter of the template TEMPL.  */
8099
8100 bool
8101 parameter_of_template_p (tree parm, tree templ)
8102 {
8103   tree parms;
8104   int i;
8105
8106   if (!parm || !templ)
8107     return false;
8108
8109   gcc_assert (DECL_TEMPLATE_PARM_P (parm));
8110   gcc_assert (TREE_CODE (templ) == TEMPLATE_DECL);
8111
8112   parms = DECL_TEMPLATE_PARMS (templ);
8113   parms = INNERMOST_TEMPLATE_PARMS (parms);
8114
8115   for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
8116     {
8117       tree p = TREE_VALUE (TREE_VEC_ELT (parms, i));
8118       if (parm == p
8119           || (DECL_INITIAL (parm)
8120               && DECL_INITIAL (parm) == DECL_INITIAL (p)))
8121         return true;
8122     }
8123
8124   return false;
8125 }
8126
8127 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL.  ARGS is the
8128    vector of template arguments, as for tsubst.
8129
8130    Returns an appropriate tsubst'd friend declaration.  */
8131
8132 static tree
8133 tsubst_friend_function (tree decl, tree args)
8134 {
8135   tree new_friend;
8136
8137   if (TREE_CODE (decl) == FUNCTION_DECL
8138       && DECL_TEMPLATE_INSTANTIATION (decl)
8139       && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
8140     /* This was a friend declared with an explicit template
8141        argument list, e.g.:
8142
8143        friend void f<>(T);
8144
8145        to indicate that f was a template instantiation, not a new
8146        function declaration.  Now, we have to figure out what
8147        instantiation of what template.  */
8148     {
8149       tree template_id, arglist, fns;
8150       tree new_args;
8151       tree tmpl;
8152       tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
8153
8154       /* Friend functions are looked up in the containing namespace scope.
8155          We must enter that scope, to avoid finding member functions of the
8156          current class with same name.  */
8157       push_nested_namespace (ns);
8158       fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
8159                          tf_warning_or_error, NULL_TREE,
8160                          /*integral_constant_expression_p=*/false);
8161       pop_nested_namespace (ns);
8162       arglist = tsubst (DECL_TI_ARGS (decl), args,
8163                         tf_warning_or_error, NULL_TREE);
8164       template_id = lookup_template_function (fns, arglist);
8165
8166       new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
8167       tmpl = determine_specialization (template_id, new_friend,
8168                                        &new_args,
8169                                        /*need_member_template=*/0,
8170                                        TREE_VEC_LENGTH (args),
8171                                        tsk_none);
8172       return instantiate_template (tmpl, new_args, tf_error);
8173     }
8174
8175   new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
8176
8177   /* The NEW_FRIEND will look like an instantiation, to the
8178      compiler, but is not an instantiation from the point of view of
8179      the language.  For example, we might have had:
8180
8181      template <class T> struct S {
8182        template <class U> friend void f(T, U);
8183      };
8184
8185      Then, in S<int>, template <class U> void f(int, U) is not an
8186      instantiation of anything.  */
8187   if (new_friend == error_mark_node)
8188     return error_mark_node;
8189
8190   DECL_USE_TEMPLATE (new_friend) = 0;
8191   if (TREE_CODE (decl) == TEMPLATE_DECL)
8192     {
8193       DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
8194       DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
8195         = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
8196     }
8197
8198   /* The mangled name for the NEW_FRIEND is incorrect.  The function
8199      is not a template instantiation and should not be mangled like
8200      one.  Therefore, we forget the mangling here; we'll recompute it
8201      later if we need it.  */
8202   if (TREE_CODE (new_friend) != TEMPLATE_DECL)
8203     {
8204       SET_DECL_RTL (new_friend, NULL);
8205       SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
8206     }
8207
8208   if (DECL_NAMESPACE_SCOPE_P (new_friend))
8209     {
8210       tree old_decl;
8211       tree new_friend_template_info;
8212       tree new_friend_result_template_info;
8213       tree ns;
8214       int  new_friend_is_defn;
8215
8216       /* We must save some information from NEW_FRIEND before calling
8217          duplicate decls since that function will free NEW_FRIEND if
8218          possible.  */
8219       new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
8220       new_friend_is_defn =
8221             (DECL_INITIAL (DECL_TEMPLATE_RESULT
8222                            (template_for_substitution (new_friend)))
8223              != NULL_TREE);
8224       if (TREE_CODE (new_friend) == TEMPLATE_DECL)
8225         {
8226           /* This declaration is a `primary' template.  */
8227           DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
8228
8229           new_friend_result_template_info
8230             = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
8231         }
8232       else
8233         new_friend_result_template_info = NULL_TREE;
8234
8235       /* Make the init_value nonzero so pushdecl knows this is a defn.  */
8236       if (new_friend_is_defn)
8237         DECL_INITIAL (new_friend) = error_mark_node;
8238
8239       /* Inside pushdecl_namespace_level, we will push into the
8240          current namespace. However, the friend function should go
8241          into the namespace of the template.  */
8242       ns = decl_namespace_context (new_friend);
8243       push_nested_namespace (ns);
8244       old_decl = pushdecl_namespace_level (new_friend, /*is_friend=*/true);
8245       pop_nested_namespace (ns);
8246
8247       if (old_decl == error_mark_node)
8248         return error_mark_node;
8249
8250       if (old_decl != new_friend)
8251         {
8252           /* This new friend declaration matched an existing
8253              declaration.  For example, given:
8254
8255                template <class T> void f(T);
8256                template <class U> class C {
8257                  template <class T> friend void f(T) {}
8258                };
8259
8260              the friend declaration actually provides the definition
8261              of `f', once C has been instantiated for some type.  So,
8262              old_decl will be the out-of-class template declaration,
8263              while new_friend is the in-class definition.
8264
8265              But, if `f' was called before this point, the
8266              instantiation of `f' will have DECL_TI_ARGS corresponding
8267              to `T' but not to `U', references to which might appear
8268              in the definition of `f'.  Previously, the most general
8269              template for an instantiation of `f' was the out-of-class
8270              version; now it is the in-class version.  Therefore, we
8271              run through all specialization of `f', adding to their
8272              DECL_TI_ARGS appropriately.  In particular, they need a
8273              new set of outer arguments, corresponding to the
8274              arguments for this class instantiation.
8275
8276              The same situation can arise with something like this:
8277
8278                friend void f(int);
8279                template <class T> class C {
8280                  friend void f(T) {}
8281                };
8282
8283              when `C<int>' is instantiated.  Now, `f(int)' is defined
8284              in the class.  */
8285
8286           if (!new_friend_is_defn)
8287             /* On the other hand, if the in-class declaration does
8288                *not* provide a definition, then we don't want to alter
8289                existing definitions.  We can just leave everything
8290                alone.  */
8291             ;
8292           else
8293             {
8294               tree new_template = TI_TEMPLATE (new_friend_template_info);
8295               tree new_args = TI_ARGS (new_friend_template_info);
8296
8297               /* Overwrite whatever template info was there before, if
8298                  any, with the new template information pertaining to
8299                  the declaration.  */
8300               DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
8301
8302               if (TREE_CODE (old_decl) != TEMPLATE_DECL)
8303                 {
8304                   /* We should have called reregister_specialization in
8305                      duplicate_decls.  */
8306                   gcc_assert (retrieve_specialization (new_template,
8307                                                        new_args, 0)
8308                               == old_decl);
8309
8310                   /* Instantiate it if the global has already been used.  */
8311                   if (DECL_ODR_USED (old_decl))
8312                     instantiate_decl (old_decl, /*defer_ok=*/true,
8313                                       /*expl_inst_class_mem_p=*/false);
8314                 }
8315               else
8316                 {
8317                   tree t;
8318
8319                   /* Indicate that the old function template is a partial
8320                      instantiation.  */
8321                   DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
8322                     = new_friend_result_template_info;
8323
8324                   gcc_assert (new_template
8325                               == most_general_template (new_template));
8326                   gcc_assert (new_template != old_decl);
8327
8328                   /* Reassign any specializations already in the hash table
8329                      to the new more general template, and add the
8330                      additional template args.  */
8331                   for (t = DECL_TEMPLATE_INSTANTIATIONS (old_decl);
8332                        t != NULL_TREE;
8333                        t = TREE_CHAIN (t))
8334                     {
8335                       tree spec = TREE_VALUE (t);
8336                       spec_entry elt;
8337
8338                       elt.tmpl = old_decl;
8339                       elt.args = DECL_TI_ARGS (spec);
8340                       elt.spec = NULL_TREE;
8341
8342                       htab_remove_elt (decl_specializations, &elt);
8343
8344                       DECL_TI_ARGS (spec)
8345                         = add_outermost_template_args (new_args,
8346                                                        DECL_TI_ARGS (spec));
8347
8348                       register_specialization
8349                         (spec, new_template, DECL_TI_ARGS (spec), true, 0);
8350
8351                     }
8352                   DECL_TEMPLATE_INSTANTIATIONS (old_decl) = NULL_TREE;
8353                 }
8354             }
8355
8356           /* The information from NEW_FRIEND has been merged into OLD_DECL
8357              by duplicate_decls.  */
8358           new_friend = old_decl;
8359         }
8360     }
8361   else
8362     {
8363       tree context = DECL_CONTEXT (new_friend);
8364       bool dependent_p;
8365
8366       /* In the code
8367            template <class T> class C {
8368              template <class U> friend void C1<U>::f (); // case 1
8369              friend void C2<T>::f ();                    // case 2
8370            };
8371          we only need to make sure CONTEXT is a complete type for
8372          case 2.  To distinguish between the two cases, we note that
8373          CONTEXT of case 1 remains dependent type after tsubst while
8374          this isn't true for case 2.  */
8375       ++processing_template_decl;
8376       dependent_p = dependent_type_p (context);
8377       --processing_template_decl;
8378
8379       if (!dependent_p
8380           && !complete_type_or_else (context, NULL_TREE))
8381         return error_mark_node;
8382
8383       if (COMPLETE_TYPE_P (context))
8384         {
8385           /* Check to see that the declaration is really present, and,
8386              possibly obtain an improved declaration.  */
8387           tree fn = check_classfn (context,
8388                                    new_friend, NULL_TREE);
8389
8390           if (fn)
8391             new_friend = fn;
8392         }
8393     }
8394
8395   return new_friend;
8396 }
8397
8398 /* FRIEND_TMPL is a friend TEMPLATE_DECL.  ARGS is the vector of
8399    template arguments, as for tsubst.
8400
8401    Returns an appropriate tsubst'd friend type or error_mark_node on
8402    failure.  */
8403
8404 static tree
8405 tsubst_friend_class (tree friend_tmpl, tree args)
8406 {
8407   tree friend_type;
8408   tree tmpl;
8409   tree context;
8410
8411   context = CP_DECL_CONTEXT (friend_tmpl);
8412
8413   if (context != global_namespace)
8414     {
8415       if (TREE_CODE (context) == NAMESPACE_DECL)
8416         push_nested_namespace (context);
8417       else
8418         push_nested_class (tsubst (context, args, tf_none, NULL_TREE));
8419     }
8420
8421   /* Look for a class template declaration.  We look for hidden names
8422      because two friend declarations of the same template are the
8423      same.  For example, in:
8424
8425        struct A { 
8426          template <typename> friend class F;
8427        };
8428        template <typename> struct B { 
8429          template <typename> friend class F;
8430        };
8431
8432      both F templates are the same.  */
8433   tmpl = lookup_name_real (DECL_NAME (friend_tmpl), 0, 0,
8434                            /*block_p=*/true, 0, 
8435                            LOOKUP_COMPLAIN | LOOKUP_HIDDEN);
8436
8437   /* But, if we don't find one, it might be because we're in a
8438      situation like this:
8439
8440        template <class T>
8441        struct S {
8442          template <class U>
8443          friend struct S;
8444        };
8445
8446      Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
8447      for `S<int>', not the TEMPLATE_DECL.  */
8448   if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
8449     {
8450       tmpl = lookup_name_prefer_type (DECL_NAME (friend_tmpl), 1);
8451       tmpl = maybe_get_template_decl_from_type_decl (tmpl);
8452     }
8453
8454   if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
8455     {
8456       /* The friend template has already been declared.  Just
8457          check to see that the declarations match, and install any new
8458          default parameters.  We must tsubst the default parameters,
8459          of course.  We only need the innermost template parameters
8460          because that is all that redeclare_class_template will look
8461          at.  */
8462       if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
8463           > TMPL_ARGS_DEPTH (args))
8464         {
8465           tree parms;
8466           location_t saved_input_location;
8467           parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
8468                                          args, tf_warning_or_error);
8469
8470           saved_input_location = input_location;
8471           input_location = DECL_SOURCE_LOCATION (friend_tmpl);
8472           redeclare_class_template (TREE_TYPE (tmpl), parms);
8473           input_location = saved_input_location;
8474           
8475         }
8476
8477       friend_type = TREE_TYPE (tmpl);
8478     }
8479   else
8480     {
8481       /* The friend template has not already been declared.  In this
8482          case, the instantiation of the template class will cause the
8483          injection of this template into the global scope.  */
8484       tmpl = tsubst (friend_tmpl, args, tf_warning_or_error, NULL_TREE);
8485       if (tmpl == error_mark_node)
8486         return error_mark_node;
8487
8488       /* The new TMPL is not an instantiation of anything, so we
8489          forget its origins.  We don't reset CLASSTYPE_TI_TEMPLATE for
8490          the new type because that is supposed to be the corresponding
8491          template decl, i.e., TMPL.  */
8492       DECL_USE_TEMPLATE (tmpl) = 0;
8493       DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
8494       CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
8495       CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
8496         = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
8497
8498       /* Inject this template into the global scope.  */
8499       friend_type = TREE_TYPE (pushdecl_top_level_maybe_friend (tmpl, true));
8500     }
8501
8502   if (context != global_namespace)
8503     {
8504       if (TREE_CODE (context) == NAMESPACE_DECL)
8505         pop_nested_namespace (context);
8506       else
8507         pop_nested_class ();
8508     }
8509
8510   return friend_type;
8511 }
8512
8513 /* Returns zero if TYPE cannot be completed later due to circularity.
8514    Otherwise returns one.  */
8515
8516 static int
8517 can_complete_type_without_circularity (tree type)
8518 {
8519   if (type == NULL_TREE || type == error_mark_node)
8520     return 0;
8521   else if (COMPLETE_TYPE_P (type))
8522     return 1;
8523   else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
8524     return can_complete_type_without_circularity (TREE_TYPE (type));
8525   else if (CLASS_TYPE_P (type)
8526            && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
8527     return 0;
8528   else
8529     return 1;
8530 }
8531
8532 /* Apply any attributes which had to be deferred until instantiation
8533    time.  DECL_P, ATTRIBUTES and ATTR_FLAGS are as cplus_decl_attributes;
8534    ARGS, COMPLAIN, IN_DECL are as tsubst.  */
8535
8536 static void
8537 apply_late_template_attributes (tree *decl_p, tree attributes, int attr_flags,
8538                                 tree args, tsubst_flags_t complain, tree in_decl)
8539 {
8540   tree last_dep = NULL_TREE;
8541   tree t;
8542   tree *p;
8543
8544   for (t = attributes; t; t = TREE_CHAIN (t))
8545     if (ATTR_IS_DEPENDENT (t))
8546       {
8547         last_dep = t;
8548         attributes = copy_list (attributes);
8549         break;
8550       }
8551
8552   if (DECL_P (*decl_p))
8553     {
8554       if (TREE_TYPE (*decl_p) == error_mark_node)
8555         return;
8556       p = &DECL_ATTRIBUTES (*decl_p);
8557     }
8558   else
8559     p = &TYPE_ATTRIBUTES (*decl_p);
8560
8561   if (last_dep)
8562     {
8563       tree late_attrs = NULL_TREE;
8564       tree *q = &late_attrs;
8565
8566       for (*p = attributes; *p; )
8567         {
8568           t = *p;
8569           if (ATTR_IS_DEPENDENT (t))
8570             {
8571               *p = TREE_CHAIN (t);
8572               TREE_CHAIN (t) = NULL_TREE;
8573               /* If the first attribute argument is an identifier, don't
8574                  pass it through tsubst.  Attributes like mode, format,
8575                  cleanup and several target specific attributes expect it
8576                  unmodified.  */
8577               if (TREE_VALUE (t)
8578                   && TREE_CODE (TREE_VALUE (t)) == TREE_LIST
8579                   && TREE_VALUE (TREE_VALUE (t))
8580                   && (TREE_CODE (TREE_VALUE (TREE_VALUE (t)))
8581                       == IDENTIFIER_NODE))
8582                 {
8583                   tree chain
8584                     = tsubst_expr (TREE_CHAIN (TREE_VALUE (t)), args, complain,
8585                                    in_decl,
8586                                    /*integral_constant_expression_p=*/false);
8587                   if (chain != TREE_CHAIN (TREE_VALUE (t)))
8588                     TREE_VALUE (t)
8589                       = tree_cons (NULL_TREE, TREE_VALUE (TREE_VALUE (t)),
8590                                    chain);
8591                 }
8592               else
8593                 TREE_VALUE (t)
8594                   = tsubst_expr (TREE_VALUE (t), args, complain, in_decl,
8595                                  /*integral_constant_expression_p=*/false);
8596               *q = t;
8597               q = &TREE_CHAIN (t);
8598             }
8599           else
8600             p = &TREE_CHAIN (t);
8601         }
8602
8603       cplus_decl_attributes (decl_p, late_attrs, attr_flags);
8604     }
8605 }
8606
8607 /* Perform (or defer) access check for typedefs that were referenced
8608    from within the template TMPL code.
8609    This is a subroutine of instantiate_template and instantiate_class_template.
8610    TMPL is the template to consider and TARGS is the list of arguments of
8611    that template.  */
8612
8613 static void
8614 perform_typedefs_access_check (tree tmpl, tree targs)
8615 {
8616   location_t saved_location;
8617   int i;
8618   qualified_typedef_usage_t *iter;
8619
8620   if (!tmpl
8621       || (!CLASS_TYPE_P (tmpl)
8622           && TREE_CODE (tmpl) != FUNCTION_DECL))
8623     return;
8624
8625   saved_location = input_location;
8626   FOR_EACH_VEC_ELT (qualified_typedef_usage_t,
8627                     get_types_needing_access_check (tmpl),
8628                     i, iter)
8629     {
8630       tree type_decl = iter->typedef_decl;
8631       tree type_scope = iter->context;
8632
8633       if (!type_decl || !type_scope || !CLASS_TYPE_P (type_scope))
8634         continue;
8635
8636       if (uses_template_parms (type_decl))
8637         type_decl = tsubst (type_decl, targs, tf_error, NULL_TREE);
8638       if (uses_template_parms (type_scope))
8639         type_scope = tsubst (type_scope, targs, tf_error, NULL_TREE);
8640
8641       /* Make access check error messages point to the location
8642          of the use of the typedef.  */
8643       input_location = iter->locus;
8644       perform_or_defer_access_check (TYPE_BINFO (type_scope),
8645                                      type_decl, type_decl);
8646     }
8647     input_location = saved_location;
8648 }
8649
8650 static tree
8651 instantiate_class_template_1 (tree type)
8652 {
8653   tree templ, args, pattern, t, member;
8654   tree typedecl;
8655   tree pbinfo;
8656   tree base_list;
8657   unsigned int saved_maximum_field_alignment;
8658
8659   if (type == error_mark_node)
8660     return error_mark_node;
8661
8662   if (COMPLETE_OR_OPEN_TYPE_P (type)
8663       || uses_template_parms (type))
8664     return type;
8665
8666   /* Figure out which template is being instantiated.  */
8667   templ = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
8668   gcc_assert (TREE_CODE (templ) == TEMPLATE_DECL);
8669
8670   /* Determine what specialization of the original template to
8671      instantiate.  */
8672   t = most_specialized_class (type, templ, tf_warning_or_error);
8673   if (t == error_mark_node)
8674     {
8675       TYPE_BEING_DEFINED (type) = 1;
8676       return error_mark_node;
8677     }
8678   else if (t)
8679     {
8680       /* This TYPE is actually an instantiation of a partial
8681          specialization.  We replace the innermost set of ARGS with
8682          the arguments appropriate for substitution.  For example,
8683          given:
8684
8685            template <class T> struct S {};
8686            template <class T> struct S<T*> {};
8687
8688          and supposing that we are instantiating S<int*>, ARGS will
8689          presently be {int*} -- but we need {int}.  */
8690       pattern = TREE_TYPE (t);
8691       args = TREE_PURPOSE (t);
8692     }
8693   else
8694     {
8695       pattern = TREE_TYPE (templ);
8696       args = CLASSTYPE_TI_ARGS (type);
8697     }
8698
8699   /* If the template we're instantiating is incomplete, then clearly
8700      there's nothing we can do.  */
8701   if (!COMPLETE_TYPE_P (pattern))
8702     return type;
8703
8704   /* If we've recursively instantiated too many templates, stop.  */
8705   if (! push_tinst_level (type))
8706     return type;
8707
8708   /* Now we're really doing the instantiation.  Mark the type as in
8709      the process of being defined.  */
8710   TYPE_BEING_DEFINED (type) = 1;
8711
8712   /* We may be in the middle of deferred access check.  Disable
8713      it now.  */
8714   push_deferring_access_checks (dk_no_deferred);
8715
8716   push_to_top_level ();
8717   /* Use #pragma pack from the template context.  */
8718   saved_maximum_field_alignment = maximum_field_alignment;
8719   maximum_field_alignment = TYPE_PRECISION (pattern);
8720
8721   SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
8722
8723   /* Set the input location to the most specialized template definition.
8724      This is needed if tsubsting causes an error.  */
8725   typedecl = TYPE_MAIN_DECL (pattern);
8726   input_location = DECL_SOURCE_LOCATION (TYPE_NAME (type)) =
8727     DECL_SOURCE_LOCATION (typedecl);
8728
8729   TYPE_PACKED (type) = TYPE_PACKED (pattern);
8730   TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
8731   TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
8732   TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
8733   if (ANON_AGGR_TYPE_P (pattern))
8734     SET_ANON_AGGR_TYPE_P (type);
8735   if (CLASSTYPE_VISIBILITY_SPECIFIED (pattern))
8736     {
8737       CLASSTYPE_VISIBILITY_SPECIFIED (type) = 1;
8738       CLASSTYPE_VISIBILITY (type) = CLASSTYPE_VISIBILITY (pattern);
8739       /* Adjust visibility for template arguments.  */
8740       determine_visibility (TYPE_MAIN_DECL (type));
8741     }
8742   CLASSTYPE_FINAL (type) = CLASSTYPE_FINAL (pattern);
8743
8744   pbinfo = TYPE_BINFO (pattern);
8745
8746   /* We should never instantiate a nested class before its enclosing
8747      class; we need to look up the nested class by name before we can
8748      instantiate it, and that lookup should instantiate the enclosing
8749      class.  */
8750   gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
8751               || COMPLETE_OR_OPEN_TYPE_P (TYPE_CONTEXT (type)));
8752
8753   base_list = NULL_TREE;
8754   if (BINFO_N_BASE_BINFOS (pbinfo))
8755     {
8756       tree pbase_binfo;
8757       tree pushed_scope;
8758       int i;
8759
8760       /* We must enter the scope containing the type, as that is where
8761          the accessibility of types named in dependent bases are
8762          looked up from.  */
8763       pushed_scope = push_scope (CP_TYPE_CONTEXT (type));
8764
8765       /* Substitute into each of the bases to determine the actual
8766          basetypes.  */
8767       for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
8768         {
8769           tree base;
8770           tree access = BINFO_BASE_ACCESS (pbinfo, i);
8771           tree expanded_bases = NULL_TREE;
8772           int idx, len = 1;
8773
8774           if (PACK_EXPANSION_P (BINFO_TYPE (pbase_binfo)))
8775             {
8776               expanded_bases = 
8777                 tsubst_pack_expansion (BINFO_TYPE (pbase_binfo),
8778                                        args, tf_error, NULL_TREE);
8779               if (expanded_bases == error_mark_node)
8780                 continue;
8781
8782               len = TREE_VEC_LENGTH (expanded_bases);
8783             }
8784
8785           for (idx = 0; idx < len; idx++)
8786             {
8787               if (expanded_bases)
8788                 /* Extract the already-expanded base class.  */
8789                 base = TREE_VEC_ELT (expanded_bases, idx);
8790               else
8791                 /* Substitute to figure out the base class.  */
8792                 base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error, 
8793                                NULL_TREE);
8794
8795               if (base == error_mark_node)
8796                 continue;
8797
8798               base_list = tree_cons (access, base, base_list);
8799               if (BINFO_VIRTUAL_P (pbase_binfo))
8800                 TREE_TYPE (base_list) = integer_type_node;
8801             }
8802         }
8803
8804       /* The list is now in reverse order; correct that.  */
8805       base_list = nreverse (base_list);
8806
8807       if (pushed_scope)
8808         pop_scope (pushed_scope);
8809     }
8810   /* Now call xref_basetypes to set up all the base-class
8811      information.  */
8812   xref_basetypes (type, base_list);
8813
8814   apply_late_template_attributes (&type, TYPE_ATTRIBUTES (pattern),
8815                                   (int) ATTR_FLAG_TYPE_IN_PLACE,
8816                                   args, tf_error, NULL_TREE);
8817   fixup_attribute_variants (type);
8818
8819   /* Now that our base classes are set up, enter the scope of the
8820      class, so that name lookups into base classes, etc. will work
8821      correctly.  This is precisely analogous to what we do in
8822      begin_class_definition when defining an ordinary non-template
8823      class, except we also need to push the enclosing classes.  */
8824   push_nested_class (type);
8825
8826   /* Now members are processed in the order of declaration.  */
8827   for (member = CLASSTYPE_DECL_LIST (pattern);
8828        member; member = TREE_CHAIN (member))
8829     {
8830       tree t = TREE_VALUE (member);
8831
8832       if (TREE_PURPOSE (member))
8833         {
8834           if (TYPE_P (t))
8835             {
8836               /* Build new CLASSTYPE_NESTED_UTDS.  */
8837
8838               tree newtag;
8839               bool class_template_p;
8840
8841               class_template_p = (TREE_CODE (t) != ENUMERAL_TYPE
8842                                   && TYPE_LANG_SPECIFIC (t)
8843                                   && CLASSTYPE_IS_TEMPLATE (t));
8844               /* If the member is a class template, then -- even after
8845                  substitution -- there may be dependent types in the
8846                  template argument list for the class.  We increment
8847                  PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
8848                  that function will assume that no types are dependent
8849                  when outside of a template.  */
8850               if (class_template_p)
8851                 ++processing_template_decl;
8852               newtag = tsubst (t, args, tf_error, NULL_TREE);
8853               if (class_template_p)
8854                 --processing_template_decl;
8855               if (newtag == error_mark_node)
8856                 continue;
8857
8858               if (TREE_CODE (newtag) != ENUMERAL_TYPE)
8859                 {
8860                   tree name = TYPE_IDENTIFIER (t);
8861
8862                   if (class_template_p)
8863                     /* Unfortunately, lookup_template_class sets
8864                        CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
8865                        instantiation (i.e., for the type of a member
8866                        template class nested within a template class.)
8867                        This behavior is required for
8868                        maybe_process_partial_specialization to work
8869                        correctly, but is not accurate in this case;
8870                        the TAG is not an instantiation of anything.
8871                        (The corresponding TEMPLATE_DECL is an
8872                        instantiation, but the TYPE is not.) */
8873                     CLASSTYPE_USE_TEMPLATE (newtag) = 0;
8874
8875                   /* Now, we call pushtag to put this NEWTAG into the scope of
8876                      TYPE.  We first set up the IDENTIFIER_TYPE_VALUE to avoid
8877                      pushtag calling push_template_decl.  We don't have to do
8878                      this for enums because it will already have been done in
8879                      tsubst_enum.  */
8880                   if (name)
8881                     SET_IDENTIFIER_TYPE_VALUE (name, newtag);
8882                   pushtag (name, newtag, /*tag_scope=*/ts_current);
8883                 }
8884             }
8885           else if (TREE_CODE (t) == FUNCTION_DECL
8886                    || DECL_FUNCTION_TEMPLATE_P (t))
8887             {
8888               /* Build new TYPE_METHODS.  */
8889               tree r;
8890
8891               if (TREE_CODE (t) == TEMPLATE_DECL)
8892                 ++processing_template_decl;
8893               r = tsubst (t, args, tf_error, NULL_TREE);
8894               if (TREE_CODE (t) == TEMPLATE_DECL)
8895                 --processing_template_decl;
8896               set_current_access_from_decl (r);
8897               finish_member_declaration (r);
8898               /* Instantiate members marked with attribute used.  */
8899               if (r != error_mark_node && DECL_PRESERVE_P (r))
8900                 mark_used (r);
8901             }
8902           else
8903             {
8904               /* Build new TYPE_FIELDS.  */
8905               if (TREE_CODE (t) == STATIC_ASSERT)
8906                 {
8907                   tree condition = 
8908                     tsubst_expr (STATIC_ASSERT_CONDITION (t), args, 
8909                                  tf_warning_or_error, NULL_TREE,
8910                                  /*integral_constant_expression_p=*/true);
8911                   finish_static_assert (condition,
8912                                         STATIC_ASSERT_MESSAGE (t), 
8913                                         STATIC_ASSERT_SOURCE_LOCATION (t),
8914                                         /*member_p=*/true);
8915                 }
8916               else if (TREE_CODE (t) != CONST_DECL)
8917                 {
8918                   tree r;
8919
8920                   /* The file and line for this declaration, to
8921                      assist in error message reporting.  Since we
8922                      called push_tinst_level above, we don't need to
8923                      restore these.  */
8924                   input_location = DECL_SOURCE_LOCATION (t);
8925
8926                   if (TREE_CODE (t) == TEMPLATE_DECL)
8927                     ++processing_template_decl;
8928                   r = tsubst (t, args, tf_warning_or_error, NULL_TREE);
8929                   if (TREE_CODE (t) == TEMPLATE_DECL)
8930                     --processing_template_decl;
8931                   if (TREE_CODE (r) == VAR_DECL)
8932                     {
8933                       /* In [temp.inst]:
8934
8935                            [t]he initialization (and any associated
8936                            side-effects) of a static data member does
8937                            not occur unless the static data member is
8938                            itself used in a way that requires the
8939                            definition of the static data member to
8940                            exist.
8941
8942                          Therefore, we do not substitute into the
8943                          initialized for the static data member here.  */
8944                       finish_static_data_member_decl
8945                         (r,
8946                          /*init=*/NULL_TREE,
8947                          /*init_const_expr_p=*/false,
8948                          /*asmspec_tree=*/NULL_TREE,
8949                          /*flags=*/0);
8950                       /* Instantiate members marked with attribute used.  */
8951                       if (r != error_mark_node && DECL_PRESERVE_P (r))
8952                         mark_used (r);
8953                     }
8954                   else if (TREE_CODE (r) == FIELD_DECL)
8955                     {
8956                       /* Determine whether R has a valid type and can be
8957                          completed later.  If R is invalid, then it is
8958                          replaced by error_mark_node so that it will not be
8959                          added to TYPE_FIELDS.  */
8960                       tree rtype = TREE_TYPE (r);
8961                       if (can_complete_type_without_circularity (rtype))
8962                         complete_type (rtype);
8963
8964                       if (!COMPLETE_TYPE_P (rtype))
8965                         {
8966                           cxx_incomplete_type_error (r, rtype);
8967                           r = error_mark_node;
8968                         }
8969                     }
8970
8971                   /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
8972                      such a thing will already have been added to the field
8973                      list by tsubst_enum in finish_member_declaration in the
8974                      CLASSTYPE_NESTED_UTDS case above.  */
8975                   if (!(TREE_CODE (r) == TYPE_DECL
8976                         && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
8977                         && DECL_ARTIFICIAL (r)))
8978                     {
8979                       set_current_access_from_decl (r);
8980                       finish_member_declaration (r);
8981                     }
8982                 }
8983             }
8984         }
8985       else
8986         {
8987           if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t))
8988             {
8989               /* Build new CLASSTYPE_FRIEND_CLASSES.  */
8990
8991               tree friend_type = t;
8992               bool adjust_processing_template_decl = false;
8993
8994               if (TREE_CODE (friend_type) == TEMPLATE_DECL)
8995                 {
8996                   /* template <class T> friend class C;  */
8997                   friend_type = tsubst_friend_class (friend_type, args);
8998                   adjust_processing_template_decl = true;
8999                 }
9000               else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
9001                 {
9002                   /* template <class T> friend class C::D;  */
9003                   friend_type = tsubst (friend_type, args,
9004                                         tf_warning_or_error, NULL_TREE);
9005                   if (TREE_CODE (friend_type) == TEMPLATE_DECL)
9006                     friend_type = TREE_TYPE (friend_type);
9007                   adjust_processing_template_decl = true;
9008                 }
9009               else if (TREE_CODE (friend_type) == TYPENAME_TYPE
9010                        || TREE_CODE (friend_type) == TEMPLATE_TYPE_PARM)
9011                 {
9012                   /* This could be either
9013
9014                        friend class T::C;
9015
9016                      when dependent_type_p is false or
9017
9018                        template <class U> friend class T::C;
9019
9020                      otherwise.  */
9021                   friend_type = tsubst (friend_type, args,
9022                                         tf_warning_or_error, NULL_TREE);
9023                   /* Bump processing_template_decl for correct
9024                      dependent_type_p calculation.  */
9025                   ++processing_template_decl;
9026                   if (dependent_type_p (friend_type))
9027                     adjust_processing_template_decl = true;
9028                   --processing_template_decl;
9029                 }
9030               else if (!CLASSTYPE_USE_TEMPLATE (friend_type)
9031                        && hidden_name_p (TYPE_NAME (friend_type)))
9032                 {
9033                   /* friend class C;
9034
9035                      where C hasn't been declared yet.  Let's lookup name
9036                      from namespace scope directly, bypassing any name that
9037                      come from dependent base class.  */
9038                   tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
9039
9040                   /* The call to xref_tag_from_type does injection for friend
9041                      classes.  */
9042                   push_nested_namespace (ns);
9043                   friend_type =
9044                     xref_tag_from_type (friend_type, NULL_TREE,
9045                                         /*tag_scope=*/ts_current);
9046                   pop_nested_namespace (ns);
9047                 }
9048               else if (uses_template_parms (friend_type))
9049                 /* friend class C<T>;  */
9050                 friend_type = tsubst (friend_type, args,
9051                                       tf_warning_or_error, NULL_TREE);
9052               /* Otherwise it's
9053
9054                    friend class C;
9055
9056                  where C is already declared or
9057
9058                    friend class C<int>;
9059
9060                  We don't have to do anything in these cases.  */
9061
9062               if (adjust_processing_template_decl)
9063                 /* Trick make_friend_class into realizing that the friend
9064                    we're adding is a template, not an ordinary class.  It's
9065                    important that we use make_friend_class since it will
9066                    perform some error-checking and output cross-reference
9067                    information.  */
9068                 ++processing_template_decl;
9069
9070               if (friend_type != error_mark_node)
9071                 make_friend_class (type, friend_type, /*complain=*/false);
9072
9073               if (adjust_processing_template_decl)
9074                 --processing_template_decl;
9075             }
9076           else
9077             {
9078               /* Build new DECL_FRIENDLIST.  */
9079               tree r;
9080
9081               /* The file and line for this declaration, to
9082                  assist in error message reporting.  Since we
9083                  called push_tinst_level above, we don't need to
9084                  restore these.  */
9085               input_location = DECL_SOURCE_LOCATION (t);
9086
9087               if (TREE_CODE (t) == TEMPLATE_DECL)
9088                 {
9089                   ++processing_template_decl;
9090                   push_deferring_access_checks (dk_no_check);
9091                 }
9092
9093               r = tsubst_friend_function (t, args);
9094               add_friend (type, r, /*complain=*/false);
9095               if (TREE_CODE (t) == TEMPLATE_DECL)
9096                 {
9097                   pop_deferring_access_checks ();
9098                   --processing_template_decl;
9099                 }
9100             }
9101         }
9102     }
9103
9104   if (CLASSTYPE_LAMBDA_EXPR (type))
9105     {
9106       tree lambda = CLASSTYPE_LAMBDA_EXPR (type);
9107       if (LAMBDA_EXPR_DEDUCE_RETURN_TYPE_P (lambda))
9108         {
9109           apply_lambda_return_type (lambda, void_type_node);
9110           LAMBDA_EXPR_RETURN_TYPE (lambda) = NULL_TREE;
9111         }
9112       instantiate_decl (lambda_function (type), false, false);
9113       maybe_add_lambda_conv_op (type);
9114     }
9115
9116   /* Set the file and line number information to whatever is given for
9117      the class itself.  This puts error messages involving generated
9118      implicit functions at a predictable point, and the same point
9119      that would be used for non-template classes.  */
9120   input_location = DECL_SOURCE_LOCATION (typedecl);
9121
9122   unreverse_member_declarations (type);
9123   finish_struct_1 (type);
9124   TYPE_BEING_DEFINED (type) = 0;
9125
9126   /* We don't instantiate default arguments for member functions.  14.7.1:
9127
9128      The implicit instantiation of a class template specialization causes
9129      the implicit instantiation of the declarations, but not of the
9130      definitions or default arguments, of the class member functions,
9131      member classes, static data members and member templates....  */
9132
9133   /* Some typedefs referenced from within the template code need to be access
9134      checked at template instantiation time, i.e now. These types were
9135      added to the template at parsing time. Let's get those and perform
9136      the access checks then.  */
9137   perform_typedefs_access_check (pattern, args);
9138   perform_deferred_access_checks ();
9139   pop_nested_class ();
9140   maximum_field_alignment = saved_maximum_field_alignment;
9141   pop_from_top_level ();
9142   pop_deferring_access_checks ();
9143   pop_tinst_level ();
9144
9145   /* The vtable for a template class can be emitted in any translation
9146      unit in which the class is instantiated.  When there is no key
9147      method, however, finish_struct_1 will already have added TYPE to
9148      the keyed_classes list.  */
9149   if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
9150     keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
9151
9152   return type;
9153 }
9154
9155 /* Wrapper for instantiate_class_template_1.  */
9156
9157 tree
9158 instantiate_class_template (tree type)
9159 {
9160   tree ret;
9161   timevar_push (TV_TEMPLATE_INST);
9162   ret = instantiate_class_template_1 (type);
9163   timevar_pop (TV_TEMPLATE_INST);
9164   return ret;
9165 }
9166
9167 static tree
9168 tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
9169 {
9170   tree r;
9171
9172   if (!t)
9173     r = t;
9174   else if (TYPE_P (t))
9175     r = tsubst (t, args, complain, in_decl);
9176   else
9177     {
9178       if (!(complain & tf_warning))
9179         ++c_inhibit_evaluation_warnings;
9180       r = tsubst_expr (t, args, complain, in_decl,
9181                        /*integral_constant_expression_p=*/true);
9182       if (!(complain & tf_warning))
9183         --c_inhibit_evaluation_warnings;
9184       /* Preserve the raw-reference nature of T.  */
9185       if (TREE_TYPE (t) && TREE_CODE (TREE_TYPE (t)) == REFERENCE_TYPE
9186           && REFERENCE_REF_P (r))
9187         r = TREE_OPERAND (r, 0);
9188     }
9189   return r;
9190 }
9191
9192 /* Given a function parameter pack TMPL_PARM and some function parameters
9193    instantiated from it at *SPEC_P, return a NONTYPE_ARGUMENT_PACK of them
9194    and set *SPEC_P to point at the next point in the list.  */
9195
9196 static tree
9197 extract_fnparm_pack (tree tmpl_parm, tree *spec_p)
9198 {
9199   /* Collect all of the extra "packed" parameters into an
9200      argument pack.  */
9201   tree parmvec;
9202   tree parmtypevec;
9203   tree argpack = make_node (NONTYPE_ARGUMENT_PACK);
9204   tree argtypepack = cxx_make_type (TYPE_ARGUMENT_PACK);
9205   tree spec_parm = *spec_p;
9206   int i, len;
9207
9208   for (len = 0; spec_parm; ++len, spec_parm = TREE_CHAIN (spec_parm))
9209     if (tmpl_parm
9210         && !function_parameter_expanded_from_pack_p (spec_parm, tmpl_parm))
9211       break;
9212
9213   /* Fill in PARMVEC and PARMTYPEVEC with all of the parameters.  */
9214   parmvec = make_tree_vec (len);
9215   parmtypevec = make_tree_vec (len);
9216   spec_parm = *spec_p;
9217   for (i = 0; i < len; i++, spec_parm = DECL_CHAIN (spec_parm))
9218     {
9219       TREE_VEC_ELT (parmvec, i) = spec_parm;
9220       TREE_VEC_ELT (parmtypevec, i) = TREE_TYPE (spec_parm);
9221     }
9222
9223   /* Build the argument packs.  */
9224   SET_ARGUMENT_PACK_ARGS (argpack, parmvec);
9225   SET_ARGUMENT_PACK_ARGS (argtypepack, parmtypevec);
9226   TREE_TYPE (argpack) = argtypepack;
9227   *spec_p = spec_parm;
9228
9229   return argpack;
9230 }
9231
9232 /* Give a chain SPEC_PARM of PARM_DECLs, pack them into a
9233    NONTYPE_ARGUMENT_PACK.  */
9234
9235 static tree
9236 make_fnparm_pack (tree spec_parm)
9237 {
9238   return extract_fnparm_pack (NULL_TREE, &spec_parm);
9239 }
9240
9241 /* Substitute ARGS into T, which is an pack expansion
9242    (i.e. TYPE_PACK_EXPANSION or EXPR_PACK_EXPANSION). Returns a
9243    TREE_VEC with the substituted arguments, a PACK_EXPANSION_* node
9244    (if only a partial substitution could be performed) or
9245    ERROR_MARK_NODE if there was an error.  */
9246 tree
9247 tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
9248                        tree in_decl)
9249 {
9250   tree pattern;
9251   tree pack, packs = NULL_TREE;
9252   bool unsubstituted_packs = false;
9253   bool real_packs = false;
9254   int missing_level = 0;
9255   int i, len = -1;
9256   tree result;
9257   htab_t saved_local_specializations = NULL;
9258   int levels;
9259
9260   gcc_assert (PACK_EXPANSION_P (t));
9261   pattern = PACK_EXPANSION_PATTERN (t);
9262
9263   /* Add in any args remembered from an earlier partial instantiation.  */
9264   args = add_to_template_args (PACK_EXPANSION_EXTRA_ARGS (t), args);
9265
9266   levels = TMPL_ARGS_DEPTH (args);
9267
9268   /* Determine the argument packs that will instantiate the parameter
9269      packs used in the expansion expression. While we're at it,
9270      compute the number of arguments to be expanded and make sure it
9271      is consistent.  */
9272   for (pack = PACK_EXPANSION_PARAMETER_PACKS (t); pack; 
9273        pack = TREE_CHAIN (pack))
9274     {
9275       tree parm_pack = TREE_VALUE (pack);
9276       tree arg_pack = NULL_TREE;
9277       tree orig_arg = NULL_TREE;
9278       int level = 0;
9279
9280       if (TREE_CODE (parm_pack) == BASES)
9281        {
9282          if (BASES_DIRECT (parm_pack))
9283            return calculate_direct_bases (tsubst_expr (BASES_TYPE (parm_pack),
9284                                                         args, complain, in_decl, false));
9285          else
9286            return calculate_bases (tsubst_expr (BASES_TYPE (parm_pack),
9287                                                  args, complain, in_decl, false));
9288        }
9289       if (TREE_CODE (parm_pack) == PARM_DECL)
9290         {
9291           if (!cp_unevaluated_operand)
9292             arg_pack = retrieve_local_specialization (parm_pack);
9293           else
9294             {
9295               /* We can't rely on local_specializations for a parameter
9296                  name used later in a function declaration (such as in a
9297                  late-specified return type).  Even if it exists, it might
9298                  have the wrong value for a recursive call.  Just make a
9299                  dummy decl, since it's only used for its type.  */
9300               arg_pack = tsubst_decl (parm_pack, args, complain);
9301               if (arg_pack && FUNCTION_PARAMETER_PACK_P (arg_pack))
9302                 /* Partial instantiation of the parm_pack, we can't build
9303                    up an argument pack yet.  */
9304                 arg_pack = NULL_TREE;
9305               else
9306                 arg_pack = make_fnparm_pack (arg_pack);
9307             }
9308         }
9309       else
9310         {
9311           int idx;
9312           template_parm_level_and_index (parm_pack, &level, &idx);
9313
9314           if (level <= levels)
9315             arg_pack = TMPL_ARG (args, level, idx);
9316         }
9317
9318       orig_arg = arg_pack;
9319       if (arg_pack && TREE_CODE (arg_pack) == ARGUMENT_PACK_SELECT)
9320         arg_pack = ARGUMENT_PACK_SELECT_FROM_PACK (arg_pack);
9321       
9322       if (arg_pack && !ARGUMENT_PACK_P (arg_pack))
9323         /* This can only happen if we forget to expand an argument
9324            pack somewhere else. Just return an error, silently.  */
9325         {
9326           result = make_tree_vec (1);
9327           TREE_VEC_ELT (result, 0) = error_mark_node;
9328           return result;
9329         }
9330
9331       if (arg_from_parm_pack_p (arg_pack, parm_pack))
9332         /* The argument pack that the parameter maps to is just an
9333            expansion of the parameter itself, such as one would find
9334            in the implicit typedef of a class inside the class itself.
9335            Consider this parameter "unsubstituted", so that we will
9336            maintain the outer pack expansion.  */
9337         arg_pack = NULL_TREE;
9338           
9339       if (arg_pack)
9340         {
9341           int my_len = 
9342             TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack));
9343
9344           /* Don't bother trying to do a partial substitution with
9345              incomplete packs; we'll try again after deduction.  */
9346           if (ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
9347             return t;
9348
9349           if (len < 0)
9350             len = my_len;
9351           else if (len != my_len)
9352             {
9353               if (TREE_CODE (t) == TYPE_PACK_EXPANSION)
9354                 error ("mismatched argument pack lengths while expanding "
9355                        "%<%T%>",
9356                        pattern);
9357               else
9358                 error ("mismatched argument pack lengths while expanding "
9359                        "%<%E%>",
9360                        pattern);
9361               return error_mark_node;
9362             }
9363
9364           if (TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack)) == 1
9365               && PACK_EXPANSION_P (TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack),
9366                                                  0)))
9367             /* This isn't a real argument pack yet.  */;
9368           else
9369             real_packs = true;
9370
9371           /* Keep track of the parameter packs and their corresponding
9372              argument packs.  */
9373           packs = tree_cons (parm_pack, arg_pack, packs);
9374           TREE_TYPE (packs) = orig_arg;
9375         }
9376       else
9377         {
9378           /* We can't substitute for this parameter pack.  We use a flag as
9379              well as the missing_level counter because function parameter
9380              packs don't have a level.  */
9381           unsubstituted_packs = true;
9382           if (!missing_level || missing_level > level)
9383             missing_level = level;
9384         }
9385     }
9386
9387   /* We cannot expand this expansion expression, because we don't have
9388      all of the argument packs we need.  */
9389   if (unsubstituted_packs)
9390     {
9391       if (real_packs)
9392         {
9393           /* We got some full packs, but we can't substitute them in until we
9394              have values for all the packs.  So remember these until then.  */
9395           tree save_args;
9396
9397           t = make_pack_expansion (pattern);
9398
9399           /* The call to add_to_template_args above assumes no overlap
9400              between saved args and new args, so prune away any fake
9401              args, i.e. those that satisfied arg_from_parm_pack_p above.  */
9402           if (missing_level && levels >= missing_level)
9403             {
9404               gcc_assert (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args)
9405                           && missing_level > 1);
9406               TREE_VEC_LENGTH (args) = missing_level - 1;
9407               save_args = copy_node (args);
9408               TREE_VEC_LENGTH (args) = levels;
9409             }
9410           else
9411             save_args = args;
9412
9413           PACK_EXPANSION_EXTRA_ARGS (t) = save_args;
9414         }
9415       else
9416         {
9417           /* There were no real arguments, we're just replacing a parameter
9418              pack with another version of itself. Substitute into the
9419              pattern and return a PACK_EXPANSION_*. The caller will need to
9420              deal with that.  */
9421           if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
9422             t = tsubst_expr (pattern, args, complain, in_decl,
9423                              /*integral_constant_expression_p=*/false);
9424           else
9425             t = tsubst (pattern, args, complain, in_decl);
9426           t = make_pack_expansion (t);
9427         }
9428       return t;
9429     }
9430
9431   /* We could not find any argument packs that work.  */
9432   if (len < 0)
9433     return error_mark_node;
9434
9435   if (cp_unevaluated_operand)
9436     {
9437       /* We're in a late-specified return type, so create our own local
9438          specializations table; the current table is either NULL or (in the
9439          case of recursive unification) might have bindings that we don't
9440          want to use or alter.  */
9441       saved_local_specializations = local_specializations;
9442       local_specializations = htab_create (37,
9443                                            hash_local_specialization,
9444                                            eq_local_specializations,
9445                                            NULL);
9446     }
9447
9448   /* For each argument in each argument pack, substitute into the
9449      pattern.  */
9450   result = make_tree_vec (len);
9451   for (i = 0; i < len; ++i)
9452     {
9453       /* For parameter pack, change the substitution of the parameter
9454          pack to the ith argument in its argument pack, then expand
9455          the pattern.  */
9456       for (pack = packs; pack; pack = TREE_CHAIN (pack))
9457         {
9458           tree parm = TREE_PURPOSE (pack);
9459           tree arg;
9460
9461           /* Select the Ith argument from the pack.  */
9462           if (TREE_CODE (parm) == PARM_DECL)
9463             {
9464               if (i == 0)
9465                 {
9466                   arg = make_node (ARGUMENT_PACK_SELECT);
9467                   ARGUMENT_PACK_SELECT_FROM_PACK (arg) = TREE_VALUE (pack);
9468                   mark_used (parm);
9469                   register_local_specialization (arg, parm);
9470                 }
9471               else
9472                 arg = retrieve_local_specialization (parm);
9473             }
9474           else
9475             {
9476               int idx, level;
9477               template_parm_level_and_index (parm, &level, &idx);
9478
9479               if (i == 0)
9480                 {
9481                   arg = make_node (ARGUMENT_PACK_SELECT);
9482                   ARGUMENT_PACK_SELECT_FROM_PACK (arg) = TREE_VALUE (pack);
9483                   /* Update the corresponding argument.  */
9484                   TMPL_ARG (args, level, idx) = arg;
9485                 }
9486               else
9487                 /* Re-use the ARGUMENT_PACK_SELECT.  */
9488                 arg = TMPL_ARG (args, level, idx);
9489             }
9490           ARGUMENT_PACK_SELECT_INDEX (arg) = i;
9491         }
9492
9493       /* Substitute into the PATTERN with the altered arguments.  */
9494       if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
9495         TREE_VEC_ELT (result, i) = 
9496           tsubst_expr (pattern, args, complain, in_decl,
9497                        /*integral_constant_expression_p=*/false);
9498       else
9499         TREE_VEC_ELT (result, i) = tsubst (pattern, args, complain, in_decl);
9500
9501       if (TREE_VEC_ELT (result, i) == error_mark_node)
9502         {
9503           result = error_mark_node;
9504           break;
9505         }
9506     }
9507
9508   /* Update ARGS to restore the substitution from parameter packs to
9509      their argument packs.  */
9510   for (pack = packs; pack; pack = TREE_CHAIN (pack))
9511     {
9512       tree parm = TREE_PURPOSE (pack);
9513
9514       if (TREE_CODE (parm) == PARM_DECL)
9515         register_local_specialization (TREE_TYPE (pack), parm);
9516       else
9517         {
9518           int idx, level;
9519           template_parm_level_and_index (parm, &level, &idx);
9520           
9521           /* Update the corresponding argument.  */
9522           if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
9523             TREE_VEC_ELT (TREE_VEC_ELT (args, level -1 ), idx) =
9524               TREE_TYPE (pack);
9525           else
9526             TREE_VEC_ELT (args, idx) = TREE_TYPE (pack);
9527         }
9528     }
9529
9530   if (saved_local_specializations)
9531     {
9532       htab_delete (local_specializations);
9533       local_specializations = saved_local_specializations;
9534     }
9535   
9536   return result;
9537 }
9538
9539 /* Given PARM_DECL PARM, find the corresponding PARM_DECL in the template
9540    TMPL.  We do this using DECL_PARM_INDEX, which should work even with
9541    parameter packs; all parms generated from a function parameter pack will
9542    have the same DECL_PARM_INDEX.  */
9543
9544 tree
9545 get_pattern_parm (tree parm, tree tmpl)
9546 {
9547   tree pattern = DECL_TEMPLATE_RESULT (tmpl);
9548   tree patparm;
9549
9550   if (DECL_ARTIFICIAL (parm))
9551     {
9552       for (patparm = DECL_ARGUMENTS (pattern);
9553            patparm; patparm = DECL_CHAIN (patparm))
9554         if (DECL_ARTIFICIAL (patparm)
9555             && DECL_NAME (parm) == DECL_NAME (patparm))
9556           break;
9557     }
9558   else
9559     {
9560       patparm = FUNCTION_FIRST_USER_PARM (DECL_TEMPLATE_RESULT (tmpl));
9561       patparm = chain_index (DECL_PARM_INDEX (parm)-1, patparm);
9562       gcc_assert (DECL_PARM_INDEX (patparm)
9563                   == DECL_PARM_INDEX (parm));
9564     }
9565
9566   return patparm;
9567 }
9568
9569 /* Substitute ARGS into the vector or list of template arguments T.  */
9570
9571 static tree
9572 tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
9573 {
9574   tree orig_t = t;
9575   int len, need_new = 0, i, expanded_len_adjust = 0, out;
9576   tree *elts;
9577
9578   if (t == error_mark_node)
9579     return error_mark_node;
9580
9581   len = TREE_VEC_LENGTH (t);
9582   elts = XALLOCAVEC (tree, len);
9583
9584   for (i = 0; i < len; i++)
9585     {
9586       tree orig_arg = TREE_VEC_ELT (t, i);
9587       tree new_arg;
9588
9589       if (TREE_CODE (orig_arg) == TREE_VEC)
9590         new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
9591       else if (PACK_EXPANSION_P (orig_arg))
9592         {
9593           /* Substitute into an expansion expression.  */
9594           new_arg = tsubst_pack_expansion (orig_arg, args, complain, in_decl);
9595
9596           if (TREE_CODE (new_arg) == TREE_VEC)
9597             /* Add to the expanded length adjustment the number of
9598                expanded arguments. We subtract one from this
9599                measurement, because the argument pack expression
9600                itself is already counted as 1 in
9601                LEN. EXPANDED_LEN_ADJUST can actually be negative, if
9602                the argument pack is empty.  */
9603             expanded_len_adjust += TREE_VEC_LENGTH (new_arg) - 1;
9604         }
9605       else if (ARGUMENT_PACK_P (orig_arg))
9606         {
9607           /* Substitute into each of the arguments.  */
9608           new_arg = TYPE_P (orig_arg)
9609             ? cxx_make_type (TREE_CODE (orig_arg))
9610             : make_node (TREE_CODE (orig_arg));
9611           
9612           SET_ARGUMENT_PACK_ARGS (
9613             new_arg,
9614             tsubst_template_args (ARGUMENT_PACK_ARGS (orig_arg),
9615                                   args, complain, in_decl));
9616
9617           if (ARGUMENT_PACK_ARGS (new_arg) == error_mark_node)
9618             new_arg = error_mark_node;
9619
9620           if (TREE_CODE (new_arg) == NONTYPE_ARGUMENT_PACK) {
9621             TREE_TYPE (new_arg) = tsubst (TREE_TYPE (orig_arg), args,
9622                                           complain, in_decl);
9623             TREE_CONSTANT (new_arg) = TREE_CONSTANT (orig_arg);
9624
9625             if (TREE_TYPE (new_arg) == error_mark_node)
9626               new_arg = error_mark_node;
9627           }
9628         }
9629       else
9630         new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
9631
9632       if (new_arg == error_mark_node)
9633         return error_mark_node;
9634
9635       elts[i] = new_arg;
9636       if (new_arg != orig_arg)
9637         need_new = 1;
9638     }
9639
9640   if (!need_new)
9641     return t;
9642
9643   /* Make space for the expanded arguments coming from template
9644      argument packs.  */
9645   t = make_tree_vec (len + expanded_len_adjust);
9646   /* ORIG_T can contain TREE_VECs. That happens if ORIG_T contains the
9647      arguments for a member template.
9648      In that case each TREE_VEC in ORIG_T represents a level of template
9649      arguments, and ORIG_T won't carry any non defaulted argument count.
9650      It will rather be the nested TREE_VECs that will carry one.
9651      In other words, ORIG_T carries a non defaulted argument count only
9652      if it doesn't contain any nested TREE_VEC.  */
9653   if (NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t))
9654     {
9655       int count = GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t);
9656       count += expanded_len_adjust;
9657       SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (t, count);
9658     }
9659   for (i = 0, out = 0; i < len; i++)
9660     {
9661       if ((PACK_EXPANSION_P (TREE_VEC_ELT (orig_t, i))
9662            || ARGUMENT_PACK_P (TREE_VEC_ELT (orig_t, i)))
9663           && TREE_CODE (elts[i]) == TREE_VEC)
9664         {
9665           int idx;
9666
9667           /* Now expand the template argument pack "in place".  */
9668           for (idx = 0; idx < TREE_VEC_LENGTH (elts[i]); idx++, out++)
9669             TREE_VEC_ELT (t, out) = TREE_VEC_ELT (elts[i], idx);
9670         }
9671       else
9672         {
9673           TREE_VEC_ELT (t, out) = elts[i];
9674           out++;
9675         }
9676     }
9677
9678   return t;
9679 }
9680
9681 /* Return the result of substituting ARGS into the template parameters
9682    given by PARMS.  If there are m levels of ARGS and m + n levels of
9683    PARMS, then the result will contain n levels of PARMS.  For
9684    example, if PARMS is `template <class T> template <class U>
9685    template <T*, U, class V>' and ARGS is {{int}, {double}} then the
9686    result will be `template <int*, double, class V>'.  */
9687
9688 static tree
9689 tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
9690 {
9691   tree r = NULL_TREE;
9692   tree* new_parms;
9693
9694   /* When substituting into a template, we must set
9695      PROCESSING_TEMPLATE_DECL as the template parameters may be
9696      dependent if they are based on one-another, and the dependency
9697      predicates are short-circuit outside of templates.  */
9698   ++processing_template_decl;
9699
9700   for (new_parms = &r;
9701        TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
9702        new_parms = &(TREE_CHAIN (*new_parms)),
9703          parms = TREE_CHAIN (parms))
9704     {
9705       tree new_vec =
9706         make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
9707       int i;
9708
9709       for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
9710         {
9711           tree tuple;
9712
9713           if (parms == error_mark_node)
9714             continue;
9715
9716           tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
9717
9718           if (tuple == error_mark_node)
9719             continue;
9720
9721           TREE_VEC_ELT (new_vec, i) =
9722             tsubst_template_parm (tuple, args, complain);
9723         }
9724
9725       *new_parms =
9726         tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
9727                              - TMPL_ARGS_DEPTH (args)),
9728                    new_vec, NULL_TREE);
9729     }
9730
9731   --processing_template_decl;
9732
9733   return r;
9734 }
9735
9736 /* Return the result of substituting ARGS into one template parameter
9737    given by T. T Must be a TREE_LIST which TREE_VALUE is the template
9738    parameter and which TREE_PURPOSE is the default argument of the
9739    template parameter.  */
9740
9741 static tree
9742 tsubst_template_parm (tree t, tree args, tsubst_flags_t complain)
9743 {
9744   tree default_value, parm_decl;
9745
9746   if (args == NULL_TREE
9747       || t == NULL_TREE
9748       || t == error_mark_node)
9749     return t;
9750
9751   gcc_assert (TREE_CODE (t) == TREE_LIST);
9752
9753   default_value = TREE_PURPOSE (t);
9754   parm_decl = TREE_VALUE (t);
9755
9756   parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
9757   if (TREE_CODE (parm_decl) == PARM_DECL
9758       && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl), complain))
9759     parm_decl = error_mark_node;
9760   default_value = tsubst_template_arg (default_value, args,
9761                                        complain, NULL_TREE);
9762
9763   return build_tree_list (default_value, parm_decl);
9764 }
9765
9766 /* Substitute the ARGS into the indicated aggregate (or enumeration)
9767    type T.  If T is not an aggregate or enumeration type, it is
9768    handled as if by tsubst.  IN_DECL is as for tsubst.  If
9769    ENTERING_SCOPE is nonzero, T is the context for a template which
9770    we are presently tsubst'ing.  Return the substituted value.  */
9771
9772 static tree
9773 tsubst_aggr_type (tree t,
9774                   tree args,
9775                   tsubst_flags_t complain,
9776                   tree in_decl,
9777                   int entering_scope)
9778 {
9779   if (t == NULL_TREE)
9780     return NULL_TREE;
9781
9782   switch (TREE_CODE (t))
9783     {
9784     case RECORD_TYPE:
9785       if (TYPE_PTRMEMFUNC_P (t))
9786         return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
9787
9788       /* Else fall through.  */
9789     case ENUMERAL_TYPE:
9790     case UNION_TYPE:
9791       if (TYPE_TEMPLATE_INFO (t) && uses_template_parms (t))
9792         {
9793           tree argvec;
9794           tree context;
9795           tree r;
9796           int saved_unevaluated_operand;
9797           int saved_inhibit_evaluation_warnings;
9798
9799           /* In "sizeof(X<I>)" we need to evaluate "I".  */
9800           saved_unevaluated_operand = cp_unevaluated_operand;
9801           cp_unevaluated_operand = 0;
9802           saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
9803           c_inhibit_evaluation_warnings = 0;
9804
9805           /* First, determine the context for the type we are looking
9806              up.  */
9807           context = TYPE_CONTEXT (t);
9808           if (context && TYPE_P (context))
9809             {
9810               context = tsubst_aggr_type (context, args, complain,
9811                                           in_decl, /*entering_scope=*/1);
9812               /* If context is a nested class inside a class template,
9813                  it may still need to be instantiated (c++/33959).  */
9814               context = complete_type (context);
9815             }
9816
9817           /* Then, figure out what arguments are appropriate for the
9818              type we are trying to find.  For example, given:
9819
9820                template <class T> struct S;
9821                template <class T, class U> void f(T, U) { S<U> su; }
9822
9823              and supposing that we are instantiating f<int, double>,
9824              then our ARGS will be {int, double}, but, when looking up
9825              S we only want {double}.  */
9826           argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
9827                                          complain, in_decl);
9828           if (argvec == error_mark_node)
9829             r = error_mark_node;
9830           else
9831             {
9832               r = lookup_template_class (t, argvec, in_decl, context,
9833                                          entering_scope, complain);
9834               r = cp_build_qualified_type_real (r, cp_type_quals (t), complain);
9835             }
9836
9837           cp_unevaluated_operand = saved_unevaluated_operand;
9838           c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
9839
9840           return r;
9841         }
9842       else
9843         /* This is not a template type, so there's nothing to do.  */
9844         return t;
9845
9846     default:
9847       return tsubst (t, args, complain, in_decl);
9848     }
9849 }
9850
9851 /* Substitute into the default argument ARG (a default argument for
9852    FN), which has the indicated TYPE.  */
9853
9854 tree
9855 tsubst_default_argument (tree fn, tree type, tree arg)
9856 {
9857   tree saved_class_ptr = NULL_TREE;
9858   tree saved_class_ref = NULL_TREE;
9859
9860   /* This can happen in invalid code.  */
9861   if (TREE_CODE (arg) == DEFAULT_ARG)
9862     return arg;
9863
9864   /* This default argument came from a template.  Instantiate the
9865      default argument here, not in tsubst.  In the case of
9866      something like:
9867
9868        template <class T>
9869        struct S {
9870          static T t();
9871          void f(T = t());
9872        };
9873
9874      we must be careful to do name lookup in the scope of S<T>,
9875      rather than in the current class.  */
9876   push_access_scope (fn);
9877   /* The "this" pointer is not valid in a default argument.  */
9878   if (cfun)
9879     {
9880       saved_class_ptr = current_class_ptr;
9881       cp_function_chain->x_current_class_ptr = NULL_TREE;
9882       saved_class_ref = current_class_ref;
9883       cp_function_chain->x_current_class_ref = NULL_TREE;
9884     }
9885
9886   push_deferring_access_checks(dk_no_deferred);
9887   /* The default argument expression may cause implicitly defined
9888      member functions to be synthesized, which will result in garbage
9889      collection.  We must treat this situation as if we were within
9890      the body of function so as to avoid collecting live data on the
9891      stack.  */
9892   ++function_depth;
9893   arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
9894                      tf_warning_or_error, NULL_TREE,
9895                      /*integral_constant_expression_p=*/false);
9896   --function_depth;
9897   pop_deferring_access_checks();
9898
9899   /* Restore the "this" pointer.  */
9900   if (cfun)
9901     {
9902       cp_function_chain->x_current_class_ptr = saved_class_ptr;
9903       cp_function_chain->x_current_class_ref = saved_class_ref;
9904     }
9905
9906   /* Make sure the default argument is reasonable.  */
9907   arg = check_default_argument (type, arg);
9908
9909   pop_access_scope (fn);
9910
9911   return arg;
9912 }
9913
9914 /* Substitute into all the default arguments for FN.  */
9915
9916 static void
9917 tsubst_default_arguments (tree fn)
9918 {
9919   tree arg;
9920   tree tmpl_args;
9921
9922   tmpl_args = DECL_TI_ARGS (fn);
9923
9924   /* If this function is not yet instantiated, we certainly don't need
9925      its default arguments.  */
9926   if (uses_template_parms (tmpl_args))
9927     return;
9928   /* Don't do this again for clones.  */
9929   if (DECL_CLONED_FUNCTION_P (fn))
9930     return;
9931
9932   for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
9933        arg;
9934        arg = TREE_CHAIN (arg))
9935     if (TREE_PURPOSE (arg))
9936       TREE_PURPOSE (arg) = tsubst_default_argument (fn,
9937                                                     TREE_VALUE (arg),
9938                                                     TREE_PURPOSE (arg));
9939 }
9940
9941 /* Substitute the ARGS into the T, which is a _DECL.  Return the
9942    result of the substitution.  Issue error and warning messages under
9943    control of COMPLAIN.  */
9944
9945 static tree
9946 tsubst_decl (tree t, tree args, tsubst_flags_t complain)
9947 {
9948 #define RETURN(EXP) do { r = (EXP); goto out; } while(0)
9949   location_t saved_loc;
9950   tree r = NULL_TREE;
9951   tree in_decl = t;
9952   hashval_t hash = 0;
9953
9954   /* Set the filename and linenumber to improve error-reporting.  */
9955   saved_loc = input_location;
9956   input_location = DECL_SOURCE_LOCATION (t);
9957
9958   switch (TREE_CODE (t))
9959     {
9960     case TEMPLATE_DECL:
9961       {
9962         /* We can get here when processing a member function template,
9963            member class template, or template template parameter.  */
9964         tree decl = DECL_TEMPLATE_RESULT (t);
9965         tree spec;
9966         tree tmpl_args;
9967         tree full_args;
9968
9969         if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
9970           {
9971             /* Template template parameter is treated here.  */
9972             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9973             if (new_type == error_mark_node)
9974               RETURN (error_mark_node);
9975
9976             r = copy_decl (t);
9977             DECL_CHAIN (r) = NULL_TREE;
9978             TREE_TYPE (r) = new_type;
9979             DECL_TEMPLATE_RESULT (r)
9980               = build_decl (DECL_SOURCE_LOCATION (decl),
9981                             TYPE_DECL, DECL_NAME (decl), new_type);
9982             DECL_TEMPLATE_PARMS (r)
9983               = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
9984                                        complain);
9985             TYPE_NAME (new_type) = r;
9986             break;
9987           }
9988
9989         /* We might already have an instance of this template.
9990            The ARGS are for the surrounding class type, so the
9991            full args contain the tsubst'd args for the context,
9992            plus the innermost args from the template decl.  */
9993         tmpl_args = DECL_CLASS_TEMPLATE_P (t)
9994           ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
9995           : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
9996         /* Because this is a template, the arguments will still be
9997            dependent, even after substitution.  If
9998            PROCESSING_TEMPLATE_DECL is not set, the dependency
9999            predicates will short-circuit.  */
10000         ++processing_template_decl;
10001         full_args = tsubst_template_args (tmpl_args, args,
10002                                           complain, in_decl);
10003         --processing_template_decl;
10004         if (full_args == error_mark_node)
10005           RETURN (error_mark_node);
10006
10007         /* If this is a default template template argument,
10008            tsubst might not have changed anything.  */
10009         if (full_args == tmpl_args)
10010           RETURN (t);
10011
10012         hash = hash_tmpl_and_args (t, full_args);
10013         spec = retrieve_specialization (t, full_args, hash);
10014         if (spec != NULL_TREE)
10015           {
10016             r = spec;
10017             break;
10018           }
10019
10020         /* Make a new template decl.  It will be similar to the
10021            original, but will record the current template arguments.
10022            We also create a new function declaration, which is just
10023            like the old one, but points to this new template, rather
10024            than the old one.  */
10025         r = copy_decl (t);
10026         gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
10027         DECL_CHAIN (r) = NULL_TREE;
10028
10029         DECL_TEMPLATE_INFO (r) = build_template_info (t, args);
10030
10031         if (TREE_CODE (decl) == TYPE_DECL
10032             && !TYPE_DECL_ALIAS_P (decl))
10033           {
10034             tree new_type;
10035             ++processing_template_decl;
10036             new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10037             --processing_template_decl;
10038             if (new_type == error_mark_node)
10039               RETURN (error_mark_node);
10040
10041             TREE_TYPE (r) = new_type;
10042             CLASSTYPE_TI_TEMPLATE (new_type) = r;
10043             DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
10044             DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
10045             DECL_CONTEXT (r) = TYPE_CONTEXT (new_type);
10046           }
10047         else
10048           {
10049             tree new_decl;
10050             ++processing_template_decl;
10051             new_decl = tsubst (decl, args, complain, in_decl);
10052             --processing_template_decl;
10053             if (new_decl == error_mark_node)
10054               RETURN (error_mark_node);
10055
10056             DECL_TEMPLATE_RESULT (r) = new_decl;
10057             DECL_TI_TEMPLATE (new_decl) = r;
10058             TREE_TYPE (r) = TREE_TYPE (new_decl);
10059             DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
10060             DECL_CONTEXT (r) = DECL_CONTEXT (new_decl);
10061           }
10062
10063         SET_DECL_IMPLICIT_INSTANTIATION (r);
10064         DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
10065         DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
10066
10067         /* The template parameters for this new template are all the
10068            template parameters for the old template, except the
10069            outermost level of parameters.  */
10070         DECL_TEMPLATE_PARMS (r)
10071           = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
10072                                    complain);
10073
10074         if (PRIMARY_TEMPLATE_P (t))
10075           DECL_PRIMARY_TEMPLATE (r) = r;
10076
10077         if (TREE_CODE (decl) != TYPE_DECL)
10078           /* Record this non-type partial instantiation.  */
10079           register_specialization (r, t,
10080                                    DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)),
10081                                    false, hash);
10082       }
10083       break;
10084
10085     case FUNCTION_DECL:
10086       {
10087         tree ctx;
10088         tree argvec = NULL_TREE;
10089         tree *friends;
10090         tree gen_tmpl;
10091         tree type;
10092         int member;
10093         int args_depth;
10094         int parms_depth;
10095
10096         /* Nobody should be tsubst'ing into non-template functions.  */
10097         gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
10098
10099         if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
10100           {
10101             tree spec;
10102             bool dependent_p;
10103
10104             /* If T is not dependent, just return it.  We have to
10105                increment PROCESSING_TEMPLATE_DECL because
10106                value_dependent_expression_p assumes that nothing is
10107                dependent when PROCESSING_TEMPLATE_DECL is zero.  */
10108             ++processing_template_decl;
10109             dependent_p = value_dependent_expression_p (t);
10110             --processing_template_decl;
10111             if (!dependent_p)
10112               RETURN (t);
10113
10114             /* Calculate the most general template of which R is a
10115                specialization, and the complete set of arguments used to
10116                specialize R.  */
10117             gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
10118             argvec = tsubst_template_args (DECL_TI_ARGS
10119                                           (DECL_TEMPLATE_RESULT
10120                                                  (DECL_TI_TEMPLATE (t))),
10121                                            args, complain, in_decl);
10122             if (argvec == error_mark_node)
10123               RETURN (error_mark_node);
10124
10125             /* Check to see if we already have this specialization.  */
10126             hash = hash_tmpl_and_args (gen_tmpl, argvec);
10127             spec = retrieve_specialization (gen_tmpl, argvec, hash);
10128
10129             if (spec)
10130               {
10131                 r = spec;
10132                 break;
10133               }
10134
10135             /* We can see more levels of arguments than parameters if
10136                there was a specialization of a member template, like
10137                this:
10138
10139                  template <class T> struct S { template <class U> void f(); }
10140                  template <> template <class U> void S<int>::f(U);
10141
10142                Here, we'll be substituting into the specialization,
10143                because that's where we can find the code we actually
10144                want to generate, but we'll have enough arguments for
10145                the most general template.
10146
10147                We also deal with the peculiar case:
10148
10149                  template <class T> struct S {
10150                    template <class U> friend void f();
10151                  };
10152                  template <class U> void f() {}
10153                  template S<int>;
10154                  template void f<double>();
10155
10156                Here, the ARGS for the instantiation of will be {int,
10157                double}.  But, we only need as many ARGS as there are
10158                levels of template parameters in CODE_PATTERN.  We are
10159                careful not to get fooled into reducing the ARGS in
10160                situations like:
10161
10162                  template <class T> struct S { template <class U> void f(U); }
10163                  template <class T> template <> void S<T>::f(int) {}
10164
10165                which we can spot because the pattern will be a
10166                specialization in this case.  */
10167             args_depth = TMPL_ARGS_DEPTH (args);
10168             parms_depth =
10169               TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
10170             if (args_depth > parms_depth
10171                 && !DECL_TEMPLATE_SPECIALIZATION (t))
10172               args = get_innermost_template_args (args, parms_depth);
10173           }
10174         else
10175           {
10176             /* This special case arises when we have something like this:
10177
10178                  template <class T> struct S {
10179                    friend void f<int>(int, double);
10180                  };
10181
10182                Here, the DECL_TI_TEMPLATE for the friend declaration
10183                will be an IDENTIFIER_NODE.  We are being called from
10184                tsubst_friend_function, and we want only to create a
10185                new decl (R) with appropriate types so that we can call
10186                determine_specialization.  */
10187             gen_tmpl = NULL_TREE;
10188           }
10189
10190         if (DECL_CLASS_SCOPE_P (t))
10191           {
10192             if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
10193               member = 2;
10194             else
10195               member = 1;
10196             ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
10197                                     complain, t, /*entering_scope=*/1);
10198           }
10199         else
10200           {
10201             member = 0;
10202             ctx = DECL_CONTEXT (t);
10203           }
10204         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10205         if (type == error_mark_node)
10206           RETURN (error_mark_node);
10207
10208         /* We do NOT check for matching decls pushed separately at this
10209            point, as they may not represent instantiations of this
10210            template, and in any case are considered separate under the
10211            discrete model.  */
10212         r = copy_decl (t);
10213         DECL_USE_TEMPLATE (r) = 0;
10214         TREE_TYPE (r) = type;
10215         /* Clear out the mangled name and RTL for the instantiation.  */
10216         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
10217         SET_DECL_RTL (r, NULL);
10218         /* Leave DECL_INITIAL set on deleted instantiations.  */
10219         if (!DECL_DELETED_FN (r))
10220           DECL_INITIAL (r) = NULL_TREE;
10221         DECL_CONTEXT (r) = ctx;
10222
10223         if (member && DECL_CONV_FN_P (r))
10224           /* Type-conversion operator.  Reconstruct the name, in
10225              case it's the name of one of the template's parameters.  */
10226           DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
10227
10228         DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
10229                                      complain, t);
10230         DECL_RESULT (r) = NULL_TREE;
10231
10232         TREE_STATIC (r) = 0;
10233         TREE_PUBLIC (r) = TREE_PUBLIC (t);
10234         DECL_EXTERNAL (r) = 1;
10235         /* If this is an instantiation of a function with internal
10236            linkage, we already know what object file linkage will be
10237            assigned to the instantiation.  */
10238         DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
10239         DECL_DEFER_OUTPUT (r) = 0;
10240         DECL_CHAIN (r) = NULL_TREE;
10241         DECL_PENDING_INLINE_INFO (r) = 0;
10242         DECL_PENDING_INLINE_P (r) = 0;
10243         DECL_SAVED_TREE (r) = NULL_TREE;
10244         DECL_STRUCT_FUNCTION (r) = NULL;
10245         TREE_USED (r) = 0;
10246         /* We'll re-clone as appropriate in instantiate_template.  */
10247         DECL_CLONED_FUNCTION (r) = NULL_TREE;
10248
10249         /* If we aren't complaining now, return on error before we register
10250            the specialization so that we'll complain eventually.  */
10251         if ((complain & tf_error) == 0
10252             && IDENTIFIER_OPNAME_P (DECL_NAME (r))
10253             && !grok_op_properties (r, /*complain=*/false))
10254           RETURN (error_mark_node);
10255
10256         /* Set up the DECL_TEMPLATE_INFO for R.  There's no need to do
10257            this in the special friend case mentioned above where
10258            GEN_TMPL is NULL.  */
10259         if (gen_tmpl)
10260           {
10261             DECL_TEMPLATE_INFO (r)
10262               = build_template_info (gen_tmpl, argvec);
10263             SET_DECL_IMPLICIT_INSTANTIATION (r);
10264             register_specialization (r, gen_tmpl, argvec, false, hash);
10265
10266             /* We're not supposed to instantiate default arguments
10267                until they are called, for a template.  But, for a
10268                declaration like:
10269
10270                  template <class T> void f ()
10271                  { extern void g(int i = T()); }
10272
10273                we should do the substitution when the template is
10274                instantiated.  We handle the member function case in
10275                instantiate_class_template since the default arguments
10276                might refer to other members of the class.  */
10277             if (!member
10278                 && !PRIMARY_TEMPLATE_P (gen_tmpl)
10279                 && !uses_template_parms (argvec))
10280               tsubst_default_arguments (r);
10281           }
10282         else
10283           DECL_TEMPLATE_INFO (r) = NULL_TREE;
10284
10285         /* Copy the list of befriending classes.  */
10286         for (friends = &DECL_BEFRIENDING_CLASSES (r);
10287              *friends;
10288              friends = &TREE_CHAIN (*friends))
10289           {
10290             *friends = copy_node (*friends);
10291             TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
10292                                             args, complain,
10293                                             in_decl);
10294           }
10295
10296         if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
10297           {
10298             maybe_retrofit_in_chrg (r);
10299             if (DECL_CONSTRUCTOR_P (r))
10300               grok_ctor_properties (ctx, r);
10301             /* If this is an instantiation of a member template, clone it.
10302                If it isn't, that'll be handled by
10303                clone_constructors_and_destructors.  */
10304             if (PRIMARY_TEMPLATE_P (gen_tmpl))
10305               clone_function_decl (r, /*update_method_vec_p=*/0);
10306           }
10307         else if ((complain & tf_error) != 0
10308                  && IDENTIFIER_OPNAME_P (DECL_NAME (r))
10309                  && !grok_op_properties (r, /*complain=*/true))
10310           RETURN (error_mark_node);
10311
10312         if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
10313           SET_DECL_FRIEND_CONTEXT (r,
10314                                    tsubst (DECL_FRIEND_CONTEXT (t),
10315                                             args, complain, in_decl));
10316
10317         /* Possibly limit visibility based on template args.  */
10318         DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
10319         if (DECL_VISIBILITY_SPECIFIED (t))
10320           {
10321             DECL_VISIBILITY_SPECIFIED (r) = 0;
10322             DECL_ATTRIBUTES (r)
10323               = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
10324           }
10325         determine_visibility (r);
10326         if (DECL_DEFAULTED_OUTSIDE_CLASS_P (r)
10327             && !processing_template_decl)
10328           defaulted_late_check (r);
10329
10330         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
10331                                         args, complain, in_decl);
10332       }
10333       break;
10334
10335     case PARM_DECL:
10336       {
10337         tree type = NULL_TREE;
10338         int i, len = 1;
10339         tree expanded_types = NULL_TREE;
10340         tree prev_r = NULL_TREE;
10341         tree first_r = NULL_TREE;
10342
10343         if (FUNCTION_PARAMETER_PACK_P (t))
10344           {
10345             /* If there is a local specialization that isn't a
10346                parameter pack, it means that we're doing a "simple"
10347                substitution from inside tsubst_pack_expansion. Just
10348                return the local specialization (which will be a single
10349                parm).  */
10350             tree spec = retrieve_local_specialization (t);
10351             if (spec 
10352                 && TREE_CODE (spec) == PARM_DECL
10353                 && TREE_CODE (TREE_TYPE (spec)) != TYPE_PACK_EXPANSION)
10354               RETURN (spec);
10355
10356             /* Expand the TYPE_PACK_EXPANSION that provides the types for
10357                the parameters in this function parameter pack.  */
10358             expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
10359                                                     complain, in_decl);
10360             if (TREE_CODE (expanded_types) == TREE_VEC)
10361               {
10362                 len = TREE_VEC_LENGTH (expanded_types);
10363
10364                 /* Zero-length parameter packs are boring. Just substitute
10365                    into the chain.  */
10366                 if (len == 0)
10367                   RETURN (tsubst (TREE_CHAIN (t), args, complain,
10368                                   TREE_CHAIN (t)));
10369               }
10370             else
10371               {
10372                 /* All we did was update the type. Make a note of that.  */
10373                 type = expanded_types;
10374                 expanded_types = NULL_TREE;
10375               }
10376           }
10377
10378         /* Loop through all of the parameter's we'll build. When T is
10379            a function parameter pack, LEN is the number of expanded
10380            types in EXPANDED_TYPES; otherwise, LEN is 1.  */
10381         r = NULL_TREE;
10382         for (i = 0; i < len; ++i)
10383           {
10384             prev_r = r;
10385             r = copy_node (t);
10386             if (DECL_TEMPLATE_PARM_P (t))
10387               SET_DECL_TEMPLATE_PARM_P (r);
10388
10389             if (expanded_types)
10390               /* We're on the Ith parameter of the function parameter
10391                  pack.  */
10392               {
10393                 /* An argument of a function parameter pack is not a parameter
10394                    pack.  */
10395                 FUNCTION_PARAMETER_PACK_P (r) = false;
10396
10397                 /* Get the Ith type.  */
10398                 type = TREE_VEC_ELT (expanded_types, i);
10399
10400                 if (DECL_NAME (r))
10401                   /* Rename the parameter to include the index.  */
10402                   DECL_NAME (r) =
10403                     make_ith_pack_parameter_name (DECL_NAME (r), i);
10404               }
10405             else if (!type)
10406               /* We're dealing with a normal parameter.  */
10407               type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10408
10409             type = type_decays_to (type);
10410             TREE_TYPE (r) = type;
10411             cp_apply_type_quals_to_decl (cp_type_quals (type), r);
10412
10413             if (DECL_INITIAL (r))
10414               {
10415                 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
10416                   DECL_INITIAL (r) = TREE_TYPE (r);
10417                 else
10418                   DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
10419                                              complain, in_decl);
10420               }
10421
10422             DECL_CONTEXT (r) = NULL_TREE;
10423
10424             if (!DECL_TEMPLATE_PARM_P (r))
10425               DECL_ARG_TYPE (r) = type_passed_as (type);
10426
10427             apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
10428                                             args, complain, in_decl);
10429
10430             /* Keep track of the first new parameter we
10431                generate. That's what will be returned to the
10432                caller.  */
10433             if (!first_r)
10434               first_r = r;
10435
10436             /* Build a proper chain of parameters when substituting
10437                into a function parameter pack.  */
10438             if (prev_r)
10439               DECL_CHAIN (prev_r) = r;
10440           }
10441
10442         if (DECL_CHAIN (t))
10443           DECL_CHAIN (r) = tsubst (DECL_CHAIN (t), args,
10444                                    complain, DECL_CHAIN (t));
10445
10446         /* FIRST_R contains the start of the chain we've built.  */
10447         r = first_r;
10448       }
10449       break;
10450
10451     case FIELD_DECL:
10452       {
10453         tree type;
10454
10455         r = copy_decl (t);
10456         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10457         if (type == error_mark_node)
10458           RETURN (error_mark_node);
10459         TREE_TYPE (r) = type;
10460         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
10461
10462         if (DECL_C_BIT_FIELD (r))
10463           /* For bit-fields, DECL_INITIAL gives the number of bits.  For
10464              non-bit-fields DECL_INITIAL is a non-static data member
10465              initializer, which gets deferred instantiation.  */
10466           DECL_INITIAL (r)
10467             = tsubst_expr (DECL_INITIAL (t), args,
10468                            complain, in_decl,
10469                            /*integral_constant_expression_p=*/true);
10470         else if (DECL_INITIAL (t))
10471           {
10472             /* Set up DECL_TEMPLATE_INFO so that we can get at the
10473                NSDMI in perform_member_init.  Still set DECL_INITIAL
10474                so that we know there is one.  */
10475             DECL_INITIAL (r) = void_zero_node;
10476             gcc_assert (DECL_LANG_SPECIFIC (r) == NULL);
10477             retrofit_lang_decl (r);
10478             DECL_TEMPLATE_INFO (r) = build_template_info (t, args);
10479           }
10480         /* We don't have to set DECL_CONTEXT here; it is set by
10481            finish_member_declaration.  */
10482         DECL_CHAIN (r) = NULL_TREE;
10483         if (VOID_TYPE_P (type))
10484           error ("instantiation of %q+D as type %qT", r, type);
10485
10486         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
10487                                         args, complain, in_decl);
10488       }
10489       break;
10490
10491     case USING_DECL:
10492       /* We reach here only for member using decls.  */
10493       if (DECL_DEPENDENT_P (t))
10494         {
10495           r = do_class_using_decl
10496             (tsubst_copy (USING_DECL_SCOPE (t), args, complain, in_decl),
10497              tsubst_copy (DECL_NAME (t), args, complain, in_decl));
10498           if (!r)
10499             r = error_mark_node;
10500           else
10501             {
10502               TREE_PROTECTED (r) = TREE_PROTECTED (t);
10503               TREE_PRIVATE (r) = TREE_PRIVATE (t);
10504             }
10505         }
10506       else
10507         {
10508           r = copy_node (t);
10509           DECL_CHAIN (r) = NULL_TREE;
10510         }
10511       break;
10512
10513     case TYPE_DECL:
10514     case VAR_DECL:
10515       {
10516         tree argvec = NULL_TREE;
10517         tree gen_tmpl = NULL_TREE;
10518         tree spec;
10519         tree tmpl = NULL_TREE;
10520         tree ctx;
10521         tree type = NULL_TREE;
10522         bool local_p;
10523
10524         if (TREE_CODE (t) == TYPE_DECL
10525             && t == TYPE_MAIN_DECL (TREE_TYPE (t)))
10526           {
10527             /* If this is the canonical decl, we don't have to
10528                mess with instantiations, and often we can't (for
10529                typename, template type parms and such).  Note that
10530                TYPE_NAME is not correct for the above test if
10531                we've copied the type for a typedef.  */
10532             type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10533             if (type == error_mark_node)
10534               RETURN (error_mark_node);
10535             r = TYPE_NAME (type);
10536             break;
10537           }
10538
10539         /* Check to see if we already have the specialization we
10540            need.  */
10541         spec = NULL_TREE;
10542         if (DECL_CLASS_SCOPE_P (t) || DECL_NAMESPACE_SCOPE_P (t))
10543           {
10544             /* T is a static data member or namespace-scope entity.
10545                We have to substitute into namespace-scope variables
10546                (even though such entities are never templates) because
10547                of cases like:
10548                
10549                  template <class T> void f() { extern T t; }
10550
10551                where the entity referenced is not known until
10552                instantiation time.  */
10553             local_p = false;
10554             ctx = DECL_CONTEXT (t);
10555             if (DECL_CLASS_SCOPE_P (t))
10556               {
10557                 ctx = tsubst_aggr_type (ctx, args,
10558                                         complain,
10559                                         in_decl, /*entering_scope=*/1);
10560                 /* If CTX is unchanged, then T is in fact the
10561                    specialization we want.  That situation occurs when
10562                    referencing a static data member within in its own
10563                    class.  We can use pointer equality, rather than
10564                    same_type_p, because DECL_CONTEXT is always
10565                    canonical...  */
10566                 if (ctx == DECL_CONTEXT (t)
10567                     && (TREE_CODE (t) != TYPE_DECL
10568                         /* ... unless T is a member template; in which
10569                            case our caller can be willing to create a
10570                            specialization of that template represented
10571                            by T.  */
10572                         || !(DECL_TI_TEMPLATE (t)
10573                              && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (t)))))
10574                   spec = t;
10575               }
10576
10577             if (!spec)
10578               {
10579                 tmpl = DECL_TI_TEMPLATE (t);
10580                 gen_tmpl = most_general_template (tmpl);
10581                 argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
10582                 hash = hash_tmpl_and_args (gen_tmpl, argvec);
10583                 spec = retrieve_specialization (gen_tmpl, argvec, hash);
10584               }
10585           }
10586         else
10587           {
10588             /* A local variable.  */
10589             local_p = true;
10590             /* Subsequent calls to pushdecl will fill this in.  */
10591             ctx = NULL_TREE;
10592             spec = retrieve_local_specialization (t);
10593           }
10594         /* If we already have the specialization we need, there is
10595            nothing more to do.  */ 
10596         if (spec)
10597           {
10598             r = spec;
10599             break;
10600           }
10601
10602         /* Create a new node for the specialization we need.  */
10603         r = copy_decl (t);
10604         if (type == NULL_TREE)
10605           {
10606             if (is_typedef_decl (t))
10607               type = DECL_ORIGINAL_TYPE (t);
10608             else
10609               type = TREE_TYPE (t);
10610             if (TREE_CODE (t) == VAR_DECL && VAR_HAD_UNKNOWN_BOUND (t))
10611               type = strip_array_domain (type);
10612             type = tsubst (type, args, complain, in_decl);
10613           }
10614         if (TREE_CODE (r) == VAR_DECL)
10615           {
10616             /* Even if the original location is out of scope, the
10617                newly substituted one is not.  */
10618             DECL_DEAD_FOR_LOCAL (r) = 0;
10619             DECL_INITIALIZED_P (r) = 0;
10620             DECL_TEMPLATE_INSTANTIATED (r) = 0;
10621             if (type == error_mark_node)
10622               RETURN (error_mark_node);
10623             if (TREE_CODE (type) == FUNCTION_TYPE)
10624               {
10625                 /* It may seem that this case cannot occur, since:
10626
10627                      typedef void f();
10628                      void g() { f x; }
10629
10630                    declares a function, not a variable.  However:
10631       
10632                      typedef void f();
10633                      template <typename T> void g() { T t; }
10634                      template void g<f>();
10635
10636                    is an attempt to declare a variable with function
10637                    type.  */
10638                 error ("variable %qD has function type",
10639                        /* R is not yet sufficiently initialized, so we
10640                           just use its name.  */
10641                        DECL_NAME (r));
10642                 RETURN (error_mark_node);
10643               }
10644             type = complete_type (type);
10645             /* Wait until cp_finish_decl to set this again, to handle
10646                circular dependency (template/instantiate6.C). */
10647             DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r) = 0;
10648             type = check_var_type (DECL_NAME (r), type);
10649
10650             if (DECL_HAS_VALUE_EXPR_P (t))
10651               {
10652                 tree ve = DECL_VALUE_EXPR (t);
10653                 ve = tsubst_expr (ve, args, complain, in_decl,
10654                                   /*constant_expression_p=*/false);
10655                 if (REFERENCE_REF_P (ve))
10656                   {
10657                     gcc_assert (TREE_CODE (type) == REFERENCE_TYPE);
10658                     ve = TREE_OPERAND (ve, 0);
10659                   }
10660                 SET_DECL_VALUE_EXPR (r, ve);
10661               }
10662           }
10663         else if (DECL_SELF_REFERENCE_P (t))
10664           SET_DECL_SELF_REFERENCE_P (r);
10665         TREE_TYPE (r) = type;
10666         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
10667         DECL_CONTEXT (r) = ctx;
10668         /* Clear out the mangled name and RTL for the instantiation.  */
10669         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
10670         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
10671           SET_DECL_RTL (r, NULL);
10672         /* The initializer must not be expanded until it is required;
10673            see [temp.inst].  */
10674         DECL_INITIAL (r) = NULL_TREE;
10675         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
10676           SET_DECL_RTL (r, NULL);
10677         DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
10678         if (TREE_CODE (r) == VAR_DECL)
10679           {
10680             /* Possibly limit visibility based on template args.  */
10681             DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
10682             if (DECL_VISIBILITY_SPECIFIED (t))
10683               {
10684                 DECL_VISIBILITY_SPECIFIED (r) = 0;
10685                 DECL_ATTRIBUTES (r)
10686                   = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
10687               }
10688             determine_visibility (r);
10689           }
10690
10691         if (!local_p)
10692           {
10693             /* A static data member declaration is always marked
10694                external when it is declared in-class, even if an
10695                initializer is present.  We mimic the non-template
10696                processing here.  */
10697             DECL_EXTERNAL (r) = 1;
10698
10699             register_specialization (r, gen_tmpl, argvec, false, hash);
10700             DECL_TEMPLATE_INFO (r) = build_template_info (tmpl, argvec);
10701             SET_DECL_IMPLICIT_INSTANTIATION (r);
10702           }
10703         else if (cp_unevaluated_operand)
10704           {
10705             /* We're substituting this var in a decltype outside of its
10706                scope, such as for a lambda return type.  Don't add it to
10707                local_specializations, do perform auto deduction.  */
10708             tree auto_node = type_uses_auto (type);
10709             if (auto_node)
10710               {
10711                 tree init
10712                   = tsubst_expr (DECL_INITIAL (t), args, complain, in_decl,
10713                                  /*constant_expression_p=*/false);
10714                 init = resolve_nondeduced_context (init);
10715                 TREE_TYPE (r) = type
10716                   = do_auto_deduction (type, init, auto_node);
10717               }
10718           }
10719         else
10720           register_local_specialization (r, t);
10721
10722         DECL_CHAIN (r) = NULL_TREE;
10723
10724         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r),
10725                                         /*flags=*/0,
10726                                         args, complain, in_decl);
10727
10728         /* Preserve a typedef that names a type.  */
10729         if (is_typedef_decl (r))
10730           {
10731             DECL_ORIGINAL_TYPE (r) = NULL_TREE;
10732             set_underlying_type (r);
10733           }
10734
10735         layout_decl (r, 0);
10736       }
10737       break;
10738
10739     default:
10740       gcc_unreachable ();
10741     }
10742 #undef RETURN
10743
10744  out:
10745   /* Restore the file and line information.  */
10746   input_location = saved_loc;
10747
10748   return r;
10749 }
10750
10751 /* Substitute into the ARG_TYPES of a function type.  */
10752
10753 static tree
10754 tsubst_arg_types (tree arg_types,
10755                   tree args,
10756                   tsubst_flags_t complain,
10757                   tree in_decl)
10758 {
10759   tree remaining_arg_types;
10760   tree type = NULL_TREE;
10761   int i = 1;
10762   tree expanded_args = NULL_TREE;
10763   tree default_arg;
10764
10765   if (!arg_types || arg_types == void_list_node)
10766     return arg_types;
10767
10768   remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
10769                                           args, complain, in_decl);
10770   if (remaining_arg_types == error_mark_node)
10771     return error_mark_node;
10772
10773   if (PACK_EXPANSION_P (TREE_VALUE (arg_types)))
10774     {
10775       /* For a pack expansion, perform substitution on the
10776          entire expression. Later on, we'll handle the arguments
10777          one-by-one.  */
10778       expanded_args = tsubst_pack_expansion (TREE_VALUE (arg_types),
10779                                             args, complain, in_decl);
10780
10781       if (TREE_CODE (expanded_args) == TREE_VEC)
10782         /* So that we'll spin through the parameters, one by one.  */
10783         i = TREE_VEC_LENGTH (expanded_args);
10784       else
10785         {
10786           /* We only partially substituted into the parameter
10787              pack. Our type is TYPE_PACK_EXPANSION.  */
10788           type = expanded_args;
10789           expanded_args = NULL_TREE;
10790         }
10791     }
10792
10793   while (i > 0) {
10794     --i;
10795     
10796     if (expanded_args)
10797       type = TREE_VEC_ELT (expanded_args, i);
10798     else if (!type)
10799       type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
10800
10801     if (type == error_mark_node)
10802       return error_mark_node;
10803     if (VOID_TYPE_P (type))
10804       {
10805         if (complain & tf_error)
10806           {
10807             error ("invalid parameter type %qT", type);
10808             if (in_decl)
10809               error ("in declaration %q+D", in_decl);
10810           }
10811         return error_mark_node;
10812     }
10813     
10814     /* Do array-to-pointer, function-to-pointer conversion, and ignore
10815        top-level qualifiers as required.  */
10816     type = cv_unqualified (type_decays_to (type));
10817
10818     /* We do not substitute into default arguments here.  The standard
10819        mandates that they be instantiated only when needed, which is
10820        done in build_over_call.  */
10821     default_arg = TREE_PURPOSE (arg_types);
10822
10823     if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
10824       {
10825         /* We've instantiated a template before its default arguments
10826            have been parsed.  This can happen for a nested template
10827            class, and is not an error unless we require the default
10828            argument in a call of this function.  */
10829         remaining_arg_types = 
10830           tree_cons (default_arg, type, remaining_arg_types);
10831         VEC_safe_push (tree, gc, DEFARG_INSTANTIATIONS (default_arg), 
10832                        remaining_arg_types);
10833       }
10834     else
10835       remaining_arg_types = 
10836         hash_tree_cons (default_arg, type, remaining_arg_types);
10837   }
10838         
10839   return remaining_arg_types;
10840 }
10841
10842 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE.  This routine does
10843    *not* handle the exception-specification for FNTYPE, because the
10844    initial substitution of explicitly provided template parameters
10845    during argument deduction forbids substitution into the
10846    exception-specification:
10847
10848      [temp.deduct]
10849
10850      All references in the function type of the function template to  the
10851      corresponding template parameters are replaced by the specified tem-
10852      plate argument values.  If a substitution in a template parameter or
10853      in  the function type of the function template results in an invalid
10854      type, type deduction fails.  [Note: The equivalent  substitution  in
10855      exception specifications is done only when the function is instanti-
10856      ated, at which point a program is  ill-formed  if  the  substitution
10857      results in an invalid type.]  */
10858
10859 static tree
10860 tsubst_function_type (tree t,
10861                       tree args,
10862                       tsubst_flags_t complain,
10863                       tree in_decl)
10864 {
10865   tree return_type;
10866   tree arg_types;
10867   tree fntype;
10868
10869   /* The TYPE_CONTEXT is not used for function/method types.  */
10870   gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
10871
10872   /* Substitute the return type.  */
10873   return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10874   if (return_type == error_mark_node)
10875     return error_mark_node;
10876   /* The standard does not presently indicate that creation of a
10877      function type with an invalid return type is a deduction failure.
10878      However, that is clearly analogous to creating an array of "void"
10879      or a reference to a reference.  This is core issue #486.  */
10880   if (TREE_CODE (return_type) == ARRAY_TYPE
10881       || TREE_CODE (return_type) == FUNCTION_TYPE)
10882     {
10883       if (complain & tf_error)
10884         {
10885           if (TREE_CODE (return_type) == ARRAY_TYPE)
10886             error ("function returning an array");
10887           else
10888             error ("function returning a function");
10889         }
10890       return error_mark_node;
10891     }
10892
10893   /* Substitute the argument types.  */
10894   arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
10895                                 complain, in_decl);
10896   if (arg_types == error_mark_node)
10897     return error_mark_node;
10898
10899   /* Construct a new type node and return it.  */
10900   if (TREE_CODE (t) == FUNCTION_TYPE)
10901     {
10902       fntype = build_function_type (return_type, arg_types);
10903       fntype = apply_memfn_quals (fntype, type_memfn_quals (t));
10904     }
10905   else
10906     {
10907       tree r = TREE_TYPE (TREE_VALUE (arg_types));
10908       if (! MAYBE_CLASS_TYPE_P (r))
10909         {
10910           /* [temp.deduct]
10911
10912              Type deduction may fail for any of the following
10913              reasons:
10914
10915              -- Attempting to create "pointer to member of T" when T
10916              is not a class type.  */
10917           if (complain & tf_error)
10918             error ("creating pointer to member function of non-class type %qT",
10919                       r);
10920           return error_mark_node;
10921         }
10922
10923       fntype = build_method_type_directly (r, return_type,
10924                                            TREE_CHAIN (arg_types));
10925     }
10926   fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
10927
10928   return fntype;
10929 }
10930
10931 /* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE.  Substitute the template
10932    ARGS into that specification, and return the substituted
10933    specification.  If there is no specification, return NULL_TREE.  */
10934
10935 static tree
10936 tsubst_exception_specification (tree fntype,
10937                                 tree args,
10938                                 tsubst_flags_t complain,
10939                                 tree in_decl,
10940                                 bool defer_ok)
10941 {
10942   tree specs;
10943   tree new_specs;
10944
10945   specs = TYPE_RAISES_EXCEPTIONS (fntype);
10946   new_specs = NULL_TREE;
10947   if (specs && TREE_PURPOSE (specs))
10948     {
10949       /* A noexcept-specifier.  */
10950       tree expr = TREE_PURPOSE (specs);
10951       if (expr == boolean_true_node || expr == boolean_false_node)
10952         new_specs = expr;
10953       else if (defer_ok)
10954         {
10955           /* Defer instantiation of noexcept-specifiers to avoid
10956              excessive instantiations (c++/49107).  */
10957           new_specs = make_node (DEFERRED_NOEXCEPT);
10958           if (DEFERRED_NOEXCEPT_SPEC_P (specs))
10959             {
10960               /* We already partially instantiated this member template,
10961                  so combine the new args with the old.  */
10962               DEFERRED_NOEXCEPT_PATTERN (new_specs)
10963                 = DEFERRED_NOEXCEPT_PATTERN (expr);
10964               DEFERRED_NOEXCEPT_ARGS (new_specs)
10965                 = add_to_template_args (DEFERRED_NOEXCEPT_ARGS (expr), args);
10966             }
10967           else
10968             {
10969               DEFERRED_NOEXCEPT_PATTERN (new_specs) = expr;
10970               DEFERRED_NOEXCEPT_ARGS (new_specs) = args;
10971             }
10972         }
10973       else
10974         new_specs = tsubst_copy_and_build
10975           (expr, args, complain, in_decl, /*function_p=*/false,
10976            /*integral_constant_expression_p=*/true);
10977       new_specs = build_noexcept_spec (new_specs, complain);
10978     }
10979   else if (specs)
10980     {
10981       if (! TREE_VALUE (specs))
10982         new_specs = specs;
10983       else
10984         while (specs)
10985           {
10986             tree spec;
10987             int i, len = 1;
10988             tree expanded_specs = NULL_TREE;
10989
10990             if (PACK_EXPANSION_P (TREE_VALUE (specs)))
10991               {
10992                 /* Expand the pack expansion type.  */
10993                 expanded_specs = tsubst_pack_expansion (TREE_VALUE (specs),
10994                                                        args, complain,
10995                                                        in_decl);
10996
10997                 if (expanded_specs == error_mark_node)
10998                   return error_mark_node;
10999                 else if (TREE_CODE (expanded_specs) == TREE_VEC)
11000                   len = TREE_VEC_LENGTH (expanded_specs);
11001                 else
11002                   {
11003                     /* We're substituting into a member template, so
11004                        we got a TYPE_PACK_EXPANSION back.  Add that
11005                        expansion and move on.  */
11006                     gcc_assert (TREE_CODE (expanded_specs) 
11007                                 == TYPE_PACK_EXPANSION);
11008                     new_specs = add_exception_specifier (new_specs,
11009                                                          expanded_specs,
11010                                                          complain);
11011                     specs = TREE_CHAIN (specs);
11012                     continue;
11013                   }
11014               }
11015
11016             for (i = 0; i < len; ++i)
11017               {
11018                 if (expanded_specs)
11019                   spec = TREE_VEC_ELT (expanded_specs, i);
11020                 else
11021                   spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
11022                 if (spec == error_mark_node)
11023                   return spec;
11024                 new_specs = add_exception_specifier (new_specs, spec, 
11025                                                      complain);
11026               }
11027
11028             specs = TREE_CHAIN (specs);
11029           }
11030     }
11031   return new_specs;
11032 }
11033
11034 /* Take the tree structure T and replace template parameters used
11035    therein with the argument vector ARGS.  IN_DECL is an associated
11036    decl for diagnostics.  If an error occurs, returns ERROR_MARK_NODE.
11037    Issue error and warning messages under control of COMPLAIN.  Note
11038    that we must be relatively non-tolerant of extensions here, in
11039    order to preserve conformance; if we allow substitutions that
11040    should not be allowed, we may allow argument deductions that should
11041    not succeed, and therefore report ambiguous overload situations
11042    where there are none.  In theory, we could allow the substitution,
11043    but indicate that it should have failed, and allow our caller to
11044    make sure that the right thing happens, but we don't try to do this
11045    yet.
11046
11047    This function is used for dealing with types, decls and the like;
11048    for expressions, use tsubst_expr or tsubst_copy.  */
11049
11050 tree
11051 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
11052 {
11053   enum tree_code code;
11054   tree type, r = NULL_TREE;
11055
11056   if (t == NULL_TREE || t == error_mark_node
11057       || t == integer_type_node
11058       || t == void_type_node
11059       || t == char_type_node
11060       || t == unknown_type_node
11061       || TREE_CODE (t) == NAMESPACE_DECL
11062       || TREE_CODE (t) == TRANSLATION_UNIT_DECL)
11063     return t;
11064
11065   if (DECL_P (t))
11066     return tsubst_decl (t, args, complain);
11067
11068   if (args == NULL_TREE)
11069     return t;
11070
11071   code = TREE_CODE (t);
11072
11073   if (code == IDENTIFIER_NODE)
11074     type = IDENTIFIER_TYPE_VALUE (t);
11075   else
11076     type = TREE_TYPE (t);
11077
11078   gcc_assert (type != unknown_type_node);
11079
11080   /* Reuse typedefs.  We need to do this to handle dependent attributes,
11081      such as attribute aligned.  */
11082   if (TYPE_P (t)
11083       && typedef_variant_p (t))
11084     {
11085       tree decl = TYPE_NAME (t);
11086
11087       if (TYPE_DECL_ALIAS_P (decl)
11088           && DECL_LANG_SPECIFIC (decl)
11089           && DECL_TEMPLATE_INFO (decl)
11090           && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl)))
11091         {
11092           /* DECL represents an alias template and we want to
11093              instantiate it.  Let's substitute our arguments for the
11094              template parameters into the declaration and get the
11095              resulting type.  */
11096           r = tsubst (decl, args, complain, decl);
11097         }
11098       else if (DECL_CLASS_SCOPE_P (decl)
11099                && CLASSTYPE_TEMPLATE_INFO (DECL_CONTEXT (decl))
11100                && uses_template_parms (DECL_CONTEXT (decl)))
11101         {
11102           tree tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
11103           tree gen_args = tsubst (DECL_TI_ARGS (decl), args, complain, in_decl);
11104           r = retrieve_specialization (tmpl, gen_args, 0);
11105         }
11106       else if (DECL_FUNCTION_SCOPE_P (decl)
11107                && DECL_TEMPLATE_INFO (DECL_CONTEXT (decl))
11108                && uses_template_parms (DECL_TI_ARGS (DECL_CONTEXT (decl))))
11109         r = retrieve_local_specialization (decl);
11110       else
11111         /* The typedef is from a non-template context.  */
11112         return t;
11113
11114       if (r)
11115         {
11116           r = TREE_TYPE (r);
11117           r = cp_build_qualified_type_real
11118             (r, cp_type_quals (t) | cp_type_quals (r),
11119              complain | tf_ignore_bad_quals);
11120           return r;
11121         }
11122       /* Else we must be instantiating the typedef, so fall through.  */
11123     }
11124
11125   if (type
11126       && code != TYPENAME_TYPE
11127       && code != TEMPLATE_TYPE_PARM
11128       && code != IDENTIFIER_NODE
11129       && code != FUNCTION_TYPE
11130       && code != METHOD_TYPE)
11131     type = tsubst (type, args, complain, in_decl);
11132   if (type == error_mark_node)
11133     return error_mark_node;
11134
11135   switch (code)
11136     {
11137     case RECORD_TYPE:
11138     case UNION_TYPE:
11139     case ENUMERAL_TYPE:
11140       return tsubst_aggr_type (t, args, complain, in_decl,
11141                                /*entering_scope=*/0);
11142
11143     case ERROR_MARK:
11144     case IDENTIFIER_NODE:
11145     case VOID_TYPE:
11146     case REAL_TYPE:
11147     case COMPLEX_TYPE:
11148     case VECTOR_TYPE:
11149     case BOOLEAN_TYPE:
11150     case NULLPTR_TYPE:
11151     case LANG_TYPE:
11152       return t;
11153
11154     case INTEGER_TYPE:
11155       if (t == integer_type_node)
11156         return t;
11157
11158       if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
11159           && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
11160         return t;
11161
11162       {
11163         tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
11164
11165         max = tsubst_expr (omax, args, complain, in_decl,
11166                            /*integral_constant_expression_p=*/false);
11167
11168         /* Fix up type of the magic NOP_EXPR with TREE_SIDE_EFFECTS if
11169            needed.  */
11170         if (TREE_CODE (max) == NOP_EXPR
11171             && TREE_SIDE_EFFECTS (omax)
11172             && !TREE_TYPE (max))
11173           TREE_TYPE (max) = TREE_TYPE (TREE_OPERAND (max, 0));
11174
11175         /* If we're in a partial instantiation, preserve the magic NOP_EXPR
11176            with TREE_SIDE_EFFECTS that indicates this is not an integral
11177            constant expression.  */
11178         if (processing_template_decl
11179             && TREE_SIDE_EFFECTS (omax) && TREE_CODE (omax) == NOP_EXPR)
11180           {
11181             gcc_assert (TREE_CODE (max) == NOP_EXPR);
11182             TREE_SIDE_EFFECTS (max) = 1;
11183           }
11184
11185         return compute_array_index_type (NULL_TREE, max, complain);
11186       }
11187
11188     case TEMPLATE_TYPE_PARM:
11189     case TEMPLATE_TEMPLATE_PARM:
11190     case BOUND_TEMPLATE_TEMPLATE_PARM:
11191     case TEMPLATE_PARM_INDEX:
11192       {
11193         int idx;
11194         int level;
11195         int levels;
11196         tree arg = NULL_TREE;
11197
11198         r = NULL_TREE;
11199
11200         gcc_assert (TREE_VEC_LENGTH (args) > 0);
11201         template_parm_level_and_index (t, &level, &idx); 
11202
11203         levels = TMPL_ARGS_DEPTH (args);
11204         if (level <= levels)
11205           {
11206             arg = TMPL_ARG (args, level, idx);
11207
11208             if (arg && TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
11209               /* See through ARGUMENT_PACK_SELECT arguments. */
11210               arg = ARGUMENT_PACK_SELECT_ARG (arg);
11211           }
11212
11213         if (arg == error_mark_node)
11214           return error_mark_node;
11215         else if (arg != NULL_TREE)
11216           {
11217             if (ARGUMENT_PACK_P (arg))
11218               /* If ARG is an argument pack, we don't actually want to
11219                  perform a substitution here, because substitutions
11220                  for argument packs are only done
11221                  element-by-element. We can get to this point when
11222                  substituting the type of a non-type template
11223                  parameter pack, when that type actually contains
11224                  template parameter packs from an outer template, e.g.,
11225
11226                  template<typename... Types> struct A {
11227                    template<Types... Values> struct B { };
11228                  };  */
11229               return t;
11230
11231             if (code == TEMPLATE_TYPE_PARM)
11232               {
11233                 int quals;
11234                 gcc_assert (TYPE_P (arg));
11235
11236                 quals = cp_type_quals (arg) | cp_type_quals (t);
11237                   
11238                 return cp_build_qualified_type_real
11239                   (arg, quals, complain | tf_ignore_bad_quals);
11240               }
11241             else if (code == BOUND_TEMPLATE_TEMPLATE_PARM)
11242               {
11243                 /* We are processing a type constructed from a
11244                    template template parameter.  */
11245                 tree argvec = tsubst (TYPE_TI_ARGS (t),
11246                                       args, complain, in_decl);
11247                 if (argvec == error_mark_node)
11248                   return error_mark_node;
11249
11250                 gcc_assert (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
11251                             || TREE_CODE (arg) == TEMPLATE_DECL
11252                             || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
11253
11254                 if (TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE)
11255                   /* Consider this code:
11256
11257                         template <template <class> class Template>
11258                         struct Internal {
11259                         template <class Arg> using Bind = Template<Arg>;
11260                         };
11261
11262                         template <template <class> class Template, class Arg>
11263                         using Instantiate = Template<Arg>; //#0
11264
11265                         template <template <class> class Template,
11266                                   class Argument>
11267                         using Bind =
11268                           Instantiate<Internal<Template>::template Bind,
11269                                       Argument>; //#1
11270
11271                      When #1 is parsed, the
11272                      BOUND_TEMPLATE_TEMPLATE_PARM representing the
11273                      parameter `Template' in #0 matches the
11274                      UNBOUND_CLASS_TEMPLATE representing the argument
11275                      `Internal<Template>::template Bind'; We then want
11276                      to assemble the type `Bind<Argument>' that can't
11277                      be fully created right now, because
11278                      `Internal<Template>' not being complete, the Bind
11279                      template cannot be looked up in that context.  So
11280                      we need to "store" `Bind<Argument>' for later
11281                      when the context of Bind becomes complete.  Let's
11282                      store that in a TYPENAME_TYPE.  */
11283                   return make_typename_type (TYPE_CONTEXT (arg),
11284                                              build_nt (TEMPLATE_ID_EXPR,
11285                                                        TYPE_IDENTIFIER (arg),
11286                                                        argvec),
11287                                              typename_type,
11288                                              complain);
11289
11290                 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
11291                    are resolving nested-types in the signature of a
11292                    member function templates.  Otherwise ARG is a
11293                    TEMPLATE_DECL and is the real template to be
11294                    instantiated.  */
11295                 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
11296                   arg = TYPE_NAME (arg);
11297
11298                 r = lookup_template_class (arg,
11299                                            argvec, in_decl,
11300                                            DECL_CONTEXT (arg),
11301                                             /*entering_scope=*/0,
11302                                            complain);
11303                 return cp_build_qualified_type_real
11304                   (r, cp_type_quals (t), complain);
11305               }
11306             else
11307               /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX.  */
11308               return convert_from_reference (unshare_expr (arg));
11309           }
11310
11311         if (level == 1)
11312           /* This can happen during the attempted tsubst'ing in
11313              unify.  This means that we don't yet have any information
11314              about the template parameter in question.  */
11315           return t;
11316
11317         /* If we get here, we must have been looking at a parm for a
11318            more deeply nested template.  Make a new version of this
11319            template parameter, but with a lower level.  */
11320         switch (code)
11321           {
11322           case TEMPLATE_TYPE_PARM:
11323           case TEMPLATE_TEMPLATE_PARM:
11324           case BOUND_TEMPLATE_TEMPLATE_PARM:
11325             if (cp_type_quals (t))
11326               {
11327                 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
11328                 r = cp_build_qualified_type_real
11329                   (r, cp_type_quals (t),
11330                    complain | (code == TEMPLATE_TYPE_PARM
11331                                ? tf_ignore_bad_quals : 0));
11332               }
11333             else
11334               {
11335                 r = copy_type (t);
11336                 TEMPLATE_TYPE_PARM_INDEX (r)
11337                   = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
11338                                                 r, levels, args, complain);
11339                 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
11340                 TYPE_MAIN_VARIANT (r) = r;
11341                 TYPE_POINTER_TO (r) = NULL_TREE;
11342                 TYPE_REFERENCE_TO (r) = NULL_TREE;
11343
11344                 if (TREE_CODE (r) == TEMPLATE_TEMPLATE_PARM)
11345                   /* We have reduced the level of the template
11346                      template parameter, but not the levels of its
11347                      template parameters, so canonical_type_parameter
11348                      will not be able to find the canonical template
11349                      template parameter for this level. Thus, we
11350                      require structural equality checking to compare
11351                      TEMPLATE_TEMPLATE_PARMs. */
11352                   SET_TYPE_STRUCTURAL_EQUALITY (r);
11353                 else if (TYPE_STRUCTURAL_EQUALITY_P (t))
11354                   SET_TYPE_STRUCTURAL_EQUALITY (r);
11355                 else
11356                   TYPE_CANONICAL (r) = canonical_type_parameter (r);
11357
11358                 if (code == BOUND_TEMPLATE_TEMPLATE_PARM)
11359                   {
11360                     tree argvec = tsubst (TYPE_TI_ARGS (t), args,
11361                                           complain, in_decl);
11362                     if (argvec == error_mark_node)
11363                       return error_mark_node;
11364
11365                     TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
11366                       = build_template_info (TYPE_TI_TEMPLATE (t), argvec);
11367                   }
11368               }
11369             break;
11370
11371           case TEMPLATE_PARM_INDEX:
11372             r = reduce_template_parm_level (t, type, levels, args, complain);
11373             break;
11374
11375           default:
11376             gcc_unreachable ();
11377           }
11378
11379         return r;
11380       }
11381
11382     case TREE_LIST:
11383       {
11384         tree purpose, value, chain;
11385
11386         if (t == void_list_node)
11387           return t;
11388
11389         purpose = TREE_PURPOSE (t);
11390         if (purpose)
11391           {
11392             purpose = tsubst (purpose, args, complain, in_decl);
11393             if (purpose == error_mark_node)
11394               return error_mark_node;
11395           }
11396         value = TREE_VALUE (t);
11397         if (value)
11398           {
11399             value = tsubst (value, args, complain, in_decl);
11400             if (value == error_mark_node)
11401               return error_mark_node;
11402           }
11403         chain = TREE_CHAIN (t);
11404         if (chain && chain != void_type_node)
11405           {
11406             chain = tsubst (chain, args, complain, in_decl);
11407             if (chain == error_mark_node)
11408               return error_mark_node;
11409           }
11410         if (purpose == TREE_PURPOSE (t)
11411             && value == TREE_VALUE (t)
11412             && chain == TREE_CHAIN (t))
11413           return t;
11414         return hash_tree_cons (purpose, value, chain);
11415       }
11416
11417     case TREE_BINFO:
11418       /* We should never be tsubsting a binfo.  */
11419       gcc_unreachable ();
11420
11421     case TREE_VEC:
11422       /* A vector of template arguments.  */
11423       gcc_assert (!type);
11424       return tsubst_template_args (t, args, complain, in_decl);
11425
11426     case POINTER_TYPE:
11427     case REFERENCE_TYPE:
11428       {
11429         if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
11430           return t;
11431
11432         /* [temp.deduct]
11433
11434            Type deduction may fail for any of the following
11435            reasons:
11436
11437            -- Attempting to create a pointer to reference type.
11438            -- Attempting to create a reference to a reference type or
11439               a reference to void.
11440
11441           Core issue 106 says that creating a reference to a reference
11442           during instantiation is no longer a cause for failure. We
11443           only enforce this check in strict C++98 mode.  */
11444         if ((TREE_CODE (type) == REFERENCE_TYPE
11445              && (((cxx_dialect == cxx98) && flag_iso) || code != REFERENCE_TYPE))
11446             || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
11447           {
11448             static location_t last_loc;
11449
11450             /* We keep track of the last time we issued this error
11451                message to avoid spewing a ton of messages during a
11452                single bad template instantiation.  */
11453             if (complain & tf_error
11454                 && last_loc != input_location)
11455               {
11456                 if (TREE_CODE (type) == VOID_TYPE)
11457                   error ("forming reference to void");
11458                else if (code == POINTER_TYPE)
11459                  error ("forming pointer to reference type %qT", type);
11460                else
11461                   error ("forming reference to reference type %qT", type);
11462                 last_loc = input_location;
11463               }
11464
11465             return error_mark_node;
11466           }
11467         else if (code == POINTER_TYPE)
11468           {
11469             r = build_pointer_type (type);
11470             if (TREE_CODE (type) == METHOD_TYPE)
11471               r = build_ptrmemfunc_type (r);
11472           }
11473         else if (TREE_CODE (type) == REFERENCE_TYPE)
11474           /* In C++0x, during template argument substitution, when there is an
11475              attempt to create a reference to a reference type, reference
11476              collapsing is applied as described in [14.3.1/4 temp.arg.type]:
11477
11478              "If a template-argument for a template-parameter T names a type
11479              that is a reference to a type A, an attempt to create the type
11480              'lvalue reference to cv T' creates the type 'lvalue reference to
11481              A,' while an attempt to create the type type rvalue reference to
11482              cv T' creates the type T"
11483           */
11484           r = cp_build_reference_type
11485               (TREE_TYPE (type),
11486                TYPE_REF_IS_RVALUE (t) && TYPE_REF_IS_RVALUE (type));
11487         else
11488           r = cp_build_reference_type (type, TYPE_REF_IS_RVALUE (t));
11489         r = cp_build_qualified_type_real (r, cp_type_quals (t), complain);
11490
11491         if (r != error_mark_node)
11492           /* Will this ever be needed for TYPE_..._TO values?  */
11493           layout_type (r);
11494
11495         return r;
11496       }
11497     case OFFSET_TYPE:
11498       {
11499         r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
11500         if (r == error_mark_node || !MAYBE_CLASS_TYPE_P (r))
11501           {
11502             /* [temp.deduct]
11503
11504                Type deduction may fail for any of the following
11505                reasons:
11506
11507                -- Attempting to create "pointer to member of T" when T
11508                   is not a class type.  */
11509             if (complain & tf_error)
11510               error ("creating pointer to member of non-class type %qT", r);
11511             return error_mark_node;
11512           }
11513         if (TREE_CODE (type) == REFERENCE_TYPE)
11514           {
11515             if (complain & tf_error)
11516               error ("creating pointer to member reference type %qT", type);
11517             return error_mark_node;
11518           }
11519         if (TREE_CODE (type) == VOID_TYPE)
11520           {
11521             if (complain & tf_error)
11522               error ("creating pointer to member of type void");
11523             return error_mark_node;
11524           }
11525         gcc_assert (TREE_CODE (type) != METHOD_TYPE);
11526         if (TREE_CODE (type) == FUNCTION_TYPE)
11527           {
11528             /* The type of the implicit object parameter gets its
11529                cv-qualifiers from the FUNCTION_TYPE. */
11530             tree memptr;
11531             tree method_type = build_memfn_type (type, r, type_memfn_quals (type));
11532             memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
11533             return cp_build_qualified_type_real (memptr, cp_type_quals (t),
11534                                                  complain);
11535           }
11536         else
11537           return cp_build_qualified_type_real (build_ptrmem_type (r, type),
11538                                                cp_type_quals (t),
11539                                                complain);
11540       }
11541     case FUNCTION_TYPE:
11542     case METHOD_TYPE:
11543       {
11544         tree fntype;
11545         tree specs;
11546         fntype = tsubst_function_type (t, args, complain, in_decl);
11547         if (fntype == error_mark_node)
11548           return error_mark_node;
11549
11550         /* Substitute the exception specification.  */
11551         specs = tsubst_exception_specification (t, args, complain,
11552                                                 in_decl, /*defer_ok*/true);
11553         if (specs == error_mark_node)
11554           return error_mark_node;
11555         if (specs)
11556           fntype = build_exception_variant (fntype, specs);
11557         return fntype;
11558       }
11559     case ARRAY_TYPE:
11560       {
11561         tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
11562         if (domain == error_mark_node)
11563           return error_mark_node;
11564
11565         /* As an optimization, we avoid regenerating the array type if
11566            it will obviously be the same as T.  */
11567         if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
11568           return t;
11569
11570         /* These checks should match the ones in grokdeclarator.
11571
11572            [temp.deduct]
11573
11574            The deduction may fail for any of the following reasons:
11575
11576            -- Attempting to create an array with an element type that
11577               is void, a function type, or a reference type, or [DR337]
11578               an abstract class type.  */
11579         if (TREE_CODE (type) == VOID_TYPE
11580             || TREE_CODE (type) == FUNCTION_TYPE
11581             || TREE_CODE (type) == REFERENCE_TYPE)
11582           {
11583             if (complain & tf_error)
11584               error ("creating array of %qT", type);
11585             return error_mark_node;
11586           }
11587         if (CLASS_TYPE_P (type) && CLASSTYPE_PURE_VIRTUALS (type))
11588           {
11589             if (complain & tf_error)
11590               error ("creating array of %qT, which is an abstract class type",
11591                      type);
11592             return error_mark_node;
11593           }
11594
11595         r = build_cplus_array_type (type, domain);
11596
11597         if (TYPE_USER_ALIGN (t))
11598           {
11599             TYPE_ALIGN (r) = TYPE_ALIGN (t);
11600             TYPE_USER_ALIGN (r) = 1;
11601           }
11602
11603         return r;
11604       }
11605
11606     case TYPENAME_TYPE:
11607       {
11608         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
11609                                      in_decl, /*entering_scope=*/1);
11610         tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
11611                               complain, in_decl);
11612
11613         if (ctx == error_mark_node || f == error_mark_node)
11614           return error_mark_node;
11615
11616         if (!MAYBE_CLASS_TYPE_P (ctx))
11617           {
11618             if (complain & tf_error)
11619               error ("%qT is not a class, struct, or union type", ctx);
11620             return error_mark_node;
11621           }
11622         else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
11623           {
11624             /* Normally, make_typename_type does not require that the CTX
11625                have complete type in order to allow things like:
11626
11627                  template <class T> struct S { typename S<T>::X Y; };
11628
11629                But, such constructs have already been resolved by this
11630                point, so here CTX really should have complete type, unless
11631                it's a partial instantiation.  */
11632             ctx = complete_type (ctx);
11633             if (!COMPLETE_TYPE_P (ctx))
11634               {
11635                 if (complain & tf_error)
11636                   cxx_incomplete_type_error (NULL_TREE, ctx);
11637                 return error_mark_node;
11638               }
11639           }
11640
11641         f = make_typename_type (ctx, f, typename_type,
11642                                 (complain & tf_error) | tf_keep_type_decl);
11643         if (f == error_mark_node)
11644           return f;
11645         if (TREE_CODE (f) == TYPE_DECL)
11646           {
11647             complain |= tf_ignore_bad_quals;
11648             f = TREE_TYPE (f);
11649           }
11650
11651         if (TREE_CODE (f) != TYPENAME_TYPE)
11652           {
11653             if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
11654               {
11655                 if (complain & tf_error)
11656                   error ("%qT resolves to %qT, which is not an enumeration type",
11657                          t, f);
11658                 else
11659                   return error_mark_node;
11660               }
11661             else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
11662               {
11663                 if (complain & tf_error)
11664                   error ("%qT resolves to %qT, which is is not a class type",
11665                          t, f);
11666                 else
11667                   return error_mark_node;
11668               }
11669           }
11670
11671         return cp_build_qualified_type_real
11672           (f, cp_type_quals (f) | cp_type_quals (t), complain);
11673       }
11674
11675     case UNBOUND_CLASS_TEMPLATE:
11676       {
11677         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
11678                                      in_decl, /*entering_scope=*/1);
11679         tree name = TYPE_IDENTIFIER (t);
11680         tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
11681
11682         if (ctx == error_mark_node || name == error_mark_node)
11683           return error_mark_node;
11684
11685         if (parm_list)
11686           parm_list = tsubst_template_parms (parm_list, args, complain);
11687         return make_unbound_class_template (ctx, name, parm_list, complain);
11688       }
11689
11690     case TYPEOF_TYPE:
11691       {
11692         tree type;
11693
11694         ++cp_unevaluated_operand;
11695         ++c_inhibit_evaluation_warnings;
11696
11697         type = tsubst_expr (TYPEOF_TYPE_EXPR (t), args,
11698                             complain, in_decl,
11699                             /*integral_constant_expression_p=*/false);
11700
11701         --cp_unevaluated_operand;
11702         --c_inhibit_evaluation_warnings;
11703
11704         type = finish_typeof (type);
11705         return cp_build_qualified_type_real (type,
11706                                              cp_type_quals (t)
11707                                              | cp_type_quals (type),
11708                                              complain);
11709       }
11710
11711     case DECLTYPE_TYPE:
11712       {
11713         tree type;
11714
11715         ++cp_unevaluated_operand;
11716         ++c_inhibit_evaluation_warnings;
11717
11718         type = tsubst_expr (DECLTYPE_TYPE_EXPR (t), args,
11719                             complain, in_decl,
11720                             /*integral_constant_expression_p=*/false);
11721
11722         --cp_unevaluated_operand;
11723         --c_inhibit_evaluation_warnings;
11724
11725         if (DECLTYPE_FOR_LAMBDA_CAPTURE (t))
11726           type = lambda_capture_field_type (type);
11727         else if (DECLTYPE_FOR_LAMBDA_PROXY (t))
11728           type = lambda_proxy_type (type);
11729         else
11730           type = finish_decltype_type
11731             (type, DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t), complain);
11732         return cp_build_qualified_type_real (type,
11733                                              cp_type_quals (t)
11734                                              | cp_type_quals (type),
11735                                              complain);
11736       }
11737
11738     case UNDERLYING_TYPE:
11739       {
11740         tree type = tsubst (UNDERLYING_TYPE_TYPE (t), args,
11741                             complain, in_decl);
11742         return finish_underlying_type (type);
11743       }
11744
11745     case TYPE_ARGUMENT_PACK:
11746     case NONTYPE_ARGUMENT_PACK:
11747       {
11748         tree r = TYPE_P (t) ? cxx_make_type (code) : make_node (code);
11749         tree packed_out = 
11750           tsubst_template_args (ARGUMENT_PACK_ARGS (t), 
11751                                 args,
11752                                 complain,
11753                                 in_decl);
11754         SET_ARGUMENT_PACK_ARGS (r, packed_out);
11755
11756         /* For template nontype argument packs, also substitute into
11757            the type.  */
11758         if (code == NONTYPE_ARGUMENT_PACK)
11759           TREE_TYPE (r) = tsubst (TREE_TYPE (t), args, complain, in_decl);
11760
11761         return r;
11762       }
11763       break;
11764
11765     case INTEGER_CST:
11766     case REAL_CST:
11767     case STRING_CST:
11768     case PLUS_EXPR:
11769     case MINUS_EXPR:
11770     case NEGATE_EXPR:
11771     case NOP_EXPR:
11772     case INDIRECT_REF:
11773     case ADDR_EXPR:
11774     case CALL_EXPR:
11775     case ARRAY_REF:
11776     case SCOPE_REF:
11777       /* We should use one of the expression tsubsts for these codes.  */
11778       gcc_unreachable ();
11779
11780     default:
11781       sorry ("use of %qs in template", tree_code_name [(int) code]);
11782       return error_mark_node;
11783     }
11784 }
11785
11786 /* Like tsubst_expr for a BASELINK.  OBJECT_TYPE, if non-NULL, is the
11787    type of the expression on the left-hand side of the "." or "->"
11788    operator.  */
11789
11790 static tree
11791 tsubst_baselink (tree baselink, tree object_type,
11792                  tree args, tsubst_flags_t complain, tree in_decl)
11793 {
11794     tree name;
11795     tree qualifying_scope;
11796     tree fns;
11797     tree optype;
11798     tree template_args = 0;
11799     bool template_id_p = false;
11800
11801     /* A baselink indicates a function from a base class.  Both the
11802        BASELINK_ACCESS_BINFO and the base class referenced may
11803        indicate bases of the template class, rather than the
11804        instantiated class.  In addition, lookups that were not
11805        ambiguous before may be ambiguous now.  Therefore, we perform
11806        the lookup again.  */
11807     qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
11808     qualifying_scope = tsubst (qualifying_scope, args,
11809                                complain, in_decl);
11810     fns = BASELINK_FUNCTIONS (baselink);
11811     optype = tsubst (BASELINK_OPTYPE (baselink), args, complain, in_decl);
11812     if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
11813       {
11814         template_id_p = true;
11815         template_args = TREE_OPERAND (fns, 1);
11816         fns = TREE_OPERAND (fns, 0);
11817         if (template_args)
11818           template_args = tsubst_template_args (template_args, args,
11819                                                 complain, in_decl);
11820       }
11821     name = DECL_NAME (get_first_fn (fns));
11822     if (IDENTIFIER_TYPENAME_P (name))
11823       name = mangle_conv_op_name_for_type (optype);
11824     baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
11825     if (!baselink)
11826       return error_mark_node;
11827
11828     /* If lookup found a single function, mark it as used at this
11829        point.  (If it lookup found multiple functions the one selected
11830        later by overload resolution will be marked as used at that
11831        point.)  */
11832     if (BASELINK_P (baselink))
11833       fns = BASELINK_FUNCTIONS (baselink);
11834     if (!template_id_p && !really_overloaded_fn (fns))
11835       mark_used (OVL_CURRENT (fns));
11836
11837     /* Add back the template arguments, if present.  */
11838     if (BASELINK_P (baselink) && template_id_p)
11839       BASELINK_FUNCTIONS (baselink)
11840         = build_nt (TEMPLATE_ID_EXPR,
11841                     BASELINK_FUNCTIONS (baselink),
11842                     template_args);
11843     /* Update the conversion operator type.  */
11844     BASELINK_OPTYPE (baselink) = optype;
11845
11846     if (!object_type)
11847       object_type = current_class_type;
11848     return adjust_result_of_qualified_name_lookup (baselink,
11849                                                    qualifying_scope,
11850                                                    object_type);
11851 }
11852
11853 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID.  DONE is
11854    true if the qualified-id will be a postfix-expression in-and-of
11855    itself; false if more of the postfix-expression follows the
11856    QUALIFIED_ID.  ADDRESS_P is true if the qualified-id is the operand
11857    of "&".  */
11858
11859 static tree
11860 tsubst_qualified_id (tree qualified_id, tree args,
11861                      tsubst_flags_t complain, tree in_decl,
11862                      bool done, bool address_p)
11863 {
11864   tree expr;
11865   tree scope;
11866   tree name;
11867   bool is_template;
11868   tree template_args;
11869
11870   gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
11871
11872   /* Figure out what name to look up.  */
11873   name = TREE_OPERAND (qualified_id, 1);
11874   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
11875     {
11876       is_template = true;
11877       template_args = TREE_OPERAND (name, 1);
11878       if (template_args)
11879         template_args = tsubst_template_args (template_args, args,
11880                                               complain, in_decl);
11881       name = TREE_OPERAND (name, 0);
11882     }
11883   else
11884     {
11885       is_template = false;
11886       template_args = NULL_TREE;
11887     }
11888
11889   /* Substitute into the qualifying scope.  When there are no ARGS, we
11890      are just trying to simplify a non-dependent expression.  In that
11891      case the qualifying scope may be dependent, and, in any case,
11892      substituting will not help.  */
11893   scope = TREE_OPERAND (qualified_id, 0);
11894   if (args)
11895     {
11896       scope = tsubst (scope, args, complain, in_decl);
11897       expr = tsubst_copy (name, args, complain, in_decl);
11898     }
11899   else
11900     expr = name;
11901
11902   if (dependent_scope_p (scope))
11903     {
11904       if (is_template)
11905         expr = build_min_nt (TEMPLATE_ID_EXPR, expr, template_args);
11906       return build_qualified_name (NULL_TREE, scope, expr,
11907                                    QUALIFIED_NAME_IS_TEMPLATE (qualified_id));
11908     }
11909
11910   if (!BASELINK_P (name) && !DECL_P (expr))
11911     {
11912       if (TREE_CODE (expr) == BIT_NOT_EXPR)
11913         {
11914           /* A BIT_NOT_EXPR is used to represent a destructor.  */
11915           if (!check_dtor_name (scope, TREE_OPERAND (expr, 0)))
11916             {
11917               error ("qualifying type %qT does not match destructor name ~%qT",
11918                      scope, TREE_OPERAND (expr, 0));
11919               expr = error_mark_node;
11920             }
11921           else
11922             expr = lookup_qualified_name (scope, complete_dtor_identifier,
11923                                           /*is_type_p=*/0, false);
11924         }
11925       else
11926         expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
11927       if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
11928                      ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
11929         {
11930           if (complain & tf_error)
11931             {
11932               error ("dependent-name %qE is parsed as a non-type, but "
11933                      "instantiation yields a type", qualified_id);
11934               inform (input_location, "say %<typename %E%> if a type is meant", qualified_id);
11935             }
11936           return error_mark_node;
11937         }
11938     }
11939
11940   if (DECL_P (expr))
11941     {
11942       check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
11943                                            scope);
11944       /* Remember that there was a reference to this entity.  */
11945       mark_used (expr);
11946     }
11947
11948   if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
11949     {
11950       if (complain & tf_error)
11951         qualified_name_lookup_error (scope,
11952                                      TREE_OPERAND (qualified_id, 1),
11953                                      expr, input_location);
11954       return error_mark_node;
11955     }
11956
11957   if (is_template)
11958     expr = lookup_template_function (expr, template_args);
11959
11960   if (expr == error_mark_node && complain & tf_error)
11961     qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
11962                                  expr, input_location);
11963   else if (TYPE_P (scope))
11964     {
11965       expr = (adjust_result_of_qualified_name_lookup
11966               (expr, scope, current_class_type));
11967       expr = (finish_qualified_id_expr
11968               (scope, expr, done, address_p && PTRMEM_OK_P (qualified_id),
11969                QUALIFIED_NAME_IS_TEMPLATE (qualified_id),
11970                /*template_arg_p=*/false));
11971     }
11972
11973   /* Expressions do not generally have reference type.  */
11974   if (TREE_CODE (expr) != SCOPE_REF
11975       /* However, if we're about to form a pointer-to-member, we just
11976          want the referenced member referenced.  */
11977       && TREE_CODE (expr) != OFFSET_REF)
11978     expr = convert_from_reference (expr);
11979
11980   return expr;
11981 }
11982
11983 /* Like tsubst, but deals with expressions.  This function just replaces
11984    template parms; to finish processing the resultant expression, use
11985    tsubst_copy_and_build or tsubst_expr.  */
11986
11987 static tree
11988 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
11989 {
11990   enum tree_code code;
11991   tree r;
11992
11993   if (t == NULL_TREE || t == error_mark_node || args == NULL_TREE)
11994     return t;
11995
11996   code = TREE_CODE (t);
11997
11998   switch (code)
11999     {
12000     case PARM_DECL:
12001       r = retrieve_local_specialization (t);
12002
12003       if (r == NULL)
12004         {
12005           tree c;
12006
12007           /* We get here for a use of 'this' in an NSDMI.  */
12008           if (DECL_NAME (t) == this_identifier
12009               && at_function_scope_p ()
12010               && DECL_CONSTRUCTOR_P (current_function_decl))
12011             return current_class_ptr;
12012
12013           /* This can happen for a parameter name used later in a function
12014              declaration (such as in a late-specified return type).  Just
12015              make a dummy decl, since it's only used for its type.  */
12016           gcc_assert (cp_unevaluated_operand != 0);
12017           /* We copy T because want to tsubst the PARM_DECL only,
12018              not the following PARM_DECLs that are chained to T.  */
12019           c = copy_node (t);
12020           r = tsubst_decl (c, args, complain);
12021           /* Give it the template pattern as its context; its true context
12022              hasn't been instantiated yet and this is good enough for
12023              mangling.  */
12024           DECL_CONTEXT (r) = DECL_CONTEXT (t);
12025         }
12026       
12027       if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
12028         r = ARGUMENT_PACK_SELECT_ARG (r);
12029       mark_used (r);
12030       return r;
12031
12032     case CONST_DECL:
12033       {
12034         tree enum_type;
12035         tree v;
12036
12037         if (DECL_TEMPLATE_PARM_P (t))
12038           return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
12039         /* There is no need to substitute into namespace-scope
12040            enumerators.  */
12041         if (DECL_NAMESPACE_SCOPE_P (t))
12042           return t;
12043         /* If ARGS is NULL, then T is known to be non-dependent.  */
12044         if (args == NULL_TREE)
12045           return integral_constant_value (t);
12046
12047         /* Unfortunately, we cannot just call lookup_name here.
12048            Consider:
12049
12050              template <int I> int f() {
12051              enum E { a = I };
12052              struct S { void g() { E e = a; } };
12053              };
12054
12055            When we instantiate f<7>::S::g(), say, lookup_name is not
12056            clever enough to find f<7>::a.  */
12057         enum_type
12058           = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl,
12059                               /*entering_scope=*/0);
12060
12061         for (v = TYPE_VALUES (enum_type);
12062              v != NULL_TREE;
12063              v = TREE_CHAIN (v))
12064           if (TREE_PURPOSE (v) == DECL_NAME (t))
12065             return TREE_VALUE (v);
12066
12067           /* We didn't find the name.  That should never happen; if
12068              name-lookup found it during preliminary parsing, we
12069              should find it again here during instantiation.  */
12070         gcc_unreachable ();
12071       }
12072       return t;
12073
12074     case FIELD_DECL:
12075       if (DECL_CONTEXT (t))
12076         {
12077           tree ctx;
12078
12079           ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
12080                                   /*entering_scope=*/1);
12081           if (ctx != DECL_CONTEXT (t))
12082             {
12083               tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
12084               if (!r)
12085                 {
12086                   if (complain & tf_error)
12087                     error ("using invalid field %qD", t);
12088                   return error_mark_node;
12089                 }
12090               return r;
12091             }
12092         }
12093
12094       return t;
12095
12096     case VAR_DECL:
12097     case FUNCTION_DECL:
12098       if ((DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
12099           || local_variable_p (t))
12100         t = tsubst (t, args, complain, in_decl);
12101       mark_used (t);
12102       return t;
12103
12104     case NAMESPACE_DECL:
12105       return t;
12106
12107     case OVERLOAD:
12108       /* An OVERLOAD will always be a non-dependent overload set; an
12109          overload set from function scope will just be represented with an
12110          IDENTIFIER_NODE, and from class scope with a BASELINK.  */
12111       gcc_assert (!uses_template_parms (t));
12112       return t;
12113
12114     case BASELINK:
12115       return tsubst_baselink (t, current_class_type, args, complain, in_decl);
12116
12117     case TEMPLATE_DECL:
12118       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
12119         return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
12120                        args, complain, in_decl);
12121       else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
12122         return tsubst (t, args, complain, in_decl);
12123       else if (DECL_CLASS_SCOPE_P (t)
12124                && uses_template_parms (DECL_CONTEXT (t)))
12125         {
12126           /* Template template argument like the following example need
12127              special treatment:
12128
12129                template <template <class> class TT> struct C {};
12130                template <class T> struct D {
12131                  template <class U> struct E {};
12132                  C<E> c;                                // #1
12133                };
12134                D<int> d;                                // #2
12135
12136              We are processing the template argument `E' in #1 for
12137              the template instantiation #2.  Originally, `E' is a
12138              TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT.  Now we
12139              have to substitute this with one having context `D<int>'.  */
12140
12141           tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
12142           return lookup_field (context, DECL_NAME(t), 0, false);
12143         }
12144       else
12145         /* Ordinary template template argument.  */
12146         return t;
12147
12148     case CAST_EXPR:
12149     case REINTERPRET_CAST_EXPR:
12150     case CONST_CAST_EXPR:
12151     case STATIC_CAST_EXPR:
12152     case DYNAMIC_CAST_EXPR:
12153     case IMPLICIT_CONV_EXPR:
12154     case CONVERT_EXPR:
12155     case NOP_EXPR:
12156       return build1
12157         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
12158          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
12159
12160     case SIZEOF_EXPR:
12161       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
12162         {
12163
12164           tree expanded;
12165           int len = 0;
12166
12167           ++cp_unevaluated_operand;
12168           ++c_inhibit_evaluation_warnings;
12169           /* We only want to compute the number of arguments.  */
12170           expanded = tsubst_pack_expansion (TREE_OPERAND (t, 0), args,
12171                                             complain, in_decl);
12172           --cp_unevaluated_operand;
12173           --c_inhibit_evaluation_warnings;
12174
12175           if (TREE_CODE (expanded) == TREE_VEC)
12176             len = TREE_VEC_LENGTH (expanded);
12177
12178           if (expanded == error_mark_node)
12179             return error_mark_node;
12180           else if (PACK_EXPANSION_P (expanded)
12181                    || (TREE_CODE (expanded) == TREE_VEC
12182                        && len > 0
12183                        && PACK_EXPANSION_P (TREE_VEC_ELT (expanded, len-1))))
12184             {
12185               if (TREE_CODE (expanded) == TREE_VEC)
12186                 expanded = TREE_VEC_ELT (expanded, len - 1);
12187
12188               if (TYPE_P (expanded))
12189                 return cxx_sizeof_or_alignof_type (expanded, SIZEOF_EXPR, 
12190                                                    complain & tf_error);
12191               else
12192                 return cxx_sizeof_or_alignof_expr (expanded, SIZEOF_EXPR,
12193                                                    complain & tf_error);
12194             }
12195           else
12196             return build_int_cst (size_type_node, len);
12197         }
12198       /* Fall through */
12199
12200     case INDIRECT_REF:
12201     case NEGATE_EXPR:
12202     case TRUTH_NOT_EXPR:
12203     case BIT_NOT_EXPR:
12204     case ADDR_EXPR:
12205     case UNARY_PLUS_EXPR:      /* Unary + */
12206     case ALIGNOF_EXPR:
12207     case AT_ENCODE_EXPR:
12208     case ARROW_EXPR:
12209     case THROW_EXPR:
12210     case TYPEID_EXPR:
12211     case REALPART_EXPR:
12212     case IMAGPART_EXPR:
12213       return build1
12214         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
12215          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
12216
12217     case COMPONENT_REF:
12218       {
12219         tree object;
12220         tree name;
12221
12222         object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
12223         name = TREE_OPERAND (t, 1);
12224         if (TREE_CODE (name) == BIT_NOT_EXPR)
12225           {
12226             name = tsubst_copy (TREE_OPERAND (name, 0), args,
12227                                 complain, in_decl);
12228             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
12229           }
12230         else if (TREE_CODE (name) == SCOPE_REF
12231                  && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
12232           {
12233             tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
12234                                      complain, in_decl);
12235             name = TREE_OPERAND (name, 1);
12236             name = tsubst_copy (TREE_OPERAND (name, 0), args,
12237                                 complain, in_decl);
12238             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
12239             name = build_qualified_name (/*type=*/NULL_TREE,
12240                                          base, name,
12241                                          /*template_p=*/false);
12242           }
12243         else if (BASELINK_P (name))
12244           name = tsubst_baselink (name,
12245                                   non_reference (TREE_TYPE (object)),
12246                                   args, complain,
12247                                   in_decl);
12248         else
12249           name = tsubst_copy (name, args, complain, in_decl);
12250         return build_nt (COMPONENT_REF, object, name, NULL_TREE);
12251       }
12252
12253     case PLUS_EXPR:
12254     case MINUS_EXPR:
12255     case MULT_EXPR:
12256     case TRUNC_DIV_EXPR:
12257     case CEIL_DIV_EXPR:
12258     case FLOOR_DIV_EXPR:
12259     case ROUND_DIV_EXPR:
12260     case EXACT_DIV_EXPR:
12261     case BIT_AND_EXPR:
12262     case BIT_IOR_EXPR:
12263     case BIT_XOR_EXPR:
12264     case TRUNC_MOD_EXPR:
12265     case FLOOR_MOD_EXPR:
12266     case TRUTH_ANDIF_EXPR:
12267     case TRUTH_ORIF_EXPR:
12268     case TRUTH_AND_EXPR:
12269     case TRUTH_OR_EXPR:
12270     case RSHIFT_EXPR:
12271     case LSHIFT_EXPR:
12272     case RROTATE_EXPR:
12273     case LROTATE_EXPR:
12274     case EQ_EXPR:
12275     case NE_EXPR:
12276     case MAX_EXPR:
12277     case MIN_EXPR:
12278     case LE_EXPR:
12279     case GE_EXPR:
12280     case LT_EXPR:
12281     case GT_EXPR:
12282     case COMPOUND_EXPR:
12283     case DOTSTAR_EXPR:
12284     case MEMBER_REF:
12285     case PREDECREMENT_EXPR:
12286     case PREINCREMENT_EXPR:
12287     case POSTDECREMENT_EXPR:
12288     case POSTINCREMENT_EXPR:
12289       return build_nt
12290         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12291          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
12292
12293     case SCOPE_REF:
12294       return build_qualified_name (/*type=*/NULL_TREE,
12295                                    tsubst_copy (TREE_OPERAND (t, 0),
12296                                                 args, complain, in_decl),
12297                                    tsubst_copy (TREE_OPERAND (t, 1),
12298                                                 args, complain, in_decl),
12299                                    QUALIFIED_NAME_IS_TEMPLATE (t));
12300
12301     case ARRAY_REF:
12302       return build_nt
12303         (ARRAY_REF,
12304          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12305          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
12306          NULL_TREE, NULL_TREE);
12307
12308     case CALL_EXPR:
12309       {
12310         int n = VL_EXP_OPERAND_LENGTH (t);
12311         tree result = build_vl_exp (CALL_EXPR, n);
12312         int i;
12313         for (i = 0; i < n; i++)
12314           TREE_OPERAND (t, i) = tsubst_copy (TREE_OPERAND (t, i), args,
12315                                              complain, in_decl);
12316         return result;
12317       }
12318
12319     case COND_EXPR:
12320     case MODOP_EXPR:
12321     case PSEUDO_DTOR_EXPR:
12322       {
12323         r = build_nt
12324           (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12325            tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
12326            tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
12327         TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
12328         return r;
12329       }
12330
12331     case NEW_EXPR:
12332       {
12333         r = build_nt
12334         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12335          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
12336          tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
12337         NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
12338         return r;
12339       }
12340
12341     case DELETE_EXPR:
12342       {
12343         r = 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         DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
12347         DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
12348         return r;
12349       }
12350
12351     case TEMPLATE_ID_EXPR:
12352       {
12353         /* Substituted template arguments */
12354         tree fn = TREE_OPERAND (t, 0);
12355         tree targs = TREE_OPERAND (t, 1);
12356
12357         fn = tsubst_copy (fn, args, complain, in_decl);
12358         if (targs)
12359           targs = tsubst_template_args (targs, args, complain, in_decl);
12360
12361         return lookup_template_function (fn, targs);
12362       }
12363
12364     case TREE_LIST:
12365       {
12366         tree purpose, value, chain;
12367
12368         if (t == void_list_node)
12369           return t;
12370
12371         purpose = TREE_PURPOSE (t);
12372         if (purpose)
12373           purpose = tsubst_copy (purpose, args, complain, in_decl);
12374         value = TREE_VALUE (t);
12375         if (value)
12376           value = tsubst_copy (value, args, complain, in_decl);
12377         chain = TREE_CHAIN (t);
12378         if (chain && chain != void_type_node)
12379           chain = tsubst_copy (chain, args, complain, in_decl);
12380         if (purpose == TREE_PURPOSE (t)
12381             && value == TREE_VALUE (t)
12382             && chain == TREE_CHAIN (t))
12383           return t;
12384         return tree_cons (purpose, value, chain);
12385       }
12386
12387     case RECORD_TYPE:
12388     case UNION_TYPE:
12389     case ENUMERAL_TYPE:
12390     case INTEGER_TYPE:
12391     case TEMPLATE_TYPE_PARM:
12392     case TEMPLATE_TEMPLATE_PARM:
12393     case BOUND_TEMPLATE_TEMPLATE_PARM:
12394     case TEMPLATE_PARM_INDEX:
12395     case POINTER_TYPE:
12396     case REFERENCE_TYPE:
12397     case OFFSET_TYPE:
12398     case FUNCTION_TYPE:
12399     case METHOD_TYPE:
12400     case ARRAY_TYPE:
12401     case TYPENAME_TYPE:
12402     case UNBOUND_CLASS_TEMPLATE:
12403     case TYPEOF_TYPE:
12404     case DECLTYPE_TYPE:
12405     case TYPE_DECL:
12406       return tsubst (t, args, complain, in_decl);
12407
12408     case IDENTIFIER_NODE:
12409       if (IDENTIFIER_TYPENAME_P (t))
12410         {
12411           tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
12412           return mangle_conv_op_name_for_type (new_type);
12413         }
12414       else
12415         return t;
12416
12417     case CONSTRUCTOR:
12418       /* This is handled by tsubst_copy_and_build.  */
12419       gcc_unreachable ();
12420
12421     case VA_ARG_EXPR:
12422       return build_x_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
12423                                           in_decl),
12424                              tsubst (TREE_TYPE (t), args, complain, in_decl));
12425
12426     case CLEANUP_POINT_EXPR:
12427       /* We shouldn't have built any of these during initial template
12428          generation.  Instead, they should be built during instantiation
12429          in response to the saved STMT_IS_FULL_EXPR_P setting.  */
12430       gcc_unreachable ();
12431
12432     case OFFSET_REF:
12433       r = build2
12434         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
12435          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12436          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
12437       PTRMEM_OK_P (r) = PTRMEM_OK_P (t);
12438       mark_used (TREE_OPERAND (r, 1));
12439       return r;
12440
12441     case EXPR_PACK_EXPANSION:
12442       error ("invalid use of pack expansion expression");
12443       return error_mark_node;
12444
12445     case NONTYPE_ARGUMENT_PACK:
12446       error ("use %<...%> to expand argument pack");
12447       return error_mark_node;
12448
12449     case INTEGER_CST:
12450     case REAL_CST:
12451     case STRING_CST:
12452     case COMPLEX_CST:
12453       {
12454         /* Instantiate any typedefs in the type.  */
12455         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
12456         r = fold_convert (type, t);
12457         gcc_assert (TREE_CODE (r) == code);
12458         return r;
12459       }
12460
12461     case PTRMEM_CST:
12462       /* These can sometimes show up in a partial instantiation, but never
12463          involve template parms.  */
12464       gcc_assert (!uses_template_parms (t));
12465       return t;
12466
12467     default:
12468       /* We shouldn't get here, but keep going if !ENABLE_CHECKING.  */
12469       gcc_checking_assert (false);
12470       return t;
12471     }
12472 }
12473
12474 /* Like tsubst_copy, but specifically for OpenMP clauses.  */
12475
12476 static tree
12477 tsubst_omp_clauses (tree clauses, tree args, tsubst_flags_t complain,
12478                     tree in_decl)
12479 {
12480   tree new_clauses = NULL, nc, oc;
12481
12482   for (oc = clauses; oc ; oc = OMP_CLAUSE_CHAIN (oc))
12483     {
12484       nc = copy_node (oc);
12485       OMP_CLAUSE_CHAIN (nc) = new_clauses;
12486       new_clauses = nc;
12487
12488       switch (OMP_CLAUSE_CODE (nc))
12489         {
12490         case OMP_CLAUSE_LASTPRIVATE:
12491           if (OMP_CLAUSE_LASTPRIVATE_STMT (oc))
12492             {
12493               OMP_CLAUSE_LASTPRIVATE_STMT (nc) = push_stmt_list ();
12494               tsubst_expr (OMP_CLAUSE_LASTPRIVATE_STMT (oc), args, complain,
12495                            in_decl, /*integral_constant_expression_p=*/false);
12496               OMP_CLAUSE_LASTPRIVATE_STMT (nc)
12497                 = pop_stmt_list (OMP_CLAUSE_LASTPRIVATE_STMT (nc));
12498             }
12499           /* FALLTHRU */
12500         case OMP_CLAUSE_PRIVATE:
12501         case OMP_CLAUSE_SHARED:
12502         case OMP_CLAUSE_FIRSTPRIVATE:
12503         case OMP_CLAUSE_REDUCTION:
12504         case OMP_CLAUSE_COPYIN:
12505         case OMP_CLAUSE_COPYPRIVATE:
12506         case OMP_CLAUSE_IF:
12507         case OMP_CLAUSE_NUM_THREADS:
12508         case OMP_CLAUSE_SCHEDULE:
12509         case OMP_CLAUSE_COLLAPSE:
12510         case OMP_CLAUSE_FINAL:
12511           OMP_CLAUSE_OPERAND (nc, 0)
12512             = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain, 
12513                            in_decl, /*integral_constant_expression_p=*/false);
12514           break;
12515         case OMP_CLAUSE_NOWAIT:
12516         case OMP_CLAUSE_ORDERED:
12517         case OMP_CLAUSE_DEFAULT:
12518         case OMP_CLAUSE_UNTIED:
12519         case OMP_CLAUSE_MERGEABLE:
12520           break;
12521         default:
12522           gcc_unreachable ();
12523         }
12524     }
12525
12526   return finish_omp_clauses (nreverse (new_clauses));
12527 }
12528
12529 /* Like tsubst_copy_and_build, but unshare TREE_LIST nodes.  */
12530
12531 static tree
12532 tsubst_copy_asm_operands (tree t, tree args, tsubst_flags_t complain,
12533                           tree in_decl)
12534 {
12535 #define RECUR(t) tsubst_copy_asm_operands (t, args, complain, in_decl)
12536
12537   tree purpose, value, chain;
12538
12539   if (t == NULL)
12540     return t;
12541
12542   if (TREE_CODE (t) != TREE_LIST)
12543     return tsubst_copy_and_build (t, args, complain, in_decl,
12544                                   /*function_p=*/false,
12545                                   /*integral_constant_expression_p=*/false);
12546
12547   if (t == void_list_node)
12548     return t;
12549
12550   purpose = TREE_PURPOSE (t);
12551   if (purpose)
12552     purpose = RECUR (purpose);
12553   value = TREE_VALUE (t);
12554   if (value && TREE_CODE (value) != LABEL_DECL)
12555     value = RECUR (value);
12556   chain = TREE_CHAIN (t);
12557   if (chain && chain != void_type_node)
12558     chain = RECUR (chain);
12559   return tree_cons (purpose, value, chain);
12560 #undef RECUR
12561 }
12562
12563 /* Substitute one OMP_FOR iterator.  */
12564
12565 static void
12566 tsubst_omp_for_iterator (tree t, int i, tree declv, tree initv,
12567                          tree condv, tree incrv, tree *clauses,
12568                          tree args, tsubst_flags_t complain, tree in_decl,
12569                          bool integral_constant_expression_p)
12570 {
12571 #define RECUR(NODE)                             \
12572   tsubst_expr ((NODE), args, complain, in_decl, \
12573                integral_constant_expression_p)
12574   tree decl, init, cond, incr, auto_node;
12575
12576   init = TREE_VEC_ELT (OMP_FOR_INIT (t), i);
12577   gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
12578   decl = RECUR (TREE_OPERAND (init, 0));
12579   init = TREE_OPERAND (init, 1);
12580   auto_node = type_uses_auto (TREE_TYPE (decl));
12581   if (auto_node && init)
12582     {
12583       tree init_expr = init;
12584       if (TREE_CODE (init_expr) == DECL_EXPR)
12585         init_expr = DECL_INITIAL (DECL_EXPR_DECL (init_expr));
12586       init_expr = RECUR (init_expr);
12587       TREE_TYPE (decl)
12588         = do_auto_deduction (TREE_TYPE (decl), init_expr, auto_node);
12589     }
12590   gcc_assert (!type_dependent_expression_p (decl));
12591
12592   if (!CLASS_TYPE_P (TREE_TYPE (decl)))
12593     {
12594       cond = RECUR (TREE_VEC_ELT (OMP_FOR_COND (t), i));
12595       incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
12596       if (TREE_CODE (incr) == MODIFY_EXPR)
12597         incr = build_x_modify_expr (RECUR (TREE_OPERAND (incr, 0)), NOP_EXPR,
12598                                     RECUR (TREE_OPERAND (incr, 1)),
12599                                     complain);
12600       else
12601         incr = RECUR (incr);
12602       TREE_VEC_ELT (declv, i) = decl;
12603       TREE_VEC_ELT (initv, i) = init;
12604       TREE_VEC_ELT (condv, i) = cond;
12605       TREE_VEC_ELT (incrv, i) = incr;
12606       return;
12607     }
12608
12609   if (init && TREE_CODE (init) != DECL_EXPR)
12610     {
12611       tree c;
12612       for (c = *clauses; c ; c = OMP_CLAUSE_CHAIN (c))
12613         {
12614           if ((OMP_CLAUSE_CODE (c) == OMP_CLAUSE_PRIVATE
12615                || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE)
12616               && OMP_CLAUSE_DECL (c) == decl)
12617             break;
12618           else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FIRSTPRIVATE
12619                    && OMP_CLAUSE_DECL (c) == decl)
12620             error ("iteration variable %qD should not be firstprivate", decl);
12621           else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION
12622                    && OMP_CLAUSE_DECL (c) == decl)
12623             error ("iteration variable %qD should not be reduction", decl);
12624         }
12625       if (c == NULL)
12626         {
12627           c = build_omp_clause (input_location, OMP_CLAUSE_PRIVATE);
12628           OMP_CLAUSE_DECL (c) = decl;
12629           c = finish_omp_clauses (c);
12630           if (c)
12631             {
12632               OMP_CLAUSE_CHAIN (c) = *clauses;
12633               *clauses = c;
12634             }
12635         }
12636     }
12637   cond = TREE_VEC_ELT (OMP_FOR_COND (t), i);
12638   if (COMPARISON_CLASS_P (cond))
12639     cond = build2 (TREE_CODE (cond), boolean_type_node,
12640                    RECUR (TREE_OPERAND (cond, 0)),
12641                    RECUR (TREE_OPERAND (cond, 1)));
12642   else
12643     cond = RECUR (cond);
12644   incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
12645   switch (TREE_CODE (incr))
12646     {
12647     case PREINCREMENT_EXPR:
12648     case PREDECREMENT_EXPR:
12649     case POSTINCREMENT_EXPR:
12650     case POSTDECREMENT_EXPR:
12651       incr = build2 (TREE_CODE (incr), TREE_TYPE (decl),
12652                      RECUR (TREE_OPERAND (incr, 0)), NULL_TREE);
12653       break;
12654     case MODIFY_EXPR:
12655       if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
12656           || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
12657         {
12658           tree rhs = TREE_OPERAND (incr, 1);
12659           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl),
12660                          RECUR (TREE_OPERAND (incr, 0)),
12661                          build2 (TREE_CODE (rhs), TREE_TYPE (decl),
12662                                  RECUR (TREE_OPERAND (rhs, 0)),
12663                                  RECUR (TREE_OPERAND (rhs, 1))));
12664         }
12665       else
12666         incr = RECUR (incr);
12667       break;
12668     case MODOP_EXPR:
12669       if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
12670           || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
12671         {
12672           tree lhs = RECUR (TREE_OPERAND (incr, 0));
12673           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl), lhs,
12674                          build2 (TREE_CODE (TREE_OPERAND (incr, 1)),
12675                                  TREE_TYPE (decl), lhs,
12676                                  RECUR (TREE_OPERAND (incr, 2))));
12677         }
12678       else if (TREE_CODE (TREE_OPERAND (incr, 1)) == NOP_EXPR
12679                && (TREE_CODE (TREE_OPERAND (incr, 2)) == PLUS_EXPR
12680                    || (TREE_CODE (TREE_OPERAND (incr, 2)) == MINUS_EXPR)))
12681         {
12682           tree rhs = TREE_OPERAND (incr, 2);
12683           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl),
12684                          RECUR (TREE_OPERAND (incr, 0)),
12685                          build2 (TREE_CODE (rhs), TREE_TYPE (decl),
12686                                  RECUR (TREE_OPERAND (rhs, 0)),
12687                                  RECUR (TREE_OPERAND (rhs, 1))));
12688         }
12689       else
12690         incr = RECUR (incr);
12691       break;
12692     default:
12693       incr = RECUR (incr);
12694       break;
12695     }
12696
12697   TREE_VEC_ELT (declv, i) = decl;
12698   TREE_VEC_ELT (initv, i) = init;
12699   TREE_VEC_ELT (condv, i) = cond;
12700   TREE_VEC_ELT (incrv, i) = incr;
12701 #undef RECUR
12702 }
12703
12704 /* Like tsubst_copy for expressions, etc. but also does semantic
12705    processing.  */
12706
12707 static tree
12708 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
12709              bool integral_constant_expression_p)
12710 {
12711 #define RECUR(NODE)                             \
12712   tsubst_expr ((NODE), args, complain, in_decl, \
12713                integral_constant_expression_p)
12714
12715   tree stmt, tmp;
12716
12717   if (t == NULL_TREE || t == error_mark_node)
12718     return t;
12719
12720   if (EXPR_HAS_LOCATION (t))
12721     input_location = EXPR_LOCATION (t);
12722   if (STATEMENT_CODE_P (TREE_CODE (t)))
12723     current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
12724
12725   switch (TREE_CODE (t))
12726     {
12727     case STATEMENT_LIST:
12728       {
12729         tree_stmt_iterator i;
12730         for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
12731           RECUR (tsi_stmt (i));
12732         break;
12733       }
12734
12735     case CTOR_INITIALIZER:
12736       finish_mem_initializers (tsubst_initializer_list
12737                                (TREE_OPERAND (t, 0), args));
12738       break;
12739
12740     case RETURN_EXPR:
12741       finish_return_stmt (RECUR (TREE_OPERAND (t, 0)));
12742       break;
12743
12744     case EXPR_STMT:
12745       tmp = RECUR (EXPR_STMT_EXPR (t));
12746       if (EXPR_STMT_STMT_EXPR_RESULT (t))
12747         finish_stmt_expr_expr (tmp, cur_stmt_expr);
12748       else
12749         finish_expr_stmt (tmp);
12750       break;
12751
12752     case USING_STMT:
12753       do_using_directive (USING_STMT_NAMESPACE (t));
12754       break;
12755
12756     case DECL_EXPR:
12757       {
12758         tree decl, pattern_decl;
12759         tree init;
12760
12761         pattern_decl = decl = DECL_EXPR_DECL (t);
12762         if (TREE_CODE (decl) == LABEL_DECL)
12763           finish_label_decl (DECL_NAME (decl));
12764         else if (TREE_CODE (decl) == USING_DECL)
12765           {
12766             tree scope = USING_DECL_SCOPE (decl);
12767             tree name = DECL_NAME (decl);
12768             tree decl;
12769
12770             scope = tsubst (scope, args, complain, in_decl);
12771             decl = lookup_qualified_name (scope, name,
12772                                           /*is_type_p=*/false,
12773                                           /*complain=*/false);
12774             if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
12775               qualified_name_lookup_error (scope, name, decl, input_location);
12776             else
12777               do_local_using_decl (decl, scope, name);
12778           }
12779         else
12780           {
12781             init = DECL_INITIAL (decl);
12782             decl = tsubst (decl, args, complain, in_decl);
12783             if (decl != error_mark_node)
12784               {
12785                 /* By marking the declaration as instantiated, we avoid
12786                    trying to instantiate it.  Since instantiate_decl can't
12787                    handle local variables, and since we've already done
12788                    all that needs to be done, that's the right thing to
12789                    do.  */
12790                 if (TREE_CODE (decl) == VAR_DECL)
12791                   DECL_TEMPLATE_INSTANTIATED (decl) = 1;
12792                 if (TREE_CODE (decl) == VAR_DECL
12793                     && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
12794                   /* Anonymous aggregates are a special case.  */
12795                   finish_anon_union (decl);
12796                 else
12797                   {
12798                     int const_init = false;
12799                     maybe_push_decl (decl);
12800                     if (TREE_CODE (decl) == VAR_DECL
12801                         && DECL_PRETTY_FUNCTION_P (decl))
12802                       {
12803                         /* For __PRETTY_FUNCTION__ we have to adjust the
12804                            initializer.  */
12805                         const char *const name
12806                           = cxx_printable_name (current_function_decl, 2);
12807                         init = cp_fname_init (name, &TREE_TYPE (decl));
12808                       }
12809                     else
12810                       {
12811                         tree t = RECUR (init);
12812
12813                         if (init && !t)
12814                           {
12815                             /* If we had an initializer but it
12816                                instantiated to nothing,
12817                                value-initialize the object.  This will
12818                                only occur when the initializer was a
12819                                pack expansion where the parameter packs
12820                                used in that expansion were of length
12821                                zero.  */
12822                             init = build_value_init (TREE_TYPE (decl),
12823                                                      complain);
12824                             if (TREE_CODE (init) == AGGR_INIT_EXPR)
12825                               init = get_target_expr_sfinae (init, complain);
12826                           }
12827                         else
12828                           init = t;
12829                       }
12830
12831                     if (TREE_CODE (decl) == VAR_DECL)
12832                       const_init = (DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P
12833                                     (pattern_decl));
12834                     cp_finish_decl (decl, init, const_init, NULL_TREE, 0);
12835                   }
12836               }
12837           }
12838
12839         /* A DECL_EXPR can also be used as an expression, in the condition
12840            clause of an if/for/while construct.  */
12841         return decl;
12842       }
12843
12844     case FOR_STMT:
12845       stmt = begin_for_stmt (NULL_TREE, NULL_TREE);
12846       RECUR (FOR_INIT_STMT (t));
12847       finish_for_init_stmt (stmt);
12848       tmp = RECUR (FOR_COND (t));
12849       finish_for_cond (tmp, stmt);
12850       tmp = RECUR (FOR_EXPR (t));
12851       finish_for_expr (tmp, stmt);
12852       RECUR (FOR_BODY (t));
12853       finish_for_stmt (stmt);
12854       break;
12855
12856     case RANGE_FOR_STMT:
12857       {
12858         tree decl, expr;
12859         stmt = begin_for_stmt (NULL_TREE, NULL_TREE);
12860         decl = RANGE_FOR_DECL (t);
12861         decl = tsubst (decl, args, complain, in_decl);
12862         maybe_push_decl (decl);
12863         expr = RECUR (RANGE_FOR_EXPR (t));
12864         stmt = cp_convert_range_for (stmt, decl, expr);
12865         RECUR (RANGE_FOR_BODY (t));
12866         finish_for_stmt (stmt);
12867       }
12868       break;
12869
12870     case WHILE_STMT:
12871       stmt = begin_while_stmt ();
12872       tmp = RECUR (WHILE_COND (t));
12873       finish_while_stmt_cond (tmp, stmt);
12874       RECUR (WHILE_BODY (t));
12875       finish_while_stmt (stmt);
12876       break;
12877
12878     case DO_STMT:
12879       stmt = begin_do_stmt ();
12880       RECUR (DO_BODY (t));
12881       finish_do_body (stmt);
12882       tmp = RECUR (DO_COND (t));
12883       finish_do_stmt (tmp, stmt);
12884       break;
12885
12886     case IF_STMT:
12887       stmt = begin_if_stmt ();
12888       tmp = RECUR (IF_COND (t));
12889       finish_if_stmt_cond (tmp, stmt);
12890       RECUR (THEN_CLAUSE (t));
12891       finish_then_clause (stmt);
12892
12893       if (ELSE_CLAUSE (t))
12894         {
12895           begin_else_clause (stmt);
12896           RECUR (ELSE_CLAUSE (t));
12897           finish_else_clause (stmt);
12898         }
12899
12900       finish_if_stmt (stmt);
12901       break;
12902
12903     case BIND_EXPR:
12904       if (BIND_EXPR_BODY_BLOCK (t))
12905         stmt = begin_function_body ();
12906       else
12907         stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
12908                                     ? BCS_TRY_BLOCK : 0);
12909
12910       RECUR (BIND_EXPR_BODY (t));
12911
12912       if (BIND_EXPR_BODY_BLOCK (t))
12913         finish_function_body (stmt);
12914       else
12915         finish_compound_stmt (stmt);
12916       break;
12917
12918     case BREAK_STMT:
12919       finish_break_stmt ();
12920       break;
12921
12922     case CONTINUE_STMT:
12923       finish_continue_stmt ();
12924       break;
12925
12926     case SWITCH_STMT:
12927       stmt = begin_switch_stmt ();
12928       tmp = RECUR (SWITCH_STMT_COND (t));
12929       finish_switch_cond (tmp, stmt);
12930       RECUR (SWITCH_STMT_BODY (t));
12931       finish_switch_stmt (stmt);
12932       break;
12933
12934     case CASE_LABEL_EXPR:
12935       finish_case_label (EXPR_LOCATION (t),
12936                          RECUR (CASE_LOW (t)),
12937                          RECUR (CASE_HIGH (t)));
12938       break;
12939
12940     case LABEL_EXPR:
12941       {
12942         tree decl = LABEL_EXPR_LABEL (t);
12943         tree label;
12944
12945         label = finish_label_stmt (DECL_NAME (decl));
12946         if (DECL_ATTRIBUTES (decl) != NULL_TREE)
12947           cplus_decl_attributes (&label, DECL_ATTRIBUTES (decl), 0);
12948       }
12949       break;
12950
12951     case GOTO_EXPR:
12952       tmp = GOTO_DESTINATION (t);
12953       if (TREE_CODE (tmp) != LABEL_DECL)
12954         /* Computed goto's must be tsubst'd into.  On the other hand,
12955            non-computed gotos must not be; the identifier in question
12956            will have no binding.  */
12957         tmp = RECUR (tmp);
12958       else
12959         tmp = DECL_NAME (tmp);
12960       finish_goto_stmt (tmp);
12961       break;
12962
12963     case ASM_EXPR:
12964       tmp = finish_asm_stmt
12965         (ASM_VOLATILE_P (t),
12966          RECUR (ASM_STRING (t)),
12967          tsubst_copy_asm_operands (ASM_OUTPUTS (t), args, complain, in_decl),
12968          tsubst_copy_asm_operands (ASM_INPUTS (t), args, complain, in_decl),
12969          tsubst_copy_asm_operands (ASM_CLOBBERS (t), args, complain, in_decl),
12970          tsubst_copy_asm_operands (ASM_LABELS (t), args, complain, in_decl));
12971       {
12972         tree asm_expr = tmp;
12973         if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
12974           asm_expr = TREE_OPERAND (asm_expr, 0);
12975         ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
12976       }
12977       break;
12978
12979     case TRY_BLOCK:
12980       if (CLEANUP_P (t))
12981         {
12982           stmt = begin_try_block ();
12983           RECUR (TRY_STMTS (t));
12984           finish_cleanup_try_block (stmt);
12985           finish_cleanup (RECUR (TRY_HANDLERS (t)), stmt);
12986         }
12987       else
12988         {
12989           tree compound_stmt = NULL_TREE;
12990
12991           if (FN_TRY_BLOCK_P (t))
12992             stmt = begin_function_try_block (&compound_stmt);
12993           else
12994             stmt = begin_try_block ();
12995
12996           RECUR (TRY_STMTS (t));
12997
12998           if (FN_TRY_BLOCK_P (t))
12999             finish_function_try_block (stmt);
13000           else
13001             finish_try_block (stmt);
13002
13003           RECUR (TRY_HANDLERS (t));
13004           if (FN_TRY_BLOCK_P (t))
13005             finish_function_handler_sequence (stmt, compound_stmt);
13006           else
13007             finish_handler_sequence (stmt);
13008         }
13009       break;
13010
13011     case HANDLER:
13012       {
13013         tree decl = HANDLER_PARMS (t);
13014
13015         if (decl)
13016           {
13017             decl = tsubst (decl, args, complain, in_decl);
13018             /* Prevent instantiate_decl from trying to instantiate
13019                this variable.  We've already done all that needs to be
13020                done.  */
13021             if (decl != error_mark_node)
13022               DECL_TEMPLATE_INSTANTIATED (decl) = 1;
13023           }
13024         stmt = begin_handler ();
13025         finish_handler_parms (decl, stmt);
13026         RECUR (HANDLER_BODY (t));
13027         finish_handler (stmt);
13028       }
13029       break;
13030
13031     case TAG_DEFN:
13032       tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
13033       break;
13034
13035     case STATIC_ASSERT:
13036       {
13037         tree condition = 
13038           tsubst_expr (STATIC_ASSERT_CONDITION (t), 
13039                        args,
13040                        complain, in_decl,
13041                        /*integral_constant_expression_p=*/true);
13042         finish_static_assert (condition,
13043                               STATIC_ASSERT_MESSAGE (t),
13044                               STATIC_ASSERT_SOURCE_LOCATION (t),
13045                               /*member_p=*/false);
13046       }
13047       break;
13048
13049     case OMP_PARALLEL:
13050       tmp = tsubst_omp_clauses (OMP_PARALLEL_CLAUSES (t),
13051                                 args, complain, in_decl);
13052       stmt = begin_omp_parallel ();
13053       RECUR (OMP_PARALLEL_BODY (t));
13054       OMP_PARALLEL_COMBINED (finish_omp_parallel (tmp, stmt))
13055         = OMP_PARALLEL_COMBINED (t);
13056       break;
13057
13058     case OMP_TASK:
13059       tmp = tsubst_omp_clauses (OMP_TASK_CLAUSES (t),
13060                                 args, complain, in_decl);
13061       stmt = begin_omp_task ();
13062       RECUR (OMP_TASK_BODY (t));
13063       finish_omp_task (tmp, stmt);
13064       break;
13065
13066     case OMP_FOR:
13067       {
13068         tree clauses, body, pre_body;
13069         tree declv, initv, condv, incrv;
13070         int i;
13071
13072         clauses = tsubst_omp_clauses (OMP_FOR_CLAUSES (t),
13073                                       args, complain, in_decl);
13074         declv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
13075         initv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
13076         condv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
13077         incrv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
13078
13079         for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INIT (t)); i++)
13080           tsubst_omp_for_iterator (t, i, declv, initv, condv, incrv,
13081                                    &clauses, args, complain, in_decl,
13082                                    integral_constant_expression_p);
13083
13084         stmt = begin_omp_structured_block ();
13085
13086         for (i = 0; i < TREE_VEC_LENGTH (initv); i++)
13087           if (TREE_VEC_ELT (initv, i) == NULL
13088               || TREE_CODE (TREE_VEC_ELT (initv, i)) != DECL_EXPR)
13089             TREE_VEC_ELT (initv, i) = RECUR (TREE_VEC_ELT (initv, i));
13090           else if (CLASS_TYPE_P (TREE_TYPE (TREE_VEC_ELT (initv, i))))
13091             {
13092               tree init = RECUR (TREE_VEC_ELT (initv, i));
13093               gcc_assert (init == TREE_VEC_ELT (declv, i));
13094               TREE_VEC_ELT (initv, i) = NULL_TREE;
13095             }
13096           else
13097             {
13098               tree decl_expr = TREE_VEC_ELT (initv, i);
13099               tree init = DECL_INITIAL (DECL_EXPR_DECL (decl_expr));
13100               gcc_assert (init != NULL);
13101               TREE_VEC_ELT (initv, i) = RECUR (init);
13102               DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = NULL;
13103               RECUR (decl_expr);
13104               DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = init;
13105             }
13106
13107         pre_body = push_stmt_list ();
13108         RECUR (OMP_FOR_PRE_BODY (t));
13109         pre_body = pop_stmt_list (pre_body);
13110
13111         body = push_stmt_list ();
13112         RECUR (OMP_FOR_BODY (t));
13113         body = pop_stmt_list (body);
13114
13115         t = finish_omp_for (EXPR_LOCATION (t), declv, initv, condv, incrv,
13116                             body, pre_body, clauses);
13117
13118         add_stmt (finish_omp_structured_block (stmt));
13119       }
13120       break;
13121
13122     case OMP_SECTIONS:
13123     case OMP_SINGLE:
13124       tmp = tsubst_omp_clauses (OMP_CLAUSES (t), args, complain, in_decl);
13125       stmt = push_stmt_list ();
13126       RECUR (OMP_BODY (t));
13127       stmt = pop_stmt_list (stmt);
13128
13129       t = copy_node (t);
13130       OMP_BODY (t) = stmt;
13131       OMP_CLAUSES (t) = tmp;
13132       add_stmt (t);
13133       break;
13134
13135     case OMP_SECTION:
13136     case OMP_CRITICAL:
13137     case OMP_MASTER:
13138     case OMP_ORDERED:
13139       stmt = push_stmt_list ();
13140       RECUR (OMP_BODY (t));
13141       stmt = pop_stmt_list (stmt);
13142
13143       t = copy_node (t);
13144       OMP_BODY (t) = stmt;
13145       add_stmt (t);
13146       break;
13147
13148     case OMP_ATOMIC:
13149       gcc_assert (OMP_ATOMIC_DEPENDENT_P (t));
13150       if (TREE_CODE (TREE_OPERAND (t, 1)) != MODIFY_EXPR)
13151         {
13152           tree op1 = TREE_OPERAND (t, 1);
13153           tree rhs1 = NULL_TREE;
13154           tree lhs, rhs;
13155           if (TREE_CODE (op1) == COMPOUND_EXPR)
13156             {
13157               rhs1 = RECUR (TREE_OPERAND (op1, 0));
13158               op1 = TREE_OPERAND (op1, 1);
13159             }
13160           lhs = RECUR (TREE_OPERAND (op1, 0));
13161           rhs = RECUR (TREE_OPERAND (op1, 1));
13162           finish_omp_atomic (OMP_ATOMIC, TREE_CODE (op1), lhs, rhs,
13163                              NULL_TREE, NULL_TREE, rhs1);
13164         }
13165       else
13166         {
13167           tree op1 = TREE_OPERAND (t, 1);
13168           tree v = NULL_TREE, lhs, rhs = NULL_TREE, lhs1 = NULL_TREE;
13169           tree rhs1 = NULL_TREE;
13170           enum tree_code code = TREE_CODE (TREE_OPERAND (op1, 1));
13171           enum tree_code opcode = NOP_EXPR;
13172           if (code == OMP_ATOMIC_READ)
13173             {
13174               v = RECUR (TREE_OPERAND (op1, 0));
13175               lhs = RECUR (TREE_OPERAND (TREE_OPERAND (op1, 1), 0));
13176             }
13177           else if (code == OMP_ATOMIC_CAPTURE_OLD
13178                    || code == OMP_ATOMIC_CAPTURE_NEW)
13179             {
13180               tree op11 = TREE_OPERAND (TREE_OPERAND (op1, 1), 1);
13181               v = RECUR (TREE_OPERAND (op1, 0));
13182               lhs1 = RECUR (TREE_OPERAND (TREE_OPERAND (op1, 1), 0));
13183               if (TREE_CODE (op11) == COMPOUND_EXPR)
13184                 {
13185                   rhs1 = RECUR (TREE_OPERAND (op11, 0));
13186                   op11 = TREE_OPERAND (op11, 1);
13187                 }
13188               lhs = RECUR (TREE_OPERAND (op11, 0));
13189               rhs = RECUR (TREE_OPERAND (op11, 1));
13190               opcode = TREE_CODE (op11);
13191             }
13192           else
13193             {
13194               code = OMP_ATOMIC;
13195               lhs = RECUR (TREE_OPERAND (op1, 0));
13196               rhs = RECUR (TREE_OPERAND (op1, 1));
13197             }
13198           finish_omp_atomic (code, opcode, lhs, rhs, v, lhs1, rhs1);
13199         }
13200       break;
13201
13202     case TRANSACTION_EXPR:
13203       {
13204         int flags = 0;
13205         flags |= (TRANSACTION_EXPR_OUTER (t) ? TM_STMT_ATTR_OUTER : 0);
13206         flags |= (TRANSACTION_EXPR_RELAXED (t) ? TM_STMT_ATTR_RELAXED : 0);
13207
13208         if (TRANSACTION_EXPR_IS_STMT (t))
13209           {
13210             stmt = begin_transaction_stmt (input_location, NULL, flags);
13211             RECUR (TRANSACTION_EXPR_BODY (t));
13212             finish_transaction_stmt (stmt, NULL, flags);
13213           }
13214         else
13215           {
13216             stmt = build_transaction_expr (EXPR_LOCATION (t),
13217                                            RECUR (TRANSACTION_EXPR_BODY (t)),
13218                                            flags);
13219             return stmt;
13220           }
13221       }
13222       break;
13223
13224     case EXPR_PACK_EXPANSION:
13225       error ("invalid use of pack expansion expression");
13226       return error_mark_node;
13227
13228     case NONTYPE_ARGUMENT_PACK:
13229       error ("use %<...%> to expand argument pack");
13230       return error_mark_node;
13231
13232     default:
13233       gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
13234
13235       return tsubst_copy_and_build (t, args, complain, in_decl,
13236                                     /*function_p=*/false,
13237                                     integral_constant_expression_p);
13238     }
13239
13240   return NULL_TREE;
13241 #undef RECUR
13242 }
13243
13244 /* T is a postfix-expression that is not being used in a function
13245    call.  Return the substituted version of T.  */
13246
13247 static tree
13248 tsubst_non_call_postfix_expression (tree t, tree args,
13249                                     tsubst_flags_t complain,
13250                                     tree in_decl)
13251 {
13252   if (TREE_CODE (t) == SCOPE_REF)
13253     t = tsubst_qualified_id (t, args, complain, in_decl,
13254                              /*done=*/false, /*address_p=*/false);
13255   else
13256     t = tsubst_copy_and_build (t, args, complain, in_decl,
13257                                /*function_p=*/false,
13258                                /*integral_constant_expression_p=*/false);
13259
13260   return t;
13261 }
13262
13263 /* Like tsubst but deals with expressions and performs semantic
13264    analysis.  FUNCTION_P is true if T is the "F" in "F (ARGS)".  */
13265
13266 tree
13267 tsubst_copy_and_build (tree t,
13268                        tree args,
13269                        tsubst_flags_t complain,
13270                        tree in_decl,
13271                        bool function_p,
13272                        bool integral_constant_expression_p)
13273 {
13274 #define RECUR(NODE)                                             \
13275   tsubst_copy_and_build (NODE, args, complain, in_decl,         \
13276                          /*function_p=*/false,                  \
13277                          integral_constant_expression_p)
13278
13279   tree op1;
13280
13281   if (t == NULL_TREE || t == error_mark_node)
13282     return t;
13283
13284   switch (TREE_CODE (t))
13285     {
13286     case USING_DECL:
13287       t = DECL_NAME (t);
13288       /* Fall through.  */
13289     case IDENTIFIER_NODE:
13290       {
13291         tree decl;
13292         cp_id_kind idk;
13293         bool non_integral_constant_expression_p;
13294         const char *error_msg;
13295
13296         if (IDENTIFIER_TYPENAME_P (t))
13297           {
13298             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13299             t = mangle_conv_op_name_for_type (new_type);
13300           }
13301
13302         /* Look up the name.  */
13303         decl = lookup_name (t);
13304
13305         /* By convention, expressions use ERROR_MARK_NODE to indicate
13306            failure, not NULL_TREE.  */
13307         if (decl == NULL_TREE)
13308           decl = error_mark_node;
13309
13310         decl = finish_id_expression (t, decl, NULL_TREE,
13311                                      &idk,
13312                                      integral_constant_expression_p,
13313           /*allow_non_integral_constant_expression_p=*/(cxx_dialect >= cxx0x),
13314                                      &non_integral_constant_expression_p,
13315                                      /*template_p=*/false,
13316                                      /*done=*/true,
13317                                      /*address_p=*/false,
13318                                      /*template_arg_p=*/false,
13319                                      &error_msg,
13320                                      input_location);
13321         if (error_msg)
13322           error (error_msg);
13323         if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
13324           {
13325             if (complain & tf_error)
13326               unqualified_name_lookup_error (decl);
13327             decl = error_mark_node;
13328           }
13329         return decl;
13330       }
13331
13332     case TEMPLATE_ID_EXPR:
13333       {
13334         tree object;
13335         tree templ = RECUR (TREE_OPERAND (t, 0));
13336         tree targs = TREE_OPERAND (t, 1);
13337
13338         if (targs)
13339           targs = tsubst_template_args (targs, args, complain, in_decl);
13340
13341         if (TREE_CODE (templ) == COMPONENT_REF)
13342           {
13343             object = TREE_OPERAND (templ, 0);
13344             templ = TREE_OPERAND (templ, 1);
13345           }
13346         else
13347           object = NULL_TREE;
13348         templ = lookup_template_function (templ, targs);
13349
13350         if (object)
13351           return build3 (COMPONENT_REF, TREE_TYPE (templ),
13352                          object, templ, NULL_TREE);
13353         else
13354           return baselink_for_fns (templ);
13355       }
13356
13357     case INDIRECT_REF:
13358       {
13359         tree r = RECUR (TREE_OPERAND (t, 0));
13360
13361         if (REFERENCE_REF_P (t))
13362           {
13363             /* A type conversion to reference type will be enclosed in
13364                such an indirect ref, but the substitution of the cast
13365                will have also added such an indirect ref.  */
13366             if (TREE_CODE (TREE_TYPE (r)) == REFERENCE_TYPE)
13367               r = convert_from_reference (r);
13368           }
13369         else
13370           r = build_x_indirect_ref (r, RO_UNARY_STAR, complain);
13371         return r;
13372       }
13373
13374     case NOP_EXPR:
13375       return build_nop
13376         (tsubst (TREE_TYPE (t), args, complain, in_decl),
13377          RECUR (TREE_OPERAND (t, 0)));
13378
13379     case IMPLICIT_CONV_EXPR:
13380       {
13381         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13382         tree expr = RECUR (TREE_OPERAND (t, 0));
13383         int flags = LOOKUP_IMPLICIT;
13384         if (IMPLICIT_CONV_EXPR_DIRECT_INIT (t))
13385           flags = LOOKUP_NORMAL;
13386         return perform_implicit_conversion_flags (type, expr, complain,
13387                                                   flags);
13388       }
13389
13390     case CONVERT_EXPR:
13391       return build1
13392         (CONVERT_EXPR,
13393          tsubst (TREE_TYPE (t), args, complain, in_decl),
13394          RECUR (TREE_OPERAND (t, 0)));
13395
13396     case CAST_EXPR:
13397     case REINTERPRET_CAST_EXPR:
13398     case CONST_CAST_EXPR:
13399     case DYNAMIC_CAST_EXPR:
13400     case STATIC_CAST_EXPR:
13401       {
13402         tree type;
13403         tree op;
13404
13405         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13406         if (integral_constant_expression_p
13407             && !cast_valid_in_integral_constant_expression_p (type))
13408           {
13409             if (complain & tf_error)
13410               error ("a cast to a type other than an integral or "
13411                      "enumeration type cannot appear in a constant-expression");
13412             return error_mark_node; 
13413           }
13414
13415         op = RECUR (TREE_OPERAND (t, 0));
13416
13417         switch (TREE_CODE (t))
13418           {
13419           case CAST_EXPR:
13420             return build_functional_cast (type, op, complain);
13421           case REINTERPRET_CAST_EXPR:
13422             return build_reinterpret_cast (type, op, complain);
13423           case CONST_CAST_EXPR:
13424             return build_const_cast (type, op, complain);
13425           case DYNAMIC_CAST_EXPR:
13426             return build_dynamic_cast (type, op, complain);
13427           case STATIC_CAST_EXPR:
13428             return build_static_cast (type, op, complain);
13429           default:
13430             gcc_unreachable ();
13431           }
13432       }
13433
13434     case POSTDECREMENT_EXPR:
13435     case POSTINCREMENT_EXPR:
13436       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
13437                                                 args, complain, in_decl);
13438       return build_x_unary_op (TREE_CODE (t), op1, complain);
13439
13440     case PREDECREMENT_EXPR:
13441     case PREINCREMENT_EXPR:
13442     case NEGATE_EXPR:
13443     case BIT_NOT_EXPR:
13444     case ABS_EXPR:
13445     case TRUTH_NOT_EXPR:
13446     case UNARY_PLUS_EXPR:  /* Unary + */
13447     case REALPART_EXPR:
13448     case IMAGPART_EXPR:
13449       return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)),
13450                                complain);
13451
13452     case FIX_TRUNC_EXPR:
13453       return cp_build_unary_op (FIX_TRUNC_EXPR, RECUR (TREE_OPERAND (t, 0)),
13454                                 0, complain);
13455
13456     case ADDR_EXPR:
13457       op1 = TREE_OPERAND (t, 0);
13458       if (TREE_CODE (op1) == LABEL_DECL)
13459         return finish_label_address_expr (DECL_NAME (op1),
13460                                           EXPR_LOCATION (op1));
13461       if (TREE_CODE (op1) == SCOPE_REF)
13462         op1 = tsubst_qualified_id (op1, args, complain, in_decl,
13463                                    /*done=*/true, /*address_p=*/true);
13464       else
13465         op1 = tsubst_non_call_postfix_expression (op1, args, complain,
13466                                                   in_decl);
13467       return build_x_unary_op (ADDR_EXPR, op1, complain);
13468
13469     case PLUS_EXPR:
13470     case MINUS_EXPR:
13471     case MULT_EXPR:
13472     case TRUNC_DIV_EXPR:
13473     case CEIL_DIV_EXPR:
13474     case FLOOR_DIV_EXPR:
13475     case ROUND_DIV_EXPR:
13476     case EXACT_DIV_EXPR:
13477     case BIT_AND_EXPR:
13478     case BIT_IOR_EXPR:
13479     case BIT_XOR_EXPR:
13480     case TRUNC_MOD_EXPR:
13481     case FLOOR_MOD_EXPR:
13482     case TRUTH_ANDIF_EXPR:
13483     case TRUTH_ORIF_EXPR:
13484     case TRUTH_AND_EXPR:
13485     case TRUTH_OR_EXPR:
13486     case RSHIFT_EXPR:
13487     case LSHIFT_EXPR:
13488     case RROTATE_EXPR:
13489     case LROTATE_EXPR:
13490     case EQ_EXPR:
13491     case NE_EXPR:
13492     case MAX_EXPR:
13493     case MIN_EXPR:
13494     case LE_EXPR:
13495     case GE_EXPR:
13496     case LT_EXPR:
13497     case GT_EXPR:
13498     case MEMBER_REF:
13499     case DOTSTAR_EXPR:
13500       return build_x_binary_op
13501         (TREE_CODE (t),
13502          RECUR (TREE_OPERAND (t, 0)),
13503          (TREE_NO_WARNING (TREE_OPERAND (t, 0))
13504           ? ERROR_MARK
13505           : TREE_CODE (TREE_OPERAND (t, 0))),
13506          RECUR (TREE_OPERAND (t, 1)),
13507          (TREE_NO_WARNING (TREE_OPERAND (t, 1))
13508           ? ERROR_MARK
13509           : TREE_CODE (TREE_OPERAND (t, 1))),
13510          /*overload=*/NULL,
13511          complain);
13512
13513     case SCOPE_REF:
13514       return tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
13515                                   /*address_p=*/false);
13516     case ARRAY_REF:
13517       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
13518                                                 args, complain, in_decl);
13519       return build_x_array_ref (op1, RECUR (TREE_OPERAND (t, 1)), complain);
13520
13521     case SIZEOF_EXPR:
13522       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
13523         return tsubst_copy (t, args, complain, in_decl);
13524       /* Fall through */
13525       
13526     case ALIGNOF_EXPR:
13527       op1 = TREE_OPERAND (t, 0);
13528       if (!args)
13529         {
13530           /* When there are no ARGS, we are trying to evaluate a
13531              non-dependent expression from the parser.  Trying to do
13532              the substitutions may not work.  */
13533           if (!TYPE_P (op1))
13534             op1 = TREE_TYPE (op1);
13535         }
13536       else
13537         {
13538           ++cp_unevaluated_operand;
13539           ++c_inhibit_evaluation_warnings;
13540           op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
13541                                        /*function_p=*/false,
13542                                        /*integral_constant_expression_p=*/false);
13543           --cp_unevaluated_operand;
13544           --c_inhibit_evaluation_warnings;
13545         }
13546       if (TYPE_P (op1))
13547         return cxx_sizeof_or_alignof_type (op1, TREE_CODE (t), 
13548                                            complain & tf_error);
13549       else
13550         return cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t), 
13551                                            complain & tf_error);
13552
13553     case AT_ENCODE_EXPR:
13554       {
13555         op1 = TREE_OPERAND (t, 0);
13556         ++cp_unevaluated_operand;
13557         ++c_inhibit_evaluation_warnings;
13558         op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
13559                                      /*function_p=*/false,
13560                                      /*integral_constant_expression_p=*/false);
13561         --cp_unevaluated_operand;
13562         --c_inhibit_evaluation_warnings;
13563         return objc_build_encode_expr (op1);
13564       }
13565
13566     case NOEXCEPT_EXPR:
13567       op1 = TREE_OPERAND (t, 0);
13568       ++cp_unevaluated_operand;
13569       ++c_inhibit_evaluation_warnings;
13570       op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
13571                                    /*function_p=*/false,
13572                                    /*integral_constant_expression_p=*/false);
13573       --cp_unevaluated_operand;
13574       --c_inhibit_evaluation_warnings;
13575       return finish_noexcept_expr (op1, complain);
13576
13577     case MODOP_EXPR:
13578       {
13579         tree r = build_x_modify_expr
13580           (RECUR (TREE_OPERAND (t, 0)),
13581            TREE_CODE (TREE_OPERAND (t, 1)),
13582            RECUR (TREE_OPERAND (t, 2)),
13583            complain);
13584         /* TREE_NO_WARNING must be set if either the expression was
13585            parenthesized or it uses an operator such as >>= rather
13586            than plain assignment.  In the former case, it was already
13587            set and must be copied.  In the latter case,
13588            build_x_modify_expr sets it and it must not be reset
13589            here.  */
13590         if (TREE_NO_WARNING (t))
13591           TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
13592         return r;
13593       }
13594
13595     case ARROW_EXPR:
13596       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
13597                                                 args, complain, in_decl);
13598       /* Remember that there was a reference to this entity.  */
13599       if (DECL_P (op1))
13600         mark_used (op1);
13601       return build_x_arrow (op1);
13602
13603     case NEW_EXPR:
13604       {
13605         tree placement = RECUR (TREE_OPERAND (t, 0));
13606         tree init = RECUR (TREE_OPERAND (t, 3));
13607         VEC(tree,gc) *placement_vec;
13608         VEC(tree,gc) *init_vec;
13609         tree ret;
13610
13611         if (placement == NULL_TREE)
13612           placement_vec = NULL;
13613         else
13614           {
13615             placement_vec = make_tree_vector ();
13616             for (; placement != NULL_TREE; placement = TREE_CHAIN (placement))
13617               VEC_safe_push (tree, gc, placement_vec, TREE_VALUE (placement));
13618           }
13619
13620         /* If there was an initializer in the original tree, but it
13621            instantiated to an empty list, then we should pass a
13622            non-NULL empty vector to tell build_new that it was an
13623            empty initializer() rather than no initializer.  This can
13624            only happen when the initializer is a pack expansion whose
13625            parameter packs are of length zero.  */
13626         if (init == NULL_TREE && TREE_OPERAND (t, 3) == NULL_TREE)
13627           init_vec = NULL;
13628         else
13629           {
13630             init_vec = make_tree_vector ();
13631             if (init == void_zero_node)
13632               gcc_assert (init_vec != NULL);
13633             else
13634               {
13635                 for (; init != NULL_TREE; init = TREE_CHAIN (init))
13636                   VEC_safe_push (tree, gc, init_vec, TREE_VALUE (init));
13637               }
13638           }
13639
13640         ret = build_new (&placement_vec,
13641                          tsubst (TREE_OPERAND (t, 1), args, complain, in_decl),
13642                          RECUR (TREE_OPERAND (t, 2)),
13643                          &init_vec,
13644                          NEW_EXPR_USE_GLOBAL (t),
13645                          complain);
13646
13647         if (placement_vec != NULL)
13648           release_tree_vector (placement_vec);
13649         if (init_vec != NULL)
13650           release_tree_vector (init_vec);
13651
13652         return ret;
13653       }
13654
13655     case DELETE_EXPR:
13656      return delete_sanity
13657        (RECUR (TREE_OPERAND (t, 0)),
13658         RECUR (TREE_OPERAND (t, 1)),
13659         DELETE_EXPR_USE_VEC (t),
13660         DELETE_EXPR_USE_GLOBAL (t),
13661         complain);
13662
13663     case COMPOUND_EXPR:
13664       return build_x_compound_expr (RECUR (TREE_OPERAND (t, 0)),
13665                                     RECUR (TREE_OPERAND (t, 1)),
13666                                     complain);
13667
13668     case CALL_EXPR:
13669       {
13670         tree function;
13671         VEC(tree,gc) *call_args;
13672         unsigned int nargs, i;
13673         bool qualified_p;
13674         bool koenig_p;
13675         tree ret;
13676
13677         function = CALL_EXPR_FN (t);
13678         /* When we parsed the expression,  we determined whether or
13679            not Koenig lookup should be performed.  */
13680         koenig_p = KOENIG_LOOKUP_P (t);
13681         if (TREE_CODE (function) == SCOPE_REF)
13682           {
13683             qualified_p = true;
13684             function = tsubst_qualified_id (function, args, complain, in_decl,
13685                                             /*done=*/false,
13686                                             /*address_p=*/false);
13687           }
13688         else if (koenig_p && TREE_CODE (function) == IDENTIFIER_NODE)
13689           {
13690             /* Do nothing; calling tsubst_copy_and_build on an identifier
13691                would incorrectly perform unqualified lookup again.
13692
13693                Note that we can also have an IDENTIFIER_NODE if the earlier
13694                unqualified lookup found a member function; in that case
13695                koenig_p will be false and we do want to do the lookup
13696                again to find the instantiated member function.
13697
13698                FIXME but doing that causes c++/15272, so we need to stop
13699                using IDENTIFIER_NODE in that situation.  */
13700             qualified_p = false;
13701           }
13702         else
13703           {
13704             if (TREE_CODE (function) == COMPONENT_REF)
13705               {
13706                 tree op = TREE_OPERAND (function, 1);
13707
13708                 qualified_p = (TREE_CODE (op) == SCOPE_REF
13709                                || (BASELINK_P (op)
13710                                    && BASELINK_QUALIFIED_P (op)));
13711               }
13712             else
13713               qualified_p = false;
13714
13715             function = tsubst_copy_and_build (function, args, complain,
13716                                               in_decl,
13717                                               !qualified_p,
13718                                               integral_constant_expression_p);
13719
13720             if (BASELINK_P (function))
13721               qualified_p = true;
13722           }
13723
13724         nargs = call_expr_nargs (t);
13725         call_args = make_tree_vector ();
13726         for (i = 0; i < nargs; ++i)
13727           {
13728             tree arg = CALL_EXPR_ARG (t, i);
13729
13730             if (!PACK_EXPANSION_P (arg))
13731               VEC_safe_push (tree, gc, call_args,
13732                              RECUR (CALL_EXPR_ARG (t, i)));
13733             else
13734               {
13735                 /* Expand the pack expansion and push each entry onto
13736                    CALL_ARGS.  */
13737                 arg = tsubst_pack_expansion (arg, args, complain, in_decl);
13738                 if (TREE_CODE (arg) == TREE_VEC)
13739                   {
13740                     unsigned int len, j;
13741
13742                     len = TREE_VEC_LENGTH (arg);
13743                     for (j = 0; j < len; ++j)
13744                       {
13745                         tree value = TREE_VEC_ELT (arg, j);
13746                         if (value != NULL_TREE)
13747                           value = convert_from_reference (value);
13748                         VEC_safe_push (tree, gc, call_args, value);
13749                       }
13750                   }
13751                 else
13752                   {
13753                     /* A partial substitution.  Add one entry.  */
13754                     VEC_safe_push (tree, gc, call_args, arg);
13755                   }
13756               }
13757           }
13758
13759         /* We do not perform argument-dependent lookup if normal
13760            lookup finds a non-function, in accordance with the
13761            expected resolution of DR 218.  */
13762         if (koenig_p
13763             && ((is_overloaded_fn (function)
13764                  /* If lookup found a member function, the Koenig lookup is
13765                     not appropriate, even if an unqualified-name was used
13766                     to denote the function.  */
13767                  && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
13768                 || TREE_CODE (function) == IDENTIFIER_NODE)
13769             /* Only do this when substitution turns a dependent call
13770                into a non-dependent call.  */
13771             && type_dependent_expression_p_push (t)
13772             && !any_type_dependent_arguments_p (call_args))
13773           function = perform_koenig_lookup (function, call_args, false,
13774                                             tf_none);
13775
13776         if (TREE_CODE (function) == IDENTIFIER_NODE
13777             && !any_type_dependent_arguments_p (call_args))
13778           {
13779             if (koenig_p && (complain & tf_warning_or_error))
13780               {
13781                 /* For backwards compatibility and good diagnostics, try
13782                    the unqualified lookup again if we aren't in SFINAE
13783                    context.  */
13784                 tree unq = (tsubst_copy_and_build
13785                             (function, args, complain, in_decl, true,
13786                              integral_constant_expression_p));
13787                 if (unq == error_mark_node)
13788                   return error_mark_node;
13789
13790                 if (unq != function)
13791                   {
13792                     tree fn = unq;
13793                     if (TREE_CODE (fn) == INDIRECT_REF)
13794                       fn = TREE_OPERAND (fn, 0);
13795                     if (TREE_CODE (fn) == COMPONENT_REF)
13796                       fn = TREE_OPERAND (fn, 1);
13797                     if (is_overloaded_fn (fn))
13798                       fn = get_first_fn (fn);
13799                     permerror (EXPR_LOC_OR_HERE (t),
13800                                "%qD was not declared in this scope, "
13801                                "and no declarations were found by "
13802                                "argument-dependent lookup at the point "
13803                                "of instantiation", function);
13804                     if (!DECL_P (fn))
13805                       /* Can't say anything more.  */;
13806                     else if (DECL_CLASS_SCOPE_P (fn))
13807                       {
13808                         inform (EXPR_LOC_OR_HERE (t),
13809                                 "declarations in dependent base %qT are "
13810                                 "not found by unqualified lookup",
13811                                 DECL_CLASS_CONTEXT (fn));
13812                         if (current_class_ptr)
13813                           inform (EXPR_LOC_OR_HERE (t),
13814                                   "use %<this->%D%> instead", function);
13815                         else
13816                           inform (EXPR_LOC_OR_HERE (t),
13817                                   "use %<%T::%D%> instead",
13818                                   current_class_name, function);
13819                       }
13820                     else
13821                       inform (0, "%q+D declared here, later in the "
13822                                 "translation unit", fn);
13823                     function = unq;
13824                   }
13825               }
13826             if (TREE_CODE (function) == IDENTIFIER_NODE)
13827               {
13828                 unqualified_name_lookup_error (function);
13829                 release_tree_vector (call_args);
13830                 return error_mark_node;
13831               }
13832           }
13833
13834         /* Remember that there was a reference to this entity.  */
13835         if (DECL_P (function))
13836           mark_used (function);
13837
13838         if (TREE_CODE (function) == OFFSET_REF)
13839           ret = build_offset_ref_call_from_tree (function, &call_args);
13840         else if (TREE_CODE (function) == COMPONENT_REF)
13841           {
13842             tree instance = TREE_OPERAND (function, 0);
13843             tree fn = TREE_OPERAND (function, 1);
13844
13845             if (processing_template_decl
13846                 && (type_dependent_expression_p (instance)
13847                     || (!BASELINK_P (fn)
13848                         && TREE_CODE (fn) != FIELD_DECL)
13849                     || type_dependent_expression_p (fn)
13850                     || any_type_dependent_arguments_p (call_args)))
13851               ret = build_nt_call_vec (function, call_args);
13852             else if (!BASELINK_P (fn))
13853               ret = finish_call_expr (function, &call_args,
13854                                        /*disallow_virtual=*/false,
13855                                        /*koenig_p=*/false,
13856                                        complain);
13857             else
13858               ret = (build_new_method_call
13859                       (instance, fn,
13860                        &call_args, NULL_TREE,
13861                        qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL,
13862                        /*fn_p=*/NULL,
13863                        complain));
13864           }
13865         else
13866           ret = finish_call_expr (function, &call_args,
13867                                   /*disallow_virtual=*/qualified_p,
13868                                   koenig_p,
13869                                   complain);
13870
13871         release_tree_vector (call_args);
13872
13873         return ret;
13874       }
13875
13876     case COND_EXPR:
13877       return build_x_conditional_expr
13878         (RECUR (TREE_OPERAND (t, 0)),
13879          RECUR (TREE_OPERAND (t, 1)),
13880          RECUR (TREE_OPERAND (t, 2)),
13881          complain);
13882
13883     case PSEUDO_DTOR_EXPR:
13884       return finish_pseudo_destructor_expr
13885         (RECUR (TREE_OPERAND (t, 0)),
13886          RECUR (TREE_OPERAND (t, 1)),
13887          tsubst (TREE_OPERAND (t, 2), args, complain, in_decl));
13888
13889     case TREE_LIST:
13890       {
13891         tree purpose, value, chain;
13892
13893         if (t == void_list_node)
13894           return t;
13895
13896         if ((TREE_PURPOSE (t) && PACK_EXPANSION_P (TREE_PURPOSE (t)))
13897             || (TREE_VALUE (t) && PACK_EXPANSION_P (TREE_VALUE (t))))
13898           {
13899             /* We have pack expansions, so expand those and
13900                create a new list out of it.  */
13901             tree purposevec = NULL_TREE;
13902             tree valuevec = NULL_TREE;
13903             tree chain;
13904             int i, len = -1;
13905
13906             /* Expand the argument expressions.  */
13907             if (TREE_PURPOSE (t))
13908               purposevec = tsubst_pack_expansion (TREE_PURPOSE (t), args,
13909                                                  complain, in_decl);
13910             if (TREE_VALUE (t))
13911               valuevec = tsubst_pack_expansion (TREE_VALUE (t), args,
13912                                                complain, in_decl);
13913
13914             /* Build the rest of the list.  */
13915             chain = TREE_CHAIN (t);
13916             if (chain && chain != void_type_node)
13917               chain = RECUR (chain);
13918
13919             /* Determine the number of arguments.  */
13920             if (purposevec && TREE_CODE (purposevec) == TREE_VEC)
13921               {
13922                 len = TREE_VEC_LENGTH (purposevec);
13923                 gcc_assert (!valuevec || len == TREE_VEC_LENGTH (valuevec));
13924               }
13925             else if (TREE_CODE (valuevec) == TREE_VEC)
13926               len = TREE_VEC_LENGTH (valuevec);
13927             else
13928               {
13929                 /* Since we only performed a partial substitution into
13930                    the argument pack, we only return a single list
13931                    node.  */
13932                 if (purposevec == TREE_PURPOSE (t)
13933                     && valuevec == TREE_VALUE (t)
13934                     && chain == TREE_CHAIN (t))
13935                   return t;
13936
13937                 return tree_cons (purposevec, valuevec, chain);
13938               }
13939             
13940             /* Convert the argument vectors into a TREE_LIST */
13941             i = len;
13942             while (i > 0)
13943               {
13944                 /* Grab the Ith values.  */
13945                 i--;
13946                 purpose = purposevec ? TREE_VEC_ELT (purposevec, i) 
13947                                      : NULL_TREE;
13948                 value 
13949                   = valuevec ? convert_from_reference (TREE_VEC_ELT (valuevec, i)) 
13950                              : NULL_TREE;
13951
13952                 /* Build the list (backwards).  */
13953                 chain = tree_cons (purpose, value, chain);
13954               }
13955
13956             return chain;
13957           }
13958
13959         purpose = TREE_PURPOSE (t);
13960         if (purpose)
13961           purpose = RECUR (purpose);
13962         value = TREE_VALUE (t);
13963         if (value)
13964           value = RECUR (value);
13965         chain = TREE_CHAIN (t);
13966         if (chain && chain != void_type_node)
13967           chain = RECUR (chain);
13968         if (purpose == TREE_PURPOSE (t)
13969             && value == TREE_VALUE (t)
13970             && chain == TREE_CHAIN (t))
13971           return t;
13972         return tree_cons (purpose, value, chain);
13973       }
13974
13975     case COMPONENT_REF:
13976       {
13977         tree object;
13978         tree object_type;
13979         tree member;
13980
13981         object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
13982                                                      args, complain, in_decl);
13983         /* Remember that there was a reference to this entity.  */
13984         if (DECL_P (object))
13985           mark_used (object);
13986         object_type = TREE_TYPE (object);
13987
13988         member = TREE_OPERAND (t, 1);
13989         if (BASELINK_P (member))
13990           member = tsubst_baselink (member,
13991                                     non_reference (TREE_TYPE (object)),
13992                                     args, complain, in_decl);
13993         else
13994           member = tsubst_copy (member, args, complain, in_decl);
13995         if (member == error_mark_node)
13996           return error_mark_node;
13997
13998         if (type_dependent_expression_p (object))
13999           /* We can't do much here.  */;
14000         else if (!CLASS_TYPE_P (object_type))
14001           {
14002             if (SCALAR_TYPE_P (object_type))
14003               {
14004                 tree s = NULL_TREE;
14005                 tree dtor = member;
14006
14007                 if (TREE_CODE (dtor) == SCOPE_REF)
14008                   {
14009                     s = TREE_OPERAND (dtor, 0);
14010                     dtor = TREE_OPERAND (dtor, 1);
14011                   }
14012                 if (TREE_CODE (dtor) == BIT_NOT_EXPR)
14013                   {
14014                     dtor = TREE_OPERAND (dtor, 0);
14015                     if (TYPE_P (dtor))
14016                       return finish_pseudo_destructor_expr (object, s, dtor);
14017                   }
14018               }
14019           }
14020         else if (TREE_CODE (member) == SCOPE_REF
14021                  && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
14022           {
14023             /* Lookup the template functions now that we know what the
14024                scope is.  */
14025             tree scope = TREE_OPERAND (member, 0);
14026             tree tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
14027             tree args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
14028             member = lookup_qualified_name (scope, tmpl,
14029                                             /*is_type_p=*/false,
14030                                             /*complain=*/false);
14031             if (BASELINK_P (member))
14032               {
14033                 BASELINK_FUNCTIONS (member)
14034                   = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
14035                               args);
14036                 member = (adjust_result_of_qualified_name_lookup
14037                           (member, BINFO_TYPE (BASELINK_BINFO (member)),
14038                            object_type));
14039               }
14040             else
14041               {
14042                 qualified_name_lookup_error (scope, tmpl, member,
14043                                              input_location);
14044                 return error_mark_node;
14045               }
14046           }
14047         else if (TREE_CODE (member) == SCOPE_REF
14048                  && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
14049                  && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
14050           {
14051             if (complain & tf_error)
14052               {
14053                 if (TYPE_P (TREE_OPERAND (member, 0)))
14054                   error ("%qT is not a class or namespace",
14055                          TREE_OPERAND (member, 0));
14056                 else
14057                   error ("%qD is not a class or namespace",
14058                          TREE_OPERAND (member, 0));
14059               }
14060             return error_mark_node;
14061           }
14062         else if (TREE_CODE (member) == FIELD_DECL)
14063           return finish_non_static_data_member (member, object, NULL_TREE);
14064
14065         return finish_class_member_access_expr (object, member,
14066                                                 /*template_p=*/false,
14067                                                 complain);
14068       }
14069
14070     case THROW_EXPR:
14071       return build_throw
14072         (RECUR (TREE_OPERAND (t, 0)));
14073
14074     case CONSTRUCTOR:
14075       {
14076         VEC(constructor_elt,gc) *n;
14077         constructor_elt *ce;
14078         unsigned HOST_WIDE_INT idx;
14079         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
14080         bool process_index_p;
14081         int newlen;
14082         bool need_copy_p = false;
14083         tree r;
14084
14085         if (type == error_mark_node)
14086           return error_mark_node;
14087
14088         /* digest_init will do the wrong thing if we let it.  */
14089         if (type && TYPE_PTRMEMFUNC_P (type))
14090           return t;
14091
14092         /* We do not want to process the index of aggregate
14093            initializers as they are identifier nodes which will be
14094            looked up by digest_init.  */
14095         process_index_p = !(type && MAYBE_CLASS_TYPE_P (type));
14096
14097         n = VEC_copy (constructor_elt, gc, CONSTRUCTOR_ELTS (t));
14098         newlen = VEC_length (constructor_elt, n);
14099         FOR_EACH_VEC_ELT (constructor_elt, n, idx, ce)
14100           {
14101             if (ce->index && process_index_p)
14102               ce->index = RECUR (ce->index);
14103
14104             if (PACK_EXPANSION_P (ce->value))
14105               {
14106                 /* Substitute into the pack expansion.  */
14107                 ce->value = tsubst_pack_expansion (ce->value, args, complain,
14108                                                   in_decl);
14109
14110                 if (ce->value == error_mark_node
14111                     || PACK_EXPANSION_P (ce->value))
14112                   ;
14113                 else if (TREE_VEC_LENGTH (ce->value) == 1)
14114                   /* Just move the argument into place.  */
14115                   ce->value = TREE_VEC_ELT (ce->value, 0);
14116                 else
14117                   {
14118                     /* Update the length of the final CONSTRUCTOR
14119                        arguments vector, and note that we will need to
14120                        copy.*/
14121                     newlen = newlen + TREE_VEC_LENGTH (ce->value) - 1;
14122                     need_copy_p = true;
14123                   }
14124               }
14125             else
14126               ce->value = RECUR (ce->value);
14127           }
14128
14129         if (need_copy_p)
14130           {
14131             VEC(constructor_elt,gc) *old_n = n;
14132
14133             n = VEC_alloc (constructor_elt, gc, newlen);
14134             FOR_EACH_VEC_ELT (constructor_elt, old_n, idx, ce)
14135               {
14136                 if (TREE_CODE (ce->value) == TREE_VEC)
14137                   {
14138                     int i, len = TREE_VEC_LENGTH (ce->value);
14139                     for (i = 0; i < len; ++i)
14140                       CONSTRUCTOR_APPEND_ELT (n, 0,
14141                                               TREE_VEC_ELT (ce->value, i));
14142                   }
14143                 else
14144                   CONSTRUCTOR_APPEND_ELT (n, 0, ce->value);
14145               }
14146           }
14147
14148         r = build_constructor (init_list_type_node, n);
14149         CONSTRUCTOR_IS_DIRECT_INIT (r) = CONSTRUCTOR_IS_DIRECT_INIT (t);
14150
14151         if (TREE_HAS_CONSTRUCTOR (t))
14152           return finish_compound_literal (type, r, complain);
14153
14154         TREE_TYPE (r) = type;
14155         return r;
14156       }
14157
14158     case TYPEID_EXPR:
14159       {
14160         tree operand_0 = TREE_OPERAND (t, 0);
14161         if (TYPE_P (operand_0))
14162           {
14163             operand_0 = tsubst (operand_0, args, complain, in_decl);
14164             return get_typeid (operand_0);
14165           }
14166         else
14167           {
14168             operand_0 = RECUR (operand_0);
14169             return build_typeid (operand_0);
14170           }
14171       }
14172
14173     case VAR_DECL:
14174       if (!args)
14175         return t;
14176       /* Fall through */
14177
14178     case PARM_DECL:
14179       {
14180         tree r = tsubst_copy (t, args, complain, in_decl);
14181
14182         if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
14183           /* If the original type was a reference, we'll be wrapped in
14184              the appropriate INDIRECT_REF.  */
14185           r = convert_from_reference (r);
14186         return r;
14187       }
14188
14189     case VA_ARG_EXPR:
14190       return build_x_va_arg (RECUR (TREE_OPERAND (t, 0)),
14191                              tsubst (TREE_TYPE (t), args, complain, in_decl));
14192
14193     case OFFSETOF_EXPR:
14194       return finish_offsetof (RECUR (TREE_OPERAND (t, 0)));
14195
14196     case TRAIT_EXPR:
14197       {
14198         tree type1 = tsubst_copy (TRAIT_EXPR_TYPE1 (t), args,
14199                                   complain, in_decl);
14200
14201         tree type2 = TRAIT_EXPR_TYPE2 (t);
14202         if (type2)
14203           type2 = tsubst_copy (type2, args, complain, in_decl);
14204         
14205         return finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2);
14206       }
14207
14208     case STMT_EXPR:
14209       {
14210         tree old_stmt_expr = cur_stmt_expr;
14211         tree stmt_expr = begin_stmt_expr ();
14212
14213         cur_stmt_expr = stmt_expr;
14214         tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl,
14215                      integral_constant_expression_p);
14216         stmt_expr = finish_stmt_expr (stmt_expr, false);
14217         cur_stmt_expr = old_stmt_expr;
14218
14219         /* If the resulting list of expression statement is empty,
14220            fold it further into void_zero_node.  */
14221         if (empty_expr_stmt_p (stmt_expr))
14222           stmt_expr = void_zero_node;
14223
14224         return stmt_expr;
14225       }
14226
14227     case CONST_DECL:
14228       t = tsubst_copy (t, args, complain, in_decl);
14229       /* As in finish_id_expression, we resolve enumeration constants
14230          to their underlying values.  */
14231       if (TREE_CODE (t) == CONST_DECL && !processing_template_decl)
14232         {
14233           used_types_insert (TREE_TYPE (t));
14234           return DECL_INITIAL (t);
14235         }
14236       return t;
14237
14238     case LAMBDA_EXPR:
14239       {
14240         tree r = build_lambda_expr ();
14241
14242         tree type = tsubst (LAMBDA_EXPR_CLOSURE (t), args, complain, NULL_TREE);
14243         LAMBDA_EXPR_CLOSURE (r) = type;
14244         CLASSTYPE_LAMBDA_EXPR (type) = r;
14245
14246         LAMBDA_EXPR_LOCATION (r)
14247           = LAMBDA_EXPR_LOCATION (t);
14248         LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (r)
14249           = LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (t);
14250         LAMBDA_EXPR_MUTABLE_P (r) = LAMBDA_EXPR_MUTABLE_P (t);
14251         LAMBDA_EXPR_DISCRIMINATOR (r)
14252           = (LAMBDA_EXPR_DISCRIMINATOR (t));
14253         LAMBDA_EXPR_EXTRA_SCOPE (r)
14254           = RECUR (LAMBDA_EXPR_EXTRA_SCOPE (t));
14255         if (LAMBDA_EXPR_RETURN_TYPE (t) == dependent_lambda_return_type_node)
14256           {
14257             LAMBDA_EXPR_RETURN_TYPE (r) = dependent_lambda_return_type_node;
14258             LAMBDA_EXPR_DEDUCE_RETURN_TYPE_P (r) = true;
14259           }
14260         else
14261           LAMBDA_EXPR_RETURN_TYPE (r)
14262             = tsubst (LAMBDA_EXPR_RETURN_TYPE (t), args, complain, in_decl);
14263
14264         gcc_assert (LAMBDA_EXPR_THIS_CAPTURE (t) == NULL_TREE
14265                     && LAMBDA_EXPR_PENDING_PROXIES (t) == NULL);
14266
14267         /* Do this again now that LAMBDA_EXPR_EXTRA_SCOPE is set.  */
14268         determine_visibility (TYPE_NAME (type));
14269         /* Now that we know visibility, instantiate the type so we have a
14270            declaration of the op() for later calls to lambda_function.  */
14271         complete_type (type);
14272
14273         /* The capture list refers to closure members, so this needs to
14274            wait until after we finish instantiating the type.  */
14275         LAMBDA_EXPR_CAPTURE_LIST (r)
14276           = RECUR (LAMBDA_EXPR_CAPTURE_LIST (t));
14277
14278         return build_lambda_object (r);
14279       }
14280
14281     case TARGET_EXPR:
14282       /* We can get here for a constant initializer of non-dependent type.
14283          FIXME stop folding in cp_parser_initializer_clause.  */
14284       gcc_assert (TREE_CONSTANT (t));
14285       {
14286         tree r = get_target_expr (RECUR (TARGET_EXPR_INITIAL (t)));
14287         TREE_CONSTANT (r) = true;
14288         return r;
14289       }
14290
14291     default:
14292       /* Handle Objective-C++ constructs, if appropriate.  */
14293       {
14294         tree subst
14295           = objcp_tsubst_copy_and_build (t, args, complain,
14296                                          in_decl, /*function_p=*/false);
14297         if (subst)
14298           return subst;
14299       }
14300       return tsubst_copy (t, args, complain, in_decl);
14301     }
14302
14303 #undef RECUR
14304 }
14305
14306 /* Verify that the instantiated ARGS are valid. For type arguments,
14307    make sure that the type's linkage is ok. For non-type arguments,
14308    make sure they are constants if they are integral or enumerations.
14309    Emit an error under control of COMPLAIN, and return TRUE on error.  */
14310
14311 static bool
14312 check_instantiated_arg (tree tmpl, tree t, tsubst_flags_t complain)
14313 {
14314   if (ARGUMENT_PACK_P (t))
14315     {
14316       tree vec = ARGUMENT_PACK_ARGS (t);
14317       int len = TREE_VEC_LENGTH (vec);
14318       bool result = false;
14319       int i;
14320
14321       for (i = 0; i < len; ++i)
14322         if (check_instantiated_arg (tmpl, TREE_VEC_ELT (vec, i), complain))
14323           result = true;
14324       return result;
14325     }
14326   else if (TYPE_P (t))
14327     {
14328       /* [basic.link]: A name with no linkage (notably, the name
14329          of a class or enumeration declared in a local scope)
14330          shall not be used to declare an entity with linkage.
14331          This implies that names with no linkage cannot be used as
14332          template arguments
14333
14334          DR 757 relaxes this restriction for C++0x.  */
14335       tree nt = (cxx_dialect > cxx98 ? NULL_TREE
14336                  : no_linkage_check (t, /*relaxed_p=*/false));
14337
14338       if (nt)
14339         {
14340           /* DR 488 makes use of a type with no linkage cause
14341              type deduction to fail.  */
14342           if (complain & tf_error)
14343             {
14344               if (TYPE_ANONYMOUS_P (nt))
14345                 error ("%qT is/uses anonymous type", t);
14346               else
14347                 error ("template argument for %qD uses local type %qT",
14348                        tmpl, t);
14349             }
14350           return true;
14351         }
14352       /* In order to avoid all sorts of complications, we do not
14353          allow variably-modified types as template arguments.  */
14354       else if (variably_modified_type_p (t, NULL_TREE))
14355         {
14356           if (complain & tf_error)
14357             error ("%qT is a variably modified type", t);
14358           return true;
14359         }
14360     }
14361   /* A non-type argument of integral or enumerated type must be a
14362      constant.  */
14363   else if (TREE_TYPE (t)
14364            && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
14365            && !TREE_CONSTANT (t))
14366     {
14367       if (complain & tf_error)
14368         error ("integral expression %qE is not constant", t);
14369       return true;
14370     }
14371   return false;
14372 }
14373
14374 static bool
14375 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
14376 {
14377   int ix, len = DECL_NTPARMS (tmpl);
14378   bool result = false;
14379
14380   for (ix = 0; ix != len; ix++)
14381     {
14382       if (check_instantiated_arg (tmpl, TREE_VEC_ELT (args, ix), complain))
14383         result = true;
14384     }
14385   if (result && (complain & tf_error))
14386     error ("  trying to instantiate %qD", tmpl);
14387   return result;
14388 }
14389
14390 /* In C++0x, it's possible to have a function template whose type depends
14391    on itself recursively.  This is most obvious with decltype, but can also
14392    occur with enumeration scope (c++/48969).  So we need to catch infinite
14393    recursion and reject the substitution at deduction time; this function
14394    will return error_mark_node for any repeated substitution.
14395
14396    This also catches excessive recursion such as when f<N> depends on
14397    f<N-1> across all integers, and returns error_mark_node for all the
14398    substitutions back up to the initial one.
14399
14400    This is, of course, not reentrant.  */
14401
14402 static tree
14403 deduction_tsubst_fntype (tree fn, tree targs, tsubst_flags_t complain)
14404 {
14405   static bool excessive_deduction_depth;
14406   static int deduction_depth;
14407   struct pending_template *old_last_pend = last_pending_template;
14408   struct tinst_level *old_error_tinst = last_error_tinst_level;
14409
14410   tree fntype = TREE_TYPE (fn);
14411   tree tinst;
14412   tree r;
14413
14414   if (excessive_deduction_depth)
14415     return error_mark_node;
14416
14417   tinst = build_tree_list (fn, targs);
14418   if (!push_tinst_level (tinst))
14419     {
14420       excessive_deduction_depth = true;
14421       ggc_free (tinst);
14422       return error_mark_node;
14423     }
14424
14425   input_location = DECL_SOURCE_LOCATION (fn);
14426   ++deduction_depth;
14427   push_deduction_access_scope (fn);
14428   r = tsubst (fntype, targs, complain, NULL_TREE);
14429   pop_deduction_access_scope (fn);
14430   --deduction_depth;
14431
14432   if (excessive_deduction_depth)
14433     {
14434       r = error_mark_node;
14435       if (deduction_depth == 0)
14436         /* Reset once we're all the way out.  */
14437         excessive_deduction_depth = false;
14438     }
14439
14440   pop_tinst_level ();
14441   /* We can't free this if a pending_template entry or last_error_tinst_level
14442      is pointing at it.  */
14443   if (last_pending_template == old_last_pend
14444       && last_error_tinst_level == old_error_tinst)
14445     ggc_free (tinst);
14446   return r;
14447 }
14448
14449 /* Instantiate the indicated variable or function template TMPL with
14450    the template arguments in TARG_PTR.  */
14451
14452 static tree
14453 instantiate_template_1 (tree tmpl, tree orig_args, tsubst_flags_t complain)
14454 {
14455   tree targ_ptr = orig_args;
14456   tree fndecl;
14457   tree gen_tmpl;
14458   tree spec;
14459   HOST_WIDE_INT saved_processing_template_decl;
14460
14461   if (tmpl == error_mark_node)
14462     return error_mark_node;
14463
14464   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
14465
14466   /* If this function is a clone, handle it specially.  */
14467   if (DECL_CLONED_FUNCTION_P (tmpl))
14468     {
14469       tree spec;
14470       tree clone;
14471
14472       /* Use DECL_ABSTRACT_ORIGIN because only FUNCTION_DECLs have
14473          DECL_CLONED_FUNCTION.  */
14474       spec = instantiate_template (DECL_ABSTRACT_ORIGIN (tmpl),
14475                                    targ_ptr, complain);
14476       if (spec == error_mark_node)
14477         return error_mark_node;
14478
14479       /* Look for the clone.  */
14480       FOR_EACH_CLONE (clone, spec)
14481         if (DECL_NAME (clone) == DECL_NAME (tmpl))
14482           return clone;
14483       /* We should always have found the clone by now.  */
14484       gcc_unreachable ();
14485       return NULL_TREE;
14486     }
14487
14488   /* Check to see if we already have this specialization.  */
14489   gen_tmpl = most_general_template (tmpl);
14490   if (tmpl != gen_tmpl)
14491     /* The TMPL is a partial instantiation.  To get a full set of
14492        arguments we must add the arguments used to perform the
14493        partial instantiation.  */
14494     targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
14495                                             targ_ptr);
14496
14497   /* It would be nice to avoid hashing here and then again in tsubst_decl,
14498      but it doesn't seem to be on the hot path.  */
14499   spec = retrieve_specialization (gen_tmpl, targ_ptr, 0);
14500
14501   gcc_assert (tmpl == gen_tmpl
14502               || ((fndecl = retrieve_specialization (tmpl, orig_args, 0))
14503                   == spec)
14504               || fndecl == NULL_TREE);
14505
14506   if (spec != NULL_TREE)
14507     return spec;
14508
14509   if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
14510                                complain))
14511     return error_mark_node;
14512
14513   /* We are building a FUNCTION_DECL, during which the access of its
14514      parameters and return types have to be checked.  However this
14515      FUNCTION_DECL which is the desired context for access checking
14516      is not built yet.  We solve this chicken-and-egg problem by
14517      deferring all checks until we have the FUNCTION_DECL.  */
14518   push_deferring_access_checks (dk_deferred);
14519
14520   /* Although PROCESSING_TEMPLATE_DECL may be true at this point
14521      (because, for example, we have encountered a non-dependent
14522      function call in the body of a template function and must now
14523      determine which of several overloaded functions will be called),
14524      within the instantiation itself we are not processing a
14525      template.  */  
14526   saved_processing_template_decl = processing_template_decl;
14527   processing_template_decl = 0;
14528   /* Substitute template parameters to obtain the specialization.  */
14529   fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
14530                    targ_ptr, complain, gen_tmpl);
14531   processing_template_decl = saved_processing_template_decl;
14532   if (fndecl == error_mark_node)
14533     return error_mark_node;
14534
14535   /* Now we know the specialization, compute access previously
14536      deferred.  */
14537   push_access_scope (fndecl);
14538
14539   /* Some typedefs referenced from within the template code need to be access
14540      checked at template instantiation time, i.e now. These types were
14541      added to the template at parsing time. Let's get those and perfom
14542      the acces checks then.  */
14543   perform_typedefs_access_check (DECL_TEMPLATE_RESULT (tmpl), targ_ptr);
14544   perform_deferred_access_checks ();
14545   pop_access_scope (fndecl);
14546   pop_deferring_access_checks ();
14547
14548   /* The DECL_TI_TEMPLATE should always be the immediate parent
14549      template, not the most general template.  */
14550   DECL_TI_TEMPLATE (fndecl) = tmpl;
14551
14552   /* If we've just instantiated the main entry point for a function,
14553      instantiate all the alternate entry points as well.  We do this
14554      by cloning the instantiation of the main entry point, not by
14555      instantiating the template clones.  */
14556   if (DECL_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (DECL_CHAIN (gen_tmpl)))
14557     clone_function_decl (fndecl, /*update_method_vec_p=*/0);
14558
14559   return fndecl;
14560 }
14561
14562 /* Wrapper for instantiate_template_1.  */
14563
14564 tree
14565 instantiate_template (tree tmpl, tree orig_args, tsubst_flags_t complain)
14566 {
14567   tree ret;
14568   timevar_push (TV_TEMPLATE_INST);
14569   ret = instantiate_template_1 (tmpl, orig_args,  complain);
14570   timevar_pop (TV_TEMPLATE_INST);
14571   return ret;
14572 }
14573
14574 /* We're going to do deduction substitution on the type of TMPL, a function
14575    template.  In C++11 mode, push into that access scope.  In C++03 mode,
14576    disable access checking.  */
14577
14578 static void
14579 push_deduction_access_scope (tree tmpl)
14580 {
14581   if (cxx_dialect >= cxx0x)
14582     {
14583       int ptd = processing_template_decl;
14584       push_access_scope (DECL_TEMPLATE_RESULT (tmpl));
14585       /* Preserve processing_template_decl across push_to_top_level.  */
14586       if (ptd && !processing_template_decl)
14587         ++processing_template_decl;
14588     }
14589   else
14590     push_deferring_access_checks (dk_no_check);
14591 }
14592
14593 /* And pop back out.  */
14594
14595 static void
14596 pop_deduction_access_scope (tree tmpl)
14597 {
14598   if (cxx_dialect >= cxx0x)
14599     pop_access_scope (DECL_TEMPLATE_RESULT (tmpl));
14600   else
14601     pop_deferring_access_checks ();
14602 }
14603
14604 /* PARM is a template parameter pack for FN.  Returns true iff
14605    PARM is used in a deducible way in the argument list of FN.  */
14606
14607 static bool
14608 pack_deducible_p (tree parm, tree fn)
14609 {
14610   tree t = FUNCTION_FIRST_USER_PARMTYPE (fn);
14611   for (; t; t = TREE_CHAIN (t))
14612     {
14613       tree type = TREE_VALUE (t);
14614       tree packs;
14615       if (!PACK_EXPANSION_P (type))
14616         continue;
14617       for (packs = PACK_EXPANSION_PARAMETER_PACKS (type);
14618            packs; packs = TREE_CHAIN (packs))
14619         if (TREE_VALUE (packs) == parm)
14620           {
14621             /* The template parameter pack is used in a function parameter
14622                pack.  If this is the end of the parameter list, the
14623                template parameter pack is deducible.  */
14624             if (TREE_CHAIN (t) == void_list_node)
14625               return true;
14626             else
14627               /* Otherwise, not.  Well, it could be deduced from
14628                  a non-pack parameter, but doing so would end up with
14629                  a deduction mismatch, so don't bother.  */
14630               return false;
14631           }
14632     }
14633   /* The template parameter pack isn't used in any function parameter
14634      packs, but it might be used deeper, e.g. tuple<Args...>.  */
14635   return true;
14636 }
14637
14638 /* The FN is a TEMPLATE_DECL for a function.  ARGS is an array with
14639    NARGS elements of the arguments that are being used when calling
14640    it.  TARGS is a vector into which the deduced template arguments
14641    are placed.
14642
14643    Return zero for success, 2 for an incomplete match that doesn't resolve
14644    all the types, and 1 for complete failure.  An error message will be
14645    printed only for an incomplete match.
14646
14647    If FN is a conversion operator, or we are trying to produce a specific
14648    specialization, RETURN_TYPE is the return type desired.
14649
14650    The EXPLICIT_TARGS are explicit template arguments provided via a
14651    template-id.
14652
14653    The parameter STRICT is one of:
14654
14655    DEDUCE_CALL:
14656      We are deducing arguments for a function call, as in
14657      [temp.deduct.call].
14658
14659    DEDUCE_CONV:
14660      We are deducing arguments for a conversion function, as in
14661      [temp.deduct.conv].
14662
14663    DEDUCE_EXACT:
14664      We are deducing arguments when doing an explicit instantiation
14665      as in [temp.explicit], when determining an explicit specialization
14666      as in [temp.expl.spec], or when taking the address of a function
14667      template, as in [temp.deduct.funcaddr].  */
14668
14669 int
14670 fn_type_unification (tree fn,
14671                      tree explicit_targs,
14672                      tree targs,
14673                      const tree *args,
14674                      unsigned int nargs,
14675                      tree return_type,
14676                      unification_kind_t strict,
14677                      int flags,
14678                      bool explain_p)
14679 {
14680   tree parms;
14681   tree fntype;
14682   int result;
14683
14684   gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
14685
14686   fntype = TREE_TYPE (fn);
14687   if (explicit_targs)
14688     {
14689       /* [temp.deduct]
14690
14691          The specified template arguments must match the template
14692          parameters in kind (i.e., type, nontype, template), and there
14693          must not be more arguments than there are parameters;
14694          otherwise type deduction fails.
14695
14696          Nontype arguments must match the types of the corresponding
14697          nontype template parameters, or must be convertible to the
14698          types of the corresponding nontype parameters as specified in
14699          _temp.arg.nontype_, otherwise type deduction fails.
14700
14701          All references in the function type of the function template
14702          to the corresponding template parameters are replaced by the
14703          specified template argument values.  If a substitution in a
14704          template parameter or in the function type of the function
14705          template results in an invalid type, type deduction fails.  */
14706       tree tparms = DECL_INNERMOST_TEMPLATE_PARMS (fn);
14707       int i, len = TREE_VEC_LENGTH (tparms);
14708       tree converted_args;
14709       bool incomplete = false;
14710
14711       if (explicit_targs == error_mark_node)
14712         return unify_invalid (explain_p);
14713
14714       converted_args
14715         = (coerce_template_parms (tparms, explicit_targs, NULL_TREE,
14716                                   (explain_p
14717                                    ? tf_warning_or_error
14718                                    : tf_none),
14719                                    /*require_all_args=*/false,
14720                                    /*use_default_args=*/false));
14721       if (converted_args == error_mark_node)
14722         return 1;
14723
14724       /* Substitute the explicit args into the function type.  This is
14725          necessary so that, for instance, explicitly declared function
14726          arguments can match null pointed constants.  If we were given
14727          an incomplete set of explicit args, we must not do semantic
14728          processing during substitution as we could create partial
14729          instantiations.  */
14730       for (i = 0; i < len; i++)
14731         {
14732           tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
14733           bool parameter_pack = false;
14734           tree targ = TREE_VEC_ELT (converted_args, i);
14735
14736           /* Dig out the actual parm.  */
14737           if (TREE_CODE (parm) == TYPE_DECL
14738               || TREE_CODE (parm) == TEMPLATE_DECL)
14739             {
14740               parm = TREE_TYPE (parm);
14741               parameter_pack = TEMPLATE_TYPE_PARAMETER_PACK (parm);
14742             }
14743           else if (TREE_CODE (parm) == PARM_DECL)
14744             {
14745               parm = DECL_INITIAL (parm);
14746               parameter_pack = TEMPLATE_PARM_PARAMETER_PACK (parm);
14747             }
14748
14749           if (!parameter_pack && targ == NULL_TREE)
14750             /* No explicit argument for this template parameter.  */
14751             incomplete = true;
14752
14753           if (parameter_pack && pack_deducible_p (parm, fn))
14754             {
14755               /* Mark the argument pack as "incomplete". We could
14756                  still deduce more arguments during unification.
14757                  We remove this mark in type_unification_real.  */
14758               if (targ)
14759                 {
14760                   ARGUMENT_PACK_INCOMPLETE_P(targ) = 1;
14761                   ARGUMENT_PACK_EXPLICIT_ARGS (targ) 
14762                     = ARGUMENT_PACK_ARGS (targ);
14763                 }
14764
14765               /* We have some incomplete argument packs.  */
14766               incomplete = true;
14767             }
14768         }
14769
14770       processing_template_decl += incomplete;
14771       fntype = deduction_tsubst_fntype (fn, converted_args,
14772                                         (explain_p
14773                                          ? tf_warning_or_error
14774                                          : tf_none));
14775       processing_template_decl -= incomplete;
14776
14777       if (fntype == error_mark_node)
14778         return 1;
14779
14780       /* Place the explicitly specified arguments in TARGS.  */
14781       for (i = NUM_TMPL_ARGS (converted_args); i--;)
14782         TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
14783     }
14784
14785   /* Never do unification on the 'this' parameter.  */
14786   parms = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (fntype));
14787
14788   if (return_type)
14789     {
14790       tree *new_args;
14791
14792       parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
14793       new_args = XALLOCAVEC (tree, nargs + 1);
14794       new_args[0] = return_type;
14795       memcpy (new_args + 1, args, nargs * sizeof (tree));
14796       args = new_args;
14797       ++nargs;
14798     }
14799
14800   /* We allow incomplete unification without an error message here
14801      because the standard doesn't seem to explicitly prohibit it.  Our
14802      callers must be ready to deal with unification failures in any
14803      event.  */
14804   result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
14805                                   targs, parms, args, nargs, /*subr=*/0,
14806                                   strict, flags, explain_p);
14807
14808   /* Now that we have bindings for all of the template arguments,
14809      ensure that the arguments deduced for the template template
14810      parameters have compatible template parameter lists.  We cannot
14811      check this property before we have deduced all template
14812      arguments, because the template parameter types of a template
14813      template parameter might depend on prior template parameters
14814      deduced after the template template parameter.  The following
14815      ill-formed example illustrates this issue:
14816
14817        template<typename T, template<T> class C> void f(C<5>, T);
14818
14819        template<int N> struct X {};
14820
14821        void g() {
14822          f(X<5>(), 5l); // error: template argument deduction fails
14823        }
14824
14825      The template parameter list of 'C' depends on the template type
14826      parameter 'T', but 'C' is deduced to 'X' before 'T' is deduced to
14827      'long'.  Thus, we can't check that 'C' cannot bind to 'X' at the
14828      time that we deduce 'C'.  */
14829   if (result == 0
14830       && !template_template_parm_bindings_ok_p 
14831            (DECL_INNERMOST_TEMPLATE_PARMS (fn), targs))
14832     return unify_inconsistent_template_template_parameters (explain_p);
14833
14834   if (result == 0)
14835     /* All is well so far.  Now, check:
14836
14837        [temp.deduct]
14838
14839        When all template arguments have been deduced, all uses of
14840        template parameters in nondeduced contexts are replaced with
14841        the corresponding deduced argument values.  If the
14842        substitution results in an invalid type, as described above,
14843        type deduction fails.  */
14844     {
14845       tree substed = deduction_tsubst_fntype (fn, targs,
14846                                               (explain_p
14847                                                ? tf_warning_or_error
14848                                                : tf_none));
14849       if (substed == error_mark_node)
14850         return 1;
14851
14852       /* If we're looking for an exact match, check that what we got
14853          is indeed an exact match.  It might not be if some template
14854          parameters are used in non-deduced contexts.  */
14855       if (strict == DEDUCE_EXACT)
14856         {
14857           unsigned int i;
14858
14859           tree sarg
14860             = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (substed));
14861           if (return_type)
14862             sarg = tree_cons (NULL_TREE, TREE_TYPE (substed), sarg);
14863           for (i = 0; i < nargs && sarg; ++i, sarg = TREE_CHAIN (sarg))
14864             if (!same_type_p (args[i], TREE_VALUE (sarg)))
14865               return unify_type_mismatch (explain_p, args[i],
14866                                           TREE_VALUE (sarg));
14867         }
14868     }
14869
14870   return result;
14871 }
14872
14873 /* Adjust types before performing type deduction, as described in
14874    [temp.deduct.call] and [temp.deduct.conv].  The rules in these two
14875    sections are symmetric.  PARM is the type of a function parameter
14876    or the return type of the conversion function.  ARG is the type of
14877    the argument passed to the call, or the type of the value
14878    initialized with the result of the conversion function.
14879    ARG_EXPR is the original argument expression, which may be null.  */
14880
14881 static int
14882 maybe_adjust_types_for_deduction (unification_kind_t strict,
14883                                   tree* parm,
14884                                   tree* arg,
14885                                   tree arg_expr)
14886 {
14887   int result = 0;
14888
14889   switch (strict)
14890     {
14891     case DEDUCE_CALL:
14892       break;
14893
14894     case DEDUCE_CONV:
14895       {
14896         /* Swap PARM and ARG throughout the remainder of this
14897            function; the handling is precisely symmetric since PARM
14898            will initialize ARG rather than vice versa.  */
14899         tree* temp = parm;
14900         parm = arg;
14901         arg = temp;
14902         break;
14903       }
14904
14905     case DEDUCE_EXACT:
14906       /* Core issue #873: Do the DR606 thing (see below) for these cases,
14907          too, but here handle it by stripping the reference from PARM
14908          rather than by adding it to ARG.  */
14909       if (TREE_CODE (*parm) == REFERENCE_TYPE
14910           && TYPE_REF_IS_RVALUE (*parm)
14911           && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
14912           && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
14913           && TREE_CODE (*arg) == REFERENCE_TYPE
14914           && !TYPE_REF_IS_RVALUE (*arg))
14915         *parm = TREE_TYPE (*parm);
14916       /* Nothing else to do in this case.  */
14917       return 0;
14918
14919     default:
14920       gcc_unreachable ();
14921     }
14922
14923   if (TREE_CODE (*parm) != REFERENCE_TYPE)
14924     {
14925       /* [temp.deduct.call]
14926
14927          If P is not a reference type:
14928
14929          --If A is an array type, the pointer type produced by the
14930          array-to-pointer standard conversion (_conv.array_) is
14931          used in place of A for type deduction; otherwise,
14932
14933          --If A is a function type, the pointer type produced by
14934          the function-to-pointer standard conversion
14935          (_conv.func_) is used in place of A for type deduction;
14936          otherwise,
14937
14938          --If A is a cv-qualified type, the top level
14939          cv-qualifiers of A's type are ignored for type
14940          deduction.  */
14941       if (TREE_CODE (*arg) == ARRAY_TYPE)
14942         *arg = build_pointer_type (TREE_TYPE (*arg));
14943       else if (TREE_CODE (*arg) == FUNCTION_TYPE)
14944         *arg = build_pointer_type (*arg);
14945       else
14946         *arg = TYPE_MAIN_VARIANT (*arg);
14947     }
14948
14949   /* From C++0x [14.8.2.1/3 temp.deduct.call] (after DR606), "If P is
14950      of the form T&&, where T is a template parameter, and the argument
14951      is an lvalue, T is deduced as A& */
14952   if (TREE_CODE (*parm) == REFERENCE_TYPE
14953       && TYPE_REF_IS_RVALUE (*parm)
14954       && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
14955       && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
14956       && (arg_expr ? real_lvalue_p (arg_expr)
14957           /* try_one_overload doesn't provide an arg_expr, but
14958              functions are always lvalues.  */
14959           : TREE_CODE (*arg) == FUNCTION_TYPE))
14960     *arg = build_reference_type (*arg);
14961
14962   /* [temp.deduct.call]
14963
14964      If P is a cv-qualified type, the top level cv-qualifiers
14965      of P's type are ignored for type deduction.  If P is a
14966      reference type, the type referred to by P is used for
14967      type deduction.  */
14968   *parm = TYPE_MAIN_VARIANT (*parm);
14969   if (TREE_CODE (*parm) == REFERENCE_TYPE)
14970     {
14971       *parm = TREE_TYPE (*parm);
14972       result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
14973     }
14974
14975   /* DR 322. For conversion deduction, remove a reference type on parm
14976      too (which has been swapped into ARG).  */
14977   if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
14978     *arg = TREE_TYPE (*arg);
14979
14980   return result;
14981 }
14982
14983 /* Subroutine of unify_one_argument.  PARM is a function parameter of a
14984    template which does contain any deducible template parameters; check if
14985    ARG is a suitable match for it.  STRICT, FLAGS and EXPLAIN_P are as in
14986    unify_one_argument.  */
14987
14988 static int
14989 check_non_deducible_conversion (tree parm, tree arg, int strict,
14990                                 int flags, bool explain_p)
14991 {
14992   tree type;
14993
14994   if (!TYPE_P (arg))
14995     type = TREE_TYPE (arg);
14996   else
14997     type = arg;
14998
14999   if (same_type_p (parm, type))
15000     return unify_success (explain_p);
15001
15002   if (strict == DEDUCE_CONV)
15003     {
15004       if (can_convert_arg (type, parm, NULL_TREE, flags))
15005         return unify_success (explain_p);
15006     }
15007   else if (strict != DEDUCE_EXACT)
15008     {
15009       if (can_convert_arg (parm, type,
15010                            TYPE_P (arg) ? NULL_TREE : arg,
15011                            flags))
15012         return unify_success (explain_p);
15013     }
15014
15015   if (strict == DEDUCE_EXACT)
15016     return unify_type_mismatch (explain_p, parm, arg);
15017   else
15018     return unify_arg_conversion (explain_p, parm, type, arg);
15019 }
15020
15021 /* Subroutine of type_unification_real and unify_pack_expansion to
15022    handle unification of a single P/A pair.  Parameters are as
15023    for those functions.  */
15024
15025 static int
15026 unify_one_argument (tree tparms, tree targs, tree parm, tree arg,
15027                     int subr, unification_kind_t strict, int flags,
15028                     bool explain_p)
15029 {
15030   tree arg_expr = NULL_TREE;
15031   int arg_strict;
15032
15033   if (arg == error_mark_node || parm == error_mark_node)
15034     return unify_invalid (explain_p);
15035   if (arg == unknown_type_node)
15036     /* We can't deduce anything from this, but we might get all the
15037        template args from other function args.  */
15038     return unify_success (explain_p);
15039
15040   /* FIXME uses_deducible_template_parms */
15041   if (TYPE_P (parm) && !uses_template_parms (parm))
15042     return check_non_deducible_conversion (parm, arg, strict, flags,
15043                                            explain_p);
15044
15045   switch (strict)
15046     {
15047     case DEDUCE_CALL:
15048       arg_strict = (UNIFY_ALLOW_OUTER_LEVEL
15049                     | UNIFY_ALLOW_MORE_CV_QUAL
15050                     | UNIFY_ALLOW_DERIVED);
15051       break;
15052
15053     case DEDUCE_CONV:
15054       arg_strict = UNIFY_ALLOW_LESS_CV_QUAL;
15055       break;
15056
15057     case DEDUCE_EXACT:
15058       arg_strict = UNIFY_ALLOW_NONE;
15059       break;
15060
15061     default:
15062       gcc_unreachable ();
15063     }
15064
15065   /* We only do these transformations if this is the top-level
15066      parameter_type_list in a call or declaration matching; in other
15067      situations (nested function declarators, template argument lists) we
15068      won't be comparing a type to an expression, and we don't do any type
15069      adjustments.  */
15070   if (!subr)
15071     {
15072       if (!TYPE_P (arg))
15073         {
15074           gcc_assert (TREE_TYPE (arg) != NULL_TREE);
15075           if (type_unknown_p (arg))
15076             {
15077               /* [temp.deduct.type] A template-argument can be
15078                  deduced from a pointer to function or pointer
15079                  to member function argument if the set of
15080                  overloaded functions does not contain function
15081                  templates and at most one of a set of
15082                  overloaded functions provides a unique
15083                  match.  */
15084
15085               if (resolve_overloaded_unification
15086                   (tparms, targs, parm, arg, strict,
15087                    arg_strict, explain_p))
15088                 return unify_success (explain_p);
15089               return unify_overload_resolution_failure (explain_p, arg);
15090             }
15091
15092           arg_expr = arg;
15093           arg = unlowered_expr_type (arg);
15094           if (arg == error_mark_node)
15095             return unify_invalid (explain_p);
15096         }
15097
15098       arg_strict |=
15099         maybe_adjust_types_for_deduction (strict, &parm, &arg, arg_expr);
15100     }
15101   else
15102     gcc_assert ((TYPE_P (parm) || TREE_CODE (parm) == TEMPLATE_DECL)
15103                 == (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL));
15104
15105   /* For deduction from an init-list we need the actual list.  */
15106   if (arg_expr && BRACE_ENCLOSED_INITIALIZER_P (arg_expr))
15107     arg = arg_expr;
15108   return unify (tparms, targs, parm, arg, arg_strict, explain_p);
15109 }
15110
15111 /* Most parms like fn_type_unification.
15112
15113    If SUBR is 1, we're being called recursively (to unify the
15114    arguments of a function or method parameter of a function
15115    template). */
15116
15117 static int
15118 type_unification_real (tree tparms,
15119                        tree targs,
15120                        tree xparms,
15121                        const tree *xargs,
15122                        unsigned int xnargs,
15123                        int subr,
15124                        unification_kind_t strict,
15125                        int flags,
15126                        bool explain_p)
15127 {
15128   tree parm, arg;
15129   int i;
15130   int ntparms = TREE_VEC_LENGTH (tparms);
15131   int saw_undeduced = 0;
15132   tree parms;
15133   const tree *args;
15134   unsigned int nargs;
15135   unsigned int ia;
15136
15137   gcc_assert (TREE_CODE (tparms) == TREE_VEC);
15138   gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
15139   gcc_assert (ntparms > 0);
15140
15141   /* Reset the number of non-defaulted template arguments contained
15142      in TARGS.  */
15143   NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs) = NULL_TREE;
15144
15145  again:
15146   parms = xparms;
15147   args = xargs;
15148   nargs = xnargs;
15149
15150   ia = 0;
15151   while (parms && parms != void_list_node
15152          && ia < nargs)
15153     {
15154       parm = TREE_VALUE (parms);
15155
15156       if (TREE_CODE (parm) == TYPE_PACK_EXPANSION
15157           && (!TREE_CHAIN (parms) || TREE_CHAIN (parms) == void_list_node))
15158         /* For a function parameter pack that occurs at the end of the
15159            parameter-declaration-list, the type A of each remaining
15160            argument of the call is compared with the type P of the
15161            declarator-id of the function parameter pack.  */
15162         break;
15163
15164       parms = TREE_CHAIN (parms);
15165
15166       if (TREE_CODE (parm) == TYPE_PACK_EXPANSION)
15167         /* For a function parameter pack that does not occur at the
15168            end of the parameter-declaration-list, the type of the
15169            parameter pack is a non-deduced context.  */
15170         continue;
15171
15172       arg = args[ia];
15173       ++ia;
15174
15175       if (unify_one_argument (tparms, targs, parm, arg, subr, strict,
15176                               flags, explain_p))
15177         return 1;
15178     }
15179
15180   if (parms 
15181       && parms != void_list_node
15182       && TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
15183     {
15184       /* Unify the remaining arguments with the pack expansion type.  */
15185       tree argvec;
15186       tree parmvec = make_tree_vec (1);
15187
15188       /* Allocate a TREE_VEC and copy in all of the arguments */ 
15189       argvec = make_tree_vec (nargs - ia);
15190       for (i = 0; ia < nargs; ++ia, ++i)
15191         TREE_VEC_ELT (argvec, i) = args[ia];
15192
15193       /* Copy the parameter into parmvec.  */
15194       TREE_VEC_ELT (parmvec, 0) = TREE_VALUE (parms);
15195       if (unify_pack_expansion (tparms, targs, parmvec, argvec, strict,
15196                                 /*subr=*/subr, explain_p))
15197         return 1;
15198
15199       /* Advance to the end of the list of parameters.  */
15200       parms = TREE_CHAIN (parms);
15201     }
15202
15203   /* Fail if we've reached the end of the parm list, and more args
15204      are present, and the parm list isn't variadic.  */
15205   if (ia < nargs && parms == void_list_node)
15206     return unify_too_many_arguments (explain_p, nargs, ia);
15207   /* Fail if parms are left and they don't have default values.  */
15208   if (parms && parms != void_list_node
15209       && TREE_PURPOSE (parms) == NULL_TREE)
15210     {
15211       unsigned int count = nargs;
15212       tree p = parms;
15213       while (p && p != void_list_node)
15214         {
15215           count++;
15216           p = TREE_CHAIN (p);
15217         }
15218       return unify_too_few_arguments (explain_p, ia, count);
15219     }
15220
15221   if (!subr)
15222     {
15223       tsubst_flags_t complain = (explain_p
15224                                  ? tf_warning_or_error
15225                                  : tf_none);
15226
15227       /* Check to see if we need another pass before we start clearing
15228          ARGUMENT_PACK_INCOMPLETE_P.  */
15229       for (i = 0; i < ntparms; i++)
15230         {
15231           tree targ = TREE_VEC_ELT (targs, i);
15232           tree tparm = TREE_VEC_ELT (tparms, i);
15233
15234           if (targ || tparm == error_mark_node)
15235             continue;
15236           tparm = TREE_VALUE (tparm);
15237
15238           /* If this is an undeduced nontype parameter that depends on
15239              a type parameter, try another pass; its type may have been
15240              deduced from a later argument than the one from which
15241              this parameter can be deduced.  */
15242           if (TREE_CODE (tparm) == PARM_DECL
15243               && uses_template_parms (TREE_TYPE (tparm))
15244               && !saw_undeduced++)
15245             goto again;
15246         }
15247
15248       for (i = 0; i < ntparms; i++)
15249         {
15250           tree targ = TREE_VEC_ELT (targs, i);
15251           tree tparm = TREE_VEC_ELT (tparms, i);
15252
15253           /* Clear the "incomplete" flags on all argument packs now so that
15254              substituting them into later default arguments works.  */
15255           if (targ && ARGUMENT_PACK_P (targ))
15256             {
15257               ARGUMENT_PACK_INCOMPLETE_P (targ) = 0;
15258               ARGUMENT_PACK_EXPLICIT_ARGS (targ) = NULL_TREE;
15259             }
15260
15261           if (targ || tparm == error_mark_node)
15262             continue;
15263           tparm = TREE_VALUE (tparm);
15264
15265           /* Core issue #226 (C++0x) [temp.deduct]:
15266
15267              If a template argument has not been deduced, its
15268              default template argument, if any, is used. 
15269
15270              When we are in C++98 mode, TREE_PURPOSE will either
15271              be NULL_TREE or ERROR_MARK_NODE, so we do not need
15272              to explicitly check cxx_dialect here.  */
15273           if (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)))
15274             {
15275               tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
15276               tree arg = TREE_PURPOSE (TREE_VEC_ELT (tparms, i));
15277               location_t save_loc = input_location;
15278               if (DECL_P (parm))
15279                 input_location = DECL_SOURCE_LOCATION (parm);
15280               arg = tsubst_template_arg (arg, targs, complain, NULL_TREE);
15281               arg = convert_template_argument (parm, arg, targs, complain,
15282                                                i, NULL_TREE);
15283               input_location = save_loc;
15284               if (arg == error_mark_node)
15285                 return 1;
15286               else
15287                 {
15288                   TREE_VEC_ELT (targs, i) = arg;
15289                   /* The position of the first default template argument,
15290                      is also the number of non-defaulted arguments in TARGS.
15291                      Record that.  */
15292                   if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
15293                     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, i);
15294                   continue;
15295                 }
15296             }
15297
15298           /* If the type parameter is a parameter pack, then it will
15299              be deduced to an empty parameter pack.  */
15300           if (template_parameter_pack_p (tparm))
15301             {
15302               tree arg;
15303
15304               if (TREE_CODE (tparm) == TEMPLATE_PARM_INDEX)
15305                 {
15306                   arg = make_node (NONTYPE_ARGUMENT_PACK);
15307                   TREE_TYPE (arg)  = TREE_TYPE (TEMPLATE_PARM_DECL (tparm));
15308                   TREE_CONSTANT (arg) = 1;
15309                 }
15310               else
15311                 arg = cxx_make_type (TYPE_ARGUMENT_PACK);
15312
15313               SET_ARGUMENT_PACK_ARGS (arg, make_tree_vec (0));
15314
15315               TREE_VEC_ELT (targs, i) = arg;
15316               continue;
15317             }
15318
15319           return unify_parameter_deduction_failure (explain_p, tparm);
15320         }
15321     }
15322 #ifdef ENABLE_CHECKING
15323   if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
15324     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, TREE_VEC_LENGTH (targs));
15325 #endif
15326
15327   return unify_success (explain_p);
15328 }
15329
15330 /* Subroutine of type_unification_real.  Args are like the variables
15331    at the call site.  ARG is an overloaded function (or template-id);
15332    we try deducing template args from each of the overloads, and if
15333    only one succeeds, we go with that.  Modifies TARGS and returns
15334    true on success.  */
15335
15336 static bool
15337 resolve_overloaded_unification (tree tparms,
15338                                 tree targs,
15339                                 tree parm,
15340                                 tree arg,
15341                                 unification_kind_t strict,
15342                                 int sub_strict,
15343                                 bool explain_p)
15344 {
15345   tree tempargs = copy_node (targs);
15346   int good = 0;
15347   tree goodfn = NULL_TREE;
15348   bool addr_p;
15349
15350   if (TREE_CODE (arg) == ADDR_EXPR)
15351     {
15352       arg = TREE_OPERAND (arg, 0);
15353       addr_p = true;
15354     }
15355   else
15356     addr_p = false;
15357
15358   if (TREE_CODE (arg) == COMPONENT_REF)
15359     /* Handle `&x' where `x' is some static or non-static member
15360        function name.  */
15361     arg = TREE_OPERAND (arg, 1);
15362
15363   if (TREE_CODE (arg) == OFFSET_REF)
15364     arg = TREE_OPERAND (arg, 1);
15365
15366   /* Strip baselink information.  */
15367   if (BASELINK_P (arg))
15368     arg = BASELINK_FUNCTIONS (arg);
15369
15370   if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
15371     {
15372       /* If we got some explicit template args, we need to plug them into
15373          the affected templates before we try to unify, in case the
15374          explicit args will completely resolve the templates in question.  */
15375
15376       int ok = 0;
15377       tree expl_subargs = TREE_OPERAND (arg, 1);
15378       arg = TREE_OPERAND (arg, 0);
15379
15380       for (; arg; arg = OVL_NEXT (arg))
15381         {
15382           tree fn = OVL_CURRENT (arg);
15383           tree subargs, elem;
15384
15385           if (TREE_CODE (fn) != TEMPLATE_DECL)
15386             continue;
15387
15388           ++processing_template_decl;
15389           subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
15390                                   expl_subargs, /*check_ret=*/false);
15391           if (subargs && !any_dependent_template_arguments_p (subargs))
15392             {
15393               elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
15394               if (try_one_overload (tparms, targs, tempargs, parm,
15395                                     elem, strict, sub_strict, addr_p, explain_p)
15396                   && (!goodfn || !decls_match (goodfn, elem)))
15397                 {
15398                   goodfn = elem;
15399                   ++good;
15400                 }
15401             }
15402           else if (subargs)
15403             ++ok;
15404           --processing_template_decl;
15405         }
15406       /* If no templates (or more than one) are fully resolved by the
15407          explicit arguments, this template-id is a non-deduced context; it
15408          could still be OK if we deduce all template arguments for the
15409          enclosing call through other arguments.  */
15410       if (good != 1)
15411         good = ok;
15412     }
15413   else if (TREE_CODE (arg) != OVERLOAD
15414            && TREE_CODE (arg) != FUNCTION_DECL)
15415     /* If ARG is, for example, "(0, &f)" then its type will be unknown
15416        -- but the deduction does not succeed because the expression is
15417        not just the function on its own.  */
15418     return false;
15419   else
15420     for (; arg; arg = OVL_NEXT (arg))
15421       if (try_one_overload (tparms, targs, tempargs, parm,
15422                             TREE_TYPE (OVL_CURRENT (arg)),
15423                             strict, sub_strict, addr_p, explain_p)
15424           && (!goodfn || !decls_match (goodfn, OVL_CURRENT (arg))))
15425         {
15426           goodfn = OVL_CURRENT (arg);
15427           ++good;
15428         }
15429
15430   /* [temp.deduct.type] A template-argument can be deduced from a pointer
15431      to function or pointer to member function argument if the set of
15432      overloaded functions does not contain function templates and at most
15433      one of a set of overloaded functions provides a unique match.
15434
15435      So if we found multiple possibilities, we return success but don't
15436      deduce anything.  */
15437
15438   if (good == 1)
15439     {
15440       int i = TREE_VEC_LENGTH (targs);
15441       for (; i--; )
15442         if (TREE_VEC_ELT (tempargs, i))
15443           TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
15444     }
15445   if (good)
15446     return true;
15447
15448   return false;
15449 }
15450
15451 /* Core DR 115: In contexts where deduction is done and fails, or in
15452    contexts where deduction is not done, if a template argument list is
15453    specified and it, along with any default template arguments, identifies
15454    a single function template specialization, then the template-id is an
15455    lvalue for the function template specialization.  */
15456
15457 tree
15458 resolve_nondeduced_context (tree orig_expr)
15459 {
15460   tree expr, offset, baselink;
15461   bool addr;
15462
15463   if (!type_unknown_p (orig_expr))
15464     return orig_expr;
15465
15466   expr = orig_expr;
15467   addr = false;
15468   offset = NULL_TREE;
15469   baselink = NULL_TREE;
15470
15471   if (TREE_CODE (expr) == ADDR_EXPR)
15472     {
15473       expr = TREE_OPERAND (expr, 0);
15474       addr = true;
15475     }
15476   if (TREE_CODE (expr) == OFFSET_REF)
15477     {
15478       offset = expr;
15479       expr = TREE_OPERAND (expr, 1);
15480     }
15481   if (BASELINK_P (expr))
15482     {
15483       baselink = expr;
15484       expr = BASELINK_FUNCTIONS (expr);
15485     }
15486
15487   if (TREE_CODE (expr) == TEMPLATE_ID_EXPR)
15488     {
15489       int good = 0;
15490       tree goodfn = NULL_TREE;
15491
15492       /* If we got some explicit template args, we need to plug them into
15493          the affected templates before we try to unify, in case the
15494          explicit args will completely resolve the templates in question.  */
15495
15496       tree expl_subargs = TREE_OPERAND (expr, 1);
15497       tree arg = TREE_OPERAND (expr, 0);
15498       tree badfn = NULL_TREE;
15499       tree badargs = NULL_TREE;
15500
15501       for (; arg; arg = OVL_NEXT (arg))
15502         {
15503           tree fn = OVL_CURRENT (arg);
15504           tree subargs, elem;
15505
15506           if (TREE_CODE (fn) != TEMPLATE_DECL)
15507             continue;
15508
15509           ++processing_template_decl;
15510           subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
15511                                   expl_subargs, /*check_ret=*/false);
15512           if (subargs && !any_dependent_template_arguments_p (subargs))
15513             {
15514               elem = instantiate_template (fn, subargs, tf_none);
15515               if (elem == error_mark_node)
15516                 {
15517                   badfn = fn;
15518                   badargs = subargs;
15519                 }
15520               else if (elem && (!goodfn || !decls_match (goodfn, elem)))
15521                 {
15522                   goodfn = elem;
15523                   ++good;
15524                 }
15525             }
15526           --processing_template_decl;
15527         }
15528       if (good == 1)
15529         {
15530           mark_used (goodfn);
15531           expr = goodfn;
15532           if (baselink)
15533             expr = build_baselink (BASELINK_BINFO (baselink),
15534                                    BASELINK_ACCESS_BINFO (baselink),
15535                                    expr, BASELINK_OPTYPE (baselink));
15536           if (offset)
15537             {
15538               tree base
15539                 = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (offset, 0)));
15540               expr = build_offset_ref (base, expr, addr);
15541             }
15542           if (addr)
15543             expr = cp_build_addr_expr (expr, tf_warning_or_error);
15544           return expr;
15545         }
15546       else if (good == 0 && badargs)
15547         /* There were no good options and at least one bad one, so let the
15548            user know what the problem is.  */
15549         instantiate_template (badfn, badargs, tf_warning_or_error);
15550     }
15551   return orig_expr;
15552 }
15553
15554 /* Subroutine of resolve_overloaded_unification; does deduction for a single
15555    overload.  Fills TARGS with any deduced arguments, or error_mark_node if
15556    different overloads deduce different arguments for a given parm.
15557    ADDR_P is true if the expression for which deduction is being
15558    performed was of the form "& fn" rather than simply "fn".
15559
15560    Returns 1 on success.  */
15561
15562 static int
15563 try_one_overload (tree tparms,
15564                   tree orig_targs,
15565                   tree targs,
15566                   tree parm,
15567                   tree arg,
15568                   unification_kind_t strict,
15569                   int sub_strict,
15570                   bool addr_p,
15571                   bool explain_p)
15572 {
15573   int nargs;
15574   tree tempargs;
15575   int i;
15576
15577   /* [temp.deduct.type] A template-argument can be deduced from a pointer
15578      to function or pointer to member function argument if the set of
15579      overloaded functions does not contain function templates and at most
15580      one of a set of overloaded functions provides a unique match.
15581
15582      So if this is a template, just return success.  */
15583
15584   if (uses_template_parms (arg))
15585     return 1;
15586
15587   if (TREE_CODE (arg) == METHOD_TYPE)
15588     arg = build_ptrmemfunc_type (build_pointer_type (arg));
15589   else if (addr_p)
15590     arg = build_pointer_type (arg);
15591
15592   sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
15593
15594   /* We don't copy orig_targs for this because if we have already deduced
15595      some template args from previous args, unify would complain when we
15596      try to deduce a template parameter for the same argument, even though
15597      there isn't really a conflict.  */
15598   nargs = TREE_VEC_LENGTH (targs);
15599   tempargs = make_tree_vec (nargs);
15600
15601   if (unify (tparms, tempargs, parm, arg, sub_strict, explain_p))
15602     return 0;
15603
15604   /* First make sure we didn't deduce anything that conflicts with
15605      explicitly specified args.  */
15606   for (i = nargs; i--; )
15607     {
15608       tree elt = TREE_VEC_ELT (tempargs, i);
15609       tree oldelt = TREE_VEC_ELT (orig_targs, i);
15610
15611       if (!elt)
15612         /*NOP*/;
15613       else if (uses_template_parms (elt))
15614         /* Since we're unifying against ourselves, we will fill in
15615            template args used in the function parm list with our own
15616            template parms.  Discard them.  */
15617         TREE_VEC_ELT (tempargs, i) = NULL_TREE;
15618       else if (oldelt && !template_args_equal (oldelt, elt))
15619         return 0;
15620     }
15621
15622   for (i = nargs; i--; )
15623     {
15624       tree elt = TREE_VEC_ELT (tempargs, i);
15625
15626       if (elt)
15627         TREE_VEC_ELT (targs, i) = elt;
15628     }
15629
15630   return 1;
15631 }
15632
15633 /* PARM is a template class (perhaps with unbound template
15634    parameters).  ARG is a fully instantiated type.  If ARG can be
15635    bound to PARM, return ARG, otherwise return NULL_TREE.  TPARMS and
15636    TARGS are as for unify.  */
15637
15638 static tree
15639 try_class_unification (tree tparms, tree targs, tree parm, tree arg,
15640                        bool explain_p)
15641 {
15642   tree copy_of_targs;
15643
15644   if (!CLASSTYPE_TEMPLATE_INFO (arg)
15645       || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
15646           != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
15647     return NULL_TREE;
15648
15649   /* We need to make a new template argument vector for the call to
15650      unify.  If we used TARGS, we'd clutter it up with the result of
15651      the attempted unification, even if this class didn't work out.
15652      We also don't want to commit ourselves to all the unifications
15653      we've already done, since unification is supposed to be done on
15654      an argument-by-argument basis.  In other words, consider the
15655      following pathological case:
15656
15657        template <int I, int J, int K>
15658        struct S {};
15659
15660        template <int I, int J>
15661        struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
15662
15663        template <int I, int J, int K>
15664        void f(S<I, J, K>, S<I, I, I>);
15665
15666        void g() {
15667          S<0, 0, 0> s0;
15668          S<0, 1, 2> s2;
15669
15670          f(s0, s2);
15671        }
15672
15673      Now, by the time we consider the unification involving `s2', we
15674      already know that we must have `f<0, 0, 0>'.  But, even though
15675      `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
15676      because there are two ways to unify base classes of S<0, 1, 2>
15677      with S<I, I, I>.  If we kept the already deduced knowledge, we
15678      would reject the possibility I=1.  */
15679   copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
15680
15681   /* If unification failed, we're done.  */
15682   if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
15683              CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE, explain_p))
15684     return NULL_TREE;
15685
15686   return arg;
15687 }
15688
15689 /* Given a template type PARM and a class type ARG, find the unique
15690    base type in ARG that is an instance of PARM.  We do not examine
15691    ARG itself; only its base-classes.  If there is not exactly one
15692    appropriate base class, return NULL_TREE.  PARM may be the type of
15693    a partial specialization, as well as a plain template type.  Used
15694    by unify.  */
15695
15696 static enum template_base_result
15697 get_template_base (tree tparms, tree targs, tree parm, tree arg,
15698                    bool explain_p, tree *result)
15699 {
15700   tree rval = NULL_TREE;
15701   tree binfo;
15702
15703   gcc_assert (RECORD_OR_UNION_CODE_P (TREE_CODE (arg)));
15704
15705   binfo = TYPE_BINFO (complete_type (arg));
15706   if (!binfo)
15707     {
15708       /* The type could not be completed.  */
15709       *result = NULL_TREE;
15710       return tbr_incomplete_type;
15711     }
15712
15713   /* Walk in inheritance graph order.  The search order is not
15714      important, and this avoids multiple walks of virtual bases.  */
15715   for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
15716     {
15717       tree r = try_class_unification (tparms, targs, parm,
15718                                       BINFO_TYPE (binfo), explain_p);
15719
15720       if (r)
15721         {
15722           /* If there is more than one satisfactory baseclass, then:
15723
15724                [temp.deduct.call]
15725
15726               If they yield more than one possible deduced A, the type
15727               deduction fails.
15728
15729              applies.  */
15730           if (rval && !same_type_p (r, rval))
15731             {
15732               *result = NULL_TREE;
15733               return tbr_ambiguous_baseclass;
15734             }
15735
15736           rval = r;
15737         }
15738     }
15739
15740   *result = rval;
15741   return tbr_success;
15742 }
15743
15744 /* Returns the level of DECL, which declares a template parameter.  */
15745
15746 static int
15747 template_decl_level (tree decl)
15748 {
15749   switch (TREE_CODE (decl))
15750     {
15751     case TYPE_DECL:
15752     case TEMPLATE_DECL:
15753       return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
15754
15755     case PARM_DECL:
15756       return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
15757
15758     default:
15759       gcc_unreachable ();
15760     }
15761   return 0;
15762 }
15763
15764 /* Decide whether ARG can be unified with PARM, considering only the
15765    cv-qualifiers of each type, given STRICT as documented for unify.
15766    Returns nonzero iff the unification is OK on that basis.  */
15767
15768 static int
15769 check_cv_quals_for_unify (int strict, tree arg, tree parm)
15770 {
15771   int arg_quals = cp_type_quals (arg);
15772   int parm_quals = cp_type_quals (parm);
15773
15774   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
15775       && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
15776     {
15777       /*  Although a CVR qualifier is ignored when being applied to a
15778           substituted template parameter ([8.3.2]/1 for example), that
15779           does not allow us to unify "const T" with "int&" because both
15780           types are not of the form "cv-list T" [14.8.2.5 temp.deduct.type].
15781           It is ok when we're allowing additional CV qualifiers
15782           at the outer level [14.8.2.1]/3,1st bullet.  */
15783       if ((TREE_CODE (arg) == REFERENCE_TYPE
15784            || TREE_CODE (arg) == FUNCTION_TYPE
15785            || TREE_CODE (arg) == METHOD_TYPE)
15786           && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
15787         return 0;
15788
15789       if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
15790           && (parm_quals & TYPE_QUAL_RESTRICT))
15791         return 0;
15792     }
15793
15794   if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
15795       && (arg_quals & parm_quals) != parm_quals)
15796     return 0;
15797
15798   if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
15799       && (parm_quals & arg_quals) != arg_quals)
15800     return 0;
15801
15802   return 1;
15803 }
15804
15805 /* Determines the LEVEL and INDEX for the template parameter PARM.  */
15806 void 
15807 template_parm_level_and_index (tree parm, int* level, int* index)
15808 {
15809   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
15810       || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
15811       || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
15812     {
15813       *index = TEMPLATE_TYPE_IDX (parm);
15814       *level = TEMPLATE_TYPE_LEVEL (parm);
15815     }
15816   else
15817     {
15818       *index = TEMPLATE_PARM_IDX (parm);
15819       *level = TEMPLATE_PARM_LEVEL (parm);
15820     }
15821 }
15822
15823 #define RECUR_AND_CHECK_FAILURE(TP, TA, P, A, S, EP)                    \
15824   do {                                                                  \
15825     if (unify (TP, TA, P, A, S, EP))                                    \
15826       return 1;                                                         \
15827   } while (0);
15828
15829 /* Unifies the remaining arguments in PACKED_ARGS with the pack
15830    expansion at the end of PACKED_PARMS. Returns 0 if the type
15831    deduction succeeds, 1 otherwise. STRICT is the same as in
15832    unify. CALL_ARGS_P is true iff PACKED_ARGS is actually a function
15833    call argument list. We'll need to adjust the arguments to make them
15834    types. SUBR tells us if this is from a recursive call to
15835    type_unification_real, or for comparing two template argument
15836    lists. */
15837
15838 static int
15839 unify_pack_expansion (tree tparms, tree targs, tree packed_parms, 
15840                       tree packed_args, unification_kind_t strict,
15841                       bool subr, bool explain_p)
15842 {
15843   tree parm 
15844     = TREE_VEC_ELT (packed_parms, TREE_VEC_LENGTH (packed_parms) - 1);
15845   tree pattern = PACK_EXPANSION_PATTERN (parm);
15846   tree pack, packs = NULL_TREE;
15847   int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
15848   int len = TREE_VEC_LENGTH (packed_args);
15849
15850   /* Determine the parameter packs we will be deducing from the
15851      pattern, and record their current deductions.  */
15852   for (pack = PACK_EXPANSION_PARAMETER_PACKS (parm); 
15853        pack; pack = TREE_CHAIN (pack))
15854     {
15855       tree parm_pack = TREE_VALUE (pack);
15856       int idx, level;
15857
15858       /* Determine the index and level of this parameter pack.  */
15859       template_parm_level_and_index (parm_pack, &level, &idx);
15860
15861       /* Keep track of the parameter packs and their corresponding
15862          argument packs.  */
15863       packs = tree_cons (parm_pack, TMPL_ARG (targs, level, idx), packs);
15864       TREE_TYPE (packs) = make_tree_vec (len - start);
15865     }
15866   
15867   /* Loop through all of the arguments that have not yet been
15868      unified and unify each with the pattern.  */
15869   for (i = start; i < len; i++)
15870     {
15871       tree parm;
15872       bool any_explicit = false;
15873       tree arg = TREE_VEC_ELT (packed_args, i);
15874
15875       /* For each parameter pack, set its TMPL_ARG to either NULL_TREE
15876          or the element of its argument pack at the current index if
15877          this argument was explicitly specified.  */
15878       for (pack = packs; pack; pack = TREE_CHAIN (pack))
15879         {
15880           int idx, level;
15881           tree arg, pargs;
15882           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
15883
15884           arg = NULL_TREE;
15885           if (TREE_VALUE (pack)
15886               && (pargs = ARGUMENT_PACK_EXPLICIT_ARGS (TREE_VALUE (pack)))
15887               && (i < TREE_VEC_LENGTH (pargs)))
15888             {
15889               any_explicit = true;
15890               arg = TREE_VEC_ELT (pargs, i);
15891             }
15892           TMPL_ARG (targs, level, idx) = arg;
15893         }
15894
15895       /* If we had explicit template arguments, substitute them into the
15896          pattern before deduction.  */
15897       if (any_explicit)
15898         {
15899           /* Some arguments might still be unspecified or dependent.  */
15900           bool dependent;
15901           ++processing_template_decl;
15902           dependent = any_dependent_template_arguments_p (targs);
15903           if (!dependent)
15904             --processing_template_decl;
15905           parm = tsubst (pattern, targs,
15906                          explain_p ? tf_warning_or_error : tf_none,
15907                          NULL_TREE);
15908           if (dependent)
15909             --processing_template_decl;
15910           if (parm == error_mark_node)
15911             return 1;
15912         }
15913       else
15914         parm = pattern;
15915
15916       /* Unify the pattern with the current argument.  */
15917       if (unify_one_argument (tparms, targs, parm, arg, subr, strict,
15918                               LOOKUP_IMPLICIT, explain_p))
15919         return 1;
15920
15921       /* For each parameter pack, collect the deduced value.  */
15922       for (pack = packs; pack; pack = TREE_CHAIN (pack))
15923         {
15924           int idx, level;
15925           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
15926
15927           TREE_VEC_ELT (TREE_TYPE (pack), i - start) = 
15928             TMPL_ARG (targs, level, idx);
15929         }
15930     }
15931
15932   /* Verify that the results of unification with the parameter packs
15933      produce results consistent with what we've seen before, and make
15934      the deduced argument packs available.  */
15935   for (pack = packs; pack; pack = TREE_CHAIN (pack))
15936     {
15937       tree old_pack = TREE_VALUE (pack);
15938       tree new_args = TREE_TYPE (pack);
15939       int i, len = TREE_VEC_LENGTH (new_args);
15940       int idx, level;
15941       bool nondeduced_p = false;
15942
15943       /* By default keep the original deduced argument pack.
15944          If necessary, more specific code is going to update the
15945          resulting deduced argument later down in this function.  */
15946       template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
15947       TMPL_ARG (targs, level, idx) = old_pack;
15948
15949       /* If NEW_ARGS contains any NULL_TREE entries, we didn't
15950          actually deduce anything.  */
15951       for (i = 0; i < len && !nondeduced_p; ++i)
15952         if (TREE_VEC_ELT (new_args, i) == NULL_TREE)
15953           nondeduced_p = true;
15954       if (nondeduced_p)
15955         continue;
15956
15957       if (old_pack && ARGUMENT_PACK_INCOMPLETE_P (old_pack))
15958         {
15959           /* If we had fewer function args than explicit template args,
15960              just use the explicits.  */
15961           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
15962           int explicit_len = TREE_VEC_LENGTH (explicit_args);
15963           if (len < explicit_len)
15964             new_args = explicit_args;
15965         }
15966
15967       if (!old_pack)
15968         {
15969           tree result;
15970           /* Build the deduced *_ARGUMENT_PACK.  */
15971           if (TREE_CODE (TREE_PURPOSE (pack)) == TEMPLATE_PARM_INDEX)
15972             {
15973               result = make_node (NONTYPE_ARGUMENT_PACK);
15974               TREE_TYPE (result) = 
15975                 TREE_TYPE (TEMPLATE_PARM_DECL (TREE_PURPOSE (pack)));
15976               TREE_CONSTANT (result) = 1;
15977             }
15978           else
15979             result = cxx_make_type (TYPE_ARGUMENT_PACK);
15980
15981           SET_ARGUMENT_PACK_ARGS (result, new_args);
15982
15983           /* Note the deduced argument packs for this parameter
15984              pack.  */
15985           TMPL_ARG (targs, level, idx) = result;
15986         }
15987       else if (ARGUMENT_PACK_INCOMPLETE_P (old_pack)
15988                && (ARGUMENT_PACK_ARGS (old_pack) 
15989                    == ARGUMENT_PACK_EXPLICIT_ARGS (old_pack)))
15990         {
15991           /* We only had the explicitly-provided arguments before, but
15992              now we have a complete set of arguments.  */
15993           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
15994
15995           SET_ARGUMENT_PACK_ARGS (old_pack, new_args);
15996           ARGUMENT_PACK_INCOMPLETE_P (old_pack) = 1;
15997           ARGUMENT_PACK_EXPLICIT_ARGS (old_pack) = explicit_args;
15998         }
15999       else
16000         {
16001           tree bad_old_arg = NULL_TREE, bad_new_arg = NULL_TREE;
16002           tree old_args = ARGUMENT_PACK_ARGS (old_pack);
16003
16004           if (!comp_template_args_with_info (old_args, new_args,
16005                                              &bad_old_arg, &bad_new_arg))
16006             /* Inconsistent unification of this parameter pack.  */
16007             return unify_parameter_pack_inconsistent (explain_p,
16008                                                       bad_old_arg,
16009                                                       bad_new_arg);
16010         }
16011     }
16012
16013   return unify_success (explain_p);
16014 }
16015
16016 /* Deduce the value of template parameters.  TPARMS is the (innermost)
16017    set of template parameters to a template.  TARGS is the bindings
16018    for those template parameters, as determined thus far; TARGS may
16019    include template arguments for outer levels of template parameters
16020    as well.  PARM is a parameter to a template function, or a
16021    subcomponent of that parameter; ARG is the corresponding argument.
16022    This function attempts to match PARM with ARG in a manner
16023    consistent with the existing assignments in TARGS.  If more values
16024    are deduced, then TARGS is updated.
16025
16026    Returns 0 if the type deduction succeeds, 1 otherwise.  The
16027    parameter STRICT is a bitwise or of the following flags:
16028
16029      UNIFY_ALLOW_NONE:
16030        Require an exact match between PARM and ARG.
16031      UNIFY_ALLOW_MORE_CV_QUAL:
16032        Allow the deduced ARG to be more cv-qualified (by qualification
16033        conversion) than ARG.
16034      UNIFY_ALLOW_LESS_CV_QUAL:
16035        Allow the deduced ARG to be less cv-qualified than ARG.
16036      UNIFY_ALLOW_DERIVED:
16037        Allow the deduced ARG to be a template base class of ARG,
16038        or a pointer to a template base class of the type pointed to by
16039        ARG.
16040      UNIFY_ALLOW_INTEGER:
16041        Allow any integral type to be deduced.  See the TEMPLATE_PARM_INDEX
16042        case for more information.
16043      UNIFY_ALLOW_OUTER_LEVEL:
16044        This is the outermost level of a deduction. Used to determine validity
16045        of qualification conversions. A valid qualification conversion must
16046        have const qualified pointers leading up to the inner type which
16047        requires additional CV quals, except at the outer level, where const
16048        is not required [conv.qual]. It would be normal to set this flag in
16049        addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
16050      UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
16051        This is the outermost level of a deduction, and PARM can be more CV
16052        qualified at this point.
16053      UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
16054        This is the outermost level of a deduction, and PARM can be less CV
16055        qualified at this point.  */
16056
16057 static int
16058 unify (tree tparms, tree targs, tree parm, tree arg, int strict,
16059        bool explain_p)
16060 {
16061   int idx;
16062   tree targ;
16063   tree tparm;
16064   int strict_in = strict;
16065
16066   /* I don't think this will do the right thing with respect to types.
16067      But the only case I've seen it in so far has been array bounds, where
16068      signedness is the only information lost, and I think that will be
16069      okay.  */
16070   while (TREE_CODE (parm) == NOP_EXPR)
16071     parm = TREE_OPERAND (parm, 0);
16072
16073   if (arg == error_mark_node)
16074     return unify_invalid (explain_p);
16075   if (arg == unknown_type_node
16076       || arg == init_list_type_node)
16077     /* We can't deduce anything from this, but we might get all the
16078        template args from other function args.  */
16079     return unify_success (explain_p);
16080
16081   /* If PARM uses template parameters, then we can't bail out here,
16082      even if ARG == PARM, since we won't record unifications for the
16083      template parameters.  We might need them if we're trying to
16084      figure out which of two things is more specialized.  */
16085   if (arg == parm && !uses_template_parms (parm))
16086     return unify_success (explain_p);
16087
16088   /* Handle init lists early, so the rest of the function can assume
16089      we're dealing with a type. */
16090   if (BRACE_ENCLOSED_INITIALIZER_P (arg))
16091     {
16092       tree elt, elttype;
16093       unsigned i;
16094       tree orig_parm = parm;
16095
16096       /* Replace T with std::initializer_list<T> for deduction.  */
16097       if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
16098           && flag_deduce_init_list)
16099         parm = listify (parm);
16100
16101       if (!is_std_init_list (parm))
16102         /* We can only deduce from an initializer list argument if the
16103            parameter is std::initializer_list; otherwise this is a
16104            non-deduced context. */
16105         return unify_success (explain_p);
16106
16107       elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (parm), 0);
16108
16109       FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (arg), i, elt)
16110         {
16111           int elt_strict = strict;
16112
16113           if (elt == error_mark_node)
16114             return unify_invalid (explain_p);
16115
16116           if (!BRACE_ENCLOSED_INITIALIZER_P (elt))
16117             {
16118               tree type = TREE_TYPE (elt);
16119               /* It should only be possible to get here for a call.  */
16120               gcc_assert (elt_strict & UNIFY_ALLOW_OUTER_LEVEL);
16121               elt_strict |= maybe_adjust_types_for_deduction
16122                 (DEDUCE_CALL, &elttype, &type, elt);
16123               elt = type;
16124             }
16125
16126           RECUR_AND_CHECK_FAILURE (tparms, targs, elttype, elt, elt_strict,
16127                                    explain_p);
16128         }
16129
16130       /* If the std::initializer_list<T> deduction worked, replace the
16131          deduced A with std::initializer_list<A>.  */
16132       if (orig_parm != parm)
16133         {
16134           idx = TEMPLATE_TYPE_IDX (orig_parm);
16135           targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
16136           targ = listify (targ);
16137           TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = targ;
16138         }
16139       return unify_success (explain_p);
16140     }
16141
16142   /* Immediately reject some pairs that won't unify because of
16143      cv-qualification mismatches.  */
16144   if (TREE_CODE (arg) == TREE_CODE (parm)
16145       && TYPE_P (arg)
16146       /* It is the elements of the array which hold the cv quals of an array
16147          type, and the elements might be template type parms. We'll check
16148          when we recurse.  */
16149       && TREE_CODE (arg) != ARRAY_TYPE
16150       /* We check the cv-qualifiers when unifying with template type
16151          parameters below.  We want to allow ARG `const T' to unify with
16152          PARM `T' for example, when computing which of two templates
16153          is more specialized, for example.  */
16154       && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
16155       && !check_cv_quals_for_unify (strict_in, arg, parm))
16156     return unify_cv_qual_mismatch (explain_p, parm, arg);
16157
16158   if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
16159       && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
16160     strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
16161   strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
16162   strict &= ~UNIFY_ALLOW_DERIVED;
16163   strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
16164   strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
16165
16166   switch (TREE_CODE (parm))
16167     {
16168     case TYPENAME_TYPE:
16169     case SCOPE_REF:
16170     case UNBOUND_CLASS_TEMPLATE:
16171       /* In a type which contains a nested-name-specifier, template
16172          argument values cannot be deduced for template parameters used
16173          within the nested-name-specifier.  */
16174       return unify_success (explain_p);
16175
16176     case TEMPLATE_TYPE_PARM:
16177     case TEMPLATE_TEMPLATE_PARM:
16178     case BOUND_TEMPLATE_TEMPLATE_PARM:
16179       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
16180       if (tparm == error_mark_node)
16181         return unify_invalid (explain_p);
16182
16183       if (TEMPLATE_TYPE_LEVEL (parm)
16184           != template_decl_level (tparm))
16185         /* The PARM is not one we're trying to unify.  Just check
16186            to see if it matches ARG.  */
16187         {
16188           if (TREE_CODE (arg) == TREE_CODE (parm)
16189               && same_type_p (parm, arg))
16190             return unify_success (explain_p);
16191           else
16192             return unify_type_mismatch (explain_p, parm, arg);
16193         }
16194       idx = TEMPLATE_TYPE_IDX (parm);
16195       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
16196       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
16197
16198       /* Check for mixed types and values.  */
16199       if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
16200            && TREE_CODE (tparm) != TYPE_DECL)
16201           || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
16202               && TREE_CODE (tparm) != TEMPLATE_DECL))
16203         gcc_unreachable ();
16204
16205       if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
16206         {
16207           /* ARG must be constructed from a template class or a template
16208              template parameter.  */
16209           if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
16210               && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
16211             return unify_template_deduction_failure (explain_p, parm, arg);
16212
16213           {
16214             tree parmvec = TYPE_TI_ARGS (parm);
16215             tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
16216             tree full_argvec = add_to_template_args (targs, argvec);
16217             tree parm_parms 
16218               = DECL_INNERMOST_TEMPLATE_PARMS
16219                   (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (parm));
16220             int i, len;
16221             int parm_variadic_p = 0;
16222
16223             /* The resolution to DR150 makes clear that default
16224                arguments for an N-argument may not be used to bind T
16225                to a template template parameter with fewer than N
16226                parameters.  It is not safe to permit the binding of
16227                default arguments as an extension, as that may change
16228                the meaning of a conforming program.  Consider:
16229
16230                   struct Dense { static const unsigned int dim = 1; };
16231
16232                   template <template <typename> class View,
16233                             typename Block>
16234                   void operator+(float, View<Block> const&);
16235
16236                   template <typename Block,
16237                             unsigned int Dim = Block::dim>
16238                   struct Lvalue_proxy { operator float() const; };
16239
16240                   void
16241                   test_1d (void) {
16242                     Lvalue_proxy<Dense> p;
16243                     float b;
16244                     b + p;
16245                   }
16246
16247               Here, if Lvalue_proxy is permitted to bind to View, then
16248               the global operator+ will be used; if they are not, the
16249               Lvalue_proxy will be converted to float.  */
16250             if (coerce_template_parms (parm_parms,
16251                                        full_argvec,
16252                                        TYPE_TI_TEMPLATE (parm),
16253                                        (explain_p
16254                                         ? tf_warning_or_error
16255                                         : tf_none),
16256                                        /*require_all_args=*/true,
16257                                        /*use_default_args=*/false)
16258                 == error_mark_node)
16259               return 1;
16260
16261             /* Deduce arguments T, i from TT<T> or TT<i>.
16262                We check each element of PARMVEC and ARGVEC individually
16263                rather than the whole TREE_VEC since they can have
16264                different number of elements.  */
16265
16266             parmvec = expand_template_argument_pack (parmvec);
16267             argvec = expand_template_argument_pack (argvec);
16268
16269             len = TREE_VEC_LENGTH (parmvec);
16270
16271             /* Check if the parameters end in a pack, making them
16272                variadic.  */
16273             if (len > 0
16274                 && PACK_EXPANSION_P (TREE_VEC_ELT (parmvec, len - 1)))
16275               parm_variadic_p = 1;
16276             
16277             if (TREE_VEC_LENGTH (argvec) < len - parm_variadic_p)
16278               return unify_too_few_arguments (explain_p,
16279                                               TREE_VEC_LENGTH (argvec), len);
16280
16281              for (i = 0; i < len - parm_variadic_p; ++i)
16282               {
16283                 RECUR_AND_CHECK_FAILURE (tparms, targs,
16284                                          TREE_VEC_ELT (parmvec, i),
16285                                          TREE_VEC_ELT (argvec, i),
16286                                          UNIFY_ALLOW_NONE, explain_p);
16287               }
16288
16289             if (parm_variadic_p
16290                 && unify_pack_expansion (tparms, targs,
16291                                          parmvec, argvec,
16292                                          DEDUCE_EXACT,
16293                                          /*subr=*/true, explain_p))
16294               return 1;
16295           }
16296           arg = TYPE_TI_TEMPLATE (arg);
16297
16298           /* Fall through to deduce template name.  */
16299         }
16300
16301       if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
16302           || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
16303         {
16304           /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>.  */
16305
16306           /* Simple cases: Value already set, does match or doesn't.  */
16307           if (targ != NULL_TREE && template_args_equal (targ, arg))
16308             return unify_success (explain_p);
16309           else if (targ)
16310             return unify_inconsistency (explain_p, parm, targ, arg);
16311         }
16312       else
16313         {
16314           /* If PARM is `const T' and ARG is only `int', we don't have
16315              a match unless we are allowing additional qualification.
16316              If ARG is `const int' and PARM is just `T' that's OK;
16317              that binds `const int' to `T'.  */
16318           if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
16319                                          arg, parm))
16320             return unify_cv_qual_mismatch (explain_p, parm, arg);
16321
16322           /* Consider the case where ARG is `const volatile int' and
16323              PARM is `const T'.  Then, T should be `volatile int'.  */
16324           arg = cp_build_qualified_type_real
16325             (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
16326           if (arg == error_mark_node)
16327             return unify_invalid (explain_p);
16328
16329           /* Simple cases: Value already set, does match or doesn't.  */
16330           if (targ != NULL_TREE && same_type_p (targ, arg))
16331             return unify_success (explain_p);
16332           else if (targ)
16333             return unify_inconsistency (explain_p, parm, targ, arg);
16334
16335           /* Make sure that ARG is not a variable-sized array.  (Note
16336              that were talking about variable-sized arrays (like
16337              `int[n]'), rather than arrays of unknown size (like
16338              `int[]').)  We'll get very confused by such a type since
16339              the bound of the array is not constant, and therefore
16340              not mangleable.  Besides, such types are not allowed in
16341              ISO C++, so we can do as we please here.  We do allow
16342              them for 'auto' deduction, since that isn't ABI-exposed.  */
16343           if (!is_auto (parm) && variably_modified_type_p (arg, NULL_TREE))
16344             return unify_vla_arg (explain_p, arg);
16345
16346           /* Strip typedefs as in convert_template_argument.  */
16347           arg = canonicalize_type_argument (arg, tf_none);
16348         }
16349
16350       /* If ARG is a parameter pack or an expansion, we cannot unify
16351          against it unless PARM is also a parameter pack.  */
16352       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
16353           && !template_parameter_pack_p (parm))
16354         return unify_parameter_pack_mismatch (explain_p, parm, arg);
16355
16356       /* If the argument deduction results is a METHOD_TYPE,
16357          then there is a problem.
16358          METHOD_TYPE doesn't map to any real C++ type the result of
16359          the deduction can not be of that type.  */
16360       if (TREE_CODE (arg) == METHOD_TYPE)
16361         return unify_method_type_error (explain_p, arg);
16362
16363       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
16364       return unify_success (explain_p);
16365
16366     case TEMPLATE_PARM_INDEX:
16367       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
16368       if (tparm == error_mark_node)
16369         return unify_invalid (explain_p);
16370
16371       if (TEMPLATE_PARM_LEVEL (parm)
16372           != template_decl_level (tparm))
16373         {
16374           /* The PARM is not one we're trying to unify.  Just check
16375              to see if it matches ARG.  */
16376           int result = !(TREE_CODE (arg) == TREE_CODE (parm)
16377                          && cp_tree_equal (parm, arg));
16378           if (result)
16379             unify_expression_unequal (explain_p, parm, arg);
16380           return result;
16381         }
16382
16383       idx = TEMPLATE_PARM_IDX (parm);
16384       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
16385
16386       if (targ)
16387         {
16388           int x = !cp_tree_equal (targ, arg);
16389           if (x)
16390             unify_inconsistency (explain_p, parm, targ, arg);
16391           return x;
16392         }
16393
16394       /* [temp.deduct.type] If, in the declaration of a function template
16395          with a non-type template-parameter, the non-type
16396          template-parameter is used in an expression in the function
16397          parameter-list and, if the corresponding template-argument is
16398          deduced, the template-argument type shall match the type of the
16399          template-parameter exactly, except that a template-argument
16400          deduced from an array bound may be of any integral type.
16401          The non-type parameter might use already deduced type parameters.  */
16402       tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
16403       if (!TREE_TYPE (arg))
16404         /* Template-parameter dependent expression.  Just accept it for now.
16405            It will later be processed in convert_template_argument.  */
16406         ;
16407       else if (same_type_p (TREE_TYPE (arg), tparm))
16408         /* OK */;
16409       else if ((strict & UNIFY_ALLOW_INTEGER)
16410                && (TREE_CODE (tparm) == INTEGER_TYPE
16411                    || TREE_CODE (tparm) == BOOLEAN_TYPE))
16412         /* Convert the ARG to the type of PARM; the deduced non-type
16413            template argument must exactly match the types of the
16414            corresponding parameter.  */
16415         arg = fold (build_nop (tparm, arg));
16416       else if (uses_template_parms (tparm))
16417         /* We haven't deduced the type of this parameter yet.  Try again
16418            later.  */
16419         return unify_success (explain_p);
16420       else
16421         return unify_type_mismatch (explain_p, tparm, arg);
16422
16423       /* If ARG is a parameter pack or an expansion, we cannot unify
16424          against it unless PARM is also a parameter pack.  */
16425       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
16426           && !TEMPLATE_PARM_PARAMETER_PACK (parm))
16427         return unify_parameter_pack_mismatch (explain_p, parm, arg);
16428
16429       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
16430       return unify_success (explain_p);
16431
16432     case PTRMEM_CST:
16433      {
16434         /* A pointer-to-member constant can be unified only with
16435          another constant.  */
16436       if (TREE_CODE (arg) != PTRMEM_CST)
16437         return unify_ptrmem_cst_mismatch (explain_p, parm, arg);
16438
16439       /* Just unify the class member. It would be useless (and possibly
16440          wrong, depending on the strict flags) to unify also
16441          PTRMEM_CST_CLASS, because we want to be sure that both parm and
16442          arg refer to the same variable, even if through different
16443          classes. For instance:
16444
16445          struct A { int x; };
16446          struct B : A { };
16447
16448          Unification of &A::x and &B::x must succeed.  */
16449       return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
16450                     PTRMEM_CST_MEMBER (arg), strict, explain_p);
16451      }
16452
16453     case POINTER_TYPE:
16454       {
16455         if (TREE_CODE (arg) != POINTER_TYPE)
16456           return unify_type_mismatch (explain_p, parm, arg);
16457
16458         /* [temp.deduct.call]
16459
16460            A can be another pointer or pointer to member type that can
16461            be converted to the deduced A via a qualification
16462            conversion (_conv.qual_).
16463
16464            We pass down STRICT here rather than UNIFY_ALLOW_NONE.
16465            This will allow for additional cv-qualification of the
16466            pointed-to types if appropriate.  */
16467
16468         if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
16469           /* The derived-to-base conversion only persists through one
16470              level of pointers.  */
16471           strict |= (strict_in & UNIFY_ALLOW_DERIVED);
16472
16473         return unify (tparms, targs, TREE_TYPE (parm),
16474                       TREE_TYPE (arg), strict, explain_p);
16475       }
16476
16477     case REFERENCE_TYPE:
16478       if (TREE_CODE (arg) != REFERENCE_TYPE)
16479         return unify_type_mismatch (explain_p, parm, arg);
16480       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
16481                     strict & UNIFY_ALLOW_MORE_CV_QUAL, explain_p);
16482
16483     case ARRAY_TYPE:
16484       if (TREE_CODE (arg) != ARRAY_TYPE)
16485         return unify_type_mismatch (explain_p, parm, arg);
16486       if ((TYPE_DOMAIN (parm) == NULL_TREE)
16487           != (TYPE_DOMAIN (arg) == NULL_TREE))
16488         return unify_type_mismatch (explain_p, parm, arg);
16489       if (TYPE_DOMAIN (parm) != NULL_TREE)
16490         {
16491           tree parm_max;
16492           tree arg_max;
16493           bool parm_cst;
16494           bool arg_cst;
16495
16496           /* Our representation of array types uses "N - 1" as the
16497              TYPE_MAX_VALUE for an array with "N" elements, if "N" is
16498              not an integer constant.  We cannot unify arbitrarily
16499              complex expressions, so we eliminate the MINUS_EXPRs
16500              here.  */
16501           parm_max = TYPE_MAX_VALUE (TYPE_DOMAIN (parm));
16502           parm_cst = TREE_CODE (parm_max) == INTEGER_CST;
16503           if (!parm_cst)
16504             {
16505               gcc_assert (TREE_CODE (parm_max) == MINUS_EXPR);
16506               parm_max = TREE_OPERAND (parm_max, 0);
16507             }
16508           arg_max = TYPE_MAX_VALUE (TYPE_DOMAIN (arg));
16509           arg_cst = TREE_CODE (arg_max) == INTEGER_CST;
16510           if (!arg_cst)
16511             {
16512               /* The ARG_MAX may not be a simple MINUS_EXPR, if we are
16513                  trying to unify the type of a variable with the type
16514                  of a template parameter.  For example:
16515
16516                    template <unsigned int N>
16517                    void f (char (&) [N]);
16518                    int g(); 
16519                    void h(int i) {
16520                      char a[g(i)];
16521                      f(a); 
16522                    }
16523
16524                 Here, the type of the ARG will be "int [g(i)]", and
16525                 may be a SAVE_EXPR, etc.  */
16526               if (TREE_CODE (arg_max) != MINUS_EXPR)
16527                 return unify_vla_arg (explain_p, arg);
16528               arg_max = TREE_OPERAND (arg_max, 0);
16529             }
16530
16531           /* If only one of the bounds used a MINUS_EXPR, compensate
16532              by adding one to the other bound.  */
16533           if (parm_cst && !arg_cst)
16534             parm_max = fold_build2_loc (input_location, PLUS_EXPR,
16535                                     integer_type_node,
16536                                     parm_max,
16537                                     integer_one_node);
16538           else if (arg_cst && !parm_cst)
16539             arg_max = fold_build2_loc (input_location, PLUS_EXPR,
16540                                    integer_type_node,
16541                                    arg_max,
16542                                    integer_one_node);
16543
16544           RECUR_AND_CHECK_FAILURE (tparms, targs, parm_max, arg_max,
16545                                    UNIFY_ALLOW_INTEGER, explain_p);
16546         }
16547       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
16548                     strict & UNIFY_ALLOW_MORE_CV_QUAL, explain_p);
16549
16550     case REAL_TYPE:
16551     case COMPLEX_TYPE:
16552     case VECTOR_TYPE:
16553     case INTEGER_TYPE:
16554     case BOOLEAN_TYPE:
16555     case ENUMERAL_TYPE:
16556     case VOID_TYPE:
16557       if (TREE_CODE (arg) != TREE_CODE (parm))
16558         return unify_type_mismatch (explain_p, parm, arg);
16559
16560       /* We have already checked cv-qualification at the top of the
16561          function.  */
16562       if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
16563         return unify_type_mismatch (explain_p, parm, arg);
16564
16565       /* As far as unification is concerned, this wins.  Later checks
16566          will invalidate it if necessary.  */
16567       return unify_success (explain_p);
16568
16569       /* Types INTEGER_CST and MINUS_EXPR can come from array bounds.  */
16570       /* Type INTEGER_CST can come from ordinary constant template args.  */
16571     case INTEGER_CST:
16572       while (TREE_CODE (arg) == NOP_EXPR)
16573         arg = TREE_OPERAND (arg, 0);
16574
16575       if (TREE_CODE (arg) != INTEGER_CST)
16576         return unify_template_argument_mismatch (explain_p, parm, arg);
16577       return (tree_int_cst_equal (parm, arg)
16578               ? unify_success (explain_p)
16579               : unify_template_argument_mismatch (explain_p, parm, arg));
16580
16581     case TREE_VEC:
16582       {
16583         int i, len, argslen;
16584         int parm_variadic_p = 0;
16585
16586         if (TREE_CODE (arg) != TREE_VEC)
16587           return unify_template_argument_mismatch (explain_p, parm, arg);
16588
16589         len = TREE_VEC_LENGTH (parm);
16590         argslen = TREE_VEC_LENGTH (arg);
16591
16592         /* Check for pack expansions in the parameters.  */
16593         for (i = 0; i < len; ++i)
16594           {
16595             if (PACK_EXPANSION_P (TREE_VEC_ELT (parm, i)))
16596               {
16597                 if (i == len - 1)
16598                   /* We can unify against something with a trailing
16599                      parameter pack.  */
16600                   parm_variadic_p = 1;
16601                 else
16602                   /* [temp.deduct.type]/9: If the template argument list of
16603                      P contains a pack expansion that is not the last
16604                      template argument, the entire template argument list
16605                      is a non-deduced context.  */
16606                   return unify_success (explain_p);
16607               }
16608           }
16609
16610         /* If we don't have enough arguments to satisfy the parameters
16611            (not counting the pack expression at the end), or we have
16612            too many arguments for a parameter list that doesn't end in
16613            a pack expression, we can't unify.  */
16614         if (parm_variadic_p
16615             ? argslen < len - parm_variadic_p
16616             : argslen != len)
16617           return unify_arity (explain_p, TREE_VEC_LENGTH (arg), len);
16618
16619         /* Unify all of the parameters that precede the (optional)
16620            pack expression.  */
16621         for (i = 0; i < len - parm_variadic_p; ++i)
16622           {
16623             RECUR_AND_CHECK_FAILURE (tparms, targs,
16624                                      TREE_VEC_ELT (parm, i),
16625                                      TREE_VEC_ELT (arg, i),
16626                                      UNIFY_ALLOW_NONE, explain_p);
16627           }
16628         if (parm_variadic_p)
16629           return unify_pack_expansion (tparms, targs, parm, arg,
16630                                        DEDUCE_EXACT,
16631                                        /*subr=*/true, explain_p);
16632         return unify_success (explain_p);
16633       }
16634
16635     case RECORD_TYPE:
16636     case UNION_TYPE:
16637       if (TREE_CODE (arg) != TREE_CODE (parm))
16638         return unify_type_mismatch (explain_p, parm, arg);
16639
16640       if (TYPE_PTRMEMFUNC_P (parm))
16641         {
16642           if (!TYPE_PTRMEMFUNC_P (arg))
16643             return unify_type_mismatch (explain_p, parm, arg);
16644
16645           return unify (tparms, targs,
16646                         TYPE_PTRMEMFUNC_FN_TYPE (parm),
16647                         TYPE_PTRMEMFUNC_FN_TYPE (arg),
16648                         strict, explain_p);
16649         }
16650
16651       if (CLASSTYPE_TEMPLATE_INFO (parm))
16652         {
16653           tree t = NULL_TREE;
16654
16655           if (strict_in & UNIFY_ALLOW_DERIVED)
16656             {
16657               /* First, we try to unify the PARM and ARG directly.  */
16658               t = try_class_unification (tparms, targs,
16659                                          parm, arg, explain_p);
16660
16661               if (!t)
16662                 {
16663                   /* Fallback to the special case allowed in
16664                      [temp.deduct.call]:
16665
16666                        If P is a class, and P has the form
16667                        template-id, then A can be a derived class of
16668                        the deduced A.  Likewise, if P is a pointer to
16669                        a class of the form template-id, A can be a
16670                        pointer to a derived class pointed to by the
16671                        deduced A.  */
16672                   enum template_base_result r;
16673                   r = get_template_base (tparms, targs, parm, arg,
16674                                          explain_p, &t);
16675
16676                   if (!t)
16677                     return unify_no_common_base (explain_p, r, parm, arg);
16678                 }
16679             }
16680           else if (CLASSTYPE_TEMPLATE_INFO (arg)
16681                    && (CLASSTYPE_TI_TEMPLATE (parm)
16682                        == CLASSTYPE_TI_TEMPLATE (arg)))
16683             /* Perhaps PARM is something like S<U> and ARG is S<int>.
16684                Then, we should unify `int' and `U'.  */
16685             t = arg;
16686           else
16687             /* There's no chance of unification succeeding.  */
16688             return unify_type_mismatch (explain_p, parm, arg);
16689
16690           return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
16691                         CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE, explain_p);
16692         }
16693       else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
16694         return unify_type_mismatch (explain_p, parm, arg);
16695       return unify_success (explain_p);
16696
16697     case METHOD_TYPE:
16698     case FUNCTION_TYPE:
16699       {
16700         unsigned int nargs;
16701         tree *args;
16702         tree a;
16703         unsigned int i;
16704
16705         if (TREE_CODE (arg) != TREE_CODE (parm))
16706           return unify_type_mismatch (explain_p, parm, arg);
16707
16708         /* CV qualifications for methods can never be deduced, they must
16709            match exactly.  We need to check them explicitly here,
16710            because type_unification_real treats them as any other
16711            cv-qualified parameter.  */
16712         if (TREE_CODE (parm) == METHOD_TYPE
16713             && (!check_cv_quals_for_unify
16714                 (UNIFY_ALLOW_NONE,
16715                  class_of_this_parm (arg),
16716                  class_of_this_parm (parm))))
16717           return unify_cv_qual_mismatch (explain_p, parm, arg);
16718
16719         RECUR_AND_CHECK_FAILURE (tparms, targs, TREE_TYPE (parm),
16720                                  TREE_TYPE (arg), UNIFY_ALLOW_NONE, explain_p);
16721
16722         nargs = list_length (TYPE_ARG_TYPES (arg));
16723         args = XALLOCAVEC (tree, nargs);
16724         for (a = TYPE_ARG_TYPES (arg), i = 0;
16725              a != NULL_TREE && a != void_list_node;
16726              a = TREE_CHAIN (a), ++i)
16727           args[i] = TREE_VALUE (a);
16728         nargs = i;
16729
16730         return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
16731                                       args, nargs, 1, DEDUCE_EXACT,
16732                                       LOOKUP_NORMAL, explain_p);
16733       }
16734
16735     case OFFSET_TYPE:
16736       /* Unify a pointer to member with a pointer to member function, which
16737          deduces the type of the member as a function type. */
16738       if (TYPE_PTRMEMFUNC_P (arg))
16739         {
16740           tree method_type;
16741           tree fntype;
16742
16743           /* Check top-level cv qualifiers */
16744           if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
16745             return unify_cv_qual_mismatch (explain_p, parm, arg);
16746
16747           RECUR_AND_CHECK_FAILURE (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
16748                                    TYPE_PTRMEMFUNC_OBJECT_TYPE (arg),
16749                                    UNIFY_ALLOW_NONE, explain_p);
16750
16751           /* Determine the type of the function we are unifying against. */
16752           method_type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (arg));
16753           fntype =
16754             build_function_type (TREE_TYPE (method_type),
16755                                  TREE_CHAIN (TYPE_ARG_TYPES (method_type)));
16756
16757           /* Extract the cv-qualifiers of the member function from the
16758              implicit object parameter and place them on the function
16759              type to be restored later. */
16760           fntype = apply_memfn_quals (fntype, type_memfn_quals (method_type));
16761           return unify (tparms, targs, TREE_TYPE (parm), fntype, strict, explain_p);
16762         }
16763
16764       if (TREE_CODE (arg) != OFFSET_TYPE)
16765         return unify_type_mismatch (explain_p, parm, arg);
16766       RECUR_AND_CHECK_FAILURE (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
16767                                TYPE_OFFSET_BASETYPE (arg),
16768                                UNIFY_ALLOW_NONE, explain_p);
16769       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
16770                     strict, explain_p);
16771
16772     case CONST_DECL:
16773       if (DECL_TEMPLATE_PARM_P (parm))
16774         return unify (tparms, targs, DECL_INITIAL (parm), arg, strict, explain_p);
16775       if (arg != integral_constant_value (parm))
16776         return unify_template_argument_mismatch (explain_p, parm, arg);
16777       return unify_success (explain_p);
16778
16779     case FIELD_DECL:
16780     case TEMPLATE_DECL:
16781       /* Matched cases are handled by the ARG == PARM test above.  */
16782       return unify_template_argument_mismatch (explain_p, parm, arg);
16783
16784     case VAR_DECL:
16785       /* A non-type template parameter that is a variable should be a
16786          an integral constant, in which case, it whould have been
16787          folded into its (constant) value. So we should not be getting
16788          a variable here.  */
16789       gcc_unreachable ();
16790
16791     case TYPE_ARGUMENT_PACK:
16792     case NONTYPE_ARGUMENT_PACK:
16793       return unify (tparms, targs, ARGUMENT_PACK_ARGS (parm),
16794                     ARGUMENT_PACK_ARGS (arg), strict, explain_p);
16795
16796     case TYPEOF_TYPE:
16797     case DECLTYPE_TYPE:
16798     case UNDERLYING_TYPE:
16799       /* Cannot deduce anything from TYPEOF_TYPE, DECLTYPE_TYPE,
16800          or UNDERLYING_TYPE nodes.  */
16801       return unify_success (explain_p);
16802
16803     case ERROR_MARK:
16804       /* Unification fails if we hit an error node.  */
16805       return unify_invalid (explain_p);
16806
16807     default:
16808       /* An unresolved overload is a nondeduced context.  */
16809       if (type_unknown_p (parm))
16810         return unify_success (explain_p);
16811       gcc_assert (EXPR_P (parm));
16812
16813       /* We must be looking at an expression.  This can happen with
16814          something like:
16815
16816            template <int I>
16817            void foo(S<I>, S<I + 2>);
16818
16819          This is a "nondeduced context":
16820
16821            [deduct.type]
16822
16823            The nondeduced contexts are:
16824
16825            --A type that is a template-id in which one or more of
16826              the template-arguments is an expression that references
16827              a template-parameter.
16828
16829          In these cases, we assume deduction succeeded, but don't
16830          actually infer any unifications.  */
16831
16832       if (!uses_template_parms (parm)
16833           && !template_args_equal (parm, arg))
16834         return unify_expression_unequal (explain_p, parm, arg);
16835       else
16836         return unify_success (explain_p);
16837     }
16838 }
16839 #undef RECUR_AND_CHECK_FAILURE
16840 \f
16841 /* Note that DECL can be defined in this translation unit, if
16842    required.  */
16843
16844 static void
16845 mark_definable (tree decl)
16846 {
16847   tree clone;
16848   DECL_NOT_REALLY_EXTERN (decl) = 1;
16849   FOR_EACH_CLONE (clone, decl)
16850     DECL_NOT_REALLY_EXTERN (clone) = 1;
16851 }
16852
16853 /* Called if RESULT is explicitly instantiated, or is a member of an
16854    explicitly instantiated class.  */
16855
16856 void
16857 mark_decl_instantiated (tree result, int extern_p)
16858 {
16859   SET_DECL_EXPLICIT_INSTANTIATION (result);
16860
16861   /* If this entity has already been written out, it's too late to
16862      make any modifications.  */
16863   if (TREE_ASM_WRITTEN (result))
16864     return;
16865
16866   if (TREE_CODE (result) != FUNCTION_DECL)
16867     /* The TREE_PUBLIC flag for function declarations will have been
16868        set correctly by tsubst.  */
16869     TREE_PUBLIC (result) = 1;
16870
16871   /* This might have been set by an earlier implicit instantiation.  */
16872   DECL_COMDAT (result) = 0;
16873
16874   if (extern_p)
16875     DECL_NOT_REALLY_EXTERN (result) = 0;
16876   else
16877     {
16878       mark_definable (result);
16879       /* Always make artificials weak.  */
16880       if (DECL_ARTIFICIAL (result) && flag_weak)
16881         comdat_linkage (result);
16882       /* For WIN32 we also want to put explicit instantiations in
16883          linkonce sections.  */
16884       else if (TREE_PUBLIC (result))
16885         maybe_make_one_only (result);
16886     }
16887
16888   /* If EXTERN_P, then this function will not be emitted -- unless
16889      followed by an explicit instantiation, at which point its linkage
16890      will be adjusted.  If !EXTERN_P, then this function will be
16891      emitted here.  In neither circumstance do we want
16892      import_export_decl to adjust the linkage.  */
16893   DECL_INTERFACE_KNOWN (result) = 1;
16894 }
16895
16896 /* Subroutine of more_specialized_fn: check whether TARGS is missing any
16897    important template arguments.  If any are missing, we check whether
16898    they're important by using error_mark_node for substituting into any
16899    args that were used for partial ordering (the ones between ARGS and END)
16900    and seeing if it bubbles up.  */
16901
16902 static bool
16903 check_undeduced_parms (tree targs, tree args, tree end)
16904 {
16905   bool found = false;
16906   int i;
16907   for (i = TREE_VEC_LENGTH (targs) - 1; i >= 0; --i)
16908     if (TREE_VEC_ELT (targs, i) == NULL_TREE)
16909       {
16910         found = true;
16911         TREE_VEC_ELT (targs, i) = error_mark_node;
16912       }
16913   if (found)
16914     {
16915       for (; args != end; args = TREE_CHAIN (args))
16916         {
16917           tree substed = tsubst (TREE_VALUE (args), targs, tf_none, NULL_TREE);
16918           if (substed == error_mark_node)
16919             return true;
16920         }
16921     }
16922   return false;
16923 }
16924
16925 /* Given two function templates PAT1 and PAT2, return:
16926
16927    1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
16928    -1 if PAT2 is more specialized than PAT1.
16929    0 if neither is more specialized.
16930
16931    LEN indicates the number of parameters we should consider
16932    (defaulted parameters should not be considered).
16933
16934    The 1998 std underspecified function template partial ordering, and
16935    DR214 addresses the issue.  We take pairs of arguments, one from
16936    each of the templates, and deduce them against each other.  One of
16937    the templates will be more specialized if all the *other*
16938    template's arguments deduce against its arguments and at least one
16939    of its arguments *does* *not* deduce against the other template's
16940    corresponding argument.  Deduction is done as for class templates.
16941    The arguments used in deduction have reference and top level cv
16942    qualifiers removed.  Iff both arguments were originally reference
16943    types *and* deduction succeeds in both directions, the template
16944    with the more cv-qualified argument wins for that pairing (if
16945    neither is more cv-qualified, they both are equal).  Unlike regular
16946    deduction, after all the arguments have been deduced in this way,
16947    we do *not* verify the deduced template argument values can be
16948    substituted into non-deduced contexts.
16949
16950    The logic can be a bit confusing here, because we look at deduce1 and
16951    targs1 to see if pat2 is at least as specialized, and vice versa; if we
16952    can find template arguments for pat1 to make arg1 look like arg2, that
16953    means that arg2 is at least as specialized as arg1.  */
16954
16955 int
16956 more_specialized_fn (tree pat1, tree pat2, int len)
16957 {
16958   tree decl1 = DECL_TEMPLATE_RESULT (pat1);
16959   tree decl2 = DECL_TEMPLATE_RESULT (pat2);
16960   tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
16961   tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
16962   tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
16963   tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
16964   tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
16965   tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
16966   tree origs1, origs2;
16967   bool lose1 = false;
16968   bool lose2 = false;
16969
16970   /* Remove the this parameter from non-static member functions.  If
16971      one is a non-static member function and the other is not a static
16972      member function, remove the first parameter from that function
16973      also.  This situation occurs for operator functions where we
16974      locate both a member function (with this pointer) and non-member
16975      operator (with explicit first operand).  */
16976   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
16977     {
16978       len--; /* LEN is the number of significant arguments for DECL1 */
16979       args1 = TREE_CHAIN (args1);
16980       if (!DECL_STATIC_FUNCTION_P (decl2))
16981         args2 = TREE_CHAIN (args2);
16982     }
16983   else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
16984     {
16985       args2 = TREE_CHAIN (args2);
16986       if (!DECL_STATIC_FUNCTION_P (decl1))
16987         {
16988           len--;
16989           args1 = TREE_CHAIN (args1);
16990         }
16991     }
16992
16993   /* If only one is a conversion operator, they are unordered.  */
16994   if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
16995     return 0;
16996
16997   /* Consider the return type for a conversion function */
16998   if (DECL_CONV_FN_P (decl1))
16999     {
17000       args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
17001       args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
17002       len++;
17003     }
17004
17005   processing_template_decl++;
17006
17007   origs1 = args1;
17008   origs2 = args2;
17009
17010   while (len--
17011          /* Stop when an ellipsis is seen.  */
17012          && args1 != NULL_TREE && args2 != NULL_TREE)
17013     {
17014       tree arg1 = TREE_VALUE (args1);
17015       tree arg2 = TREE_VALUE (args2);
17016       int deduce1, deduce2;
17017       int quals1 = -1;
17018       int quals2 = -1;
17019
17020       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
17021           && TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
17022         {
17023           /* When both arguments are pack expansions, we need only
17024              unify the patterns themselves.  */
17025           arg1 = PACK_EXPANSION_PATTERN (arg1);
17026           arg2 = PACK_EXPANSION_PATTERN (arg2);
17027
17028           /* This is the last comparison we need to do.  */
17029           len = 0;
17030         }
17031
17032       if (TREE_CODE (arg1) == REFERENCE_TYPE)
17033         {
17034           arg1 = TREE_TYPE (arg1);
17035           quals1 = cp_type_quals (arg1);
17036         }
17037
17038       if (TREE_CODE (arg2) == REFERENCE_TYPE)
17039         {
17040           arg2 = TREE_TYPE (arg2);
17041           quals2 = cp_type_quals (arg2);
17042         }
17043
17044       if ((quals1 < 0) != (quals2 < 0))
17045         {
17046           /* Only of the args is a reference, see if we should apply
17047              array/function pointer decay to it.  This is not part of
17048              DR214, but is, IMHO, consistent with the deduction rules
17049              for the function call itself, and with our earlier
17050              implementation of the underspecified partial ordering
17051              rules.  (nathan).  */
17052           if (quals1 >= 0)
17053             {
17054               switch (TREE_CODE (arg1))
17055                 {
17056                 case ARRAY_TYPE:
17057                   arg1 = TREE_TYPE (arg1);
17058                   /* FALLTHROUGH. */
17059                 case FUNCTION_TYPE:
17060                   arg1 = build_pointer_type (arg1);
17061                   break;
17062
17063                 default:
17064                   break;
17065                 }
17066             }
17067           else
17068             {
17069               switch (TREE_CODE (arg2))
17070                 {
17071                 case ARRAY_TYPE:
17072                   arg2 = TREE_TYPE (arg2);
17073                   /* FALLTHROUGH. */
17074                 case FUNCTION_TYPE:
17075                   arg2 = build_pointer_type (arg2);
17076                   break;
17077
17078                 default:
17079                   break;
17080                 }
17081             }
17082         }
17083
17084       arg1 = TYPE_MAIN_VARIANT (arg1);
17085       arg2 = TYPE_MAIN_VARIANT (arg2);
17086
17087       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION)
17088         {
17089           int i, len2 = list_length (args2);
17090           tree parmvec = make_tree_vec (1);
17091           tree argvec = make_tree_vec (len2);
17092           tree ta = args2;
17093
17094           /* Setup the parameter vector, which contains only ARG1.  */
17095           TREE_VEC_ELT (parmvec, 0) = arg1;
17096
17097           /* Setup the argument vector, which contains the remaining
17098              arguments.  */
17099           for (i = 0; i < len2; i++, ta = TREE_CHAIN (ta))
17100             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
17101
17102           deduce1 = (unify_pack_expansion (tparms1, targs1, parmvec,
17103                                            argvec, DEDUCE_EXACT,
17104                                            /*subr=*/true, /*explain_p=*/false)
17105                      == 0);
17106
17107           /* We cannot deduce in the other direction, because ARG1 is
17108              a pack expansion but ARG2 is not.  */
17109           deduce2 = 0;
17110         }
17111       else if (TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
17112         {
17113           int i, len1 = list_length (args1);
17114           tree parmvec = make_tree_vec (1);
17115           tree argvec = make_tree_vec (len1);
17116           tree ta = args1;
17117
17118           /* Setup the parameter vector, which contains only ARG1.  */
17119           TREE_VEC_ELT (parmvec, 0) = arg2;
17120
17121           /* Setup the argument vector, which contains the remaining
17122              arguments.  */
17123           for (i = 0; i < len1; i++, ta = TREE_CHAIN (ta))
17124             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
17125
17126           deduce2 = (unify_pack_expansion (tparms2, targs2, parmvec,
17127                                            argvec, DEDUCE_EXACT,
17128                                            /*subr=*/true, /*explain_p=*/false)
17129                      == 0);
17130
17131           /* We cannot deduce in the other direction, because ARG2 is
17132              a pack expansion but ARG1 is not.*/
17133           deduce1 = 0;
17134         }
17135
17136       else
17137         {
17138           /* The normal case, where neither argument is a pack
17139              expansion.  */
17140           deduce1 = (unify (tparms1, targs1, arg1, arg2,
17141                             UNIFY_ALLOW_NONE, /*explain_p=*/false)
17142                      == 0);
17143           deduce2 = (unify (tparms2, targs2, arg2, arg1,
17144                             UNIFY_ALLOW_NONE, /*explain_p=*/false)
17145                      == 0);
17146         }
17147
17148       /* If we couldn't deduce arguments for tparms1 to make arg1 match
17149          arg2, then arg2 is not as specialized as arg1.  */
17150       if (!deduce1)
17151         lose2 = true;
17152       if (!deduce2)
17153         lose1 = true;
17154
17155       /* "If, for a given type, deduction succeeds in both directions
17156          (i.e., the types are identical after the transformations above)
17157          and if the type from the argument template is more cv-qualified
17158          than the type from the parameter template (as described above)
17159          that type is considered to be more specialized than the other. If
17160          neither type is more cv-qualified than the other then neither type
17161          is more specialized than the other."  */
17162
17163       if (deduce1 && deduce2
17164           && quals1 != quals2 && quals1 >= 0 && quals2 >= 0)
17165         {
17166           if ((quals1 & quals2) == quals2)
17167             lose2 = true;
17168           if ((quals1 & quals2) == quals1)
17169             lose1 = true;
17170         }
17171
17172       if (lose1 && lose2)
17173         /* We've failed to deduce something in either direction.
17174            These must be unordered.  */
17175         break;
17176
17177       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
17178           || TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
17179         /* We have already processed all of the arguments in our
17180            handing of the pack expansion type.  */
17181         len = 0;
17182
17183       args1 = TREE_CHAIN (args1);
17184       args2 = TREE_CHAIN (args2);
17185     }
17186
17187   /* "In most cases, all template parameters must have values in order for
17188      deduction to succeed, but for partial ordering purposes a template
17189      parameter may remain without a value provided it is not used in the
17190      types being used for partial ordering."
17191
17192      Thus, if we are missing any of the targs1 we need to substitute into
17193      origs1, then pat2 is not as specialized as pat1.  This can happen when
17194      there is a nondeduced context.  */
17195   if (!lose2 && check_undeduced_parms (targs1, origs1, args1))
17196     lose2 = true;
17197   if (!lose1 && check_undeduced_parms (targs2, origs2, args2))
17198     lose1 = true;
17199
17200   processing_template_decl--;
17201
17202   /* All things being equal, if the next argument is a pack expansion
17203      for one function but not for the other, prefer the
17204      non-variadic function.  FIXME this is bogus; see c++/41958.  */
17205   if (lose1 == lose2
17206       && args1 && TREE_VALUE (args1)
17207       && args2 && TREE_VALUE (args2))
17208     {
17209       lose1 = TREE_CODE (TREE_VALUE (args1)) == TYPE_PACK_EXPANSION;
17210       lose2 = TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION;
17211     }
17212
17213   if (lose1 == lose2)
17214     return 0;
17215   else if (!lose1)
17216     return 1;
17217   else
17218     return -1;
17219 }
17220
17221 /* Determine which of two partial specializations is more specialized.
17222
17223    PAT1 is a TREE_LIST whose TREE_TYPE is the _TYPE node corresponding
17224    to the first partial specialization.  The TREE_VALUE is the
17225    innermost set of template parameters for the partial
17226    specialization.  PAT2 is similar, but for the second template.
17227
17228    Return 1 if the first partial specialization is more specialized;
17229    -1 if the second is more specialized; 0 if neither is more
17230    specialized.
17231
17232    See [temp.class.order] for information about determining which of
17233    two templates is more specialized.  */
17234
17235 static int
17236 more_specialized_class (tree pat1, tree pat2)
17237 {
17238   tree targs;
17239   tree tmpl1, tmpl2;
17240   int winner = 0;
17241   bool any_deductions = false;
17242
17243   tmpl1 = TREE_TYPE (pat1);
17244   tmpl2 = TREE_TYPE (pat2);
17245
17246   /* Just like what happens for functions, if we are ordering between
17247      different class template specializations, we may encounter dependent
17248      types in the arguments, and we need our dependency check functions
17249      to behave correctly.  */
17250   ++processing_template_decl;
17251   targs = get_class_bindings (TREE_VALUE (pat1),
17252                               CLASSTYPE_TI_ARGS (tmpl1),
17253                               CLASSTYPE_TI_ARGS (tmpl2));
17254   if (targs)
17255     {
17256       --winner;
17257       any_deductions = true;
17258     }
17259
17260   targs = get_class_bindings (TREE_VALUE (pat2),
17261                               CLASSTYPE_TI_ARGS (tmpl2),
17262                               CLASSTYPE_TI_ARGS (tmpl1));
17263   if (targs)
17264     {
17265       ++winner;
17266       any_deductions = true;
17267     }
17268   --processing_template_decl;
17269
17270   /* In the case of a tie where at least one of the class templates
17271      has a parameter pack at the end, the template with the most
17272      non-packed parameters wins.  */
17273   if (winner == 0
17274       && any_deductions
17275       && (template_args_variadic_p (TREE_PURPOSE (pat1))
17276           || template_args_variadic_p (TREE_PURPOSE (pat2))))
17277     {
17278       tree args1 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat1));
17279       tree args2 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat2));
17280       int len1 = TREE_VEC_LENGTH (args1);
17281       int len2 = TREE_VEC_LENGTH (args2);
17282
17283       /* We don't count the pack expansion at the end.  */
17284       if (template_args_variadic_p (TREE_PURPOSE (pat1)))
17285         --len1;
17286       if (template_args_variadic_p (TREE_PURPOSE (pat2)))
17287         --len2;
17288
17289       if (len1 > len2)
17290         return 1;
17291       else if (len1 < len2)
17292         return -1;
17293     }
17294
17295   return winner;
17296 }
17297
17298 /* Return the template arguments that will produce the function signature
17299    DECL from the function template FN, with the explicit template
17300    arguments EXPLICIT_ARGS.  If CHECK_RETTYPE is true, the return type must
17301    also match.  Return NULL_TREE if no satisfactory arguments could be
17302    found.  */
17303
17304 static tree
17305 get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
17306 {
17307   int ntparms = DECL_NTPARMS (fn);
17308   tree targs = make_tree_vec (ntparms);
17309   tree decl_type;
17310   tree decl_arg_types;
17311   tree *args;
17312   unsigned int nargs, ix;
17313   tree arg;
17314
17315   /* Substitute the explicit template arguments into the type of DECL.
17316      The call to fn_type_unification will handle substitution into the
17317      FN.  */
17318   decl_type = TREE_TYPE (decl);
17319   if (explicit_args && uses_template_parms (decl_type))
17320     {
17321       tree tmpl;
17322       tree converted_args;
17323
17324       if (DECL_TEMPLATE_INFO (decl))
17325         tmpl = DECL_TI_TEMPLATE (decl);
17326       else
17327         /* We can get here for some invalid specializations.  */
17328         return NULL_TREE;
17329
17330       converted_args
17331         = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
17332                                  explicit_args, NULL_TREE,
17333                                  tf_none,
17334                                  /*require_all_args=*/false,
17335                                  /*use_default_args=*/false);
17336       if (converted_args == error_mark_node)
17337         return NULL_TREE;
17338
17339       decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE);
17340       if (decl_type == error_mark_node)
17341         return NULL_TREE;
17342     }
17343
17344   /* Never do unification on the 'this' parameter.  */
17345   decl_arg_types = skip_artificial_parms_for (decl, 
17346                                               TYPE_ARG_TYPES (decl_type));
17347
17348   nargs = list_length (decl_arg_types);
17349   args = XALLOCAVEC (tree, nargs);
17350   for (arg = decl_arg_types, ix = 0;
17351        arg != NULL_TREE && arg != void_list_node;
17352        arg = TREE_CHAIN (arg), ++ix)
17353     args[ix] = TREE_VALUE (arg);
17354
17355   if (fn_type_unification (fn, explicit_args, targs,
17356                            args, ix,
17357                            (check_rettype || DECL_CONV_FN_P (fn)
17358                             ? TREE_TYPE (decl_type) : NULL_TREE),
17359                            DEDUCE_EXACT, LOOKUP_NORMAL, /*explain_p=*/false))
17360     return NULL_TREE;
17361
17362   return targs;
17363 }
17364
17365 /* Return the innermost template arguments that, when applied to a
17366    template specialization whose innermost template parameters are
17367    TPARMS, and whose specialization arguments are SPEC_ARGS, yield the
17368    ARGS.
17369
17370    For example, suppose we have:
17371
17372      template <class T, class U> struct S {};
17373      template <class T> struct S<T*, int> {};
17374
17375    Then, suppose we want to get `S<double*, int>'.  The TPARMS will be
17376    {T}, the SPEC_ARGS will be {T*, int} and the ARGS will be {double*,
17377    int}.  The resulting vector will be {double}, indicating that `T'
17378    is bound to `double'.  */
17379
17380 static tree
17381 get_class_bindings (tree tparms, tree spec_args, tree args)
17382 {
17383   int i, ntparms = TREE_VEC_LENGTH (tparms);
17384   tree deduced_args;
17385   tree innermost_deduced_args;
17386
17387   innermost_deduced_args = make_tree_vec (ntparms);
17388   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
17389     {
17390       deduced_args = copy_node (args);
17391       SET_TMPL_ARGS_LEVEL (deduced_args,
17392                            TMPL_ARGS_DEPTH (deduced_args),
17393                            innermost_deduced_args);
17394     }
17395   else
17396     deduced_args = innermost_deduced_args;
17397
17398   if (unify (tparms, deduced_args,
17399              INNERMOST_TEMPLATE_ARGS (spec_args),
17400              INNERMOST_TEMPLATE_ARGS (args),
17401              UNIFY_ALLOW_NONE, /*explain_p=*/false))
17402     return NULL_TREE;
17403
17404   for (i =  0; i < ntparms; ++i)
17405     if (! TREE_VEC_ELT (innermost_deduced_args, i))
17406       return NULL_TREE;
17407
17408   /* Verify that nondeduced template arguments agree with the type
17409      obtained from argument deduction.
17410
17411      For example:
17412
17413        struct A { typedef int X; };
17414        template <class T, class U> struct C {};
17415        template <class T> struct C<T, typename T::X> {};
17416
17417      Then with the instantiation `C<A, int>', we can deduce that
17418      `T' is `A' but unify () does not check whether `typename T::X'
17419      is `int'.  */
17420   spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
17421   if (spec_args == error_mark_node
17422       /* We only need to check the innermost arguments; the other
17423          arguments will always agree.  */
17424       || !comp_template_args (INNERMOST_TEMPLATE_ARGS (spec_args),
17425                               INNERMOST_TEMPLATE_ARGS (args)))
17426     return NULL_TREE;
17427
17428   /* Now that we have bindings for all of the template arguments,
17429      ensure that the arguments deduced for the template template
17430      parameters have compatible template parameter lists.  See the use
17431      of template_template_parm_bindings_ok_p in fn_type_unification
17432      for more information.  */
17433   if (!template_template_parm_bindings_ok_p (tparms, deduced_args))
17434     return NULL_TREE;
17435
17436   return deduced_args;
17437 }
17438
17439 /* TEMPLATES is a TREE_LIST.  Each TREE_VALUE is a TEMPLATE_DECL.
17440    Return the TREE_LIST node with the most specialized template, if
17441    any.  If there is no most specialized template, the error_mark_node
17442    is returned.
17443
17444    Note that this function does not look at, or modify, the
17445    TREE_PURPOSE or TREE_TYPE of any of the nodes.  Since the node
17446    returned is one of the elements of INSTANTIATIONS, callers may
17447    store information in the TREE_PURPOSE or TREE_TYPE of the nodes,
17448    and retrieve it from the value returned.  */
17449
17450 tree
17451 most_specialized_instantiation (tree templates)
17452 {
17453   tree fn, champ;
17454
17455   ++processing_template_decl;
17456
17457   champ = templates;
17458   for (fn = TREE_CHAIN (templates); fn; fn = TREE_CHAIN (fn))
17459     {
17460       int fate = 0;
17461
17462       if (get_bindings (TREE_VALUE (champ),
17463                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
17464                         NULL_TREE, /*check_ret=*/true))
17465         fate--;
17466
17467       if (get_bindings (TREE_VALUE (fn),
17468                         DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
17469                         NULL_TREE, /*check_ret=*/true))
17470         fate++;
17471
17472       if (fate == -1)
17473         champ = fn;
17474       else if (!fate)
17475         {
17476           /* Equally specialized, move to next function.  If there
17477              is no next function, nothing's most specialized.  */
17478           fn = TREE_CHAIN (fn);
17479           champ = fn;
17480           if (!fn)
17481             break;
17482         }
17483     }
17484
17485   if (champ)
17486     /* Now verify that champ is better than everything earlier in the
17487        instantiation list.  */
17488     for (fn = templates; fn != champ; fn = TREE_CHAIN (fn))
17489       if (get_bindings (TREE_VALUE (champ),
17490                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
17491                         NULL_TREE, /*check_ret=*/true)
17492           || !get_bindings (TREE_VALUE (fn),
17493                             DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
17494                             NULL_TREE, /*check_ret=*/true))
17495         {
17496           champ = NULL_TREE;
17497           break;
17498         }
17499
17500   processing_template_decl--;
17501
17502   if (!champ)
17503     return error_mark_node;
17504
17505   return champ;
17506 }
17507
17508 /* If DECL is a specialization of some template, return the most
17509    general such template.  Otherwise, returns NULL_TREE.
17510
17511    For example, given:
17512
17513      template <class T> struct S { template <class U> void f(U); };
17514
17515    if TMPL is `template <class U> void S<int>::f(U)' this will return
17516    the full template.  This function will not trace past partial
17517    specializations, however.  For example, given in addition:
17518
17519      template <class T> struct S<T*> { template <class U> void f(U); };
17520
17521    if TMPL is `template <class U> void S<int*>::f(U)' this will return
17522    `template <class T> template <class U> S<T*>::f(U)'.  */
17523
17524 tree
17525 most_general_template (tree decl)
17526 {
17527   /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
17528      an immediate specialization.  */
17529   if (TREE_CODE (decl) == FUNCTION_DECL)
17530     {
17531       if (DECL_TEMPLATE_INFO (decl)) {
17532         decl = DECL_TI_TEMPLATE (decl);
17533
17534         /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
17535            template friend.  */
17536         if (TREE_CODE (decl) != TEMPLATE_DECL)
17537           return NULL_TREE;
17538       } else
17539         return NULL_TREE;
17540     }
17541
17542   /* Look for more and more general templates.  */
17543   while (DECL_TEMPLATE_INFO (decl))
17544     {
17545       /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
17546          (See cp-tree.h for details.)  */
17547       if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
17548         break;
17549
17550       if (CLASS_TYPE_P (TREE_TYPE (decl))
17551           && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
17552         break;
17553
17554       /* Stop if we run into an explicitly specialized class template.  */
17555       if (!DECL_NAMESPACE_SCOPE_P (decl)
17556           && DECL_CONTEXT (decl)
17557           && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
17558         break;
17559
17560       decl = DECL_TI_TEMPLATE (decl);
17561     }
17562
17563   return decl;
17564 }
17565
17566 /* Return the most specialized of the class template partial
17567    specializations of TMPL which can produce TYPE, a specialization of
17568    TMPL.  The value returned is actually a TREE_LIST; the TREE_TYPE is
17569    a _TYPE node corresponding to the partial specialization, while the
17570    TREE_PURPOSE is the set of template arguments that must be
17571    substituted into the TREE_TYPE in order to generate TYPE.
17572
17573    If the choice of partial specialization is ambiguous, a diagnostic
17574    is issued, and the error_mark_node is returned.  If there are no
17575    partial specializations of TMPL matching TYPE, then NULL_TREE is
17576    returned.  */
17577
17578 static tree
17579 most_specialized_class (tree type, tree tmpl, tsubst_flags_t complain)
17580 {
17581   tree list = NULL_TREE;
17582   tree t;
17583   tree champ;
17584   int fate;
17585   bool ambiguous_p;
17586   tree args;
17587   tree outer_args = NULL_TREE;
17588
17589   tmpl = most_general_template (tmpl);
17590   args = CLASSTYPE_TI_ARGS (type);
17591
17592   /* For determining which partial specialization to use, only the
17593      innermost args are interesting.  */
17594   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
17595     {
17596       outer_args = strip_innermost_template_args (args, 1);
17597       args = INNERMOST_TEMPLATE_ARGS (args);
17598     }
17599
17600   for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
17601     {
17602       tree partial_spec_args;
17603       tree spec_args;
17604       tree parms = TREE_VALUE (t);
17605
17606       partial_spec_args = CLASSTYPE_TI_ARGS (TREE_TYPE (t));
17607
17608       ++processing_template_decl;
17609
17610       if (outer_args)
17611         {
17612           int i;
17613
17614           /* Discard the outer levels of args, and then substitute in the
17615              template args from the enclosing class.  */
17616           partial_spec_args = INNERMOST_TEMPLATE_ARGS (partial_spec_args);
17617           partial_spec_args = tsubst_template_args
17618             (partial_spec_args, outer_args, tf_none, NULL_TREE);
17619
17620           /* PARMS already refers to just the innermost parms, but the
17621              template parms in partial_spec_args had their levels lowered
17622              by tsubst, so we need to do the same for the parm list.  We
17623              can't just tsubst the TREE_VEC itself, as tsubst wants to
17624              treat a TREE_VEC as an argument vector.  */
17625           parms = copy_node (parms);
17626           for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
17627             TREE_VEC_ELT (parms, i) =
17628               tsubst (TREE_VEC_ELT (parms, i), outer_args, tf_none, NULL_TREE);
17629
17630         }
17631
17632       partial_spec_args =
17633           coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
17634                                  add_to_template_args (outer_args,
17635                                                        partial_spec_args),
17636                                  tmpl, tf_none,
17637                                  /*require_all_args=*/true,
17638                                  /*use_default_args=*/true);
17639
17640       --processing_template_decl;
17641
17642       if (partial_spec_args == error_mark_node)
17643         return error_mark_node;
17644
17645       spec_args = get_class_bindings (parms,
17646                                       partial_spec_args,
17647                                       args);
17648       if (spec_args)
17649         {
17650           if (outer_args)
17651             spec_args = add_to_template_args (outer_args, spec_args);
17652           list = tree_cons (spec_args, TREE_VALUE (t), list);
17653           TREE_TYPE (list) = TREE_TYPE (t);
17654         }
17655     }
17656
17657   if (! list)
17658     return NULL_TREE;
17659
17660   ambiguous_p = false;
17661   t = list;
17662   champ = t;
17663   t = TREE_CHAIN (t);
17664   for (; t; t = TREE_CHAIN (t))
17665     {
17666       fate = more_specialized_class (champ, t);
17667       if (fate == 1)
17668         ;
17669       else
17670         {
17671           if (fate == 0)
17672             {
17673               t = TREE_CHAIN (t);
17674               if (! t)
17675                 {
17676                   ambiguous_p = true;
17677                   break;
17678                 }
17679             }
17680           champ = t;
17681         }
17682     }
17683
17684   if (!ambiguous_p)
17685     for (t = list; t && t != champ; t = TREE_CHAIN (t))
17686       {
17687         fate = more_specialized_class (champ, t);
17688         if (fate != 1)
17689           {
17690             ambiguous_p = true;
17691             break;
17692           }
17693       }
17694
17695   if (ambiguous_p)
17696     {
17697       const char *str;
17698       char *spaces = NULL;
17699       if (!(complain & tf_error))
17700         return error_mark_node;
17701       error ("ambiguous class template instantiation for %q#T", type);
17702       str = ngettext ("candidate is:", "candidates are:", list_length (list));
17703       for (t = list; t; t = TREE_CHAIN (t))
17704         {
17705           error ("%s %+#T", spaces ? spaces : str, TREE_TYPE (t));
17706           spaces = spaces ? spaces : get_spaces (str);
17707         }
17708       free (spaces);
17709       return error_mark_node;
17710     }
17711
17712   return champ;
17713 }
17714
17715 /* Explicitly instantiate DECL.  */
17716
17717 void
17718 do_decl_instantiation (tree decl, tree storage)
17719 {
17720   tree result = NULL_TREE;
17721   int extern_p = 0;
17722
17723   if (!decl || decl == error_mark_node)
17724     /* An error occurred, for which grokdeclarator has already issued
17725        an appropriate message.  */
17726     return;
17727   else if (! DECL_LANG_SPECIFIC (decl))
17728     {
17729       error ("explicit instantiation of non-template %q#D", decl);
17730       return;
17731     }
17732   else if (TREE_CODE (decl) == VAR_DECL)
17733     {
17734       /* There is an asymmetry here in the way VAR_DECLs and
17735          FUNCTION_DECLs are handled by grokdeclarator.  In the case of
17736          the latter, the DECL we get back will be marked as a
17737          template instantiation, and the appropriate
17738          DECL_TEMPLATE_INFO will be set up.  This does not happen for
17739          VAR_DECLs so we do the lookup here.  Probably, grokdeclarator
17740          should handle VAR_DECLs as it currently handles
17741          FUNCTION_DECLs.  */
17742       if (!DECL_CLASS_SCOPE_P (decl))
17743         {
17744           error ("%qD is not a static data member of a class template", decl);
17745           return;
17746         }
17747       result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
17748       if (!result || TREE_CODE (result) != VAR_DECL)
17749         {
17750           error ("no matching template for %qD found", decl);
17751           return;
17752         }
17753       if (!same_type_p (TREE_TYPE (result), TREE_TYPE (decl)))
17754         {
17755           error ("type %qT for explicit instantiation %qD does not match "
17756                  "declared type %qT", TREE_TYPE (result), decl,
17757                  TREE_TYPE (decl));
17758           return;
17759         }
17760     }
17761   else if (TREE_CODE (decl) != FUNCTION_DECL)
17762     {
17763       error ("explicit instantiation of %q#D", decl);
17764       return;
17765     }
17766   else
17767     result = decl;
17768
17769   /* Check for various error cases.  Note that if the explicit
17770      instantiation is valid the RESULT will currently be marked as an
17771      *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
17772      until we get here.  */
17773
17774   if (DECL_TEMPLATE_SPECIALIZATION (result))
17775     {
17776       /* DR 259 [temp.spec].
17777
17778          Both an explicit instantiation and a declaration of an explicit
17779          specialization shall not appear in a program unless the explicit
17780          instantiation follows a declaration of the explicit specialization.
17781
17782          For a given set of template parameters, if an explicit
17783          instantiation of a template appears after a declaration of an
17784          explicit specialization for that template, the explicit
17785          instantiation has no effect.  */
17786       return;
17787     }
17788   else if (DECL_EXPLICIT_INSTANTIATION (result))
17789     {
17790       /* [temp.spec]
17791
17792          No program shall explicitly instantiate any template more
17793          than once.
17794
17795          We check DECL_NOT_REALLY_EXTERN so as not to complain when
17796          the first instantiation was `extern' and the second is not,
17797          and EXTERN_P for the opposite case.  */
17798       if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
17799         permerror (input_location, "duplicate explicit instantiation of %q#D", result);
17800       /* If an "extern" explicit instantiation follows an ordinary
17801          explicit instantiation, the template is instantiated.  */
17802       if (extern_p)
17803         return;
17804     }
17805   else if (!DECL_IMPLICIT_INSTANTIATION (result))
17806     {
17807       error ("no matching template for %qD found", result);
17808       return;
17809     }
17810   else if (!DECL_TEMPLATE_INFO (result))
17811     {
17812       permerror (input_location, "explicit instantiation of non-template %q#D", result);
17813       return;
17814     }
17815
17816   if (storage == NULL_TREE)
17817     ;
17818   else if (storage == ridpointers[(int) RID_EXTERN])
17819     {
17820       if (!in_system_header && (cxx_dialect == cxx98))
17821         pedwarn (input_location, OPT_pedantic, 
17822                  "ISO C++ 1998 forbids the use of %<extern%> on explicit "
17823                  "instantiations");
17824       extern_p = 1;
17825     }
17826   else
17827     error ("storage class %qD applied to template instantiation", storage);
17828
17829   check_explicit_instantiation_namespace (result);
17830   mark_decl_instantiated (result, extern_p);
17831   if (! extern_p)
17832     instantiate_decl (result, /*defer_ok=*/1,
17833                       /*expl_inst_class_mem_p=*/false);
17834 }
17835
17836 static void
17837 mark_class_instantiated (tree t, int extern_p)
17838 {
17839   SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
17840   SET_CLASSTYPE_INTERFACE_KNOWN (t);
17841   CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
17842   TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
17843   if (! extern_p)
17844     {
17845       CLASSTYPE_DEBUG_REQUESTED (t) = 1;
17846       rest_of_type_compilation (t, 1);
17847     }
17848 }
17849
17850 /* Called from do_type_instantiation through binding_table_foreach to
17851    do recursive instantiation for the type bound in ENTRY.  */
17852 static void
17853 bt_instantiate_type_proc (binding_entry entry, void *data)
17854 {
17855   tree storage = *(tree *) data;
17856
17857   if (MAYBE_CLASS_TYPE_P (entry->type)
17858       && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
17859     do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
17860 }
17861
17862 /* Called from do_type_instantiation to instantiate a member
17863    (a member function or a static member variable) of an
17864    explicitly instantiated class template.  */
17865 static void
17866 instantiate_class_member (tree decl, int extern_p)
17867 {
17868   mark_decl_instantiated (decl, extern_p);
17869   if (! extern_p)
17870     instantiate_decl (decl, /*defer_ok=*/1,
17871                       /*expl_inst_class_mem_p=*/true);
17872 }
17873
17874 /* Perform an explicit instantiation of template class T.  STORAGE, if
17875    non-null, is the RID for extern, inline or static.  COMPLAIN is
17876    nonzero if this is called from the parser, zero if called recursively,
17877    since the standard is unclear (as detailed below).  */
17878
17879 void
17880 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
17881 {
17882   int extern_p = 0;
17883   int nomem_p = 0;
17884   int static_p = 0;
17885   int previous_instantiation_extern_p = 0;
17886
17887   if (TREE_CODE (t) == TYPE_DECL)
17888     t = TREE_TYPE (t);
17889
17890   if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
17891     {
17892       tree tmpl =
17893         (TYPE_TEMPLATE_INFO (t)) ? TYPE_TI_TEMPLATE (t) : NULL;
17894       if (tmpl)
17895         error ("explicit instantiation of non-class template %qD", tmpl);
17896       else
17897         error ("explicit instantiation of non-template type %qT", t);
17898       return;
17899     }
17900
17901   complete_type (t);
17902
17903   if (!COMPLETE_TYPE_P (t))
17904     {
17905       if (complain & tf_error)
17906         error ("explicit instantiation of %q#T before definition of template",
17907                t);
17908       return;
17909     }
17910
17911   if (storage != NULL_TREE)
17912     {
17913       if (!in_system_header)
17914         {
17915           if (storage == ridpointers[(int) RID_EXTERN])
17916             {
17917               if (cxx_dialect == cxx98)
17918                 pedwarn (input_location, OPT_pedantic, 
17919                          "ISO C++ 1998 forbids the use of %<extern%> on "
17920                          "explicit instantiations");
17921             }
17922           else
17923             pedwarn (input_location, OPT_pedantic, 
17924                      "ISO C++ forbids the use of %qE"
17925                      " on explicit instantiations", storage);
17926         }
17927
17928       if (storage == ridpointers[(int) RID_INLINE])
17929         nomem_p = 1;
17930       else if (storage == ridpointers[(int) RID_EXTERN])
17931         extern_p = 1;
17932       else if (storage == ridpointers[(int) RID_STATIC])
17933         static_p = 1;
17934       else
17935         {
17936           error ("storage class %qD applied to template instantiation",
17937                  storage);
17938           extern_p = 0;
17939         }
17940     }
17941
17942   if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
17943     {
17944       /* DR 259 [temp.spec].
17945
17946          Both an explicit instantiation and a declaration of an explicit
17947          specialization shall not appear in a program unless the explicit
17948          instantiation follows a declaration of the explicit specialization.
17949
17950          For a given set of template parameters, if an explicit
17951          instantiation of a template appears after a declaration of an
17952          explicit specialization for that template, the explicit
17953          instantiation has no effect.  */
17954       return;
17955     }
17956   else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
17957     {
17958       /* [temp.spec]
17959
17960          No program shall explicitly instantiate any template more
17961          than once.
17962
17963          If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
17964          instantiation was `extern'.  If EXTERN_P then the second is.
17965          These cases are OK.  */
17966       previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
17967
17968       if (!previous_instantiation_extern_p && !extern_p
17969           && (complain & tf_error))
17970         permerror (input_location, "duplicate explicit instantiation of %q#T", t);
17971
17972       /* If we've already instantiated the template, just return now.  */
17973       if (!CLASSTYPE_INTERFACE_ONLY (t))
17974         return;
17975     }
17976
17977   check_explicit_instantiation_namespace (TYPE_NAME (t));
17978   mark_class_instantiated (t, extern_p);
17979
17980   if (nomem_p)
17981     return;
17982
17983   {
17984     tree tmp;
17985
17986     /* In contrast to implicit instantiation, where only the
17987        declarations, and not the definitions, of members are
17988        instantiated, we have here:
17989
17990          [temp.explicit]
17991
17992          The explicit instantiation of a class template specialization
17993          implies the instantiation of all of its members not
17994          previously explicitly specialized in the translation unit
17995          containing the explicit instantiation.
17996
17997        Of course, we can't instantiate member template classes, since
17998        we don't have any arguments for them.  Note that the standard
17999        is unclear on whether the instantiation of the members are
18000        *explicit* instantiations or not.  However, the most natural
18001        interpretation is that it should be an explicit instantiation.  */
18002
18003     if (! static_p)
18004       for (tmp = TYPE_METHODS (t); tmp; tmp = DECL_CHAIN (tmp))
18005         if (TREE_CODE (tmp) == FUNCTION_DECL
18006             && DECL_TEMPLATE_INSTANTIATION (tmp))
18007           instantiate_class_member (tmp, extern_p);
18008
18009     for (tmp = TYPE_FIELDS (t); tmp; tmp = DECL_CHAIN (tmp))
18010       if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
18011         instantiate_class_member (tmp, extern_p);
18012
18013     if (CLASSTYPE_NESTED_UTDS (t))
18014       binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
18015                              bt_instantiate_type_proc, &storage);
18016   }
18017 }
18018
18019 /* Given a function DECL, which is a specialization of TMPL, modify
18020    DECL to be a re-instantiation of TMPL with the same template
18021    arguments.  TMPL should be the template into which tsubst'ing
18022    should occur for DECL, not the most general template.
18023
18024    One reason for doing this is a scenario like this:
18025
18026      template <class T>
18027      void f(const T&, int i);
18028
18029      void g() { f(3, 7); }
18030
18031      template <class T>
18032      void f(const T& t, const int i) { }
18033
18034    Note that when the template is first instantiated, with
18035    instantiate_template, the resulting DECL will have no name for the
18036    first parameter, and the wrong type for the second.  So, when we go
18037    to instantiate the DECL, we regenerate it.  */
18038
18039 static void
18040 regenerate_decl_from_template (tree decl, tree tmpl)
18041 {
18042   /* The arguments used to instantiate DECL, from the most general
18043      template.  */
18044   tree args;
18045   tree code_pattern;
18046
18047   args = DECL_TI_ARGS (decl);
18048   code_pattern = DECL_TEMPLATE_RESULT (tmpl);
18049
18050   /* Make sure that we can see identifiers, and compute access
18051      correctly.  */
18052   push_access_scope (decl);
18053
18054   if (TREE_CODE (decl) == FUNCTION_DECL)
18055     {
18056       tree decl_parm;
18057       tree pattern_parm;
18058       tree specs;
18059       int args_depth;
18060       int parms_depth;
18061
18062       args_depth = TMPL_ARGS_DEPTH (args);
18063       parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
18064       if (args_depth > parms_depth)
18065         args = get_innermost_template_args (args, parms_depth);
18066
18067       specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
18068                                               args, tf_error, NULL_TREE,
18069                                               /*defer_ok*/false);
18070       if (specs && specs != error_mark_node)
18071         TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
18072                                                     specs);
18073
18074       /* Merge parameter declarations.  */
18075       decl_parm = skip_artificial_parms_for (decl,
18076                                              DECL_ARGUMENTS (decl));
18077       pattern_parm
18078         = skip_artificial_parms_for (code_pattern,
18079                                      DECL_ARGUMENTS (code_pattern));
18080       while (decl_parm && !FUNCTION_PARAMETER_PACK_P (pattern_parm))
18081         {
18082           tree parm_type;
18083           tree attributes;
18084           
18085           if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
18086             DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
18087           parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
18088                               NULL_TREE);
18089           parm_type = type_decays_to (parm_type);
18090           if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
18091             TREE_TYPE (decl_parm) = parm_type;
18092           attributes = DECL_ATTRIBUTES (pattern_parm);
18093           if (DECL_ATTRIBUTES (decl_parm) != attributes)
18094             {
18095               DECL_ATTRIBUTES (decl_parm) = attributes;
18096               cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
18097             }
18098           decl_parm = DECL_CHAIN (decl_parm);
18099           pattern_parm = DECL_CHAIN (pattern_parm);
18100         }
18101       /* Merge any parameters that match with the function parameter
18102          pack.  */
18103       if (pattern_parm && FUNCTION_PARAMETER_PACK_P (pattern_parm))
18104         {
18105           int i, len;
18106           tree expanded_types;
18107           /* Expand the TYPE_PACK_EXPANSION that provides the types for
18108              the parameters in this function parameter pack.  */
18109           expanded_types = tsubst_pack_expansion (TREE_TYPE (pattern_parm), 
18110                                                  args, tf_error, NULL_TREE);
18111           len = TREE_VEC_LENGTH (expanded_types);
18112           for (i = 0; i < len; i++)
18113             {
18114               tree parm_type;
18115               tree attributes;
18116           
18117               if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
18118                 /* Rename the parameter to include the index.  */
18119                 DECL_NAME (decl_parm) = 
18120                   make_ith_pack_parameter_name (DECL_NAME (pattern_parm), i);
18121               parm_type = TREE_VEC_ELT (expanded_types, i);
18122               parm_type = type_decays_to (parm_type);
18123               if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
18124                 TREE_TYPE (decl_parm) = parm_type;
18125               attributes = DECL_ATTRIBUTES (pattern_parm);
18126               if (DECL_ATTRIBUTES (decl_parm) != attributes)
18127                 {
18128                   DECL_ATTRIBUTES (decl_parm) = attributes;
18129                   cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
18130                 }
18131               decl_parm = DECL_CHAIN (decl_parm);
18132             }
18133         }
18134       /* Merge additional specifiers from the CODE_PATTERN.  */
18135       if (DECL_DECLARED_INLINE_P (code_pattern)
18136           && !DECL_DECLARED_INLINE_P (decl))
18137         DECL_DECLARED_INLINE_P (decl) = 1;
18138     }
18139   else if (TREE_CODE (decl) == VAR_DECL)
18140     {
18141       DECL_INITIAL (decl) =
18142         tsubst_expr (DECL_INITIAL (code_pattern), args,
18143                      tf_error, DECL_TI_TEMPLATE (decl),
18144                      /*integral_constant_expression_p=*/false);
18145       if (VAR_HAD_UNKNOWN_BOUND (decl))
18146         TREE_TYPE (decl) = tsubst (TREE_TYPE (code_pattern), args,
18147                                    tf_error, DECL_TI_TEMPLATE (decl));
18148     }
18149   else
18150     gcc_unreachable ();
18151
18152   pop_access_scope (decl);
18153 }
18154
18155 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
18156    substituted to get DECL.  */
18157
18158 tree
18159 template_for_substitution (tree decl)
18160 {
18161   tree tmpl = DECL_TI_TEMPLATE (decl);
18162
18163   /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
18164      for the instantiation.  This is not always the most general
18165      template.  Consider, for example:
18166
18167         template <class T>
18168         struct S { template <class U> void f();
18169                    template <> void f<int>(); };
18170
18171      and an instantiation of S<double>::f<int>.  We want TD to be the
18172      specialization S<T>::f<int>, not the more general S<T>::f<U>.  */
18173   while (/* An instantiation cannot have a definition, so we need a
18174             more general template.  */
18175          DECL_TEMPLATE_INSTANTIATION (tmpl)
18176            /* We must also deal with friend templates.  Given:
18177
18178                 template <class T> struct S {
18179                   template <class U> friend void f() {};
18180                 };
18181
18182               S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
18183               so far as the language is concerned, but that's still
18184               where we get the pattern for the instantiation from.  On
18185               other hand, if the definition comes outside the class, say:
18186
18187                 template <class T> struct S {
18188                   template <class U> friend void f();
18189                 };
18190                 template <class U> friend void f() {}
18191
18192               we don't need to look any further.  That's what the check for
18193               DECL_INITIAL is for.  */
18194           || (TREE_CODE (decl) == FUNCTION_DECL
18195               && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
18196               && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
18197     {
18198       /* The present template, TD, should not be a definition.  If it
18199          were a definition, we should be using it!  Note that we
18200          cannot restructure the loop to just keep going until we find
18201          a template with a definition, since that might go too far if
18202          a specialization was declared, but not defined.  */
18203       gcc_assert (TREE_CODE (decl) != VAR_DECL
18204                   || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl)));
18205
18206       /* Fetch the more general template.  */
18207       tmpl = DECL_TI_TEMPLATE (tmpl);
18208     }
18209
18210   return tmpl;
18211 }
18212
18213 /* Returns true if we need to instantiate this template instance even if we
18214    know we aren't going to emit it..  */
18215
18216 bool
18217 always_instantiate_p (tree decl)
18218 {
18219   /* We always instantiate inline functions so that we can inline them.  An
18220      explicit instantiation declaration prohibits implicit instantiation of
18221      non-inline functions.  With high levels of optimization, we would
18222      normally inline non-inline functions -- but we're not allowed to do
18223      that for "extern template" functions.  Therefore, we check
18224      DECL_DECLARED_INLINE_P, rather than possibly_inlined_p.  */
18225   return ((TREE_CODE (decl) == FUNCTION_DECL
18226            && DECL_DECLARED_INLINE_P (decl))
18227           /* And we need to instantiate static data members so that
18228              their initializers are available in integral constant
18229              expressions.  */
18230           || (TREE_CODE (decl) == VAR_DECL
18231               && decl_maybe_constant_var_p (decl)));
18232 }
18233
18234 /* If FN has a noexcept-specifier that hasn't been instantiated yet,
18235    instantiate it now, modifying TREE_TYPE (fn).  */
18236
18237 void
18238 maybe_instantiate_noexcept (tree fn)
18239 {
18240   tree fntype, spec, noex, clone;
18241
18242   if (DECL_CLONED_FUNCTION_P (fn))
18243     fn = DECL_CLONED_FUNCTION (fn);
18244   fntype = TREE_TYPE (fn);
18245   spec = TYPE_RAISES_EXCEPTIONS (fntype);
18246
18247   if (!DEFERRED_NOEXCEPT_SPEC_P (spec))
18248     return;
18249
18250   noex = TREE_PURPOSE (spec);
18251
18252   if (TREE_CODE (noex) == DEFERRED_NOEXCEPT)
18253     {
18254       if (push_tinst_level (fn))
18255         {
18256           push_access_scope (fn);
18257           input_location = DECL_SOURCE_LOCATION (fn);
18258           noex = tsubst_copy_and_build (DEFERRED_NOEXCEPT_PATTERN (noex),
18259                                         DEFERRED_NOEXCEPT_ARGS (noex),
18260                                         tf_warning_or_error, fn,
18261                                         /*function_p=*/false,
18262                                         /*integral_constant_expression_p=*/true);
18263           pop_access_scope (fn);
18264           pop_tinst_level ();
18265           spec = build_noexcept_spec (noex, tf_warning_or_error);
18266           if (spec == error_mark_node)
18267             spec = noexcept_false_spec;
18268         }
18269       else
18270         spec = noexcept_false_spec;
18271     }
18272   else
18273     {
18274       /* This is an implicitly declared function, so NOEX is a list of
18275          other functions to evaluate and merge.  */
18276       tree elt;
18277       spec = noexcept_true_spec;
18278       for (elt = noex; elt; elt = OVL_NEXT (elt))
18279         {
18280           tree fn = OVL_CURRENT (elt);
18281           tree subspec;
18282           maybe_instantiate_noexcept (fn);
18283           subspec = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn));
18284           spec = merge_exception_specifiers (spec, subspec, NULL_TREE);
18285         }
18286     }
18287
18288   TREE_TYPE (fn) = build_exception_variant (fntype, spec);
18289
18290   FOR_EACH_CLONE (clone, fn)
18291     {
18292       if (TREE_TYPE (clone) == fntype)
18293         TREE_TYPE (clone) = TREE_TYPE (fn);
18294       else
18295         TREE_TYPE (clone) = build_exception_variant (TREE_TYPE (clone), spec);
18296     }
18297 }
18298
18299 /* Produce the definition of D, a _DECL generated from a template.  If
18300    DEFER_OK is nonzero, then we don't have to actually do the
18301    instantiation now; we just have to do it sometime.  Normally it is
18302    an error if this is an explicit instantiation but D is undefined.
18303    EXPL_INST_CLASS_MEM_P is true iff D is a member of an
18304    explicitly instantiated class template.  */
18305
18306 tree
18307 instantiate_decl (tree d, int defer_ok,
18308                   bool expl_inst_class_mem_p)
18309 {
18310   tree tmpl = DECL_TI_TEMPLATE (d);
18311   tree gen_args;
18312   tree args;
18313   tree td;
18314   tree code_pattern;
18315   tree spec;
18316   tree gen_tmpl;
18317   bool pattern_defined;
18318   int need_push;
18319   location_t saved_loc = input_location;
18320   bool external_p;
18321
18322   /* This function should only be used to instantiate templates for
18323      functions and static member variables.  */
18324   gcc_assert (TREE_CODE (d) == FUNCTION_DECL
18325               || TREE_CODE (d) == VAR_DECL);
18326
18327   /* Variables are never deferred; if instantiation is required, they
18328      are instantiated right away.  That allows for better code in the
18329      case that an expression refers to the value of the variable --
18330      if the variable has a constant value the referring expression can
18331      take advantage of that fact.  */
18332   if (TREE_CODE (d) == VAR_DECL
18333       || DECL_DECLARED_CONSTEXPR_P (d))
18334     defer_ok = 0;
18335
18336   /* Don't instantiate cloned functions.  Instead, instantiate the
18337      functions they cloned.  */
18338   if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
18339     d = DECL_CLONED_FUNCTION (d);
18340
18341   if (DECL_TEMPLATE_INSTANTIATED (d)
18342       || (TREE_CODE (d) == FUNCTION_DECL
18343           && DECL_DEFAULTED_FN (d) && DECL_INITIAL (d))
18344       || DECL_TEMPLATE_SPECIALIZATION (d))
18345     /* D has already been instantiated or explicitly specialized, so
18346        there's nothing for us to do here.
18347
18348        It might seem reasonable to check whether or not D is an explicit
18349        instantiation, and, if so, stop here.  But when an explicit
18350        instantiation is deferred until the end of the compilation,
18351        DECL_EXPLICIT_INSTANTIATION is set, even though we still need to do
18352        the instantiation.  */
18353     return d;
18354
18355   /* Check to see whether we know that this template will be
18356      instantiated in some other file, as with "extern template"
18357      extension.  */
18358   external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
18359
18360   /* In general, we do not instantiate such templates.  */
18361   if (external_p && !always_instantiate_p (d))
18362     return d;
18363
18364   gen_tmpl = most_general_template (tmpl);
18365   gen_args = DECL_TI_ARGS (d);
18366
18367   if (tmpl != gen_tmpl)
18368     /* We should already have the extra args.  */
18369     gcc_assert (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (gen_tmpl))
18370                 == TMPL_ARGS_DEPTH (gen_args));
18371   /* And what's in the hash table should match D.  */
18372   gcc_assert ((spec = retrieve_specialization (gen_tmpl, gen_args, 0)) == d
18373               || spec == NULL_TREE);
18374
18375   /* This needs to happen before any tsubsting.  */
18376   if (! push_tinst_level (d))
18377     return d;
18378
18379   timevar_push (TV_TEMPLATE_INST);
18380
18381   /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
18382      for the instantiation.  */
18383   td = template_for_substitution (d);
18384   code_pattern = DECL_TEMPLATE_RESULT (td);
18385
18386   /* We should never be trying to instantiate a member of a class
18387      template or partial specialization.  */
18388   gcc_assert (d != code_pattern);
18389
18390   if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
18391       || DECL_TEMPLATE_SPECIALIZATION (td))
18392     /* In the case of a friend template whose definition is provided
18393        outside the class, we may have too many arguments.  Drop the
18394        ones we don't need.  The same is true for specializations.  */
18395     args = get_innermost_template_args
18396       (gen_args, TMPL_PARMS_DEPTH  (DECL_TEMPLATE_PARMS (td)));
18397   else
18398     args = gen_args;
18399
18400   if (TREE_CODE (d) == FUNCTION_DECL)
18401     pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE
18402                        || DECL_DEFAULTED_OUTSIDE_CLASS_P (code_pattern));
18403   else
18404     pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
18405
18406   /* We may be in the middle of deferred access check.  Disable it now.  */
18407   push_deferring_access_checks (dk_no_deferred);
18408
18409   /* Unless an explicit instantiation directive has already determined
18410      the linkage of D, remember that a definition is available for
18411      this entity.  */
18412   if (pattern_defined
18413       && !DECL_INTERFACE_KNOWN (d)
18414       && !DECL_NOT_REALLY_EXTERN (d))
18415     mark_definable (d);
18416
18417   DECL_SOURCE_LOCATION (td) = DECL_SOURCE_LOCATION (code_pattern);
18418   DECL_SOURCE_LOCATION (d) = DECL_SOURCE_LOCATION (code_pattern);
18419   input_location = DECL_SOURCE_LOCATION (d);
18420
18421   /* If D is a member of an explicitly instantiated class template,
18422      and no definition is available, treat it like an implicit
18423      instantiation.  */
18424   if (!pattern_defined && expl_inst_class_mem_p
18425       && DECL_EXPLICIT_INSTANTIATION (d))
18426     {
18427       /* Leave linkage flags alone on instantiations with anonymous
18428          visibility.  */
18429       if (TREE_PUBLIC (d))
18430         {
18431           DECL_NOT_REALLY_EXTERN (d) = 0;
18432           DECL_INTERFACE_KNOWN (d) = 0;
18433         }
18434       SET_DECL_IMPLICIT_INSTANTIATION (d);
18435     }
18436
18437   if (TREE_CODE (d) == FUNCTION_DECL)
18438     maybe_instantiate_noexcept (d);
18439
18440   /* Recheck the substitutions to obtain any warning messages
18441      about ignoring cv qualifiers.  Don't do this for artificial decls,
18442      as it breaks the context-sensitive substitution for lambda op(). */
18443   if (!defer_ok && !DECL_ARTIFICIAL (d))
18444     {
18445       tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
18446       tree type = TREE_TYPE (gen);
18447
18448       /* Make sure that we can see identifiers, and compute access
18449          correctly.  D is already the target FUNCTION_DECL with the
18450          right context.  */
18451       push_access_scope (d);
18452
18453       if (TREE_CODE (gen) == FUNCTION_DECL)
18454         {
18455           tsubst (DECL_ARGUMENTS (gen), gen_args, tf_warning_or_error, d);
18456           tsubst_exception_specification (type, gen_args, tf_warning_or_error,
18457                                           d, /*defer_ok*/true);
18458           /* Don't simply tsubst the function type, as that will give
18459              duplicate warnings about poor parameter qualifications.
18460              The function arguments are the same as the decl_arguments
18461              without the top level cv qualifiers.  */
18462           type = TREE_TYPE (type);
18463         }
18464       tsubst (type, gen_args, tf_warning_or_error, d);
18465
18466       pop_access_scope (d);
18467     }
18468
18469   /* Defer all other templates, unless we have been explicitly
18470      forbidden from doing so.  */
18471   if (/* If there is no definition, we cannot instantiate the
18472          template.  */
18473       ! pattern_defined
18474       /* If it's OK to postpone instantiation, do so.  */
18475       || defer_ok
18476       /* If this is a static data member that will be defined
18477          elsewhere, we don't want to instantiate the entire data
18478          member, but we do want to instantiate the initializer so that
18479          we can substitute that elsewhere.  */
18480       || (external_p && TREE_CODE (d) == VAR_DECL))
18481     {
18482       /* The definition of the static data member is now required so
18483          we must substitute the initializer.  */
18484       if (TREE_CODE (d) == VAR_DECL
18485           && !DECL_INITIAL (d)
18486           && DECL_INITIAL (code_pattern))
18487         {
18488           tree ns;
18489           tree init;
18490           bool const_init = false;
18491
18492           ns = decl_namespace_context (d);
18493           push_nested_namespace (ns);
18494           push_nested_class (DECL_CONTEXT (d));
18495           init = tsubst_expr (DECL_INITIAL (code_pattern),
18496                               args,
18497                               tf_warning_or_error, NULL_TREE,
18498                               /*integral_constant_expression_p=*/false);
18499           /* Make sure the initializer is still constant, in case of
18500              circular dependency (template/instantiate6.C). */
18501           const_init
18502             = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (code_pattern);
18503           cp_finish_decl (d, init, /*init_const_expr_p=*/const_init,
18504                           /*asmspec_tree=*/NULL_TREE,
18505                           LOOKUP_ONLYCONVERTING);
18506           pop_nested_class ();
18507           pop_nested_namespace (ns);
18508         }
18509
18510       /* We restore the source position here because it's used by
18511          add_pending_template.  */
18512       input_location = saved_loc;
18513
18514       if (at_eof && !pattern_defined
18515           && DECL_EXPLICIT_INSTANTIATION (d)
18516           && DECL_NOT_REALLY_EXTERN (d))
18517         /* [temp.explicit]
18518
18519            The definition of a non-exported function template, a
18520            non-exported member function template, or a non-exported
18521            member function or static data member of a class template
18522            shall be present in every translation unit in which it is
18523            explicitly instantiated.  */
18524         permerror (input_location,  "explicit instantiation of %qD "
18525                    "but no definition available", d);
18526
18527       /* If we're in unevaluated context, we just wanted to get the
18528          constant value; this isn't an odr use, so don't queue
18529          a full instantiation.  */
18530       if (cp_unevaluated_operand != 0)
18531         goto out;
18532       /* ??? Historically, we have instantiated inline functions, even
18533          when marked as "extern template".  */
18534       if (!(external_p && TREE_CODE (d) == VAR_DECL))
18535         add_pending_template (d);
18536       goto out;
18537     }
18538   /* Tell the repository that D is available in this translation unit
18539      -- and see if it is supposed to be instantiated here.  */
18540   if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
18541     {
18542       /* In a PCH file, despite the fact that the repository hasn't
18543          requested instantiation in the PCH it is still possible that
18544          an instantiation will be required in a file that includes the
18545          PCH.  */
18546       if (pch_file)
18547         add_pending_template (d);
18548       /* Instantiate inline functions so that the inliner can do its
18549          job, even though we'll not be emitting a copy of this
18550          function.  */
18551       if (!(TREE_CODE (d) == FUNCTION_DECL && possibly_inlined_p (d)))
18552         goto out;
18553     }
18554
18555   need_push = !cfun || !global_bindings_p ();
18556   if (need_push)
18557     push_to_top_level ();
18558
18559   /* Mark D as instantiated so that recursive calls to
18560      instantiate_decl do not try to instantiate it again.  */
18561   DECL_TEMPLATE_INSTANTIATED (d) = 1;
18562
18563   /* Regenerate the declaration in case the template has been modified
18564      by a subsequent redeclaration.  */
18565   regenerate_decl_from_template (d, td);
18566
18567   /* We already set the file and line above.  Reset them now in case
18568      they changed as a result of calling regenerate_decl_from_template.  */
18569   input_location = DECL_SOURCE_LOCATION (d);
18570
18571   if (TREE_CODE (d) == VAR_DECL)
18572     {
18573       tree init;
18574       bool const_init = false;
18575
18576       /* Clear out DECL_RTL; whatever was there before may not be right
18577          since we've reset the type of the declaration.  */
18578       SET_DECL_RTL (d, NULL);
18579       DECL_IN_AGGR_P (d) = 0;
18580
18581       /* The initializer is placed in DECL_INITIAL by
18582          regenerate_decl_from_template so we don't need to
18583          push/pop_access_scope again here.  Pull it out so that
18584          cp_finish_decl can process it.  */
18585       init = DECL_INITIAL (d);
18586       DECL_INITIAL (d) = NULL_TREE;
18587       DECL_INITIALIZED_P (d) = 0;
18588
18589       /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
18590          initializer.  That function will defer actual emission until
18591          we have a chance to determine linkage.  */
18592       DECL_EXTERNAL (d) = 0;
18593
18594       /* Enter the scope of D so that access-checking works correctly.  */
18595       push_nested_class (DECL_CONTEXT (d));
18596       const_init = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (code_pattern);
18597       cp_finish_decl (d, init, const_init, NULL_TREE, 0);
18598       pop_nested_class ();
18599     }
18600   else if (TREE_CODE (d) == FUNCTION_DECL && DECL_DEFAULTED_FN (code_pattern))
18601     synthesize_method (d);
18602   else if (TREE_CODE (d) == FUNCTION_DECL)
18603     {
18604       htab_t saved_local_specializations;
18605       tree subst_decl;
18606       tree tmpl_parm;
18607       tree spec_parm;
18608
18609       /* Save away the current list, in case we are instantiating one
18610          template from within the body of another.  */
18611       saved_local_specializations = local_specializations;
18612
18613       /* Set up the list of local specializations.  */
18614       local_specializations = htab_create (37,
18615                                            hash_local_specialization,
18616                                            eq_local_specializations,
18617                                            NULL);
18618
18619       /* Set up context.  */
18620       start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
18621
18622       /* Create substitution entries for the parameters.  */
18623       subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
18624       tmpl_parm = DECL_ARGUMENTS (subst_decl);
18625       spec_parm = DECL_ARGUMENTS (d);
18626       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
18627         {
18628           register_local_specialization (spec_parm, tmpl_parm);
18629           spec_parm = skip_artificial_parms_for (d, spec_parm);
18630           tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
18631         }
18632       for (; tmpl_parm; tmpl_parm = DECL_CHAIN (tmpl_parm))
18633         {
18634           if (!FUNCTION_PARAMETER_PACK_P (tmpl_parm))
18635             {
18636               register_local_specialization (spec_parm, tmpl_parm);
18637               spec_parm = DECL_CHAIN (spec_parm);
18638             }
18639           else
18640             {
18641               /* Register the (value) argument pack as a specialization of
18642                  TMPL_PARM, then move on.  */
18643               tree argpack = extract_fnparm_pack (tmpl_parm, &spec_parm);
18644               register_local_specialization (argpack, tmpl_parm);
18645             }
18646         }
18647       gcc_assert (!spec_parm);
18648
18649       /* Substitute into the body of the function.  */
18650       tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
18651                    tf_warning_or_error, tmpl,
18652                    /*integral_constant_expression_p=*/false);
18653
18654       /* Set the current input_location to the end of the function
18655          so that finish_function knows where we are.  */
18656       input_location = DECL_STRUCT_FUNCTION (code_pattern)->function_end_locus;
18657
18658       /* We don't need the local specializations any more.  */
18659       htab_delete (local_specializations);
18660       local_specializations = saved_local_specializations;
18661
18662       /* Finish the function.  */
18663       d = finish_function (0);
18664       expand_or_defer_fn (d);
18665     }
18666
18667   /* We're not deferring instantiation any more.  */
18668   TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
18669
18670   if (need_push)
18671     pop_from_top_level ();
18672
18673 out:
18674   input_location = saved_loc;
18675   pop_deferring_access_checks ();
18676   pop_tinst_level ();
18677
18678   timevar_pop (TV_TEMPLATE_INST);
18679
18680   return d;
18681 }
18682
18683 /* Run through the list of templates that we wish we could
18684    instantiate, and instantiate any we can.  RETRIES is the
18685    number of times we retry pending template instantiation.  */
18686
18687 void
18688 instantiate_pending_templates (int retries)
18689 {
18690   int reconsider;
18691   location_t saved_loc = input_location;
18692
18693   /* Instantiating templates may trigger vtable generation.  This in turn
18694      may require further template instantiations.  We place a limit here
18695      to avoid infinite loop.  */
18696   if (pending_templates && retries >= max_tinst_depth)
18697     {
18698       tree decl = pending_templates->tinst->decl;
18699
18700       error ("template instantiation depth exceeds maximum of %d"
18701              " instantiating %q+D, possibly from virtual table generation"
18702              " (use -ftemplate-depth= to increase the maximum)",
18703              max_tinst_depth, decl);
18704       if (TREE_CODE (decl) == FUNCTION_DECL)
18705         /* Pretend that we defined it.  */
18706         DECL_INITIAL (decl) = error_mark_node;
18707       return;
18708     }
18709
18710   do
18711     {
18712       struct pending_template **t = &pending_templates;
18713       struct pending_template *last = NULL;
18714       reconsider = 0;
18715       while (*t)
18716         {
18717           tree instantiation = reopen_tinst_level ((*t)->tinst);
18718           bool complete = false;
18719
18720           if (TYPE_P (instantiation))
18721             {
18722               tree fn;
18723
18724               if (!COMPLETE_TYPE_P (instantiation))
18725                 {
18726                   instantiate_class_template (instantiation);
18727                   if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
18728                     for (fn = TYPE_METHODS (instantiation);
18729                          fn;
18730                          fn = TREE_CHAIN (fn))
18731                       if (! DECL_ARTIFICIAL (fn))
18732                         instantiate_decl (fn,
18733                                           /*defer_ok=*/0,
18734                                           /*expl_inst_class_mem_p=*/false);
18735                   if (COMPLETE_TYPE_P (instantiation))
18736                     reconsider = 1;
18737                 }
18738
18739               complete = COMPLETE_TYPE_P (instantiation);
18740             }
18741           else
18742             {
18743               if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
18744                   && !DECL_TEMPLATE_INSTANTIATED (instantiation))
18745                 {
18746                   instantiation
18747                     = instantiate_decl (instantiation,
18748                                         /*defer_ok=*/0,
18749                                         /*expl_inst_class_mem_p=*/false);
18750                   if (DECL_TEMPLATE_INSTANTIATED (instantiation))
18751                     reconsider = 1;
18752                 }
18753
18754               complete = (DECL_TEMPLATE_SPECIALIZATION (instantiation)
18755                           || DECL_TEMPLATE_INSTANTIATED (instantiation));
18756             }
18757
18758           if (complete)
18759             /* If INSTANTIATION has been instantiated, then we don't
18760                need to consider it again in the future.  */
18761             *t = (*t)->next;
18762           else
18763             {
18764               last = *t;
18765               t = &(*t)->next;
18766             }
18767           tinst_depth = 0;
18768           current_tinst_level = NULL;
18769         }
18770       last_pending_template = last;
18771     }
18772   while (reconsider);
18773
18774   input_location = saved_loc;
18775 }
18776
18777 /* Substitute ARGVEC into T, which is a list of initializers for
18778    either base class or a non-static data member.  The TREE_PURPOSEs
18779    are DECLs, and the TREE_VALUEs are the initializer values.  Used by
18780    instantiate_decl.  */
18781
18782 static tree
18783 tsubst_initializer_list (tree t, tree argvec)
18784 {
18785   tree inits = NULL_TREE;
18786
18787   for (; t; t = TREE_CHAIN (t))
18788     {
18789       tree decl;
18790       tree init;
18791       tree expanded_bases = NULL_TREE;
18792       tree expanded_arguments = NULL_TREE;
18793       int i, len = 1;
18794
18795       if (TREE_CODE (TREE_PURPOSE (t)) == TYPE_PACK_EXPANSION)
18796         {
18797           tree expr;
18798           tree arg;
18799
18800           /* Expand the base class expansion type into separate base
18801              classes.  */
18802           expanded_bases = tsubst_pack_expansion (TREE_PURPOSE (t), argvec,
18803                                                  tf_warning_or_error,
18804                                                  NULL_TREE);
18805           if (expanded_bases == error_mark_node)
18806             continue;
18807           
18808           /* We'll be building separate TREE_LISTs of arguments for
18809              each base.  */
18810           len = TREE_VEC_LENGTH (expanded_bases);
18811           expanded_arguments = make_tree_vec (len);
18812           for (i = 0; i < len; i++)
18813             TREE_VEC_ELT (expanded_arguments, i) = NULL_TREE;
18814
18815           /* Build a dummy EXPR_PACK_EXPANSION that will be used to
18816              expand each argument in the TREE_VALUE of t.  */
18817           expr = make_node (EXPR_PACK_EXPANSION);
18818           PACK_EXPANSION_PARAMETER_PACKS (expr) =
18819             PACK_EXPANSION_PARAMETER_PACKS (TREE_PURPOSE (t));
18820
18821           if (TREE_VALUE (t) == void_type_node)
18822             /* VOID_TYPE_NODE is used to indicate
18823                value-initialization.  */
18824             {
18825               for (i = 0; i < len; i++)
18826                 TREE_VEC_ELT (expanded_arguments, i) = void_type_node;
18827             }
18828           else
18829             {
18830               /* Substitute parameter packs into each argument in the
18831                  TREE_LIST.  */
18832               in_base_initializer = 1;
18833               for (arg = TREE_VALUE (t); arg; arg = TREE_CHAIN (arg))
18834                 {
18835                   tree expanded_exprs;
18836
18837                   /* Expand the argument.  */
18838                   SET_PACK_EXPANSION_PATTERN (expr, TREE_VALUE (arg));
18839                   expanded_exprs 
18840                     = tsubst_pack_expansion (expr, argvec,
18841                                              tf_warning_or_error,
18842                                              NULL_TREE);
18843                   if (expanded_exprs == error_mark_node)
18844                     continue;
18845
18846                   /* Prepend each of the expanded expressions to the
18847                      corresponding TREE_LIST in EXPANDED_ARGUMENTS.  */
18848                   for (i = 0; i < len; i++)
18849                     {
18850                       TREE_VEC_ELT (expanded_arguments, i) = 
18851                         tree_cons (NULL_TREE, 
18852                                    TREE_VEC_ELT (expanded_exprs, i),
18853                                    TREE_VEC_ELT (expanded_arguments, i));
18854                     }
18855                 }
18856               in_base_initializer = 0;
18857
18858               /* Reverse all of the TREE_LISTs in EXPANDED_ARGUMENTS,
18859                  since we built them backwards.  */
18860               for (i = 0; i < len; i++)
18861                 {
18862                   TREE_VEC_ELT (expanded_arguments, i) = 
18863                     nreverse (TREE_VEC_ELT (expanded_arguments, i));
18864                 }
18865             }
18866         }
18867
18868       for (i = 0; i < len; ++i)
18869         {
18870           if (expanded_bases)
18871             {
18872               decl = TREE_VEC_ELT (expanded_bases, i);
18873               decl = expand_member_init (decl);
18874               init = TREE_VEC_ELT (expanded_arguments, i);
18875             }
18876           else
18877             {
18878               decl = tsubst_copy (TREE_PURPOSE (t), argvec, 
18879                                   tf_warning_or_error, NULL_TREE);
18880
18881               decl = expand_member_init (decl);
18882               if (decl && !DECL_P (decl))
18883                 in_base_initializer = 1;
18884
18885               init = TREE_VALUE (t);
18886               if (init != void_type_node)
18887                 init = tsubst_expr (init, argvec,
18888                                     tf_warning_or_error, NULL_TREE,
18889                                     /*integral_constant_expression_p=*/false);
18890               in_base_initializer = 0;
18891             }
18892
18893           if (decl)
18894             {
18895               init = build_tree_list (decl, init);
18896               TREE_CHAIN (init) = inits;
18897               inits = init;
18898             }
18899         }
18900     }
18901   return inits;
18902 }
18903
18904 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL.  */
18905
18906 static void
18907 set_current_access_from_decl (tree decl)
18908 {
18909   if (TREE_PRIVATE (decl))
18910     current_access_specifier = access_private_node;
18911   else if (TREE_PROTECTED (decl))
18912     current_access_specifier = access_protected_node;
18913   else
18914     current_access_specifier = access_public_node;
18915 }
18916
18917 /* Instantiate an enumerated type.  TAG is the template type, NEWTAG
18918    is the instantiation (which should have been created with
18919    start_enum) and ARGS are the template arguments to use.  */
18920
18921 static void
18922 tsubst_enum (tree tag, tree newtag, tree args)
18923 {
18924   tree e;
18925
18926   if (SCOPED_ENUM_P (newtag))
18927     begin_scope (sk_scoped_enum, newtag);
18928
18929   for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
18930     {
18931       tree value;
18932       tree decl;
18933
18934       decl = TREE_VALUE (e);
18935       /* Note that in a template enum, the TREE_VALUE is the
18936          CONST_DECL, not the corresponding INTEGER_CST.  */
18937       value = tsubst_expr (DECL_INITIAL (decl),
18938                            args, tf_warning_or_error, NULL_TREE,
18939                            /*integral_constant_expression_p=*/true);
18940
18941       /* Give this enumeration constant the correct access.  */
18942       set_current_access_from_decl (decl);
18943
18944       /* Actually build the enumerator itself.  */
18945       build_enumerator
18946         (DECL_NAME (decl), value, newtag, DECL_SOURCE_LOCATION (decl));
18947     }
18948
18949   if (SCOPED_ENUM_P (newtag))
18950     finish_scope ();
18951
18952   finish_enum_value_list (newtag);
18953   finish_enum (newtag);
18954
18955   DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
18956     = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
18957 }
18958
18959 /* DECL is a FUNCTION_DECL that is a template specialization.  Return
18960    its type -- but without substituting the innermost set of template
18961    arguments.  So, innermost set of template parameters will appear in
18962    the type.  */
18963
18964 tree
18965 get_mostly_instantiated_function_type (tree decl)
18966 {
18967   tree fn_type;
18968   tree tmpl;
18969   tree targs;
18970   tree tparms;
18971   int parm_depth;
18972
18973   tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
18974   targs = DECL_TI_ARGS (decl);
18975   tparms = DECL_TEMPLATE_PARMS (tmpl);
18976   parm_depth = TMPL_PARMS_DEPTH (tparms);
18977
18978   /* There should be as many levels of arguments as there are levels
18979      of parameters.  */
18980   gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
18981
18982   fn_type = TREE_TYPE (tmpl);
18983
18984   if (parm_depth == 1)
18985     /* No substitution is necessary.  */
18986     ;
18987   else
18988     {
18989       int i;
18990       tree partial_args;
18991
18992       /* Replace the innermost level of the TARGS with NULL_TREEs to
18993          let tsubst know not to substitute for those parameters.  */
18994       partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
18995       for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
18996         SET_TMPL_ARGS_LEVEL (partial_args, i,
18997                              TMPL_ARGS_LEVEL (targs, i));
18998       SET_TMPL_ARGS_LEVEL (partial_args,
18999                            TMPL_ARGS_DEPTH (targs),
19000                            make_tree_vec (DECL_NTPARMS (tmpl)));
19001
19002       /* Make sure that we can see identifiers, and compute access
19003          correctly.  */
19004       push_access_scope (decl);
19005
19006       ++processing_template_decl;
19007       /* Now, do the (partial) substitution to figure out the
19008          appropriate function type.  */
19009       fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
19010       --processing_template_decl;
19011
19012       /* Substitute into the template parameters to obtain the real
19013          innermost set of parameters.  This step is important if the
19014          innermost set of template parameters contains value
19015          parameters whose types depend on outer template parameters.  */
19016       TREE_VEC_LENGTH (partial_args)--;
19017       tparms = tsubst_template_parms (tparms, partial_args, tf_error);
19018
19019       pop_access_scope (decl);
19020     }
19021
19022   return fn_type;
19023 }
19024
19025 /* Return truthvalue if we're processing a template different from
19026    the last one involved in diagnostics.  */
19027 int
19028 problematic_instantiation_changed (void)
19029 {
19030   return current_tinst_level != last_error_tinst_level;
19031 }
19032
19033 /* Remember current template involved in diagnostics.  */
19034 void
19035 record_last_problematic_instantiation (void)
19036 {
19037   last_error_tinst_level = current_tinst_level;
19038 }
19039
19040 struct tinst_level *
19041 current_instantiation (void)
19042 {
19043   return current_tinst_level;
19044 }
19045
19046 /* [temp.param] Check that template non-type parm TYPE is of an allowable
19047    type. Return zero for ok, nonzero for disallowed. Issue error and
19048    warning messages under control of COMPLAIN.  */
19049
19050 static int
19051 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
19052 {
19053   if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
19054     return 0;
19055   else if (POINTER_TYPE_P (type))
19056     return 0;
19057   else if (TYPE_PTR_TO_MEMBER_P (type))
19058     return 0;
19059   else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
19060     return 0;
19061   else if (TREE_CODE (type) == TYPENAME_TYPE)
19062     return 0;
19063   else if (TREE_CODE (type) == DECLTYPE_TYPE)
19064     return 0;
19065   else if (TREE_CODE (type) == NULLPTR_TYPE)
19066     return 0;
19067
19068   if (complain & tf_error)
19069     {
19070       if (type == error_mark_node)
19071         inform (input_location, "invalid template non-type parameter");
19072       else
19073         error ("%q#T is not a valid type for a template non-type parameter",
19074                type);
19075     }
19076   return 1;
19077 }
19078
19079 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
19080    Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
19081
19082 static bool
19083 dependent_type_p_r (tree type)
19084 {
19085   tree scope;
19086
19087   /* [temp.dep.type]
19088
19089      A type is dependent if it is:
19090
19091      -- a template parameter. Template template parameters are types
19092         for us (since TYPE_P holds true for them) so we handle
19093         them here.  */
19094   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
19095       || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
19096     return true;
19097   /* -- a qualified-id with a nested-name-specifier which contains a
19098         class-name that names a dependent type or whose unqualified-id
19099         names a dependent type.  */
19100   if (TREE_CODE (type) == TYPENAME_TYPE)
19101     return true;
19102   /* -- a cv-qualified type where the cv-unqualified type is
19103         dependent.  */
19104   type = TYPE_MAIN_VARIANT (type);
19105   /* -- a compound type constructed from any dependent type.  */
19106   if (TYPE_PTR_TO_MEMBER_P (type))
19107     return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
19108             || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
19109                                            (type)));
19110   else if (TREE_CODE (type) == POINTER_TYPE
19111            || TREE_CODE (type) == REFERENCE_TYPE)
19112     return dependent_type_p (TREE_TYPE (type));
19113   else if (TREE_CODE (type) == FUNCTION_TYPE
19114            || TREE_CODE (type) == METHOD_TYPE)
19115     {
19116       tree arg_type;
19117
19118       if (dependent_type_p (TREE_TYPE (type)))
19119         return true;
19120       for (arg_type = TYPE_ARG_TYPES (type);
19121            arg_type;
19122            arg_type = TREE_CHAIN (arg_type))
19123         if (dependent_type_p (TREE_VALUE (arg_type)))
19124           return true;
19125       return false;
19126     }
19127   /* -- an array type constructed from any dependent type or whose
19128         size is specified by a constant expression that is
19129         value-dependent.
19130
19131         We checked for type- and value-dependence of the bounds in
19132         compute_array_index_type, so TYPE_DEPENDENT_P is already set.  */
19133   if (TREE_CODE (type) == ARRAY_TYPE)
19134     {
19135       if (TYPE_DOMAIN (type)
19136           && dependent_type_p (TYPE_DOMAIN (type)))
19137         return true;
19138       return dependent_type_p (TREE_TYPE (type));
19139     }
19140
19141   /* -- a template-id in which either the template name is a template
19142      parameter ...  */
19143   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
19144     return true;
19145   /* ... or any of the template arguments is a dependent type or
19146         an expression that is type-dependent or value-dependent.  */
19147   else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
19148            && (any_dependent_template_arguments_p
19149                (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
19150     return true;
19151
19152   /* All TYPEOF_TYPEs, DECLTYPE_TYPEs, and UNDERLYING_TYPEs are
19153      dependent; if the argument of the `typeof' expression is not
19154      type-dependent, then it should already been have resolved.  */
19155   if (TREE_CODE (type) == TYPEOF_TYPE
19156       || TREE_CODE (type) == DECLTYPE_TYPE
19157       || TREE_CODE (type) == UNDERLYING_TYPE)
19158     return true;
19159
19160   /* A template argument pack is dependent if any of its packed
19161      arguments are.  */
19162   if (TREE_CODE (type) == TYPE_ARGUMENT_PACK)
19163     {
19164       tree args = ARGUMENT_PACK_ARGS (type);
19165       int i, len = TREE_VEC_LENGTH (args);
19166       for (i = 0; i < len; ++i)
19167         if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
19168           return true;
19169     }
19170
19171   /* All TYPE_PACK_EXPANSIONs are dependent, because parameter packs must
19172      be template parameters.  */
19173   if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
19174     return true;
19175
19176   /* The standard does not specifically mention types that are local
19177      to template functions or local classes, but they should be
19178      considered dependent too.  For example:
19179
19180        template <int I> void f() {
19181          enum E { a = I };
19182          S<sizeof (E)> s;
19183        }
19184
19185      The size of `E' cannot be known until the value of `I' has been
19186      determined.  Therefore, `E' must be considered dependent.  */
19187   scope = TYPE_CONTEXT (type);
19188   if (scope && TYPE_P (scope))
19189     return dependent_type_p (scope);
19190   /* Don't use type_dependent_expression_p here, as it can lead
19191      to infinite recursion trying to determine whether a lambda
19192      nested in a lambda is dependent (c++/47687).  */
19193   else if (scope && TREE_CODE (scope) == FUNCTION_DECL
19194            && DECL_LANG_SPECIFIC (scope)
19195            && DECL_TEMPLATE_INFO (scope)
19196            && (any_dependent_template_arguments_p
19197                (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (scope)))))
19198     return true;
19199
19200   /* Other types are non-dependent.  */
19201   return false;
19202 }
19203
19204 /* Returns TRUE if TYPE is dependent, in the sense of
19205    [temp.dep.type].  Note that a NULL type is considered dependent.  */
19206
19207 bool
19208 dependent_type_p (tree type)
19209 {
19210   /* If there are no template parameters in scope, then there can't be
19211      any dependent types.  */
19212   if (!processing_template_decl)
19213     {
19214       /* If we are not processing a template, then nobody should be
19215          providing us with a dependent type.  */
19216       gcc_assert (type);
19217       gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM || is_auto (type));
19218       return false;
19219     }
19220
19221   /* If the type is NULL, we have not computed a type for the entity
19222      in question; in that case, the type is dependent.  */
19223   if (!type)
19224     return true;
19225
19226   /* Erroneous types can be considered non-dependent.  */
19227   if (type == error_mark_node)
19228     return false;
19229
19230   /* If we have not already computed the appropriate value for TYPE,
19231      do so now.  */
19232   if (!TYPE_DEPENDENT_P_VALID (type))
19233     {
19234       TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
19235       TYPE_DEPENDENT_P_VALID (type) = 1;
19236     }
19237
19238   return TYPE_DEPENDENT_P (type);
19239 }
19240
19241 /* Returns TRUE if SCOPE is a dependent scope, in which we can't do any
19242    lookup.  In other words, a dependent type that is not the current
19243    instantiation.  */
19244
19245 bool
19246 dependent_scope_p (tree scope)
19247 {
19248   return (scope && TYPE_P (scope) && dependent_type_p (scope)
19249           && !currently_open_class (scope));
19250 }
19251
19252 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
19253    [temp.dep.constexpr].  EXPRESSION is already known to be a constant
19254    expression.  */
19255
19256 /* Note that this predicate is not appropriate for general expressions;
19257    only constant expressions (that satisfy potential_constant_expression)
19258    can be tested for value dependence.
19259
19260    We should really also have a predicate for "instantiation-dependent".
19261
19262    fold_non_dependent_expr: fold if constant and not type-dependent and not value-dependent.
19263      (what about instantiation-dependent constant-expressions?)
19264    is_late_template_attribute: defer if instantiation-dependent.
19265    compute_array_index_type: proceed if constant and not t- or v-dependent
19266      if instantiation-dependent, need to remember full expression
19267    uses_template_parms: FIXME - need to audit callers
19268    tsubst_decl [function_decl]: Why is this using value_dependent_expression_p?
19269    dependent_type_p [array_type]: dependent if index type is dependent
19270      (or non-constant?)
19271    static_assert - instantiation-dependent */
19272
19273 bool
19274 value_dependent_expression_p (tree expression)
19275 {
19276   if (!processing_template_decl)
19277     return false;
19278
19279   /* A name declared with a dependent type.  */
19280   if (DECL_P (expression) && type_dependent_expression_p (expression))
19281     return true;
19282
19283   switch (TREE_CODE (expression))
19284     {
19285     case IDENTIFIER_NODE:
19286       /* A name that has not been looked up -- must be dependent.  */
19287       return true;
19288
19289     case TEMPLATE_PARM_INDEX:
19290       /* A non-type template parm.  */
19291       return true;
19292
19293     case CONST_DECL:
19294       /* A non-type template parm.  */
19295       if (DECL_TEMPLATE_PARM_P (expression))
19296         return true;
19297       return value_dependent_expression_p (DECL_INITIAL (expression));
19298
19299     case VAR_DECL:
19300        /* A constant with literal type and is initialized
19301           with an expression that is value-dependent.  */
19302       if (DECL_INITIAL (expression)
19303           && decl_constant_var_p (expression)
19304           && value_dependent_expression_p (DECL_INITIAL (expression)))
19305         return true;
19306       return false;
19307
19308     case DYNAMIC_CAST_EXPR:
19309     case STATIC_CAST_EXPR:
19310     case CONST_CAST_EXPR:
19311     case REINTERPRET_CAST_EXPR:
19312     case CAST_EXPR:
19313       /* These expressions are value-dependent if the type to which
19314          the cast occurs is dependent or the expression being casted
19315          is value-dependent.  */
19316       {
19317         tree type = TREE_TYPE (expression);
19318
19319         if (dependent_type_p (type))
19320           return true;
19321
19322         /* A functional cast has a list of operands.  */
19323         expression = TREE_OPERAND (expression, 0);
19324         if (!expression)
19325           {
19326             /* If there are no operands, it must be an expression such
19327                as "int()". This should not happen for aggregate types
19328                because it would form non-constant expressions.  */
19329             gcc_assert (cxx_dialect >= cxx0x
19330                         || INTEGRAL_OR_ENUMERATION_TYPE_P (type));
19331
19332             return false;
19333           }
19334
19335         if (TREE_CODE (expression) == TREE_LIST)
19336           return any_value_dependent_elements_p (expression);
19337
19338         return value_dependent_expression_p (expression);
19339       }
19340
19341     case SIZEOF_EXPR:
19342     case ALIGNOF_EXPR:
19343     case TYPEID_EXPR:
19344       /* A `sizeof' expression is value-dependent if the operand is
19345          type-dependent or is a pack expansion.  */
19346       expression = TREE_OPERAND (expression, 0);
19347       if (PACK_EXPANSION_P (expression))
19348         return true;
19349       else if (TYPE_P (expression))
19350         return dependent_type_p (expression);
19351       return type_dependent_expression_p (expression);
19352
19353     case AT_ENCODE_EXPR:
19354       /* An 'encode' expression is value-dependent if the operand is
19355          type-dependent.  */
19356       expression = TREE_OPERAND (expression, 0);
19357       return dependent_type_p (expression);
19358
19359     case NOEXCEPT_EXPR:
19360       expression = TREE_OPERAND (expression, 0);
19361       return type_dependent_expression_p (expression);
19362
19363     case SCOPE_REF:
19364       {
19365         tree name = TREE_OPERAND (expression, 1);
19366         return value_dependent_expression_p (name);
19367       }
19368
19369     case COMPONENT_REF:
19370       return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
19371               || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
19372
19373     case NONTYPE_ARGUMENT_PACK:
19374       /* A NONTYPE_ARGUMENT_PACK is value-dependent if any packed argument
19375          is value-dependent.  */
19376       {
19377         tree values = ARGUMENT_PACK_ARGS (expression);
19378         int i, len = TREE_VEC_LENGTH (values);
19379         
19380         for (i = 0; i < len; ++i)
19381           if (value_dependent_expression_p (TREE_VEC_ELT (values, i)))
19382             return true;
19383         
19384         return false;
19385       }
19386
19387     case TRAIT_EXPR:
19388       {
19389         tree type2 = TRAIT_EXPR_TYPE2 (expression);
19390         return (dependent_type_p (TRAIT_EXPR_TYPE1 (expression))
19391                 || (type2 ? dependent_type_p (type2) : false));
19392       }
19393
19394     case MODOP_EXPR:
19395       return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
19396               || (value_dependent_expression_p (TREE_OPERAND (expression, 2))));
19397
19398     case ARRAY_REF:
19399       return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
19400               || (value_dependent_expression_p (TREE_OPERAND (expression, 1))));
19401
19402     case ADDR_EXPR:
19403       {
19404         tree op = TREE_OPERAND (expression, 0);
19405         return (value_dependent_expression_p (op)
19406                 || has_value_dependent_address (op));
19407       }
19408
19409     case CALL_EXPR:
19410       {
19411         tree fn = get_callee_fndecl (expression);
19412         int i, nargs;
19413         if (!fn && value_dependent_expression_p (CALL_EXPR_FN (expression)))
19414           return true;
19415         nargs = call_expr_nargs (expression);
19416         for (i = 0; i < nargs; ++i)
19417           {
19418             tree op = CALL_EXPR_ARG (expression, i);
19419             /* In a call to a constexpr member function, look through the
19420                implicit ADDR_EXPR on the object argument so that it doesn't
19421                cause the call to be considered value-dependent.  We also
19422                look through it in potential_constant_expression.  */
19423             if (i == 0 && fn && DECL_DECLARED_CONSTEXPR_P (fn)
19424                 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
19425                 && TREE_CODE (op) == ADDR_EXPR)
19426               op = TREE_OPERAND (op, 0);
19427             if (value_dependent_expression_p (op))
19428               return true;
19429           }
19430         return false;
19431       }
19432
19433     case TEMPLATE_ID_EXPR:
19434       /* If a TEMPLATE_ID_EXPR involves a dependent name, it will be
19435          type-dependent.  */
19436       return type_dependent_expression_p (expression);
19437
19438     case CONSTRUCTOR:
19439       {
19440         unsigned ix;
19441         tree val;
19442         FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), ix, val)
19443           if (value_dependent_expression_p (val))
19444             return true;
19445         return false;
19446       }
19447
19448     default:
19449       /* A constant expression is value-dependent if any subexpression is
19450          value-dependent.  */
19451       switch (TREE_CODE_CLASS (TREE_CODE (expression)))
19452         {
19453         case tcc_reference:
19454         case tcc_unary:
19455         case tcc_comparison:
19456         case tcc_binary:
19457         case tcc_expression:
19458         case tcc_vl_exp:
19459           {
19460             int i, len = cp_tree_operand_length (expression);
19461
19462             for (i = 0; i < len; i++)
19463               {
19464                 tree t = TREE_OPERAND (expression, i);
19465
19466                 /* In some cases, some of the operands may be missing.l
19467                    (For example, in the case of PREDECREMENT_EXPR, the
19468                    amount to increment by may be missing.)  That doesn't
19469                    make the expression dependent.  */
19470                 if (t && value_dependent_expression_p (t))
19471                   return true;
19472               }
19473           }
19474           break;
19475         default:
19476           break;
19477         }
19478       break;
19479     }
19480
19481   /* The expression is not value-dependent.  */
19482   return false;
19483 }
19484
19485 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
19486    [temp.dep.expr].  Note that an expression with no type is
19487    considered dependent.  Other parts of the compiler arrange for an
19488    expression with type-dependent subexpressions to have no type, so
19489    this function doesn't have to be fully recursive.  */
19490
19491 bool
19492 type_dependent_expression_p (tree expression)
19493 {
19494   if (!processing_template_decl)
19495     return false;
19496
19497   if (expression == error_mark_node)
19498     return false;
19499
19500   /* An unresolved name is always dependent.  */
19501   if (TREE_CODE (expression) == IDENTIFIER_NODE
19502       || TREE_CODE (expression) == USING_DECL)
19503     return true;
19504
19505   /* Some expression forms are never type-dependent.  */
19506   if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
19507       || TREE_CODE (expression) == SIZEOF_EXPR
19508       || TREE_CODE (expression) == ALIGNOF_EXPR
19509       || TREE_CODE (expression) == AT_ENCODE_EXPR
19510       || TREE_CODE (expression) == NOEXCEPT_EXPR
19511       || TREE_CODE (expression) == TRAIT_EXPR
19512       || TREE_CODE (expression) == TYPEID_EXPR
19513       || TREE_CODE (expression) == DELETE_EXPR
19514       || TREE_CODE (expression) == VEC_DELETE_EXPR
19515       || TREE_CODE (expression) == THROW_EXPR)
19516     return false;
19517
19518   /* The types of these expressions depends only on the type to which
19519      the cast occurs.  */
19520   if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
19521       || TREE_CODE (expression) == STATIC_CAST_EXPR
19522       || TREE_CODE (expression) == CONST_CAST_EXPR
19523       || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
19524       || TREE_CODE (expression) == IMPLICIT_CONV_EXPR
19525       || TREE_CODE (expression) == CAST_EXPR)
19526     return dependent_type_p (TREE_TYPE (expression));
19527
19528   /* The types of these expressions depends only on the type created
19529      by the expression.  */
19530   if (TREE_CODE (expression) == NEW_EXPR
19531       || TREE_CODE (expression) == VEC_NEW_EXPR)
19532     {
19533       /* For NEW_EXPR tree nodes created inside a template, either
19534          the object type itself or a TREE_LIST may appear as the
19535          operand 1.  */
19536       tree type = TREE_OPERAND (expression, 1);
19537       if (TREE_CODE (type) == TREE_LIST)
19538         /* This is an array type.  We need to check array dimensions
19539            as well.  */
19540         return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
19541                || value_dependent_expression_p
19542                     (TREE_OPERAND (TREE_VALUE (type), 1));
19543       else
19544         return dependent_type_p (type);
19545     }
19546
19547   if (TREE_CODE (expression) == SCOPE_REF)
19548     {
19549       tree scope = TREE_OPERAND (expression, 0);
19550       tree name = TREE_OPERAND (expression, 1);
19551
19552       /* 14.6.2.2 [temp.dep.expr]: An id-expression is type-dependent if it
19553          contains an identifier associated by name lookup with one or more
19554          declarations declared with a dependent type, or...a
19555          nested-name-specifier or qualified-id that names a member of an
19556          unknown specialization.  */
19557       return (type_dependent_expression_p (name)
19558               || dependent_scope_p (scope));
19559     }
19560
19561   if (TREE_CODE (expression) == FUNCTION_DECL
19562       && DECL_LANG_SPECIFIC (expression)
19563       && DECL_TEMPLATE_INFO (expression)
19564       && (any_dependent_template_arguments_p
19565           (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
19566     return true;
19567
19568   if (TREE_CODE (expression) == TEMPLATE_DECL
19569       && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
19570     return false;
19571
19572   if (TREE_CODE (expression) == STMT_EXPR)
19573     expression = stmt_expr_value_expr (expression);
19574
19575   if (BRACE_ENCLOSED_INITIALIZER_P (expression))
19576     {
19577       tree elt;
19578       unsigned i;
19579
19580       FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), i, elt)
19581         {
19582           if (type_dependent_expression_p (elt))
19583             return true;
19584         }
19585       return false;
19586     }
19587
19588   /* A static data member of the current instantiation with incomplete
19589      array type is type-dependent, as the definition and specializations
19590      can have different bounds.  */
19591   if (TREE_CODE (expression) == VAR_DECL
19592       && DECL_CLASS_SCOPE_P (expression)
19593       && dependent_type_p (DECL_CONTEXT (expression))
19594       && VAR_HAD_UNKNOWN_BOUND (expression))
19595     return true;
19596
19597   if (TREE_TYPE (expression) == unknown_type_node)
19598     {
19599       if (TREE_CODE (expression) == ADDR_EXPR)
19600         return type_dependent_expression_p (TREE_OPERAND (expression, 0));
19601       if (TREE_CODE (expression) == COMPONENT_REF
19602           || TREE_CODE (expression) == OFFSET_REF)
19603         {
19604           if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
19605             return true;
19606           expression = TREE_OPERAND (expression, 1);
19607           if (TREE_CODE (expression) == IDENTIFIER_NODE)
19608             return false;
19609         }
19610       /* SCOPE_REF with non-null TREE_TYPE is always non-dependent.  */
19611       if (TREE_CODE (expression) == SCOPE_REF)
19612         return false;
19613
19614       if (BASELINK_P (expression))
19615         expression = BASELINK_FUNCTIONS (expression);
19616
19617       if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
19618         {
19619           if (any_dependent_template_arguments_p
19620               (TREE_OPERAND (expression, 1)))
19621             return true;
19622           expression = TREE_OPERAND (expression, 0);
19623         }
19624       gcc_assert (TREE_CODE (expression) == OVERLOAD
19625                   || TREE_CODE (expression) == FUNCTION_DECL);
19626
19627       while (expression)
19628         {
19629           if (type_dependent_expression_p (OVL_CURRENT (expression)))
19630             return true;
19631           expression = OVL_NEXT (expression);
19632         }
19633       return false;
19634     }
19635
19636   gcc_assert (TREE_CODE (expression) != TYPE_DECL);
19637
19638   return (dependent_type_p (TREE_TYPE (expression)));
19639 }
19640
19641 /* Like type_dependent_expression_p, but it also works while not processing
19642    a template definition, i.e. during substitution or mangling.  */
19643
19644 bool
19645 type_dependent_expression_p_push (tree expr)
19646 {
19647   bool b;
19648   ++processing_template_decl;
19649   b = type_dependent_expression_p (expr);
19650   --processing_template_decl;
19651   return b;
19652 }
19653
19654 /* Returns TRUE if ARGS contains a type-dependent expression.  */
19655
19656 bool
19657 any_type_dependent_arguments_p (const VEC(tree,gc) *args)
19658 {
19659   unsigned int i;
19660   tree arg;
19661
19662   FOR_EACH_VEC_ELT (tree, args, i, arg)
19663     {
19664       if (type_dependent_expression_p (arg))
19665         return true;
19666     }
19667   return false;
19668 }
19669
19670 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
19671    expressions) contains any type-dependent expressions.  */
19672
19673 bool
19674 any_type_dependent_elements_p (const_tree list)
19675 {
19676   for (; list; list = TREE_CHAIN (list))
19677     if (value_dependent_expression_p (TREE_VALUE (list)))
19678       return true;
19679
19680   return false;
19681 }
19682
19683 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
19684    expressions) contains any value-dependent expressions.  */
19685
19686 bool
19687 any_value_dependent_elements_p (const_tree list)
19688 {
19689   for (; list; list = TREE_CHAIN (list))
19690     if (value_dependent_expression_p (TREE_VALUE (list)))
19691       return true;
19692
19693   return false;
19694 }
19695
19696 /* Returns TRUE if the ARG (a template argument) is dependent.  */
19697
19698 bool
19699 dependent_template_arg_p (tree arg)
19700 {
19701   if (!processing_template_decl)
19702     return false;
19703
19704   /* Assume a template argument that was wrongly written by the user
19705      is dependent. This is consistent with what
19706      any_dependent_template_arguments_p [that calls this function]
19707      does.  */
19708   if (!arg || arg == error_mark_node)
19709     return true;
19710
19711   if (TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
19712     arg = ARGUMENT_PACK_SELECT_ARG (arg);
19713
19714   if (TREE_CODE (arg) == TEMPLATE_DECL
19715       || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
19716     return dependent_template_p (arg);
19717   else if (ARGUMENT_PACK_P (arg))
19718     {
19719       tree args = ARGUMENT_PACK_ARGS (arg);
19720       int i, len = TREE_VEC_LENGTH (args);
19721       for (i = 0; i < len; ++i)
19722         {
19723           if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
19724             return true;
19725         }
19726
19727       return false;
19728     }
19729   else if (TYPE_P (arg))
19730     return dependent_type_p (arg);
19731   else
19732     return (type_dependent_expression_p (arg)
19733             || value_dependent_expression_p (arg));
19734 }
19735
19736 /* Returns true if ARGS (a collection of template arguments) contains
19737    any types that require structural equality testing.  */
19738
19739 bool
19740 any_template_arguments_need_structural_equality_p (tree args)
19741 {
19742   int i;
19743   int j;
19744
19745   if (!args)
19746     return false;
19747   if (args == error_mark_node)
19748     return true;
19749
19750   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
19751     {
19752       tree level = TMPL_ARGS_LEVEL (args, i + 1);
19753       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
19754         {
19755           tree arg = TREE_VEC_ELT (level, j);
19756           tree packed_args = NULL_TREE;
19757           int k, len = 1;
19758
19759           if (ARGUMENT_PACK_P (arg))
19760             {
19761               /* Look inside the argument pack.  */
19762               packed_args = ARGUMENT_PACK_ARGS (arg);
19763               len = TREE_VEC_LENGTH (packed_args);
19764             }
19765
19766           for (k = 0; k < len; ++k)
19767             {
19768               if (packed_args)
19769                 arg = TREE_VEC_ELT (packed_args, k);
19770
19771               if (error_operand_p (arg))
19772                 return true;
19773               else if (TREE_CODE (arg) == TEMPLATE_DECL
19774                        || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
19775                 continue;
19776               else if (TYPE_P (arg) && TYPE_STRUCTURAL_EQUALITY_P (arg))
19777                 return true;
19778               else if (!TYPE_P (arg) && TREE_TYPE (arg)
19779                        && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (arg)))
19780                 return true;
19781             }
19782         }
19783     }
19784
19785   return false;
19786 }
19787
19788 /* Returns true if ARGS (a collection of template arguments) contains
19789    any dependent arguments.  */
19790
19791 bool
19792 any_dependent_template_arguments_p (const_tree args)
19793 {
19794   int i;
19795   int j;
19796
19797   if (!args)
19798     return false;
19799   if (args == error_mark_node)
19800     return true;
19801
19802   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
19803     {
19804       const_tree level = TMPL_ARGS_LEVEL (args, i + 1);
19805       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
19806         if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
19807           return true;
19808     }
19809
19810   return false;
19811 }
19812
19813 /* Returns TRUE if the template TMPL is dependent.  */
19814
19815 bool
19816 dependent_template_p (tree tmpl)
19817 {
19818   if (TREE_CODE (tmpl) == OVERLOAD)
19819     {
19820       while (tmpl)
19821         {
19822           if (dependent_template_p (OVL_CURRENT (tmpl)))
19823             return true;
19824           tmpl = OVL_NEXT (tmpl);
19825         }
19826       return false;
19827     }
19828
19829   /* Template template parameters are dependent.  */
19830   if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
19831       || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
19832     return true;
19833   /* So are names that have not been looked up.  */
19834   if (TREE_CODE (tmpl) == SCOPE_REF
19835       || TREE_CODE (tmpl) == IDENTIFIER_NODE)
19836     return true;
19837   /* So are member templates of dependent classes.  */
19838   if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
19839     return dependent_type_p (DECL_CONTEXT (tmpl));
19840   return false;
19841 }
19842
19843 /* Returns TRUE if the specialization TMPL<ARGS> is dependent.  */
19844
19845 bool
19846 dependent_template_id_p (tree tmpl, tree args)
19847 {
19848   return (dependent_template_p (tmpl)
19849           || any_dependent_template_arguments_p (args));
19850 }
19851
19852 /* Returns TRUE if OMP_FOR with DECLV, INITV, CONDV and INCRV vectors
19853    is dependent.  */
19854
19855 bool
19856 dependent_omp_for_p (tree declv, tree initv, tree condv, tree incrv)
19857 {
19858   int i;
19859
19860   if (!processing_template_decl)
19861     return false;
19862
19863   for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
19864     {
19865       tree decl = TREE_VEC_ELT (declv, i);
19866       tree init = TREE_VEC_ELT (initv, i);
19867       tree cond = TREE_VEC_ELT (condv, i);
19868       tree incr = TREE_VEC_ELT (incrv, i);
19869
19870       if (type_dependent_expression_p (decl))
19871         return true;
19872
19873       if (init && type_dependent_expression_p (init))
19874         return true;
19875
19876       if (type_dependent_expression_p (cond))
19877         return true;
19878
19879       if (COMPARISON_CLASS_P (cond)
19880           && (type_dependent_expression_p (TREE_OPERAND (cond, 0))
19881               || type_dependent_expression_p (TREE_OPERAND (cond, 1))))
19882         return true;
19883
19884       if (TREE_CODE (incr) == MODOP_EXPR)
19885         {
19886           if (type_dependent_expression_p (TREE_OPERAND (incr, 0))
19887               || type_dependent_expression_p (TREE_OPERAND (incr, 2)))
19888             return true;
19889         }
19890       else if (type_dependent_expression_p (incr))
19891         return true;
19892       else if (TREE_CODE (incr) == MODIFY_EXPR)
19893         {
19894           if (type_dependent_expression_p (TREE_OPERAND (incr, 0)))
19895             return true;
19896           else if (BINARY_CLASS_P (TREE_OPERAND (incr, 1)))
19897             {
19898               tree t = TREE_OPERAND (incr, 1);
19899               if (type_dependent_expression_p (TREE_OPERAND (t, 0))
19900                   || type_dependent_expression_p (TREE_OPERAND (t, 1)))
19901                 return true;
19902             }
19903         }
19904     }
19905
19906   return false;
19907 }
19908
19909 /* TYPE is a TYPENAME_TYPE.  Returns the ordinary TYPE to which the
19910    TYPENAME_TYPE corresponds.  Returns the original TYPENAME_TYPE if
19911    no such TYPE can be found.  Note that this function peers inside
19912    uninstantiated templates and therefore should be used only in
19913    extremely limited situations.  ONLY_CURRENT_P restricts this
19914    peering to the currently open classes hierarchy (which is required
19915    when comparing types).  */
19916
19917 tree
19918 resolve_typename_type (tree type, bool only_current_p)
19919 {
19920   tree scope;
19921   tree name;
19922   tree decl;
19923   int quals;
19924   tree pushed_scope;
19925   tree result;
19926
19927   gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
19928
19929   scope = TYPE_CONTEXT (type);
19930   /* Usually the non-qualified identifier of a TYPENAME_TYPE is
19931      TYPE_IDENTIFIER (type). But when 'type' is a typedef variant of
19932      a TYPENAME_TYPE node, then TYPE_NAME (type) is set to the TYPE_DECL representing
19933      the typedef. In that case TYPE_IDENTIFIER (type) is not the non-qualified
19934      identifier  of the TYPENAME_TYPE anymore.
19935      So by getting the TYPE_IDENTIFIER of the _main declaration_ of the
19936      TYPENAME_TYPE instead, we avoid messing up with a possible
19937      typedef variant case.  */
19938   name = TYPE_IDENTIFIER (TYPE_MAIN_VARIANT (type));
19939
19940   /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
19941      it first before we can figure out what NAME refers to.  */
19942   if (TREE_CODE (scope) == TYPENAME_TYPE)
19943     scope = resolve_typename_type (scope, only_current_p);
19944   /* If we don't know what SCOPE refers to, then we cannot resolve the
19945      TYPENAME_TYPE.  */
19946   if (TREE_CODE (scope) == TYPENAME_TYPE)
19947     return type;
19948   /* If the SCOPE is a template type parameter, we have no way of
19949      resolving the name.  */
19950   if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
19951     return type;
19952   /* If the SCOPE is not the current instantiation, there's no reason
19953      to look inside it.  */
19954   if (only_current_p && !currently_open_class (scope))
19955     return type;
19956   /* If this is a typedef, we don't want to look inside (c++/11987).  */
19957   if (typedef_variant_p (type))
19958     return type;
19959   /* If SCOPE isn't the template itself, it will not have a valid
19960      TYPE_FIELDS list.  */
19961   if (same_type_p (scope, CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope)))
19962     /* scope is either the template itself or a compatible instantiation
19963        like X<T>, so look up the name in the original template.  */
19964     scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
19965   else
19966     /* scope is a partial instantiation, so we can't do the lookup or we
19967        will lose the template arguments.  */
19968     return type;
19969   /* Enter the SCOPE so that name lookup will be resolved as if we
19970      were in the class definition.  In particular, SCOPE will no
19971      longer be considered a dependent type.  */
19972   pushed_scope = push_scope (scope);
19973   /* Look up the declaration.  */
19974   decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true,
19975                         tf_warning_or_error);
19976
19977   result = NULL_TREE;
19978   
19979   /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
19980      find a TEMPLATE_DECL.  Otherwise, we want to find a TYPE_DECL.  */
19981   if (!decl)
19982     /*nop*/;
19983   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
19984            && TREE_CODE (decl) == TYPE_DECL)
19985     {
19986       result = TREE_TYPE (decl);
19987       if (result == error_mark_node)
19988         result = NULL_TREE;
19989     }
19990   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
19991            && DECL_CLASS_TEMPLATE_P (decl))
19992     {
19993       tree tmpl;
19994       tree args;
19995       /* Obtain the template and the arguments.  */
19996       tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
19997       args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
19998       /* Instantiate the template.  */
19999       result = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
20000                                       /*entering_scope=*/0,
20001                                       tf_error | tf_user);
20002       if (result == error_mark_node)
20003         result = NULL_TREE;
20004     }
20005   
20006   /* Leave the SCOPE.  */
20007   if (pushed_scope)
20008     pop_scope (pushed_scope);
20009
20010   /* If we failed to resolve it, return the original typename.  */
20011   if (!result)
20012     return type;
20013   
20014   /* If lookup found a typename type, resolve that too.  */
20015   if (TREE_CODE (result) == TYPENAME_TYPE && !TYPENAME_IS_RESOLVING_P (result))
20016     {
20017       /* Ill-formed programs can cause infinite recursion here, so we
20018          must catch that.  */
20019       TYPENAME_IS_RESOLVING_P (type) = 1;
20020       result = resolve_typename_type (result, only_current_p);
20021       TYPENAME_IS_RESOLVING_P (type) = 0;
20022     }
20023   
20024   /* Qualify the resulting type.  */
20025   quals = cp_type_quals (type);
20026   if (quals)
20027     result = cp_build_qualified_type (result, cp_type_quals (result) | quals);
20028
20029   return result;
20030 }
20031
20032 /* EXPR is an expression which is not type-dependent.  Return a proxy
20033    for EXPR that can be used to compute the types of larger
20034    expressions containing EXPR.  */
20035
20036 tree
20037 build_non_dependent_expr (tree expr)
20038 {
20039   tree inner_expr;
20040
20041 #ifdef ENABLE_CHECKING
20042   /* Try to get a constant value for all non-type-dependent expressions in
20043       order to expose bugs in *_dependent_expression_p and constexpr.  */
20044   if (cxx_dialect >= cxx0x)
20045     maybe_constant_value (fold_non_dependent_expr_sfinae (expr, tf_none));
20046 #endif
20047
20048   /* Preserve OVERLOADs; the functions must be available to resolve
20049      types.  */
20050   inner_expr = expr;
20051   if (TREE_CODE (inner_expr) == STMT_EXPR)
20052     inner_expr = stmt_expr_value_expr (inner_expr);
20053   if (TREE_CODE (inner_expr) == ADDR_EXPR)
20054     inner_expr = TREE_OPERAND (inner_expr, 0);
20055   if (TREE_CODE (inner_expr) == COMPONENT_REF)
20056     inner_expr = TREE_OPERAND (inner_expr, 1);
20057   if (is_overloaded_fn (inner_expr)
20058       || TREE_CODE (inner_expr) == OFFSET_REF)
20059     return expr;
20060   /* There is no need to return a proxy for a variable.  */
20061   if (TREE_CODE (expr) == VAR_DECL)
20062     return expr;
20063   /* Preserve string constants; conversions from string constants to
20064      "char *" are allowed, even though normally a "const char *"
20065      cannot be used to initialize a "char *".  */
20066   if (TREE_CODE (expr) == STRING_CST)
20067     return expr;
20068   /* Preserve arithmetic constants, as an optimization -- there is no
20069      reason to create a new node.  */
20070   if (TREE_CODE (expr) == INTEGER_CST || TREE_CODE (expr) == REAL_CST)
20071     return expr;
20072   /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
20073      There is at least one place where we want to know that a
20074      particular expression is a throw-expression: when checking a ?:
20075      expression, there are special rules if the second or third
20076      argument is a throw-expression.  */
20077   if (TREE_CODE (expr) == THROW_EXPR)
20078     return expr;
20079
20080   /* Don't wrap an initializer list, we need to be able to look inside.  */
20081   if (BRACE_ENCLOSED_INITIALIZER_P (expr))
20082     return expr;
20083
20084   if (TREE_CODE (expr) == COND_EXPR)
20085     return build3 (COND_EXPR,
20086                    TREE_TYPE (expr),
20087                    TREE_OPERAND (expr, 0),
20088                    (TREE_OPERAND (expr, 1)
20089                     ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
20090                     : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
20091                    build_non_dependent_expr (TREE_OPERAND (expr, 2)));
20092   if (TREE_CODE (expr) == COMPOUND_EXPR
20093       && !COMPOUND_EXPR_OVERLOADED (expr))
20094     return build2 (COMPOUND_EXPR,
20095                    TREE_TYPE (expr),
20096                    TREE_OPERAND (expr, 0),
20097                    build_non_dependent_expr (TREE_OPERAND (expr, 1)));
20098
20099   /* If the type is unknown, it can't really be non-dependent */
20100   gcc_assert (TREE_TYPE (expr) != unknown_type_node);
20101
20102   /* Otherwise, build a NON_DEPENDENT_EXPR.  */
20103   return build1 (NON_DEPENDENT_EXPR, TREE_TYPE (expr), expr);
20104 }
20105
20106 /* ARGS is a vector of expressions as arguments to a function call.
20107    Replace the arguments with equivalent non-dependent expressions.
20108    This modifies ARGS in place.  */
20109
20110 void
20111 make_args_non_dependent (VEC(tree,gc) *args)
20112 {
20113   unsigned int ix;
20114   tree arg;
20115
20116   FOR_EACH_VEC_ELT (tree, args, ix, arg)
20117     {
20118       tree newarg = build_non_dependent_expr (arg);
20119       if (newarg != arg)
20120         VEC_replace (tree, args, ix, newarg);
20121     }
20122 }
20123
20124 /* Returns a type which represents 'auto'.  We use a TEMPLATE_TYPE_PARM
20125    with a level one deeper than the actual template parms.  */
20126
20127 tree
20128 make_auto (void)
20129 {
20130   tree au = cxx_make_type (TEMPLATE_TYPE_PARM);
20131   TYPE_NAME (au) = build_decl (BUILTINS_LOCATION,
20132                                TYPE_DECL, get_identifier ("auto"), au);
20133   TYPE_STUB_DECL (au) = TYPE_NAME (au);
20134   TEMPLATE_TYPE_PARM_INDEX (au) = build_template_parm_index
20135     (0, processing_template_decl + 1, processing_template_decl + 1,
20136      0, TYPE_NAME (au), NULL_TREE);
20137   TYPE_CANONICAL (au) = canonical_type_parameter (au);
20138   DECL_ARTIFICIAL (TYPE_NAME (au)) = 1;
20139   SET_DECL_TEMPLATE_PARM_P (TYPE_NAME (au));
20140
20141   return au;
20142 }
20143
20144 /* Given type ARG, return std::initializer_list<ARG>.  */
20145
20146 static tree
20147 listify (tree arg)
20148 {
20149   tree std_init_list = namespace_binding
20150     (get_identifier ("initializer_list"), std_node);
20151   tree argvec;
20152   if (!std_init_list || !DECL_CLASS_TEMPLATE_P (std_init_list))
20153     {    
20154       error ("deducing from brace-enclosed initializer list requires "
20155              "#include <initializer_list>");
20156       return error_mark_node;
20157     }
20158   argvec = make_tree_vec (1);
20159   TREE_VEC_ELT (argvec, 0) = arg;
20160   return lookup_template_class (std_init_list, argvec, NULL_TREE,
20161                                 NULL_TREE, 0, tf_warning_or_error);
20162 }
20163
20164 /* Replace auto in TYPE with std::initializer_list<auto>.  */
20165
20166 static tree
20167 listify_autos (tree type, tree auto_node)
20168 {
20169   tree init_auto = listify (auto_node);
20170   tree argvec = make_tree_vec (1);
20171   TREE_VEC_ELT (argvec, 0) = init_auto;
20172   if (processing_template_decl)
20173     argvec = add_to_template_args (current_template_args (), argvec);
20174   return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
20175 }
20176
20177 /* walk_tree helper for do_auto_deduction.  */
20178
20179 static tree
20180 contains_auto_r (tree *tp, int *walk_subtrees ATTRIBUTE_UNUSED,
20181                  void *type)
20182 {
20183   /* Is this a variable with the type we're looking for?  */
20184   if (DECL_P (*tp)
20185       && TREE_TYPE (*tp) == type)
20186     return *tp;
20187   else
20188     return NULL_TREE;
20189 }
20190
20191 /* Replace occurrences of 'auto' in TYPE with the appropriate type deduced
20192    from INIT.  AUTO_NODE is the TEMPLATE_TYPE_PARM used for 'auto' in TYPE.  */
20193
20194 tree
20195 do_auto_deduction (tree type, tree init, tree auto_node)
20196 {
20197   tree parms, tparms, targs;
20198   tree args[1];
20199   tree decl;
20200   int val;
20201
20202   if (processing_template_decl
20203       && (TREE_TYPE (init) == NULL_TREE
20204           || BRACE_ENCLOSED_INITIALIZER_P (init)))
20205     /* Not enough information to try this yet.  */
20206     return type;
20207
20208   /* The name of the object being declared shall not appear in the
20209      initializer expression.  */
20210   decl = cp_walk_tree_without_duplicates (&init, contains_auto_r, type);
20211   if (decl)
20212     {
20213       error ("variable %q#D with %<auto%> type used in its own "
20214              "initializer", decl);
20215       return error_mark_node;
20216     }
20217
20218   /* [dcl.spec.auto]: Obtain P from T by replacing the occurrences of auto
20219      with either a new invented type template parameter U or, if the
20220      initializer is a braced-init-list (8.5.4), with
20221      std::initializer_list<U>.  */
20222   if (BRACE_ENCLOSED_INITIALIZER_P (init))
20223     type = listify_autos (type, auto_node);
20224
20225   init = resolve_nondeduced_context (init);
20226
20227   parms = build_tree_list (NULL_TREE, type);
20228   args[0] = init;
20229   tparms = make_tree_vec (1);
20230   targs = make_tree_vec (1);
20231   TREE_VEC_ELT (tparms, 0)
20232     = build_tree_list (NULL_TREE, TYPE_NAME (auto_node));
20233   val = type_unification_real (tparms, targs, parms, args, 1, 0,
20234                                DEDUCE_CALL, LOOKUP_NORMAL,
20235                                /*explain_p=*/false);
20236   if (val > 0)
20237     {
20238       if (processing_template_decl)
20239         /* Try again at instantiation time.  */
20240         return type;
20241       if (type && type != error_mark_node)
20242         /* If type is error_mark_node a diagnostic must have been
20243            emitted by now.  Also, having a mention to '<type error>'
20244            in the diagnostic is not really useful to the user.  */
20245         error ("unable to deduce %qT from %qE", type, init);
20246       return error_mark_node;
20247     }
20248
20249   /* If the list of declarators contains more than one declarator, the type
20250      of each declared variable is determined as described above. If the
20251      type deduced for the template parameter U is not the same in each
20252      deduction, the program is ill-formed.  */
20253   if (TREE_TYPE (auto_node)
20254       && !same_type_p (TREE_TYPE (auto_node), TREE_VEC_ELT (targs, 0)))
20255     {
20256       error ("inconsistent deduction for %qT: %qT and then %qT",
20257              auto_node, TREE_TYPE (auto_node), TREE_VEC_ELT (targs, 0));
20258       return error_mark_node;
20259     }
20260   TREE_TYPE (auto_node) = TREE_VEC_ELT (targs, 0);
20261
20262   if (processing_template_decl)
20263     targs = add_to_template_args (current_template_args (), targs);
20264   return tsubst (type, targs, tf_warning_or_error, NULL_TREE);
20265 }
20266
20267 /* Substitutes LATE_RETURN_TYPE for 'auto' in TYPE and returns the
20268    result.  */
20269
20270 tree
20271 splice_late_return_type (tree type, tree late_return_type)
20272 {
20273   tree argvec;
20274
20275   if (late_return_type == NULL_TREE)
20276     return type;
20277   argvec = make_tree_vec (1);
20278   TREE_VEC_ELT (argvec, 0) = late_return_type;
20279   if (processing_template_parmlist)
20280     /* For a late-specified return type in a template type-parameter, we
20281        need to add a dummy argument level for its parmlist.  */
20282     argvec = add_to_template_args
20283       (make_tree_vec (processing_template_parmlist), argvec);
20284   if (current_template_parms)
20285     argvec = add_to_template_args (current_template_args (), argvec);
20286   return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
20287 }
20288
20289 /* Returns true iff TYPE is a TEMPLATE_TYPE_PARM representing 'auto'.  */
20290
20291 bool
20292 is_auto (const_tree type)
20293 {
20294   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
20295       && TYPE_IDENTIFIER (type) == get_identifier ("auto"))
20296     return true;
20297   else
20298     return false;
20299 }
20300
20301 /* Returns true iff TYPE contains a use of 'auto'.  Since auto can only
20302    appear as a type-specifier for the declaration in question, we don't
20303    have to look through the whole type.  */
20304
20305 tree
20306 type_uses_auto (tree type)
20307 {
20308   enum tree_code code;
20309   if (is_auto (type))
20310     return type;
20311
20312   code = TREE_CODE (type);
20313
20314   if (code == POINTER_TYPE || code == REFERENCE_TYPE
20315       || code == OFFSET_TYPE || code == FUNCTION_TYPE
20316       || code == METHOD_TYPE || code == ARRAY_TYPE)
20317     return type_uses_auto (TREE_TYPE (type));
20318
20319   if (TYPE_PTRMEMFUNC_P (type))
20320     return type_uses_auto (TREE_TYPE (TREE_TYPE
20321                                    (TYPE_PTRMEMFUNC_FN_TYPE (type))));
20322
20323   return NULL_TREE;
20324 }
20325
20326 /* For a given template T, return the vector of typedefs referenced
20327    in T for which access check is needed at T instantiation time.
20328    T is either  a FUNCTION_DECL or a RECORD_TYPE.
20329    Those typedefs were added to T by the function
20330    append_type_to_template_for_access_check.  */
20331
20332 VEC(qualified_typedef_usage_t,gc)*
20333 get_types_needing_access_check (tree t)
20334 {
20335   tree ti;
20336   VEC(qualified_typedef_usage_t,gc) *result = NULL;
20337
20338   if (!t || t == error_mark_node)
20339     return NULL;
20340
20341   if (!(ti = get_template_info (t)))
20342     return NULL;
20343
20344   if (CLASS_TYPE_P (t)
20345       || TREE_CODE (t) == FUNCTION_DECL)
20346     {
20347       if (!TI_TEMPLATE (ti))
20348         return NULL;
20349
20350       result = TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti);
20351     }
20352
20353   return result;
20354 }
20355
20356 /* Append the typedef TYPE_DECL used in template T to a list of typedefs
20357    tied to T. That list of typedefs will be access checked at
20358    T instantiation time.
20359    T is either a FUNCTION_DECL or a RECORD_TYPE.
20360    TYPE_DECL is a TYPE_DECL node representing a typedef.
20361    SCOPE is the scope through which TYPE_DECL is accessed.
20362    LOCATION is the location of the usage point of TYPE_DECL.
20363
20364    This function is a subroutine of
20365    append_type_to_template_for_access_check.  */
20366
20367 static void
20368 append_type_to_template_for_access_check_1 (tree t,
20369                                             tree type_decl,
20370                                             tree scope,
20371                                             location_t location)
20372 {
20373   qualified_typedef_usage_t typedef_usage;
20374   tree ti;
20375
20376   if (!t || t == error_mark_node)
20377     return;
20378
20379   gcc_assert ((TREE_CODE (t) == FUNCTION_DECL
20380                || CLASS_TYPE_P (t))
20381               && type_decl
20382               && TREE_CODE (type_decl) == TYPE_DECL
20383               && scope);
20384
20385   if (!(ti = get_template_info (t)))
20386     return;
20387
20388   gcc_assert (TI_TEMPLATE (ti));
20389
20390   typedef_usage.typedef_decl = type_decl;
20391   typedef_usage.context = scope;
20392   typedef_usage.locus = location;
20393
20394   VEC_safe_push (qualified_typedef_usage_t, gc,
20395                  TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti),
20396                  &typedef_usage);
20397 }
20398
20399 /* Append TYPE_DECL to the template TEMPL.
20400    TEMPL is either a class type, a FUNCTION_DECL or a a TEMPLATE_DECL.
20401    At TEMPL instanciation time, TYPE_DECL will be checked to see
20402    if it can be accessed through SCOPE.
20403    LOCATION is the location of the usage point of TYPE_DECL.
20404
20405    e.g. consider the following code snippet:
20406
20407      class C
20408      {
20409        typedef int myint;
20410      };
20411
20412      template<class U> struct S
20413      {
20414        C::myint mi; // <-- usage point of the typedef C::myint
20415      };
20416
20417      S<char> s;
20418
20419    At S<char> instantiation time, we need to check the access of C::myint
20420    In other words, we need to check the access of the myint typedef through
20421    the C scope. For that purpose, this function will add the myint typedef
20422    and the scope C through which its being accessed to a list of typedefs
20423    tied to the template S. That list will be walked at template instantiation
20424    time and access check performed on each typedefs it contains.
20425    Note that this particular code snippet should yield an error because
20426    myint is private to C.  */
20427
20428 void
20429 append_type_to_template_for_access_check (tree templ,
20430                                           tree type_decl,
20431                                           tree scope,
20432                                           location_t location)
20433 {
20434   qualified_typedef_usage_t *iter;
20435   int i;
20436
20437   gcc_assert (type_decl && (TREE_CODE (type_decl) == TYPE_DECL));
20438
20439   /* Make sure we don't append the type to the template twice.  */
20440   FOR_EACH_VEC_ELT (qualified_typedef_usage_t,
20441                     get_types_needing_access_check (templ),
20442                     i, iter)
20443     if (iter->typedef_decl == type_decl && scope == iter->context)
20444       return;
20445
20446   append_type_to_template_for_access_check_1 (templ, type_decl,
20447                                               scope, location);
20448 }
20449
20450 /* Set up the hash tables for template instantiations.  */
20451
20452 void
20453 init_template_processing (void)
20454 {
20455   decl_specializations = htab_create_ggc (37,
20456                                           hash_specialization,
20457                                           eq_specializations,
20458                                           ggc_free);
20459   type_specializations = htab_create_ggc (37,
20460                                           hash_specialization,
20461                                           eq_specializations,
20462                                           ggc_free);
20463 }
20464
20465 /* Print stats about the template hash tables for -fstats.  */
20466
20467 void
20468 print_template_statistics (void)
20469 {
20470   fprintf (stderr, "decl_specializations: size %ld, %ld elements, "
20471            "%f collisions\n", (long) htab_size (decl_specializations),
20472            (long) htab_elements (decl_specializations),
20473            htab_collisions (decl_specializations));
20474   fprintf (stderr, "type_specializations: size %ld, %ld elements, "
20475            "%f collisions\n", (long) htab_size (type_specializations),
20476            (long) htab_elements (type_specializations),
20477            htab_collisions (type_specializations));
20478 }
20479
20480 #include "gt-cp-pt.h"