OSDN Git Service

Add condition to MUST_NOT_THROW_EXPR.
[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   /* Handle type aliases/typedefs.  */
2980   if (TYPE_P (t)
2981       && TYPE_NAME (t)
2982       && TREE_CODE (TYPE_NAME (t)) == TYPE_DECL
2983       && TYPE_DECL_ALIAS_P (TYPE_NAME (t)))
2984     {
2985       if (TYPE_TEMPLATE_INFO (t))
2986         cp_walk_tree (&TYPE_TI_ARGS (t),
2987                       &find_parameter_packs_r,
2988                       ppd, ppd->visited);
2989       *walk_subtrees = 0;
2990       return NULL_TREE;
2991     }
2992
2993   /* Identify whether this is a parameter pack or not.  */
2994   switch (TREE_CODE (t))
2995     {
2996     case TEMPLATE_PARM_INDEX:
2997       if (TEMPLATE_PARM_PARAMETER_PACK (t))
2998         parameter_pack_p = true;
2999       break;
3000
3001     case TEMPLATE_TYPE_PARM:
3002       t = TYPE_MAIN_VARIANT (t);
3003     case TEMPLATE_TEMPLATE_PARM:
3004       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
3005         parameter_pack_p = true;
3006       break;
3007
3008     case PARM_DECL:
3009       if (FUNCTION_PARAMETER_PACK_P (t))
3010         {
3011           /* We don't want to walk into the type of a PARM_DECL,
3012              because we don't want to see the type parameter pack.  */
3013           *walk_subtrees = 0;
3014           parameter_pack_p = true;
3015         }
3016       break;
3017
3018     case BASES:
3019       parameter_pack_p = true;
3020       break;
3021     default:
3022       /* Not a parameter pack.  */
3023       break;
3024     }
3025
3026   if (parameter_pack_p)
3027     {
3028       /* Add this parameter pack to the list.  */
3029       *ppd->parameter_packs = tree_cons (NULL_TREE, t, *ppd->parameter_packs);
3030     }
3031
3032   if (TYPE_P (t))
3033     cp_walk_tree (&TYPE_CONTEXT (t), 
3034                   &find_parameter_packs_r, ppd, ppd->visited);
3035
3036   /* This switch statement will return immediately if we don't find a
3037      parameter pack.  */
3038   switch (TREE_CODE (t)) 
3039     {
3040     case TEMPLATE_PARM_INDEX:
3041       return NULL_TREE;
3042
3043     case BOUND_TEMPLATE_TEMPLATE_PARM:
3044       /* Check the template itself.  */
3045       cp_walk_tree (&TREE_TYPE (TYPE_TI_TEMPLATE (t)), 
3046                     &find_parameter_packs_r, ppd, ppd->visited);
3047       /* Check the template arguments.  */
3048       cp_walk_tree (&TYPE_TI_ARGS (t), &find_parameter_packs_r, ppd, 
3049                     ppd->visited);
3050       *walk_subtrees = 0;
3051       return NULL_TREE;
3052
3053     case TEMPLATE_TYPE_PARM:
3054     case TEMPLATE_TEMPLATE_PARM:
3055       return NULL_TREE;
3056
3057     case PARM_DECL:
3058       return NULL_TREE;
3059
3060     case RECORD_TYPE:
3061       if (TYPE_PTRMEMFUNC_P (t))
3062         return NULL_TREE;
3063       /* Fall through.  */
3064
3065     case UNION_TYPE:
3066     case ENUMERAL_TYPE:
3067       if (TYPE_TEMPLATE_INFO (t))
3068         cp_walk_tree (&TI_ARGS (TYPE_TEMPLATE_INFO (t)),
3069                       &find_parameter_packs_r, ppd, ppd->visited);
3070
3071       *walk_subtrees = 0;
3072       return NULL_TREE;
3073
3074     case CONSTRUCTOR:
3075     case TEMPLATE_DECL:
3076       cp_walk_tree (&TREE_TYPE (t),
3077                     &find_parameter_packs_r, ppd, ppd->visited);
3078       return NULL_TREE;
3079  
3080     case TYPENAME_TYPE:
3081       cp_walk_tree (&TYPENAME_TYPE_FULLNAME (t), &find_parameter_packs_r,
3082                    ppd, ppd->visited);
3083       *walk_subtrees = 0;
3084       return NULL_TREE;
3085       
3086     case TYPE_PACK_EXPANSION:
3087     case EXPR_PACK_EXPANSION:
3088       *walk_subtrees = 0;
3089       return NULL_TREE;
3090
3091     case INTEGER_TYPE:
3092       cp_walk_tree (&TYPE_MAX_VALUE (t), &find_parameter_packs_r, 
3093                     ppd, ppd->visited);
3094       *walk_subtrees = 0;
3095       return NULL_TREE;
3096
3097     case IDENTIFIER_NODE:
3098       cp_walk_tree (&TREE_TYPE (t), &find_parameter_packs_r, ppd, 
3099                     ppd->visited);
3100       *walk_subtrees = 0;
3101       return NULL_TREE;
3102
3103     default:
3104       return NULL_TREE;
3105     }
3106
3107   return NULL_TREE;
3108 }
3109
3110 /* Determines if the expression or type T uses any parameter packs.  */
3111 bool
3112 uses_parameter_packs (tree t)
3113 {
3114   tree parameter_packs = NULL_TREE;
3115   struct find_parameter_pack_data ppd;
3116   ppd.parameter_packs = &parameter_packs;
3117   ppd.visited = pointer_set_create ();
3118   cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
3119   pointer_set_destroy (ppd.visited);
3120   return parameter_packs != NULL_TREE;
3121 }
3122
3123 /* Turn ARG, which may be an expression, type, or a TREE_LIST
3124    representation a base-class initializer into a parameter pack
3125    expansion. If all goes well, the resulting node will be an
3126    EXPR_PACK_EXPANSION, TYPE_PACK_EXPANSION, or TREE_LIST,
3127    respectively.  */
3128 tree 
3129 make_pack_expansion (tree arg)
3130 {
3131   tree result;
3132   tree parameter_packs = NULL_TREE;
3133   bool for_types = false;
3134   struct find_parameter_pack_data ppd;
3135
3136   if (!arg || arg == error_mark_node)
3137     return arg;
3138
3139   if (TREE_CODE (arg) == TREE_LIST)
3140     {
3141       /* The only time we will see a TREE_LIST here is for a base
3142          class initializer.  In this case, the TREE_PURPOSE will be a
3143          _TYPE node (representing the base class expansion we're
3144          initializing) and the TREE_VALUE will be a TREE_LIST
3145          containing the initialization arguments. 
3146
3147          The resulting expansion looks somewhat different from most
3148          expansions. Rather than returning just one _EXPANSION, we
3149          return a TREE_LIST whose TREE_PURPOSE is a
3150          TYPE_PACK_EXPANSION containing the bases that will be
3151          initialized.  The TREE_VALUE will be identical to the
3152          original TREE_VALUE, which is a list of arguments that will
3153          be passed to each base.  We do not introduce any new pack
3154          expansion nodes into the TREE_VALUE (although it is possible
3155          that some already exist), because the TREE_PURPOSE and
3156          TREE_VALUE all need to be expanded together with the same
3157          _EXPANSION node.  Note that the TYPE_PACK_EXPANSION in the
3158          resulting TREE_PURPOSE will mention the parameter packs in
3159          both the bases and the arguments to the bases.  */
3160       tree purpose;
3161       tree value;
3162       tree parameter_packs = NULL_TREE;
3163
3164       /* Determine which parameter packs will be used by the base
3165          class expansion.  */
3166       ppd.visited = pointer_set_create ();
3167       ppd.parameter_packs = &parameter_packs;
3168       cp_walk_tree (&TREE_PURPOSE (arg), &find_parameter_packs_r, 
3169                     &ppd, ppd.visited);
3170
3171       if (parameter_packs == NULL_TREE)
3172         {
3173           error ("base initializer expansion %<%T%> contains no parameter packs", arg);
3174           pointer_set_destroy (ppd.visited);
3175           return error_mark_node;
3176         }
3177
3178       if (TREE_VALUE (arg) != void_type_node)
3179         {
3180           /* Collect the sets of parameter packs used in each of the
3181              initialization arguments.  */
3182           for (value = TREE_VALUE (arg); value; value = TREE_CHAIN (value))
3183             {
3184               /* Determine which parameter packs will be expanded in this
3185                  argument.  */
3186               cp_walk_tree (&TREE_VALUE (value), &find_parameter_packs_r, 
3187                             &ppd, ppd.visited);
3188             }
3189         }
3190
3191       pointer_set_destroy (ppd.visited);
3192
3193       /* Create the pack expansion type for the base type.  */
3194       purpose = cxx_make_type (TYPE_PACK_EXPANSION);
3195       SET_PACK_EXPANSION_PATTERN (purpose, TREE_PURPOSE (arg));
3196       PACK_EXPANSION_PARAMETER_PACKS (purpose) = parameter_packs;
3197
3198       /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
3199          they will rarely be compared to anything.  */
3200       SET_TYPE_STRUCTURAL_EQUALITY (purpose);
3201
3202       return tree_cons (purpose, TREE_VALUE (arg), NULL_TREE);
3203     }
3204
3205   if (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL)
3206     for_types = true;
3207
3208   /* Build the PACK_EXPANSION_* node.  */
3209   result = for_types
3210      ? cxx_make_type (TYPE_PACK_EXPANSION)
3211      : make_node (EXPR_PACK_EXPANSION);
3212   SET_PACK_EXPANSION_PATTERN (result, arg);
3213   if (TREE_CODE (result) == EXPR_PACK_EXPANSION)
3214     {
3215       /* Propagate type and const-expression information.  */
3216       TREE_TYPE (result) = TREE_TYPE (arg);
3217       TREE_CONSTANT (result) = TREE_CONSTANT (arg);
3218     }
3219   else
3220     /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
3221        they will rarely be compared to anything.  */
3222     SET_TYPE_STRUCTURAL_EQUALITY (result);
3223
3224   /* Determine which parameter packs will be expanded.  */
3225   ppd.parameter_packs = &parameter_packs;
3226   ppd.visited = pointer_set_create ();
3227   cp_walk_tree (&arg, &find_parameter_packs_r, &ppd, ppd.visited);
3228   pointer_set_destroy (ppd.visited);
3229
3230   /* Make sure we found some parameter packs.  */
3231   if (parameter_packs == NULL_TREE)
3232     {
3233       if (TYPE_P (arg))
3234         error ("expansion pattern %<%T%> contains no argument packs", arg);
3235       else
3236         error ("expansion pattern %<%E%> contains no argument packs", arg);
3237       return error_mark_node;
3238     }
3239   PACK_EXPANSION_PARAMETER_PACKS (result) = parameter_packs;
3240
3241   return result;
3242 }
3243
3244 /* Checks T for any "bare" parameter packs, which have not yet been
3245    expanded, and issues an error if any are found. This operation can
3246    only be done on full expressions or types (e.g., an expression
3247    statement, "if" condition, etc.), because we could have expressions like:
3248
3249      foo(f(g(h(args)))...)
3250
3251    where "args" is a parameter pack. check_for_bare_parameter_packs
3252    should not be called for the subexpressions args, h(args),
3253    g(h(args)), or f(g(h(args))), because we would produce erroneous
3254    error messages. 
3255
3256    Returns TRUE and emits an error if there were bare parameter packs,
3257    returns FALSE otherwise.  */
3258 bool 
3259 check_for_bare_parameter_packs (tree t)
3260 {
3261   tree parameter_packs = NULL_TREE;
3262   struct find_parameter_pack_data ppd;
3263
3264   if (!processing_template_decl || !t || t == error_mark_node)
3265     return false;
3266
3267   if (TREE_CODE (t) == TYPE_DECL)
3268     t = TREE_TYPE (t);
3269
3270   ppd.parameter_packs = &parameter_packs;
3271   ppd.visited = pointer_set_create ();
3272   cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
3273   pointer_set_destroy (ppd.visited);
3274
3275   if (parameter_packs) 
3276     {
3277       error ("parameter packs not expanded with %<...%>:");
3278       while (parameter_packs)
3279         {
3280           tree pack = TREE_VALUE (parameter_packs);
3281           tree name = NULL_TREE;
3282
3283           if (TREE_CODE (pack) == TEMPLATE_TYPE_PARM
3284               || TREE_CODE (pack) == TEMPLATE_TEMPLATE_PARM)
3285             name = TYPE_NAME (pack);
3286           else if (TREE_CODE (pack) == TEMPLATE_PARM_INDEX)
3287             name = DECL_NAME (TEMPLATE_PARM_DECL (pack));
3288           else
3289             name = DECL_NAME (pack);
3290
3291           if (name)
3292             inform (input_location, "        %qD", name);
3293           else
3294             inform (input_location, "        <anonymous>");
3295
3296           parameter_packs = TREE_CHAIN (parameter_packs);
3297         }
3298
3299       return true;
3300     }
3301
3302   return false;
3303 }
3304
3305 /* Expand any parameter packs that occur in the template arguments in
3306    ARGS.  */
3307 tree
3308 expand_template_argument_pack (tree args)
3309 {
3310   tree result_args = NULL_TREE;
3311   int in_arg, out_arg = 0, nargs = args ? TREE_VEC_LENGTH (args) : 0;
3312   int num_result_args = -1;
3313   int non_default_args_count = -1;
3314
3315   /* First, determine if we need to expand anything, and the number of
3316      slots we'll need.  */
3317   for (in_arg = 0; in_arg < nargs; ++in_arg)
3318     {
3319       tree arg = TREE_VEC_ELT (args, in_arg);
3320       if (arg == NULL_TREE)
3321         return args;
3322       if (ARGUMENT_PACK_P (arg))
3323         {
3324           int num_packed = TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg));
3325           if (num_result_args < 0)
3326             num_result_args = in_arg + num_packed;
3327           else
3328             num_result_args += num_packed;
3329         }
3330       else
3331         {
3332           if (num_result_args >= 0)
3333             num_result_args++;
3334         }
3335     }
3336
3337   /* If no expansion is necessary, we're done.  */
3338   if (num_result_args < 0)
3339     return args;
3340
3341   /* Expand arguments.  */
3342   result_args = make_tree_vec (num_result_args);
3343   if (NON_DEFAULT_TEMPLATE_ARGS_COUNT (args))
3344     non_default_args_count =
3345       GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (args);
3346   for (in_arg = 0; in_arg < nargs; ++in_arg)
3347     {
3348       tree arg = TREE_VEC_ELT (args, in_arg);
3349       if (ARGUMENT_PACK_P (arg))
3350         {
3351           tree packed = ARGUMENT_PACK_ARGS (arg);
3352           int i, num_packed = TREE_VEC_LENGTH (packed);
3353           for (i = 0; i < num_packed; ++i, ++out_arg)
3354             TREE_VEC_ELT (result_args, out_arg) = TREE_VEC_ELT(packed, i);
3355           if (non_default_args_count > 0)
3356             non_default_args_count += num_packed;
3357         }
3358       else
3359         {
3360           TREE_VEC_ELT (result_args, out_arg) = arg;
3361           ++out_arg;
3362         }
3363     }
3364   if (non_default_args_count >= 0)
3365     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (result_args, non_default_args_count);
3366   return result_args;
3367 }
3368
3369 /* Checks if DECL shadows a template parameter.
3370
3371    [temp.local]: A template-parameter shall not be redeclared within its
3372    scope (including nested scopes).
3373
3374    Emits an error and returns TRUE if the DECL shadows a parameter,
3375    returns FALSE otherwise.  */
3376
3377 bool
3378 check_template_shadow (tree decl)
3379 {
3380   tree olddecl;
3381
3382   /* If we're not in a template, we can't possibly shadow a template
3383      parameter.  */
3384   if (!current_template_parms)
3385     return true;
3386
3387   /* Figure out what we're shadowing.  */
3388   if (TREE_CODE (decl) == OVERLOAD)
3389     decl = OVL_CURRENT (decl);
3390   olddecl = innermost_non_namespace_value (DECL_NAME (decl));
3391
3392   /* If there's no previous binding for this name, we're not shadowing
3393      anything, let alone a template parameter.  */
3394   if (!olddecl)
3395     return true;
3396
3397   /* If we're not shadowing a template parameter, we're done.  Note
3398      that OLDDECL might be an OVERLOAD (or perhaps even an
3399      ERROR_MARK), so we can't just blithely assume it to be a _DECL
3400      node.  */
3401   if (!DECL_P (olddecl) || !DECL_TEMPLATE_PARM_P (olddecl))
3402     return true;
3403
3404   /* We check for decl != olddecl to avoid bogus errors for using a
3405      name inside a class.  We check TPFI to avoid duplicate errors for
3406      inline member templates.  */
3407   if (decl == olddecl
3408       || TEMPLATE_PARMS_FOR_INLINE (current_template_parms))
3409     return true;
3410
3411   error ("declaration of %q+#D", decl);
3412   error (" shadows template parm %q+#D", olddecl);
3413   return false;
3414 }
3415
3416 /* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
3417    ORIG_LEVEL, DECL, and TYPE.  NUM_SIBLINGS is the total number of
3418    template parameters.  */
3419
3420 static tree
3421 build_template_parm_index (int index,
3422                            int level,
3423                            int orig_level,
3424                            int num_siblings,
3425                            tree decl,
3426                            tree type)
3427 {
3428   tree t = make_node (TEMPLATE_PARM_INDEX);
3429   TEMPLATE_PARM_IDX (t) = index;
3430   TEMPLATE_PARM_LEVEL (t) = level;
3431   TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
3432   TEMPLATE_PARM_NUM_SIBLINGS (t) = num_siblings;
3433   TEMPLATE_PARM_DECL (t) = decl;
3434   TREE_TYPE (t) = type;
3435   TREE_CONSTANT (t) = TREE_CONSTANT (decl);
3436   TREE_READONLY (t) = TREE_READONLY (decl);
3437
3438   return t;
3439 }
3440
3441 /* Find the canonical type parameter for the given template type
3442    parameter.  Returns the canonical type parameter, which may be TYPE
3443    if no such parameter existed.  */
3444
3445 static tree
3446 canonical_type_parameter (tree type)
3447 {
3448   tree list;
3449   int idx = TEMPLATE_TYPE_IDX (type);
3450   if (!canonical_template_parms)
3451     canonical_template_parms = VEC_alloc (tree, gc, idx+1);
3452
3453   while (VEC_length (tree, canonical_template_parms) <= (unsigned)idx)
3454     VEC_safe_push (tree, gc, canonical_template_parms, NULL_TREE);
3455
3456   list = VEC_index (tree, canonical_template_parms, idx);
3457   while (list && !comptypes (type, TREE_VALUE (list), COMPARE_STRUCTURAL))
3458     list = TREE_CHAIN (list);
3459
3460   if (list)
3461     return TREE_VALUE (list);
3462   else
3463     {
3464       VEC_replace(tree, canonical_template_parms, idx,
3465                   tree_cons (NULL_TREE, type, 
3466                              VEC_index (tree, canonical_template_parms, idx)));
3467       return type;
3468     }
3469 }
3470
3471 /* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
3472    TEMPLATE_PARM_LEVEL has been decreased by LEVELS.  If such a
3473    TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
3474    new one is created.  */
3475
3476 static tree
3477 reduce_template_parm_level (tree index, tree type, int levels, tree args,
3478                             tsubst_flags_t complain)
3479 {
3480   if (TEMPLATE_PARM_DESCENDANTS (index) == NULL_TREE
3481       || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
3482           != TEMPLATE_PARM_LEVEL (index) - levels)
3483       || !same_type_p (type, TREE_TYPE (TEMPLATE_PARM_DESCENDANTS (index))))
3484     {
3485       tree orig_decl = TEMPLATE_PARM_DECL (index);
3486       tree decl, t;
3487
3488       decl = build_decl (DECL_SOURCE_LOCATION (orig_decl),
3489                          TREE_CODE (orig_decl), DECL_NAME (orig_decl), type);
3490       TREE_CONSTANT (decl) = TREE_CONSTANT (orig_decl);
3491       TREE_READONLY (decl) = TREE_READONLY (orig_decl);
3492       DECL_ARTIFICIAL (decl) = 1;
3493       SET_DECL_TEMPLATE_PARM_P (decl);
3494
3495       t = build_template_parm_index (TEMPLATE_PARM_IDX (index),
3496                                      TEMPLATE_PARM_LEVEL (index) - levels,
3497                                      TEMPLATE_PARM_ORIG_LEVEL (index),
3498                                      TEMPLATE_PARM_NUM_SIBLINGS (index),
3499                                      decl, type);
3500       TEMPLATE_PARM_DESCENDANTS (index) = t;
3501       TEMPLATE_PARM_PARAMETER_PACK (t) 
3502         = TEMPLATE_PARM_PARAMETER_PACK (index);
3503
3504         /* Template template parameters need this.  */
3505       if (TREE_CODE (decl) == TEMPLATE_DECL)
3506         DECL_TEMPLATE_PARMS (decl) = tsubst_template_parms
3507           (DECL_TEMPLATE_PARMS (TEMPLATE_PARM_DECL (index)),
3508            args, complain);
3509     }
3510
3511   return TEMPLATE_PARM_DESCENDANTS (index);
3512 }
3513
3514 /* Process information from new template parameter PARM and append it
3515    to the LIST being built.  This new parameter is a non-type
3516    parameter iff IS_NON_TYPE is true. This new parameter is a
3517    parameter pack iff IS_PARAMETER_PACK is true.  The location of PARM
3518    is in PARM_LOC. NUM_TEMPLATE_PARMS is the size of the template
3519    parameter list PARM belongs to. This is used used to create a
3520    proper canonical type for the type of PARM that is to be created,
3521    iff PARM is a type.  If the size is not known, this parameter shall
3522    be set to 0.  */
3523
3524 tree
3525 process_template_parm (tree list, location_t parm_loc, tree parm,
3526                        bool is_non_type, bool is_parameter_pack,
3527                        unsigned num_template_parms)
3528 {
3529   tree decl = 0;
3530   tree defval;
3531   tree err_parm_list;
3532   int idx = 0;
3533
3534   gcc_assert (TREE_CODE (parm) == TREE_LIST);
3535   defval = TREE_PURPOSE (parm);
3536
3537   if (list)
3538     {
3539       tree p = tree_last (list);
3540
3541       if (p && TREE_VALUE (p) != error_mark_node)
3542         {
3543           p = TREE_VALUE (p);
3544           if (TREE_CODE (p) == TYPE_DECL || TREE_CODE (p) == TEMPLATE_DECL)
3545             idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
3546           else
3547             idx = TEMPLATE_PARM_IDX (DECL_INITIAL (p));
3548         }
3549
3550       ++idx;
3551     }
3552   else
3553     idx = 0;
3554
3555   if (is_non_type)
3556     {
3557       parm = TREE_VALUE (parm);
3558
3559       SET_DECL_TEMPLATE_PARM_P (parm);
3560
3561       if (TREE_TYPE (parm) == error_mark_node)
3562         {
3563           err_parm_list = build_tree_list (defval, parm);
3564           TREE_VALUE (err_parm_list) = error_mark_node;
3565            return chainon (list, err_parm_list);
3566         }
3567       else
3568       {
3569         /* [temp.param]
3570
3571            The top-level cv-qualifiers on the template-parameter are
3572            ignored when determining its type.  */
3573         TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
3574         if (invalid_nontype_parm_type_p (TREE_TYPE (parm), 1))
3575           {
3576             err_parm_list = build_tree_list (defval, parm);
3577             TREE_VALUE (err_parm_list) = error_mark_node;
3578              return chainon (list, err_parm_list);
3579           }
3580
3581         if (uses_parameter_packs (TREE_TYPE (parm)) && !is_parameter_pack)
3582           {
3583             /* This template parameter is not a parameter pack, but it
3584                should be. Complain about "bare" parameter packs.  */
3585             check_for_bare_parameter_packs (TREE_TYPE (parm));
3586             
3587             /* Recover by calling this a parameter pack.  */
3588             is_parameter_pack = true;
3589           }
3590       }
3591
3592       /* A template parameter is not modifiable.  */
3593       TREE_CONSTANT (parm) = 1;
3594       TREE_READONLY (parm) = 1;
3595       decl = build_decl (parm_loc,
3596                          CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
3597       TREE_CONSTANT (decl) = 1;
3598       TREE_READONLY (decl) = 1;
3599       DECL_INITIAL (parm) = DECL_INITIAL (decl)
3600         = build_template_parm_index (idx, processing_template_decl,
3601                                      processing_template_decl,
3602                                      num_template_parms,
3603                                      decl, TREE_TYPE (parm));
3604
3605       TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)) 
3606         = is_parameter_pack;
3607     }
3608   else
3609     {
3610       tree t;
3611       parm = TREE_VALUE (TREE_VALUE (parm));
3612
3613       if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
3614         {
3615           t = cxx_make_type (TEMPLATE_TEMPLATE_PARM);
3616           /* This is for distinguishing between real templates and template
3617              template parameters */
3618           TREE_TYPE (parm) = t;
3619           TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
3620           decl = parm;
3621         }
3622       else
3623         {
3624           t = cxx_make_type (TEMPLATE_TYPE_PARM);
3625           /* parm is either IDENTIFIER_NODE or NULL_TREE.  */
3626           decl = build_decl (parm_loc,
3627                              TYPE_DECL, parm, t);
3628         }
3629
3630       TYPE_NAME (t) = decl;
3631       TYPE_STUB_DECL (t) = decl;
3632       parm = decl;
3633       TEMPLATE_TYPE_PARM_INDEX (t)
3634         = build_template_parm_index (idx, processing_template_decl,
3635                                      processing_template_decl,
3636                                      num_template_parms,
3637                                      decl, TREE_TYPE (parm));
3638       TEMPLATE_TYPE_PARAMETER_PACK (t) = is_parameter_pack;
3639       TYPE_CANONICAL (t) = canonical_type_parameter (t);
3640     }
3641   DECL_ARTIFICIAL (decl) = 1;
3642   SET_DECL_TEMPLATE_PARM_P (decl);
3643   pushdecl (decl);
3644   parm = build_tree_list (defval, parm);
3645   return chainon (list, parm);
3646 }
3647
3648 /* The end of a template parameter list has been reached.  Process the
3649    tree list into a parameter vector, converting each parameter into a more
3650    useful form.  Type parameters are saved as IDENTIFIER_NODEs, and others
3651    as PARM_DECLs.  */
3652
3653 tree
3654 end_template_parm_list (tree parms)
3655 {
3656   int nparms;
3657   tree parm, next;
3658   tree saved_parmlist = make_tree_vec (list_length (parms));
3659
3660   current_template_parms
3661     = tree_cons (size_int (processing_template_decl),
3662                  saved_parmlist, current_template_parms);
3663
3664   for (parm = parms, nparms = 0; parm; parm = next, nparms++)
3665     {
3666       next = TREE_CHAIN (parm);
3667       TREE_VEC_ELT (saved_parmlist, nparms) = parm;
3668       TREE_CHAIN (parm) = NULL_TREE;
3669     }
3670
3671   --processing_template_parmlist;
3672
3673   return saved_parmlist;
3674 }
3675
3676 /* Create a new type almost identical to TYPE but which has the
3677    following differences:
3678
3679      1/ T has a new TEMPLATE_PARM_INDEX that carries the new number of
3680      template sibling parameters of T.
3681
3682      2/ T has a new canonical type that matches the new number
3683      of sibling parms.
3684
3685      3/ From now on, T is going to be what lookups referring to the
3686      name of TYPE will return. No lookup should return TYPE anymore.
3687
3688    NUM_PARMS is the new number of sibling parms TYPE belongs to.
3689
3690    This is a subroutine of fixup_template_parms.  */
3691
3692 static tree
3693 fixup_template_type_parm_type (tree type, int num_parms)
3694 {
3695   tree orig_idx = TEMPLATE_TYPE_PARM_INDEX (type), idx;
3696   tree t;
3697   /* This is the decl which name is inserted into the symbol table for
3698      the template parm type. So whenever we lookup the type name, this
3699      is the DECL we get.  */
3700   tree decl;
3701
3702   /* Do not fix up the type twice.  */
3703   if (orig_idx && TEMPLATE_PARM_NUM_SIBLINGS (orig_idx) != 0)
3704     return type;
3705
3706   t = copy_type (type);
3707   decl = TYPE_NAME (t);
3708
3709   TYPE_MAIN_VARIANT (t) = t;
3710   TYPE_NEXT_VARIANT (t)= NULL_TREE;
3711   TYPE_POINTER_TO (t) = 0;
3712   TYPE_REFERENCE_TO (t) = 0;
3713
3714   idx = build_template_parm_index (TEMPLATE_PARM_IDX (orig_idx),
3715                                    TEMPLATE_PARM_LEVEL (orig_idx),
3716                                    TEMPLATE_PARM_ORIG_LEVEL (orig_idx),
3717                                    num_parms,
3718                                    decl, t);
3719   TEMPLATE_PARM_DESCENDANTS (idx) = TEMPLATE_PARM_DESCENDANTS (orig_idx);
3720   TEMPLATE_PARM_PARAMETER_PACK (idx) = TEMPLATE_PARM_PARAMETER_PACK (orig_idx);
3721   TEMPLATE_TYPE_PARM_INDEX (t) = idx;
3722
3723   TYPE_STUB_DECL (t) = decl;
3724   TEMPLATE_TYPE_DECL (t) = decl;
3725   if (TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
3726     TREE_TYPE (DECL_TEMPLATE_RESULT  (decl)) = t;
3727
3728   /* Update the type associated to the type name stored in the symbol
3729      table. Now, whenever the type name is looked up, the resulting
3730      type is properly fixed up.  */
3731   TREE_TYPE (decl) = t;
3732
3733   TYPE_CANONICAL (t) = canonical_type_parameter (t);
3734
3735   return t;
3736 }
3737
3738 /* Create and return a new TEMPLATE_PARM_INDEX that is almost
3739    identical to I, but that is fixed up as to:
3740
3741    1/ carry the number of sibling parms (NUM_PARMS) of the template
3742    parm represented by I.
3743
3744    2/ replace all references to template parm types declared before I
3745    (in the same template parm list as I) by references to template
3746    parm types contained in ARGS. ARGS should contain the list of
3747    template parms that have been fixed up so far, in a form suitable
3748    to be passed to tsubst.
3749
3750    This is a subroutine of fixup_template_parms.  */
3751
3752 static tree
3753 fixup_template_parm_index (tree i, tree args, int num_parms)
3754 {
3755   tree index, decl, type;
3756
3757   if (i == NULL_TREE
3758       || TREE_CODE (i) != TEMPLATE_PARM_INDEX
3759       /* Do not fix up the index twice.  */
3760       || (TEMPLATE_PARM_NUM_SIBLINGS (i) != 0))
3761     return i;
3762
3763   decl = TEMPLATE_PARM_DECL (i);
3764   type = TREE_TYPE (decl);
3765
3766   index = build_template_parm_index (TEMPLATE_PARM_IDX (i),
3767                                      TEMPLATE_PARM_LEVEL (i),
3768                                      TEMPLATE_PARM_ORIG_LEVEL (i),
3769                                      num_parms,
3770                                      decl, type);
3771
3772   TEMPLATE_PARM_DESCENDANTS (index) = TEMPLATE_PARM_DESCENDANTS (i);
3773   TEMPLATE_PARM_PARAMETER_PACK (index) = TEMPLATE_PARM_PARAMETER_PACK (i);
3774
3775   type = tsubst (type, args, tf_none, NULL_TREE);
3776   
3777   TREE_TYPE (decl) = type;
3778   TREE_TYPE (index) = type;
3779
3780   return index;
3781 }
3782
3783 /* 
3784    This is a subroutine of fixup_template_parms.
3785
3786    It computes the canonical type of the type of the template
3787    parameter PARM_DESC and update all references to that type so that
3788    they use the newly computed canonical type. No access check is
3789    performed during the fixup. PARM_DESC is a TREE_LIST which
3790    TREE_VALUE is the template parameter and its TREE_PURPOSE is the
3791    default argument of the template parm if any. IDX is the index of
3792    the template parameter, starting at 0. NUM_PARMS is the number of
3793    template parameters in the set PARM_DESC belongs to. ARGLIST is a
3794    TREE_VEC containing the full set of template parameters in a form
3795    suitable to be passed to substs functions as their ARGS
3796    argument. This is what current_template_args returns for a given
3797    template. The innermost vector of args in ARGLIST is the set of
3798    template parms that have been fixed up so far. This function adds
3799    the fixed up parameter into that vector.  */
3800
3801 static void
3802 fixup_template_parm (tree parm_desc,
3803                      int idx,
3804                      int num_parms,
3805                      tree arglist)
3806 {
3807   tree parm = TREE_VALUE (parm_desc);
3808   tree fixedup_args = INNERMOST_TEMPLATE_ARGS (arglist);
3809
3810   push_deferring_access_checks (dk_no_check);
3811
3812   if (TREE_CODE (parm) == TYPE_DECL)
3813     {
3814       /* PARM is a template type parameter. Fix up its type, add
3815          the fixed-up template parm to the vector of fixed-up
3816          template parms so far, and substitute the fixed-up
3817          template parms into the default argument of this
3818          parameter.  */
3819       tree t =
3820         fixup_template_type_parm_type (TREE_TYPE (parm), num_parms);
3821       TREE_TYPE (parm) = t;
3822
3823       TREE_VEC_ELT (fixedup_args, idx) = template_parm_to_arg (parm_desc);
3824     }
3825   else if (TREE_CODE (parm) == TEMPLATE_DECL)
3826     {
3827       /* PARM is a template template parameter. This is going to
3828          be interesting.  */
3829       tree tparms, targs, innermost_args, t;
3830       int j;
3831
3832       /* First, fix up the parms of the template template parm
3833          because the parms are involved in defining the new canonical
3834          type of the template template parm.  */
3835
3836       /* So we need to substitute the template parm types that have
3837          been fixed up so far into the template parms of this template
3838          template parm. E.g, consider this:
3839
3840          template<class T, template<T u> class TT> class S;
3841
3842          In this case we want to substitute T into the
3843          template parameters of TT.
3844
3845          So let's walk the template parms of PARM here, and
3846          tsubst ARGLIST into into each of the template
3847          parms.   */
3848
3849       /* For this substitution we need to build the full set of
3850          template parameters and use that as arguments for the
3851          tsubsting function.  */
3852       tparms = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (parm));
3853
3854       /* This will contain the innermost parms of PARM into which
3855          we have substituted so far.  */
3856       innermost_args = make_tree_vec (TREE_VEC_LENGTH (tparms));
3857       targs = add_to_template_args (arglist, innermost_args);
3858       for (j = 0; j < TREE_VEC_LENGTH (tparms); ++j)
3859         {
3860           tree parameter;
3861
3862           parameter = TREE_VEC_ELT (tparms, j);
3863
3864           /* INNERMOST_ARGS needs to have at least the same number
3865              of elements as the index PARAMETER, ortherwise
3866              tsubsting into PARAMETER will result in partially
3867              instantiating it, reducing its tempate parm
3868              level. Let's tactically fill INNERMOST_ARGS for that
3869              purpose.  */
3870           TREE_VEC_ELT (innermost_args, j) =
3871             template_parm_to_arg (parameter);
3872
3873           fixup_template_parm (parameter, j,
3874                                TREE_VEC_LENGTH (tparms),
3875                                targs);
3876         }
3877
3878       /* Now fix up the type of the template template parm.  */
3879
3880       t = fixup_template_type_parm_type (TREE_TYPE (parm), num_parms);
3881       TREE_TYPE (parm) = t;
3882
3883       TREE_VEC_ELT (fixedup_args, idx) =
3884         template_parm_to_arg (parm_desc);
3885     }
3886   else if (TREE_CODE (parm) == PARM_DECL)
3887     {
3888       /* PARM is a non-type template parameter. We need to:
3889
3890        * Fix up its TEMPLATE_PARM_INDEX to make it carry the
3891        proper number of sibling parameters.
3892
3893        * Make lookups of the template parameter return a reference
3894        to the fixed-up index. No lookup should return references
3895        to the former index anymore.
3896
3897        * Substitute the template parms that got fixed up so far
3898
3899        * into the type of PARM.  */
3900
3901       tree index = DECL_INITIAL (parm);
3902
3903       /* PUSHED_DECL is the decl added to the symbol table with
3904          the name of the parameter. E,g:
3905              
3906          template<class T, T u> //#0
3907          auto my_function(T t) -> decltype(u); //#1
3908
3909          Here, when looking up u at //#1, we get the decl of u
3910          resulting from the declaration in #0. This is what
3911          PUSHED_DECL is. We need to replace the reference to the
3912          old TEMPLATE_PARM_INDEX carried by PUSHED_DECL by the
3913          fixed-up TEMPLATE_PARM_INDEX.  */
3914       tree pushed_decl = TEMPLATE_PARM_DECL (index);
3915
3916       /* Let's fix up the TEMPLATE_PARM_INDEX then. Note that we must
3917          fixup the type of PUSHED_DECL as well and luckily
3918          fixup_template_parm_index does it for us too.  */
3919       tree fixed_up_index =
3920         fixup_template_parm_index (index, arglist, num_parms);
3921
3922       DECL_INITIAL (pushed_decl) = DECL_INITIAL (parm) = fixed_up_index;
3923
3924       /* Add this fixed up PARM to the template parms we've fixed
3925          up so far and use that to substitute the fixed-up
3926          template parms into the type of PARM.  */
3927       TREE_VEC_ELT (fixedup_args, idx) =
3928         template_parm_to_arg (parm_desc);
3929       TREE_TYPE (parm) = tsubst (TREE_TYPE (parm), arglist,
3930                                  tf_none, NULL_TREE);
3931     }
3932
3933   TREE_PURPOSE (parm_desc) =
3934     tsubst_template_arg (TREE_PURPOSE (parm_desc),
3935                          arglist, tf_none, parm);
3936
3937   pop_deferring_access_checks ();
3938 }
3939
3940 /* Walk the current template parms and properly compute the canonical
3941    types of the dependent types created during
3942    cp_parser_template_parameter_list.  */
3943
3944 void
3945 fixup_template_parms (void)
3946 {
3947   tree arglist;
3948   tree parameter_vec;
3949   tree fixedup_args;
3950   int i, num_parms;
3951
3952   parameter_vec = INNERMOST_TEMPLATE_PARMS (current_template_parms);
3953   if (parameter_vec == NULL_TREE)
3954     return;
3955
3956   num_parms = TREE_VEC_LENGTH (parameter_vec);
3957
3958   /* This vector contains the current innermost template parms that
3959      have been fixed up so far.  The form of FIXEDUP_ARGS is suitable
3960      to be passed to tsubst* functions as their ARGS argument.  */
3961   fixedup_args = make_tree_vec (num_parms);
3962
3963   /* This vector contains the full set of template parms in a form
3964      suitable to be passed to substs functions as their ARGS
3965      argument.  */
3966   arglist = current_template_args ();
3967   arglist = add_outermost_template_args (arglist, fixedup_args);
3968
3969   /* Let's do the proper fixup now.  */
3970   for (i = 0; i < num_parms; ++i)
3971     fixup_template_parm (TREE_VEC_ELT (parameter_vec, i),
3972                          i, num_parms, arglist);
3973 }
3974
3975 /* end_template_decl is called after a template declaration is seen.  */
3976
3977 void
3978 end_template_decl (void)
3979 {
3980   reset_specialization ();
3981
3982   if (! processing_template_decl)
3983     return;
3984
3985   /* This matches the pushlevel in begin_template_parm_list.  */
3986   finish_scope ();
3987
3988   --processing_template_decl;
3989   current_template_parms = TREE_CHAIN (current_template_parms);
3990 }
3991
3992 /* Takes a TREE_LIST representing a template parameter and convert it
3993    into an argument suitable to be passed to the type substitution
3994    functions.  Note that If the TREE_LIST contains an error_mark
3995    node, the returned argument is error_mark_node.  */
3996
3997 static tree
3998 template_parm_to_arg (tree t)
3999 {
4000
4001   if (t == NULL_TREE
4002       || TREE_CODE (t) != TREE_LIST)
4003     return t;
4004
4005   if (error_operand_p (TREE_VALUE (t)))
4006     return error_mark_node;
4007
4008   t = TREE_VALUE (t);
4009
4010   if (TREE_CODE (t) == TYPE_DECL
4011       || TREE_CODE (t) == TEMPLATE_DECL)
4012     {
4013       t = TREE_TYPE (t);
4014
4015       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
4016         {
4017           /* Turn this argument into a TYPE_ARGUMENT_PACK
4018              with a single element, which expands T.  */
4019           tree vec = make_tree_vec (1);
4020 #ifdef ENABLE_CHECKING
4021           SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT
4022             (vec, TREE_VEC_LENGTH (vec));
4023 #endif
4024           TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
4025
4026           t = cxx_make_type (TYPE_ARGUMENT_PACK);
4027           SET_ARGUMENT_PACK_ARGS (t, vec);
4028         }
4029     }
4030   else
4031     {
4032       t = DECL_INITIAL (t);
4033
4034       if (TEMPLATE_PARM_PARAMETER_PACK (t))
4035         {
4036           /* Turn this argument into a NONTYPE_ARGUMENT_PACK
4037              with a single element, which expands T.  */
4038           tree vec = make_tree_vec (1);
4039           tree type = TREE_TYPE (TEMPLATE_PARM_DECL (t));
4040 #ifdef ENABLE_CHECKING
4041           SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT
4042             (vec, TREE_VEC_LENGTH (vec));
4043 #endif
4044           TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
4045
4046           t  = make_node (NONTYPE_ARGUMENT_PACK);
4047           SET_ARGUMENT_PACK_ARGS (t, vec);
4048           TREE_TYPE (t) = type;
4049         }
4050     }
4051   return t;
4052 }
4053
4054 /* This function returns TRUE if PARM_PACK is a template parameter
4055    pack and if ARG_PACK is what template_parm_to_arg returned when
4056    passed PARM_PACK.  */
4057
4058 static bool
4059 arg_from_parm_pack_p (tree arg_pack, tree parm_pack)
4060 {
4061   /* For clarity in the comments below let's use the representation
4062      argument_pack<elements>' to denote an argument pack and its
4063      elements.
4064
4065      In the 'if' block below, we want to detect cases where
4066      ARG_PACK is argument_pack<PARM_PACK...>.  I.e, we want to
4067      check if ARG_PACK is an argument pack which sole element is
4068      the expansion of PARM_PACK.  That argument pack is typically
4069      created by template_parm_to_arg when passed a parameter
4070      pack.  */
4071
4072   if (arg_pack
4073       && TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack)) == 1
4074       && PACK_EXPANSION_P (TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0)))
4075     {
4076       tree expansion = TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0);
4077       tree pattern = PACK_EXPANSION_PATTERN (expansion);
4078       /* So we have an argument_pack<P...>.  We want to test if P
4079          is actually PARM_PACK.  We will not use cp_tree_equal to
4080          test P and PARM_PACK because during type fixup (by
4081          fixup_template_parm) P can be a pre-fixup version of a
4082          type and PARM_PACK be its post-fixup version.
4083          cp_tree_equal would consider them as different even
4084          though we would want to consider them compatible for our
4085          precise purpose here.
4086
4087          Thus we are going to consider that P and PARM_PACK are
4088          compatible if they have the same DECL.  */
4089       if ((/* If ARG_PACK is a type parameter pack named by the
4090               same DECL as parm_pack ...  */
4091            (TYPE_P (pattern)
4092             && TYPE_P (parm_pack)
4093             && TYPE_NAME (pattern) == TYPE_NAME (parm_pack))
4094            /* ... or if PARM_PACK is a non-type parameter named by the
4095               same DECL as ARG_PACK.  Note that PARM_PACK being a
4096               non-type parameter means it's either a PARM_DECL or a
4097               TEMPLATE_PARM_INDEX.  */
4098            || (TREE_CODE (pattern) == TEMPLATE_PARM_INDEX
4099                && ((TREE_CODE (parm_pack) == PARM_DECL
4100                     && (TEMPLATE_PARM_DECL (pattern)
4101                         == TEMPLATE_PARM_DECL (DECL_INITIAL (parm_pack))))
4102                    || (TREE_CODE (parm_pack) == TEMPLATE_PARM_INDEX
4103                        && (TEMPLATE_PARM_DECL (pattern)
4104                            == TEMPLATE_PARM_DECL (parm_pack))))))
4105           && template_parameter_pack_p (pattern))
4106         return true;
4107     }
4108   return false;
4109 }
4110
4111 /* Within the declaration of a template, return all levels of template
4112    parameters that apply.  The template parameters are represented as
4113    a TREE_VEC, in the form documented in cp-tree.h for template
4114    arguments.  */
4115
4116 static tree
4117 current_template_args (void)
4118 {
4119   tree header;
4120   tree args = NULL_TREE;
4121   int length = TMPL_PARMS_DEPTH (current_template_parms);
4122   int l = length;
4123
4124   /* If there is only one level of template parameters, we do not
4125      create a TREE_VEC of TREE_VECs.  Instead, we return a single
4126      TREE_VEC containing the arguments.  */
4127   if (length > 1)
4128     args = make_tree_vec (length);
4129
4130   for (header = current_template_parms; header; header = TREE_CHAIN (header))
4131     {
4132       tree a = copy_node (TREE_VALUE (header));
4133       int i;
4134
4135       TREE_TYPE (a) = NULL_TREE;
4136       for (i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
4137         TREE_VEC_ELT (a, i) = template_parm_to_arg (TREE_VEC_ELT (a, i));
4138
4139 #ifdef ENABLE_CHECKING
4140       SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (a, TREE_VEC_LENGTH (a));
4141 #endif
4142
4143       if (length > 1)
4144         TREE_VEC_ELT (args, --l) = a;
4145       else
4146         args = a;
4147     }
4148
4149     if (length > 1 && TREE_VEC_ELT (args, 0) == NULL_TREE)
4150       /* This can happen for template parms of a template template
4151          parameter, e.g:
4152
4153          template<template<class T, class U> class TT> struct S;
4154
4155          Consider the level of the parms of TT; T and U both have
4156          level 2; TT has no template parm of level 1. So in this case
4157          the first element of full_template_args is NULL_TREE. If we
4158          leave it like this TMPL_ARG_DEPTH on args returns 1 instead
4159          of 2. This will make tsubst wrongly consider that T and U
4160          have level 1. Instead, let's create a dummy vector as the
4161          first element of full_template_args so that TMPL_ARG_DEPTH
4162          returns the correct depth for args.  */
4163       TREE_VEC_ELT (args, 0) = make_tree_vec (1);
4164   return args;
4165 }
4166
4167 /* Update the declared TYPE by doing any lookups which were thought to be
4168    dependent, but are not now that we know the SCOPE of the declarator.  */
4169
4170 tree
4171 maybe_update_decl_type (tree orig_type, tree scope)
4172 {
4173   tree type = orig_type;
4174
4175   if (type == NULL_TREE)
4176     return type;
4177
4178   if (TREE_CODE (orig_type) == TYPE_DECL)
4179     type = TREE_TYPE (type);
4180
4181   if (scope && TYPE_P (scope) && dependent_type_p (scope)
4182       && dependent_type_p (type)
4183       /* Don't bother building up the args in this case.  */
4184       && TREE_CODE (type) != TEMPLATE_TYPE_PARM)
4185     {
4186       /* tsubst in the args corresponding to the template parameters,
4187          including auto if present.  Most things will be unchanged, but
4188          make_typename_type and tsubst_qualified_id will resolve
4189          TYPENAME_TYPEs and SCOPE_REFs that were previously dependent.  */
4190       tree args = current_template_args ();
4191       tree auto_node = type_uses_auto (type);
4192       tree pushed;
4193       if (auto_node)
4194         {
4195           tree auto_vec = make_tree_vec (1);
4196           TREE_VEC_ELT (auto_vec, 0) = auto_node;
4197           args = add_to_template_args (args, auto_vec);
4198         }
4199       pushed = push_scope (scope);
4200       type = tsubst (type, args, tf_warning_or_error, NULL_TREE);
4201       if (pushed)
4202         pop_scope (scope);
4203     }
4204
4205   if (type == error_mark_node)
4206     return orig_type;
4207
4208   if (TREE_CODE (orig_type) == TYPE_DECL)
4209     {
4210       if (same_type_p (type, TREE_TYPE (orig_type)))
4211         type = orig_type;
4212       else
4213         type = TYPE_NAME (type);
4214     }
4215   return type;
4216 }
4217
4218 /* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
4219    template PARMS.  If MEMBER_TEMPLATE_P is true, the new template is
4220    a member template.  Used by push_template_decl below.  */
4221
4222 static tree
4223 build_template_decl (tree decl, tree parms, bool member_template_p)
4224 {
4225   tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
4226   DECL_TEMPLATE_PARMS (tmpl) = parms;
4227   DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
4228   DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
4229   DECL_MEMBER_TEMPLATE_P (tmpl) = member_template_p;
4230
4231   return tmpl;
4232 }
4233
4234 struct template_parm_data
4235 {
4236   /* The level of the template parameters we are currently
4237      processing.  */
4238   int level;
4239
4240   /* The index of the specialization argument we are currently
4241      processing.  */
4242   int current_arg;
4243
4244   /* An array whose size is the number of template parameters.  The
4245      elements are nonzero if the parameter has been used in any one
4246      of the arguments processed so far.  */
4247   int* parms;
4248
4249   /* An array whose size is the number of template arguments.  The
4250      elements are nonzero if the argument makes use of template
4251      parameters of this level.  */
4252   int* arg_uses_template_parms;
4253 };
4254
4255 /* Subroutine of push_template_decl used to see if each template
4256    parameter in a partial specialization is used in the explicit
4257    argument list.  If T is of the LEVEL given in DATA (which is
4258    treated as a template_parm_data*), then DATA->PARMS is marked
4259    appropriately.  */
4260
4261 static int
4262 mark_template_parm (tree t, void* data)
4263 {
4264   int level;
4265   int idx;
4266   struct template_parm_data* tpd = (struct template_parm_data*) data;
4267
4268   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
4269     {
4270       level = TEMPLATE_PARM_LEVEL (t);
4271       idx = TEMPLATE_PARM_IDX (t);
4272     }
4273   else
4274     {
4275       level = TEMPLATE_TYPE_LEVEL (t);
4276       idx = TEMPLATE_TYPE_IDX (t);
4277     }
4278
4279   if (level == tpd->level)
4280     {
4281       tpd->parms[idx] = 1;
4282       tpd->arg_uses_template_parms[tpd->current_arg] = 1;
4283     }
4284
4285   /* Return zero so that for_each_template_parm will continue the
4286      traversal of the tree; we want to mark *every* template parm.  */
4287   return 0;
4288 }
4289
4290 /* Process the partial specialization DECL.  */
4291
4292 static tree
4293 process_partial_specialization (tree decl)
4294 {
4295   tree type = TREE_TYPE (decl);
4296   tree maintmpl = CLASSTYPE_TI_TEMPLATE (type);
4297   tree specargs = CLASSTYPE_TI_ARGS (type);
4298   tree inner_args = INNERMOST_TEMPLATE_ARGS (specargs);
4299   tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
4300   tree inner_parms;
4301   tree inst;
4302   int nargs = TREE_VEC_LENGTH (inner_args);
4303   int ntparms;
4304   int  i;
4305   bool did_error_intro = false;
4306   struct template_parm_data tpd;
4307   struct template_parm_data tpd2;
4308
4309   gcc_assert (current_template_parms);
4310
4311   inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
4312   ntparms = TREE_VEC_LENGTH (inner_parms);
4313
4314   /* We check that each of the template parameters given in the
4315      partial specialization is used in the argument list to the
4316      specialization.  For example:
4317
4318        template <class T> struct S;
4319        template <class T> struct S<T*>;
4320
4321      The second declaration is OK because `T*' uses the template
4322      parameter T, whereas
4323
4324        template <class T> struct S<int>;
4325
4326      is no good.  Even trickier is:
4327
4328        template <class T>
4329        struct S1
4330        {
4331           template <class U>
4332           struct S2;
4333           template <class U>
4334           struct S2<T>;
4335        };
4336
4337      The S2<T> declaration is actually invalid; it is a
4338      full-specialization.  Of course,
4339
4340           template <class U>
4341           struct S2<T (*)(U)>;
4342
4343      or some such would have been OK.  */
4344   tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
4345   tpd.parms = XALLOCAVEC (int, ntparms);
4346   memset (tpd.parms, 0, sizeof (int) * ntparms);
4347
4348   tpd.arg_uses_template_parms = XALLOCAVEC (int, nargs);
4349   memset (tpd.arg_uses_template_parms, 0, sizeof (int) * nargs);
4350   for (i = 0; i < nargs; ++i)
4351     {
4352       tpd.current_arg = i;
4353       for_each_template_parm (TREE_VEC_ELT (inner_args, i),
4354                               &mark_template_parm,
4355                               &tpd,
4356                               NULL,
4357                               /*include_nondeduced_p=*/false);
4358     }
4359   for (i = 0; i < ntparms; ++i)
4360     if (tpd.parms[i] == 0)
4361       {
4362         /* One of the template parms was not used in the
4363            specialization.  */
4364         if (!did_error_intro)
4365           {
4366             error ("template parameters not used in partial specialization:");
4367             did_error_intro = true;
4368           }
4369
4370         error ("        %qD", TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
4371       }
4372
4373   if (did_error_intro)
4374     return error_mark_node;
4375
4376   /* [temp.class.spec]
4377
4378      The argument list of the specialization shall not be identical to
4379      the implicit argument list of the primary template.  */
4380   if (comp_template_args
4381       (inner_args,
4382        INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE
4383                                                    (maintmpl)))))
4384     error ("partial specialization %qT does not specialize any template arguments", type);
4385
4386   /* [temp.class.spec]
4387
4388      A partially specialized non-type argument expression shall not
4389      involve template parameters of the partial specialization except
4390      when the argument expression is a simple identifier.
4391
4392      The type of a template parameter corresponding to a specialized
4393      non-type argument shall not be dependent on a parameter of the
4394      specialization. 
4395
4396      Also, we verify that pack expansions only occur at the
4397      end of the argument list.  */
4398   gcc_assert (nargs == DECL_NTPARMS (maintmpl));
4399   tpd2.parms = 0;
4400   for (i = 0; i < nargs; ++i)
4401     {
4402       tree parm = TREE_VALUE (TREE_VEC_ELT (main_inner_parms, i));
4403       tree arg = TREE_VEC_ELT (inner_args, i);
4404       tree packed_args = NULL_TREE;
4405       int j, len = 1;
4406
4407       if (ARGUMENT_PACK_P (arg))
4408         {
4409           /* Extract the arguments from the argument pack. We'll be
4410              iterating over these in the following loop.  */
4411           packed_args = ARGUMENT_PACK_ARGS (arg);
4412           len = TREE_VEC_LENGTH (packed_args);
4413         }
4414
4415       for (j = 0; j < len; j++)
4416         {
4417           if (packed_args)
4418             /* Get the Jth argument in the parameter pack.  */
4419             arg = TREE_VEC_ELT (packed_args, j);
4420
4421           if (PACK_EXPANSION_P (arg))
4422             {
4423               /* Pack expansions must come at the end of the
4424                  argument list.  */
4425               if ((packed_args && j < len - 1)
4426                   || (!packed_args && i < nargs - 1))
4427                 {
4428                   if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
4429                     error ("parameter pack argument %qE must be at the "
4430                            "end of the template argument list", arg);
4431                   else
4432                     error ("parameter pack argument %qT must be at the "
4433                            "end of the template argument list", arg);
4434                 }
4435             }
4436
4437           if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
4438             /* We only care about the pattern.  */
4439             arg = PACK_EXPANSION_PATTERN (arg);
4440
4441           if (/* These first two lines are the `non-type' bit.  */
4442               !TYPE_P (arg)
4443               && TREE_CODE (arg) != TEMPLATE_DECL
4444               /* This next line is the `argument expression is not just a
4445                  simple identifier' condition and also the `specialized
4446                  non-type argument' bit.  */
4447               && TREE_CODE (arg) != TEMPLATE_PARM_INDEX)
4448             {
4449               if ((!packed_args && tpd.arg_uses_template_parms[i])
4450                   || (packed_args && uses_template_parms (arg)))
4451                 error ("template argument %qE involves template parameter(s)",
4452                        arg);
4453               else 
4454                 {
4455                   /* Look at the corresponding template parameter,
4456                      marking which template parameters its type depends
4457                      upon.  */
4458                   tree type = TREE_TYPE (parm);
4459
4460                   if (!tpd2.parms)
4461                     {
4462                       /* We haven't yet initialized TPD2.  Do so now.  */
4463                       tpd2.arg_uses_template_parms = XALLOCAVEC (int, nargs);
4464                       /* The number of parameters here is the number in the
4465                          main template, which, as checked in the assertion
4466                          above, is NARGS.  */
4467                       tpd2.parms = XALLOCAVEC (int, nargs);
4468                       tpd2.level = 
4469                         TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
4470                     }
4471
4472                   /* Mark the template parameters.  But this time, we're
4473                      looking for the template parameters of the main
4474                      template, not in the specialization.  */
4475                   tpd2.current_arg = i;
4476                   tpd2.arg_uses_template_parms[i] = 0;
4477                   memset (tpd2.parms, 0, sizeof (int) * nargs);
4478                   for_each_template_parm (type,
4479                                           &mark_template_parm,
4480                                           &tpd2,
4481                                           NULL,
4482                                           /*include_nondeduced_p=*/false);
4483
4484                   if (tpd2.arg_uses_template_parms [i])
4485                     {
4486                       /* The type depended on some template parameters.
4487                          If they are fully specialized in the
4488                          specialization, that's OK.  */
4489                       int j;
4490                       int count = 0;
4491                       for (j = 0; j < nargs; ++j)
4492                         if (tpd2.parms[j] != 0
4493                             && tpd.arg_uses_template_parms [j])
4494                           ++count;
4495                       if (count != 0)
4496                         error_n (input_location, count,
4497                                  "type %qT of template argument %qE depends "
4498                                  "on a template parameter",
4499                                  "type %qT of template argument %qE depends "
4500                                  "on template parameters",
4501                                  type,
4502                                  arg);
4503                     }
4504                 }
4505             }
4506         }
4507     }
4508
4509   /* We should only get here once.  */
4510   gcc_assert (!COMPLETE_TYPE_P (type));
4511
4512   DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
4513     = tree_cons (specargs, inner_parms,
4514                  DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
4515   TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
4516
4517   for (inst = DECL_TEMPLATE_INSTANTIATIONS (maintmpl); inst;
4518        inst = TREE_CHAIN (inst))
4519     {
4520       tree inst_type = TREE_VALUE (inst);
4521       if (COMPLETE_TYPE_P (inst_type)
4522           && CLASSTYPE_IMPLICIT_INSTANTIATION (inst_type))
4523         {
4524           tree spec = most_specialized_class (inst_type, maintmpl, tf_none);
4525           if (spec && TREE_TYPE (spec) == type)
4526             permerror (input_location,
4527                        "partial specialization of %qT after instantiation "
4528                        "of %qT", type, inst_type);
4529         }
4530     }
4531
4532   return decl;
4533 }
4534
4535 /* Check that a template declaration's use of default arguments and
4536    parameter packs is not invalid.  Here, PARMS are the template
4537    parameters.  IS_PRIMARY is nonzero if DECL is the thing declared by
4538    a primary template.  IS_PARTIAL is nonzero if DECL is a partial
4539    specialization.
4540    
4541
4542    IS_FRIEND_DECL is nonzero if DECL is a friend function template
4543    declaration (but not a definition); 1 indicates a declaration, 2
4544    indicates a redeclaration. When IS_FRIEND_DECL=2, no errors are
4545    emitted for extraneous default arguments.
4546
4547    Returns TRUE if there were no errors found, FALSE otherwise. */
4548
4549 bool
4550 check_default_tmpl_args (tree decl, tree parms, int is_primary, 
4551                          int is_partial, int is_friend_decl)
4552 {
4553   const char *msg;
4554   int last_level_to_check;
4555   tree parm_level;
4556   bool no_errors = true;
4557
4558   /* [temp.param]
4559
4560      A default template-argument shall not be specified in a
4561      function template declaration or a function template definition, nor
4562      in the template-parameter-list of the definition of a member of a
4563      class template.  */
4564
4565   if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
4566     /* You can't have a function template declaration in a local
4567        scope, nor you can you define a member of a class template in a
4568        local scope.  */
4569     return true;
4570
4571   if (current_class_type
4572       && !TYPE_BEING_DEFINED (current_class_type)
4573       && DECL_LANG_SPECIFIC (decl)
4574       && DECL_DECLARES_FUNCTION_P (decl)
4575       /* If this is either a friend defined in the scope of the class
4576          or a member function.  */
4577       && (DECL_FUNCTION_MEMBER_P (decl)
4578           ? same_type_p (DECL_CONTEXT (decl), current_class_type)
4579           : DECL_FRIEND_CONTEXT (decl)
4580           ? same_type_p (DECL_FRIEND_CONTEXT (decl), current_class_type)
4581           : false)
4582       /* And, if it was a member function, it really was defined in
4583          the scope of the class.  */
4584       && (!DECL_FUNCTION_MEMBER_P (decl)
4585           || DECL_INITIALIZED_IN_CLASS_P (decl)))
4586     /* We already checked these parameters when the template was
4587        declared, so there's no need to do it again now.  This function
4588        was defined in class scope, but we're processing it's body now
4589        that the class is complete.  */
4590     return true;
4591
4592   /* Core issue 226 (C++0x only): the following only applies to class
4593      templates.  */
4594   if ((cxx_dialect == cxx98) || TREE_CODE (decl) != FUNCTION_DECL)
4595     {
4596       /* [temp.param]
4597
4598          If a template-parameter has a default template-argument, all
4599          subsequent template-parameters shall have a default
4600          template-argument supplied.  */
4601       for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
4602         {
4603           tree inner_parms = TREE_VALUE (parm_level);
4604           int ntparms = TREE_VEC_LENGTH (inner_parms);
4605           int seen_def_arg_p = 0;
4606           int i;
4607
4608           for (i = 0; i < ntparms; ++i)
4609             {
4610               tree parm = TREE_VEC_ELT (inner_parms, i);
4611
4612               if (parm == error_mark_node)
4613                 continue;
4614
4615               if (TREE_PURPOSE (parm))
4616                 seen_def_arg_p = 1;
4617               else if (seen_def_arg_p
4618                        && !template_parameter_pack_p (TREE_VALUE (parm)))
4619                 {
4620                   error ("no default argument for %qD", TREE_VALUE (parm));
4621                   /* For better subsequent error-recovery, we indicate that
4622                      there should have been a default argument.  */
4623                   TREE_PURPOSE (parm) = error_mark_node;
4624                   no_errors = false;
4625                 }
4626               else if (is_primary
4627                        && !is_partial
4628                        && !is_friend_decl
4629                        /* Don't complain about an enclosing partial
4630                           specialization.  */
4631                        && parm_level == parms
4632                        && TREE_CODE (decl) == TYPE_DECL
4633                        && i < ntparms - 1
4634                        && template_parameter_pack_p (TREE_VALUE (parm)))
4635                 {
4636                   /* A primary class template can only have one
4637                      parameter pack, at the end of the template
4638                      parameter list.  */
4639
4640                   if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL)
4641                     error ("parameter pack %qE must be at the end of the"
4642                            " template parameter list", TREE_VALUE (parm));
4643                   else
4644                     error ("parameter pack %qT must be at the end of the"
4645                            " template parameter list", 
4646                            TREE_TYPE (TREE_VALUE (parm)));
4647
4648                   TREE_VALUE (TREE_VEC_ELT (inner_parms, i)) 
4649                     = error_mark_node;
4650                   no_errors = false;
4651                 }
4652             }
4653         }
4654     }
4655
4656   if (((cxx_dialect == cxx98) && TREE_CODE (decl) != TYPE_DECL)
4657       || is_partial 
4658       || !is_primary
4659       || is_friend_decl)
4660     /* For an ordinary class template, default template arguments are
4661        allowed at the innermost level, e.g.:
4662          template <class T = int>
4663          struct S {};
4664        but, in a partial specialization, they're not allowed even
4665        there, as we have in [temp.class.spec]:
4666
4667          The template parameter list of a specialization shall not
4668          contain default template argument values.
4669
4670        So, for a partial specialization, or for a function template
4671        (in C++98/C++03), we look at all of them.  */
4672     ;
4673   else
4674     /* But, for a primary class template that is not a partial
4675        specialization we look at all template parameters except the
4676        innermost ones.  */
4677     parms = TREE_CHAIN (parms);
4678
4679   /* Figure out what error message to issue.  */
4680   if (is_friend_decl == 2)
4681     msg = G_("default template arguments may not be used in function template "
4682              "friend re-declaration");
4683   else if (is_friend_decl)
4684     msg = G_("default template arguments may not be used in function template "
4685              "friend declarations");
4686   else if (TREE_CODE (decl) == FUNCTION_DECL && (cxx_dialect == cxx98))
4687     msg = G_("default template arguments may not be used in function templates "
4688              "without -std=c++11 or -std=gnu++11");
4689   else if (is_partial)
4690     msg = G_("default template arguments may not be used in "
4691              "partial specializations");
4692   else
4693     msg = G_("default argument for template parameter for class enclosing %qD");
4694
4695   if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
4696     /* If we're inside a class definition, there's no need to
4697        examine the parameters to the class itself.  On the one
4698        hand, they will be checked when the class is defined, and,
4699        on the other, default arguments are valid in things like:
4700          template <class T = double>
4701          struct S { template <class U> void f(U); };
4702        Here the default argument for `S' has no bearing on the
4703        declaration of `f'.  */
4704     last_level_to_check = template_class_depth (current_class_type) + 1;
4705   else
4706     /* Check everything.  */
4707     last_level_to_check = 0;
4708
4709   for (parm_level = parms;
4710        parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check;
4711        parm_level = TREE_CHAIN (parm_level))
4712     {
4713       tree inner_parms = TREE_VALUE (parm_level);
4714       int i;
4715       int ntparms;
4716
4717       ntparms = TREE_VEC_LENGTH (inner_parms);
4718       for (i = 0; i < ntparms; ++i)
4719         {
4720           if (TREE_VEC_ELT (inner_parms, i) == error_mark_node)
4721             continue;
4722
4723           if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
4724             {
4725               if (msg)
4726                 {
4727                   no_errors = false;
4728                   if (is_friend_decl == 2)
4729                     return no_errors;
4730
4731                   error (msg, decl);
4732                   msg = 0;
4733                 }
4734
4735               /* Clear out the default argument so that we are not
4736                  confused later.  */
4737               TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
4738             }
4739         }
4740
4741       /* At this point, if we're still interested in issuing messages,
4742          they must apply to classes surrounding the object declared.  */
4743       if (msg)
4744         msg = G_("default argument for template parameter for class "
4745                  "enclosing %qD");
4746     }
4747
4748   return no_errors;
4749 }
4750
4751 /* Worker for push_template_decl_real, called via
4752    for_each_template_parm.  DATA is really an int, indicating the
4753    level of the parameters we are interested in.  If T is a template
4754    parameter of that level, return nonzero.  */
4755
4756 static int
4757 template_parm_this_level_p (tree t, void* data)
4758 {
4759   int this_level = *(int *)data;
4760   int level;
4761
4762   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
4763     level = TEMPLATE_PARM_LEVEL (t);
4764   else
4765     level = TEMPLATE_TYPE_LEVEL (t);
4766   return level == this_level;
4767 }
4768
4769 /* Creates a TEMPLATE_DECL for the indicated DECL using the template
4770    parameters given by current_template_args, or reuses a
4771    previously existing one, if appropriate.  Returns the DECL, or an
4772    equivalent one, if it is replaced via a call to duplicate_decls.
4773
4774    If IS_FRIEND is true, DECL is a friend declaration.  */
4775
4776 tree
4777 push_template_decl_real (tree decl, bool is_friend)
4778 {
4779   tree tmpl;
4780   tree args;
4781   tree info;
4782   tree ctx;
4783   int primary;
4784   int is_partial;
4785   int new_template_p = 0;
4786   /* True if the template is a member template, in the sense of
4787      [temp.mem].  */
4788   bool member_template_p = false;
4789
4790   if (decl == error_mark_node || !current_template_parms)
4791     return error_mark_node;
4792
4793   /* See if this is a partial specialization.  */
4794   is_partial = (DECL_IMPLICIT_TYPEDEF_P (decl)
4795                 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
4796                 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)));
4797
4798   if (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl))
4799     is_friend = true;
4800
4801   if (is_friend)
4802     /* For a friend, we want the context of the friend function, not
4803        the type of which it is a friend.  */
4804     ctx = CP_DECL_CONTEXT (decl);
4805   else if (CP_DECL_CONTEXT (decl)
4806            && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
4807     /* In the case of a virtual function, we want the class in which
4808        it is defined.  */
4809     ctx = CP_DECL_CONTEXT (decl);
4810   else
4811     /* Otherwise, if we're currently defining some class, the DECL
4812        is assumed to be a member of the class.  */
4813     ctx = current_scope ();
4814
4815   if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
4816     ctx = NULL_TREE;
4817
4818   if (!DECL_CONTEXT (decl))
4819     DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
4820
4821   /* See if this is a primary template.  */
4822   if (is_friend && ctx)
4823     /* A friend template that specifies a class context, i.e.
4824          template <typename T> friend void A<T>::f();
4825        is not primary.  */
4826     primary = 0;
4827   else
4828     primary = template_parm_scope_p ();
4829
4830   if (primary)
4831     {
4832       if (DECL_CLASS_SCOPE_P (decl))
4833         member_template_p = true;
4834       if (TREE_CODE (decl) == TYPE_DECL
4835           && ANON_AGGRNAME_P (DECL_NAME (decl)))
4836         {
4837           error ("template class without a name");
4838           return error_mark_node;
4839         }
4840       else if (TREE_CODE (decl) == FUNCTION_DECL)
4841         {
4842           if (DECL_DESTRUCTOR_P (decl))
4843             {
4844               /* [temp.mem]
4845
4846                  A destructor shall not be a member template.  */
4847               error ("destructor %qD declared as member template", decl);
4848               return error_mark_node;
4849             }
4850           if (NEW_DELETE_OPNAME_P (DECL_NAME (decl))
4851               && (!prototype_p (TREE_TYPE (decl))
4852                   || TYPE_ARG_TYPES (TREE_TYPE (decl)) == void_list_node
4853                   || !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
4854                   || (TREE_CHAIN (TYPE_ARG_TYPES ((TREE_TYPE (decl))))
4855                       == void_list_node)))
4856             {
4857               /* [basic.stc.dynamic.allocation]
4858
4859                  An allocation function can be a function
4860                  template. ... Template allocation functions shall
4861                  have two or more parameters.  */
4862               error ("invalid template declaration of %qD", decl);
4863               return error_mark_node;
4864             }
4865         }
4866       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
4867                && CLASS_TYPE_P (TREE_TYPE (decl)))
4868         /* OK */;
4869       else if (TREE_CODE (decl) == TYPE_DECL
4870                && TYPE_DECL_ALIAS_P (decl))
4871         /* alias-declaration */
4872         gcc_assert (!DECL_ARTIFICIAL (decl));
4873       else
4874         {
4875           error ("template declaration of %q#D", decl);
4876           return error_mark_node;
4877         }
4878     }
4879
4880   /* Check to see that the rules regarding the use of default
4881      arguments are not being violated.  */
4882   check_default_tmpl_args (decl, current_template_parms,
4883                            primary, is_partial, /*is_friend_decl=*/0);
4884
4885   /* Ensure that there are no parameter packs in the type of this
4886      declaration that have not been expanded.  */
4887   if (TREE_CODE (decl) == FUNCTION_DECL)
4888     {
4889       /* Check each of the arguments individually to see if there are
4890          any bare parameter packs.  */
4891       tree type = TREE_TYPE (decl);
4892       tree arg = DECL_ARGUMENTS (decl);
4893       tree argtype = TYPE_ARG_TYPES (type);
4894
4895       while (arg && argtype)
4896         {
4897           if (!FUNCTION_PARAMETER_PACK_P (arg)
4898               && check_for_bare_parameter_packs (TREE_TYPE (arg)))
4899             {
4900             /* This is a PARM_DECL that contains unexpanded parameter
4901                packs. We have already complained about this in the
4902                check_for_bare_parameter_packs call, so just replace
4903                these types with ERROR_MARK_NODE.  */
4904               TREE_TYPE (arg) = error_mark_node;
4905               TREE_VALUE (argtype) = error_mark_node;
4906             }
4907
4908           arg = DECL_CHAIN (arg);
4909           argtype = TREE_CHAIN (argtype);
4910         }
4911
4912       /* Check for bare parameter packs in the return type and the
4913          exception specifiers.  */
4914       if (check_for_bare_parameter_packs (TREE_TYPE (type)))
4915         /* Errors were already issued, set return type to int
4916            as the frontend doesn't expect error_mark_node as
4917            the return type.  */
4918         TREE_TYPE (type) = integer_type_node;
4919       if (check_for_bare_parameter_packs (TYPE_RAISES_EXCEPTIONS (type)))
4920         TYPE_RAISES_EXCEPTIONS (type) = NULL_TREE;
4921     }
4922   else if (check_for_bare_parameter_packs ((TREE_CODE (decl) == TYPE_DECL
4923                                             && TYPE_DECL_ALIAS_P (decl))
4924                                            ? DECL_ORIGINAL_TYPE (decl)
4925                                            : TREE_TYPE (decl)))
4926     {
4927       TREE_TYPE (decl) = error_mark_node;
4928       return error_mark_node;
4929     }
4930
4931   if (is_partial)
4932     return process_partial_specialization (decl);
4933
4934   args = current_template_args ();
4935
4936   if (!ctx
4937       || TREE_CODE (ctx) == FUNCTION_DECL
4938       || (CLASS_TYPE_P (ctx) && TYPE_BEING_DEFINED (ctx))
4939       || (is_friend && !DECL_TEMPLATE_INFO (decl)))
4940     {
4941       if (DECL_LANG_SPECIFIC (decl)
4942           && DECL_TEMPLATE_INFO (decl)
4943           && DECL_TI_TEMPLATE (decl))
4944         tmpl = DECL_TI_TEMPLATE (decl);
4945       /* If DECL is a TYPE_DECL for a class-template, then there won't
4946          be DECL_LANG_SPECIFIC.  The information equivalent to
4947          DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead.  */
4948       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
4949                && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
4950                && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
4951         {
4952           /* Since a template declaration already existed for this
4953              class-type, we must be redeclaring it here.  Make sure
4954              that the redeclaration is valid.  */
4955           redeclare_class_template (TREE_TYPE (decl),
4956                                     current_template_parms);
4957           /* We don't need to create a new TEMPLATE_DECL; just use the
4958              one we already had.  */
4959           tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
4960         }
4961       else
4962         {
4963           tmpl = build_template_decl (decl, current_template_parms,
4964                                       member_template_p);
4965           new_template_p = 1;
4966
4967           if (DECL_LANG_SPECIFIC (decl)
4968               && DECL_TEMPLATE_SPECIALIZATION (decl))
4969             {
4970               /* A specialization of a member template of a template
4971                  class.  */
4972               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
4973               DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
4974               DECL_TEMPLATE_INFO (decl) = NULL_TREE;
4975             }
4976         }
4977     }
4978   else
4979     {
4980       tree a, t, current, parms;
4981       int i;
4982       tree tinfo = get_template_info (decl);
4983
4984       if (!tinfo)
4985         {
4986           error ("template definition of non-template %q#D", decl);
4987           return error_mark_node;
4988         }
4989
4990       tmpl = TI_TEMPLATE (tinfo);
4991
4992       if (DECL_FUNCTION_TEMPLATE_P (tmpl)
4993           && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
4994           && DECL_TEMPLATE_SPECIALIZATION (decl)
4995           && DECL_MEMBER_TEMPLATE_P (tmpl))
4996         {
4997           tree new_tmpl;
4998
4999           /* The declaration is a specialization of a member
5000              template, declared outside the class.  Therefore, the
5001              innermost template arguments will be NULL, so we
5002              replace them with the arguments determined by the
5003              earlier call to check_explicit_specialization.  */
5004           args = DECL_TI_ARGS (decl);
5005
5006           new_tmpl
5007             = build_template_decl (decl, current_template_parms,
5008                                    member_template_p);
5009           DECL_TEMPLATE_RESULT (new_tmpl) = decl;
5010           TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
5011           DECL_TI_TEMPLATE (decl) = new_tmpl;
5012           SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
5013           DECL_TEMPLATE_INFO (new_tmpl)
5014             = build_template_info (tmpl, args);
5015
5016           register_specialization (new_tmpl,
5017                                    most_general_template (tmpl),
5018                                    args,
5019                                    is_friend, 0);
5020           return decl;
5021         }
5022
5023       /* Make sure the template headers we got make sense.  */
5024
5025       parms = DECL_TEMPLATE_PARMS (tmpl);
5026       i = TMPL_PARMS_DEPTH (parms);
5027       if (TMPL_ARGS_DEPTH (args) != i)
5028         {
5029           error ("expected %d levels of template parms for %q#D, got %d",
5030                  i, decl, TMPL_ARGS_DEPTH (args));
5031         }
5032       else
5033         for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
5034           {
5035             a = TMPL_ARGS_LEVEL (args, i);
5036             t = INNERMOST_TEMPLATE_PARMS (parms);
5037
5038             if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
5039               {
5040                 if (current == decl)
5041                   error ("got %d template parameters for %q#D",
5042                          TREE_VEC_LENGTH (a), decl);
5043                 else
5044                   error ("got %d template parameters for %q#T",
5045                          TREE_VEC_LENGTH (a), current);
5046                 error ("  but %d required", TREE_VEC_LENGTH (t));
5047                 return error_mark_node;
5048               }
5049
5050             if (current == decl)
5051               current = ctx;
5052             else if (current == NULL_TREE)
5053               /* Can happen in erroneous input.  */
5054               break;
5055             else
5056               current = (TYPE_P (current)
5057                          ? TYPE_CONTEXT (current)
5058                          : DECL_CONTEXT (current));
5059           }
5060
5061       /* Check that the parms are used in the appropriate qualifying scopes
5062          in the declarator.  */
5063       if (!comp_template_args
5064           (TI_ARGS (tinfo),
5065            TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (tmpl)))))
5066         {
5067           error ("\
5068 template arguments to %qD do not match original template %qD",
5069                  decl, DECL_TEMPLATE_RESULT (tmpl));
5070           if (!uses_template_parms (TI_ARGS (tinfo)))
5071             inform (input_location, "use template<> for an explicit specialization");
5072           /* Avoid crash in import_export_decl.  */
5073           DECL_INTERFACE_KNOWN (decl) = 1;
5074           return error_mark_node;
5075         }
5076     }
5077
5078   DECL_TEMPLATE_RESULT (tmpl) = decl;
5079   TREE_TYPE (tmpl) = TREE_TYPE (decl);
5080
5081   /* Push template declarations for global functions and types.  Note
5082      that we do not try to push a global template friend declared in a
5083      template class; such a thing may well depend on the template
5084      parameters of the class.  */
5085   if (new_template_p && !ctx
5086       && !(is_friend && template_class_depth (current_class_type) > 0))
5087     {
5088       tmpl = pushdecl_namespace_level (tmpl, is_friend);
5089       if (tmpl == error_mark_node)
5090         return error_mark_node;
5091
5092       /* Hide template friend classes that haven't been declared yet.  */
5093       if (is_friend && TREE_CODE (decl) == TYPE_DECL)
5094         {
5095           DECL_ANTICIPATED (tmpl) = 1;
5096           DECL_FRIEND_P (tmpl) = 1;
5097         }
5098     }
5099
5100   if (primary)
5101     {
5102       tree parms = DECL_TEMPLATE_PARMS (tmpl);
5103       int i;
5104
5105       DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
5106       if (DECL_CONV_FN_P (tmpl))
5107         {
5108           int depth = TMPL_PARMS_DEPTH (parms);
5109
5110           /* It is a conversion operator. See if the type converted to
5111              depends on innermost template operands.  */
5112
5113           if (uses_template_parms_level (TREE_TYPE (TREE_TYPE (tmpl)),
5114                                          depth))
5115             DECL_TEMPLATE_CONV_FN_P (tmpl) = 1;
5116         }
5117
5118       /* Give template template parms a DECL_CONTEXT of the template
5119          for which they are a parameter.  */
5120       parms = INNERMOST_TEMPLATE_PARMS (parms);
5121       for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
5122         {
5123           tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
5124           if (TREE_CODE (parm) == TEMPLATE_DECL)
5125             DECL_CONTEXT (parm) = tmpl;
5126         }
5127     }
5128
5129   /* The DECL_TI_ARGS of DECL contains full set of arguments referring
5130      back to its most general template.  If TMPL is a specialization,
5131      ARGS may only have the innermost set of arguments.  Add the missing
5132      argument levels if necessary.  */
5133   if (DECL_TEMPLATE_INFO (tmpl))
5134     args = add_outermost_template_args (DECL_TI_ARGS (tmpl), args);
5135
5136   info = build_template_info (tmpl, args);
5137
5138   if (DECL_IMPLICIT_TYPEDEF_P (decl))
5139     SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
5140   else
5141     {
5142       if (primary && !DECL_LANG_SPECIFIC (decl))
5143         retrofit_lang_decl (decl);
5144       if (DECL_LANG_SPECIFIC (decl))
5145         DECL_TEMPLATE_INFO (decl) = info;
5146     }
5147
5148   return DECL_TEMPLATE_RESULT (tmpl);
5149 }
5150
5151 tree
5152 push_template_decl (tree decl)
5153 {
5154   return push_template_decl_real (decl, false);
5155 }
5156
5157 /* Called when a class template TYPE is redeclared with the indicated
5158    template PARMS, e.g.:
5159
5160      template <class T> struct S;
5161      template <class T> struct S {};  */
5162
5163 bool
5164 redeclare_class_template (tree type, tree parms)
5165 {
5166   tree tmpl;
5167   tree tmpl_parms;
5168   int i;
5169
5170   if (!TYPE_TEMPLATE_INFO (type))
5171     {
5172       error ("%qT is not a template type", type);
5173       return false;
5174     }
5175
5176   tmpl = TYPE_TI_TEMPLATE (type);
5177   if (!PRIMARY_TEMPLATE_P (tmpl))
5178     /* The type is nested in some template class.  Nothing to worry
5179        about here; there are no new template parameters for the nested
5180        type.  */
5181     return true;
5182
5183   if (!parms)
5184     {
5185       error ("template specifiers not specified in declaration of %qD",
5186              tmpl);
5187       return false;
5188     }
5189
5190   parms = INNERMOST_TEMPLATE_PARMS (parms);
5191   tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
5192
5193   if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
5194     {
5195       error_n (input_location, TREE_VEC_LENGTH (parms),
5196                "redeclared with %d template parameter",
5197                "redeclared with %d template parameters",
5198                TREE_VEC_LENGTH (parms));
5199       inform_n (input_location, TREE_VEC_LENGTH (tmpl_parms),
5200                 "previous declaration %q+D used %d template parameter",
5201                 "previous declaration %q+D used %d template parameters",
5202                 tmpl, TREE_VEC_LENGTH (tmpl_parms));
5203       return false;
5204     }
5205
5206   for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
5207     {
5208       tree tmpl_parm;
5209       tree parm;
5210       tree tmpl_default;
5211       tree parm_default;
5212
5213       if (TREE_VEC_ELT (tmpl_parms, i) == error_mark_node
5214           || TREE_VEC_ELT (parms, i) == error_mark_node)
5215         continue;
5216
5217       tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
5218       if (tmpl_parm == error_mark_node)
5219         return false;
5220
5221       parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
5222       tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
5223       parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
5224
5225       /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
5226          TEMPLATE_DECL.  */
5227       if (TREE_CODE (tmpl_parm) != TREE_CODE (parm)
5228           || (TREE_CODE (tmpl_parm) != TYPE_DECL
5229               && !same_type_p (TREE_TYPE (tmpl_parm), TREE_TYPE (parm)))
5230           || (TREE_CODE (tmpl_parm) != PARM_DECL
5231               && (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (tmpl_parm))
5232                   != TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm))))
5233           || (TREE_CODE (tmpl_parm) == PARM_DECL
5234               && (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (tmpl_parm))
5235                   != TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))))
5236         {
5237           error ("template parameter %q+#D", tmpl_parm);
5238           error ("redeclared here as %q#D", parm);
5239           return false;
5240         }
5241
5242       if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
5243         {
5244           /* We have in [temp.param]:
5245
5246              A template-parameter may not be given default arguments
5247              by two different declarations in the same scope.  */
5248           error_at (input_location, "redefinition of default argument for %q#D", parm);
5249           inform (DECL_SOURCE_LOCATION (tmpl_parm),
5250                   "original definition appeared here");
5251           return false;
5252         }
5253
5254       if (parm_default != NULL_TREE)
5255         /* Update the previous template parameters (which are the ones
5256            that will really count) with the new default value.  */
5257         TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
5258       else if (tmpl_default != NULL_TREE)
5259         /* Update the new parameters, too; they'll be used as the
5260            parameters for any members.  */
5261         TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
5262     }
5263
5264     return true;
5265 }
5266
5267 /* Simplify EXPR if it is a non-dependent expression.  Returns the
5268    (possibly simplified) expression.  */
5269
5270 static tree
5271 fold_non_dependent_expr_sfinae (tree expr, tsubst_flags_t complain)
5272 {
5273   if (expr == NULL_TREE)
5274     return NULL_TREE;
5275
5276   /* If we're in a template, but EXPR isn't value dependent, simplify
5277      it.  We're supposed to treat:
5278
5279        template <typename T> void f(T[1 + 1]);
5280        template <typename T> void f(T[2]);
5281
5282      as two declarations of the same function, for example.  */
5283   if (processing_template_decl
5284       && !type_dependent_expression_p (expr)
5285       && potential_constant_expression (expr)
5286       && !value_dependent_expression_p (expr))
5287     {
5288       HOST_WIDE_INT saved_processing_template_decl;
5289
5290       saved_processing_template_decl = processing_template_decl;
5291       processing_template_decl = 0;
5292       expr = tsubst_copy_and_build (expr,
5293                                     /*args=*/NULL_TREE,
5294                                     complain,
5295                                     /*in_decl=*/NULL_TREE,
5296                                     /*function_p=*/false,
5297                                     /*integral_constant_expression_p=*/true);
5298       processing_template_decl = saved_processing_template_decl;
5299     }
5300   return expr;
5301 }
5302
5303 tree
5304 fold_non_dependent_expr (tree expr)
5305 {
5306   return fold_non_dependent_expr_sfinae (expr, tf_error);
5307 }
5308
5309 /* Return TRUE iff T is a type alias, a TEMPLATE_DECL for an alias
5310    template declaration, or a TYPE_DECL for an alias declaration.  */
5311
5312 bool
5313 alias_type_or_template_p (tree t)
5314 {
5315   if (t == NULL_TREE)
5316     return false;
5317   return ((TREE_CODE (t) == TYPE_DECL && TYPE_DECL_ALIAS_P (t))
5318           || (TYPE_P (t)
5319               && TYPE_NAME (t)
5320               && TYPE_DECL_ALIAS_P (TYPE_NAME (t)))
5321           || DECL_ALIAS_TEMPLATE_P (t));
5322 }
5323
5324 /* Return TRUE iff is a specialization of an alias template.  */
5325
5326 bool
5327 alias_template_specialization_p (tree t)
5328 {
5329   if (t == NULL_TREE)
5330     return false;
5331   return (primary_template_instantiation_p (t)
5332           && DECL_ALIAS_TEMPLATE_P (TYPE_TI_TEMPLATE (t)));
5333 }
5334
5335 /* Subroutine of convert_nontype_argument. Converts EXPR to TYPE, which
5336    must be a function or a pointer-to-function type, as specified
5337    in [temp.arg.nontype]: disambiguate EXPR if it is an overload set,
5338    and check that the resulting function has external linkage.  */
5339
5340 static tree
5341 convert_nontype_argument_function (tree type, tree expr)
5342 {
5343   tree fns = expr;
5344   tree fn, fn_no_ptr;
5345   linkage_kind linkage;
5346
5347   fn = instantiate_type (type, fns, tf_none);
5348   if (fn == error_mark_node)
5349     return error_mark_node;
5350
5351   fn_no_ptr = fn;
5352   if (TREE_CODE (fn_no_ptr) == ADDR_EXPR)
5353     fn_no_ptr = TREE_OPERAND (fn_no_ptr, 0);
5354   if (BASELINK_P (fn_no_ptr))
5355     fn_no_ptr = BASELINK_FUNCTIONS (fn_no_ptr);
5356  
5357   /* [temp.arg.nontype]/1
5358
5359      A template-argument for a non-type, non-template template-parameter
5360      shall be one of:
5361      [...]
5362      -- the address of an object or function with external [C++11: or
5363         internal] linkage.  */
5364   linkage = decl_linkage (fn_no_ptr);
5365   if (cxx_dialect >= cxx0x ? linkage == lk_none : linkage != lk_external)
5366     {
5367       if (cxx_dialect >= cxx0x)
5368         error ("%qE is not a valid template argument for type %qT "
5369                "because %qD has no linkage",
5370                expr, type, fn_no_ptr);
5371       else
5372         error ("%qE is not a valid template argument for type %qT "
5373                "because %qD does not have external linkage",
5374                expr, type, fn_no_ptr);
5375       return NULL_TREE;
5376     }
5377
5378   return fn;
5379 }
5380
5381 /* Subroutine of convert_nontype_argument.
5382    Check if EXPR of type TYPE is a valid pointer-to-member constant.
5383    Emit an error otherwise.  */
5384
5385 static bool
5386 check_valid_ptrmem_cst_expr (tree type, tree expr,
5387                              tsubst_flags_t complain)
5388 {
5389   STRIP_NOPS (expr);
5390   if (expr && (null_ptr_cst_p (expr) || TREE_CODE (expr) == PTRMEM_CST))
5391     return true;
5392   if (cxx_dialect >= cxx0x && null_member_pointer_value_p (expr))
5393     return true;
5394   if (complain & tf_error)
5395     {
5396       error ("%qE is not a valid template argument for type %qT",
5397              expr, type);
5398       error ("it must be a pointer-to-member of the form %<&X::Y%>");
5399     }
5400   return false;
5401 }
5402
5403 /* Returns TRUE iff the address of OP is value-dependent.
5404
5405    14.6.2.4 [temp.dep.temp]:
5406    A non-integral non-type template-argument is dependent if its type is
5407    dependent or it has either of the following forms
5408      qualified-id
5409      & qualified-id
5410    and contains a nested-name-specifier which specifies a class-name that
5411    names a dependent type.
5412
5413    We generalize this to just say that the address of a member of a
5414    dependent class is value-dependent; the above doesn't cover the
5415    address of a static data member named with an unqualified-id.  */
5416
5417 static bool
5418 has_value_dependent_address (tree op)
5419 {
5420   /* We could use get_inner_reference here, but there's no need;
5421      this is only relevant for template non-type arguments, which
5422      can only be expressed as &id-expression.  */
5423   if (DECL_P (op))
5424     {
5425       tree ctx = CP_DECL_CONTEXT (op);
5426       if (TYPE_P (ctx) && dependent_type_p (ctx))
5427         return true;
5428     }
5429
5430   return false;
5431 }
5432
5433 /* The next set of functions are used for providing helpful explanatory
5434    diagnostics for failed overload resolution.  Their messages should be
5435    indented by two spaces for consistency with the messages in
5436    call.c  */
5437
5438 static int
5439 unify_success (bool explain_p ATTRIBUTE_UNUSED)
5440 {
5441   return 0;
5442 }
5443
5444 static int
5445 unify_parameter_deduction_failure (bool explain_p, tree parm)
5446 {
5447   if (explain_p)
5448     inform (input_location,
5449             "  couldn't deduce template parameter %qD", parm);
5450   return 1;
5451 }
5452
5453 static int
5454 unify_invalid (bool explain_p ATTRIBUTE_UNUSED)
5455 {
5456   return 1;
5457 }
5458
5459 static int
5460 unify_cv_qual_mismatch (bool explain_p, tree parm, tree arg)
5461 {
5462   if (explain_p)
5463     inform (input_location,
5464             "  types %qT and %qT have incompatible cv-qualifiers",
5465             parm, arg);
5466   return 1;
5467 }
5468
5469 static int
5470 unify_type_mismatch (bool explain_p, tree parm, tree arg)
5471 {
5472   if (explain_p)
5473     inform (input_location, "  mismatched types %qT and %qT", parm, arg);
5474   return 1;
5475 }
5476
5477 static int
5478 unify_parameter_pack_mismatch (bool explain_p, tree parm, tree arg)
5479 {
5480   if (explain_p)
5481     inform (input_location,
5482             "  template parameter %qD is not a parameter pack, but "
5483             "argument %qD is",
5484             parm, arg);
5485   return 1;
5486 }
5487
5488 static int
5489 unify_ptrmem_cst_mismatch (bool explain_p, tree parm, tree arg)
5490 {
5491   if (explain_p)
5492     inform (input_location,
5493             "  template argument %qE does not match "
5494             "pointer-to-member constant %qE",
5495             arg, parm);
5496   return 1;
5497 }
5498
5499 static int
5500 unify_expression_unequal (bool explain_p, tree parm, tree arg)
5501 {
5502   if (explain_p)
5503     inform (input_location, "  %qE is not equivalent to %qE", parm, arg);
5504   return 1;
5505 }
5506
5507 static int
5508 unify_parameter_pack_inconsistent (bool explain_p, tree old_arg, tree new_arg)
5509 {
5510   if (explain_p)
5511     inform (input_location,
5512             "  inconsistent parameter pack deduction with %qT and %qT",
5513             old_arg, new_arg);
5514   return 1;
5515 }
5516
5517 static int
5518 unify_inconsistency (bool explain_p, tree parm, tree first, tree second)
5519 {
5520   if (explain_p)
5521     {
5522       if (TYPE_P (parm))
5523         inform (input_location,
5524                 "  deduced conflicting types for parameter %qT (%qT and %qT)",
5525                 parm, first, second);
5526       else
5527         inform (input_location,
5528                 "  deduced conflicting values for non-type parameter "
5529                 "%qE (%qE and %qE)", parm, first, second);
5530     }
5531   return 1;
5532 }
5533
5534 static int
5535 unify_vla_arg (bool explain_p, tree arg)
5536 {
5537   if (explain_p)
5538     inform (input_location,
5539             "  variable-sized array type %qT is not "
5540             "a valid template argument",
5541             arg);
5542   return 1;
5543 }
5544
5545 static int
5546 unify_method_type_error (bool explain_p, tree arg)
5547 {
5548   if (explain_p)
5549     inform (input_location,
5550             "  member function type %qT is not a valid template argument",
5551             arg);
5552   return 1;
5553 }
5554
5555 static int
5556 unify_arity (bool explain_p, int have, int wanted)
5557 {
5558   if (explain_p)
5559     inform_n (input_location, wanted,
5560               "  candidate expects %d argument, %d provided",
5561               "  candidate expects %d arguments, %d provided",
5562               wanted, have);
5563   return 1;
5564 }
5565
5566 static int
5567 unify_too_many_arguments (bool explain_p, int have, int wanted)
5568 {
5569   return unify_arity (explain_p, have, wanted);
5570 }
5571
5572 static int
5573 unify_too_few_arguments (bool explain_p, int have, int wanted)
5574 {
5575   return unify_arity (explain_p, have, wanted);
5576 }
5577
5578 static int
5579 unify_arg_conversion (bool explain_p, tree to_type,
5580                       tree from_type, tree arg)
5581 {
5582   if (explain_p)
5583     inform (input_location, "  cannot convert %qE (type %qT) to type %qT",
5584             arg, from_type, to_type);
5585   return 1;
5586 }
5587
5588 static int
5589 unify_no_common_base (bool explain_p, enum template_base_result r,
5590                       tree parm, tree arg)
5591 {
5592   if (explain_p)
5593     switch (r)
5594       {
5595       case tbr_ambiguous_baseclass:
5596         inform (input_location, "  %qT is an ambiguous base class of %qT",
5597                 arg, parm);
5598         break;
5599       default:
5600         inform (input_location, "  %qT is not derived from %qT", arg, parm);
5601         break;
5602       }
5603   return 1;
5604 }
5605
5606 static int
5607 unify_inconsistent_template_template_parameters (bool explain_p)
5608 {
5609   if (explain_p)
5610     inform (input_location,
5611             "  template parameters of a template template argument are "
5612             "inconsistent with other deduced template arguments");
5613   return 1;
5614 }
5615
5616 static int
5617 unify_template_deduction_failure (bool explain_p, tree parm, tree arg)
5618 {
5619   if (explain_p)
5620     inform (input_location,
5621             "  can't deduce a template for %qT from non-template type %qT",
5622             parm, arg);
5623   return 1;
5624 }
5625
5626 static int
5627 unify_template_argument_mismatch (bool explain_p, tree parm, tree arg)
5628 {
5629   if (explain_p)
5630     inform (input_location,
5631             "  template argument %qE does not match %qD", arg, parm);
5632   return 1;
5633 }
5634
5635 static int
5636 unify_overload_resolution_failure (bool explain_p, tree arg)
5637 {
5638   if (explain_p)
5639     inform (input_location,
5640             "  could not resolve address from overloaded function %qE",
5641             arg);
5642   return 1;
5643 }
5644
5645 /* Attempt to convert the non-type template parameter EXPR to the
5646    indicated TYPE.  If the conversion is successful, return the
5647    converted value.  If the conversion is unsuccessful, return
5648    NULL_TREE if we issued an error message, or error_mark_node if we
5649    did not.  We issue error messages for out-and-out bad template
5650    parameters, but not simply because the conversion failed, since we
5651    might be just trying to do argument deduction.  Both TYPE and EXPR
5652    must be non-dependent.
5653
5654    The conversion follows the special rules described in
5655    [temp.arg.nontype], and it is much more strict than an implicit
5656    conversion.
5657
5658    This function is called twice for each template argument (see
5659    lookup_template_class for a more accurate description of this
5660    problem). This means that we need to handle expressions which
5661    are not valid in a C++ source, but can be created from the
5662    first call (for instance, casts to perform conversions). These
5663    hacks can go away after we fix the double coercion problem.  */
5664
5665 static tree
5666 convert_nontype_argument (tree type, tree expr, tsubst_flags_t complain)
5667 {
5668   tree expr_type;
5669
5670   /* Detect immediately string literals as invalid non-type argument.
5671      This special-case is not needed for correctness (we would easily
5672      catch this later), but only to provide better diagnostic for this
5673      common user mistake. As suggested by DR 100, we do not mention
5674      linkage issues in the diagnostic as this is not the point.  */
5675   /* FIXME we're making this OK.  */
5676   if (TREE_CODE (expr) == STRING_CST)
5677     {
5678       if (complain & tf_error)
5679         error ("%qE is not a valid template argument for type %qT "
5680                "because string literals can never be used in this context",
5681                expr, type);
5682       return NULL_TREE;
5683     }
5684
5685   /* Add the ADDR_EXPR now for the benefit of
5686      value_dependent_expression_p.  */
5687   if (TYPE_PTROBV_P (type)
5688       && TREE_CODE (TREE_TYPE (expr)) == ARRAY_TYPE)
5689     expr = decay_conversion (expr);
5690
5691   /* If we are in a template, EXPR may be non-dependent, but still
5692      have a syntactic, rather than semantic, form.  For example, EXPR
5693      might be a SCOPE_REF, rather than the VAR_DECL to which the
5694      SCOPE_REF refers.  Preserving the qualifying scope is necessary
5695      so that access checking can be performed when the template is
5696      instantiated -- but here we need the resolved form so that we can
5697      convert the argument.  */
5698   if (TYPE_REF_OBJ_P (type)
5699       && has_value_dependent_address (expr))
5700     /* If we want the address and it's value-dependent, don't fold.  */;
5701   else if (!type_unknown_p (expr))
5702     expr = fold_non_dependent_expr_sfinae (expr, complain);
5703   if (error_operand_p (expr))
5704     return error_mark_node;
5705   expr_type = TREE_TYPE (expr);
5706   if (TREE_CODE (type) == REFERENCE_TYPE)
5707     expr = mark_lvalue_use (expr);
5708   else
5709     expr = mark_rvalue_use (expr);
5710
5711   /* 14.3.2/5: The null pointer{,-to-member} conversion is applied
5712      to a non-type argument of "nullptr".  */
5713   if (expr == nullptr_node
5714       && (TYPE_PTR_P (type) || TYPE_PTR_TO_MEMBER_P (type)))
5715     expr = convert (type, expr);
5716
5717   /* In C++11, integral or enumeration non-type template arguments can be
5718      arbitrary constant expressions.  Pointer and pointer to
5719      member arguments can be general constant expressions that evaluate
5720      to a null value, but otherwise still need to be of a specific form.  */
5721   if (cxx_dialect >= cxx0x)
5722     {
5723       if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
5724         expr = maybe_constant_value (expr);
5725       else if (TYPE_PTR_P (type)
5726                || (TYPE_PTR_TO_MEMBER_P (type)
5727                    && TREE_CODE (expr) != PTRMEM_CST))
5728         {
5729           tree folded = maybe_constant_value (expr);
5730           if (TYPE_PTR_P (type) ? integer_zerop (folded)
5731               : null_member_pointer_value_p (folded))
5732             expr = folded;
5733         }
5734     }
5735
5736   /* HACK: Due to double coercion, we can get a
5737      NOP_EXPR<REFERENCE_TYPE>(ADDR_EXPR<POINTER_TYPE> (arg)) here,
5738      which is the tree that we built on the first call (see
5739      below when coercing to reference to object or to reference to
5740      function). We just strip everything and get to the arg.
5741      See g++.old-deja/g++.oliva/template4.C and g++.dg/template/nontype9.C
5742      for examples.  */
5743   if (TYPE_REF_OBJ_P (type) || TYPE_REFFN_P (type))
5744     {
5745       tree probe_type, probe = expr;
5746       if (REFERENCE_REF_P (probe))
5747         probe = TREE_OPERAND (probe, 0);
5748       probe_type = TREE_TYPE (probe);
5749       if (TREE_CODE (probe) == NOP_EXPR)
5750         {
5751           /* ??? Maybe we could use convert_from_reference here, but we
5752              would need to relax its constraints because the NOP_EXPR
5753              could actually change the type to something more cv-qualified,
5754              and this is not folded by convert_from_reference.  */
5755           tree addr = TREE_OPERAND (probe, 0);
5756           gcc_assert (TREE_CODE (probe_type) == REFERENCE_TYPE);
5757           gcc_assert (TREE_CODE (addr) == ADDR_EXPR);
5758           gcc_assert (TREE_CODE (TREE_TYPE (addr)) == POINTER_TYPE);
5759           gcc_assert (same_type_ignoring_top_level_qualifiers_p
5760                       (TREE_TYPE (probe_type),
5761                        TREE_TYPE (TREE_TYPE (addr))));
5762
5763           expr = TREE_OPERAND (addr, 0);
5764           expr_type = TREE_TYPE (expr);
5765         }
5766     }
5767
5768   /* We could also generate a NOP_EXPR(ADDR_EXPR()) when the
5769      parameter is a pointer to object, through decay and
5770      qualification conversion. Let's strip everything.  */
5771   else if (TREE_CODE (expr) == NOP_EXPR && TYPE_PTROBV_P (type))
5772     {
5773       STRIP_NOPS (expr);
5774       gcc_assert (TREE_CODE (expr) == ADDR_EXPR);
5775       gcc_assert (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE);
5776       /* Skip the ADDR_EXPR only if it is part of the decay for
5777          an array. Otherwise, it is part of the original argument
5778          in the source code.  */
5779       if (TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == ARRAY_TYPE)
5780         expr = TREE_OPERAND (expr, 0);
5781       expr_type = TREE_TYPE (expr);
5782     }
5783
5784   /* [temp.arg.nontype]/5, bullet 1
5785
5786      For a non-type template-parameter of integral or enumeration type,
5787      integral promotions (_conv.prom_) and integral conversions
5788      (_conv.integral_) are applied.  */
5789   if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
5790     {
5791       tree t = build_integral_nontype_arg_conv (type, expr, complain);
5792       t = maybe_constant_value (t);
5793       if (t != error_mark_node)
5794         expr = t;
5795
5796       if (!same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (expr)))
5797         return error_mark_node;
5798
5799       /* Notice that there are constant expressions like '4 % 0' which
5800          do not fold into integer constants.  */
5801       if (TREE_CODE (expr) != INTEGER_CST)
5802         {
5803           if (complain & tf_error)
5804             {
5805               int errs = errorcount, warns = warningcount;
5806               expr = cxx_constant_value (expr);
5807               if (errorcount > errs || warningcount > warns)
5808                 inform (EXPR_LOC_OR_HERE (expr),
5809                         "in template argument for type %qT ", type);
5810               if (expr == error_mark_node)
5811                 return NULL_TREE;
5812               /* else cxx_constant_value complained but gave us
5813                  a real constant, so go ahead.  */
5814               gcc_assert (TREE_CODE (expr) == INTEGER_CST);
5815             }
5816           else
5817             return NULL_TREE;
5818         }
5819     }
5820   /* [temp.arg.nontype]/5, bullet 2
5821
5822      For a non-type template-parameter of type pointer to object,
5823      qualification conversions (_conv.qual_) and the array-to-pointer
5824      conversion (_conv.array_) are applied.  */
5825   else if (TYPE_PTROBV_P (type))
5826     {
5827       /* [temp.arg.nontype]/1  (TC1 version, DR 49):
5828
5829          A template-argument for a non-type, non-template template-parameter
5830          shall be one of: [...]
5831
5832          -- the name of a non-type template-parameter;
5833          -- the address of an object or function with external linkage, [...]
5834             expressed as "& id-expression" where the & is optional if the name
5835             refers to a function or array, or if the corresponding
5836             template-parameter is a reference.
5837
5838         Here, we do not care about functions, as they are invalid anyway
5839         for a parameter of type pointer-to-object.  */
5840
5841       if (DECL_P (expr) && DECL_TEMPLATE_PARM_P (expr))
5842         /* Non-type template parameters are OK.  */
5843         ;
5844       else if (cxx_dialect >= cxx0x && integer_zerop (expr))
5845         /* Null pointer values are OK in C++11.  */;
5846       else if (TREE_CODE (expr) != ADDR_EXPR
5847                && TREE_CODE (expr_type) != ARRAY_TYPE)
5848         {
5849           if (TREE_CODE (expr) == VAR_DECL)
5850             {
5851               error ("%qD is not a valid template argument "
5852                      "because %qD is a variable, not the address of "
5853                      "a variable",
5854                      expr, expr);
5855               return NULL_TREE;
5856             }
5857           /* Other values, like integer constants, might be valid
5858              non-type arguments of some other type.  */
5859           return error_mark_node;
5860         }
5861       else
5862         {
5863           tree decl;
5864
5865           decl = ((TREE_CODE (expr) == ADDR_EXPR)
5866                   ? TREE_OPERAND (expr, 0) : expr);
5867           if (TREE_CODE (decl) != VAR_DECL)
5868             {
5869               error ("%qE is not a valid template argument of type %qT "
5870                      "because %qE is not a variable",
5871                      expr, type, decl);
5872               return NULL_TREE;
5873             }
5874           else if (cxx_dialect < cxx0x && !DECL_EXTERNAL_LINKAGE_P (decl))
5875             {
5876               error ("%qE is not a valid template argument of type %qT "
5877                      "because %qD does not have external linkage",
5878                      expr, type, decl);
5879               return NULL_TREE;
5880             }
5881           else if (cxx_dialect >= cxx0x && decl_linkage (decl) == lk_none)
5882             {
5883               error ("%qE is not a valid template argument of type %qT "
5884                      "because %qD has no linkage",
5885                      expr, type, decl);
5886               return NULL_TREE;
5887             }
5888         }
5889
5890       expr = decay_conversion (expr);
5891       if (expr == error_mark_node)
5892         return error_mark_node;
5893
5894       expr = perform_qualification_conversions (type, expr);
5895       if (expr == error_mark_node)
5896         return error_mark_node;
5897     }
5898   /* [temp.arg.nontype]/5, bullet 3
5899
5900      For a non-type template-parameter of type reference to object, no
5901      conversions apply. The type referred to by the reference may be more
5902      cv-qualified than the (otherwise identical) type of the
5903      template-argument. The template-parameter is bound directly to the
5904      template-argument, which must be an lvalue.  */
5905   else if (TYPE_REF_OBJ_P (type))
5906     {
5907       if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type),
5908                                                       expr_type))
5909         return error_mark_node;
5910
5911       if (!at_least_as_qualified_p (TREE_TYPE (type), expr_type))
5912         {
5913           error ("%qE is not a valid template argument for type %qT "
5914                  "because of conflicts in cv-qualification", expr, type);
5915           return NULL_TREE;
5916         }
5917
5918       if (!real_lvalue_p (expr))
5919         {
5920           error ("%qE is not a valid template argument for type %qT "
5921                  "because it is not an lvalue", expr, type);
5922           return NULL_TREE;
5923         }
5924
5925       /* [temp.arg.nontype]/1
5926
5927          A template-argument for a non-type, non-template template-parameter
5928          shall be one of: [...]
5929
5930          -- the address of an object or function with external linkage.  */
5931       if (TREE_CODE (expr) == INDIRECT_REF
5932           && TYPE_REF_OBJ_P (TREE_TYPE (TREE_OPERAND (expr, 0))))
5933         {
5934           expr = TREE_OPERAND (expr, 0);
5935           if (DECL_P (expr))
5936             {
5937               error ("%q#D is not a valid template argument for type %qT "
5938                      "because a reference variable does not have a constant "
5939                      "address", expr, type);
5940               return NULL_TREE;
5941             }
5942         }
5943
5944       if (!DECL_P (expr))
5945         {
5946           error ("%qE is not a valid template argument for type %qT "
5947                  "because it is not an object with external linkage",
5948                  expr, type);
5949           return NULL_TREE;
5950         }
5951
5952       if (!DECL_EXTERNAL_LINKAGE_P (expr))
5953         {
5954           error ("%qE is not a valid template argument for type %qT "
5955                  "because object %qD has not external linkage",
5956                  expr, type, expr);
5957           return NULL_TREE;
5958         }
5959
5960       expr = build_nop (type, build_address (expr));
5961     }
5962   /* [temp.arg.nontype]/5, bullet 4
5963
5964      For a non-type template-parameter of type pointer to function, only
5965      the function-to-pointer conversion (_conv.func_) is applied. If the
5966      template-argument represents a set of overloaded functions (or a
5967      pointer to such), the matching function is selected from the set
5968      (_over.over_).  */
5969   else if (TYPE_PTRFN_P (type))
5970     {
5971       /* If the argument is a template-id, we might not have enough
5972          context information to decay the pointer.  */
5973       if (!type_unknown_p (expr_type))
5974         {
5975           expr = decay_conversion (expr);
5976           if (expr == error_mark_node)
5977             return error_mark_node;
5978         }
5979
5980       if (cxx_dialect >= cxx0x && integer_zerop (expr))
5981         /* Null pointer values are OK in C++11.  */
5982         return perform_qualification_conversions (type, expr);
5983
5984       expr = convert_nontype_argument_function (type, expr);
5985       if (!expr || expr == error_mark_node)
5986         return expr;
5987
5988       if (TREE_CODE (expr) != ADDR_EXPR)
5989         {
5990           error ("%qE is not a valid template argument for type %qT", expr, type);
5991           error ("it must be the address of a function with external linkage");
5992           return NULL_TREE;
5993         }
5994     }
5995   /* [temp.arg.nontype]/5, bullet 5
5996
5997      For a non-type template-parameter of type reference to function, no
5998      conversions apply. If the template-argument represents a set of
5999      overloaded functions, the matching function is selected from the set
6000      (_over.over_).  */
6001   else if (TYPE_REFFN_P (type))
6002     {
6003       if (TREE_CODE (expr) == ADDR_EXPR)
6004         {
6005           error ("%qE is not a valid template argument for type %qT "
6006                  "because it is a pointer", expr, type);
6007           inform (input_location, "try using %qE instead", TREE_OPERAND (expr, 0));
6008           return NULL_TREE;
6009         }
6010
6011       expr = convert_nontype_argument_function (TREE_TYPE (type), expr);
6012       if (!expr || expr == error_mark_node)
6013         return expr;
6014
6015       expr = build_nop (type, build_address (expr));
6016     }
6017   /* [temp.arg.nontype]/5, bullet 6
6018
6019      For a non-type template-parameter of type pointer to member function,
6020      no conversions apply. If the template-argument represents a set of
6021      overloaded member functions, the matching member function is selected
6022      from the set (_over.over_).  */
6023   else if (TYPE_PTRMEMFUNC_P (type))
6024     {
6025       expr = instantiate_type (type, expr, tf_none);
6026       if (expr == error_mark_node)
6027         return error_mark_node;
6028
6029       /* [temp.arg.nontype] bullet 1 says the pointer to member
6030          expression must be a pointer-to-member constant.  */
6031       if (!check_valid_ptrmem_cst_expr (type, expr, complain))
6032         return error_mark_node;
6033
6034       /* There is no way to disable standard conversions in
6035          resolve_address_of_overloaded_function (called by
6036          instantiate_type). It is possible that the call succeeded by
6037          converting &B::I to &D::I (where B is a base of D), so we need
6038          to reject this conversion here.
6039
6040          Actually, even if there was a way to disable standard conversions,
6041          it would still be better to reject them here so that we can
6042          provide a superior diagnostic.  */
6043       if (!same_type_p (TREE_TYPE (expr), type))
6044         {
6045           error ("%qE is not a valid template argument for type %qT "
6046                  "because it is of type %qT", expr, type,
6047                  TREE_TYPE (expr));
6048           /* If we are just one standard conversion off, explain.  */
6049           if (can_convert (type, TREE_TYPE (expr)))
6050             inform (input_location,
6051                     "standard conversions are not allowed in this context");
6052           return NULL_TREE;
6053         }
6054     }
6055   /* [temp.arg.nontype]/5, bullet 7
6056
6057      For a non-type template-parameter of type pointer to data member,
6058      qualification conversions (_conv.qual_) are applied.  */
6059   else if (TYPE_PTRMEM_P (type))
6060     {
6061       /* [temp.arg.nontype] bullet 1 says the pointer to member
6062          expression must be a pointer-to-member constant.  */
6063       if (!check_valid_ptrmem_cst_expr (type, expr, complain))
6064         return error_mark_node;
6065
6066       expr = perform_qualification_conversions (type, expr);
6067       if (expr == error_mark_node)
6068         return expr;
6069     }
6070   else if (NULLPTR_TYPE_P (type))
6071     {
6072       if (expr != nullptr_node)
6073         {
6074           error ("%qE is not a valid template argument for type %qT "
6075                  "because it is of type %qT", expr, type, TREE_TYPE (expr));
6076           return NULL_TREE;
6077         }
6078       return expr;
6079     }
6080   /* A template non-type parameter must be one of the above.  */
6081   else
6082     gcc_unreachable ();
6083
6084   /* Sanity check: did we actually convert the argument to the
6085      right type?  */
6086   gcc_assert (same_type_ignoring_top_level_qualifiers_p
6087               (type, TREE_TYPE (expr)));
6088   return expr;
6089 }
6090
6091 /* Subroutine of coerce_template_template_parms, which returns 1 if
6092    PARM_PARM and ARG_PARM match using the rule for the template
6093    parameters of template template parameters. Both PARM and ARG are
6094    template parameters; the rest of the arguments are the same as for
6095    coerce_template_template_parms.
6096  */
6097 static int
6098 coerce_template_template_parm (tree parm,
6099                               tree arg,
6100                               tsubst_flags_t complain,
6101                               tree in_decl,
6102                               tree outer_args)
6103 {
6104   if (arg == NULL_TREE || arg == error_mark_node
6105       || parm == NULL_TREE || parm == error_mark_node)
6106     return 0;
6107   
6108   if (TREE_CODE (arg) != TREE_CODE (parm))
6109     return 0;
6110   
6111   switch (TREE_CODE (parm))
6112     {
6113     case TEMPLATE_DECL:
6114       /* We encounter instantiations of templates like
6115          template <template <template <class> class> class TT>
6116          class C;  */
6117       {
6118         tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
6119         tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
6120         
6121         if (!coerce_template_template_parms
6122             (parmparm, argparm, complain, in_decl, outer_args))
6123           return 0;
6124       }
6125       /* Fall through.  */
6126       
6127     case TYPE_DECL:
6128       if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (arg))
6129           && !TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
6130         /* Argument is a parameter pack but parameter is not.  */
6131         return 0;
6132       break;
6133       
6134     case PARM_DECL:
6135       /* The tsubst call is used to handle cases such as
6136          
6137            template <int> class C {};
6138            template <class T, template <T> class TT> class D {};
6139            D<int, C> d;
6140
6141          i.e. the parameter list of TT depends on earlier parameters.  */
6142       if (!uses_template_parms (TREE_TYPE (arg))
6143           && !same_type_p
6144                 (tsubst (TREE_TYPE (parm), outer_args, complain, in_decl),
6145                  TREE_TYPE (arg)))
6146         return 0;
6147       
6148       if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (arg))
6149           && !TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
6150         /* Argument is a parameter pack but parameter is not.  */
6151         return 0;
6152       
6153       break;
6154
6155     default:
6156       gcc_unreachable ();
6157     }
6158
6159   return 1;
6160 }
6161
6162
6163 /* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
6164    template template parameters.  Both PARM_PARMS and ARG_PARMS are
6165    vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
6166    or PARM_DECL.
6167
6168    Consider the example:
6169      template <class T> class A;
6170      template<template <class U> class TT> class B;
6171
6172    For B<A>, PARM_PARMS are the parameters to TT, while ARG_PARMS are
6173    the parameters to A, and OUTER_ARGS contains A.  */
6174
6175 static int
6176 coerce_template_template_parms (tree parm_parms,
6177                                 tree arg_parms,
6178                                 tsubst_flags_t complain,
6179                                 tree in_decl,
6180                                 tree outer_args)
6181 {
6182   int nparms, nargs, i;
6183   tree parm, arg;
6184   int variadic_p = 0;
6185
6186   gcc_assert (TREE_CODE (parm_parms) == TREE_VEC);
6187   gcc_assert (TREE_CODE (arg_parms) == TREE_VEC);
6188
6189   nparms = TREE_VEC_LENGTH (parm_parms);
6190   nargs = TREE_VEC_LENGTH (arg_parms);
6191
6192   /* Determine whether we have a parameter pack at the end of the
6193      template template parameter's template parameter list.  */
6194   if (TREE_VEC_ELT (parm_parms, nparms - 1) != error_mark_node)
6195     {
6196       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, nparms - 1));
6197       
6198       if (parm == error_mark_node)
6199         return 0;
6200
6201       switch (TREE_CODE (parm))
6202         {
6203         case TEMPLATE_DECL:
6204         case TYPE_DECL:
6205           if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
6206             variadic_p = 1;
6207           break;
6208           
6209         case PARM_DECL:
6210           if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
6211             variadic_p = 1;
6212           break;
6213           
6214         default:
6215           gcc_unreachable ();
6216         }
6217     }
6218  
6219   if (nargs != nparms
6220       && !(variadic_p && nargs >= nparms - 1))
6221     return 0;
6222
6223   /* Check all of the template parameters except the parameter pack at
6224      the end (if any).  */
6225   for (i = 0; i < nparms - variadic_p; ++i)
6226     {
6227       if (TREE_VEC_ELT (parm_parms, i) == error_mark_node
6228           || TREE_VEC_ELT (arg_parms, i) == error_mark_node)
6229         continue;
6230
6231       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
6232       arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
6233
6234       if (!coerce_template_template_parm (parm, arg, complain, in_decl,
6235                                           outer_args))
6236         return 0;
6237
6238     }
6239
6240   if (variadic_p)
6241     {
6242       /* Check each of the template parameters in the template
6243          argument against the template parameter pack at the end of
6244          the template template parameter.  */
6245       if (TREE_VEC_ELT (parm_parms, i) == error_mark_node)
6246         return 0;
6247
6248       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
6249
6250       for (; i < nargs; ++i)
6251         {
6252           if (TREE_VEC_ELT (arg_parms, i) == error_mark_node)
6253             continue;
6254  
6255           arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
6256  
6257           if (!coerce_template_template_parm (parm, arg, complain, in_decl,
6258                                               outer_args))
6259             return 0;
6260         }
6261     }
6262
6263   return 1;
6264 }
6265
6266 /* Verifies that the deduced template arguments (in TARGS) for the
6267    template template parameters (in TPARMS) represent valid bindings,
6268    by comparing the template parameter list of each template argument
6269    to the template parameter list of its corresponding template
6270    template parameter, in accordance with DR150. This
6271    routine can only be called after all template arguments have been
6272    deduced. It will return TRUE if all of the template template
6273    parameter bindings are okay, FALSE otherwise.  */
6274 bool 
6275 template_template_parm_bindings_ok_p (tree tparms, tree targs)
6276 {
6277   int i, ntparms = TREE_VEC_LENGTH (tparms);
6278   bool ret = true;
6279
6280   /* We're dealing with template parms in this process.  */
6281   ++processing_template_decl;
6282
6283   targs = INNERMOST_TEMPLATE_ARGS (targs);
6284
6285   for (i = 0; i < ntparms; ++i)
6286     {
6287       tree tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
6288       tree targ = TREE_VEC_ELT (targs, i);
6289
6290       if (TREE_CODE (tparm) == TEMPLATE_DECL && targ)
6291         {
6292           tree packed_args = NULL_TREE;
6293           int idx, len = 1;
6294
6295           if (ARGUMENT_PACK_P (targ))
6296             {
6297               /* Look inside the argument pack.  */
6298               packed_args = ARGUMENT_PACK_ARGS (targ);
6299               len = TREE_VEC_LENGTH (packed_args);
6300             }
6301
6302           for (idx = 0; idx < len; ++idx)
6303             {
6304               tree targ_parms = NULL_TREE;
6305
6306               if (packed_args)
6307                 /* Extract the next argument from the argument
6308                    pack.  */
6309                 targ = TREE_VEC_ELT (packed_args, idx);
6310
6311               if (PACK_EXPANSION_P (targ))
6312                 /* Look at the pattern of the pack expansion.  */
6313                 targ = PACK_EXPANSION_PATTERN (targ);
6314
6315               /* Extract the template parameters from the template
6316                  argument.  */
6317               if (TREE_CODE (targ) == TEMPLATE_DECL)
6318                 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (targ);
6319               else if (TREE_CODE (targ) == TEMPLATE_TEMPLATE_PARM)
6320                 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_NAME (targ));
6321
6322               /* Verify that we can coerce the template template
6323                  parameters from the template argument to the template
6324                  parameter.  This requires an exact match.  */
6325               if (targ_parms
6326                   && !coerce_template_template_parms
6327                        (DECL_INNERMOST_TEMPLATE_PARMS (tparm),
6328                         targ_parms,
6329                         tf_none,
6330                         tparm,
6331                         targs))
6332                 {
6333                   ret = false;
6334                   goto out;
6335                 }
6336             }
6337         }
6338     }
6339
6340  out:
6341
6342   --processing_template_decl;
6343   return ret;
6344 }
6345
6346 /* Since type attributes aren't mangled, we need to strip them from
6347    template type arguments.  */
6348
6349 static tree
6350 canonicalize_type_argument (tree arg, tsubst_flags_t complain)
6351 {
6352   tree mv;
6353   if (!arg || arg == error_mark_node || arg == TYPE_CANONICAL (arg))
6354     return arg;
6355   mv = TYPE_MAIN_VARIANT (arg);
6356   arg = strip_typedefs (arg);
6357   if (TYPE_ALIGN (arg) != TYPE_ALIGN (mv)
6358       || TYPE_ATTRIBUTES (arg) != TYPE_ATTRIBUTES (mv))
6359     {
6360       if (complain & tf_warning)
6361         warning (0, "ignoring attributes on template argument %qT", arg);
6362       arg = build_aligned_type (arg, TYPE_ALIGN (mv));
6363       arg = cp_build_type_attribute_variant (arg, TYPE_ATTRIBUTES (mv));
6364     }
6365   return arg;
6366 }
6367
6368 /* Convert the indicated template ARG as necessary to match the
6369    indicated template PARM.  Returns the converted ARG, or
6370    error_mark_node if the conversion was unsuccessful.  Error and
6371    warning messages are issued under control of COMPLAIN.  This
6372    conversion is for the Ith parameter in the parameter list.  ARGS is
6373    the full set of template arguments deduced so far.  */
6374
6375 static tree
6376 convert_template_argument (tree parm,
6377                            tree arg,
6378                            tree args,
6379                            tsubst_flags_t complain,
6380                            int i,
6381                            tree in_decl)
6382 {
6383   tree orig_arg;
6384   tree val;
6385   int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
6386
6387   if (TREE_CODE (arg) == TREE_LIST
6388       && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
6389     {
6390       /* The template argument was the name of some
6391          member function.  That's usually
6392          invalid, but static members are OK.  In any
6393          case, grab the underlying fields/functions
6394          and issue an error later if required.  */
6395       orig_arg = TREE_VALUE (arg);
6396       TREE_TYPE (arg) = unknown_type_node;
6397     }
6398
6399   orig_arg = arg;
6400
6401   requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
6402   requires_type = (TREE_CODE (parm) == TYPE_DECL
6403                    || requires_tmpl_type);
6404
6405   /* When determining whether an argument pack expansion is a template,
6406      look at the pattern.  */
6407   if (TREE_CODE (arg) == TYPE_PACK_EXPANSION)
6408     arg = PACK_EXPANSION_PATTERN (arg);
6409
6410   /* Deal with an injected-class-name used as a template template arg.  */
6411   if (requires_tmpl_type && CLASS_TYPE_P (arg))
6412     {
6413       tree t = maybe_get_template_decl_from_type_decl (TYPE_NAME (arg));
6414       if (TREE_CODE (t) == TEMPLATE_DECL)
6415         {
6416           if (cxx_dialect >= cxx0x)
6417             /* OK under DR 1004.  */;
6418           else if (complain & tf_warning_or_error)
6419             pedwarn (input_location, OPT_pedantic, "injected-class-name %qD"
6420                      " used as template template argument", TYPE_NAME (arg));
6421           else if (flag_pedantic_errors)
6422             t = arg;
6423
6424           arg = t;
6425         }
6426     }
6427
6428   is_tmpl_type = 
6429     ((TREE_CODE (arg) == TEMPLATE_DECL
6430       && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
6431      || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
6432      || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
6433
6434   if (is_tmpl_type
6435       && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
6436           || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
6437     arg = TYPE_STUB_DECL (arg);
6438
6439   is_type = TYPE_P (arg) || is_tmpl_type;
6440
6441   if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
6442       && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
6443     {
6444       permerror (input_location, "to refer to a type member of a template parameter, "
6445                  "use %<typename %E%>", orig_arg);
6446
6447       orig_arg = make_typename_type (TREE_OPERAND (arg, 0),
6448                                      TREE_OPERAND (arg, 1),
6449                                      typename_type,
6450                                      complain & tf_error);
6451       arg = orig_arg;
6452       is_type = 1;
6453     }
6454   if (is_type != requires_type)
6455     {
6456       if (in_decl)
6457         {
6458           if (complain & tf_error)
6459             {
6460               error ("type/value mismatch at argument %d in template "
6461                      "parameter list for %qD",
6462                      i + 1, in_decl);
6463               if (is_type)
6464                 error ("  expected a constant of type %qT, got %qT",
6465                        TREE_TYPE (parm),
6466                        (DECL_P (arg) ? DECL_NAME (arg) : orig_arg));
6467               else if (requires_tmpl_type)
6468                 error ("  expected a class template, got %qE", orig_arg);
6469               else
6470                 error ("  expected a type, got %qE", orig_arg);
6471             }
6472         }
6473       return error_mark_node;
6474     }
6475   if (is_tmpl_type ^ requires_tmpl_type)
6476     {
6477       if (in_decl && (complain & tf_error))
6478         {
6479           error ("type/value mismatch at argument %d in template "
6480                  "parameter list for %qD",
6481                  i + 1, in_decl);
6482           if (is_tmpl_type)
6483             error ("  expected a type, got %qT", DECL_NAME (arg));
6484           else
6485             error ("  expected a class template, got %qT", orig_arg);
6486         }
6487       return error_mark_node;
6488     }
6489
6490   if (is_type)
6491     {
6492       if (requires_tmpl_type)
6493         {
6494           if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
6495             /* The number of argument required is not known yet.
6496                Just accept it for now.  */
6497             val = TREE_TYPE (arg);
6498           else
6499             {
6500               tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
6501               tree argparm;
6502
6503               argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
6504
6505               if (coerce_template_template_parms (parmparm, argparm,
6506                                                   complain, in_decl,
6507                                                   args))
6508                 {
6509                   val = arg;
6510
6511                   /* TEMPLATE_TEMPLATE_PARM node is preferred over
6512                      TEMPLATE_DECL.  */
6513                   if (val != error_mark_node)
6514                     {
6515                       if (DECL_TEMPLATE_TEMPLATE_PARM_P (val))
6516                         val = TREE_TYPE (val);
6517                       if (TREE_CODE (orig_arg) == TYPE_PACK_EXPANSION)
6518                         val = make_pack_expansion (val);
6519                     }
6520                 }
6521               else
6522                 {
6523                   if (in_decl && (complain & tf_error))
6524                     {
6525                       error ("type/value mismatch at argument %d in "
6526                              "template parameter list for %qD",
6527                              i + 1, in_decl);
6528                       error ("  expected a template of type %qD, got %qT",
6529                              parm, orig_arg);
6530                     }
6531
6532                   val = error_mark_node;
6533                 }
6534             }
6535         }
6536       else
6537         val = orig_arg;
6538       /* We only form one instance of each template specialization.
6539          Therefore, if we use a non-canonical variant (i.e., a
6540          typedef), any future messages referring to the type will use
6541          the typedef, which is confusing if those future uses do not
6542          themselves also use the typedef.  */
6543       if (TYPE_P (val))
6544         val = canonicalize_type_argument (val, complain);
6545     }
6546   else
6547     {
6548       tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
6549
6550       if (invalid_nontype_parm_type_p (t, complain))
6551         return error_mark_node;
6552
6553       if (template_parameter_pack_p (parm) && ARGUMENT_PACK_P (orig_arg))
6554         {
6555           if (same_type_p (t, TREE_TYPE (orig_arg)))
6556             val = orig_arg;
6557           else
6558             {
6559               /* Not sure if this is reachable, but it doesn't hurt
6560                  to be robust.  */
6561               error ("type mismatch in nontype parameter pack");
6562               val = error_mark_node;
6563             }
6564         }
6565       else if (!uses_template_parms (orig_arg) && !uses_template_parms (t))
6566         /* We used to call digest_init here.  However, digest_init
6567            will report errors, which we don't want when complain
6568            is zero.  More importantly, digest_init will try too
6569            hard to convert things: for example, `0' should not be
6570            converted to pointer type at this point according to
6571            the standard.  Accepting this is not merely an
6572            extension, since deciding whether or not these
6573            conversions can occur is part of determining which
6574            function template to call, or whether a given explicit
6575            argument specification is valid.  */
6576         val = convert_nontype_argument (t, orig_arg, complain);
6577       else
6578         val = orig_arg;
6579
6580       if (val == NULL_TREE)
6581         val = error_mark_node;
6582       else if (val == error_mark_node && (complain & tf_error))
6583         error ("could not convert template argument %qE to %qT",  orig_arg, t);
6584
6585       if (TREE_CODE (val) == SCOPE_REF)
6586         {
6587           /* Strip typedefs from the SCOPE_REF.  */
6588           tree type = canonicalize_type_argument (TREE_TYPE (val), complain);
6589           tree scope = canonicalize_type_argument (TREE_OPERAND (val, 0),
6590                                                    complain);
6591           val = build_qualified_name (type, scope, TREE_OPERAND (val, 1),
6592                                       QUALIFIED_NAME_IS_TEMPLATE (val));
6593         }
6594     }
6595
6596   return val;
6597 }
6598
6599 /* Coerces the remaining template arguments in INNER_ARGS (from
6600    ARG_IDX to the end) into the parameter pack at PARM_IDX in PARMS.
6601    Returns the coerced argument pack. PARM_IDX is the position of this
6602    parameter in the template parameter list. ARGS is the original
6603    template argument list.  */
6604 static tree
6605 coerce_template_parameter_pack (tree parms,
6606                                 int parm_idx,
6607                                 tree args,
6608                                 tree inner_args,
6609                                 int arg_idx,
6610                                 tree new_args,
6611                                 int* lost,
6612                                 tree in_decl,
6613                                 tsubst_flags_t complain)
6614 {
6615   tree parm = TREE_VEC_ELT (parms, parm_idx);
6616   int nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
6617   tree packed_args;
6618   tree argument_pack;
6619   tree packed_types = NULL_TREE;
6620
6621   if (arg_idx > nargs)
6622     arg_idx = nargs;
6623
6624   packed_args = make_tree_vec (nargs - arg_idx);
6625
6626   if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL
6627       && uses_parameter_packs (TREE_TYPE (TREE_VALUE (parm))))
6628     {
6629       /* When the template parameter is a non-type template
6630          parameter pack whose type uses parameter packs, we need
6631          to look at each of the template arguments
6632          separately. Build a vector of the types for these
6633          non-type template parameters in PACKED_TYPES.  */
6634       tree expansion 
6635         = make_pack_expansion (TREE_TYPE (TREE_VALUE (parm)));
6636       packed_types = tsubst_pack_expansion (expansion, args,
6637                                             complain, in_decl);
6638
6639       if (packed_types == error_mark_node)
6640         return error_mark_node;
6641
6642       /* Check that we have the right number of arguments.  */
6643       if (arg_idx < nargs
6644           && !PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx))
6645           && nargs - arg_idx != TREE_VEC_LENGTH (packed_types))
6646         {
6647           int needed_parms 
6648             = TREE_VEC_LENGTH (parms) - 1 + TREE_VEC_LENGTH (packed_types);
6649           error ("wrong number of template arguments (%d, should be %d)",
6650                  nargs, needed_parms);
6651           return error_mark_node;
6652         }
6653
6654       /* If we aren't able to check the actual arguments now
6655          (because they haven't been expanded yet), we can at least
6656          verify that all of the types used for the non-type
6657          template parameter pack are, in fact, valid for non-type
6658          template parameters.  */
6659       if (arg_idx < nargs 
6660           && PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx)))
6661         {
6662           int j, len = TREE_VEC_LENGTH (packed_types);
6663           for (j = 0; j < len; ++j)
6664             {
6665               tree t = TREE_VEC_ELT (packed_types, j);
6666               if (invalid_nontype_parm_type_p (t, complain))
6667                 return error_mark_node;
6668             }
6669         }
6670     }
6671
6672   /* Convert the remaining arguments, which will be a part of the
6673      parameter pack "parm".  */
6674   for (; arg_idx < nargs; ++arg_idx)
6675     {
6676       tree arg = TREE_VEC_ELT (inner_args, arg_idx);
6677       tree actual_parm = TREE_VALUE (parm);
6678
6679       if (packed_types && !PACK_EXPANSION_P (arg))
6680         {
6681           /* When we have a vector of types (corresponding to the
6682              non-type template parameter pack that uses parameter
6683              packs in its type, as mention above), and the
6684              argument is not an expansion (which expands to a
6685              currently unknown number of arguments), clone the
6686              parm and give it the next type in PACKED_TYPES.  */
6687           actual_parm = copy_node (actual_parm);
6688           TREE_TYPE (actual_parm) = 
6689             TREE_VEC_ELT (packed_types, arg_idx - parm_idx);
6690         }
6691
6692       if (arg != error_mark_node)
6693         arg = convert_template_argument (actual_parm, 
6694                                          arg, new_args, complain, parm_idx,
6695                                          in_decl);
6696       if (arg == error_mark_node)
6697         (*lost)++;
6698       TREE_VEC_ELT (packed_args, arg_idx - parm_idx) = arg; 
6699     }
6700
6701   if (TREE_CODE (TREE_VALUE (parm)) == TYPE_DECL
6702       || TREE_CODE (TREE_VALUE (parm)) == TEMPLATE_DECL)
6703     argument_pack = cxx_make_type (TYPE_ARGUMENT_PACK);
6704   else
6705     {
6706       argument_pack = make_node (NONTYPE_ARGUMENT_PACK);
6707       TREE_TYPE (argument_pack) 
6708         = tsubst (TREE_TYPE (TREE_VALUE (parm)), new_args, complain, in_decl);
6709       TREE_CONSTANT (argument_pack) = 1;
6710     }
6711
6712   SET_ARGUMENT_PACK_ARGS (argument_pack, packed_args);
6713 #ifdef ENABLE_CHECKING
6714   SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (packed_args,
6715                                        TREE_VEC_LENGTH (packed_args));
6716 #endif
6717   return argument_pack;
6718 }
6719
6720 /* Convert all template arguments to their appropriate types, and
6721    return a vector containing the innermost resulting template
6722    arguments.  If any error occurs, return error_mark_node. Error and
6723    warning messages are issued under control of COMPLAIN.
6724
6725    If REQUIRE_ALL_ARGS is false, argument deduction will be performed
6726    for arguments not specified in ARGS.  Otherwise, if
6727    USE_DEFAULT_ARGS is true, default arguments will be used to fill in
6728    unspecified arguments.  If REQUIRE_ALL_ARGS is true, but
6729    USE_DEFAULT_ARGS is false, then all arguments must be specified in
6730    ARGS.  */
6731
6732 static tree
6733 coerce_template_parms (tree parms,
6734                        tree args,
6735                        tree in_decl,
6736                        tsubst_flags_t complain,
6737                        bool require_all_args,
6738                        bool use_default_args)
6739 {
6740   int nparms, nargs, parm_idx, arg_idx, lost = 0;
6741   tree inner_args;
6742   tree new_args;
6743   tree new_inner_args;
6744   int saved_unevaluated_operand;
6745   int saved_inhibit_evaluation_warnings;
6746
6747   /* When used as a boolean value, indicates whether this is a
6748      variadic template parameter list. Since it's an int, we can also
6749      subtract it from nparms to get the number of non-variadic
6750      parameters.  */
6751   int variadic_p = 0;
6752   int post_variadic_parms = 0;
6753
6754   if (args == error_mark_node)
6755     return error_mark_node;
6756
6757   nparms = TREE_VEC_LENGTH (parms);
6758
6759   /* Determine if there are any parameter packs.  */
6760   for (parm_idx = 0; parm_idx < nparms; ++parm_idx)
6761     {
6762       tree tparm = TREE_VALUE (TREE_VEC_ELT (parms, parm_idx));
6763       if (variadic_p)
6764         ++post_variadic_parms;
6765       if (template_parameter_pack_p (tparm))
6766         ++variadic_p;
6767     }
6768
6769   inner_args = INNERMOST_TEMPLATE_ARGS (args);
6770   /* If there are no parameters that follow a parameter pack, we need to
6771      expand any argument packs so that we can deduce a parameter pack from
6772      some non-packed args followed by an argument pack, as in variadic85.C.
6773      If there are such parameters, we need to leave argument packs intact
6774      so the arguments are assigned properly.  This can happen when dealing
6775      with a nested class inside a partial specialization of a class
6776      template, as in variadic92.C, or when deducing a template parameter pack
6777      from a sub-declarator, as in variadic114.C.  */
6778   if (!post_variadic_parms)
6779     inner_args = expand_template_argument_pack (inner_args);
6780
6781   nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
6782   if ((nargs > nparms && !variadic_p)
6783       || (nargs < nparms - variadic_p
6784           && require_all_args
6785           && (!use_default_args
6786               || (TREE_VEC_ELT (parms, nargs) != error_mark_node
6787                   && !TREE_PURPOSE (TREE_VEC_ELT (parms, nargs))))))
6788     {
6789       if (complain & tf_error)
6790         {
6791           if (variadic_p)
6792             {
6793               nparms -= variadic_p;
6794               error ("wrong number of template arguments "
6795                      "(%d, should be %d or more)", nargs, nparms);
6796             }
6797           else
6798              error ("wrong number of template arguments "
6799                     "(%d, should be %d)", nargs, nparms);
6800
6801           if (in_decl)
6802             error ("provided for %q+D", in_decl);
6803         }
6804
6805       return error_mark_node;
6806     }
6807
6808   /* We need to evaluate the template arguments, even though this
6809      template-id may be nested within a "sizeof".  */
6810   saved_unevaluated_operand = cp_unevaluated_operand;
6811   cp_unevaluated_operand = 0;
6812   saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
6813   c_inhibit_evaluation_warnings = 0;
6814   new_inner_args = make_tree_vec (nparms);
6815   new_args = add_outermost_template_args (args, new_inner_args);
6816   for (parm_idx = 0, arg_idx = 0; parm_idx < nparms; parm_idx++, arg_idx++)
6817     {
6818       tree arg;
6819       tree parm;
6820
6821       /* Get the Ith template parameter.  */
6822       parm = TREE_VEC_ELT (parms, parm_idx);
6823  
6824       if (parm == error_mark_node)
6825       {
6826         TREE_VEC_ELT (new_inner_args, arg_idx) = error_mark_node;
6827         continue;
6828       }
6829
6830       /* Calculate the next argument.  */
6831       if (arg_idx < nargs)
6832         arg = TREE_VEC_ELT (inner_args, arg_idx);
6833       else
6834         arg = NULL_TREE;
6835
6836       if (template_parameter_pack_p (TREE_VALUE (parm))
6837           && !(arg && ARGUMENT_PACK_P (arg)))
6838         {
6839           /* All remaining arguments will be placed in the
6840              template parameter pack PARM.  */
6841           arg = coerce_template_parameter_pack (parms, parm_idx, args, 
6842                                                 inner_args, arg_idx,
6843                                                 new_args, &lost,
6844                                                 in_decl, complain);
6845
6846           /* Store this argument.  */
6847           if (arg == error_mark_node)
6848             lost++;
6849           TREE_VEC_ELT (new_inner_args, parm_idx) = arg;
6850
6851           /* We are done with all of the arguments.  */
6852           arg_idx = nargs;
6853           
6854           continue;
6855         }
6856       else if (arg)
6857         {
6858           if (PACK_EXPANSION_P (arg))
6859             {
6860               /* We don't know how many args we have yet, just
6861                  use the unconverted ones for now.  */
6862               new_inner_args = args;
6863               break;
6864             }
6865         }
6866       else if (require_all_args)
6867         {
6868           /* There must be a default arg in this case.  */
6869           arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
6870                                      complain, in_decl);
6871           /* The position of the first default template argument,
6872              is also the number of non-defaulted arguments in NEW_INNER_ARGS.
6873              Record that.  */
6874           if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args))
6875             SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args, arg_idx);
6876         }
6877       else
6878         break;
6879
6880       if (arg == error_mark_node)
6881         {
6882           if (complain & tf_error)
6883             error ("template argument %d is invalid", arg_idx + 1);
6884         }
6885       else if (!arg)
6886         /* This only occurs if there was an error in the template
6887            parameter list itself (which we would already have
6888            reported) that we are trying to recover from, e.g., a class
6889            template with a parameter list such as
6890            template<typename..., typename>.  */
6891         ++lost;
6892       else
6893         arg = convert_template_argument (TREE_VALUE (parm),
6894                                          arg, new_args, complain, 
6895                                          parm_idx, in_decl);
6896
6897       if (arg == error_mark_node)
6898         lost++;
6899       TREE_VEC_ELT (new_inner_args, arg_idx) = arg;
6900     }
6901   cp_unevaluated_operand = saved_unevaluated_operand;
6902   c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
6903
6904   if (lost)
6905     return error_mark_node;
6906
6907 #ifdef ENABLE_CHECKING
6908   if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args))
6909     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args,
6910                                          TREE_VEC_LENGTH (new_inner_args));
6911 #endif
6912
6913   return new_inner_args;
6914 }
6915
6916 /* Returns 1 if template args OT and NT are equivalent.  */
6917
6918 static int
6919 template_args_equal (tree ot, tree nt)
6920 {
6921   if (nt == ot)
6922     return 1;
6923   if (nt == NULL_TREE || ot == NULL_TREE)
6924     return false;
6925
6926   if (TREE_CODE (nt) == TREE_VEC)
6927     /* For member templates */
6928     return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
6929   else if (PACK_EXPANSION_P (ot))
6930     return (PACK_EXPANSION_P (nt)
6931             && template_args_equal (PACK_EXPANSION_PATTERN (ot),
6932                                     PACK_EXPANSION_PATTERN (nt))
6933             && template_args_equal (PACK_EXPANSION_EXTRA_ARGS (ot),
6934                                     PACK_EXPANSION_EXTRA_ARGS (nt)));
6935   else if (ARGUMENT_PACK_P (ot))
6936     {
6937       int i, len;
6938       tree opack, npack;
6939
6940       if (!ARGUMENT_PACK_P (nt))
6941         return 0;
6942
6943       opack = ARGUMENT_PACK_ARGS (ot);
6944       npack = ARGUMENT_PACK_ARGS (nt);
6945       len = TREE_VEC_LENGTH (opack);
6946       if (TREE_VEC_LENGTH (npack) != len)
6947         return 0;
6948       for (i = 0; i < len; ++i)
6949         if (!template_args_equal (TREE_VEC_ELT (opack, i),
6950                                   TREE_VEC_ELT (npack, i)))
6951           return 0;
6952       return 1;
6953     }
6954   else if (ot && TREE_CODE (ot) == ARGUMENT_PACK_SELECT)
6955     {
6956       /* We get here probably because we are in the middle of substituting
6957          into the pattern of a pack expansion. In that case the
6958          ARGUMENT_PACK_SELECT temporarily replaces the pack argument we are
6959          interested in. So we want to use the initial pack argument for
6960          the comparison.  */
6961       ot = ARGUMENT_PACK_SELECT_FROM_PACK (ot);
6962       if (nt && TREE_CODE (nt) == ARGUMENT_PACK_SELECT)
6963         nt = ARGUMENT_PACK_SELECT_FROM_PACK (nt);
6964       return template_args_equal (ot, nt);
6965     }
6966   else if (TYPE_P (nt))
6967     return TYPE_P (ot) && same_type_p (ot, nt);
6968   else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
6969     return 0;
6970   else
6971     return cp_tree_equal (ot, nt);
6972 }
6973
6974 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets of
6975    template arguments.  Returns 0 otherwise, and updates OLDARG_PTR and
6976    NEWARG_PTR with the offending arguments if they are non-NULL.  */
6977
6978 static int
6979 comp_template_args_with_info (tree oldargs, tree newargs,
6980                               tree *oldarg_ptr, tree *newarg_ptr)
6981 {
6982   int i;
6983
6984   if (oldargs == newargs)
6985     return 1;
6986
6987   if (!oldargs || !newargs)
6988     return 0;
6989
6990   if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
6991     return 0;
6992
6993   for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
6994     {
6995       tree nt = TREE_VEC_ELT (newargs, i);
6996       tree ot = TREE_VEC_ELT (oldargs, i);
6997
6998       if (! template_args_equal (ot, nt))
6999         {
7000           if (oldarg_ptr != NULL)
7001             *oldarg_ptr = ot;
7002           if (newarg_ptr != NULL)
7003             *newarg_ptr = nt;
7004           return 0;
7005         }
7006     }
7007   return 1;
7008 }
7009
7010 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
7011    of template arguments.  Returns 0 otherwise.  */
7012
7013 int
7014 comp_template_args (tree oldargs, tree newargs)
7015 {
7016   return comp_template_args_with_info (oldargs, newargs, NULL, NULL);
7017 }
7018
7019 static void
7020 add_pending_template (tree d)
7021 {
7022   tree ti = (TYPE_P (d)
7023              ? CLASSTYPE_TEMPLATE_INFO (d)
7024              : DECL_TEMPLATE_INFO (d));
7025   struct pending_template *pt;
7026   int level;
7027
7028   if (TI_PENDING_TEMPLATE_FLAG (ti))
7029     return;
7030
7031   /* We are called both from instantiate_decl, where we've already had a
7032      tinst_level pushed, and instantiate_template, where we haven't.
7033      Compensate.  */
7034   level = !current_tinst_level || current_tinst_level->decl != d;
7035
7036   if (level)
7037     push_tinst_level (d);
7038
7039   pt = ggc_alloc_pending_template ();
7040   pt->next = NULL;
7041   pt->tinst = current_tinst_level;
7042   if (last_pending_template)
7043     last_pending_template->next = pt;
7044   else
7045     pending_templates = pt;
7046
7047   last_pending_template = pt;
7048
7049   TI_PENDING_TEMPLATE_FLAG (ti) = 1;
7050
7051   if (level)
7052     pop_tinst_level ();
7053 }
7054
7055
7056 /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
7057    ARGLIST.  Valid choices for FNS are given in the cp-tree.def
7058    documentation for TEMPLATE_ID_EXPR.  */
7059
7060 tree
7061 lookup_template_function (tree fns, tree arglist)
7062 {
7063   tree type;
7064
7065   if (fns == error_mark_node || arglist == error_mark_node)
7066     return error_mark_node;
7067
7068   gcc_assert (!arglist || TREE_CODE (arglist) == TREE_VEC);
7069
7070   if (!is_overloaded_fn (fns) && TREE_CODE (fns) != IDENTIFIER_NODE)
7071     {
7072       error ("%q#D is not a function template", fns);
7073       return error_mark_node;
7074     }
7075
7076   if (BASELINK_P (fns))
7077     {
7078       BASELINK_FUNCTIONS (fns) = build2 (TEMPLATE_ID_EXPR,
7079                                          unknown_type_node,
7080                                          BASELINK_FUNCTIONS (fns),
7081                                          arglist);
7082       return fns;
7083     }
7084
7085   type = TREE_TYPE (fns);
7086   if (TREE_CODE (fns) == OVERLOAD || !type)
7087     type = unknown_type_node;
7088
7089   return build2 (TEMPLATE_ID_EXPR, type, fns, arglist);
7090 }
7091
7092 /* Within the scope of a template class S<T>, the name S gets bound
7093    (in build_self_reference) to a TYPE_DECL for the class, not a
7094    TEMPLATE_DECL.  If DECL is a TYPE_DECL for current_class_type,
7095    or one of its enclosing classes, and that type is a template,
7096    return the associated TEMPLATE_DECL.  Otherwise, the original
7097    DECL is returned.
7098
7099    Also handle the case when DECL is a TREE_LIST of ambiguous
7100    injected-class-names from different bases.  */
7101
7102 tree
7103 maybe_get_template_decl_from_type_decl (tree decl)
7104 {
7105   if (decl == NULL_TREE)
7106     return decl;
7107
7108   /* DR 176: A lookup that finds an injected-class-name (10.2
7109      [class.member.lookup]) can result in an ambiguity in certain cases
7110      (for example, if it is found in more than one base class). If all of
7111      the injected-class-names that are found refer to specializations of
7112      the same class template, and if the name is followed by a
7113      template-argument-list, the reference refers to the class template
7114      itself and not a specialization thereof, and is not ambiguous.  */
7115   if (TREE_CODE (decl) == TREE_LIST)
7116     {
7117       tree t, tmpl = NULL_TREE;
7118       for (t = decl; t; t = TREE_CHAIN (t))
7119         {
7120           tree elt = maybe_get_template_decl_from_type_decl (TREE_VALUE (t));
7121           if (!tmpl)
7122             tmpl = elt;
7123           else if (tmpl != elt)
7124             break;
7125         }
7126       if (tmpl && t == NULL_TREE)
7127         return tmpl;
7128       else
7129         return decl;
7130     }
7131
7132   return (decl != NULL_TREE
7133           && DECL_SELF_REFERENCE_P (decl)
7134           && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
7135     ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
7136 }
7137
7138 /* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of
7139    parameters, find the desired type.
7140
7141    D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
7142
7143    IN_DECL, if non-NULL, is the template declaration we are trying to
7144    instantiate.
7145
7146    If ENTERING_SCOPE is nonzero, we are about to enter the scope of
7147    the class we are looking up.
7148
7149    Issue error and warning messages under control of COMPLAIN.
7150
7151    If the template class is really a local class in a template
7152    function, then the FUNCTION_CONTEXT is the function in which it is
7153    being instantiated.
7154
7155    ??? Note that this function is currently called *twice* for each
7156    template-id: the first time from the parser, while creating the
7157    incomplete type (finish_template_type), and the second type during the
7158    real instantiation (instantiate_template_class). This is surely something
7159    that we want to avoid. It also causes some problems with argument
7160    coercion (see convert_nontype_argument for more information on this).  */
7161
7162 static tree
7163 lookup_template_class_1 (tree d1, tree arglist, tree in_decl, tree context,
7164                          int entering_scope, tsubst_flags_t complain)
7165 {
7166   tree templ = NULL_TREE, parmlist;
7167   tree t;
7168   void **slot;
7169   spec_entry *entry;
7170   spec_entry elt;
7171   hashval_t hash;
7172
7173   if (TREE_CODE (d1) == IDENTIFIER_NODE)
7174     {
7175       tree value = innermost_non_namespace_value (d1);
7176       if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
7177         templ = value;
7178       else
7179         {
7180           if (context)
7181             push_decl_namespace (context);
7182           templ = lookup_name (d1);
7183           templ = maybe_get_template_decl_from_type_decl (templ);
7184           if (context)
7185             pop_decl_namespace ();
7186         }
7187       if (templ)
7188         context = DECL_CONTEXT (templ);
7189     }
7190   else if (TREE_CODE (d1) == TYPE_DECL && MAYBE_CLASS_TYPE_P (TREE_TYPE (d1)))
7191     {
7192       tree type = TREE_TYPE (d1);
7193
7194       /* If we are declaring a constructor, say A<T>::A<T>, we will get
7195          an implicit typename for the second A.  Deal with it.  */
7196       if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
7197         type = TREE_TYPE (type);
7198
7199       if (CLASSTYPE_TEMPLATE_INFO (type))
7200         {
7201           templ = CLASSTYPE_TI_TEMPLATE (type);
7202           d1 = DECL_NAME (templ);
7203         }
7204     }
7205   else if (TREE_CODE (d1) == ENUMERAL_TYPE
7206            || (TYPE_P (d1) && MAYBE_CLASS_TYPE_P (d1)))
7207     {
7208       templ = TYPE_TI_TEMPLATE (d1);
7209       d1 = DECL_NAME (templ);
7210     }
7211   else if (TREE_CODE (d1) == TEMPLATE_DECL
7212            && DECL_TEMPLATE_RESULT (d1)
7213            && TREE_CODE (DECL_TEMPLATE_RESULT (d1)) == TYPE_DECL)
7214     {
7215       templ = d1;
7216       d1 = DECL_NAME (templ);
7217       context = DECL_CONTEXT (templ);
7218     }
7219
7220   /* Issue an error message if we didn't find a template.  */
7221   if (! templ)
7222     {
7223       if (complain & tf_error)
7224         error ("%qT is not a template", d1);
7225       return error_mark_node;
7226     }
7227
7228   if (TREE_CODE (templ) != TEMPLATE_DECL
7229          /* Make sure it's a user visible template, if it was named by
7230             the user.  */
7231       || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (templ)
7232           && !PRIMARY_TEMPLATE_P (templ)))
7233     {
7234       if (complain & tf_error)
7235         {
7236           error ("non-template type %qT used as a template", d1);
7237           if (in_decl)
7238             error ("for template declaration %q+D", in_decl);
7239         }
7240       return error_mark_node;
7241     }
7242
7243   complain &= ~tf_user;
7244
7245   if (DECL_TEMPLATE_TEMPLATE_PARM_P (templ))
7246     {
7247       /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
7248          template arguments */
7249
7250       tree parm;
7251       tree arglist2;
7252       tree outer;
7253
7254       parmlist = DECL_INNERMOST_TEMPLATE_PARMS (templ);
7255
7256       /* Consider an example where a template template parameter declared as
7257
7258            template <class T, class U = std::allocator<T> > class TT
7259
7260          The template parameter level of T and U are one level larger than
7261          of TT.  To proper process the default argument of U, say when an
7262          instantiation `TT<int>' is seen, we need to build the full
7263          arguments containing {int} as the innermost level.  Outer levels,
7264          available when not appearing as default template argument, can be
7265          obtained from the arguments of the enclosing template.
7266
7267          Suppose that TT is later substituted with std::vector.  The above
7268          instantiation is `TT<int, std::allocator<T> >' with TT at
7269          level 1, and T at level 2, while the template arguments at level 1
7270          becomes {std::vector} and the inner level 2 is {int}.  */
7271
7272       outer = DECL_CONTEXT (templ);
7273       if (outer)
7274         outer = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (outer)));
7275       else if (current_template_parms)
7276         /* This is an argument of the current template, so we haven't set
7277            DECL_CONTEXT yet.  */
7278         outer = current_template_args ();
7279
7280       if (outer)
7281         arglist = add_to_template_args (outer, arglist);
7282
7283       arglist2 = coerce_template_parms (parmlist, arglist, templ,
7284                                         complain,
7285                                         /*require_all_args=*/true,
7286                                         /*use_default_args=*/true);
7287       if (arglist2 == error_mark_node
7288           || (!uses_template_parms (arglist2)
7289               && check_instantiated_args (templ, arglist2, complain)))
7290         return error_mark_node;
7291
7292       parm = bind_template_template_parm (TREE_TYPE (templ), arglist2);
7293       return parm;
7294     }
7295   else
7296     {
7297       tree template_type = TREE_TYPE (templ);
7298       tree gen_tmpl;
7299       tree type_decl;
7300       tree found = NULL_TREE;
7301       int arg_depth;
7302       int parm_depth;
7303       int is_dependent_type;
7304       int use_partial_inst_tmpl = false;
7305
7306       if (template_type == error_mark_node)
7307         /* An error occured while building the template TEMPL, and a
7308            diagnostic has most certainly been emitted for that
7309            already.  Let's propagate that error.  */
7310         return error_mark_node;
7311
7312       gen_tmpl = most_general_template (templ);
7313       parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
7314       parm_depth = TMPL_PARMS_DEPTH (parmlist);
7315       arg_depth = TMPL_ARGS_DEPTH (arglist);
7316
7317       if (arg_depth == 1 && parm_depth > 1)
7318         {
7319           /* We've been given an incomplete set of template arguments.
7320              For example, given:
7321
7322                template <class T> struct S1 {
7323                  template <class U> struct S2 {};
7324                  template <class U> struct S2<U*> {};
7325                 };
7326
7327              we will be called with an ARGLIST of `U*', but the
7328              TEMPLATE will be `template <class T> template
7329              <class U> struct S1<T>::S2'.  We must fill in the missing
7330              arguments.  */
7331           arglist
7332             = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (templ)),
7333                                            arglist);
7334           arg_depth = TMPL_ARGS_DEPTH (arglist);
7335         }
7336
7337       /* Now we should have enough arguments.  */
7338       gcc_assert (parm_depth == arg_depth);
7339
7340       /* From here on, we're only interested in the most general
7341          template.  */
7342
7343       /* Calculate the BOUND_ARGS.  These will be the args that are
7344          actually tsubst'd into the definition to create the
7345          instantiation.  */
7346       if (parm_depth > 1)
7347         {
7348           /* We have multiple levels of arguments to coerce, at once.  */
7349           int i;
7350           int saved_depth = TMPL_ARGS_DEPTH (arglist);
7351
7352           tree bound_args = make_tree_vec (parm_depth);
7353
7354           for (i = saved_depth,
7355                  t = DECL_TEMPLATE_PARMS (gen_tmpl);
7356                i > 0 && t != NULL_TREE;
7357                --i, t = TREE_CHAIN (t))
7358             {
7359               tree a;
7360               if (i == saved_depth)
7361                 a = coerce_template_parms (TREE_VALUE (t),
7362                                            arglist, gen_tmpl,
7363                                            complain,
7364                                            /*require_all_args=*/true,
7365                                            /*use_default_args=*/true);
7366               else
7367                 /* Outer levels should have already been coerced.  */
7368                 a = TMPL_ARGS_LEVEL (arglist, i);
7369
7370               /* Don't process further if one of the levels fails.  */
7371               if (a == error_mark_node)
7372                 {
7373                   /* Restore the ARGLIST to its full size.  */
7374                   TREE_VEC_LENGTH (arglist) = saved_depth;
7375                   return error_mark_node;
7376                 }
7377
7378               SET_TMPL_ARGS_LEVEL (bound_args, i, a);
7379
7380               /* We temporarily reduce the length of the ARGLIST so
7381                  that coerce_template_parms will see only the arguments
7382                  corresponding to the template parameters it is
7383                  examining.  */
7384               TREE_VEC_LENGTH (arglist)--;
7385             }
7386
7387           /* Restore the ARGLIST to its full size.  */
7388           TREE_VEC_LENGTH (arglist) = saved_depth;
7389
7390           arglist = bound_args;
7391         }
7392       else
7393         arglist
7394           = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
7395                                    INNERMOST_TEMPLATE_ARGS (arglist),
7396                                    gen_tmpl,
7397                                    complain,
7398                                    /*require_all_args=*/true,
7399                                    /*use_default_args=*/true);
7400
7401       if (arglist == error_mark_node)
7402         /* We were unable to bind the arguments.  */
7403         return error_mark_node;
7404
7405       /* In the scope of a template class, explicit references to the
7406          template class refer to the type of the template, not any
7407          instantiation of it.  For example, in:
7408
7409            template <class T> class C { void f(C<T>); }
7410
7411          the `C<T>' is just the same as `C'.  Outside of the
7412          class, however, such a reference is an instantiation.  */
7413       if ((entering_scope
7414            || !PRIMARY_TEMPLATE_P (gen_tmpl)
7415            || currently_open_class (template_type))
7416           /* comp_template_args is expensive, check it last.  */
7417           && comp_template_args (TYPE_TI_ARGS (template_type),
7418                                  arglist))
7419         return template_type;
7420
7421       /* If we already have this specialization, return it.  */
7422       elt.tmpl = gen_tmpl;
7423       elt.args = arglist;
7424       hash = hash_specialization (&elt);
7425       entry = (spec_entry *) htab_find_with_hash (type_specializations,
7426                                                   &elt, hash);
7427
7428       if (entry)
7429         return entry->spec;
7430
7431       is_dependent_type = uses_template_parms (arglist);
7432
7433       /* If the deduced arguments are invalid, then the binding
7434          failed.  */
7435       if (!is_dependent_type
7436           && check_instantiated_args (gen_tmpl,
7437                                       INNERMOST_TEMPLATE_ARGS (arglist),
7438                                       complain))
7439         return error_mark_node;
7440
7441       if (!is_dependent_type
7442           && !PRIMARY_TEMPLATE_P (gen_tmpl)
7443           && !LAMBDA_TYPE_P (TREE_TYPE (gen_tmpl))
7444           && TREE_CODE (CP_DECL_CONTEXT (gen_tmpl)) == NAMESPACE_DECL)
7445         {
7446           found = xref_tag_from_type (TREE_TYPE (gen_tmpl),
7447                                       DECL_NAME (gen_tmpl),
7448                                       /*tag_scope=*/ts_global);
7449           return found;
7450         }
7451
7452       context = tsubst (DECL_CONTEXT (gen_tmpl), arglist,
7453                         complain, in_decl);
7454       if (!context)
7455         context = global_namespace;
7456
7457       /* Create the type.  */
7458       if (TREE_CODE (template_type) == ENUMERAL_TYPE)
7459         {
7460           if (!is_dependent_type)
7461             {
7462               set_current_access_from_decl (TYPE_NAME (template_type));
7463               t = start_enum (TYPE_IDENTIFIER (template_type), NULL_TREE,
7464                               tsubst (ENUM_UNDERLYING_TYPE (template_type),
7465                                       arglist, complain, in_decl),
7466                               SCOPED_ENUM_P (template_type), NULL);
7467             }
7468           else
7469             {
7470               /* We don't want to call start_enum for this type, since
7471                  the values for the enumeration constants may involve
7472                  template parameters.  And, no one should be interested
7473                  in the enumeration constants for such a type.  */
7474               t = cxx_make_type (ENUMERAL_TYPE);
7475               SET_SCOPED_ENUM_P (t, SCOPED_ENUM_P (template_type));
7476             }
7477           SET_OPAQUE_ENUM_P (t, OPAQUE_ENUM_P (template_type));
7478           ENUM_FIXED_UNDERLYING_TYPE_P (t)
7479             = ENUM_FIXED_UNDERLYING_TYPE_P (template_type);
7480         }
7481       else if (DECL_ALIAS_TEMPLATE_P (gen_tmpl))
7482         {
7483           /* The user referred to a specialization of an alias
7484             template represented by GEN_TMPL.
7485
7486             [temp.alias]/2 says:
7487
7488                 When a template-id refers to the specialization of an
7489                 alias template, it is equivalent to the associated
7490                 type obtained by substitution of its
7491                 template-arguments for the template-parameters in the
7492                 type-id of the alias template.  */
7493
7494           t = tsubst (TREE_TYPE (gen_tmpl), arglist, complain, in_decl);
7495           /* Note that the call above (by indirectly calling
7496              register_specialization in tsubst_decl) registers the
7497              TYPE_DECL representing the specialization of the alias
7498              template.  So next time someone substitutes ARGLIST for
7499              the template parms into the alias template (GEN_TMPL),
7500              she'll get that TYPE_DECL back.  */
7501
7502           if (t == error_mark_node)
7503             return t;
7504         }
7505       else if (CLASS_TYPE_P (template_type))
7506         {
7507           t = make_class_type (TREE_CODE (template_type));
7508           CLASSTYPE_DECLARED_CLASS (t)
7509             = CLASSTYPE_DECLARED_CLASS (template_type);
7510           SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
7511           TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
7512
7513           /* A local class.  Make sure the decl gets registered properly.  */
7514           if (context == current_function_decl)
7515             pushtag (DECL_NAME (gen_tmpl), t, /*tag_scope=*/ts_current);
7516
7517           if (comp_template_args (CLASSTYPE_TI_ARGS (template_type), arglist))
7518             /* This instantiation is another name for the primary
7519                template type. Set the TYPE_CANONICAL field
7520                appropriately. */
7521             TYPE_CANONICAL (t) = template_type;
7522           else if (any_template_arguments_need_structural_equality_p (arglist))
7523             /* Some of the template arguments require structural
7524                equality testing, so this template class requires
7525                structural equality testing. */
7526             SET_TYPE_STRUCTURAL_EQUALITY (t);
7527         }
7528       else
7529         gcc_unreachable ();
7530
7531       /* If we called start_enum or pushtag above, this information
7532          will already be set up.  */
7533       if (!TYPE_NAME (t))
7534         {
7535           TYPE_CONTEXT (t) = FROB_CONTEXT (context);
7536
7537           type_decl = create_implicit_typedef (DECL_NAME (gen_tmpl), t);
7538           DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
7539           DECL_SOURCE_LOCATION (type_decl)
7540             = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
7541         }
7542       else
7543         type_decl = TYPE_NAME (t);
7544
7545       if (CLASS_TYPE_P (template_type))
7546         {
7547           TREE_PRIVATE (type_decl)
7548             = TREE_PRIVATE (TYPE_STUB_DECL (template_type));
7549           TREE_PROTECTED (type_decl)
7550             = TREE_PROTECTED (TYPE_STUB_DECL (template_type));
7551           if (CLASSTYPE_VISIBILITY_SPECIFIED (template_type))
7552             {
7553               DECL_VISIBILITY_SPECIFIED (type_decl) = 1;
7554               DECL_VISIBILITY (type_decl) = CLASSTYPE_VISIBILITY (template_type);
7555             }
7556         }
7557
7558       /* Let's consider the explicit specialization of a member
7559          of a class template specialization that is implicitely instantiated,
7560          e.g.:
7561              template<class T>
7562              struct S
7563              {
7564                template<class U> struct M {}; //#0
7565              };
7566
7567              template<>
7568              template<>
7569              struct S<int>::M<char> //#1
7570              {
7571                int i;
7572              };
7573         [temp.expl.spec]/4 says this is valid.
7574
7575         In this case, when we write:
7576         S<int>::M<char> m;
7577
7578         M is instantiated from the CLASSTYPE_TI_TEMPLATE of #1, not from
7579         the one of #0.
7580
7581         When we encounter #1, we want to store the partial instantiation
7582         of M (template<class T> S<int>::M<T>) in it's CLASSTYPE_TI_TEMPLATE.
7583
7584         For all cases other than this "explicit specialization of member of a
7585         class template", we just want to store the most general template into
7586         the CLASSTYPE_TI_TEMPLATE of M.
7587
7588         This case of "explicit specialization of member of a class template"
7589         only happens when:
7590         1/ the enclosing class is an instantiation of, and therefore not
7591         the same as, the context of the most general template, and
7592         2/ we aren't looking at the partial instantiation itself, i.e.
7593         the innermost arguments are not the same as the innermost parms of
7594         the most general template.
7595
7596         So it's only when 1/ and 2/ happens that we want to use the partial
7597         instantiation of the member template in lieu of its most general
7598         template.  */
7599
7600       if (PRIMARY_TEMPLATE_P (gen_tmpl)
7601           && TMPL_ARGS_HAVE_MULTIPLE_LEVELS (arglist)
7602           /* the enclosing class must be an instantiation...  */
7603           && CLASS_TYPE_P (context)
7604           && !same_type_p (context, DECL_CONTEXT (gen_tmpl)))
7605         {
7606           tree partial_inst_args;
7607           TREE_VEC_LENGTH (arglist)--;
7608           ++processing_template_decl;
7609           partial_inst_args =
7610             tsubst (INNERMOST_TEMPLATE_ARGS
7611                         (TYPE_TI_ARGS (TREE_TYPE (gen_tmpl))),
7612                     arglist, complain, NULL_TREE);
7613           --processing_template_decl;
7614           TREE_VEC_LENGTH (arglist)++;
7615           use_partial_inst_tmpl =
7616             /*...and we must not be looking at the partial instantiation
7617              itself. */
7618             !comp_template_args (INNERMOST_TEMPLATE_ARGS (arglist),
7619                                  partial_inst_args);
7620         }
7621
7622       if (!use_partial_inst_tmpl)
7623         /* This case is easy; there are no member templates involved.  */
7624         found = gen_tmpl;
7625       else
7626         {
7627           /* This is a full instantiation of a member template.  Find
7628              the partial instantiation of which this is an instance.  */
7629
7630           /* Temporarily reduce by one the number of levels in the ARGLIST
7631              so as to avoid comparing the last set of arguments.  */
7632           TREE_VEC_LENGTH (arglist)--;
7633           found = tsubst (gen_tmpl, arglist, complain, NULL_TREE);
7634           TREE_VEC_LENGTH (arglist)++;
7635           /* FOUND is either a proper class type, or an alias
7636              template specialization.  In the later case, it's a
7637              TYPE_DECL, resulting from the substituting of arguments
7638              for parameters in the TYPE_DECL of the alias template
7639              done earlier.  So be careful while getting the template
7640              of FOUND.  */
7641           found = TREE_CODE (found) == TYPE_DECL
7642             ? TYPE_TI_TEMPLATE (TREE_TYPE (found))
7643             : CLASSTYPE_TI_TEMPLATE (found);
7644         }
7645
7646       SET_TYPE_TEMPLATE_INFO (t, build_template_info (found, arglist));
7647
7648       elt.spec = t;
7649       slot = htab_find_slot_with_hash (type_specializations,
7650                                        &elt, hash, INSERT);
7651       entry = ggc_alloc_spec_entry ();
7652       *entry = elt;
7653       *slot = entry;
7654
7655       /* Note this use of the partial instantiation so we can check it
7656          later in maybe_process_partial_specialization.  */
7657       DECL_TEMPLATE_INSTANTIATIONS (templ)
7658         = tree_cons (arglist, t,
7659                      DECL_TEMPLATE_INSTANTIATIONS (templ));
7660
7661       if (TREE_CODE (t) == ENUMERAL_TYPE && !is_dependent_type)
7662         /* Now that the type has been registered on the instantiations
7663            list, we set up the enumerators.  Because the enumeration
7664            constants may involve the enumeration type itself, we make
7665            sure to register the type first, and then create the
7666            constants.  That way, doing tsubst_expr for the enumeration
7667            constants won't result in recursive calls here; we'll find
7668            the instantiation and exit above.  */
7669         tsubst_enum (template_type, t, arglist);
7670
7671       if (CLASS_TYPE_P (template_type) && is_dependent_type)
7672         /* If the type makes use of template parameters, the
7673            code that generates debugging information will crash.  */
7674         DECL_IGNORED_P (TYPE_STUB_DECL (t)) = 1;
7675
7676       /* Possibly limit visibility based on template args.  */
7677       TREE_PUBLIC (type_decl) = 1;
7678       determine_visibility (type_decl);
7679
7680       return t;
7681     }
7682 }
7683
7684 /* Wrapper for lookup_template_class_1.  */
7685
7686 tree
7687 lookup_template_class (tree d1, tree arglist, tree in_decl, tree context,
7688                        int entering_scope, tsubst_flags_t complain)
7689 {
7690   tree ret;
7691   timevar_push (TV_TEMPLATE_INST);
7692   ret = lookup_template_class_1 (d1, arglist, in_decl, context,
7693                                  entering_scope, complain);
7694   timevar_pop (TV_TEMPLATE_INST);
7695   return ret;
7696 }
7697 \f
7698 struct pair_fn_data
7699 {
7700   tree_fn_t fn;
7701   void *data;
7702   /* True when we should also visit template parameters that occur in
7703      non-deduced contexts.  */
7704   bool include_nondeduced_p;
7705   struct pointer_set_t *visited;
7706 };
7707
7708 /* Called from for_each_template_parm via walk_tree.  */
7709
7710 static tree
7711 for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
7712 {
7713   tree t = *tp;
7714   struct pair_fn_data *pfd = (struct pair_fn_data *) d;
7715   tree_fn_t fn = pfd->fn;
7716   void *data = pfd->data;
7717
7718   if (TYPE_P (t)
7719       && (pfd->include_nondeduced_p || TREE_CODE (t) != TYPENAME_TYPE)
7720       && for_each_template_parm (TYPE_CONTEXT (t), fn, data, pfd->visited,
7721                                  pfd->include_nondeduced_p))
7722     return error_mark_node;
7723
7724   switch (TREE_CODE (t))
7725     {
7726     case RECORD_TYPE:
7727       if (TYPE_PTRMEMFUNC_P (t))
7728         break;
7729       /* Fall through.  */
7730
7731     case UNION_TYPE:
7732     case ENUMERAL_TYPE:
7733       if (!TYPE_TEMPLATE_INFO (t))
7734         *walk_subtrees = 0;
7735       else if (for_each_template_parm (TI_ARGS (TYPE_TEMPLATE_INFO (t)),
7736                                        fn, data, pfd->visited, 
7737                                        pfd->include_nondeduced_p))
7738         return error_mark_node;
7739       break;
7740
7741     case INTEGER_TYPE:
7742       if (for_each_template_parm (TYPE_MIN_VALUE (t),
7743                                   fn, data, pfd->visited, 
7744                                   pfd->include_nondeduced_p)
7745           || for_each_template_parm (TYPE_MAX_VALUE (t),
7746                                      fn, data, pfd->visited,
7747                                      pfd->include_nondeduced_p))
7748         return error_mark_node;
7749       break;
7750
7751     case METHOD_TYPE:
7752       /* Since we're not going to walk subtrees, we have to do this
7753          explicitly here.  */
7754       if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data,
7755                                   pfd->visited, pfd->include_nondeduced_p))
7756         return error_mark_node;
7757       /* Fall through.  */
7758
7759     case FUNCTION_TYPE:
7760       /* Check the return type.  */
7761       if (for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
7762                                   pfd->include_nondeduced_p))
7763         return error_mark_node;
7764
7765       /* Check the parameter types.  Since default arguments are not
7766          instantiated until they are needed, the TYPE_ARG_TYPES may
7767          contain expressions that involve template parameters.  But,
7768          no-one should be looking at them yet.  And, once they're
7769          instantiated, they don't contain template parameters, so
7770          there's no point in looking at them then, either.  */
7771       {
7772         tree parm;
7773
7774         for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
7775           if (for_each_template_parm (TREE_VALUE (parm), fn, data,
7776                                       pfd->visited, pfd->include_nondeduced_p))
7777             return error_mark_node;
7778
7779         /* Since we've already handled the TYPE_ARG_TYPES, we don't
7780            want walk_tree walking into them itself.  */
7781         *walk_subtrees = 0;
7782       }
7783       break;
7784
7785     case TYPEOF_TYPE:
7786     case UNDERLYING_TYPE:
7787       if (pfd->include_nondeduced_p
7788           && for_each_template_parm (TYPE_FIELDS (t), fn, data,
7789                                      pfd->visited, 
7790                                      pfd->include_nondeduced_p))
7791         return error_mark_node;
7792       break;
7793
7794     case FUNCTION_DECL:
7795     case VAR_DECL:
7796       if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
7797           && for_each_template_parm (DECL_TI_ARGS (t), fn, data,
7798                                      pfd->visited, pfd->include_nondeduced_p))
7799         return error_mark_node;
7800       /* Fall through.  */
7801
7802     case PARM_DECL:
7803     case CONST_DECL:
7804       if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t)
7805           && for_each_template_parm (DECL_INITIAL (t), fn, data,
7806                                      pfd->visited, pfd->include_nondeduced_p))
7807         return error_mark_node;
7808       if (DECL_CONTEXT (t)
7809           && pfd->include_nondeduced_p
7810           && for_each_template_parm (DECL_CONTEXT (t), fn, data,
7811                                      pfd->visited, pfd->include_nondeduced_p))
7812         return error_mark_node;
7813       break;
7814
7815     case BOUND_TEMPLATE_TEMPLATE_PARM:
7816       /* Record template parameters such as `T' inside `TT<T>'.  */
7817       if (for_each_template_parm (TYPE_TI_ARGS (t), fn, data, pfd->visited,
7818                                   pfd->include_nondeduced_p))
7819         return error_mark_node;
7820       /* Fall through.  */
7821
7822     case TEMPLATE_TEMPLATE_PARM:
7823     case TEMPLATE_TYPE_PARM:
7824     case TEMPLATE_PARM_INDEX:
7825       if (fn && (*fn)(t, data))
7826         return error_mark_node;
7827       else if (!fn)
7828         return error_mark_node;
7829       break;
7830
7831     case TEMPLATE_DECL:
7832       /* A template template parameter is encountered.  */
7833       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
7834           && for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
7835                                      pfd->include_nondeduced_p))
7836         return error_mark_node;
7837
7838       /* Already substituted template template parameter */
7839       *walk_subtrees = 0;
7840       break;
7841
7842     case TYPENAME_TYPE:
7843       if (!fn
7844           || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn,
7845                                      data, pfd->visited, 
7846                                      pfd->include_nondeduced_p))
7847         return error_mark_node;
7848       break;
7849
7850     case CONSTRUCTOR:
7851       if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
7852           && pfd->include_nondeduced_p
7853           && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
7854                                      (TREE_TYPE (t)), fn, data,
7855                                      pfd->visited, pfd->include_nondeduced_p))
7856         return error_mark_node;
7857       break;
7858
7859     case INDIRECT_REF:
7860     case COMPONENT_REF:
7861       /* If there's no type, then this thing must be some expression
7862          involving template parameters.  */
7863       if (!fn && !TREE_TYPE (t))
7864         return error_mark_node;
7865       break;
7866
7867     case MODOP_EXPR:
7868     case CAST_EXPR:
7869     case IMPLICIT_CONV_EXPR:
7870     case REINTERPRET_CAST_EXPR:
7871     case CONST_CAST_EXPR:
7872     case STATIC_CAST_EXPR:
7873     case DYNAMIC_CAST_EXPR:
7874     case ARROW_EXPR:
7875     case DOTSTAR_EXPR:
7876     case TYPEID_EXPR:
7877     case PSEUDO_DTOR_EXPR:
7878       if (!fn)
7879         return error_mark_node;
7880       break;
7881
7882     default:
7883       break;
7884     }
7885
7886   /* We didn't find any template parameters we liked.  */
7887   return NULL_TREE;
7888 }
7889
7890 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
7891    BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
7892    call FN with the parameter and the DATA.
7893    If FN returns nonzero, the iteration is terminated, and
7894    for_each_template_parm returns 1.  Otherwise, the iteration
7895    continues.  If FN never returns a nonzero value, the value
7896    returned by for_each_template_parm is 0.  If FN is NULL, it is
7897    considered to be the function which always returns 1.
7898
7899    If INCLUDE_NONDEDUCED_P, then this routine will also visit template
7900    parameters that occur in non-deduced contexts.  When false, only
7901    visits those template parameters that can be deduced.  */
7902
7903 static int
7904 for_each_template_parm (tree t, tree_fn_t fn, void* data,
7905                         struct pointer_set_t *visited,
7906                         bool include_nondeduced_p)
7907 {
7908   struct pair_fn_data pfd;
7909   int result;
7910
7911   /* Set up.  */
7912   pfd.fn = fn;
7913   pfd.data = data;
7914   pfd.include_nondeduced_p = include_nondeduced_p;
7915
7916   /* Walk the tree.  (Conceptually, we would like to walk without
7917      duplicates, but for_each_template_parm_r recursively calls
7918      for_each_template_parm, so we would need to reorganize a fair
7919      bit to use walk_tree_without_duplicates, so we keep our own
7920      visited list.)  */
7921   if (visited)
7922     pfd.visited = visited;
7923   else
7924     pfd.visited = pointer_set_create ();
7925   result = cp_walk_tree (&t,
7926                          for_each_template_parm_r,
7927                          &pfd,
7928                          pfd.visited) != NULL_TREE;
7929
7930   /* Clean up.  */
7931   if (!visited)
7932     {
7933       pointer_set_destroy (pfd.visited);
7934       pfd.visited = 0;
7935     }
7936
7937   return result;
7938 }
7939
7940 /* Returns true if T depends on any template parameter.  */
7941
7942 int
7943 uses_template_parms (tree t)
7944 {
7945   bool dependent_p;
7946   int saved_processing_template_decl;
7947
7948   saved_processing_template_decl = processing_template_decl;
7949   if (!saved_processing_template_decl)
7950     processing_template_decl = 1;
7951   if (TYPE_P (t))
7952     dependent_p = dependent_type_p (t);
7953   else if (TREE_CODE (t) == TREE_VEC)
7954     dependent_p = any_dependent_template_arguments_p (t);
7955   else if (TREE_CODE (t) == TREE_LIST)
7956     dependent_p = (uses_template_parms (TREE_VALUE (t))
7957                    || uses_template_parms (TREE_CHAIN (t)));
7958   else if (TREE_CODE (t) == TYPE_DECL)
7959     dependent_p = dependent_type_p (TREE_TYPE (t));
7960   else if (DECL_P (t)
7961            || EXPR_P (t)
7962            || TREE_CODE (t) == TEMPLATE_PARM_INDEX
7963            || TREE_CODE (t) == OVERLOAD
7964            || BASELINK_P (t)
7965            || TREE_CODE (t) == IDENTIFIER_NODE
7966            || TREE_CODE (t) == TRAIT_EXPR
7967            || TREE_CODE (t) == CONSTRUCTOR
7968            || CONSTANT_CLASS_P (t))
7969     dependent_p = (type_dependent_expression_p (t)
7970                    || value_dependent_expression_p (t));
7971   else
7972     {
7973       gcc_assert (t == error_mark_node);
7974       dependent_p = false;
7975     }
7976
7977   processing_template_decl = saved_processing_template_decl;
7978
7979   return dependent_p;
7980 }
7981
7982 /* Returns true if T depends on any template parameter with level LEVEL.  */
7983
7984 int
7985 uses_template_parms_level (tree t, int level)
7986 {
7987   return for_each_template_parm (t, template_parm_this_level_p, &level, NULL,
7988                                  /*include_nondeduced_p=*/true);
7989 }
7990
7991 /* Returns TRUE iff INST is an instantiation we don't need to do in an
7992    ill-formed translation unit, i.e. a variable or function that isn't
7993    usable in a constant expression.  */
7994
7995 static inline bool
7996 neglectable_inst_p (tree d)
7997 {
7998   return (DECL_P (d)
7999           && !(TREE_CODE (d) == FUNCTION_DECL ? DECL_DECLARED_CONSTEXPR_P (d)
8000                : decl_maybe_constant_var_p (d)));
8001 }
8002
8003 /* Returns TRUE iff we should refuse to instantiate DECL because it's
8004    neglectable and instantiated from within an erroneous instantiation.  */
8005
8006 static bool
8007 limit_bad_template_recursion (tree decl)
8008 {
8009   struct tinst_level *lev = current_tinst_level;
8010   int errs = errorcount + sorrycount;
8011   if (lev == NULL || errs == 0 || !neglectable_inst_p (decl))
8012     return false;
8013
8014   for (; lev; lev = lev->next)
8015     if (neglectable_inst_p (lev->decl))
8016       break;
8017
8018   return (lev && errs > lev->errors);
8019 }
8020
8021 static int tinst_depth;
8022 extern int max_tinst_depth;
8023 #ifdef GATHER_STATISTICS
8024 int depth_reached;
8025 #endif
8026 static GTY(()) struct tinst_level *last_error_tinst_level;
8027
8028 /* We're starting to instantiate D; record the template instantiation context
8029    for diagnostics and to restore it later.  */
8030
8031 int
8032 push_tinst_level (tree d)
8033 {
8034   struct tinst_level *new_level;
8035
8036   if (tinst_depth >= max_tinst_depth)
8037     {
8038       last_error_tinst_level = current_tinst_level;
8039       if (TREE_CODE (d) == TREE_LIST)
8040         error ("template instantiation depth exceeds maximum of %d (use "
8041                "-ftemplate-depth= to increase the maximum) substituting %qS",
8042                max_tinst_depth, d);
8043       else
8044         error ("template instantiation depth exceeds maximum of %d (use "
8045                "-ftemplate-depth= to increase the maximum) instantiating %qD",
8046                max_tinst_depth, d);
8047
8048       print_instantiation_context ();
8049
8050       return 0;
8051     }
8052
8053   /* If the current instantiation caused problems, don't let it instantiate
8054      anything else.  Do allow deduction substitution and decls usable in
8055      constant expressions.  */
8056   if (limit_bad_template_recursion (d))
8057     return 0;
8058
8059   new_level = ggc_alloc_tinst_level ();
8060   new_level->decl = d;
8061   new_level->locus = input_location;
8062   new_level->errors = errorcount+sorrycount;
8063   new_level->in_system_header_p = in_system_header;
8064   new_level->next = current_tinst_level;
8065   current_tinst_level = new_level;
8066
8067   ++tinst_depth;
8068 #ifdef GATHER_STATISTICS
8069   if (tinst_depth > depth_reached)
8070     depth_reached = tinst_depth;
8071 #endif
8072
8073   return 1;
8074 }
8075
8076 /* We're done instantiating this template; return to the instantiation
8077    context.  */
8078
8079 void
8080 pop_tinst_level (void)
8081 {
8082   /* Restore the filename and line number stashed away when we started
8083      this instantiation.  */
8084   input_location = current_tinst_level->locus;
8085   current_tinst_level = current_tinst_level->next;
8086   --tinst_depth;
8087 }
8088
8089 /* We're instantiating a deferred template; restore the template
8090    instantiation context in which the instantiation was requested, which
8091    is one step out from LEVEL.  Return the corresponding DECL or TYPE.  */
8092
8093 static tree
8094 reopen_tinst_level (struct tinst_level *level)
8095 {
8096   struct tinst_level *t;
8097
8098   tinst_depth = 0;
8099   for (t = level; t; t = t->next)
8100     ++tinst_depth;
8101
8102   current_tinst_level = level;
8103   pop_tinst_level ();
8104   if (current_tinst_level)
8105     current_tinst_level->errors = errorcount+sorrycount;
8106   return level->decl;
8107 }
8108
8109 /* Returns the TINST_LEVEL which gives the original instantiation
8110    context.  */
8111
8112 struct tinst_level *
8113 outermost_tinst_level (void)
8114 {
8115   struct tinst_level *level = current_tinst_level;
8116   if (level)
8117     while (level->next)
8118       level = level->next;
8119   return level;
8120 }
8121
8122 /* Returns TRUE if PARM is a parameter of the template TEMPL.  */
8123
8124 bool
8125 parameter_of_template_p (tree parm, tree templ)
8126 {
8127   tree parms;
8128   int i;
8129
8130   if (!parm || !templ)
8131     return false;
8132
8133   gcc_assert (DECL_TEMPLATE_PARM_P (parm));
8134   gcc_assert (TREE_CODE (templ) == TEMPLATE_DECL);
8135
8136   parms = DECL_TEMPLATE_PARMS (templ);
8137   parms = INNERMOST_TEMPLATE_PARMS (parms);
8138
8139   for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
8140     {
8141       tree p = TREE_VALUE (TREE_VEC_ELT (parms, i));
8142       if (parm == p
8143           || (DECL_INITIAL (parm)
8144               && DECL_INITIAL (parm) == DECL_INITIAL (p)))
8145         return true;
8146     }
8147
8148   return false;
8149 }
8150
8151 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL.  ARGS is the
8152    vector of template arguments, as for tsubst.
8153
8154    Returns an appropriate tsubst'd friend declaration.  */
8155
8156 static tree
8157 tsubst_friend_function (tree decl, tree args)
8158 {
8159   tree new_friend;
8160
8161   if (TREE_CODE (decl) == FUNCTION_DECL
8162       && DECL_TEMPLATE_INSTANTIATION (decl)
8163       && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
8164     /* This was a friend declared with an explicit template
8165        argument list, e.g.:
8166
8167        friend void f<>(T);
8168
8169        to indicate that f was a template instantiation, not a new
8170        function declaration.  Now, we have to figure out what
8171        instantiation of what template.  */
8172     {
8173       tree template_id, arglist, fns;
8174       tree new_args;
8175       tree tmpl;
8176       tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
8177
8178       /* Friend functions are looked up in the containing namespace scope.
8179          We must enter that scope, to avoid finding member functions of the
8180          current class with same name.  */
8181       push_nested_namespace (ns);
8182       fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
8183                          tf_warning_or_error, NULL_TREE,
8184                          /*integral_constant_expression_p=*/false);
8185       pop_nested_namespace (ns);
8186       arglist = tsubst (DECL_TI_ARGS (decl), args,
8187                         tf_warning_or_error, NULL_TREE);
8188       template_id = lookup_template_function (fns, arglist);
8189
8190       new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
8191       tmpl = determine_specialization (template_id, new_friend,
8192                                        &new_args,
8193                                        /*need_member_template=*/0,
8194                                        TREE_VEC_LENGTH (args),
8195                                        tsk_none);
8196       return instantiate_template (tmpl, new_args, tf_error);
8197     }
8198
8199   new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
8200
8201   /* The NEW_FRIEND will look like an instantiation, to the
8202      compiler, but is not an instantiation from the point of view of
8203      the language.  For example, we might have had:
8204
8205      template <class T> struct S {
8206        template <class U> friend void f(T, U);
8207      };
8208
8209      Then, in S<int>, template <class U> void f(int, U) is not an
8210      instantiation of anything.  */
8211   if (new_friend == error_mark_node)
8212     return error_mark_node;
8213
8214   DECL_USE_TEMPLATE (new_friend) = 0;
8215   if (TREE_CODE (decl) == TEMPLATE_DECL)
8216     {
8217       DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
8218       DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
8219         = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
8220     }
8221
8222   /* The mangled name for the NEW_FRIEND is incorrect.  The function
8223      is not a template instantiation and should not be mangled like
8224      one.  Therefore, we forget the mangling here; we'll recompute it
8225      later if we need it.  */
8226   if (TREE_CODE (new_friend) != TEMPLATE_DECL)
8227     {
8228       SET_DECL_RTL (new_friend, NULL);
8229       SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
8230     }
8231
8232   if (DECL_NAMESPACE_SCOPE_P (new_friend))
8233     {
8234       tree old_decl;
8235       tree new_friend_template_info;
8236       tree new_friend_result_template_info;
8237       tree ns;
8238       int  new_friend_is_defn;
8239
8240       /* We must save some information from NEW_FRIEND before calling
8241          duplicate decls since that function will free NEW_FRIEND if
8242          possible.  */
8243       new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
8244       new_friend_is_defn =
8245             (DECL_INITIAL (DECL_TEMPLATE_RESULT
8246                            (template_for_substitution (new_friend)))
8247              != NULL_TREE);
8248       if (TREE_CODE (new_friend) == TEMPLATE_DECL)
8249         {
8250           /* This declaration is a `primary' template.  */
8251           DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
8252
8253           new_friend_result_template_info
8254             = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
8255         }
8256       else
8257         new_friend_result_template_info = NULL_TREE;
8258
8259       /* Make the init_value nonzero so pushdecl knows this is a defn.  */
8260       if (new_friend_is_defn)
8261         DECL_INITIAL (new_friend) = error_mark_node;
8262
8263       /* Inside pushdecl_namespace_level, we will push into the
8264          current namespace. However, the friend function should go
8265          into the namespace of the template.  */
8266       ns = decl_namespace_context (new_friend);
8267       push_nested_namespace (ns);
8268       old_decl = pushdecl_namespace_level (new_friend, /*is_friend=*/true);
8269       pop_nested_namespace (ns);
8270
8271       if (old_decl == error_mark_node)
8272         return error_mark_node;
8273
8274       if (old_decl != new_friend)
8275         {
8276           /* This new friend declaration matched an existing
8277              declaration.  For example, given:
8278
8279                template <class T> void f(T);
8280                template <class U> class C {
8281                  template <class T> friend void f(T) {}
8282                };
8283
8284              the friend declaration actually provides the definition
8285              of `f', once C has been instantiated for some type.  So,
8286              old_decl will be the out-of-class template declaration,
8287              while new_friend is the in-class definition.
8288
8289              But, if `f' was called before this point, the
8290              instantiation of `f' will have DECL_TI_ARGS corresponding
8291              to `T' but not to `U', references to which might appear
8292              in the definition of `f'.  Previously, the most general
8293              template for an instantiation of `f' was the out-of-class
8294              version; now it is the in-class version.  Therefore, we
8295              run through all specialization of `f', adding to their
8296              DECL_TI_ARGS appropriately.  In particular, they need a
8297              new set of outer arguments, corresponding to the
8298              arguments for this class instantiation.
8299
8300              The same situation can arise with something like this:
8301
8302                friend void f(int);
8303                template <class T> class C {
8304                  friend void f(T) {}
8305                };
8306
8307              when `C<int>' is instantiated.  Now, `f(int)' is defined
8308              in the class.  */
8309
8310           if (!new_friend_is_defn)
8311             /* On the other hand, if the in-class declaration does
8312                *not* provide a definition, then we don't want to alter
8313                existing definitions.  We can just leave everything
8314                alone.  */
8315             ;
8316           else
8317             {
8318               tree new_template = TI_TEMPLATE (new_friend_template_info);
8319               tree new_args = TI_ARGS (new_friend_template_info);
8320
8321               /* Overwrite whatever template info was there before, if
8322                  any, with the new template information pertaining to
8323                  the declaration.  */
8324               DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
8325
8326               if (TREE_CODE (old_decl) != TEMPLATE_DECL)
8327                 {
8328                   /* We should have called reregister_specialization in
8329                      duplicate_decls.  */
8330                   gcc_assert (retrieve_specialization (new_template,
8331                                                        new_args, 0)
8332                               == old_decl);
8333
8334                   /* Instantiate it if the global has already been used.  */
8335                   if (DECL_ODR_USED (old_decl))
8336                     instantiate_decl (old_decl, /*defer_ok=*/true,
8337                                       /*expl_inst_class_mem_p=*/false);
8338                 }
8339               else
8340                 {
8341                   tree t;
8342
8343                   /* Indicate that the old function template is a partial
8344                      instantiation.  */
8345                   DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
8346                     = new_friend_result_template_info;
8347
8348                   gcc_assert (new_template
8349                               == most_general_template (new_template));
8350                   gcc_assert (new_template != old_decl);
8351
8352                   /* Reassign any specializations already in the hash table
8353                      to the new more general template, and add the
8354                      additional template args.  */
8355                   for (t = DECL_TEMPLATE_INSTANTIATIONS (old_decl);
8356                        t != NULL_TREE;
8357                        t = TREE_CHAIN (t))
8358                     {
8359                       tree spec = TREE_VALUE (t);
8360                       spec_entry elt;
8361
8362                       elt.tmpl = old_decl;
8363                       elt.args = DECL_TI_ARGS (spec);
8364                       elt.spec = NULL_TREE;
8365
8366                       htab_remove_elt (decl_specializations, &elt);
8367
8368                       DECL_TI_ARGS (spec)
8369                         = add_outermost_template_args (new_args,
8370                                                        DECL_TI_ARGS (spec));
8371
8372                       register_specialization
8373                         (spec, new_template, DECL_TI_ARGS (spec), true, 0);
8374
8375                     }
8376                   DECL_TEMPLATE_INSTANTIATIONS (old_decl) = NULL_TREE;
8377                 }
8378             }
8379
8380           /* The information from NEW_FRIEND has been merged into OLD_DECL
8381              by duplicate_decls.  */
8382           new_friend = old_decl;
8383         }
8384     }
8385   else
8386     {
8387       tree context = DECL_CONTEXT (new_friend);
8388       bool dependent_p;
8389
8390       /* In the code
8391            template <class T> class C {
8392              template <class U> friend void C1<U>::f (); // case 1
8393              friend void C2<T>::f ();                    // case 2
8394            };
8395          we only need to make sure CONTEXT is a complete type for
8396          case 2.  To distinguish between the two cases, we note that
8397          CONTEXT of case 1 remains dependent type after tsubst while
8398          this isn't true for case 2.  */
8399       ++processing_template_decl;
8400       dependent_p = dependent_type_p (context);
8401       --processing_template_decl;
8402
8403       if (!dependent_p
8404           && !complete_type_or_else (context, NULL_TREE))
8405         return error_mark_node;
8406
8407       if (COMPLETE_TYPE_P (context))
8408         {
8409           /* Check to see that the declaration is really present, and,
8410              possibly obtain an improved declaration.  */
8411           tree fn = check_classfn (context,
8412                                    new_friend, NULL_TREE);
8413
8414           if (fn)
8415             new_friend = fn;
8416         }
8417     }
8418
8419   return new_friend;
8420 }
8421
8422 /* FRIEND_TMPL is a friend TEMPLATE_DECL.  ARGS is the vector of
8423    template arguments, as for tsubst.
8424
8425    Returns an appropriate tsubst'd friend type or error_mark_node on
8426    failure.  */
8427
8428 static tree
8429 tsubst_friend_class (tree friend_tmpl, tree args)
8430 {
8431   tree friend_type;
8432   tree tmpl;
8433   tree context;
8434
8435   context = CP_DECL_CONTEXT (friend_tmpl);
8436
8437   if (context != global_namespace)
8438     {
8439       if (TREE_CODE (context) == NAMESPACE_DECL)
8440         push_nested_namespace (context);
8441       else
8442         push_nested_class (tsubst (context, args, tf_none, NULL_TREE));
8443     }
8444
8445   /* Look for a class template declaration.  We look for hidden names
8446      because two friend declarations of the same template are the
8447      same.  For example, in:
8448
8449        struct A { 
8450          template <typename> friend class F;
8451        };
8452        template <typename> struct B { 
8453          template <typename> friend class F;
8454        };
8455
8456      both F templates are the same.  */
8457   tmpl = lookup_name_real (DECL_NAME (friend_tmpl), 0, 0,
8458                            /*block_p=*/true, 0, 
8459                            LOOKUP_COMPLAIN | LOOKUP_HIDDEN);
8460
8461   /* But, if we don't find one, it might be because we're in a
8462      situation like this:
8463
8464        template <class T>
8465        struct S {
8466          template <class U>
8467          friend struct S;
8468        };
8469
8470      Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
8471      for `S<int>', not the TEMPLATE_DECL.  */
8472   if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
8473     {
8474       tmpl = lookup_name_prefer_type (DECL_NAME (friend_tmpl), 1);
8475       tmpl = maybe_get_template_decl_from_type_decl (tmpl);
8476     }
8477
8478   if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
8479     {
8480       /* The friend template has already been declared.  Just
8481          check to see that the declarations match, and install any new
8482          default parameters.  We must tsubst the default parameters,
8483          of course.  We only need the innermost template parameters
8484          because that is all that redeclare_class_template will look
8485          at.  */
8486       if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
8487           > TMPL_ARGS_DEPTH (args))
8488         {
8489           tree parms;
8490           location_t saved_input_location;
8491           parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
8492                                          args, tf_warning_or_error);
8493
8494           saved_input_location = input_location;
8495           input_location = DECL_SOURCE_LOCATION (friend_tmpl);
8496           redeclare_class_template (TREE_TYPE (tmpl), parms);
8497           input_location = saved_input_location;
8498           
8499         }
8500
8501       friend_type = TREE_TYPE (tmpl);
8502     }
8503   else
8504     {
8505       /* The friend template has not already been declared.  In this
8506          case, the instantiation of the template class will cause the
8507          injection of this template into the global scope.  */
8508       tmpl = tsubst (friend_tmpl, args, tf_warning_or_error, NULL_TREE);
8509       if (tmpl == error_mark_node)
8510         return error_mark_node;
8511
8512       /* The new TMPL is not an instantiation of anything, so we
8513          forget its origins.  We don't reset CLASSTYPE_TI_TEMPLATE for
8514          the new type because that is supposed to be the corresponding
8515          template decl, i.e., TMPL.  */
8516       DECL_USE_TEMPLATE (tmpl) = 0;
8517       DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
8518       CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
8519       CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
8520         = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
8521
8522       /* Inject this template into the global scope.  */
8523       friend_type = TREE_TYPE (pushdecl_top_level_maybe_friend (tmpl, true));
8524     }
8525
8526   if (context != global_namespace)
8527     {
8528       if (TREE_CODE (context) == NAMESPACE_DECL)
8529         pop_nested_namespace (context);
8530       else
8531         pop_nested_class ();
8532     }
8533
8534   return friend_type;
8535 }
8536
8537 /* Returns zero if TYPE cannot be completed later due to circularity.
8538    Otherwise returns one.  */
8539
8540 static int
8541 can_complete_type_without_circularity (tree type)
8542 {
8543   if (type == NULL_TREE || type == error_mark_node)
8544     return 0;
8545   else if (COMPLETE_TYPE_P (type))
8546     return 1;
8547   else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
8548     return can_complete_type_without_circularity (TREE_TYPE (type));
8549   else if (CLASS_TYPE_P (type)
8550            && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
8551     return 0;
8552   else
8553     return 1;
8554 }
8555
8556 /* Apply any attributes which had to be deferred until instantiation
8557    time.  DECL_P, ATTRIBUTES and ATTR_FLAGS are as cplus_decl_attributes;
8558    ARGS, COMPLAIN, IN_DECL are as tsubst.  */
8559
8560 static void
8561 apply_late_template_attributes (tree *decl_p, tree attributes, int attr_flags,
8562                                 tree args, tsubst_flags_t complain, tree in_decl)
8563 {
8564   tree last_dep = NULL_TREE;
8565   tree t;
8566   tree *p;
8567
8568   for (t = attributes; t; t = TREE_CHAIN (t))
8569     if (ATTR_IS_DEPENDENT (t))
8570       {
8571         last_dep = t;
8572         attributes = copy_list (attributes);
8573         break;
8574       }
8575
8576   if (DECL_P (*decl_p))
8577     {
8578       if (TREE_TYPE (*decl_p) == error_mark_node)
8579         return;
8580       p = &DECL_ATTRIBUTES (*decl_p);
8581     }
8582   else
8583     p = &TYPE_ATTRIBUTES (*decl_p);
8584
8585   if (last_dep)
8586     {
8587       tree late_attrs = NULL_TREE;
8588       tree *q = &late_attrs;
8589
8590       for (*p = attributes; *p; )
8591         {
8592           t = *p;
8593           if (ATTR_IS_DEPENDENT (t))
8594             {
8595               *p = TREE_CHAIN (t);
8596               TREE_CHAIN (t) = NULL_TREE;
8597               /* If the first attribute argument is an identifier, don't
8598                  pass it through tsubst.  Attributes like mode, format,
8599                  cleanup and several target specific attributes expect it
8600                  unmodified.  */
8601               if (TREE_VALUE (t)
8602                   && TREE_CODE (TREE_VALUE (t)) == TREE_LIST
8603                   && TREE_VALUE (TREE_VALUE (t))
8604                   && (TREE_CODE (TREE_VALUE (TREE_VALUE (t)))
8605                       == IDENTIFIER_NODE))
8606                 {
8607                   tree chain
8608                     = tsubst_expr (TREE_CHAIN (TREE_VALUE (t)), args, complain,
8609                                    in_decl,
8610                                    /*integral_constant_expression_p=*/false);
8611                   if (chain != TREE_CHAIN (TREE_VALUE (t)))
8612                     TREE_VALUE (t)
8613                       = tree_cons (NULL_TREE, TREE_VALUE (TREE_VALUE (t)),
8614                                    chain);
8615                 }
8616               else
8617                 TREE_VALUE (t)
8618                   = tsubst_expr (TREE_VALUE (t), args, complain, in_decl,
8619                                  /*integral_constant_expression_p=*/false);
8620               *q = t;
8621               q = &TREE_CHAIN (t);
8622             }
8623           else
8624             p = &TREE_CHAIN (t);
8625         }
8626
8627       cplus_decl_attributes (decl_p, late_attrs, attr_flags);
8628     }
8629 }
8630
8631 /* Perform (or defer) access check for typedefs that were referenced
8632    from within the template TMPL code.
8633    This is a subroutine of instantiate_template and instantiate_class_template.
8634    TMPL is the template to consider and TARGS is the list of arguments of
8635    that template.  */
8636
8637 static void
8638 perform_typedefs_access_check (tree tmpl, tree targs)
8639 {
8640   location_t saved_location;
8641   int i;
8642   qualified_typedef_usage_t *iter;
8643
8644   if (!tmpl
8645       || (!CLASS_TYPE_P (tmpl)
8646           && TREE_CODE (tmpl) != FUNCTION_DECL))
8647     return;
8648
8649   saved_location = input_location;
8650   FOR_EACH_VEC_ELT (qualified_typedef_usage_t,
8651                     get_types_needing_access_check (tmpl),
8652                     i, iter)
8653     {
8654       tree type_decl = iter->typedef_decl;
8655       tree type_scope = iter->context;
8656
8657       if (!type_decl || !type_scope || !CLASS_TYPE_P (type_scope))
8658         continue;
8659
8660       if (uses_template_parms (type_decl))
8661         type_decl = tsubst (type_decl, targs, tf_error, NULL_TREE);
8662       if (uses_template_parms (type_scope))
8663         type_scope = tsubst (type_scope, targs, tf_error, NULL_TREE);
8664
8665       /* Make access check error messages point to the location
8666          of the use of the typedef.  */
8667       input_location = iter->locus;
8668       perform_or_defer_access_check (TYPE_BINFO (type_scope),
8669                                      type_decl, type_decl);
8670     }
8671     input_location = saved_location;
8672 }
8673
8674 static tree
8675 instantiate_class_template_1 (tree type)
8676 {
8677   tree templ, args, pattern, t, member;
8678   tree typedecl;
8679   tree pbinfo;
8680   tree base_list;
8681   unsigned int saved_maximum_field_alignment;
8682
8683   if (type == error_mark_node)
8684     return error_mark_node;
8685
8686   if (COMPLETE_OR_OPEN_TYPE_P (type)
8687       || uses_template_parms (type))
8688     return type;
8689
8690   /* Figure out which template is being instantiated.  */
8691   templ = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
8692   gcc_assert (TREE_CODE (templ) == TEMPLATE_DECL);
8693
8694   /* Determine what specialization of the original template to
8695      instantiate.  */
8696   t = most_specialized_class (type, templ, tf_warning_or_error);
8697   if (t == error_mark_node)
8698     {
8699       TYPE_BEING_DEFINED (type) = 1;
8700       return error_mark_node;
8701     }
8702   else if (t)
8703     {
8704       /* This TYPE is actually an instantiation of a partial
8705          specialization.  We replace the innermost set of ARGS with
8706          the arguments appropriate for substitution.  For example,
8707          given:
8708
8709            template <class T> struct S {};
8710            template <class T> struct S<T*> {};
8711
8712          and supposing that we are instantiating S<int*>, ARGS will
8713          presently be {int*} -- but we need {int}.  */
8714       pattern = TREE_TYPE (t);
8715       args = TREE_PURPOSE (t);
8716     }
8717   else
8718     {
8719       pattern = TREE_TYPE (templ);
8720       args = CLASSTYPE_TI_ARGS (type);
8721     }
8722
8723   /* If the template we're instantiating is incomplete, then clearly
8724      there's nothing we can do.  */
8725   if (!COMPLETE_TYPE_P (pattern))
8726     return type;
8727
8728   /* If we've recursively instantiated too many templates, stop.  */
8729   if (! push_tinst_level (type))
8730     return type;
8731
8732   /* Now we're really doing the instantiation.  Mark the type as in
8733      the process of being defined.  */
8734   TYPE_BEING_DEFINED (type) = 1;
8735
8736   /* We may be in the middle of deferred access check.  Disable
8737      it now.  */
8738   push_deferring_access_checks (dk_no_deferred);
8739
8740   push_to_top_level ();
8741   /* Use #pragma pack from the template context.  */
8742   saved_maximum_field_alignment = maximum_field_alignment;
8743   maximum_field_alignment = TYPE_PRECISION (pattern);
8744
8745   SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
8746
8747   /* Set the input location to the most specialized template definition.
8748      This is needed if tsubsting causes an error.  */
8749   typedecl = TYPE_MAIN_DECL (pattern);
8750   input_location = DECL_SOURCE_LOCATION (TYPE_NAME (type)) =
8751     DECL_SOURCE_LOCATION (typedecl);
8752
8753   TYPE_PACKED (type) = TYPE_PACKED (pattern);
8754   TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
8755   TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
8756   TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
8757   if (ANON_AGGR_TYPE_P (pattern))
8758     SET_ANON_AGGR_TYPE_P (type);
8759   if (CLASSTYPE_VISIBILITY_SPECIFIED (pattern))
8760     {
8761       CLASSTYPE_VISIBILITY_SPECIFIED (type) = 1;
8762       CLASSTYPE_VISIBILITY (type) = CLASSTYPE_VISIBILITY (pattern);
8763       /* Adjust visibility for template arguments.  */
8764       determine_visibility (TYPE_MAIN_DECL (type));
8765     }
8766   CLASSTYPE_FINAL (type) = CLASSTYPE_FINAL (pattern);
8767
8768   pbinfo = TYPE_BINFO (pattern);
8769
8770   /* We should never instantiate a nested class before its enclosing
8771      class; we need to look up the nested class by name before we can
8772      instantiate it, and that lookup should instantiate the enclosing
8773      class.  */
8774   gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
8775               || COMPLETE_OR_OPEN_TYPE_P (TYPE_CONTEXT (type)));
8776
8777   base_list = NULL_TREE;
8778   if (BINFO_N_BASE_BINFOS (pbinfo))
8779     {
8780       tree pbase_binfo;
8781       tree pushed_scope;
8782       int i;
8783
8784       /* We must enter the scope containing the type, as that is where
8785          the accessibility of types named in dependent bases are
8786          looked up from.  */
8787       pushed_scope = push_scope (CP_TYPE_CONTEXT (type));
8788
8789       /* Substitute into each of the bases to determine the actual
8790          basetypes.  */
8791       for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
8792         {
8793           tree base;
8794           tree access = BINFO_BASE_ACCESS (pbinfo, i);
8795           tree expanded_bases = NULL_TREE;
8796           int idx, len = 1;
8797
8798           if (PACK_EXPANSION_P (BINFO_TYPE (pbase_binfo)))
8799             {
8800               expanded_bases = 
8801                 tsubst_pack_expansion (BINFO_TYPE (pbase_binfo),
8802                                        args, tf_error, NULL_TREE);
8803               if (expanded_bases == error_mark_node)
8804                 continue;
8805
8806               len = TREE_VEC_LENGTH (expanded_bases);
8807             }
8808
8809           for (idx = 0; idx < len; idx++)
8810             {
8811               if (expanded_bases)
8812                 /* Extract the already-expanded base class.  */
8813                 base = TREE_VEC_ELT (expanded_bases, idx);
8814               else
8815                 /* Substitute to figure out the base class.  */
8816                 base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error, 
8817                                NULL_TREE);
8818
8819               if (base == error_mark_node)
8820                 continue;
8821
8822               base_list = tree_cons (access, base, base_list);
8823               if (BINFO_VIRTUAL_P (pbase_binfo))
8824                 TREE_TYPE (base_list) = integer_type_node;
8825             }
8826         }
8827
8828       /* The list is now in reverse order; correct that.  */
8829       base_list = nreverse (base_list);
8830
8831       if (pushed_scope)
8832         pop_scope (pushed_scope);
8833     }
8834   /* Now call xref_basetypes to set up all the base-class
8835      information.  */
8836   xref_basetypes (type, base_list);
8837
8838   apply_late_template_attributes (&type, TYPE_ATTRIBUTES (pattern),
8839                                   (int) ATTR_FLAG_TYPE_IN_PLACE,
8840                                   args, tf_error, NULL_TREE);
8841   fixup_attribute_variants (type);
8842
8843   /* Now that our base classes are set up, enter the scope of the
8844      class, so that name lookups into base classes, etc. will work
8845      correctly.  This is precisely analogous to what we do in
8846      begin_class_definition when defining an ordinary non-template
8847      class, except we also need to push the enclosing classes.  */
8848   push_nested_class (type);
8849
8850   /* Now members are processed in the order of declaration.  */
8851   for (member = CLASSTYPE_DECL_LIST (pattern);
8852        member; member = TREE_CHAIN (member))
8853     {
8854       tree t = TREE_VALUE (member);
8855
8856       if (TREE_PURPOSE (member))
8857         {
8858           if (TYPE_P (t))
8859             {
8860               /* Build new CLASSTYPE_NESTED_UTDS.  */
8861
8862               tree newtag;
8863               bool class_template_p;
8864
8865               class_template_p = (TREE_CODE (t) != ENUMERAL_TYPE
8866                                   && TYPE_LANG_SPECIFIC (t)
8867                                   && CLASSTYPE_IS_TEMPLATE (t));
8868               /* If the member is a class template, then -- even after
8869                  substitution -- there may be dependent types in the
8870                  template argument list for the class.  We increment
8871                  PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
8872                  that function will assume that no types are dependent
8873                  when outside of a template.  */
8874               if (class_template_p)
8875                 ++processing_template_decl;
8876               newtag = tsubst (t, args, tf_error, NULL_TREE);
8877               if (class_template_p)
8878                 --processing_template_decl;
8879               if (newtag == error_mark_node)
8880                 continue;
8881
8882               if (TREE_CODE (newtag) != ENUMERAL_TYPE)
8883                 {
8884                   tree name = TYPE_IDENTIFIER (t);
8885
8886                   if (class_template_p)
8887                     /* Unfortunately, lookup_template_class sets
8888                        CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
8889                        instantiation (i.e., for the type of a member
8890                        template class nested within a template class.)
8891                        This behavior is required for
8892                        maybe_process_partial_specialization to work
8893                        correctly, but is not accurate in this case;
8894                        the TAG is not an instantiation of anything.
8895                        (The corresponding TEMPLATE_DECL is an
8896                        instantiation, but the TYPE is not.) */
8897                     CLASSTYPE_USE_TEMPLATE (newtag) = 0;
8898
8899                   /* Now, we call pushtag to put this NEWTAG into the scope of
8900                      TYPE.  We first set up the IDENTIFIER_TYPE_VALUE to avoid
8901                      pushtag calling push_template_decl.  We don't have to do
8902                      this for enums because it will already have been done in
8903                      tsubst_enum.  */
8904                   if (name)
8905                     SET_IDENTIFIER_TYPE_VALUE (name, newtag);
8906                   pushtag (name, newtag, /*tag_scope=*/ts_current);
8907                 }
8908             }
8909           else if (TREE_CODE (t) == FUNCTION_DECL
8910                    || DECL_FUNCTION_TEMPLATE_P (t))
8911             {
8912               /* Build new TYPE_METHODS.  */
8913               tree r;
8914
8915               if (TREE_CODE (t) == TEMPLATE_DECL)
8916                 ++processing_template_decl;
8917               r = tsubst (t, args, tf_error, NULL_TREE);
8918               if (TREE_CODE (t) == TEMPLATE_DECL)
8919                 --processing_template_decl;
8920               set_current_access_from_decl (r);
8921               finish_member_declaration (r);
8922               /* Instantiate members marked with attribute used.  */
8923               if (r != error_mark_node && DECL_PRESERVE_P (r))
8924                 mark_used (r);
8925             }
8926           else
8927             {
8928               /* Build new TYPE_FIELDS.  */
8929               if (TREE_CODE (t) == STATIC_ASSERT)
8930                 {
8931                   tree condition = 
8932                     tsubst_expr (STATIC_ASSERT_CONDITION (t), args, 
8933                                  tf_warning_or_error, NULL_TREE,
8934                                  /*integral_constant_expression_p=*/true);
8935                   finish_static_assert (condition,
8936                                         STATIC_ASSERT_MESSAGE (t), 
8937                                         STATIC_ASSERT_SOURCE_LOCATION (t),
8938                                         /*member_p=*/true);
8939                 }
8940               else if (TREE_CODE (t) != CONST_DECL)
8941                 {
8942                   tree r;
8943
8944                   /* The file and line for this declaration, to
8945                      assist in error message reporting.  Since we
8946                      called push_tinst_level above, we don't need to
8947                      restore these.  */
8948                   input_location = DECL_SOURCE_LOCATION (t);
8949
8950                   if (TREE_CODE (t) == TEMPLATE_DECL)
8951                     ++processing_template_decl;
8952                   r = tsubst (t, args, tf_warning_or_error, NULL_TREE);
8953                   if (TREE_CODE (t) == TEMPLATE_DECL)
8954                     --processing_template_decl;
8955                   if (TREE_CODE (r) == VAR_DECL)
8956                     {
8957                       /* In [temp.inst]:
8958
8959                            [t]he initialization (and any associated
8960                            side-effects) of a static data member does
8961                            not occur unless the static data member is
8962                            itself used in a way that requires the
8963                            definition of the static data member to
8964                            exist.
8965
8966                          Therefore, we do not substitute into the
8967                          initialized for the static data member here.  */
8968                       finish_static_data_member_decl
8969                         (r,
8970                          /*init=*/NULL_TREE,
8971                          /*init_const_expr_p=*/false,
8972                          /*asmspec_tree=*/NULL_TREE,
8973                          /*flags=*/0);
8974                       /* Instantiate members marked with attribute used.  */
8975                       if (r != error_mark_node && DECL_PRESERVE_P (r))
8976                         mark_used (r);
8977                     }
8978                   else if (TREE_CODE (r) == FIELD_DECL)
8979                     {
8980                       /* Determine whether R has a valid type and can be
8981                          completed later.  If R is invalid, then it is
8982                          replaced by error_mark_node so that it will not be
8983                          added to TYPE_FIELDS.  */
8984                       tree rtype = TREE_TYPE (r);
8985                       if (can_complete_type_without_circularity (rtype))
8986                         complete_type (rtype);
8987
8988                       if (!COMPLETE_TYPE_P (rtype))
8989                         {
8990                           cxx_incomplete_type_error (r, rtype);
8991                           r = error_mark_node;
8992                         }
8993                     }
8994
8995                   /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
8996                      such a thing will already have been added to the field
8997                      list by tsubst_enum in finish_member_declaration in the
8998                      CLASSTYPE_NESTED_UTDS case above.  */
8999                   if (!(TREE_CODE (r) == TYPE_DECL
9000                         && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
9001                         && DECL_ARTIFICIAL (r)))
9002                     {
9003                       set_current_access_from_decl (r);
9004                       finish_member_declaration (r);
9005                     }
9006                 }
9007             }
9008         }
9009       else
9010         {
9011           if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t))
9012             {
9013               /* Build new CLASSTYPE_FRIEND_CLASSES.  */
9014
9015               tree friend_type = t;
9016               bool adjust_processing_template_decl = false;
9017
9018               if (TREE_CODE (friend_type) == TEMPLATE_DECL)
9019                 {
9020                   /* template <class T> friend class C;  */
9021                   friend_type = tsubst_friend_class (friend_type, args);
9022                   adjust_processing_template_decl = true;
9023                 }
9024               else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
9025                 {
9026                   /* template <class T> friend class C::D;  */
9027                   friend_type = tsubst (friend_type, args,
9028                                         tf_warning_or_error, NULL_TREE);
9029                   if (TREE_CODE (friend_type) == TEMPLATE_DECL)
9030                     friend_type = TREE_TYPE (friend_type);
9031                   adjust_processing_template_decl = true;
9032                 }
9033               else if (TREE_CODE (friend_type) == TYPENAME_TYPE
9034                        || TREE_CODE (friend_type) == TEMPLATE_TYPE_PARM)
9035                 {
9036                   /* This could be either
9037
9038                        friend class T::C;
9039
9040                      when dependent_type_p is false or
9041
9042                        template <class U> friend class T::C;
9043
9044                      otherwise.  */
9045                   friend_type = tsubst (friend_type, args,
9046                                         tf_warning_or_error, NULL_TREE);
9047                   /* Bump processing_template_decl for correct
9048                      dependent_type_p calculation.  */
9049                   ++processing_template_decl;
9050                   if (dependent_type_p (friend_type))
9051                     adjust_processing_template_decl = true;
9052                   --processing_template_decl;
9053                 }
9054               else if (!CLASSTYPE_USE_TEMPLATE (friend_type)
9055                        && hidden_name_p (TYPE_NAME (friend_type)))
9056                 {
9057                   /* friend class C;
9058
9059                      where C hasn't been declared yet.  Let's lookup name
9060                      from namespace scope directly, bypassing any name that
9061                      come from dependent base class.  */
9062                   tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
9063
9064                   /* The call to xref_tag_from_type does injection for friend
9065                      classes.  */
9066                   push_nested_namespace (ns);
9067                   friend_type =
9068                     xref_tag_from_type (friend_type, NULL_TREE,
9069                                         /*tag_scope=*/ts_current);
9070                   pop_nested_namespace (ns);
9071                 }
9072               else if (uses_template_parms (friend_type))
9073                 /* friend class C<T>;  */
9074                 friend_type = tsubst (friend_type, args,
9075                                       tf_warning_or_error, NULL_TREE);
9076               /* Otherwise it's
9077
9078                    friend class C;
9079
9080                  where C is already declared or
9081
9082                    friend class C<int>;
9083
9084                  We don't have to do anything in these cases.  */
9085
9086               if (adjust_processing_template_decl)
9087                 /* Trick make_friend_class into realizing that the friend
9088                    we're adding is a template, not an ordinary class.  It's
9089                    important that we use make_friend_class since it will
9090                    perform some error-checking and output cross-reference
9091                    information.  */
9092                 ++processing_template_decl;
9093
9094               if (friend_type != error_mark_node)
9095                 make_friend_class (type, friend_type, /*complain=*/false);
9096
9097               if (adjust_processing_template_decl)
9098                 --processing_template_decl;
9099             }
9100           else
9101             {
9102               /* Build new DECL_FRIENDLIST.  */
9103               tree r;
9104
9105               /* The file and line for this declaration, to
9106                  assist in error message reporting.  Since we
9107                  called push_tinst_level above, we don't need to
9108                  restore these.  */
9109               input_location = DECL_SOURCE_LOCATION (t);
9110
9111               if (TREE_CODE (t) == TEMPLATE_DECL)
9112                 {
9113                   ++processing_template_decl;
9114                   push_deferring_access_checks (dk_no_check);
9115                 }
9116
9117               r = tsubst_friend_function (t, args);
9118               add_friend (type, r, /*complain=*/false);
9119               if (TREE_CODE (t) == TEMPLATE_DECL)
9120                 {
9121                   pop_deferring_access_checks ();
9122                   --processing_template_decl;
9123                 }
9124             }
9125         }
9126     }
9127
9128   if (CLASSTYPE_LAMBDA_EXPR (type))
9129     {
9130       tree decl = lambda_function (type);
9131       if (decl)
9132         {
9133           tree lambda = CLASSTYPE_LAMBDA_EXPR (type);
9134           if (LAMBDA_EXPR_DEDUCE_RETURN_TYPE_P (lambda))
9135             {
9136               apply_lambda_return_type (lambda, void_type_node);
9137               LAMBDA_EXPR_RETURN_TYPE (lambda) = NULL_TREE;
9138             }
9139           instantiate_decl (decl, false, false);
9140           maybe_add_lambda_conv_op (type);
9141         }
9142       else
9143         gcc_assert (errorcount);
9144     }
9145
9146   /* Set the file and line number information to whatever is given for
9147      the class itself.  This puts error messages involving generated
9148      implicit functions at a predictable point, and the same point
9149      that would be used for non-template classes.  */
9150   input_location = DECL_SOURCE_LOCATION (typedecl);
9151
9152   unreverse_member_declarations (type);
9153   finish_struct_1 (type);
9154   TYPE_BEING_DEFINED (type) = 0;
9155
9156   /* We don't instantiate default arguments for member functions.  14.7.1:
9157
9158      The implicit instantiation of a class template specialization causes
9159      the implicit instantiation of the declarations, but not of the
9160      definitions or default arguments, of the class member functions,
9161      member classes, static data members and member templates....  */
9162
9163   /* Some typedefs referenced from within the template code need to be access
9164      checked at template instantiation time, i.e now. These types were
9165      added to the template at parsing time. Let's get those and perform
9166      the access checks then.  */
9167   perform_typedefs_access_check (pattern, args);
9168   perform_deferred_access_checks ();
9169   pop_nested_class ();
9170   maximum_field_alignment = saved_maximum_field_alignment;
9171   pop_from_top_level ();
9172   pop_deferring_access_checks ();
9173   pop_tinst_level ();
9174
9175   /* The vtable for a template class can be emitted in any translation
9176      unit in which the class is instantiated.  When there is no key
9177      method, however, finish_struct_1 will already have added TYPE to
9178      the keyed_classes list.  */
9179   if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
9180     keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
9181
9182   return type;
9183 }
9184
9185 /* Wrapper for instantiate_class_template_1.  */
9186
9187 tree
9188 instantiate_class_template (tree type)
9189 {
9190   tree ret;
9191   timevar_push (TV_TEMPLATE_INST);
9192   ret = instantiate_class_template_1 (type);
9193   timevar_pop (TV_TEMPLATE_INST);
9194   return ret;
9195 }
9196
9197 static tree
9198 tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
9199 {
9200   tree r;
9201
9202   if (!t)
9203     r = t;
9204   else if (TYPE_P (t))
9205     r = tsubst (t, args, complain, in_decl);
9206   else
9207     {
9208       if (!(complain & tf_warning))
9209         ++c_inhibit_evaluation_warnings;
9210       r = tsubst_expr (t, args, complain, in_decl,
9211                        /*integral_constant_expression_p=*/true);
9212       if (!(complain & tf_warning))
9213         --c_inhibit_evaluation_warnings;
9214       /* Preserve the raw-reference nature of T.  */
9215       if (TREE_TYPE (t) && TREE_CODE (TREE_TYPE (t)) == REFERENCE_TYPE
9216           && REFERENCE_REF_P (r))
9217         r = TREE_OPERAND (r, 0);
9218     }
9219   return r;
9220 }
9221
9222 /* Given a function parameter pack TMPL_PARM and some function parameters
9223    instantiated from it at *SPEC_P, return a NONTYPE_ARGUMENT_PACK of them
9224    and set *SPEC_P to point at the next point in the list.  */
9225
9226 static tree
9227 extract_fnparm_pack (tree tmpl_parm, tree *spec_p)
9228 {
9229   /* Collect all of the extra "packed" parameters into an
9230      argument pack.  */
9231   tree parmvec;
9232   tree parmtypevec;
9233   tree argpack = make_node (NONTYPE_ARGUMENT_PACK);
9234   tree argtypepack = cxx_make_type (TYPE_ARGUMENT_PACK);
9235   tree spec_parm = *spec_p;
9236   int i, len;
9237
9238   for (len = 0; spec_parm; ++len, spec_parm = TREE_CHAIN (spec_parm))
9239     if (tmpl_parm
9240         && !function_parameter_expanded_from_pack_p (spec_parm, tmpl_parm))
9241       break;
9242
9243   /* Fill in PARMVEC and PARMTYPEVEC with all of the parameters.  */
9244   parmvec = make_tree_vec (len);
9245   parmtypevec = make_tree_vec (len);
9246   spec_parm = *spec_p;
9247   for (i = 0; i < len; i++, spec_parm = DECL_CHAIN (spec_parm))
9248     {
9249       TREE_VEC_ELT (parmvec, i) = spec_parm;
9250       TREE_VEC_ELT (parmtypevec, i) = TREE_TYPE (spec_parm);
9251     }
9252
9253   /* Build the argument packs.  */
9254   SET_ARGUMENT_PACK_ARGS (argpack, parmvec);
9255   SET_ARGUMENT_PACK_ARGS (argtypepack, parmtypevec);
9256   TREE_TYPE (argpack) = argtypepack;
9257   *spec_p = spec_parm;
9258
9259   return argpack;
9260 }
9261
9262 /* Give a chain SPEC_PARM of PARM_DECLs, pack them into a
9263    NONTYPE_ARGUMENT_PACK.  */
9264
9265 static tree
9266 make_fnparm_pack (tree spec_parm)
9267 {
9268   return extract_fnparm_pack (NULL_TREE, &spec_parm);
9269 }
9270
9271 /* Substitute ARGS into T, which is an pack expansion
9272    (i.e. TYPE_PACK_EXPANSION or EXPR_PACK_EXPANSION). Returns a
9273    TREE_VEC with the substituted arguments, a PACK_EXPANSION_* node
9274    (if only a partial substitution could be performed) or
9275    ERROR_MARK_NODE if there was an error.  */
9276 tree
9277 tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
9278                        tree in_decl)
9279 {
9280   tree pattern;
9281   tree pack, packs = NULL_TREE;
9282   bool unsubstituted_packs = false;
9283   bool real_packs = false;
9284   int missing_level = 0;
9285   int i, len = -1;
9286   tree result;
9287   htab_t saved_local_specializations = NULL;
9288   int levels;
9289
9290   gcc_assert (PACK_EXPANSION_P (t));
9291   pattern = PACK_EXPANSION_PATTERN (t);
9292
9293   /* Add in any args remembered from an earlier partial instantiation.  */
9294   args = add_to_template_args (PACK_EXPANSION_EXTRA_ARGS (t), args);
9295
9296   levels = TMPL_ARGS_DEPTH (args);
9297
9298   /* Determine the argument packs that will instantiate the parameter
9299      packs used in the expansion expression. While we're at it,
9300      compute the number of arguments to be expanded and make sure it
9301      is consistent.  */
9302   for (pack = PACK_EXPANSION_PARAMETER_PACKS (t); pack; 
9303        pack = TREE_CHAIN (pack))
9304     {
9305       tree parm_pack = TREE_VALUE (pack);
9306       tree arg_pack = NULL_TREE;
9307       tree orig_arg = NULL_TREE;
9308       int level = 0;
9309
9310       if (TREE_CODE (parm_pack) == BASES)
9311        {
9312          if (BASES_DIRECT (parm_pack))
9313            return calculate_direct_bases (tsubst_expr (BASES_TYPE (parm_pack),
9314                                                         args, complain, in_decl, false));
9315          else
9316            return calculate_bases (tsubst_expr (BASES_TYPE (parm_pack),
9317                                                  args, complain, in_decl, false));
9318        }
9319       if (TREE_CODE (parm_pack) == PARM_DECL)
9320         {
9321           if (!cp_unevaluated_operand)
9322             arg_pack = retrieve_local_specialization (parm_pack);
9323           else
9324             {
9325               /* We can't rely on local_specializations for a parameter
9326                  name used later in a function declaration (such as in a
9327                  late-specified return type).  Even if it exists, it might
9328                  have the wrong value for a recursive call.  Just make a
9329                  dummy decl, since it's only used for its type.  */
9330               arg_pack = tsubst_decl (parm_pack, args, complain);
9331               if (arg_pack && FUNCTION_PARAMETER_PACK_P (arg_pack))
9332                 /* Partial instantiation of the parm_pack, we can't build
9333                    up an argument pack yet.  */
9334                 arg_pack = NULL_TREE;
9335               else
9336                 arg_pack = make_fnparm_pack (arg_pack);
9337             }
9338         }
9339       else
9340         {
9341           int idx;
9342           template_parm_level_and_index (parm_pack, &level, &idx);
9343
9344           if (level <= levels)
9345             arg_pack = TMPL_ARG (args, level, idx);
9346         }
9347
9348       orig_arg = arg_pack;
9349       if (arg_pack && TREE_CODE (arg_pack) == ARGUMENT_PACK_SELECT)
9350         arg_pack = ARGUMENT_PACK_SELECT_FROM_PACK (arg_pack);
9351       
9352       if (arg_pack && !ARGUMENT_PACK_P (arg_pack))
9353         /* This can only happen if we forget to expand an argument
9354            pack somewhere else. Just return an error, silently.  */
9355         {
9356           result = make_tree_vec (1);
9357           TREE_VEC_ELT (result, 0) = error_mark_node;
9358           return result;
9359         }
9360
9361       if (arg_from_parm_pack_p (arg_pack, parm_pack))
9362         /* The argument pack that the parameter maps to is just an
9363            expansion of the parameter itself, such as one would find
9364            in the implicit typedef of a class inside the class itself.
9365            Consider this parameter "unsubstituted", so that we will
9366            maintain the outer pack expansion.  */
9367         arg_pack = NULL_TREE;
9368           
9369       if (arg_pack)
9370         {
9371           int my_len = 
9372             TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack));
9373
9374           /* Don't bother trying to do a partial substitution with
9375              incomplete packs; we'll try again after deduction.  */
9376           if (ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
9377             return t;
9378
9379           if (len < 0)
9380             len = my_len;
9381           else if (len != my_len)
9382             {
9383               if (!(complain & tf_error))
9384                 /* Fail quietly.  */;
9385               else if (TREE_CODE (t) == TYPE_PACK_EXPANSION)
9386                 error ("mismatched argument pack lengths while expanding "
9387                        "%<%T%>",
9388                        pattern);
9389               else
9390                 error ("mismatched argument pack lengths while expanding "
9391                        "%<%E%>",
9392                        pattern);
9393               return error_mark_node;
9394             }
9395
9396           if (TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack)) == 1
9397               && PACK_EXPANSION_P (TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack),
9398                                                  0)))
9399             /* This isn't a real argument pack yet.  */;
9400           else
9401             real_packs = true;
9402
9403           /* Keep track of the parameter packs and their corresponding
9404              argument packs.  */
9405           packs = tree_cons (parm_pack, arg_pack, packs);
9406           TREE_TYPE (packs) = orig_arg;
9407         }
9408       else
9409         {
9410           /* We can't substitute for this parameter pack.  We use a flag as
9411              well as the missing_level counter because function parameter
9412              packs don't have a level.  */
9413           unsubstituted_packs = true;
9414           if (!missing_level || missing_level > level)
9415             missing_level = level;
9416         }
9417     }
9418
9419   /* We cannot expand this expansion expression, because we don't have
9420      all of the argument packs we need.  */
9421   if (unsubstituted_packs)
9422     {
9423       if (real_packs)
9424         {
9425           /* We got some full packs, but we can't substitute them in until we
9426              have values for all the packs.  So remember these until then.  */
9427           tree save_args;
9428
9429           t = make_pack_expansion (pattern);
9430
9431           /* The call to add_to_template_args above assumes no overlap
9432              between saved args and new args, so prune away any fake
9433              args, i.e. those that satisfied arg_from_parm_pack_p above.  */
9434           if (missing_level && levels >= missing_level)
9435             {
9436               gcc_assert (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args)
9437                           && missing_level > 1);
9438               TREE_VEC_LENGTH (args) = missing_level - 1;
9439               save_args = copy_node (args);
9440               TREE_VEC_LENGTH (args) = levels;
9441             }
9442           else
9443             save_args = args;
9444
9445           PACK_EXPANSION_EXTRA_ARGS (t) = save_args;
9446         }
9447       else
9448         {
9449           /* There were no real arguments, we're just replacing a parameter
9450              pack with another version of itself. Substitute into the
9451              pattern and return a PACK_EXPANSION_*. The caller will need to
9452              deal with that.  */
9453           if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
9454             t = tsubst_expr (pattern, args, complain, in_decl,
9455                              /*integral_constant_expression_p=*/false);
9456           else
9457             t = tsubst (pattern, args, complain, in_decl);
9458           t = make_pack_expansion (t);
9459         }
9460       return t;
9461     }
9462
9463   /* We could not find any argument packs that work.  */
9464   if (len < 0)
9465     return error_mark_node;
9466
9467   if (cp_unevaluated_operand)
9468     {
9469       /* We're in a late-specified return type, so create our own local
9470          specializations table; the current table is either NULL or (in the
9471          case of recursive unification) might have bindings that we don't
9472          want to use or alter.  */
9473       saved_local_specializations = local_specializations;
9474       local_specializations = htab_create (37,
9475                                            hash_local_specialization,
9476                                            eq_local_specializations,
9477                                            NULL);
9478     }
9479
9480   /* For each argument in each argument pack, substitute into the
9481      pattern.  */
9482   result = make_tree_vec (len);
9483   for (i = 0; i < len; ++i)
9484     {
9485       /* For parameter pack, change the substitution of the parameter
9486          pack to the ith argument in its argument pack, then expand
9487          the pattern.  */
9488       for (pack = packs; pack; pack = TREE_CHAIN (pack))
9489         {
9490           tree parm = TREE_PURPOSE (pack);
9491           tree arg;
9492
9493           /* Select the Ith argument from the pack.  */
9494           if (TREE_CODE (parm) == PARM_DECL)
9495             {
9496               if (i == 0)
9497                 {
9498                   arg = make_node (ARGUMENT_PACK_SELECT);
9499                   ARGUMENT_PACK_SELECT_FROM_PACK (arg) = TREE_VALUE (pack);
9500                   mark_used (parm);
9501                   register_local_specialization (arg, parm);
9502                 }
9503               else
9504                 arg = retrieve_local_specialization (parm);
9505             }
9506           else
9507             {
9508               int idx, level;
9509               template_parm_level_and_index (parm, &level, &idx);
9510
9511               if (i == 0)
9512                 {
9513                   arg = make_node (ARGUMENT_PACK_SELECT);
9514                   ARGUMENT_PACK_SELECT_FROM_PACK (arg) = TREE_VALUE (pack);
9515                   /* Update the corresponding argument.  */
9516                   TMPL_ARG (args, level, idx) = arg;
9517                 }
9518               else
9519                 /* Re-use the ARGUMENT_PACK_SELECT.  */
9520                 arg = TMPL_ARG (args, level, idx);
9521             }
9522           ARGUMENT_PACK_SELECT_INDEX (arg) = i;
9523         }
9524
9525       /* Substitute into the PATTERN with the altered arguments.  */
9526       if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
9527         TREE_VEC_ELT (result, i) = 
9528           tsubst_expr (pattern, args, complain, in_decl,
9529                        /*integral_constant_expression_p=*/false);
9530       else
9531         TREE_VEC_ELT (result, i) = tsubst (pattern, args, complain, in_decl);
9532
9533       if (TREE_VEC_ELT (result, i) == error_mark_node)
9534         {
9535           result = error_mark_node;
9536           break;
9537         }
9538     }
9539
9540   /* Update ARGS to restore the substitution from parameter packs to
9541      their argument packs.  */
9542   for (pack = packs; pack; pack = TREE_CHAIN (pack))
9543     {
9544       tree parm = TREE_PURPOSE (pack);
9545
9546       if (TREE_CODE (parm) == PARM_DECL)
9547         register_local_specialization (TREE_TYPE (pack), parm);
9548       else
9549         {
9550           int idx, level;
9551           template_parm_level_and_index (parm, &level, &idx);
9552           
9553           /* Update the corresponding argument.  */
9554           if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
9555             TREE_VEC_ELT (TREE_VEC_ELT (args, level -1 ), idx) =
9556               TREE_TYPE (pack);
9557           else
9558             TREE_VEC_ELT (args, idx) = TREE_TYPE (pack);
9559         }
9560     }
9561
9562   if (saved_local_specializations)
9563     {
9564       htab_delete (local_specializations);
9565       local_specializations = saved_local_specializations;
9566     }
9567   
9568   return result;
9569 }
9570
9571 /* Given PARM_DECL PARM, find the corresponding PARM_DECL in the template
9572    TMPL.  We do this using DECL_PARM_INDEX, which should work even with
9573    parameter packs; all parms generated from a function parameter pack will
9574    have the same DECL_PARM_INDEX.  */
9575
9576 tree
9577 get_pattern_parm (tree parm, tree tmpl)
9578 {
9579   tree pattern = DECL_TEMPLATE_RESULT (tmpl);
9580   tree patparm;
9581
9582   if (DECL_ARTIFICIAL (parm))
9583     {
9584       for (patparm = DECL_ARGUMENTS (pattern);
9585            patparm; patparm = DECL_CHAIN (patparm))
9586         if (DECL_ARTIFICIAL (patparm)
9587             && DECL_NAME (parm) == DECL_NAME (patparm))
9588           break;
9589     }
9590   else
9591     {
9592       patparm = FUNCTION_FIRST_USER_PARM (DECL_TEMPLATE_RESULT (tmpl));
9593       patparm = chain_index (DECL_PARM_INDEX (parm)-1, patparm);
9594       gcc_assert (DECL_PARM_INDEX (patparm)
9595                   == DECL_PARM_INDEX (parm));
9596     }
9597
9598   return patparm;
9599 }
9600
9601 /* Substitute ARGS into the vector or list of template arguments T.  */
9602
9603 static tree
9604 tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
9605 {
9606   tree orig_t = t;
9607   int len, need_new = 0, i, expanded_len_adjust = 0, out;
9608   tree *elts;
9609
9610   if (t == error_mark_node)
9611     return error_mark_node;
9612
9613   len = TREE_VEC_LENGTH (t);
9614   elts = XALLOCAVEC (tree, len);
9615
9616   for (i = 0; i < len; i++)
9617     {
9618       tree orig_arg = TREE_VEC_ELT (t, i);
9619       tree new_arg;
9620
9621       if (TREE_CODE (orig_arg) == TREE_VEC)
9622         new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
9623       else if (PACK_EXPANSION_P (orig_arg))
9624         {
9625           /* Substitute into an expansion expression.  */
9626           new_arg = tsubst_pack_expansion (orig_arg, args, complain, in_decl);
9627
9628           if (TREE_CODE (new_arg) == TREE_VEC)
9629             /* Add to the expanded length adjustment the number of
9630                expanded arguments. We subtract one from this
9631                measurement, because the argument pack expression
9632                itself is already counted as 1 in
9633                LEN. EXPANDED_LEN_ADJUST can actually be negative, if
9634                the argument pack is empty.  */
9635             expanded_len_adjust += TREE_VEC_LENGTH (new_arg) - 1;
9636         }
9637       else if (ARGUMENT_PACK_P (orig_arg))
9638         {
9639           /* Substitute into each of the arguments.  */
9640           new_arg = TYPE_P (orig_arg)
9641             ? cxx_make_type (TREE_CODE (orig_arg))
9642             : make_node (TREE_CODE (orig_arg));
9643           
9644           SET_ARGUMENT_PACK_ARGS (
9645             new_arg,
9646             tsubst_template_args (ARGUMENT_PACK_ARGS (orig_arg),
9647                                   args, complain, in_decl));
9648
9649           if (ARGUMENT_PACK_ARGS (new_arg) == error_mark_node)
9650             new_arg = error_mark_node;
9651
9652           if (TREE_CODE (new_arg) == NONTYPE_ARGUMENT_PACK) {
9653             TREE_TYPE (new_arg) = tsubst (TREE_TYPE (orig_arg), args,
9654                                           complain, in_decl);
9655             TREE_CONSTANT (new_arg) = TREE_CONSTANT (orig_arg);
9656
9657             if (TREE_TYPE (new_arg) == error_mark_node)
9658               new_arg = error_mark_node;
9659           }
9660         }
9661       else
9662         new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
9663
9664       if (new_arg == error_mark_node)
9665         return error_mark_node;
9666
9667       elts[i] = new_arg;
9668       if (new_arg != orig_arg)
9669         need_new = 1;
9670     }
9671
9672   if (!need_new)
9673     return t;
9674
9675   /* Make space for the expanded arguments coming from template
9676      argument packs.  */
9677   t = make_tree_vec (len + expanded_len_adjust);
9678   /* ORIG_T can contain TREE_VECs. That happens if ORIG_T contains the
9679      arguments for a member template.
9680      In that case each TREE_VEC in ORIG_T represents a level of template
9681      arguments, and ORIG_T won't carry any non defaulted argument count.
9682      It will rather be the nested TREE_VECs that will carry one.
9683      In other words, ORIG_T carries a non defaulted argument count only
9684      if it doesn't contain any nested TREE_VEC.  */
9685   if (NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t))
9686     {
9687       int count = GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t);
9688       count += expanded_len_adjust;
9689       SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (t, count);
9690     }
9691   for (i = 0, out = 0; i < len; i++)
9692     {
9693       if ((PACK_EXPANSION_P (TREE_VEC_ELT (orig_t, i))
9694            || ARGUMENT_PACK_P (TREE_VEC_ELT (orig_t, i)))
9695           && TREE_CODE (elts[i]) == TREE_VEC)
9696         {
9697           int idx;
9698
9699           /* Now expand the template argument pack "in place".  */
9700           for (idx = 0; idx < TREE_VEC_LENGTH (elts[i]); idx++, out++)
9701             TREE_VEC_ELT (t, out) = TREE_VEC_ELT (elts[i], idx);
9702         }
9703       else
9704         {
9705           TREE_VEC_ELT (t, out) = elts[i];
9706           out++;
9707         }
9708     }
9709
9710   return t;
9711 }
9712
9713 /* Return the result of substituting ARGS into the template parameters
9714    given by PARMS.  If there are m levels of ARGS and m + n levels of
9715    PARMS, then the result will contain n levels of PARMS.  For
9716    example, if PARMS is `template <class T> template <class U>
9717    template <T*, U, class V>' and ARGS is {{int}, {double}} then the
9718    result will be `template <int*, double, class V>'.  */
9719
9720 static tree
9721 tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
9722 {
9723   tree r = NULL_TREE;
9724   tree* new_parms;
9725
9726   /* When substituting into a template, we must set
9727      PROCESSING_TEMPLATE_DECL as the template parameters may be
9728      dependent if they are based on one-another, and the dependency
9729      predicates are short-circuit outside of templates.  */
9730   ++processing_template_decl;
9731
9732   for (new_parms = &r;
9733        TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
9734        new_parms = &(TREE_CHAIN (*new_parms)),
9735          parms = TREE_CHAIN (parms))
9736     {
9737       tree new_vec =
9738         make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
9739       int i;
9740
9741       for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
9742         {
9743           tree tuple;
9744
9745           if (parms == error_mark_node)
9746             continue;
9747
9748           tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
9749
9750           if (tuple == error_mark_node)
9751             continue;
9752
9753           TREE_VEC_ELT (new_vec, i) =
9754             tsubst_template_parm (tuple, args, complain);
9755         }
9756
9757       *new_parms =
9758         tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
9759                              - TMPL_ARGS_DEPTH (args)),
9760                    new_vec, NULL_TREE);
9761     }
9762
9763   --processing_template_decl;
9764
9765   return r;
9766 }
9767
9768 /* Return the result of substituting ARGS into one template parameter
9769    given by T. T Must be a TREE_LIST which TREE_VALUE is the template
9770    parameter and which TREE_PURPOSE is the default argument of the
9771    template parameter.  */
9772
9773 static tree
9774 tsubst_template_parm (tree t, tree args, tsubst_flags_t complain)
9775 {
9776   tree default_value, parm_decl;
9777
9778   if (args == NULL_TREE
9779       || t == NULL_TREE
9780       || t == error_mark_node)
9781     return t;
9782
9783   gcc_assert (TREE_CODE (t) == TREE_LIST);
9784
9785   default_value = TREE_PURPOSE (t);
9786   parm_decl = TREE_VALUE (t);
9787
9788   parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
9789   if (TREE_CODE (parm_decl) == PARM_DECL
9790       && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl), complain))
9791     parm_decl = error_mark_node;
9792   default_value = tsubst_template_arg (default_value, args,
9793                                        complain, NULL_TREE);
9794
9795   return build_tree_list (default_value, parm_decl);
9796 }
9797
9798 /* Substitute the ARGS into the indicated aggregate (or enumeration)
9799    type T.  If T is not an aggregate or enumeration type, it is
9800    handled as if by tsubst.  IN_DECL is as for tsubst.  If
9801    ENTERING_SCOPE is nonzero, T is the context for a template which
9802    we are presently tsubst'ing.  Return the substituted value.  */
9803
9804 static tree
9805 tsubst_aggr_type (tree t,
9806                   tree args,
9807                   tsubst_flags_t complain,
9808                   tree in_decl,
9809                   int entering_scope)
9810 {
9811   if (t == NULL_TREE)
9812     return NULL_TREE;
9813
9814   switch (TREE_CODE (t))
9815     {
9816     case RECORD_TYPE:
9817       if (TYPE_PTRMEMFUNC_P (t))
9818         return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
9819
9820       /* Else fall through.  */
9821     case ENUMERAL_TYPE:
9822     case UNION_TYPE:
9823       if (TYPE_TEMPLATE_INFO (t) && uses_template_parms (t))
9824         {
9825           tree argvec;
9826           tree context;
9827           tree r;
9828           int saved_unevaluated_operand;
9829           int saved_inhibit_evaluation_warnings;
9830
9831           /* In "sizeof(X<I>)" we need to evaluate "I".  */
9832           saved_unevaluated_operand = cp_unevaluated_operand;
9833           cp_unevaluated_operand = 0;
9834           saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
9835           c_inhibit_evaluation_warnings = 0;
9836
9837           /* First, determine the context for the type we are looking
9838              up.  */
9839           context = TYPE_CONTEXT (t);
9840           if (context && TYPE_P (context))
9841             {
9842               context = tsubst_aggr_type (context, args, complain,
9843                                           in_decl, /*entering_scope=*/1);
9844               /* If context is a nested class inside a class template,
9845                  it may still need to be instantiated (c++/33959).  */
9846               context = complete_type (context);
9847             }
9848
9849           /* Then, figure out what arguments are appropriate for the
9850              type we are trying to find.  For example, given:
9851
9852                template <class T> struct S;
9853                template <class T, class U> void f(T, U) { S<U> su; }
9854
9855              and supposing that we are instantiating f<int, double>,
9856              then our ARGS will be {int, double}, but, when looking up
9857              S we only want {double}.  */
9858           argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
9859                                          complain, in_decl);
9860           if (argvec == error_mark_node)
9861             r = error_mark_node;
9862           else
9863             {
9864               r = lookup_template_class (t, argvec, in_decl, context,
9865                                          entering_scope, complain);
9866               r = cp_build_qualified_type_real (r, cp_type_quals (t), complain);
9867             }
9868
9869           cp_unevaluated_operand = saved_unevaluated_operand;
9870           c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
9871
9872           return r;
9873         }
9874       else
9875         /* This is not a template type, so there's nothing to do.  */
9876         return t;
9877
9878     default:
9879       return tsubst (t, args, complain, in_decl);
9880     }
9881 }
9882
9883 /* Substitute into the default argument ARG (a default argument for
9884    FN), which has the indicated TYPE.  */
9885
9886 tree
9887 tsubst_default_argument (tree fn, tree type, tree arg)
9888 {
9889   tree saved_class_ptr = NULL_TREE;
9890   tree saved_class_ref = NULL_TREE;
9891
9892   /* This can happen in invalid code.  */
9893   if (TREE_CODE (arg) == DEFAULT_ARG)
9894     return arg;
9895
9896   /* This default argument came from a template.  Instantiate the
9897      default argument here, not in tsubst.  In the case of
9898      something like:
9899
9900        template <class T>
9901        struct S {
9902          static T t();
9903          void f(T = t());
9904        };
9905
9906      we must be careful to do name lookup in the scope of S<T>,
9907      rather than in the current class.  */
9908   push_access_scope (fn);
9909   /* The "this" pointer is not valid in a default argument.  */
9910   if (cfun)
9911     {
9912       saved_class_ptr = current_class_ptr;
9913       cp_function_chain->x_current_class_ptr = NULL_TREE;
9914       saved_class_ref = current_class_ref;
9915       cp_function_chain->x_current_class_ref = NULL_TREE;
9916     }
9917
9918   push_deferring_access_checks(dk_no_deferred);
9919   /* The default argument expression may cause implicitly defined
9920      member functions to be synthesized, which will result in garbage
9921      collection.  We must treat this situation as if we were within
9922      the body of function so as to avoid collecting live data on the
9923      stack.  */
9924   ++function_depth;
9925   arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
9926                      tf_warning_or_error, NULL_TREE,
9927                      /*integral_constant_expression_p=*/false);
9928   --function_depth;
9929   pop_deferring_access_checks();
9930
9931   /* Restore the "this" pointer.  */
9932   if (cfun)
9933     {
9934       cp_function_chain->x_current_class_ptr = saved_class_ptr;
9935       cp_function_chain->x_current_class_ref = saved_class_ref;
9936     }
9937
9938   /* Make sure the default argument is reasonable.  */
9939   arg = check_default_argument (type, arg);
9940
9941   pop_access_scope (fn);
9942
9943   return arg;
9944 }
9945
9946 /* Substitute into all the default arguments for FN.  */
9947
9948 static void
9949 tsubst_default_arguments (tree fn)
9950 {
9951   tree arg;
9952   tree tmpl_args;
9953
9954   tmpl_args = DECL_TI_ARGS (fn);
9955
9956   /* If this function is not yet instantiated, we certainly don't need
9957      its default arguments.  */
9958   if (uses_template_parms (tmpl_args))
9959     return;
9960   /* Don't do this again for clones.  */
9961   if (DECL_CLONED_FUNCTION_P (fn))
9962     return;
9963
9964   for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
9965        arg;
9966        arg = TREE_CHAIN (arg))
9967     if (TREE_PURPOSE (arg))
9968       TREE_PURPOSE (arg) = tsubst_default_argument (fn,
9969                                                     TREE_VALUE (arg),
9970                                                     TREE_PURPOSE (arg));
9971 }
9972
9973 /* Substitute the ARGS into the T, which is a _DECL.  Return the
9974    result of the substitution.  Issue error and warning messages under
9975    control of COMPLAIN.  */
9976
9977 static tree
9978 tsubst_decl (tree t, tree args, tsubst_flags_t complain)
9979 {
9980 #define RETURN(EXP) do { r = (EXP); goto out; } while(0)
9981   location_t saved_loc;
9982   tree r = NULL_TREE;
9983   tree in_decl = t;
9984   hashval_t hash = 0;
9985
9986   /* Set the filename and linenumber to improve error-reporting.  */
9987   saved_loc = input_location;
9988   input_location = DECL_SOURCE_LOCATION (t);
9989
9990   switch (TREE_CODE (t))
9991     {
9992     case TEMPLATE_DECL:
9993       {
9994         /* We can get here when processing a member function template,
9995            member class template, or template template parameter.  */
9996         tree decl = DECL_TEMPLATE_RESULT (t);
9997         tree spec;
9998         tree tmpl_args;
9999         tree full_args;
10000
10001         if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
10002           {
10003             /* Template template parameter is treated here.  */
10004             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10005             if (new_type == error_mark_node)
10006               RETURN (error_mark_node);
10007
10008             r = copy_decl (t);
10009             DECL_CHAIN (r) = NULL_TREE;
10010             TREE_TYPE (r) = new_type;
10011             DECL_TEMPLATE_RESULT (r)
10012               = build_decl (DECL_SOURCE_LOCATION (decl),
10013                             TYPE_DECL, DECL_NAME (decl), new_type);
10014             DECL_TEMPLATE_PARMS (r)
10015               = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
10016                                        complain);
10017             TYPE_NAME (new_type) = r;
10018             break;
10019           }
10020
10021         /* We might already have an instance of this template.
10022            The ARGS are for the surrounding class type, so the
10023            full args contain the tsubst'd args for the context,
10024            plus the innermost args from the template decl.  */
10025         tmpl_args = DECL_CLASS_TEMPLATE_P (t)
10026           ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
10027           : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
10028         /* Because this is a template, the arguments will still be
10029            dependent, even after substitution.  If
10030            PROCESSING_TEMPLATE_DECL is not set, the dependency
10031            predicates will short-circuit.  */
10032         ++processing_template_decl;
10033         full_args = tsubst_template_args (tmpl_args, args,
10034                                           complain, in_decl);
10035         --processing_template_decl;
10036         if (full_args == error_mark_node)
10037           RETURN (error_mark_node);
10038
10039         /* If this is a default template template argument,
10040            tsubst might not have changed anything.  */
10041         if (full_args == tmpl_args)
10042           RETURN (t);
10043
10044         hash = hash_tmpl_and_args (t, full_args);
10045         spec = retrieve_specialization (t, full_args, hash);
10046         if (spec != NULL_TREE)
10047           {
10048             r = spec;
10049             break;
10050           }
10051
10052         /* Make a new template decl.  It will be similar to the
10053            original, but will record the current template arguments.
10054            We also create a new function declaration, which is just
10055            like the old one, but points to this new template, rather
10056            than the old one.  */
10057         r = copy_decl (t);
10058         gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
10059         DECL_CHAIN (r) = NULL_TREE;
10060
10061         DECL_TEMPLATE_INFO (r) = build_template_info (t, args);
10062
10063         if (TREE_CODE (decl) == TYPE_DECL
10064             && !TYPE_DECL_ALIAS_P (decl))
10065           {
10066             tree new_type;
10067             ++processing_template_decl;
10068             new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10069             --processing_template_decl;
10070             if (new_type == error_mark_node)
10071               RETURN (error_mark_node);
10072
10073             TREE_TYPE (r) = new_type;
10074             CLASSTYPE_TI_TEMPLATE (new_type) = r;
10075             DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
10076             DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
10077             DECL_CONTEXT (r) = TYPE_CONTEXT (new_type);
10078           }
10079         else
10080           {
10081             tree new_decl;
10082             ++processing_template_decl;
10083             new_decl = tsubst (decl, args, complain, in_decl);
10084             --processing_template_decl;
10085             if (new_decl == error_mark_node)
10086               RETURN (error_mark_node);
10087
10088             DECL_TEMPLATE_RESULT (r) = new_decl;
10089             DECL_TI_TEMPLATE (new_decl) = r;
10090             TREE_TYPE (r) = TREE_TYPE (new_decl);
10091             DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
10092             DECL_CONTEXT (r) = DECL_CONTEXT (new_decl);
10093           }
10094
10095         SET_DECL_IMPLICIT_INSTANTIATION (r);
10096         DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
10097         DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
10098
10099         /* The template parameters for this new template are all the
10100            template parameters for the old template, except the
10101            outermost level of parameters.  */
10102         DECL_TEMPLATE_PARMS (r)
10103           = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
10104                                    complain);
10105
10106         if (PRIMARY_TEMPLATE_P (t))
10107           DECL_PRIMARY_TEMPLATE (r) = r;
10108
10109         if (TREE_CODE (decl) != TYPE_DECL)
10110           /* Record this non-type partial instantiation.  */
10111           register_specialization (r, t,
10112                                    DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)),
10113                                    false, hash);
10114       }
10115       break;
10116
10117     case FUNCTION_DECL:
10118       {
10119         tree ctx;
10120         tree argvec = NULL_TREE;
10121         tree *friends;
10122         tree gen_tmpl;
10123         tree type;
10124         int member;
10125         int args_depth;
10126         int parms_depth;
10127
10128         /* Nobody should be tsubst'ing into non-template functions.  */
10129         gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
10130
10131         if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
10132           {
10133             tree spec;
10134             bool dependent_p;
10135
10136             /* If T is not dependent, just return it.  We have to
10137                increment PROCESSING_TEMPLATE_DECL because
10138                value_dependent_expression_p assumes that nothing is
10139                dependent when PROCESSING_TEMPLATE_DECL is zero.  */
10140             ++processing_template_decl;
10141             dependent_p = value_dependent_expression_p (t);
10142             --processing_template_decl;
10143             if (!dependent_p)
10144               RETURN (t);
10145
10146             /* Calculate the most general template of which R is a
10147                specialization, and the complete set of arguments used to
10148                specialize R.  */
10149             gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
10150             argvec = tsubst_template_args (DECL_TI_ARGS
10151                                           (DECL_TEMPLATE_RESULT
10152                                                  (DECL_TI_TEMPLATE (t))),
10153                                            args, complain, in_decl);
10154             if (argvec == error_mark_node)
10155               RETURN (error_mark_node);
10156
10157             /* Check to see if we already have this specialization.  */
10158             hash = hash_tmpl_and_args (gen_tmpl, argvec);
10159             spec = retrieve_specialization (gen_tmpl, argvec, hash);
10160
10161             if (spec)
10162               {
10163                 r = spec;
10164                 break;
10165               }
10166
10167             /* We can see more levels of arguments than parameters if
10168                there was a specialization of a member template, like
10169                this:
10170
10171                  template <class T> struct S { template <class U> void f(); }
10172                  template <> template <class U> void S<int>::f(U);
10173
10174                Here, we'll be substituting into the specialization,
10175                because that's where we can find the code we actually
10176                want to generate, but we'll have enough arguments for
10177                the most general template.
10178
10179                We also deal with the peculiar case:
10180
10181                  template <class T> struct S {
10182                    template <class U> friend void f();
10183                  };
10184                  template <class U> void f() {}
10185                  template S<int>;
10186                  template void f<double>();
10187
10188                Here, the ARGS for the instantiation of will be {int,
10189                double}.  But, we only need as many ARGS as there are
10190                levels of template parameters in CODE_PATTERN.  We are
10191                careful not to get fooled into reducing the ARGS in
10192                situations like:
10193
10194                  template <class T> struct S { template <class U> void f(U); }
10195                  template <class T> template <> void S<T>::f(int) {}
10196
10197                which we can spot because the pattern will be a
10198                specialization in this case.  */
10199             args_depth = TMPL_ARGS_DEPTH (args);
10200             parms_depth =
10201               TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
10202             if (args_depth > parms_depth
10203                 && !DECL_TEMPLATE_SPECIALIZATION (t))
10204               args = get_innermost_template_args (args, parms_depth);
10205           }
10206         else
10207           {
10208             /* This special case arises when we have something like this:
10209
10210                  template <class T> struct S {
10211                    friend void f<int>(int, double);
10212                  };
10213
10214                Here, the DECL_TI_TEMPLATE for the friend declaration
10215                will be an IDENTIFIER_NODE.  We are being called from
10216                tsubst_friend_function, and we want only to create a
10217                new decl (R) with appropriate types so that we can call
10218                determine_specialization.  */
10219             gen_tmpl = NULL_TREE;
10220           }
10221
10222         if (DECL_CLASS_SCOPE_P (t))
10223           {
10224             if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
10225               member = 2;
10226             else
10227               member = 1;
10228             ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
10229                                     complain, t, /*entering_scope=*/1);
10230           }
10231         else
10232           {
10233             member = 0;
10234             ctx = DECL_CONTEXT (t);
10235           }
10236         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10237         if (type == error_mark_node)
10238           RETURN (error_mark_node);
10239
10240         /* We do NOT check for matching decls pushed separately at this
10241            point, as they may not represent instantiations of this
10242            template, and in any case are considered separate under the
10243            discrete model.  */
10244         r = copy_decl (t);
10245         DECL_USE_TEMPLATE (r) = 0;
10246         TREE_TYPE (r) = type;
10247         /* Clear out the mangled name and RTL for the instantiation.  */
10248         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
10249         SET_DECL_RTL (r, NULL);
10250         /* Leave DECL_INITIAL set on deleted instantiations.  */
10251         if (!DECL_DELETED_FN (r))
10252           DECL_INITIAL (r) = NULL_TREE;
10253         DECL_CONTEXT (r) = ctx;
10254
10255         if (member && DECL_CONV_FN_P (r))
10256           /* Type-conversion operator.  Reconstruct the name, in
10257              case it's the name of one of the template's parameters.  */
10258           DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
10259
10260         DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
10261                                      complain, t);
10262         DECL_RESULT (r) = NULL_TREE;
10263
10264         TREE_STATIC (r) = 0;
10265         TREE_PUBLIC (r) = TREE_PUBLIC (t);
10266         DECL_EXTERNAL (r) = 1;
10267         /* If this is an instantiation of a function with internal
10268            linkage, we already know what object file linkage will be
10269            assigned to the instantiation.  */
10270         DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
10271         DECL_DEFER_OUTPUT (r) = 0;
10272         DECL_CHAIN (r) = NULL_TREE;
10273         DECL_PENDING_INLINE_INFO (r) = 0;
10274         DECL_PENDING_INLINE_P (r) = 0;
10275         DECL_SAVED_TREE (r) = NULL_TREE;
10276         DECL_STRUCT_FUNCTION (r) = NULL;
10277         TREE_USED (r) = 0;
10278         /* We'll re-clone as appropriate in instantiate_template.  */
10279         DECL_CLONED_FUNCTION (r) = NULL_TREE;
10280
10281         /* If we aren't complaining now, return on error before we register
10282            the specialization so that we'll complain eventually.  */
10283         if ((complain & tf_error) == 0
10284             && IDENTIFIER_OPNAME_P (DECL_NAME (r))
10285             && !grok_op_properties (r, /*complain=*/false))
10286           RETURN (error_mark_node);
10287
10288         /* Set up the DECL_TEMPLATE_INFO for R.  There's no need to do
10289            this in the special friend case mentioned above where
10290            GEN_TMPL is NULL.  */
10291         if (gen_tmpl)
10292           {
10293             DECL_TEMPLATE_INFO (r)
10294               = build_template_info (gen_tmpl, argvec);
10295             SET_DECL_IMPLICIT_INSTANTIATION (r);
10296             register_specialization (r, gen_tmpl, argvec, false, hash);
10297
10298             /* We're not supposed to instantiate default arguments
10299                until they are called, for a template.  But, for a
10300                declaration like:
10301
10302                  template <class T> void f ()
10303                  { extern void g(int i = T()); }
10304
10305                we should do the substitution when the template is
10306                instantiated.  We handle the member function case in
10307                instantiate_class_template since the default arguments
10308                might refer to other members of the class.  */
10309             if (!member
10310                 && !PRIMARY_TEMPLATE_P (gen_tmpl)
10311                 && !uses_template_parms (argvec))
10312               tsubst_default_arguments (r);
10313           }
10314         else
10315           DECL_TEMPLATE_INFO (r) = NULL_TREE;
10316
10317         /* Copy the list of befriending classes.  */
10318         for (friends = &DECL_BEFRIENDING_CLASSES (r);
10319              *friends;
10320              friends = &TREE_CHAIN (*friends))
10321           {
10322             *friends = copy_node (*friends);
10323             TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
10324                                             args, complain,
10325                                             in_decl);
10326           }
10327
10328         if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
10329           {
10330             maybe_retrofit_in_chrg (r);
10331             if (DECL_CONSTRUCTOR_P (r))
10332               grok_ctor_properties (ctx, r);
10333             /* If this is an instantiation of a member template, clone it.
10334                If it isn't, that'll be handled by
10335                clone_constructors_and_destructors.  */
10336             if (PRIMARY_TEMPLATE_P (gen_tmpl))
10337               clone_function_decl (r, /*update_method_vec_p=*/0);
10338           }
10339         else if ((complain & tf_error) != 0
10340                  && IDENTIFIER_OPNAME_P (DECL_NAME (r))
10341                  && !grok_op_properties (r, /*complain=*/true))
10342           RETURN (error_mark_node);
10343
10344         if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
10345           SET_DECL_FRIEND_CONTEXT (r,
10346                                    tsubst (DECL_FRIEND_CONTEXT (t),
10347                                             args, complain, in_decl));
10348
10349         /* Possibly limit visibility based on template args.  */
10350         DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
10351         if (DECL_VISIBILITY_SPECIFIED (t))
10352           {
10353             DECL_VISIBILITY_SPECIFIED (r) = 0;
10354             DECL_ATTRIBUTES (r)
10355               = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
10356           }
10357         determine_visibility (r);
10358         if (DECL_DEFAULTED_OUTSIDE_CLASS_P (r)
10359             && !processing_template_decl)
10360           defaulted_late_check (r);
10361
10362         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
10363                                         args, complain, in_decl);
10364       }
10365       break;
10366
10367     case PARM_DECL:
10368       {
10369         tree type = NULL_TREE;
10370         int i, len = 1;
10371         tree expanded_types = NULL_TREE;
10372         tree prev_r = NULL_TREE;
10373         tree first_r = NULL_TREE;
10374
10375         if (FUNCTION_PARAMETER_PACK_P (t))
10376           {
10377             /* If there is a local specialization that isn't a
10378                parameter pack, it means that we're doing a "simple"
10379                substitution from inside tsubst_pack_expansion. Just
10380                return the local specialization (which will be a single
10381                parm).  */
10382             tree spec = retrieve_local_specialization (t);
10383             if (spec 
10384                 && TREE_CODE (spec) == PARM_DECL
10385                 && TREE_CODE (TREE_TYPE (spec)) != TYPE_PACK_EXPANSION)
10386               RETURN (spec);
10387
10388             /* Expand the TYPE_PACK_EXPANSION that provides the types for
10389                the parameters in this function parameter pack.  */
10390             expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
10391                                                     complain, in_decl);
10392             if (TREE_CODE (expanded_types) == TREE_VEC)
10393               {
10394                 len = TREE_VEC_LENGTH (expanded_types);
10395
10396                 /* Zero-length parameter packs are boring. Just substitute
10397                    into the chain.  */
10398                 if (len == 0)
10399                   RETURN (tsubst (TREE_CHAIN (t), args, complain,
10400                                   TREE_CHAIN (t)));
10401               }
10402             else
10403               {
10404                 /* All we did was update the type. Make a note of that.  */
10405                 type = expanded_types;
10406                 expanded_types = NULL_TREE;
10407               }
10408           }
10409
10410         /* Loop through all of the parameter's we'll build. When T is
10411            a function parameter pack, LEN is the number of expanded
10412            types in EXPANDED_TYPES; otherwise, LEN is 1.  */
10413         r = NULL_TREE;
10414         for (i = 0; i < len; ++i)
10415           {
10416             prev_r = r;
10417             r = copy_node (t);
10418             if (DECL_TEMPLATE_PARM_P (t))
10419               SET_DECL_TEMPLATE_PARM_P (r);
10420
10421             if (expanded_types)
10422               /* We're on the Ith parameter of the function parameter
10423                  pack.  */
10424               {
10425                 /* An argument of a function parameter pack is not a parameter
10426                    pack.  */
10427                 FUNCTION_PARAMETER_PACK_P (r) = false;
10428
10429                 /* Get the Ith type.  */
10430                 type = TREE_VEC_ELT (expanded_types, i);
10431
10432                 if (DECL_NAME (r))
10433                   /* Rename the parameter to include the index.  */
10434                   DECL_NAME (r) =
10435                     make_ith_pack_parameter_name (DECL_NAME (r), i);
10436               }
10437             else if (!type)
10438               /* We're dealing with a normal parameter.  */
10439               type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10440
10441             type = type_decays_to (type);
10442             TREE_TYPE (r) = type;
10443             cp_apply_type_quals_to_decl (cp_type_quals (type), r);
10444
10445             if (DECL_INITIAL (r))
10446               {
10447                 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
10448                   DECL_INITIAL (r) = TREE_TYPE (r);
10449                 else
10450                   DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
10451                                              complain, in_decl);
10452               }
10453
10454             DECL_CONTEXT (r) = NULL_TREE;
10455
10456             if (!DECL_TEMPLATE_PARM_P (r))
10457               DECL_ARG_TYPE (r) = type_passed_as (type);
10458
10459             apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
10460                                             args, complain, in_decl);
10461
10462             /* Keep track of the first new parameter we
10463                generate. That's what will be returned to the
10464                caller.  */
10465             if (!first_r)
10466               first_r = r;
10467
10468             /* Build a proper chain of parameters when substituting
10469                into a function parameter pack.  */
10470             if (prev_r)
10471               DECL_CHAIN (prev_r) = r;
10472           }
10473
10474         if (DECL_CHAIN (t))
10475           DECL_CHAIN (r) = tsubst (DECL_CHAIN (t), args,
10476                                    complain, DECL_CHAIN (t));
10477
10478         /* FIRST_R contains the start of the chain we've built.  */
10479         r = first_r;
10480       }
10481       break;
10482
10483     case FIELD_DECL:
10484       {
10485         tree type;
10486
10487         r = copy_decl (t);
10488         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10489         if (type == error_mark_node)
10490           RETURN (error_mark_node);
10491         TREE_TYPE (r) = type;
10492         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
10493
10494         if (DECL_C_BIT_FIELD (r))
10495           /* For bit-fields, DECL_INITIAL gives the number of bits.  For
10496              non-bit-fields DECL_INITIAL is a non-static data member
10497              initializer, which gets deferred instantiation.  */
10498           DECL_INITIAL (r)
10499             = tsubst_expr (DECL_INITIAL (t), args,
10500                            complain, in_decl,
10501                            /*integral_constant_expression_p=*/true);
10502         else if (DECL_INITIAL (t))
10503           {
10504             /* Set up DECL_TEMPLATE_INFO so that we can get at the
10505                NSDMI in perform_member_init.  Still set DECL_INITIAL
10506                so that we know there is one.  */
10507             DECL_INITIAL (r) = void_zero_node;
10508             gcc_assert (DECL_LANG_SPECIFIC (r) == NULL);
10509             retrofit_lang_decl (r);
10510             DECL_TEMPLATE_INFO (r) = build_template_info (t, args);
10511           }
10512         /* We don't have to set DECL_CONTEXT here; it is set by
10513            finish_member_declaration.  */
10514         DECL_CHAIN (r) = NULL_TREE;
10515         if (VOID_TYPE_P (type))
10516           error ("instantiation of %q+D as type %qT", r, type);
10517
10518         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
10519                                         args, complain, in_decl);
10520       }
10521       break;
10522
10523     case USING_DECL:
10524       /* We reach here only for member using decls.  */
10525       if (DECL_DEPENDENT_P (t))
10526         {
10527           r = do_class_using_decl
10528             (tsubst_copy (USING_DECL_SCOPE (t), args, complain, in_decl),
10529              tsubst_copy (DECL_NAME (t), args, complain, in_decl));
10530           if (!r)
10531             r = error_mark_node;
10532           else
10533             {
10534               TREE_PROTECTED (r) = TREE_PROTECTED (t);
10535               TREE_PRIVATE (r) = TREE_PRIVATE (t);
10536             }
10537         }
10538       else
10539         {
10540           r = copy_node (t);
10541           DECL_CHAIN (r) = NULL_TREE;
10542         }
10543       break;
10544
10545     case TYPE_DECL:
10546     case VAR_DECL:
10547       {
10548         tree argvec = NULL_TREE;
10549         tree gen_tmpl = NULL_TREE;
10550         tree spec;
10551         tree tmpl = NULL_TREE;
10552         tree ctx;
10553         tree type = NULL_TREE;
10554         bool local_p;
10555
10556         if (TREE_CODE (t) == TYPE_DECL
10557             && t == TYPE_MAIN_DECL (TREE_TYPE (t)))
10558           {
10559             /* If this is the canonical decl, we don't have to
10560                mess with instantiations, and often we can't (for
10561                typename, template type parms and such).  Note that
10562                TYPE_NAME is not correct for the above test if
10563                we've copied the type for a typedef.  */
10564             type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10565             if (type == error_mark_node)
10566               RETURN (error_mark_node);
10567             r = TYPE_NAME (type);
10568             break;
10569           }
10570
10571         /* Check to see if we already have the specialization we
10572            need.  */
10573         spec = NULL_TREE;
10574         if (DECL_CLASS_SCOPE_P (t) || DECL_NAMESPACE_SCOPE_P (t))
10575           {
10576             /* T is a static data member or namespace-scope entity.
10577                We have to substitute into namespace-scope variables
10578                (even though such entities are never templates) because
10579                of cases like:
10580                
10581                  template <class T> void f() { extern T t; }
10582
10583                where the entity referenced is not known until
10584                instantiation time.  */
10585             local_p = false;
10586             ctx = DECL_CONTEXT (t);
10587             if (DECL_CLASS_SCOPE_P (t))
10588               {
10589                 ctx = tsubst_aggr_type (ctx, args,
10590                                         complain,
10591                                         in_decl, /*entering_scope=*/1);
10592                 /* If CTX is unchanged, then T is in fact the
10593                    specialization we want.  That situation occurs when
10594                    referencing a static data member within in its own
10595                    class.  We can use pointer equality, rather than
10596                    same_type_p, because DECL_CONTEXT is always
10597                    canonical...  */
10598                 if (ctx == DECL_CONTEXT (t)
10599                     && (TREE_CODE (t) != TYPE_DECL
10600                         /* ... unless T is a member template; in which
10601                            case our caller can be willing to create a
10602                            specialization of that template represented
10603                            by T.  */
10604                         || !(DECL_TI_TEMPLATE (t)
10605                              && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (t)))))
10606                   spec = t;
10607               }
10608
10609             if (!spec)
10610               {
10611                 tmpl = DECL_TI_TEMPLATE (t);
10612                 gen_tmpl = most_general_template (tmpl);
10613                 argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
10614                 hash = hash_tmpl_and_args (gen_tmpl, argvec);
10615                 spec = retrieve_specialization (gen_tmpl, argvec, hash);
10616               }
10617           }
10618         else
10619           {
10620             /* A local variable.  */
10621             local_p = true;
10622             /* Subsequent calls to pushdecl will fill this in.  */
10623             ctx = NULL_TREE;
10624             spec = retrieve_local_specialization (t);
10625           }
10626         /* If we already have the specialization we need, there is
10627            nothing more to do.  */ 
10628         if (spec)
10629           {
10630             r = spec;
10631             break;
10632           }
10633
10634         /* Create a new node for the specialization we need.  */
10635         r = copy_decl (t);
10636         if (type == NULL_TREE)
10637           {
10638             if (is_typedef_decl (t))
10639               type = DECL_ORIGINAL_TYPE (t);
10640             else
10641               type = TREE_TYPE (t);
10642             if (TREE_CODE (t) == VAR_DECL
10643                 && VAR_HAD_UNKNOWN_BOUND (t)
10644                 && type != error_mark_node)
10645               type = strip_array_domain (type);
10646             type = tsubst (type, args, complain, in_decl);
10647           }
10648         if (TREE_CODE (r) == VAR_DECL)
10649           {
10650             /* Even if the original location is out of scope, the
10651                newly substituted one is not.  */
10652             DECL_DEAD_FOR_LOCAL (r) = 0;
10653             DECL_INITIALIZED_P (r) = 0;
10654             DECL_TEMPLATE_INSTANTIATED (r) = 0;
10655             if (type == error_mark_node)
10656               RETURN (error_mark_node);
10657             if (TREE_CODE (type) == FUNCTION_TYPE)
10658               {
10659                 /* It may seem that this case cannot occur, since:
10660
10661                      typedef void f();
10662                      void g() { f x; }
10663
10664                    declares a function, not a variable.  However:
10665       
10666                      typedef void f();
10667                      template <typename T> void g() { T t; }
10668                      template void g<f>();
10669
10670                    is an attempt to declare a variable with function
10671                    type.  */
10672                 error ("variable %qD has function type",
10673                        /* R is not yet sufficiently initialized, so we
10674                           just use its name.  */
10675                        DECL_NAME (r));
10676                 RETURN (error_mark_node);
10677               }
10678             type = complete_type (type);
10679             /* Wait until cp_finish_decl to set this again, to handle
10680                circular dependency (template/instantiate6.C). */
10681             DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r) = 0;
10682             type = check_var_type (DECL_NAME (r), type);
10683
10684             if (DECL_HAS_VALUE_EXPR_P (t))
10685               {
10686                 tree ve = DECL_VALUE_EXPR (t);
10687                 ve = tsubst_expr (ve, args, complain, in_decl,
10688                                   /*constant_expression_p=*/false);
10689                 if (REFERENCE_REF_P (ve))
10690                   {
10691                     gcc_assert (TREE_CODE (type) == REFERENCE_TYPE);
10692                     ve = TREE_OPERAND (ve, 0);
10693                   }
10694                 SET_DECL_VALUE_EXPR (r, ve);
10695               }
10696           }
10697         else if (DECL_SELF_REFERENCE_P (t))
10698           SET_DECL_SELF_REFERENCE_P (r);
10699         TREE_TYPE (r) = type;
10700         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
10701         DECL_CONTEXT (r) = ctx;
10702         /* Clear out the mangled name and RTL for the instantiation.  */
10703         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
10704         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
10705           SET_DECL_RTL (r, NULL);
10706         /* The initializer must not be expanded until it is required;
10707            see [temp.inst].  */
10708         DECL_INITIAL (r) = NULL_TREE;
10709         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
10710           SET_DECL_RTL (r, NULL);
10711         DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
10712         if (TREE_CODE (r) == VAR_DECL)
10713           {
10714             /* Possibly limit visibility based on template args.  */
10715             DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
10716             if (DECL_VISIBILITY_SPECIFIED (t))
10717               {
10718                 DECL_VISIBILITY_SPECIFIED (r) = 0;
10719                 DECL_ATTRIBUTES (r)
10720                   = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
10721               }
10722             determine_visibility (r);
10723           }
10724
10725         if (!local_p)
10726           {
10727             /* A static data member declaration is always marked
10728                external when it is declared in-class, even if an
10729                initializer is present.  We mimic the non-template
10730                processing here.  */
10731             DECL_EXTERNAL (r) = 1;
10732
10733             register_specialization (r, gen_tmpl, argvec, false, hash);
10734             DECL_TEMPLATE_INFO (r) = build_template_info (tmpl, argvec);
10735             SET_DECL_IMPLICIT_INSTANTIATION (r);
10736           }
10737         else if (cp_unevaluated_operand)
10738           {
10739             /* We're substituting this var in a decltype outside of its
10740                scope, such as for a lambda return type.  Don't add it to
10741                local_specializations, do perform auto deduction.  */
10742             tree auto_node = type_uses_auto (type);
10743             if (auto_node)
10744               {
10745                 tree init
10746                   = tsubst_expr (DECL_INITIAL (t), args, complain, in_decl,
10747                                  /*constant_expression_p=*/false);
10748                 init = resolve_nondeduced_context (init);
10749                 TREE_TYPE (r) = type
10750                   = do_auto_deduction (type, init, auto_node);
10751               }
10752           }
10753         else
10754           register_local_specialization (r, t);
10755
10756         DECL_CHAIN (r) = NULL_TREE;
10757
10758         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r),
10759                                         /*flags=*/0,
10760                                         args, complain, in_decl);
10761
10762         /* Preserve a typedef that names a type.  */
10763         if (is_typedef_decl (r))
10764           {
10765             DECL_ORIGINAL_TYPE (r) = NULL_TREE;
10766             set_underlying_type (r);
10767           }
10768
10769         layout_decl (r, 0);
10770       }
10771       break;
10772
10773     default:
10774       gcc_unreachable ();
10775     }
10776 #undef RETURN
10777
10778  out:
10779   /* Restore the file and line information.  */
10780   input_location = saved_loc;
10781
10782   return r;
10783 }
10784
10785 /* Substitute into the ARG_TYPES of a function type.  */
10786
10787 static tree
10788 tsubst_arg_types (tree arg_types,
10789                   tree args,
10790                   tsubst_flags_t complain,
10791                   tree in_decl)
10792 {
10793   tree remaining_arg_types;
10794   tree type = NULL_TREE;
10795   int i = 1;
10796   tree expanded_args = NULL_TREE;
10797   tree default_arg;
10798
10799   if (!arg_types || arg_types == void_list_node)
10800     return arg_types;
10801
10802   remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
10803                                           args, complain, in_decl);
10804   if (remaining_arg_types == error_mark_node)
10805     return error_mark_node;
10806
10807   if (PACK_EXPANSION_P (TREE_VALUE (arg_types)))
10808     {
10809       /* For a pack expansion, perform substitution on the
10810          entire expression. Later on, we'll handle the arguments
10811          one-by-one.  */
10812       expanded_args = tsubst_pack_expansion (TREE_VALUE (arg_types),
10813                                             args, complain, in_decl);
10814
10815       if (TREE_CODE (expanded_args) == TREE_VEC)
10816         /* So that we'll spin through the parameters, one by one.  */
10817         i = TREE_VEC_LENGTH (expanded_args);
10818       else
10819         {
10820           /* We only partially substituted into the parameter
10821              pack. Our type is TYPE_PACK_EXPANSION.  */
10822           type = expanded_args;
10823           expanded_args = NULL_TREE;
10824         }
10825     }
10826
10827   while (i > 0) {
10828     --i;
10829     
10830     if (expanded_args)
10831       type = TREE_VEC_ELT (expanded_args, i);
10832     else if (!type)
10833       type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
10834
10835     if (type == error_mark_node)
10836       return error_mark_node;
10837     if (VOID_TYPE_P (type))
10838       {
10839         if (complain & tf_error)
10840           {
10841             error ("invalid parameter type %qT", type);
10842             if (in_decl)
10843               error ("in declaration %q+D", in_decl);
10844           }
10845         return error_mark_node;
10846     }
10847     
10848     /* Do array-to-pointer, function-to-pointer conversion, and ignore
10849        top-level qualifiers as required.  */
10850     type = cv_unqualified (type_decays_to (type));
10851
10852     /* We do not substitute into default arguments here.  The standard
10853        mandates that they be instantiated only when needed, which is
10854        done in build_over_call.  */
10855     default_arg = TREE_PURPOSE (arg_types);
10856
10857     if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
10858       {
10859         /* We've instantiated a template before its default arguments
10860            have been parsed.  This can happen for a nested template
10861            class, and is not an error unless we require the default
10862            argument in a call of this function.  */
10863         remaining_arg_types = 
10864           tree_cons (default_arg, type, remaining_arg_types);
10865         VEC_safe_push (tree, gc, DEFARG_INSTANTIATIONS (default_arg), 
10866                        remaining_arg_types);
10867       }
10868     else
10869       remaining_arg_types = 
10870         hash_tree_cons (default_arg, type, remaining_arg_types);
10871   }
10872         
10873   return remaining_arg_types;
10874 }
10875
10876 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE.  This routine does
10877    *not* handle the exception-specification for FNTYPE, because the
10878    initial substitution of explicitly provided template parameters
10879    during argument deduction forbids substitution into the
10880    exception-specification:
10881
10882      [temp.deduct]
10883
10884      All references in the function type of the function template to  the
10885      corresponding template parameters are replaced by the specified tem-
10886      plate argument values.  If a substitution in a template parameter or
10887      in  the function type of the function template results in an invalid
10888      type, type deduction fails.  [Note: The equivalent  substitution  in
10889      exception specifications is done only when the function is instanti-
10890      ated, at which point a program is  ill-formed  if  the  substitution
10891      results in an invalid type.]  */
10892
10893 static tree
10894 tsubst_function_type (tree t,
10895                       tree args,
10896                       tsubst_flags_t complain,
10897                       tree in_decl)
10898 {
10899   tree return_type;
10900   tree arg_types;
10901   tree fntype;
10902
10903   /* The TYPE_CONTEXT is not used for function/method types.  */
10904   gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
10905
10906   /* Substitute the return type.  */
10907   return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10908   if (return_type == error_mark_node)
10909     return error_mark_node;
10910   /* The standard does not presently indicate that creation of a
10911      function type with an invalid return type is a deduction failure.
10912      However, that is clearly analogous to creating an array of "void"
10913      or a reference to a reference.  This is core issue #486.  */
10914   if (TREE_CODE (return_type) == ARRAY_TYPE
10915       || TREE_CODE (return_type) == FUNCTION_TYPE)
10916     {
10917       if (complain & tf_error)
10918         {
10919           if (TREE_CODE (return_type) == ARRAY_TYPE)
10920             error ("function returning an array");
10921           else
10922             error ("function returning a function");
10923         }
10924       return error_mark_node;
10925     }
10926
10927   /* Substitute the argument types.  */
10928   arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
10929                                 complain, in_decl);
10930   if (arg_types == error_mark_node)
10931     return error_mark_node;
10932
10933   /* Construct a new type node and return it.  */
10934   if (TREE_CODE (t) == FUNCTION_TYPE)
10935     {
10936       fntype = build_function_type (return_type, arg_types);
10937       fntype = apply_memfn_quals (fntype, type_memfn_quals (t));
10938     }
10939   else
10940     {
10941       tree r = TREE_TYPE (TREE_VALUE (arg_types));
10942       if (! MAYBE_CLASS_TYPE_P (r))
10943         {
10944           /* [temp.deduct]
10945
10946              Type deduction may fail for any of the following
10947              reasons:
10948
10949              -- Attempting to create "pointer to member of T" when T
10950              is not a class type.  */
10951           if (complain & tf_error)
10952             error ("creating pointer to member function of non-class type %qT",
10953                       r);
10954           return error_mark_node;
10955         }
10956
10957       fntype = build_method_type_directly (r, return_type,
10958                                            TREE_CHAIN (arg_types));
10959     }
10960   fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
10961
10962   return fntype;
10963 }
10964
10965 /* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE.  Substitute the template
10966    ARGS into that specification, and return the substituted
10967    specification.  If there is no specification, return NULL_TREE.  */
10968
10969 static tree
10970 tsubst_exception_specification (tree fntype,
10971                                 tree args,
10972                                 tsubst_flags_t complain,
10973                                 tree in_decl,
10974                                 bool defer_ok)
10975 {
10976   tree specs;
10977   tree new_specs;
10978
10979   specs = TYPE_RAISES_EXCEPTIONS (fntype);
10980   new_specs = NULL_TREE;
10981   if (specs && TREE_PURPOSE (specs))
10982     {
10983       /* A noexcept-specifier.  */
10984       tree expr = TREE_PURPOSE (specs);
10985       if (expr == boolean_true_node || expr == boolean_false_node)
10986         new_specs = expr;
10987       else if (defer_ok)
10988         {
10989           /* Defer instantiation of noexcept-specifiers to avoid
10990              excessive instantiations (c++/49107).  */
10991           new_specs = make_node (DEFERRED_NOEXCEPT);
10992           if (DEFERRED_NOEXCEPT_SPEC_P (specs))
10993             {
10994               /* We already partially instantiated this member template,
10995                  so combine the new args with the old.  */
10996               DEFERRED_NOEXCEPT_PATTERN (new_specs)
10997                 = DEFERRED_NOEXCEPT_PATTERN (expr);
10998               DEFERRED_NOEXCEPT_ARGS (new_specs)
10999                 = add_to_template_args (DEFERRED_NOEXCEPT_ARGS (expr), args);
11000             }
11001           else
11002             {
11003               DEFERRED_NOEXCEPT_PATTERN (new_specs) = expr;
11004               DEFERRED_NOEXCEPT_ARGS (new_specs) = args;
11005             }
11006         }
11007       else
11008         new_specs = tsubst_copy_and_build
11009           (expr, args, complain, in_decl, /*function_p=*/false,
11010            /*integral_constant_expression_p=*/true);
11011       new_specs = build_noexcept_spec (new_specs, complain);
11012     }
11013   else if (specs)
11014     {
11015       if (! TREE_VALUE (specs))
11016         new_specs = specs;
11017       else
11018         while (specs)
11019           {
11020             tree spec;
11021             int i, len = 1;
11022             tree expanded_specs = NULL_TREE;
11023
11024             if (PACK_EXPANSION_P (TREE_VALUE (specs)))
11025               {
11026                 /* Expand the pack expansion type.  */
11027                 expanded_specs = tsubst_pack_expansion (TREE_VALUE (specs),
11028                                                        args, complain,
11029                                                        in_decl);
11030
11031                 if (expanded_specs == error_mark_node)
11032                   return error_mark_node;
11033                 else if (TREE_CODE (expanded_specs) == TREE_VEC)
11034                   len = TREE_VEC_LENGTH (expanded_specs);
11035                 else
11036                   {
11037                     /* We're substituting into a member template, so
11038                        we got a TYPE_PACK_EXPANSION back.  Add that
11039                        expansion and move on.  */
11040                     gcc_assert (TREE_CODE (expanded_specs) 
11041                                 == TYPE_PACK_EXPANSION);
11042                     new_specs = add_exception_specifier (new_specs,
11043                                                          expanded_specs,
11044                                                          complain);
11045                     specs = TREE_CHAIN (specs);
11046                     continue;
11047                   }
11048               }
11049
11050             for (i = 0; i < len; ++i)
11051               {
11052                 if (expanded_specs)
11053                   spec = TREE_VEC_ELT (expanded_specs, i);
11054                 else
11055                   spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
11056                 if (spec == error_mark_node)
11057                   return spec;
11058                 new_specs = add_exception_specifier (new_specs, spec, 
11059                                                      complain);
11060               }
11061
11062             specs = TREE_CHAIN (specs);
11063           }
11064     }
11065   return new_specs;
11066 }
11067
11068 /* Take the tree structure T and replace template parameters used
11069    therein with the argument vector ARGS.  IN_DECL is an associated
11070    decl for diagnostics.  If an error occurs, returns ERROR_MARK_NODE.
11071    Issue error and warning messages under control of COMPLAIN.  Note
11072    that we must be relatively non-tolerant of extensions here, in
11073    order to preserve conformance; if we allow substitutions that
11074    should not be allowed, we may allow argument deductions that should
11075    not succeed, and therefore report ambiguous overload situations
11076    where there are none.  In theory, we could allow the substitution,
11077    but indicate that it should have failed, and allow our caller to
11078    make sure that the right thing happens, but we don't try to do this
11079    yet.
11080
11081    This function is used for dealing with types, decls and the like;
11082    for expressions, use tsubst_expr or tsubst_copy.  */
11083
11084 tree
11085 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
11086 {
11087   enum tree_code code;
11088   tree type, r = NULL_TREE;
11089
11090   if (t == NULL_TREE || t == error_mark_node
11091       || t == integer_type_node
11092       || t == void_type_node
11093       || t == char_type_node
11094       || t == unknown_type_node
11095       || TREE_CODE (t) == NAMESPACE_DECL
11096       || TREE_CODE (t) == TRANSLATION_UNIT_DECL)
11097     return t;
11098
11099   if (DECL_P (t))
11100     return tsubst_decl (t, args, complain);
11101
11102   if (args == NULL_TREE)
11103     return t;
11104
11105   code = TREE_CODE (t);
11106
11107   if (code == IDENTIFIER_NODE)
11108     type = IDENTIFIER_TYPE_VALUE (t);
11109   else
11110     type = TREE_TYPE (t);
11111
11112   gcc_assert (type != unknown_type_node);
11113
11114   /* Reuse typedefs.  We need to do this to handle dependent attributes,
11115      such as attribute aligned.  */
11116   if (TYPE_P (t)
11117       && typedef_variant_p (t))
11118     {
11119       tree decl = TYPE_NAME (t);
11120
11121       if (TYPE_DECL_ALIAS_P (decl)
11122           && DECL_LANG_SPECIFIC (decl)
11123           && DECL_TEMPLATE_INFO (decl)
11124           && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl)))
11125         {
11126           /* DECL represents an alias template and we want to
11127              instantiate it.  Let's substitute our arguments for the
11128              template parameters into the declaration and get the
11129              resulting type.  */
11130           r = tsubst (decl, args, complain, decl);
11131         }
11132       else if (DECL_CLASS_SCOPE_P (decl)
11133                && CLASSTYPE_TEMPLATE_INFO (DECL_CONTEXT (decl))
11134                && uses_template_parms (DECL_CONTEXT (decl)))
11135         {
11136           tree tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
11137           tree gen_args = tsubst (DECL_TI_ARGS (decl), args, complain, in_decl);
11138           r = retrieve_specialization (tmpl, gen_args, 0);
11139         }
11140       else if (DECL_FUNCTION_SCOPE_P (decl)
11141                && DECL_TEMPLATE_INFO (DECL_CONTEXT (decl))
11142                && uses_template_parms (DECL_TI_ARGS (DECL_CONTEXT (decl))))
11143         r = retrieve_local_specialization (decl);
11144       else
11145         /* The typedef is from a non-template context.  */
11146         return t;
11147
11148       if (r)
11149         {
11150           r = TREE_TYPE (r);
11151           r = cp_build_qualified_type_real
11152             (r, cp_type_quals (t) | cp_type_quals (r),
11153              complain | tf_ignore_bad_quals);
11154           return r;
11155         }
11156       /* Else we must be instantiating the typedef, so fall through.  */
11157     }
11158
11159   if (type
11160       && code != TYPENAME_TYPE
11161       && code != TEMPLATE_TYPE_PARM
11162       && code != IDENTIFIER_NODE
11163       && code != FUNCTION_TYPE
11164       && code != METHOD_TYPE)
11165     type = tsubst (type, args, complain, in_decl);
11166   if (type == error_mark_node)
11167     return error_mark_node;
11168
11169   switch (code)
11170     {
11171     case RECORD_TYPE:
11172     case UNION_TYPE:
11173     case ENUMERAL_TYPE:
11174       return tsubst_aggr_type (t, args, complain, in_decl,
11175                                /*entering_scope=*/0);
11176
11177     case ERROR_MARK:
11178     case IDENTIFIER_NODE:
11179     case VOID_TYPE:
11180     case REAL_TYPE:
11181     case COMPLEX_TYPE:
11182     case VECTOR_TYPE:
11183     case BOOLEAN_TYPE:
11184     case NULLPTR_TYPE:
11185     case LANG_TYPE:
11186       return t;
11187
11188     case INTEGER_TYPE:
11189       if (t == integer_type_node)
11190         return t;
11191
11192       if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
11193           && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
11194         return t;
11195
11196       {
11197         tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
11198
11199         max = tsubst_expr (omax, args, complain, in_decl,
11200                            /*integral_constant_expression_p=*/false);
11201
11202         /* Fix up type of the magic NOP_EXPR with TREE_SIDE_EFFECTS if
11203            needed.  */
11204         if (TREE_CODE (max) == NOP_EXPR
11205             && TREE_SIDE_EFFECTS (omax)
11206             && !TREE_TYPE (max))
11207           TREE_TYPE (max) = TREE_TYPE (TREE_OPERAND (max, 0));
11208
11209         /* If we're in a partial instantiation, preserve the magic NOP_EXPR
11210            with TREE_SIDE_EFFECTS that indicates this is not an integral
11211            constant expression.  */
11212         if (processing_template_decl
11213             && TREE_SIDE_EFFECTS (omax) && TREE_CODE (omax) == NOP_EXPR)
11214           {
11215             gcc_assert (TREE_CODE (max) == NOP_EXPR);
11216             TREE_SIDE_EFFECTS (max) = 1;
11217           }
11218
11219         return compute_array_index_type (NULL_TREE, max, complain);
11220       }
11221
11222     case TEMPLATE_TYPE_PARM:
11223     case TEMPLATE_TEMPLATE_PARM:
11224     case BOUND_TEMPLATE_TEMPLATE_PARM:
11225     case TEMPLATE_PARM_INDEX:
11226       {
11227         int idx;
11228         int level;
11229         int levels;
11230         tree arg = NULL_TREE;
11231
11232         r = NULL_TREE;
11233
11234         gcc_assert (TREE_VEC_LENGTH (args) > 0);
11235         template_parm_level_and_index (t, &level, &idx); 
11236
11237         levels = TMPL_ARGS_DEPTH (args);
11238         if (level <= levels)
11239           {
11240             arg = TMPL_ARG (args, level, idx);
11241
11242             if (arg && TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
11243               /* See through ARGUMENT_PACK_SELECT arguments. */
11244               arg = ARGUMENT_PACK_SELECT_ARG (arg);
11245           }
11246
11247         if (arg == error_mark_node)
11248           return error_mark_node;
11249         else if (arg != NULL_TREE)
11250           {
11251             if (ARGUMENT_PACK_P (arg))
11252               /* If ARG is an argument pack, we don't actually want to
11253                  perform a substitution here, because substitutions
11254                  for argument packs are only done
11255                  element-by-element. We can get to this point when
11256                  substituting the type of a non-type template
11257                  parameter pack, when that type actually contains
11258                  template parameter packs from an outer template, e.g.,
11259
11260                  template<typename... Types> struct A {
11261                    template<Types... Values> struct B { };
11262                  };  */
11263               return t;
11264
11265             if (code == TEMPLATE_TYPE_PARM)
11266               {
11267                 int quals;
11268                 gcc_assert (TYPE_P (arg));
11269
11270                 quals = cp_type_quals (arg) | cp_type_quals (t);
11271                   
11272                 return cp_build_qualified_type_real
11273                   (arg, quals, complain | tf_ignore_bad_quals);
11274               }
11275             else if (code == BOUND_TEMPLATE_TEMPLATE_PARM)
11276               {
11277                 /* We are processing a type constructed from a
11278                    template template parameter.  */
11279                 tree argvec = tsubst (TYPE_TI_ARGS (t),
11280                                       args, complain, in_decl);
11281                 if (argvec == error_mark_node)
11282                   return error_mark_node;
11283
11284                 gcc_assert (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
11285                             || TREE_CODE (arg) == TEMPLATE_DECL
11286                             || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
11287
11288                 if (TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE)
11289                   /* Consider this code:
11290
11291                         template <template <class> class Template>
11292                         struct Internal {
11293                         template <class Arg> using Bind = Template<Arg>;
11294                         };
11295
11296                         template <template <class> class Template, class Arg>
11297                         using Instantiate = Template<Arg>; //#0
11298
11299                         template <template <class> class Template,
11300                                   class Argument>
11301                         using Bind =
11302                           Instantiate<Internal<Template>::template Bind,
11303                                       Argument>; //#1
11304
11305                      When #1 is parsed, the
11306                      BOUND_TEMPLATE_TEMPLATE_PARM representing the
11307                      parameter `Template' in #0 matches the
11308                      UNBOUND_CLASS_TEMPLATE representing the argument
11309                      `Internal<Template>::template Bind'; We then want
11310                      to assemble the type `Bind<Argument>' that can't
11311                      be fully created right now, because
11312                      `Internal<Template>' not being complete, the Bind
11313                      template cannot be looked up in that context.  So
11314                      we need to "store" `Bind<Argument>' for later
11315                      when the context of Bind becomes complete.  Let's
11316                      store that in a TYPENAME_TYPE.  */
11317                   return make_typename_type (TYPE_CONTEXT (arg),
11318                                              build_nt (TEMPLATE_ID_EXPR,
11319                                                        TYPE_IDENTIFIER (arg),
11320                                                        argvec),
11321                                              typename_type,
11322                                              complain);
11323
11324                 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
11325                    are resolving nested-types in the signature of a
11326                    member function templates.  Otherwise ARG is a
11327                    TEMPLATE_DECL and is the real template to be
11328                    instantiated.  */
11329                 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
11330                   arg = TYPE_NAME (arg);
11331
11332                 r = lookup_template_class (arg,
11333                                            argvec, in_decl,
11334                                            DECL_CONTEXT (arg),
11335                                             /*entering_scope=*/0,
11336                                            complain);
11337                 return cp_build_qualified_type_real
11338                   (r, cp_type_quals (t), complain);
11339               }
11340             else
11341               /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX.  */
11342               return convert_from_reference (unshare_expr (arg));
11343           }
11344
11345         if (level == 1)
11346           /* This can happen during the attempted tsubst'ing in
11347              unify.  This means that we don't yet have any information
11348              about the template parameter in question.  */
11349           return t;
11350
11351         /* If we get here, we must have been looking at a parm for a
11352            more deeply nested template.  Make a new version of this
11353            template parameter, but with a lower level.  */
11354         switch (code)
11355           {
11356           case TEMPLATE_TYPE_PARM:
11357           case TEMPLATE_TEMPLATE_PARM:
11358           case BOUND_TEMPLATE_TEMPLATE_PARM:
11359             if (cp_type_quals (t))
11360               {
11361                 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
11362                 r = cp_build_qualified_type_real
11363                   (r, cp_type_quals (t),
11364                    complain | (code == TEMPLATE_TYPE_PARM
11365                                ? tf_ignore_bad_quals : 0));
11366               }
11367             else
11368               {
11369                 r = copy_type (t);
11370                 TEMPLATE_TYPE_PARM_INDEX (r)
11371                   = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
11372                                                 r, levels, args, complain);
11373                 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
11374                 TYPE_MAIN_VARIANT (r) = r;
11375                 TYPE_POINTER_TO (r) = NULL_TREE;
11376                 TYPE_REFERENCE_TO (r) = NULL_TREE;
11377
11378                 if (TREE_CODE (r) == TEMPLATE_TEMPLATE_PARM)
11379                   /* We have reduced the level of the template
11380                      template parameter, but not the levels of its
11381                      template parameters, so canonical_type_parameter
11382                      will not be able to find the canonical template
11383                      template parameter for this level. Thus, we
11384                      require structural equality checking to compare
11385                      TEMPLATE_TEMPLATE_PARMs. */
11386                   SET_TYPE_STRUCTURAL_EQUALITY (r);
11387                 else if (TYPE_STRUCTURAL_EQUALITY_P (t))
11388                   SET_TYPE_STRUCTURAL_EQUALITY (r);
11389                 else
11390                   TYPE_CANONICAL (r) = canonical_type_parameter (r);
11391
11392                 if (code == BOUND_TEMPLATE_TEMPLATE_PARM)
11393                   {
11394                     tree argvec = tsubst (TYPE_TI_ARGS (t), args,
11395                                           complain, in_decl);
11396                     if (argvec == error_mark_node)
11397                       return error_mark_node;
11398
11399                     TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
11400                       = build_template_info (TYPE_TI_TEMPLATE (t), argvec);
11401                   }
11402               }
11403             break;
11404
11405           case TEMPLATE_PARM_INDEX:
11406             r = reduce_template_parm_level (t, type, levels, args, complain);
11407             break;
11408
11409           default:
11410             gcc_unreachable ();
11411           }
11412
11413         return r;
11414       }
11415
11416     case TREE_LIST:
11417       {
11418         tree purpose, value, chain;
11419
11420         if (t == void_list_node)
11421           return t;
11422
11423         purpose = TREE_PURPOSE (t);
11424         if (purpose)
11425           {
11426             purpose = tsubst (purpose, args, complain, in_decl);
11427             if (purpose == error_mark_node)
11428               return error_mark_node;
11429           }
11430         value = TREE_VALUE (t);
11431         if (value)
11432           {
11433             value = tsubst (value, args, complain, in_decl);
11434             if (value == error_mark_node)
11435               return error_mark_node;
11436           }
11437         chain = TREE_CHAIN (t);
11438         if (chain && chain != void_type_node)
11439           {
11440             chain = tsubst (chain, args, complain, in_decl);
11441             if (chain == error_mark_node)
11442               return error_mark_node;
11443           }
11444         if (purpose == TREE_PURPOSE (t)
11445             && value == TREE_VALUE (t)
11446             && chain == TREE_CHAIN (t))
11447           return t;
11448         return hash_tree_cons (purpose, value, chain);
11449       }
11450
11451     case TREE_BINFO:
11452       /* We should never be tsubsting a binfo.  */
11453       gcc_unreachable ();
11454
11455     case TREE_VEC:
11456       /* A vector of template arguments.  */
11457       gcc_assert (!type);
11458       return tsubst_template_args (t, args, complain, in_decl);
11459
11460     case POINTER_TYPE:
11461     case REFERENCE_TYPE:
11462       {
11463         if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
11464           return t;
11465
11466         /* [temp.deduct]
11467
11468            Type deduction may fail for any of the following
11469            reasons:
11470
11471            -- Attempting to create a pointer to reference type.
11472            -- Attempting to create a reference to a reference type or
11473               a reference to void.
11474
11475           Core issue 106 says that creating a reference to a reference
11476           during instantiation is no longer a cause for failure. We
11477           only enforce this check in strict C++98 mode.  */
11478         if ((TREE_CODE (type) == REFERENCE_TYPE
11479              && (((cxx_dialect == cxx98) && flag_iso) || code != REFERENCE_TYPE))
11480             || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
11481           {
11482             static location_t last_loc;
11483
11484             /* We keep track of the last time we issued this error
11485                message to avoid spewing a ton of messages during a
11486                single bad template instantiation.  */
11487             if (complain & tf_error
11488                 && last_loc != input_location)
11489               {
11490                 if (TREE_CODE (type) == VOID_TYPE)
11491                   error ("forming reference to void");
11492                else if (code == POINTER_TYPE)
11493                  error ("forming pointer to reference type %qT", type);
11494                else
11495                   error ("forming reference to reference type %qT", type);
11496                 last_loc = input_location;
11497               }
11498
11499             return error_mark_node;
11500           }
11501         else if (code == POINTER_TYPE)
11502           {
11503             r = build_pointer_type (type);
11504             if (TREE_CODE (type) == METHOD_TYPE)
11505               r = build_ptrmemfunc_type (r);
11506           }
11507         else if (TREE_CODE (type) == REFERENCE_TYPE)
11508           /* In C++0x, during template argument substitution, when there is an
11509              attempt to create a reference to a reference type, reference
11510              collapsing is applied as described in [14.3.1/4 temp.arg.type]:
11511
11512              "If a template-argument for a template-parameter T names a type
11513              that is a reference to a type A, an attempt to create the type
11514              'lvalue reference to cv T' creates the type 'lvalue reference to
11515              A,' while an attempt to create the type type rvalue reference to
11516              cv T' creates the type T"
11517           */
11518           r = cp_build_reference_type
11519               (TREE_TYPE (type),
11520                TYPE_REF_IS_RVALUE (t) && TYPE_REF_IS_RVALUE (type));
11521         else
11522           r = cp_build_reference_type (type, TYPE_REF_IS_RVALUE (t));
11523         r = cp_build_qualified_type_real (r, cp_type_quals (t), complain);
11524
11525         if (r != error_mark_node)
11526           /* Will this ever be needed for TYPE_..._TO values?  */
11527           layout_type (r);
11528
11529         return r;
11530       }
11531     case OFFSET_TYPE:
11532       {
11533         r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
11534         if (r == error_mark_node || !MAYBE_CLASS_TYPE_P (r))
11535           {
11536             /* [temp.deduct]
11537
11538                Type deduction may fail for any of the following
11539                reasons:
11540
11541                -- Attempting to create "pointer to member of T" when T
11542                   is not a class type.  */
11543             if (complain & tf_error)
11544               error ("creating pointer to member of non-class type %qT", r);
11545             return error_mark_node;
11546           }
11547         if (TREE_CODE (type) == REFERENCE_TYPE)
11548           {
11549             if (complain & tf_error)
11550               error ("creating pointer to member reference type %qT", type);
11551             return error_mark_node;
11552           }
11553         if (TREE_CODE (type) == VOID_TYPE)
11554           {
11555             if (complain & tf_error)
11556               error ("creating pointer to member of type void");
11557             return error_mark_node;
11558           }
11559         gcc_assert (TREE_CODE (type) != METHOD_TYPE);
11560         if (TREE_CODE (type) == FUNCTION_TYPE)
11561           {
11562             /* The type of the implicit object parameter gets its
11563                cv-qualifiers from the FUNCTION_TYPE. */
11564             tree memptr;
11565             tree method_type = build_memfn_type (type, r, type_memfn_quals (type));
11566             memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
11567             return cp_build_qualified_type_real (memptr, cp_type_quals (t),
11568                                                  complain);
11569           }
11570         else
11571           return cp_build_qualified_type_real (build_ptrmem_type (r, type),
11572                                                cp_type_quals (t),
11573                                                complain);
11574       }
11575     case FUNCTION_TYPE:
11576     case METHOD_TYPE:
11577       {
11578         tree fntype;
11579         tree specs;
11580         fntype = tsubst_function_type (t, args, complain, in_decl);
11581         if (fntype == error_mark_node)
11582           return error_mark_node;
11583
11584         /* Substitute the exception specification.  */
11585         specs = tsubst_exception_specification (t, args, complain,
11586                                                 in_decl, /*defer_ok*/true);
11587         if (specs == error_mark_node)
11588           return error_mark_node;
11589         if (specs)
11590           fntype = build_exception_variant (fntype, specs);
11591         return fntype;
11592       }
11593     case ARRAY_TYPE:
11594       {
11595         tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
11596         if (domain == error_mark_node)
11597           return error_mark_node;
11598
11599         /* As an optimization, we avoid regenerating the array type if
11600            it will obviously be the same as T.  */
11601         if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
11602           return t;
11603
11604         /* These checks should match the ones in grokdeclarator.
11605
11606            [temp.deduct]
11607
11608            The deduction may fail for any of the following reasons:
11609
11610            -- Attempting to create an array with an element type that
11611               is void, a function type, or a reference type, or [DR337]
11612               an abstract class type.  */
11613         if (TREE_CODE (type) == VOID_TYPE
11614             || TREE_CODE (type) == FUNCTION_TYPE
11615             || TREE_CODE (type) == REFERENCE_TYPE)
11616           {
11617             if (complain & tf_error)
11618               error ("creating array of %qT", type);
11619             return error_mark_node;
11620           }
11621         if (CLASS_TYPE_P (type) && CLASSTYPE_PURE_VIRTUALS (type))
11622           {
11623             if (complain & tf_error)
11624               error ("creating array of %qT, which is an abstract class type",
11625                      type);
11626             return error_mark_node;
11627           }
11628
11629         r = build_cplus_array_type (type, domain);
11630
11631         if (TYPE_USER_ALIGN (t))
11632           {
11633             TYPE_ALIGN (r) = TYPE_ALIGN (t);
11634             TYPE_USER_ALIGN (r) = 1;
11635           }
11636
11637         return r;
11638       }
11639
11640     case TYPENAME_TYPE:
11641       {
11642         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
11643                                      in_decl, /*entering_scope=*/1);
11644         tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
11645                               complain, in_decl);
11646
11647         if (ctx == error_mark_node || f == error_mark_node)
11648           return error_mark_node;
11649
11650         if (!MAYBE_CLASS_TYPE_P (ctx))
11651           {
11652             if (complain & tf_error)
11653               error ("%qT is not a class, struct, or union type", ctx);
11654             return error_mark_node;
11655           }
11656         else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
11657           {
11658             /* Normally, make_typename_type does not require that the CTX
11659                have complete type in order to allow things like:
11660
11661                  template <class T> struct S { typename S<T>::X Y; };
11662
11663                But, such constructs have already been resolved by this
11664                point, so here CTX really should have complete type, unless
11665                it's a partial instantiation.  */
11666             ctx = complete_type (ctx);
11667             if (!COMPLETE_TYPE_P (ctx))
11668               {
11669                 if (complain & tf_error)
11670                   cxx_incomplete_type_error (NULL_TREE, ctx);
11671                 return error_mark_node;
11672               }
11673           }
11674
11675         f = make_typename_type (ctx, f, typename_type,
11676                                 (complain & tf_error) | tf_keep_type_decl);
11677         if (f == error_mark_node)
11678           return f;
11679         if (TREE_CODE (f) == TYPE_DECL)
11680           {
11681             complain |= tf_ignore_bad_quals;
11682             f = TREE_TYPE (f);
11683           }
11684
11685         if (TREE_CODE (f) != TYPENAME_TYPE)
11686           {
11687             if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
11688               {
11689                 if (complain & tf_error)
11690                   error ("%qT resolves to %qT, which is not an enumeration type",
11691                          t, f);
11692                 else
11693                   return error_mark_node;
11694               }
11695             else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
11696               {
11697                 if (complain & tf_error)
11698                   error ("%qT resolves to %qT, which is is not a class type",
11699                          t, f);
11700                 else
11701                   return error_mark_node;
11702               }
11703           }
11704
11705         return cp_build_qualified_type_real
11706           (f, cp_type_quals (f) | cp_type_quals (t), complain);
11707       }
11708
11709     case UNBOUND_CLASS_TEMPLATE:
11710       {
11711         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
11712                                      in_decl, /*entering_scope=*/1);
11713         tree name = TYPE_IDENTIFIER (t);
11714         tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
11715
11716         if (ctx == error_mark_node || name == error_mark_node)
11717           return error_mark_node;
11718
11719         if (parm_list)
11720           parm_list = tsubst_template_parms (parm_list, args, complain);
11721         return make_unbound_class_template (ctx, name, parm_list, complain);
11722       }
11723
11724     case TYPEOF_TYPE:
11725       {
11726         tree type;
11727
11728         ++cp_unevaluated_operand;
11729         ++c_inhibit_evaluation_warnings;
11730
11731         type = tsubst_expr (TYPEOF_TYPE_EXPR (t), args,
11732                             complain, in_decl,
11733                             /*integral_constant_expression_p=*/false);
11734
11735         --cp_unevaluated_operand;
11736         --c_inhibit_evaluation_warnings;
11737
11738         type = finish_typeof (type);
11739         return cp_build_qualified_type_real (type,
11740                                              cp_type_quals (t)
11741                                              | cp_type_quals (type),
11742                                              complain);
11743       }
11744
11745     case DECLTYPE_TYPE:
11746       {
11747         tree type;
11748
11749         ++cp_unevaluated_operand;
11750         ++c_inhibit_evaluation_warnings;
11751
11752         type = tsubst_expr (DECLTYPE_TYPE_EXPR (t), args,
11753                             complain, in_decl,
11754                             /*integral_constant_expression_p=*/false);
11755
11756         --cp_unevaluated_operand;
11757         --c_inhibit_evaluation_warnings;
11758
11759         if (DECLTYPE_FOR_LAMBDA_CAPTURE (t))
11760           type = lambda_capture_field_type (type);
11761         else if (DECLTYPE_FOR_LAMBDA_PROXY (t))
11762           type = lambda_proxy_type (type);
11763         else
11764           type = finish_decltype_type
11765             (type, DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t), complain);
11766         return cp_build_qualified_type_real (type,
11767                                              cp_type_quals (t)
11768                                              | cp_type_quals (type),
11769                                              complain);
11770       }
11771
11772     case UNDERLYING_TYPE:
11773       {
11774         tree type = tsubst (UNDERLYING_TYPE_TYPE (t), args,
11775                             complain, in_decl);
11776         return finish_underlying_type (type);
11777       }
11778
11779     case TYPE_ARGUMENT_PACK:
11780     case NONTYPE_ARGUMENT_PACK:
11781       {
11782         tree r = TYPE_P (t) ? cxx_make_type (code) : make_node (code);
11783         tree packed_out = 
11784           tsubst_template_args (ARGUMENT_PACK_ARGS (t), 
11785                                 args,
11786                                 complain,
11787                                 in_decl);
11788         SET_ARGUMENT_PACK_ARGS (r, packed_out);
11789
11790         /* For template nontype argument packs, also substitute into
11791            the type.  */
11792         if (code == NONTYPE_ARGUMENT_PACK)
11793           TREE_TYPE (r) = tsubst (TREE_TYPE (t), args, complain, in_decl);
11794
11795         return r;
11796       }
11797       break;
11798
11799     case INTEGER_CST:
11800     case REAL_CST:
11801     case STRING_CST:
11802     case PLUS_EXPR:
11803     case MINUS_EXPR:
11804     case NEGATE_EXPR:
11805     case NOP_EXPR:
11806     case INDIRECT_REF:
11807     case ADDR_EXPR:
11808     case CALL_EXPR:
11809     case ARRAY_REF:
11810     case SCOPE_REF:
11811       /* We should use one of the expression tsubsts for these codes.  */
11812       gcc_unreachable ();
11813
11814     default:
11815       sorry ("use of %qs in template", tree_code_name [(int) code]);
11816       return error_mark_node;
11817     }
11818 }
11819
11820 /* Like tsubst_expr for a BASELINK.  OBJECT_TYPE, if non-NULL, is the
11821    type of the expression on the left-hand side of the "." or "->"
11822    operator.  */
11823
11824 static tree
11825 tsubst_baselink (tree baselink, tree object_type,
11826                  tree args, tsubst_flags_t complain, tree in_decl)
11827 {
11828     tree name;
11829     tree qualifying_scope;
11830     tree fns;
11831     tree optype;
11832     tree template_args = 0;
11833     bool template_id_p = false;
11834
11835     /* A baselink indicates a function from a base class.  Both the
11836        BASELINK_ACCESS_BINFO and the base class referenced may
11837        indicate bases of the template class, rather than the
11838        instantiated class.  In addition, lookups that were not
11839        ambiguous before may be ambiguous now.  Therefore, we perform
11840        the lookup again.  */
11841     qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
11842     qualifying_scope = tsubst (qualifying_scope, args,
11843                                complain, in_decl);
11844     fns = BASELINK_FUNCTIONS (baselink);
11845     optype = tsubst (BASELINK_OPTYPE (baselink), args, complain, in_decl);
11846     if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
11847       {
11848         template_id_p = true;
11849         template_args = TREE_OPERAND (fns, 1);
11850         fns = TREE_OPERAND (fns, 0);
11851         if (template_args)
11852           template_args = tsubst_template_args (template_args, args,
11853                                                 complain, in_decl);
11854       }
11855     name = DECL_NAME (get_first_fn (fns));
11856     if (IDENTIFIER_TYPENAME_P (name))
11857       name = mangle_conv_op_name_for_type (optype);
11858     baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
11859     if (!baselink)
11860       return error_mark_node;
11861
11862     /* If lookup found a single function, mark it as used at this
11863        point.  (If it lookup found multiple functions the one selected
11864        later by overload resolution will be marked as used at that
11865        point.)  */
11866     if (BASELINK_P (baselink))
11867       fns = BASELINK_FUNCTIONS (baselink);
11868     if (!template_id_p && !really_overloaded_fn (fns))
11869       mark_used (OVL_CURRENT (fns));
11870
11871     /* Add back the template arguments, if present.  */
11872     if (BASELINK_P (baselink) && template_id_p)
11873       BASELINK_FUNCTIONS (baselink)
11874         = build_nt (TEMPLATE_ID_EXPR,
11875                     BASELINK_FUNCTIONS (baselink),
11876                     template_args);
11877     /* Update the conversion operator type.  */
11878     BASELINK_OPTYPE (baselink) = optype;
11879
11880     if (!object_type)
11881       object_type = current_class_type;
11882     return adjust_result_of_qualified_name_lookup (baselink,
11883                                                    qualifying_scope,
11884                                                    object_type);
11885 }
11886
11887 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID.  DONE is
11888    true if the qualified-id will be a postfix-expression in-and-of
11889    itself; false if more of the postfix-expression follows the
11890    QUALIFIED_ID.  ADDRESS_P is true if the qualified-id is the operand
11891    of "&".  */
11892
11893 static tree
11894 tsubst_qualified_id (tree qualified_id, tree args,
11895                      tsubst_flags_t complain, tree in_decl,
11896                      bool done, bool address_p)
11897 {
11898   tree expr;
11899   tree scope;
11900   tree name;
11901   bool is_template;
11902   tree template_args;
11903
11904   gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
11905
11906   /* Figure out what name to look up.  */
11907   name = TREE_OPERAND (qualified_id, 1);
11908   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
11909     {
11910       is_template = true;
11911       template_args = TREE_OPERAND (name, 1);
11912       if (template_args)
11913         template_args = tsubst_template_args (template_args, args,
11914                                               complain, in_decl);
11915       name = TREE_OPERAND (name, 0);
11916     }
11917   else
11918     {
11919       is_template = false;
11920       template_args = NULL_TREE;
11921     }
11922
11923   /* Substitute into the qualifying scope.  When there are no ARGS, we
11924      are just trying to simplify a non-dependent expression.  In that
11925      case the qualifying scope may be dependent, and, in any case,
11926      substituting will not help.  */
11927   scope = TREE_OPERAND (qualified_id, 0);
11928   if (args)
11929     {
11930       scope = tsubst (scope, args, complain, in_decl);
11931       expr = tsubst_copy (name, args, complain, in_decl);
11932     }
11933   else
11934     expr = name;
11935
11936   if (dependent_scope_p (scope))
11937     {
11938       if (is_template)
11939         expr = build_min_nt (TEMPLATE_ID_EXPR, expr, template_args);
11940       return build_qualified_name (NULL_TREE, scope, expr,
11941                                    QUALIFIED_NAME_IS_TEMPLATE (qualified_id));
11942     }
11943
11944   if (!BASELINK_P (name) && !DECL_P (expr))
11945     {
11946       if (TREE_CODE (expr) == BIT_NOT_EXPR)
11947         {
11948           /* A BIT_NOT_EXPR is used to represent a destructor.  */
11949           if (!check_dtor_name (scope, TREE_OPERAND (expr, 0)))
11950             {
11951               error ("qualifying type %qT does not match destructor name ~%qT",
11952                      scope, TREE_OPERAND (expr, 0));
11953               expr = error_mark_node;
11954             }
11955           else
11956             expr = lookup_qualified_name (scope, complete_dtor_identifier,
11957                                           /*is_type_p=*/0, false);
11958         }
11959       else
11960         expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
11961       if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
11962                      ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
11963         {
11964           if (complain & tf_error)
11965             {
11966               error ("dependent-name %qE is parsed as a non-type, but "
11967                      "instantiation yields a type", qualified_id);
11968               inform (input_location, "say %<typename %E%> if a type is meant", qualified_id);
11969             }
11970           return error_mark_node;
11971         }
11972     }
11973
11974   if (DECL_P (expr))
11975     {
11976       check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
11977                                            scope);
11978       /* Remember that there was a reference to this entity.  */
11979       mark_used (expr);
11980     }
11981
11982   if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
11983     {
11984       if (complain & tf_error)
11985         qualified_name_lookup_error (scope,
11986                                      TREE_OPERAND (qualified_id, 1),
11987                                      expr, input_location);
11988       return error_mark_node;
11989     }
11990
11991   if (is_template)
11992     expr = lookup_template_function (expr, template_args);
11993
11994   if (expr == error_mark_node && complain & tf_error)
11995     qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
11996                                  expr, input_location);
11997   else if (TYPE_P (scope))
11998     {
11999       expr = (adjust_result_of_qualified_name_lookup
12000               (expr, scope, current_class_type));
12001       expr = (finish_qualified_id_expr
12002               (scope, expr, done, address_p && PTRMEM_OK_P (qualified_id),
12003                QUALIFIED_NAME_IS_TEMPLATE (qualified_id),
12004                /*template_arg_p=*/false));
12005     }
12006
12007   /* Expressions do not generally have reference type.  */
12008   if (TREE_CODE (expr) != SCOPE_REF
12009       /* However, if we're about to form a pointer-to-member, we just
12010          want the referenced member referenced.  */
12011       && TREE_CODE (expr) != OFFSET_REF)
12012     expr = convert_from_reference (expr);
12013
12014   return expr;
12015 }
12016
12017 /* Like tsubst, but deals with expressions.  This function just replaces
12018    template parms; to finish processing the resultant expression, use
12019    tsubst_copy_and_build or tsubst_expr.  */
12020
12021 static tree
12022 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
12023 {
12024   enum tree_code code;
12025   tree r;
12026
12027   if (t == NULL_TREE || t == error_mark_node || args == NULL_TREE)
12028     return t;
12029
12030   code = TREE_CODE (t);
12031
12032   switch (code)
12033     {
12034     case PARM_DECL:
12035       r = retrieve_local_specialization (t);
12036
12037       if (r == NULL)
12038         {
12039           tree c;
12040
12041           /* We get here for a use of 'this' in an NSDMI.  */
12042           if (DECL_NAME (t) == this_identifier
12043               && at_function_scope_p ()
12044               && DECL_CONSTRUCTOR_P (current_function_decl))
12045             return current_class_ptr;
12046
12047           /* This can happen for a parameter name used later in a function
12048              declaration (such as in a late-specified return type).  Just
12049              make a dummy decl, since it's only used for its type.  */
12050           gcc_assert (cp_unevaluated_operand != 0);
12051           /* We copy T because want to tsubst the PARM_DECL only,
12052              not the following PARM_DECLs that are chained to T.  */
12053           c = copy_node (t);
12054           r = tsubst_decl (c, args, complain);
12055           /* Give it the template pattern as its context; its true context
12056              hasn't been instantiated yet and this is good enough for
12057              mangling.  */
12058           DECL_CONTEXT (r) = DECL_CONTEXT (t);
12059         }
12060       
12061       if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
12062         r = ARGUMENT_PACK_SELECT_ARG (r);
12063       mark_used (r);
12064       return r;
12065
12066     case CONST_DECL:
12067       {
12068         tree enum_type;
12069         tree v;
12070
12071         if (DECL_TEMPLATE_PARM_P (t))
12072           return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
12073         /* There is no need to substitute into namespace-scope
12074            enumerators.  */
12075         if (DECL_NAMESPACE_SCOPE_P (t))
12076           return t;
12077         /* If ARGS is NULL, then T is known to be non-dependent.  */
12078         if (args == NULL_TREE)
12079           return integral_constant_value (t);
12080
12081         /* Unfortunately, we cannot just call lookup_name here.
12082            Consider:
12083
12084              template <int I> int f() {
12085              enum E { a = I };
12086              struct S { void g() { E e = a; } };
12087              };
12088
12089            When we instantiate f<7>::S::g(), say, lookup_name is not
12090            clever enough to find f<7>::a.  */
12091         enum_type
12092           = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl,
12093                               /*entering_scope=*/0);
12094
12095         for (v = TYPE_VALUES (enum_type);
12096              v != NULL_TREE;
12097              v = TREE_CHAIN (v))
12098           if (TREE_PURPOSE (v) == DECL_NAME (t))
12099             return TREE_VALUE (v);
12100
12101           /* We didn't find the name.  That should never happen; if
12102              name-lookup found it during preliminary parsing, we
12103              should find it again here during instantiation.  */
12104         gcc_unreachable ();
12105       }
12106       return t;
12107
12108     case FIELD_DECL:
12109       if (DECL_CONTEXT (t))
12110         {
12111           tree ctx;
12112
12113           ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
12114                                   /*entering_scope=*/1);
12115           if (ctx != DECL_CONTEXT (t))
12116             {
12117               tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
12118               if (!r)
12119                 {
12120                   if (complain & tf_error)
12121                     error ("using invalid field %qD", t);
12122                   return error_mark_node;
12123                 }
12124               return r;
12125             }
12126         }
12127
12128       return t;
12129
12130     case VAR_DECL:
12131     case FUNCTION_DECL:
12132       if ((DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
12133           || local_variable_p (t))
12134         t = tsubst (t, args, complain, in_decl);
12135       mark_used (t);
12136       return t;
12137
12138     case NAMESPACE_DECL:
12139       return t;
12140
12141     case OVERLOAD:
12142       /* An OVERLOAD will always be a non-dependent overload set; an
12143          overload set from function scope will just be represented with an
12144          IDENTIFIER_NODE, and from class scope with a BASELINK.  */
12145       gcc_assert (!uses_template_parms (t));
12146       return t;
12147
12148     case BASELINK:
12149       return tsubst_baselink (t, current_class_type, args, complain, in_decl);
12150
12151     case TEMPLATE_DECL:
12152       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
12153         return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
12154                        args, complain, in_decl);
12155       else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
12156         return tsubst (t, args, complain, in_decl);
12157       else if (DECL_CLASS_SCOPE_P (t)
12158                && uses_template_parms (DECL_CONTEXT (t)))
12159         {
12160           /* Template template argument like the following example need
12161              special treatment:
12162
12163                template <template <class> class TT> struct C {};
12164                template <class T> struct D {
12165                  template <class U> struct E {};
12166                  C<E> c;                                // #1
12167                };
12168                D<int> d;                                // #2
12169
12170              We are processing the template argument `E' in #1 for
12171              the template instantiation #2.  Originally, `E' is a
12172              TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT.  Now we
12173              have to substitute this with one having context `D<int>'.  */
12174
12175           tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
12176           return lookup_field (context, DECL_NAME(t), 0, false);
12177         }
12178       else
12179         /* Ordinary template template argument.  */
12180         return t;
12181
12182     case CAST_EXPR:
12183     case REINTERPRET_CAST_EXPR:
12184     case CONST_CAST_EXPR:
12185     case STATIC_CAST_EXPR:
12186     case DYNAMIC_CAST_EXPR:
12187     case IMPLICIT_CONV_EXPR:
12188     case CONVERT_EXPR:
12189     case NOP_EXPR:
12190       return build1
12191         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
12192          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
12193
12194     case SIZEOF_EXPR:
12195       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
12196         {
12197
12198           tree expanded;
12199           int len = 0;
12200
12201           ++cp_unevaluated_operand;
12202           ++c_inhibit_evaluation_warnings;
12203           /* We only want to compute the number of arguments.  */
12204           expanded = tsubst_pack_expansion (TREE_OPERAND (t, 0), args,
12205                                             complain, in_decl);
12206           --cp_unevaluated_operand;
12207           --c_inhibit_evaluation_warnings;
12208
12209           if (TREE_CODE (expanded) == TREE_VEC)
12210             len = TREE_VEC_LENGTH (expanded);
12211
12212           if (expanded == error_mark_node)
12213             return error_mark_node;
12214           else if (PACK_EXPANSION_P (expanded)
12215                    || (TREE_CODE (expanded) == TREE_VEC
12216                        && len > 0
12217                        && PACK_EXPANSION_P (TREE_VEC_ELT (expanded, len-1))))
12218             {
12219               if (TREE_CODE (expanded) == TREE_VEC)
12220                 expanded = TREE_VEC_ELT (expanded, len - 1);
12221
12222               if (TYPE_P (expanded))
12223                 return cxx_sizeof_or_alignof_type (expanded, SIZEOF_EXPR, 
12224                                                    complain & tf_error);
12225               else
12226                 return cxx_sizeof_or_alignof_expr (expanded, SIZEOF_EXPR,
12227                                                    complain & tf_error);
12228             }
12229           else
12230             return build_int_cst (size_type_node, len);
12231         }
12232       /* Fall through */
12233
12234     case INDIRECT_REF:
12235     case NEGATE_EXPR:
12236     case TRUTH_NOT_EXPR:
12237     case BIT_NOT_EXPR:
12238     case ADDR_EXPR:
12239     case UNARY_PLUS_EXPR:      /* Unary + */
12240     case ALIGNOF_EXPR:
12241     case AT_ENCODE_EXPR:
12242     case ARROW_EXPR:
12243     case THROW_EXPR:
12244     case TYPEID_EXPR:
12245     case REALPART_EXPR:
12246     case IMAGPART_EXPR:
12247       return build1
12248         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
12249          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
12250
12251     case COMPONENT_REF:
12252       {
12253         tree object;
12254         tree name;
12255
12256         object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
12257         name = TREE_OPERAND (t, 1);
12258         if (TREE_CODE (name) == BIT_NOT_EXPR)
12259           {
12260             name = tsubst_copy (TREE_OPERAND (name, 0), args,
12261                                 complain, in_decl);
12262             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
12263           }
12264         else if (TREE_CODE (name) == SCOPE_REF
12265                  && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
12266           {
12267             tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
12268                                      complain, in_decl);
12269             name = TREE_OPERAND (name, 1);
12270             name = tsubst_copy (TREE_OPERAND (name, 0), args,
12271                                 complain, in_decl);
12272             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
12273             name = build_qualified_name (/*type=*/NULL_TREE,
12274                                          base, name,
12275                                          /*template_p=*/false);
12276           }
12277         else if (BASELINK_P (name))
12278           name = tsubst_baselink (name,
12279                                   non_reference (TREE_TYPE (object)),
12280                                   args, complain,
12281                                   in_decl);
12282         else
12283           name = tsubst_copy (name, args, complain, in_decl);
12284         return build_nt (COMPONENT_REF, object, name, NULL_TREE);
12285       }
12286
12287     case PLUS_EXPR:
12288     case MINUS_EXPR:
12289     case MULT_EXPR:
12290     case TRUNC_DIV_EXPR:
12291     case CEIL_DIV_EXPR:
12292     case FLOOR_DIV_EXPR:
12293     case ROUND_DIV_EXPR:
12294     case EXACT_DIV_EXPR:
12295     case BIT_AND_EXPR:
12296     case BIT_IOR_EXPR:
12297     case BIT_XOR_EXPR:
12298     case TRUNC_MOD_EXPR:
12299     case FLOOR_MOD_EXPR:
12300     case TRUTH_ANDIF_EXPR:
12301     case TRUTH_ORIF_EXPR:
12302     case TRUTH_AND_EXPR:
12303     case TRUTH_OR_EXPR:
12304     case RSHIFT_EXPR:
12305     case LSHIFT_EXPR:
12306     case RROTATE_EXPR:
12307     case LROTATE_EXPR:
12308     case EQ_EXPR:
12309     case NE_EXPR:
12310     case MAX_EXPR:
12311     case MIN_EXPR:
12312     case LE_EXPR:
12313     case GE_EXPR:
12314     case LT_EXPR:
12315     case GT_EXPR:
12316     case COMPOUND_EXPR:
12317     case DOTSTAR_EXPR:
12318     case MEMBER_REF:
12319     case PREDECREMENT_EXPR:
12320     case PREINCREMENT_EXPR:
12321     case POSTDECREMENT_EXPR:
12322     case POSTINCREMENT_EXPR:
12323       return 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
12327     case SCOPE_REF:
12328       return build_qualified_name (/*type=*/NULL_TREE,
12329                                    tsubst_copy (TREE_OPERAND (t, 0),
12330                                                 args, complain, in_decl),
12331                                    tsubst_copy (TREE_OPERAND (t, 1),
12332                                                 args, complain, in_decl),
12333                                    QUALIFIED_NAME_IS_TEMPLATE (t));
12334
12335     case ARRAY_REF:
12336       return build_nt
12337         (ARRAY_REF,
12338          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12339          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
12340          NULL_TREE, NULL_TREE);
12341
12342     case CALL_EXPR:
12343       {
12344         int n = VL_EXP_OPERAND_LENGTH (t);
12345         tree result = build_vl_exp (CALL_EXPR, n);
12346         int i;
12347         for (i = 0; i < n; i++)
12348           TREE_OPERAND (t, i) = tsubst_copy (TREE_OPERAND (t, i), args,
12349                                              complain, in_decl);
12350         return result;
12351       }
12352
12353     case COND_EXPR:
12354     case MODOP_EXPR:
12355     case PSEUDO_DTOR_EXPR:
12356       {
12357         r = build_nt
12358           (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12359            tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
12360            tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
12361         TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
12362         return r;
12363       }
12364
12365     case NEW_EXPR:
12366       {
12367         r = build_nt
12368         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12369          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
12370          tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
12371         NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
12372         return r;
12373       }
12374
12375     case DELETE_EXPR:
12376       {
12377         r = build_nt
12378         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12379          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
12380         DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
12381         DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
12382         return r;
12383       }
12384
12385     case TEMPLATE_ID_EXPR:
12386       {
12387         /* Substituted template arguments */
12388         tree fn = TREE_OPERAND (t, 0);
12389         tree targs = TREE_OPERAND (t, 1);
12390
12391         fn = tsubst_copy (fn, args, complain, in_decl);
12392         if (targs)
12393           targs = tsubst_template_args (targs, args, complain, in_decl);
12394
12395         return lookup_template_function (fn, targs);
12396       }
12397
12398     case TREE_LIST:
12399       {
12400         tree purpose, value, chain;
12401
12402         if (t == void_list_node)
12403           return t;
12404
12405         purpose = TREE_PURPOSE (t);
12406         if (purpose)
12407           purpose = tsubst_copy (purpose, args, complain, in_decl);
12408         value = TREE_VALUE (t);
12409         if (value)
12410           value = tsubst_copy (value, args, complain, in_decl);
12411         chain = TREE_CHAIN (t);
12412         if (chain && chain != void_type_node)
12413           chain = tsubst_copy (chain, args, complain, in_decl);
12414         if (purpose == TREE_PURPOSE (t)
12415             && value == TREE_VALUE (t)
12416             && chain == TREE_CHAIN (t))
12417           return t;
12418         return tree_cons (purpose, value, chain);
12419       }
12420
12421     case RECORD_TYPE:
12422     case UNION_TYPE:
12423     case ENUMERAL_TYPE:
12424     case INTEGER_TYPE:
12425     case TEMPLATE_TYPE_PARM:
12426     case TEMPLATE_TEMPLATE_PARM:
12427     case BOUND_TEMPLATE_TEMPLATE_PARM:
12428     case TEMPLATE_PARM_INDEX:
12429     case POINTER_TYPE:
12430     case REFERENCE_TYPE:
12431     case OFFSET_TYPE:
12432     case FUNCTION_TYPE:
12433     case METHOD_TYPE:
12434     case ARRAY_TYPE:
12435     case TYPENAME_TYPE:
12436     case UNBOUND_CLASS_TEMPLATE:
12437     case TYPEOF_TYPE:
12438     case DECLTYPE_TYPE:
12439     case TYPE_DECL:
12440       return tsubst (t, args, complain, in_decl);
12441
12442     case IDENTIFIER_NODE:
12443       if (IDENTIFIER_TYPENAME_P (t))
12444         {
12445           tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
12446           return mangle_conv_op_name_for_type (new_type);
12447         }
12448       else
12449         return t;
12450
12451     case CONSTRUCTOR:
12452       /* This is handled by tsubst_copy_and_build.  */
12453       gcc_unreachable ();
12454
12455     case VA_ARG_EXPR:
12456       return build_x_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
12457                                           in_decl),
12458                              tsubst (TREE_TYPE (t), args, complain, in_decl));
12459
12460     case CLEANUP_POINT_EXPR:
12461       /* We shouldn't have built any of these during initial template
12462          generation.  Instead, they should be built during instantiation
12463          in response to the saved STMT_IS_FULL_EXPR_P setting.  */
12464       gcc_unreachable ();
12465
12466     case OFFSET_REF:
12467       r = build2
12468         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
12469          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12470          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
12471       PTRMEM_OK_P (r) = PTRMEM_OK_P (t);
12472       mark_used (TREE_OPERAND (r, 1));
12473       return r;
12474
12475     case EXPR_PACK_EXPANSION:
12476       error ("invalid use of pack expansion expression");
12477       return error_mark_node;
12478
12479     case NONTYPE_ARGUMENT_PACK:
12480       error ("use %<...%> to expand argument pack");
12481       return error_mark_node;
12482
12483     case INTEGER_CST:
12484     case REAL_CST:
12485     case STRING_CST:
12486     case COMPLEX_CST:
12487       {
12488         /* Instantiate any typedefs in the type.  */
12489         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
12490         r = fold_convert (type, t);
12491         gcc_assert (TREE_CODE (r) == code);
12492         return r;
12493       }
12494
12495     case PTRMEM_CST:
12496       /* These can sometimes show up in a partial instantiation, but never
12497          involve template parms.  */
12498       gcc_assert (!uses_template_parms (t));
12499       return t;
12500
12501     default:
12502       /* We shouldn't get here, but keep going if !ENABLE_CHECKING.  */
12503       gcc_checking_assert (false);
12504       return t;
12505     }
12506 }
12507
12508 /* Like tsubst_copy, but specifically for OpenMP clauses.  */
12509
12510 static tree
12511 tsubst_omp_clauses (tree clauses, tree args, tsubst_flags_t complain,
12512                     tree in_decl)
12513 {
12514   tree new_clauses = NULL, nc, oc;
12515
12516   for (oc = clauses; oc ; oc = OMP_CLAUSE_CHAIN (oc))
12517     {
12518       nc = copy_node (oc);
12519       OMP_CLAUSE_CHAIN (nc) = new_clauses;
12520       new_clauses = nc;
12521
12522       switch (OMP_CLAUSE_CODE (nc))
12523         {
12524         case OMP_CLAUSE_LASTPRIVATE:
12525           if (OMP_CLAUSE_LASTPRIVATE_STMT (oc))
12526             {
12527               OMP_CLAUSE_LASTPRIVATE_STMT (nc) = push_stmt_list ();
12528               tsubst_expr (OMP_CLAUSE_LASTPRIVATE_STMT (oc), args, complain,
12529                            in_decl, /*integral_constant_expression_p=*/false);
12530               OMP_CLAUSE_LASTPRIVATE_STMT (nc)
12531                 = pop_stmt_list (OMP_CLAUSE_LASTPRIVATE_STMT (nc));
12532             }
12533           /* FALLTHRU */
12534         case OMP_CLAUSE_PRIVATE:
12535         case OMP_CLAUSE_SHARED:
12536         case OMP_CLAUSE_FIRSTPRIVATE:
12537         case OMP_CLAUSE_REDUCTION:
12538         case OMP_CLAUSE_COPYIN:
12539         case OMP_CLAUSE_COPYPRIVATE:
12540         case OMP_CLAUSE_IF:
12541         case OMP_CLAUSE_NUM_THREADS:
12542         case OMP_CLAUSE_SCHEDULE:
12543         case OMP_CLAUSE_COLLAPSE:
12544         case OMP_CLAUSE_FINAL:
12545           OMP_CLAUSE_OPERAND (nc, 0)
12546             = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain, 
12547                            in_decl, /*integral_constant_expression_p=*/false);
12548           break;
12549         case OMP_CLAUSE_NOWAIT:
12550         case OMP_CLAUSE_ORDERED:
12551         case OMP_CLAUSE_DEFAULT:
12552         case OMP_CLAUSE_UNTIED:
12553         case OMP_CLAUSE_MERGEABLE:
12554           break;
12555         default:
12556           gcc_unreachable ();
12557         }
12558     }
12559
12560   return finish_omp_clauses (nreverse (new_clauses));
12561 }
12562
12563 /* Like tsubst_copy_and_build, but unshare TREE_LIST nodes.  */
12564
12565 static tree
12566 tsubst_copy_asm_operands (tree t, tree args, tsubst_flags_t complain,
12567                           tree in_decl)
12568 {
12569 #define RECUR(t) tsubst_copy_asm_operands (t, args, complain, in_decl)
12570
12571   tree purpose, value, chain;
12572
12573   if (t == NULL)
12574     return t;
12575
12576   if (TREE_CODE (t) != TREE_LIST)
12577     return tsubst_copy_and_build (t, args, complain, in_decl,
12578                                   /*function_p=*/false,
12579                                   /*integral_constant_expression_p=*/false);
12580
12581   if (t == void_list_node)
12582     return t;
12583
12584   purpose = TREE_PURPOSE (t);
12585   if (purpose)
12586     purpose = RECUR (purpose);
12587   value = TREE_VALUE (t);
12588   if (value && TREE_CODE (value) != LABEL_DECL)
12589     value = RECUR (value);
12590   chain = TREE_CHAIN (t);
12591   if (chain && chain != void_type_node)
12592     chain = RECUR (chain);
12593   return tree_cons (purpose, value, chain);
12594 #undef RECUR
12595 }
12596
12597 /* Substitute one OMP_FOR iterator.  */
12598
12599 static void
12600 tsubst_omp_for_iterator (tree t, int i, tree declv, tree initv,
12601                          tree condv, tree incrv, tree *clauses,
12602                          tree args, tsubst_flags_t complain, tree in_decl,
12603                          bool integral_constant_expression_p)
12604 {
12605 #define RECUR(NODE)                             \
12606   tsubst_expr ((NODE), args, complain, in_decl, \
12607                integral_constant_expression_p)
12608   tree decl, init, cond, incr, auto_node;
12609
12610   init = TREE_VEC_ELT (OMP_FOR_INIT (t), i);
12611   gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
12612   decl = RECUR (TREE_OPERAND (init, 0));
12613   init = TREE_OPERAND (init, 1);
12614   auto_node = type_uses_auto (TREE_TYPE (decl));
12615   if (auto_node && init)
12616     {
12617       tree init_expr = init;
12618       if (TREE_CODE (init_expr) == DECL_EXPR)
12619         init_expr = DECL_INITIAL (DECL_EXPR_DECL (init_expr));
12620       init_expr = RECUR (init_expr);
12621       TREE_TYPE (decl)
12622         = do_auto_deduction (TREE_TYPE (decl), init_expr, auto_node);
12623     }
12624   gcc_assert (!type_dependent_expression_p (decl));
12625
12626   if (!CLASS_TYPE_P (TREE_TYPE (decl)))
12627     {
12628       cond = RECUR (TREE_VEC_ELT (OMP_FOR_COND (t), i));
12629       incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
12630       if (TREE_CODE (incr) == MODIFY_EXPR)
12631         incr = build_x_modify_expr (RECUR (TREE_OPERAND (incr, 0)), NOP_EXPR,
12632                                     RECUR (TREE_OPERAND (incr, 1)),
12633                                     complain);
12634       else
12635         incr = RECUR (incr);
12636       TREE_VEC_ELT (declv, i) = decl;
12637       TREE_VEC_ELT (initv, i) = init;
12638       TREE_VEC_ELT (condv, i) = cond;
12639       TREE_VEC_ELT (incrv, i) = incr;
12640       return;
12641     }
12642
12643   if (init && TREE_CODE (init) != DECL_EXPR)
12644     {
12645       tree c;
12646       for (c = *clauses; c ; c = OMP_CLAUSE_CHAIN (c))
12647         {
12648           if ((OMP_CLAUSE_CODE (c) == OMP_CLAUSE_PRIVATE
12649                || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE)
12650               && OMP_CLAUSE_DECL (c) == decl)
12651             break;
12652           else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FIRSTPRIVATE
12653                    && OMP_CLAUSE_DECL (c) == decl)
12654             error ("iteration variable %qD should not be firstprivate", decl);
12655           else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION
12656                    && OMP_CLAUSE_DECL (c) == decl)
12657             error ("iteration variable %qD should not be reduction", decl);
12658         }
12659       if (c == NULL)
12660         {
12661           c = build_omp_clause (input_location, OMP_CLAUSE_PRIVATE);
12662           OMP_CLAUSE_DECL (c) = decl;
12663           c = finish_omp_clauses (c);
12664           if (c)
12665             {
12666               OMP_CLAUSE_CHAIN (c) = *clauses;
12667               *clauses = c;
12668             }
12669         }
12670     }
12671   cond = TREE_VEC_ELT (OMP_FOR_COND (t), i);
12672   if (COMPARISON_CLASS_P (cond))
12673     cond = build2 (TREE_CODE (cond), boolean_type_node,
12674                    RECUR (TREE_OPERAND (cond, 0)),
12675                    RECUR (TREE_OPERAND (cond, 1)));
12676   else
12677     cond = RECUR (cond);
12678   incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
12679   switch (TREE_CODE (incr))
12680     {
12681     case PREINCREMENT_EXPR:
12682     case PREDECREMENT_EXPR:
12683     case POSTINCREMENT_EXPR:
12684     case POSTDECREMENT_EXPR:
12685       incr = build2 (TREE_CODE (incr), TREE_TYPE (decl),
12686                      RECUR (TREE_OPERAND (incr, 0)), NULL_TREE);
12687       break;
12688     case MODIFY_EXPR:
12689       if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
12690           || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
12691         {
12692           tree rhs = TREE_OPERAND (incr, 1);
12693           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl),
12694                          RECUR (TREE_OPERAND (incr, 0)),
12695                          build2 (TREE_CODE (rhs), TREE_TYPE (decl),
12696                                  RECUR (TREE_OPERAND (rhs, 0)),
12697                                  RECUR (TREE_OPERAND (rhs, 1))));
12698         }
12699       else
12700         incr = RECUR (incr);
12701       break;
12702     case MODOP_EXPR:
12703       if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
12704           || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
12705         {
12706           tree lhs = RECUR (TREE_OPERAND (incr, 0));
12707           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl), lhs,
12708                          build2 (TREE_CODE (TREE_OPERAND (incr, 1)),
12709                                  TREE_TYPE (decl), lhs,
12710                                  RECUR (TREE_OPERAND (incr, 2))));
12711         }
12712       else if (TREE_CODE (TREE_OPERAND (incr, 1)) == NOP_EXPR
12713                && (TREE_CODE (TREE_OPERAND (incr, 2)) == PLUS_EXPR
12714                    || (TREE_CODE (TREE_OPERAND (incr, 2)) == MINUS_EXPR)))
12715         {
12716           tree rhs = TREE_OPERAND (incr, 2);
12717           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl),
12718                          RECUR (TREE_OPERAND (incr, 0)),
12719                          build2 (TREE_CODE (rhs), TREE_TYPE (decl),
12720                                  RECUR (TREE_OPERAND (rhs, 0)),
12721                                  RECUR (TREE_OPERAND (rhs, 1))));
12722         }
12723       else
12724         incr = RECUR (incr);
12725       break;
12726     default:
12727       incr = RECUR (incr);
12728       break;
12729     }
12730
12731   TREE_VEC_ELT (declv, i) = decl;
12732   TREE_VEC_ELT (initv, i) = init;
12733   TREE_VEC_ELT (condv, i) = cond;
12734   TREE_VEC_ELT (incrv, i) = incr;
12735 #undef RECUR
12736 }
12737
12738 /* Like tsubst_copy for expressions, etc. but also does semantic
12739    processing.  */
12740
12741 static tree
12742 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
12743              bool integral_constant_expression_p)
12744 {
12745 #define RECUR(NODE)                             \
12746   tsubst_expr ((NODE), args, complain, in_decl, \
12747                integral_constant_expression_p)
12748
12749   tree stmt, tmp;
12750
12751   if (t == NULL_TREE || t == error_mark_node)
12752     return t;
12753
12754   if (EXPR_HAS_LOCATION (t))
12755     input_location = EXPR_LOCATION (t);
12756   if (STATEMENT_CODE_P (TREE_CODE (t)))
12757     current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
12758
12759   switch (TREE_CODE (t))
12760     {
12761     case STATEMENT_LIST:
12762       {
12763         tree_stmt_iterator i;
12764         for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
12765           RECUR (tsi_stmt (i));
12766         break;
12767       }
12768
12769     case CTOR_INITIALIZER:
12770       finish_mem_initializers (tsubst_initializer_list
12771                                (TREE_OPERAND (t, 0), args));
12772       break;
12773
12774     case RETURN_EXPR:
12775       finish_return_stmt (RECUR (TREE_OPERAND (t, 0)));
12776       break;
12777
12778     case EXPR_STMT:
12779       tmp = RECUR (EXPR_STMT_EXPR (t));
12780       if (EXPR_STMT_STMT_EXPR_RESULT (t))
12781         finish_stmt_expr_expr (tmp, cur_stmt_expr);
12782       else
12783         finish_expr_stmt (tmp);
12784       break;
12785
12786     case USING_STMT:
12787       do_using_directive (USING_STMT_NAMESPACE (t));
12788       break;
12789
12790     case DECL_EXPR:
12791       {
12792         tree decl, pattern_decl;
12793         tree init;
12794
12795         pattern_decl = decl = DECL_EXPR_DECL (t);
12796         if (TREE_CODE (decl) == LABEL_DECL)
12797           finish_label_decl (DECL_NAME (decl));
12798         else if (TREE_CODE (decl) == USING_DECL)
12799           {
12800             tree scope = USING_DECL_SCOPE (decl);
12801             tree name = DECL_NAME (decl);
12802             tree decl;
12803
12804             scope = tsubst (scope, args, complain, in_decl);
12805             decl = lookup_qualified_name (scope, name,
12806                                           /*is_type_p=*/false,
12807                                           /*complain=*/false);
12808             if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
12809               qualified_name_lookup_error (scope, name, decl, input_location);
12810             else
12811               do_local_using_decl (decl, scope, name);
12812           }
12813         else
12814           {
12815             init = DECL_INITIAL (decl);
12816             decl = tsubst (decl, args, complain, in_decl);
12817             if (decl != error_mark_node)
12818               {
12819                 /* By marking the declaration as instantiated, we avoid
12820                    trying to instantiate it.  Since instantiate_decl can't
12821                    handle local variables, and since we've already done
12822                    all that needs to be done, that's the right thing to
12823                    do.  */
12824                 if (TREE_CODE (decl) == VAR_DECL)
12825                   DECL_TEMPLATE_INSTANTIATED (decl) = 1;
12826                 if (TREE_CODE (decl) == VAR_DECL
12827                     && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
12828                   /* Anonymous aggregates are a special case.  */
12829                   finish_anon_union (decl);
12830                 else if (is_capture_proxy (DECL_EXPR_DECL (t)))
12831                   {
12832                     DECL_CONTEXT (decl) = current_function_decl;
12833                     insert_capture_proxy (decl);
12834                   }
12835                 else
12836                   {
12837                     int const_init = false;
12838                     maybe_push_decl (decl);
12839                     if (TREE_CODE (decl) == VAR_DECL
12840                         && DECL_PRETTY_FUNCTION_P (decl))
12841                       {
12842                         /* For __PRETTY_FUNCTION__ we have to adjust the
12843                            initializer.  */
12844                         const char *const name
12845                           = cxx_printable_name (current_function_decl, 2);
12846                         init = cp_fname_init (name, &TREE_TYPE (decl));
12847                       }
12848                     else
12849                       {
12850                         tree t = RECUR (init);
12851
12852                         if (init && !t)
12853                           {
12854                             /* If we had an initializer but it
12855                                instantiated to nothing,
12856                                value-initialize the object.  This will
12857                                only occur when the initializer was a
12858                                pack expansion where the parameter packs
12859                                used in that expansion were of length
12860                                zero.  */
12861                             init = build_value_init (TREE_TYPE (decl),
12862                                                      complain);
12863                             if (TREE_CODE (init) == AGGR_INIT_EXPR)
12864                               init = get_target_expr_sfinae (init, complain);
12865                           }
12866                         else
12867                           init = t;
12868                       }
12869
12870                     if (TREE_CODE (decl) == VAR_DECL)
12871                       const_init = (DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P
12872                                     (pattern_decl));
12873                     cp_finish_decl (decl, init, const_init, NULL_TREE, 0);
12874                   }
12875               }
12876           }
12877
12878         /* A DECL_EXPR can also be used as an expression, in the condition
12879            clause of an if/for/while construct.  */
12880         return decl;
12881       }
12882
12883     case FOR_STMT:
12884       stmt = begin_for_stmt (NULL_TREE, NULL_TREE);
12885       RECUR (FOR_INIT_STMT (t));
12886       finish_for_init_stmt (stmt);
12887       tmp = RECUR (FOR_COND (t));
12888       finish_for_cond (tmp, stmt);
12889       tmp = RECUR (FOR_EXPR (t));
12890       finish_for_expr (tmp, stmt);
12891       RECUR (FOR_BODY (t));
12892       finish_for_stmt (stmt);
12893       break;
12894
12895     case RANGE_FOR_STMT:
12896       {
12897         tree decl, expr;
12898         stmt = begin_for_stmt (NULL_TREE, NULL_TREE);
12899         decl = RANGE_FOR_DECL (t);
12900         decl = tsubst (decl, args, complain, in_decl);
12901         maybe_push_decl (decl);
12902         expr = RECUR (RANGE_FOR_EXPR (t));
12903         stmt = cp_convert_range_for (stmt, decl, expr);
12904         RECUR (RANGE_FOR_BODY (t));
12905         finish_for_stmt (stmt);
12906       }
12907       break;
12908
12909     case WHILE_STMT:
12910       stmt = begin_while_stmt ();
12911       tmp = RECUR (WHILE_COND (t));
12912       finish_while_stmt_cond (tmp, stmt);
12913       RECUR (WHILE_BODY (t));
12914       finish_while_stmt (stmt);
12915       break;
12916
12917     case DO_STMT:
12918       stmt = begin_do_stmt ();
12919       RECUR (DO_BODY (t));
12920       finish_do_body (stmt);
12921       tmp = RECUR (DO_COND (t));
12922       finish_do_stmt (tmp, stmt);
12923       break;
12924
12925     case IF_STMT:
12926       stmt = begin_if_stmt ();
12927       tmp = RECUR (IF_COND (t));
12928       finish_if_stmt_cond (tmp, stmt);
12929       RECUR (THEN_CLAUSE (t));
12930       finish_then_clause (stmt);
12931
12932       if (ELSE_CLAUSE (t))
12933         {
12934           begin_else_clause (stmt);
12935           RECUR (ELSE_CLAUSE (t));
12936           finish_else_clause (stmt);
12937         }
12938
12939       finish_if_stmt (stmt);
12940       break;
12941
12942     case BIND_EXPR:
12943       if (BIND_EXPR_BODY_BLOCK (t))
12944         stmt = begin_function_body ();
12945       else
12946         stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
12947                                     ? BCS_TRY_BLOCK : 0);
12948
12949       RECUR (BIND_EXPR_BODY (t));
12950
12951       if (BIND_EXPR_BODY_BLOCK (t))
12952         finish_function_body (stmt);
12953       else
12954         finish_compound_stmt (stmt);
12955       break;
12956
12957     case BREAK_STMT:
12958       finish_break_stmt ();
12959       break;
12960
12961     case CONTINUE_STMT:
12962       finish_continue_stmt ();
12963       break;
12964
12965     case SWITCH_STMT:
12966       stmt = begin_switch_stmt ();
12967       tmp = RECUR (SWITCH_STMT_COND (t));
12968       finish_switch_cond (tmp, stmt);
12969       RECUR (SWITCH_STMT_BODY (t));
12970       finish_switch_stmt (stmt);
12971       break;
12972
12973     case CASE_LABEL_EXPR:
12974       finish_case_label (EXPR_LOCATION (t),
12975                          RECUR (CASE_LOW (t)),
12976                          RECUR (CASE_HIGH (t)));
12977       break;
12978
12979     case LABEL_EXPR:
12980       {
12981         tree decl = LABEL_EXPR_LABEL (t);
12982         tree label;
12983
12984         label = finish_label_stmt (DECL_NAME (decl));
12985         if (DECL_ATTRIBUTES (decl) != NULL_TREE)
12986           cplus_decl_attributes (&label, DECL_ATTRIBUTES (decl), 0);
12987       }
12988       break;
12989
12990     case GOTO_EXPR:
12991       tmp = GOTO_DESTINATION (t);
12992       if (TREE_CODE (tmp) != LABEL_DECL)
12993         /* Computed goto's must be tsubst'd into.  On the other hand,
12994            non-computed gotos must not be; the identifier in question
12995            will have no binding.  */
12996         tmp = RECUR (tmp);
12997       else
12998         tmp = DECL_NAME (tmp);
12999       finish_goto_stmt (tmp);
13000       break;
13001
13002     case ASM_EXPR:
13003       tmp = finish_asm_stmt
13004         (ASM_VOLATILE_P (t),
13005          RECUR (ASM_STRING (t)),
13006          tsubst_copy_asm_operands (ASM_OUTPUTS (t), args, complain, in_decl),
13007          tsubst_copy_asm_operands (ASM_INPUTS (t), args, complain, in_decl),
13008          tsubst_copy_asm_operands (ASM_CLOBBERS (t), args, complain, in_decl),
13009          tsubst_copy_asm_operands (ASM_LABELS (t), args, complain, in_decl));
13010       {
13011         tree asm_expr = tmp;
13012         if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
13013           asm_expr = TREE_OPERAND (asm_expr, 0);
13014         ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
13015       }
13016       break;
13017
13018     case TRY_BLOCK:
13019       if (CLEANUP_P (t))
13020         {
13021           stmt = begin_try_block ();
13022           RECUR (TRY_STMTS (t));
13023           finish_cleanup_try_block (stmt);
13024           finish_cleanup (RECUR (TRY_HANDLERS (t)), stmt);
13025         }
13026       else
13027         {
13028           tree compound_stmt = NULL_TREE;
13029
13030           if (FN_TRY_BLOCK_P (t))
13031             stmt = begin_function_try_block (&compound_stmt);
13032           else
13033             stmt = begin_try_block ();
13034
13035           RECUR (TRY_STMTS (t));
13036
13037           if (FN_TRY_BLOCK_P (t))
13038             finish_function_try_block (stmt);
13039           else
13040             finish_try_block (stmt);
13041
13042           RECUR (TRY_HANDLERS (t));
13043           if (FN_TRY_BLOCK_P (t))
13044             finish_function_handler_sequence (stmt, compound_stmt);
13045           else
13046             finish_handler_sequence (stmt);
13047         }
13048       break;
13049
13050     case HANDLER:
13051       {
13052         tree decl = HANDLER_PARMS (t);
13053
13054         if (decl)
13055           {
13056             decl = tsubst (decl, args, complain, in_decl);
13057             /* Prevent instantiate_decl from trying to instantiate
13058                this variable.  We've already done all that needs to be
13059                done.  */
13060             if (decl != error_mark_node)
13061               DECL_TEMPLATE_INSTANTIATED (decl) = 1;
13062           }
13063         stmt = begin_handler ();
13064         finish_handler_parms (decl, stmt);
13065         RECUR (HANDLER_BODY (t));
13066         finish_handler (stmt);
13067       }
13068       break;
13069
13070     case TAG_DEFN:
13071       tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
13072       break;
13073
13074     case STATIC_ASSERT:
13075       {
13076         tree condition = 
13077           tsubst_expr (STATIC_ASSERT_CONDITION (t), 
13078                        args,
13079                        complain, in_decl,
13080                        /*integral_constant_expression_p=*/true);
13081         finish_static_assert (condition,
13082                               STATIC_ASSERT_MESSAGE (t),
13083                               STATIC_ASSERT_SOURCE_LOCATION (t),
13084                               /*member_p=*/false);
13085       }
13086       break;
13087
13088     case OMP_PARALLEL:
13089       tmp = tsubst_omp_clauses (OMP_PARALLEL_CLAUSES (t),
13090                                 args, complain, in_decl);
13091       stmt = begin_omp_parallel ();
13092       RECUR (OMP_PARALLEL_BODY (t));
13093       OMP_PARALLEL_COMBINED (finish_omp_parallel (tmp, stmt))
13094         = OMP_PARALLEL_COMBINED (t);
13095       break;
13096
13097     case OMP_TASK:
13098       tmp = tsubst_omp_clauses (OMP_TASK_CLAUSES (t),
13099                                 args, complain, in_decl);
13100       stmt = begin_omp_task ();
13101       RECUR (OMP_TASK_BODY (t));
13102       finish_omp_task (tmp, stmt);
13103       break;
13104
13105     case OMP_FOR:
13106       {
13107         tree clauses, body, pre_body;
13108         tree declv, initv, condv, incrv;
13109         int i;
13110
13111         clauses = tsubst_omp_clauses (OMP_FOR_CLAUSES (t),
13112                                       args, complain, in_decl);
13113         declv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
13114         initv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
13115         condv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
13116         incrv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
13117
13118         for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INIT (t)); i++)
13119           tsubst_omp_for_iterator (t, i, declv, initv, condv, incrv,
13120                                    &clauses, args, complain, in_decl,
13121                                    integral_constant_expression_p);
13122
13123         stmt = begin_omp_structured_block ();
13124
13125         for (i = 0; i < TREE_VEC_LENGTH (initv); i++)
13126           if (TREE_VEC_ELT (initv, i) == NULL
13127               || TREE_CODE (TREE_VEC_ELT (initv, i)) != DECL_EXPR)
13128             TREE_VEC_ELT (initv, i) = RECUR (TREE_VEC_ELT (initv, i));
13129           else if (CLASS_TYPE_P (TREE_TYPE (TREE_VEC_ELT (initv, i))))
13130             {
13131               tree init = RECUR (TREE_VEC_ELT (initv, i));
13132               gcc_assert (init == TREE_VEC_ELT (declv, i));
13133               TREE_VEC_ELT (initv, i) = NULL_TREE;
13134             }
13135           else
13136             {
13137               tree decl_expr = TREE_VEC_ELT (initv, i);
13138               tree init = DECL_INITIAL (DECL_EXPR_DECL (decl_expr));
13139               gcc_assert (init != NULL);
13140               TREE_VEC_ELT (initv, i) = RECUR (init);
13141               DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = NULL;
13142               RECUR (decl_expr);
13143               DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = init;
13144             }
13145
13146         pre_body = push_stmt_list ();
13147         RECUR (OMP_FOR_PRE_BODY (t));
13148         pre_body = pop_stmt_list (pre_body);
13149
13150         body = push_stmt_list ();
13151         RECUR (OMP_FOR_BODY (t));
13152         body = pop_stmt_list (body);
13153
13154         t = finish_omp_for (EXPR_LOCATION (t), declv, initv, condv, incrv,
13155                             body, pre_body, clauses);
13156
13157         add_stmt (finish_omp_structured_block (stmt));
13158       }
13159       break;
13160
13161     case OMP_SECTIONS:
13162     case OMP_SINGLE:
13163       tmp = tsubst_omp_clauses (OMP_CLAUSES (t), args, complain, in_decl);
13164       stmt = push_stmt_list ();
13165       RECUR (OMP_BODY (t));
13166       stmt = pop_stmt_list (stmt);
13167
13168       t = copy_node (t);
13169       OMP_BODY (t) = stmt;
13170       OMP_CLAUSES (t) = tmp;
13171       add_stmt (t);
13172       break;
13173
13174     case OMP_SECTION:
13175     case OMP_CRITICAL:
13176     case OMP_MASTER:
13177     case OMP_ORDERED:
13178       stmt = push_stmt_list ();
13179       RECUR (OMP_BODY (t));
13180       stmt = pop_stmt_list (stmt);
13181
13182       t = copy_node (t);
13183       OMP_BODY (t) = stmt;
13184       add_stmt (t);
13185       break;
13186
13187     case OMP_ATOMIC:
13188       gcc_assert (OMP_ATOMIC_DEPENDENT_P (t));
13189       if (TREE_CODE (TREE_OPERAND (t, 1)) != MODIFY_EXPR)
13190         {
13191           tree op1 = TREE_OPERAND (t, 1);
13192           tree rhs1 = NULL_TREE;
13193           tree lhs, rhs;
13194           if (TREE_CODE (op1) == COMPOUND_EXPR)
13195             {
13196               rhs1 = RECUR (TREE_OPERAND (op1, 0));
13197               op1 = TREE_OPERAND (op1, 1);
13198             }
13199           lhs = RECUR (TREE_OPERAND (op1, 0));
13200           rhs = RECUR (TREE_OPERAND (op1, 1));
13201           finish_omp_atomic (OMP_ATOMIC, TREE_CODE (op1), lhs, rhs,
13202                              NULL_TREE, NULL_TREE, rhs1);
13203         }
13204       else
13205         {
13206           tree op1 = TREE_OPERAND (t, 1);
13207           tree v = NULL_TREE, lhs, rhs = NULL_TREE, lhs1 = NULL_TREE;
13208           tree rhs1 = NULL_TREE;
13209           enum tree_code code = TREE_CODE (TREE_OPERAND (op1, 1));
13210           enum tree_code opcode = NOP_EXPR;
13211           if (code == OMP_ATOMIC_READ)
13212             {
13213               v = RECUR (TREE_OPERAND (op1, 0));
13214               lhs = RECUR (TREE_OPERAND (TREE_OPERAND (op1, 1), 0));
13215             }
13216           else if (code == OMP_ATOMIC_CAPTURE_OLD
13217                    || code == OMP_ATOMIC_CAPTURE_NEW)
13218             {
13219               tree op11 = TREE_OPERAND (TREE_OPERAND (op1, 1), 1);
13220               v = RECUR (TREE_OPERAND (op1, 0));
13221               lhs1 = RECUR (TREE_OPERAND (TREE_OPERAND (op1, 1), 0));
13222               if (TREE_CODE (op11) == COMPOUND_EXPR)
13223                 {
13224                   rhs1 = RECUR (TREE_OPERAND (op11, 0));
13225                   op11 = TREE_OPERAND (op11, 1);
13226                 }
13227               lhs = RECUR (TREE_OPERAND (op11, 0));
13228               rhs = RECUR (TREE_OPERAND (op11, 1));
13229               opcode = TREE_CODE (op11);
13230             }
13231           else
13232             {
13233               code = OMP_ATOMIC;
13234               lhs = RECUR (TREE_OPERAND (op1, 0));
13235               rhs = RECUR (TREE_OPERAND (op1, 1));
13236             }
13237           finish_omp_atomic (code, opcode, lhs, rhs, v, lhs1, rhs1);
13238         }
13239       break;
13240
13241     case TRANSACTION_EXPR:
13242       {
13243         int flags = 0;
13244         flags |= (TRANSACTION_EXPR_OUTER (t) ? TM_STMT_ATTR_OUTER : 0);
13245         flags |= (TRANSACTION_EXPR_RELAXED (t) ? TM_STMT_ATTR_RELAXED : 0);
13246
13247         if (TRANSACTION_EXPR_IS_STMT (t))
13248           {
13249             stmt = begin_transaction_stmt (input_location, NULL, flags);
13250             RECUR (TRANSACTION_EXPR_BODY (t));
13251             finish_transaction_stmt (stmt, NULL, flags);
13252           }
13253         else
13254           {
13255             stmt = build_transaction_expr (EXPR_LOCATION (t),
13256                                            RECUR (TRANSACTION_EXPR_BODY (t)),
13257                                            flags);
13258             return stmt;
13259           }
13260       }
13261       break;
13262
13263     case MUST_NOT_THROW_EXPR:
13264       return build_must_not_throw_expr (RECUR (TREE_OPERAND (t, 0)),
13265                                         RECUR (MUST_NOT_THROW_COND (t)));
13266
13267     case EXPR_PACK_EXPANSION:
13268       error ("invalid use of pack expansion expression");
13269       return error_mark_node;
13270
13271     case NONTYPE_ARGUMENT_PACK:
13272       error ("use %<...%> to expand argument pack");
13273       return error_mark_node;
13274
13275     default:
13276       gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
13277
13278       return tsubst_copy_and_build (t, args, complain, in_decl,
13279                                     /*function_p=*/false,
13280                                     integral_constant_expression_p);
13281     }
13282
13283   return NULL_TREE;
13284 #undef RECUR
13285 }
13286
13287 /* T is a postfix-expression that is not being used in a function
13288    call.  Return the substituted version of T.  */
13289
13290 static tree
13291 tsubst_non_call_postfix_expression (tree t, tree args,
13292                                     tsubst_flags_t complain,
13293                                     tree in_decl)
13294 {
13295   if (TREE_CODE (t) == SCOPE_REF)
13296     t = tsubst_qualified_id (t, args, complain, in_decl,
13297                              /*done=*/false, /*address_p=*/false);
13298   else
13299     t = tsubst_copy_and_build (t, args, complain, in_decl,
13300                                /*function_p=*/false,
13301                                /*integral_constant_expression_p=*/false);
13302
13303   return t;
13304 }
13305
13306 /* Like tsubst but deals with expressions and performs semantic
13307    analysis.  FUNCTION_P is true if T is the "F" in "F (ARGS)".  */
13308
13309 tree
13310 tsubst_copy_and_build (tree t,
13311                        tree args,
13312                        tsubst_flags_t complain,
13313                        tree in_decl,
13314                        bool function_p,
13315                        bool integral_constant_expression_p)
13316 {
13317 #define RECUR(NODE)                                             \
13318   tsubst_copy_and_build (NODE, args, complain, in_decl,         \
13319                          /*function_p=*/false,                  \
13320                          integral_constant_expression_p)
13321
13322   tree op1;
13323
13324   if (t == NULL_TREE || t == error_mark_node)
13325     return t;
13326
13327   switch (TREE_CODE (t))
13328     {
13329     case USING_DECL:
13330       t = DECL_NAME (t);
13331       /* Fall through.  */
13332     case IDENTIFIER_NODE:
13333       {
13334         tree decl;
13335         cp_id_kind idk;
13336         bool non_integral_constant_expression_p;
13337         const char *error_msg;
13338
13339         if (IDENTIFIER_TYPENAME_P (t))
13340           {
13341             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13342             t = mangle_conv_op_name_for_type (new_type);
13343           }
13344
13345         /* Look up the name.  */
13346         decl = lookup_name (t);
13347
13348         /* By convention, expressions use ERROR_MARK_NODE to indicate
13349            failure, not NULL_TREE.  */
13350         if (decl == NULL_TREE)
13351           decl = error_mark_node;
13352
13353         decl = finish_id_expression (t, decl, NULL_TREE,
13354                                      &idk,
13355                                      integral_constant_expression_p,
13356           /*allow_non_integral_constant_expression_p=*/(cxx_dialect >= cxx0x),
13357                                      &non_integral_constant_expression_p,
13358                                      /*template_p=*/false,
13359                                      /*done=*/true,
13360                                      /*address_p=*/false,
13361                                      /*template_arg_p=*/false,
13362                                      &error_msg,
13363                                      input_location);
13364         if (error_msg)
13365           error (error_msg);
13366         if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
13367           {
13368             if (complain & tf_error)
13369               unqualified_name_lookup_error (decl);
13370             decl = error_mark_node;
13371           }
13372         return decl;
13373       }
13374
13375     case TEMPLATE_ID_EXPR:
13376       {
13377         tree object;
13378         tree templ = RECUR (TREE_OPERAND (t, 0));
13379         tree targs = TREE_OPERAND (t, 1);
13380
13381         if (targs)
13382           targs = tsubst_template_args (targs, args, complain, in_decl);
13383
13384         if (TREE_CODE (templ) == COMPONENT_REF)
13385           {
13386             object = TREE_OPERAND (templ, 0);
13387             templ = TREE_OPERAND (templ, 1);
13388           }
13389         else
13390           object = NULL_TREE;
13391         templ = lookup_template_function (templ, targs);
13392
13393         if (object)
13394           return build3 (COMPONENT_REF, TREE_TYPE (templ),
13395                          object, templ, NULL_TREE);
13396         else
13397           return baselink_for_fns (templ);
13398       }
13399
13400     case INDIRECT_REF:
13401       {
13402         tree r = RECUR (TREE_OPERAND (t, 0));
13403
13404         if (REFERENCE_REF_P (t))
13405           {
13406             /* A type conversion to reference type will be enclosed in
13407                such an indirect ref, but the substitution of the cast
13408                will have also added such an indirect ref.  */
13409             if (TREE_CODE (TREE_TYPE (r)) == REFERENCE_TYPE)
13410               r = convert_from_reference (r);
13411           }
13412         else
13413           r = build_x_indirect_ref (r, RO_UNARY_STAR, complain);
13414         return r;
13415       }
13416
13417     case NOP_EXPR:
13418       return build_nop
13419         (tsubst (TREE_TYPE (t), args, complain, in_decl),
13420          RECUR (TREE_OPERAND (t, 0)));
13421
13422     case IMPLICIT_CONV_EXPR:
13423       {
13424         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13425         tree expr = RECUR (TREE_OPERAND (t, 0));
13426         int flags = LOOKUP_IMPLICIT;
13427         if (IMPLICIT_CONV_EXPR_DIRECT_INIT (t))
13428           flags = LOOKUP_NORMAL;
13429         return perform_implicit_conversion_flags (type, expr, complain,
13430                                                   flags);
13431       }
13432
13433     case CONVERT_EXPR:
13434       return build1
13435         (CONVERT_EXPR,
13436          tsubst (TREE_TYPE (t), args, complain, in_decl),
13437          RECUR (TREE_OPERAND (t, 0)));
13438
13439     case CAST_EXPR:
13440     case REINTERPRET_CAST_EXPR:
13441     case CONST_CAST_EXPR:
13442     case DYNAMIC_CAST_EXPR:
13443     case STATIC_CAST_EXPR:
13444       {
13445         tree type;
13446         tree op;
13447
13448         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13449         if (integral_constant_expression_p
13450             && !cast_valid_in_integral_constant_expression_p (type))
13451           {
13452             if (complain & tf_error)
13453               error ("a cast to a type other than an integral or "
13454                      "enumeration type cannot appear in a constant-expression");
13455             return error_mark_node; 
13456           }
13457
13458         op = RECUR (TREE_OPERAND (t, 0));
13459
13460         switch (TREE_CODE (t))
13461           {
13462           case CAST_EXPR:
13463             return build_functional_cast (type, op, complain);
13464           case REINTERPRET_CAST_EXPR:
13465             return build_reinterpret_cast (type, op, complain);
13466           case CONST_CAST_EXPR:
13467             return build_const_cast (type, op, complain);
13468           case DYNAMIC_CAST_EXPR:
13469             return build_dynamic_cast (type, op, complain);
13470           case STATIC_CAST_EXPR:
13471             return build_static_cast (type, op, complain);
13472           default:
13473             gcc_unreachable ();
13474           }
13475       }
13476
13477     case POSTDECREMENT_EXPR:
13478     case POSTINCREMENT_EXPR:
13479       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
13480                                                 args, complain, in_decl);
13481       return build_x_unary_op (TREE_CODE (t), op1, complain);
13482
13483     case PREDECREMENT_EXPR:
13484     case PREINCREMENT_EXPR:
13485     case NEGATE_EXPR:
13486     case BIT_NOT_EXPR:
13487     case ABS_EXPR:
13488     case TRUTH_NOT_EXPR:
13489     case UNARY_PLUS_EXPR:  /* Unary + */
13490     case REALPART_EXPR:
13491     case IMAGPART_EXPR:
13492       return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)),
13493                                complain);
13494
13495     case FIX_TRUNC_EXPR:
13496       return cp_build_unary_op (FIX_TRUNC_EXPR, RECUR (TREE_OPERAND (t, 0)),
13497                                 0, complain);
13498
13499     case ADDR_EXPR:
13500       op1 = TREE_OPERAND (t, 0);
13501       if (TREE_CODE (op1) == LABEL_DECL)
13502         return finish_label_address_expr (DECL_NAME (op1),
13503                                           EXPR_LOCATION (op1));
13504       if (TREE_CODE (op1) == SCOPE_REF)
13505         op1 = tsubst_qualified_id (op1, args, complain, in_decl,
13506                                    /*done=*/true, /*address_p=*/true);
13507       else
13508         op1 = tsubst_non_call_postfix_expression (op1, args, complain,
13509                                                   in_decl);
13510       return build_x_unary_op (ADDR_EXPR, op1, complain);
13511
13512     case PLUS_EXPR:
13513     case MINUS_EXPR:
13514     case MULT_EXPR:
13515     case TRUNC_DIV_EXPR:
13516     case CEIL_DIV_EXPR:
13517     case FLOOR_DIV_EXPR:
13518     case ROUND_DIV_EXPR:
13519     case EXACT_DIV_EXPR:
13520     case BIT_AND_EXPR:
13521     case BIT_IOR_EXPR:
13522     case BIT_XOR_EXPR:
13523     case TRUNC_MOD_EXPR:
13524     case FLOOR_MOD_EXPR:
13525     case TRUTH_ANDIF_EXPR:
13526     case TRUTH_ORIF_EXPR:
13527     case TRUTH_AND_EXPR:
13528     case TRUTH_OR_EXPR:
13529     case RSHIFT_EXPR:
13530     case LSHIFT_EXPR:
13531     case RROTATE_EXPR:
13532     case LROTATE_EXPR:
13533     case EQ_EXPR:
13534     case NE_EXPR:
13535     case MAX_EXPR:
13536     case MIN_EXPR:
13537     case LE_EXPR:
13538     case GE_EXPR:
13539     case LT_EXPR:
13540     case GT_EXPR:
13541     case MEMBER_REF:
13542     case DOTSTAR_EXPR:
13543       return build_x_binary_op
13544         (TREE_CODE (t),
13545          RECUR (TREE_OPERAND (t, 0)),
13546          (TREE_NO_WARNING (TREE_OPERAND (t, 0))
13547           ? ERROR_MARK
13548           : TREE_CODE (TREE_OPERAND (t, 0))),
13549          RECUR (TREE_OPERAND (t, 1)),
13550          (TREE_NO_WARNING (TREE_OPERAND (t, 1))
13551           ? ERROR_MARK
13552           : TREE_CODE (TREE_OPERAND (t, 1))),
13553          /*overload=*/NULL,
13554          complain);
13555
13556     case SCOPE_REF:
13557       return tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
13558                                   /*address_p=*/false);
13559     case ARRAY_REF:
13560       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
13561                                                 args, complain, in_decl);
13562       return build_x_array_ref (op1, RECUR (TREE_OPERAND (t, 1)), complain);
13563
13564     case SIZEOF_EXPR:
13565       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
13566         return tsubst_copy (t, args, complain, in_decl);
13567       /* Fall through */
13568       
13569     case ALIGNOF_EXPR:
13570       op1 = TREE_OPERAND (t, 0);
13571       if (!args)
13572         {
13573           /* When there are no ARGS, we are trying to evaluate a
13574              non-dependent expression from the parser.  Trying to do
13575              the substitutions may not work.  */
13576           if (!TYPE_P (op1))
13577             op1 = TREE_TYPE (op1);
13578         }
13579       else
13580         {
13581           ++cp_unevaluated_operand;
13582           ++c_inhibit_evaluation_warnings;
13583           op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
13584                                        /*function_p=*/false,
13585                                        /*integral_constant_expression_p=*/false);
13586           --cp_unevaluated_operand;
13587           --c_inhibit_evaluation_warnings;
13588         }
13589       if (TYPE_P (op1))
13590         return cxx_sizeof_or_alignof_type (op1, TREE_CODE (t), 
13591                                            complain & tf_error);
13592       else
13593         return cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t), 
13594                                            complain & tf_error);
13595
13596     case AT_ENCODE_EXPR:
13597       {
13598         op1 = TREE_OPERAND (t, 0);
13599         ++cp_unevaluated_operand;
13600         ++c_inhibit_evaluation_warnings;
13601         op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
13602                                      /*function_p=*/false,
13603                                      /*integral_constant_expression_p=*/false);
13604         --cp_unevaluated_operand;
13605         --c_inhibit_evaluation_warnings;
13606         return objc_build_encode_expr (op1);
13607       }
13608
13609     case NOEXCEPT_EXPR:
13610       op1 = TREE_OPERAND (t, 0);
13611       ++cp_unevaluated_operand;
13612       ++c_inhibit_evaluation_warnings;
13613       op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
13614                                    /*function_p=*/false,
13615                                    /*integral_constant_expression_p=*/false);
13616       --cp_unevaluated_operand;
13617       --c_inhibit_evaluation_warnings;
13618       return finish_noexcept_expr (op1, complain);
13619
13620     case MODOP_EXPR:
13621       {
13622         tree r = build_x_modify_expr
13623           (RECUR (TREE_OPERAND (t, 0)),
13624            TREE_CODE (TREE_OPERAND (t, 1)),
13625            RECUR (TREE_OPERAND (t, 2)),
13626            complain);
13627         /* TREE_NO_WARNING must be set if either the expression was
13628            parenthesized or it uses an operator such as >>= rather
13629            than plain assignment.  In the former case, it was already
13630            set and must be copied.  In the latter case,
13631            build_x_modify_expr sets it and it must not be reset
13632            here.  */
13633         if (TREE_NO_WARNING (t))
13634           TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
13635         return r;
13636       }
13637
13638     case ARROW_EXPR:
13639       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
13640                                                 args, complain, in_decl);
13641       /* Remember that there was a reference to this entity.  */
13642       if (DECL_P (op1))
13643         mark_used (op1);
13644       return build_x_arrow (op1);
13645
13646     case NEW_EXPR:
13647       {
13648         tree placement = RECUR (TREE_OPERAND (t, 0));
13649         tree init = RECUR (TREE_OPERAND (t, 3));
13650         VEC(tree,gc) *placement_vec;
13651         VEC(tree,gc) *init_vec;
13652         tree ret;
13653
13654         if (placement == NULL_TREE)
13655           placement_vec = NULL;
13656         else
13657           {
13658             placement_vec = make_tree_vector ();
13659             for (; placement != NULL_TREE; placement = TREE_CHAIN (placement))
13660               VEC_safe_push (tree, gc, placement_vec, TREE_VALUE (placement));
13661           }
13662
13663         /* If there was an initializer in the original tree, but it
13664            instantiated to an empty list, then we should pass a
13665            non-NULL empty vector to tell build_new that it was an
13666            empty initializer() rather than no initializer.  This can
13667            only happen when the initializer is a pack expansion whose
13668            parameter packs are of length zero.  */
13669         if (init == NULL_TREE && TREE_OPERAND (t, 3) == NULL_TREE)
13670           init_vec = NULL;
13671         else
13672           {
13673             init_vec = make_tree_vector ();
13674             if (init == void_zero_node)
13675               gcc_assert (init_vec != NULL);
13676             else
13677               {
13678                 for (; init != NULL_TREE; init = TREE_CHAIN (init))
13679                   VEC_safe_push (tree, gc, init_vec, TREE_VALUE (init));
13680               }
13681           }
13682
13683         ret = build_new (&placement_vec,
13684                          tsubst (TREE_OPERAND (t, 1), args, complain, in_decl),
13685                          RECUR (TREE_OPERAND (t, 2)),
13686                          &init_vec,
13687                          NEW_EXPR_USE_GLOBAL (t),
13688                          complain);
13689
13690         if (placement_vec != NULL)
13691           release_tree_vector (placement_vec);
13692         if (init_vec != NULL)
13693           release_tree_vector (init_vec);
13694
13695         return ret;
13696       }
13697
13698     case DELETE_EXPR:
13699      return delete_sanity
13700        (RECUR (TREE_OPERAND (t, 0)),
13701         RECUR (TREE_OPERAND (t, 1)),
13702         DELETE_EXPR_USE_VEC (t),
13703         DELETE_EXPR_USE_GLOBAL (t),
13704         complain);
13705
13706     case COMPOUND_EXPR:
13707       return build_x_compound_expr (RECUR (TREE_OPERAND (t, 0)),
13708                                     RECUR (TREE_OPERAND (t, 1)),
13709                                     complain);
13710
13711     case CALL_EXPR:
13712       {
13713         tree function;
13714         VEC(tree,gc) *call_args;
13715         unsigned int nargs, i;
13716         bool qualified_p;
13717         bool koenig_p;
13718         tree ret;
13719
13720         function = CALL_EXPR_FN (t);
13721         /* When we parsed the expression,  we determined whether or
13722            not Koenig lookup should be performed.  */
13723         koenig_p = KOENIG_LOOKUP_P (t);
13724         if (TREE_CODE (function) == SCOPE_REF)
13725           {
13726             qualified_p = true;
13727             function = tsubst_qualified_id (function, args, complain, in_decl,
13728                                             /*done=*/false,
13729                                             /*address_p=*/false);
13730           }
13731         else if (koenig_p && TREE_CODE (function) == IDENTIFIER_NODE)
13732           {
13733             /* Do nothing; calling tsubst_copy_and_build on an identifier
13734                would incorrectly perform unqualified lookup again.
13735
13736                Note that we can also have an IDENTIFIER_NODE if the earlier
13737                unqualified lookup found a member function; in that case
13738                koenig_p will be false and we do want to do the lookup
13739                again to find the instantiated member function.
13740
13741                FIXME but doing that causes c++/15272, so we need to stop
13742                using IDENTIFIER_NODE in that situation.  */
13743             qualified_p = false;
13744           }
13745         else
13746           {
13747             if (TREE_CODE (function) == COMPONENT_REF)
13748               {
13749                 tree op = TREE_OPERAND (function, 1);
13750
13751                 qualified_p = (TREE_CODE (op) == SCOPE_REF
13752                                || (BASELINK_P (op)
13753                                    && BASELINK_QUALIFIED_P (op)));
13754               }
13755             else
13756               qualified_p = false;
13757
13758             function = tsubst_copy_and_build (function, args, complain,
13759                                               in_decl,
13760                                               !qualified_p,
13761                                               integral_constant_expression_p);
13762
13763             if (BASELINK_P (function))
13764               qualified_p = true;
13765           }
13766
13767         nargs = call_expr_nargs (t);
13768         call_args = make_tree_vector ();
13769         for (i = 0; i < nargs; ++i)
13770           {
13771             tree arg = CALL_EXPR_ARG (t, i);
13772
13773             if (!PACK_EXPANSION_P (arg))
13774               VEC_safe_push (tree, gc, call_args,
13775                              RECUR (CALL_EXPR_ARG (t, i)));
13776             else
13777               {
13778                 /* Expand the pack expansion and push each entry onto
13779                    CALL_ARGS.  */
13780                 arg = tsubst_pack_expansion (arg, args, complain, in_decl);
13781                 if (TREE_CODE (arg) == TREE_VEC)
13782                   {
13783                     unsigned int len, j;
13784
13785                     len = TREE_VEC_LENGTH (arg);
13786                     for (j = 0; j < len; ++j)
13787                       {
13788                         tree value = TREE_VEC_ELT (arg, j);
13789                         if (value != NULL_TREE)
13790                           value = convert_from_reference (value);
13791                         VEC_safe_push (tree, gc, call_args, value);
13792                       }
13793                   }
13794                 else
13795                   {
13796                     /* A partial substitution.  Add one entry.  */
13797                     VEC_safe_push (tree, gc, call_args, arg);
13798                   }
13799               }
13800           }
13801
13802         /* We do not perform argument-dependent lookup if normal
13803            lookup finds a non-function, in accordance with the
13804            expected resolution of DR 218.  */
13805         if (koenig_p
13806             && ((is_overloaded_fn (function)
13807                  /* If lookup found a member function, the Koenig lookup is
13808                     not appropriate, even if an unqualified-name was used
13809                     to denote the function.  */
13810                  && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
13811                 || TREE_CODE (function) == IDENTIFIER_NODE)
13812             /* Only do this when substitution turns a dependent call
13813                into a non-dependent call.  */
13814             && type_dependent_expression_p_push (t)
13815             && !any_type_dependent_arguments_p (call_args))
13816           function = perform_koenig_lookup (function, call_args, false,
13817                                             tf_none);
13818
13819         if (TREE_CODE (function) == IDENTIFIER_NODE
13820             && !any_type_dependent_arguments_p (call_args))
13821           {
13822             if (koenig_p && (complain & tf_warning_or_error))
13823               {
13824                 /* For backwards compatibility and good diagnostics, try
13825                    the unqualified lookup again if we aren't in SFINAE
13826                    context.  */
13827                 tree unq = (tsubst_copy_and_build
13828                             (function, args, complain, in_decl, true,
13829                              integral_constant_expression_p));
13830                 if (unq == error_mark_node)
13831                   return error_mark_node;
13832
13833                 if (unq != function)
13834                   {
13835                     tree fn = unq;
13836                     if (TREE_CODE (fn) == INDIRECT_REF)
13837                       fn = TREE_OPERAND (fn, 0);
13838                     if (TREE_CODE (fn) == COMPONENT_REF)
13839                       fn = TREE_OPERAND (fn, 1);
13840                     if (is_overloaded_fn (fn))
13841                       fn = get_first_fn (fn);
13842                     permerror (EXPR_LOC_OR_HERE (t),
13843                                "%qD was not declared in this scope, "
13844                                "and no declarations were found by "
13845                                "argument-dependent lookup at the point "
13846                                "of instantiation", function);
13847                     if (!DECL_P (fn))
13848                       /* Can't say anything more.  */;
13849                     else if (DECL_CLASS_SCOPE_P (fn))
13850                       {
13851                         inform (EXPR_LOC_OR_HERE (t),
13852                                 "declarations in dependent base %qT are "
13853                                 "not found by unqualified lookup",
13854                                 DECL_CLASS_CONTEXT (fn));
13855                         if (current_class_ptr)
13856                           inform (EXPR_LOC_OR_HERE (t),
13857                                   "use %<this->%D%> instead", function);
13858                         else
13859                           inform (EXPR_LOC_OR_HERE (t),
13860                                   "use %<%T::%D%> instead",
13861                                   current_class_name, function);
13862                       }
13863                     else
13864                       inform (0, "%q+D declared here, later in the "
13865                                 "translation unit", fn);
13866                     function = unq;
13867                   }
13868               }
13869             if (TREE_CODE (function) == IDENTIFIER_NODE)
13870               {
13871                 unqualified_name_lookup_error (function);
13872                 release_tree_vector (call_args);
13873                 return error_mark_node;
13874               }
13875           }
13876
13877         /* Remember that there was a reference to this entity.  */
13878         if (DECL_P (function))
13879           mark_used (function);
13880
13881         if (TREE_CODE (function) == OFFSET_REF)
13882           ret = build_offset_ref_call_from_tree (function, &call_args);
13883         else if (TREE_CODE (function) == COMPONENT_REF)
13884           {
13885             tree instance = TREE_OPERAND (function, 0);
13886             tree fn = TREE_OPERAND (function, 1);
13887
13888             if (processing_template_decl
13889                 && (type_dependent_expression_p (instance)
13890                     || (!BASELINK_P (fn)
13891                         && TREE_CODE (fn) != FIELD_DECL)
13892                     || type_dependent_expression_p (fn)
13893                     || any_type_dependent_arguments_p (call_args)))
13894               ret = build_nt_call_vec (function, call_args);
13895             else if (!BASELINK_P (fn))
13896               ret = finish_call_expr (function, &call_args,
13897                                        /*disallow_virtual=*/false,
13898                                        /*koenig_p=*/false,
13899                                        complain);
13900             else
13901               ret = (build_new_method_call
13902                       (instance, fn,
13903                        &call_args, NULL_TREE,
13904                        qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL,
13905                        /*fn_p=*/NULL,
13906                        complain));
13907           }
13908         else
13909           ret = finish_call_expr (function, &call_args,
13910                                   /*disallow_virtual=*/qualified_p,
13911                                   koenig_p,
13912                                   complain);
13913
13914         release_tree_vector (call_args);
13915
13916         return ret;
13917       }
13918
13919     case COND_EXPR:
13920       return build_x_conditional_expr
13921         (RECUR (TREE_OPERAND (t, 0)),
13922          RECUR (TREE_OPERAND (t, 1)),
13923          RECUR (TREE_OPERAND (t, 2)),
13924          complain);
13925
13926     case PSEUDO_DTOR_EXPR:
13927       return finish_pseudo_destructor_expr
13928         (RECUR (TREE_OPERAND (t, 0)),
13929          RECUR (TREE_OPERAND (t, 1)),
13930          tsubst (TREE_OPERAND (t, 2), args, complain, in_decl));
13931
13932     case TREE_LIST:
13933       {
13934         tree purpose, value, chain;
13935
13936         if (t == void_list_node)
13937           return t;
13938
13939         if ((TREE_PURPOSE (t) && PACK_EXPANSION_P (TREE_PURPOSE (t)))
13940             || (TREE_VALUE (t) && PACK_EXPANSION_P (TREE_VALUE (t))))
13941           {
13942             /* We have pack expansions, so expand those and
13943                create a new list out of it.  */
13944             tree purposevec = NULL_TREE;
13945             tree valuevec = NULL_TREE;
13946             tree chain;
13947             int i, len = -1;
13948
13949             /* Expand the argument expressions.  */
13950             if (TREE_PURPOSE (t))
13951               purposevec = tsubst_pack_expansion (TREE_PURPOSE (t), args,
13952                                                  complain, in_decl);
13953             if (TREE_VALUE (t))
13954               valuevec = tsubst_pack_expansion (TREE_VALUE (t), args,
13955                                                complain, in_decl);
13956
13957             /* Build the rest of the list.  */
13958             chain = TREE_CHAIN (t);
13959             if (chain && chain != void_type_node)
13960               chain = RECUR (chain);
13961
13962             /* Determine the number of arguments.  */
13963             if (purposevec && TREE_CODE (purposevec) == TREE_VEC)
13964               {
13965                 len = TREE_VEC_LENGTH (purposevec);
13966                 gcc_assert (!valuevec || len == TREE_VEC_LENGTH (valuevec));
13967               }
13968             else if (TREE_CODE (valuevec) == TREE_VEC)
13969               len = TREE_VEC_LENGTH (valuevec);
13970             else
13971               {
13972                 /* Since we only performed a partial substitution into
13973                    the argument pack, we only return a single list
13974                    node.  */
13975                 if (purposevec == TREE_PURPOSE (t)
13976                     && valuevec == TREE_VALUE (t)
13977                     && chain == TREE_CHAIN (t))
13978                   return t;
13979
13980                 return tree_cons (purposevec, valuevec, chain);
13981               }
13982             
13983             /* Convert the argument vectors into a TREE_LIST */
13984             i = len;
13985             while (i > 0)
13986               {
13987                 /* Grab the Ith values.  */
13988                 i--;
13989                 purpose = purposevec ? TREE_VEC_ELT (purposevec, i) 
13990                                      : NULL_TREE;
13991                 value 
13992                   = valuevec ? convert_from_reference (TREE_VEC_ELT (valuevec, i)) 
13993                              : NULL_TREE;
13994
13995                 /* Build the list (backwards).  */
13996                 chain = tree_cons (purpose, value, chain);
13997               }
13998
13999             return chain;
14000           }
14001
14002         purpose = TREE_PURPOSE (t);
14003         if (purpose)
14004           purpose = RECUR (purpose);
14005         value = TREE_VALUE (t);
14006         if (value)
14007           value = RECUR (value);
14008         chain = TREE_CHAIN (t);
14009         if (chain && chain != void_type_node)
14010           chain = RECUR (chain);
14011         if (purpose == TREE_PURPOSE (t)
14012             && value == TREE_VALUE (t)
14013             && chain == TREE_CHAIN (t))
14014           return t;
14015         return tree_cons (purpose, value, chain);
14016       }
14017
14018     case COMPONENT_REF:
14019       {
14020         tree object;
14021         tree object_type;
14022         tree member;
14023
14024         object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
14025                                                      args, complain, in_decl);
14026         /* Remember that there was a reference to this entity.  */
14027         if (DECL_P (object))
14028           mark_used (object);
14029         object_type = TREE_TYPE (object);
14030
14031         member = TREE_OPERAND (t, 1);
14032         if (BASELINK_P (member))
14033           member = tsubst_baselink (member,
14034                                     non_reference (TREE_TYPE (object)),
14035                                     args, complain, in_decl);
14036         else
14037           member = tsubst_copy (member, args, complain, in_decl);
14038         if (member == error_mark_node)
14039           return error_mark_node;
14040
14041         if (type_dependent_expression_p (object))
14042           /* We can't do much here.  */;
14043         else if (!CLASS_TYPE_P (object_type))
14044           {
14045             if (SCALAR_TYPE_P (object_type))
14046               {
14047                 tree s = NULL_TREE;
14048                 tree dtor = member;
14049
14050                 if (TREE_CODE (dtor) == SCOPE_REF)
14051                   {
14052                     s = TREE_OPERAND (dtor, 0);
14053                     dtor = TREE_OPERAND (dtor, 1);
14054                   }
14055                 if (TREE_CODE (dtor) == BIT_NOT_EXPR)
14056                   {
14057                     dtor = TREE_OPERAND (dtor, 0);
14058                     if (TYPE_P (dtor))
14059                       return finish_pseudo_destructor_expr (object, s, dtor);
14060                   }
14061               }
14062           }
14063         else if (TREE_CODE (member) == SCOPE_REF
14064                  && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
14065           {
14066             /* Lookup the template functions now that we know what the
14067                scope is.  */
14068             tree scope = TREE_OPERAND (member, 0);
14069             tree tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
14070             tree args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
14071             member = lookup_qualified_name (scope, tmpl,
14072                                             /*is_type_p=*/false,
14073                                             /*complain=*/false);
14074             if (BASELINK_P (member))
14075               {
14076                 BASELINK_FUNCTIONS (member)
14077                   = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
14078                               args);
14079                 member = (adjust_result_of_qualified_name_lookup
14080                           (member, BINFO_TYPE (BASELINK_BINFO (member)),
14081                            object_type));
14082               }
14083             else
14084               {
14085                 qualified_name_lookup_error (scope, tmpl, member,
14086                                              input_location);
14087                 return error_mark_node;
14088               }
14089           }
14090         else if (TREE_CODE (member) == SCOPE_REF
14091                  && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
14092                  && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
14093           {
14094             if (complain & tf_error)
14095               {
14096                 if (TYPE_P (TREE_OPERAND (member, 0)))
14097                   error ("%qT is not a class or namespace",
14098                          TREE_OPERAND (member, 0));
14099                 else
14100                   error ("%qD is not a class or namespace",
14101                          TREE_OPERAND (member, 0));
14102               }
14103             return error_mark_node;
14104           }
14105         else if (TREE_CODE (member) == FIELD_DECL)
14106           return finish_non_static_data_member (member, object, NULL_TREE);
14107
14108         return finish_class_member_access_expr (object, member,
14109                                                 /*template_p=*/false,
14110                                                 complain);
14111       }
14112
14113     case THROW_EXPR:
14114       return build_throw
14115         (RECUR (TREE_OPERAND (t, 0)));
14116
14117     case CONSTRUCTOR:
14118       {
14119         VEC(constructor_elt,gc) *n;
14120         constructor_elt *ce;
14121         unsigned HOST_WIDE_INT idx;
14122         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
14123         bool process_index_p;
14124         int newlen;
14125         bool need_copy_p = false;
14126         tree r;
14127
14128         if (type == error_mark_node)
14129           return error_mark_node;
14130
14131         /* digest_init will do the wrong thing if we let it.  */
14132         if (type && TYPE_PTRMEMFUNC_P (type))
14133           return t;
14134
14135         /* We do not want to process the index of aggregate
14136            initializers as they are identifier nodes which will be
14137            looked up by digest_init.  */
14138         process_index_p = !(type && MAYBE_CLASS_TYPE_P (type));
14139
14140         n = VEC_copy (constructor_elt, gc, CONSTRUCTOR_ELTS (t));
14141         newlen = VEC_length (constructor_elt, n);
14142         FOR_EACH_VEC_ELT (constructor_elt, n, idx, ce)
14143           {
14144             if (ce->index && process_index_p)
14145               ce->index = RECUR (ce->index);
14146
14147             if (PACK_EXPANSION_P (ce->value))
14148               {
14149                 /* Substitute into the pack expansion.  */
14150                 ce->value = tsubst_pack_expansion (ce->value, args, complain,
14151                                                   in_decl);
14152
14153                 if (ce->value == error_mark_node
14154                     || PACK_EXPANSION_P (ce->value))
14155                   ;
14156                 else if (TREE_VEC_LENGTH (ce->value) == 1)
14157                   /* Just move the argument into place.  */
14158                   ce->value = TREE_VEC_ELT (ce->value, 0);
14159                 else
14160                   {
14161                     /* Update the length of the final CONSTRUCTOR
14162                        arguments vector, and note that we will need to
14163                        copy.*/
14164                     newlen = newlen + TREE_VEC_LENGTH (ce->value) - 1;
14165                     need_copy_p = true;
14166                   }
14167               }
14168             else
14169               ce->value = RECUR (ce->value);
14170           }
14171
14172         if (need_copy_p)
14173           {
14174             VEC(constructor_elt,gc) *old_n = n;
14175
14176             n = VEC_alloc (constructor_elt, gc, newlen);
14177             FOR_EACH_VEC_ELT (constructor_elt, old_n, idx, ce)
14178               {
14179                 if (TREE_CODE (ce->value) == TREE_VEC)
14180                   {
14181                     int i, len = TREE_VEC_LENGTH (ce->value);
14182                     for (i = 0; i < len; ++i)
14183                       CONSTRUCTOR_APPEND_ELT (n, 0,
14184                                               TREE_VEC_ELT (ce->value, i));
14185                   }
14186                 else
14187                   CONSTRUCTOR_APPEND_ELT (n, 0, ce->value);
14188               }
14189           }
14190
14191         r = build_constructor (init_list_type_node, n);
14192         CONSTRUCTOR_IS_DIRECT_INIT (r) = CONSTRUCTOR_IS_DIRECT_INIT (t);
14193
14194         if (TREE_HAS_CONSTRUCTOR (t))
14195           return finish_compound_literal (type, r, complain);
14196
14197         TREE_TYPE (r) = type;
14198         return r;
14199       }
14200
14201     case TYPEID_EXPR:
14202       {
14203         tree operand_0 = TREE_OPERAND (t, 0);
14204         if (TYPE_P (operand_0))
14205           {
14206             operand_0 = tsubst (operand_0, args, complain, in_decl);
14207             return get_typeid (operand_0);
14208           }
14209         else
14210           {
14211             operand_0 = RECUR (operand_0);
14212             return build_typeid (operand_0);
14213           }
14214       }
14215
14216     case VAR_DECL:
14217       if (!args)
14218         return t;
14219       /* Fall through */
14220
14221     case PARM_DECL:
14222       {
14223         tree r = tsubst_copy (t, args, complain, in_decl);
14224
14225         if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
14226           /* If the original type was a reference, we'll be wrapped in
14227              the appropriate INDIRECT_REF.  */
14228           r = convert_from_reference (r);
14229         return r;
14230       }
14231
14232     case VA_ARG_EXPR:
14233       return build_x_va_arg (RECUR (TREE_OPERAND (t, 0)),
14234                              tsubst (TREE_TYPE (t), args, complain, in_decl));
14235
14236     case OFFSETOF_EXPR:
14237       return finish_offsetof (RECUR (TREE_OPERAND (t, 0)));
14238
14239     case TRAIT_EXPR:
14240       {
14241         tree type1 = tsubst_copy (TRAIT_EXPR_TYPE1 (t), args,
14242                                   complain, in_decl);
14243
14244         tree type2 = TRAIT_EXPR_TYPE2 (t);
14245         if (type2)
14246           type2 = tsubst_copy (type2, args, complain, in_decl);
14247         
14248         return finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2);
14249       }
14250
14251     case STMT_EXPR:
14252       {
14253         tree old_stmt_expr = cur_stmt_expr;
14254         tree stmt_expr = begin_stmt_expr ();
14255
14256         cur_stmt_expr = stmt_expr;
14257         tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl,
14258                      integral_constant_expression_p);
14259         stmt_expr = finish_stmt_expr (stmt_expr, false);
14260         cur_stmt_expr = old_stmt_expr;
14261
14262         /* If the resulting list of expression statement is empty,
14263            fold it further into void_zero_node.  */
14264         if (empty_expr_stmt_p (stmt_expr))
14265           stmt_expr = void_zero_node;
14266
14267         return stmt_expr;
14268       }
14269
14270     case CONST_DECL:
14271       t = tsubst_copy (t, args, complain, in_decl);
14272       /* As in finish_id_expression, we resolve enumeration constants
14273          to their underlying values.  */
14274       if (TREE_CODE (t) == CONST_DECL && !processing_template_decl)
14275         {
14276           used_types_insert (TREE_TYPE (t));
14277           return DECL_INITIAL (t);
14278         }
14279       return t;
14280
14281     case LAMBDA_EXPR:
14282       {
14283         tree r = build_lambda_expr ();
14284
14285         tree type = tsubst (LAMBDA_EXPR_CLOSURE (t), args, complain, NULL_TREE);
14286         LAMBDA_EXPR_CLOSURE (r) = type;
14287         CLASSTYPE_LAMBDA_EXPR (type) = r;
14288
14289         LAMBDA_EXPR_LOCATION (r)
14290           = LAMBDA_EXPR_LOCATION (t);
14291         LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (r)
14292           = LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (t);
14293         LAMBDA_EXPR_MUTABLE_P (r) = LAMBDA_EXPR_MUTABLE_P (t);
14294         LAMBDA_EXPR_DISCRIMINATOR (r)
14295           = (LAMBDA_EXPR_DISCRIMINATOR (t));
14296         LAMBDA_EXPR_EXTRA_SCOPE (r)
14297           = RECUR (LAMBDA_EXPR_EXTRA_SCOPE (t));
14298         if (LAMBDA_EXPR_RETURN_TYPE (t) == dependent_lambda_return_type_node)
14299           {
14300             LAMBDA_EXPR_RETURN_TYPE (r) = dependent_lambda_return_type_node;
14301             LAMBDA_EXPR_DEDUCE_RETURN_TYPE_P (r) = true;
14302           }
14303         else
14304           LAMBDA_EXPR_RETURN_TYPE (r)
14305             = tsubst (LAMBDA_EXPR_RETURN_TYPE (t), args, complain, in_decl);
14306
14307         gcc_assert (LAMBDA_EXPR_THIS_CAPTURE (t) == NULL_TREE
14308                     && LAMBDA_EXPR_PENDING_PROXIES (t) == NULL);
14309
14310         /* Do this again now that LAMBDA_EXPR_EXTRA_SCOPE is set.  */
14311         determine_visibility (TYPE_NAME (type));
14312         /* Now that we know visibility, instantiate the type so we have a
14313            declaration of the op() for later calls to lambda_function.  */
14314         complete_type (type);
14315
14316         /* The capture list refers to closure members, so this needs to
14317            wait until after we finish instantiating the type.  */
14318         LAMBDA_EXPR_CAPTURE_LIST (r)
14319           = RECUR (LAMBDA_EXPR_CAPTURE_LIST (t));
14320
14321         return build_lambda_object (r);
14322       }
14323
14324     case TARGET_EXPR:
14325       /* We can get here for a constant initializer of non-dependent type.
14326          FIXME stop folding in cp_parser_initializer_clause.  */
14327       gcc_assert (TREE_CONSTANT (t));
14328       {
14329         tree r = get_target_expr (RECUR (TARGET_EXPR_INITIAL (t)));
14330         TREE_CONSTANT (r) = true;
14331         return r;
14332       }
14333
14334     case TRANSACTION_EXPR:
14335       return tsubst_expr(t, args, complain, in_decl,
14336              integral_constant_expression_p);
14337
14338     default:
14339       /* Handle Objective-C++ constructs, if appropriate.  */
14340       {
14341         tree subst
14342           = objcp_tsubst_copy_and_build (t, args, complain,
14343                                          in_decl, /*function_p=*/false);
14344         if (subst)
14345           return subst;
14346       }
14347       return tsubst_copy (t, args, complain, in_decl);
14348     }
14349
14350 #undef RECUR
14351 }
14352
14353 /* Verify that the instantiated ARGS are valid. For type arguments,
14354    make sure that the type's linkage is ok. For non-type arguments,
14355    make sure they are constants if they are integral or enumerations.
14356    Emit an error under control of COMPLAIN, and return TRUE on error.  */
14357
14358 static bool
14359 check_instantiated_arg (tree tmpl, tree t, tsubst_flags_t complain)
14360 {
14361   if (ARGUMENT_PACK_P (t))
14362     {
14363       tree vec = ARGUMENT_PACK_ARGS (t);
14364       int len = TREE_VEC_LENGTH (vec);
14365       bool result = false;
14366       int i;
14367
14368       for (i = 0; i < len; ++i)
14369         if (check_instantiated_arg (tmpl, TREE_VEC_ELT (vec, i), complain))
14370           result = true;
14371       return result;
14372     }
14373   else if (TYPE_P (t))
14374     {
14375       /* [basic.link]: A name with no linkage (notably, the name
14376          of a class or enumeration declared in a local scope)
14377          shall not be used to declare an entity with linkage.
14378          This implies that names with no linkage cannot be used as
14379          template arguments
14380
14381          DR 757 relaxes this restriction for C++0x.  */
14382       tree nt = (cxx_dialect > cxx98 ? NULL_TREE
14383                  : no_linkage_check (t, /*relaxed_p=*/false));
14384
14385       if (nt)
14386         {
14387           /* DR 488 makes use of a type with no linkage cause
14388              type deduction to fail.  */
14389           if (complain & tf_error)
14390             {
14391               if (TYPE_ANONYMOUS_P (nt))
14392                 error ("%qT is/uses anonymous type", t);
14393               else
14394                 error ("template argument for %qD uses local type %qT",
14395                        tmpl, t);
14396             }
14397           return true;
14398         }
14399       /* In order to avoid all sorts of complications, we do not
14400          allow variably-modified types as template arguments.  */
14401       else if (variably_modified_type_p (t, NULL_TREE))
14402         {
14403           if (complain & tf_error)
14404             error ("%qT is a variably modified type", t);
14405           return true;
14406         }
14407     }
14408   /* A non-type argument of integral or enumerated type must be a
14409      constant.  */
14410   else if (TREE_TYPE (t)
14411            && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
14412            && !TREE_CONSTANT (t))
14413     {
14414       if (complain & tf_error)
14415         error ("integral expression %qE is not constant", t);
14416       return true;
14417     }
14418   return false;
14419 }
14420
14421 static bool
14422 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
14423 {
14424   int ix, len = DECL_NTPARMS (tmpl);
14425   bool result = false;
14426
14427   for (ix = 0; ix != len; ix++)
14428     {
14429       if (check_instantiated_arg (tmpl, TREE_VEC_ELT (args, ix), complain))
14430         result = true;
14431     }
14432   if (result && (complain & tf_error))
14433     error ("  trying to instantiate %qD", tmpl);
14434   return result;
14435 }
14436
14437 /* In C++0x, it's possible to have a function template whose type depends
14438    on itself recursively.  This is most obvious with decltype, but can also
14439    occur with enumeration scope (c++/48969).  So we need to catch infinite
14440    recursion and reject the substitution at deduction time; this function
14441    will return error_mark_node for any repeated substitution.
14442
14443    This also catches excessive recursion such as when f<N> depends on
14444    f<N-1> across all integers, and returns error_mark_node for all the
14445    substitutions back up to the initial one.
14446
14447    This is, of course, not reentrant.  */
14448
14449 static tree
14450 deduction_tsubst_fntype (tree fn, tree targs, tsubst_flags_t complain)
14451 {
14452   static bool excessive_deduction_depth;
14453   static int deduction_depth;
14454   struct pending_template *old_last_pend = last_pending_template;
14455   struct tinst_level *old_error_tinst = last_error_tinst_level;
14456
14457   tree fntype = TREE_TYPE (fn);
14458   tree tinst;
14459   tree r;
14460
14461   if (excessive_deduction_depth)
14462     return error_mark_node;
14463
14464   tinst = build_tree_list (fn, targs);
14465   if (!push_tinst_level (tinst))
14466     {
14467       excessive_deduction_depth = true;
14468       ggc_free (tinst);
14469       return error_mark_node;
14470     }
14471
14472   input_location = DECL_SOURCE_LOCATION (fn);
14473   ++deduction_depth;
14474   push_deduction_access_scope (fn);
14475   r = tsubst (fntype, targs, complain, NULL_TREE);
14476   pop_deduction_access_scope (fn);
14477   --deduction_depth;
14478
14479   if (excessive_deduction_depth)
14480     {
14481       r = error_mark_node;
14482       if (deduction_depth == 0)
14483         /* Reset once we're all the way out.  */
14484         excessive_deduction_depth = false;
14485     }
14486
14487   pop_tinst_level ();
14488   /* We can't free this if a pending_template entry or last_error_tinst_level
14489      is pointing at it.  */
14490   if (last_pending_template == old_last_pend
14491       && last_error_tinst_level == old_error_tinst)
14492     ggc_free (tinst);
14493   return r;
14494 }
14495
14496 /* Instantiate the indicated variable or function template TMPL with
14497    the template arguments in TARG_PTR.  */
14498
14499 static tree
14500 instantiate_template_1 (tree tmpl, tree orig_args, tsubst_flags_t complain)
14501 {
14502   tree targ_ptr = orig_args;
14503   tree fndecl;
14504   tree gen_tmpl;
14505   tree spec;
14506   HOST_WIDE_INT saved_processing_template_decl;
14507
14508   if (tmpl == error_mark_node)
14509     return error_mark_node;
14510
14511   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
14512
14513   /* If this function is a clone, handle it specially.  */
14514   if (DECL_CLONED_FUNCTION_P (tmpl))
14515     {
14516       tree spec;
14517       tree clone;
14518
14519       /* Use DECL_ABSTRACT_ORIGIN because only FUNCTION_DECLs have
14520          DECL_CLONED_FUNCTION.  */
14521       spec = instantiate_template (DECL_ABSTRACT_ORIGIN (tmpl),
14522                                    targ_ptr, complain);
14523       if (spec == error_mark_node)
14524         return error_mark_node;
14525
14526       /* Look for the clone.  */
14527       FOR_EACH_CLONE (clone, spec)
14528         if (DECL_NAME (clone) == DECL_NAME (tmpl))
14529           return clone;
14530       /* We should always have found the clone by now.  */
14531       gcc_unreachable ();
14532       return NULL_TREE;
14533     }
14534
14535   /* Check to see if we already have this specialization.  */
14536   gen_tmpl = most_general_template (tmpl);
14537   if (tmpl != gen_tmpl)
14538     /* The TMPL is a partial instantiation.  To get a full set of
14539        arguments we must add the arguments used to perform the
14540        partial instantiation.  */
14541     targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
14542                                             targ_ptr);
14543
14544   /* It would be nice to avoid hashing here and then again in tsubst_decl,
14545      but it doesn't seem to be on the hot path.  */
14546   spec = retrieve_specialization (gen_tmpl, targ_ptr, 0);
14547
14548   gcc_assert (tmpl == gen_tmpl
14549               || ((fndecl = retrieve_specialization (tmpl, orig_args, 0))
14550                   == spec)
14551               || fndecl == NULL_TREE);
14552
14553   if (spec != NULL_TREE)
14554     return spec;
14555
14556   if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
14557                                complain))
14558     return error_mark_node;
14559
14560   /* We are building a FUNCTION_DECL, during which the access of its
14561      parameters and return types have to be checked.  However this
14562      FUNCTION_DECL which is the desired context for access checking
14563      is not built yet.  We solve this chicken-and-egg problem by
14564      deferring all checks until we have the FUNCTION_DECL.  */
14565   push_deferring_access_checks (dk_deferred);
14566
14567   /* Although PROCESSING_TEMPLATE_DECL may be true at this point
14568      (because, for example, we have encountered a non-dependent
14569      function call in the body of a template function and must now
14570      determine which of several overloaded functions will be called),
14571      within the instantiation itself we are not processing a
14572      template.  */  
14573   saved_processing_template_decl = processing_template_decl;
14574   processing_template_decl = 0;
14575   /* Substitute template parameters to obtain the specialization.  */
14576   fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
14577                    targ_ptr, complain, gen_tmpl);
14578   processing_template_decl = saved_processing_template_decl;
14579   if (fndecl == error_mark_node)
14580     return error_mark_node;
14581
14582   /* Now we know the specialization, compute access previously
14583      deferred.  */
14584   push_access_scope (fndecl);
14585
14586   /* Some typedefs referenced from within the template code need to be access
14587      checked at template instantiation time, i.e now. These types were
14588      added to the template at parsing time. Let's get those and perfom
14589      the acces checks then.  */
14590   perform_typedefs_access_check (DECL_TEMPLATE_RESULT (tmpl), targ_ptr);
14591   perform_deferred_access_checks ();
14592   pop_access_scope (fndecl);
14593   pop_deferring_access_checks ();
14594
14595   /* The DECL_TI_TEMPLATE should always be the immediate parent
14596      template, not the most general template.  */
14597   DECL_TI_TEMPLATE (fndecl) = tmpl;
14598
14599   /* If we've just instantiated the main entry point for a function,
14600      instantiate all the alternate entry points as well.  We do this
14601      by cloning the instantiation of the main entry point, not by
14602      instantiating the template clones.  */
14603   if (DECL_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (DECL_CHAIN (gen_tmpl)))
14604     clone_function_decl (fndecl, /*update_method_vec_p=*/0);
14605
14606   return fndecl;
14607 }
14608
14609 /* Wrapper for instantiate_template_1.  */
14610
14611 tree
14612 instantiate_template (tree tmpl, tree orig_args, tsubst_flags_t complain)
14613 {
14614   tree ret;
14615   timevar_push (TV_TEMPLATE_INST);
14616   ret = instantiate_template_1 (tmpl, orig_args,  complain);
14617   timevar_pop (TV_TEMPLATE_INST);
14618   return ret;
14619 }
14620
14621 /* We're going to do deduction substitution on the type of TMPL, a function
14622    template.  In C++11 mode, push into that access scope.  In C++03 mode,
14623    disable access checking.  */
14624
14625 static void
14626 push_deduction_access_scope (tree tmpl)
14627 {
14628   if (cxx_dialect >= cxx0x)
14629     {
14630       int ptd = processing_template_decl;
14631       push_access_scope (DECL_TEMPLATE_RESULT (tmpl));
14632       /* Preserve processing_template_decl across push_to_top_level.  */
14633       if (ptd && !processing_template_decl)
14634         ++processing_template_decl;
14635     }
14636   else
14637     push_deferring_access_checks (dk_no_check);
14638 }
14639
14640 /* And pop back out.  */
14641
14642 static void
14643 pop_deduction_access_scope (tree tmpl)
14644 {
14645   if (cxx_dialect >= cxx0x)
14646     pop_access_scope (DECL_TEMPLATE_RESULT (tmpl));
14647   else
14648     pop_deferring_access_checks ();
14649 }
14650
14651 /* PARM is a template parameter pack for FN.  Returns true iff
14652    PARM is used in a deducible way in the argument list of FN.  */
14653
14654 static bool
14655 pack_deducible_p (tree parm, tree fn)
14656 {
14657   tree t = FUNCTION_FIRST_USER_PARMTYPE (fn);
14658   for (; t; t = TREE_CHAIN (t))
14659     {
14660       tree type = TREE_VALUE (t);
14661       tree packs;
14662       if (!PACK_EXPANSION_P (type))
14663         continue;
14664       for (packs = PACK_EXPANSION_PARAMETER_PACKS (type);
14665            packs; packs = TREE_CHAIN (packs))
14666         if (TREE_VALUE (packs) == parm)
14667           {
14668             /* The template parameter pack is used in a function parameter
14669                pack.  If this is the end of the parameter list, the
14670                template parameter pack is deducible.  */
14671             if (TREE_CHAIN (t) == void_list_node)
14672               return true;
14673             else
14674               /* Otherwise, not.  Well, it could be deduced from
14675                  a non-pack parameter, but doing so would end up with
14676                  a deduction mismatch, so don't bother.  */
14677               return false;
14678           }
14679     }
14680   /* The template parameter pack isn't used in any function parameter
14681      packs, but it might be used deeper, e.g. tuple<Args...>.  */
14682   return true;
14683 }
14684
14685 /* The FN is a TEMPLATE_DECL for a function.  ARGS is an array with
14686    NARGS elements of the arguments that are being used when calling
14687    it.  TARGS is a vector into which the deduced template arguments
14688    are placed.
14689
14690    Return zero for success, 2 for an incomplete match that doesn't resolve
14691    all the types, and 1 for complete failure.  An error message will be
14692    printed only for an incomplete match.
14693
14694    If FN is a conversion operator, or we are trying to produce a specific
14695    specialization, RETURN_TYPE is the return type desired.
14696
14697    The EXPLICIT_TARGS are explicit template arguments provided via a
14698    template-id.
14699
14700    The parameter STRICT is one of:
14701
14702    DEDUCE_CALL:
14703      We are deducing arguments for a function call, as in
14704      [temp.deduct.call].
14705
14706    DEDUCE_CONV:
14707      We are deducing arguments for a conversion function, as in
14708      [temp.deduct.conv].
14709
14710    DEDUCE_EXACT:
14711      We are deducing arguments when doing an explicit instantiation
14712      as in [temp.explicit], when determining an explicit specialization
14713      as in [temp.expl.spec], or when taking the address of a function
14714      template, as in [temp.deduct.funcaddr].  */
14715
14716 int
14717 fn_type_unification (tree fn,
14718                      tree explicit_targs,
14719                      tree targs,
14720                      const tree *args,
14721                      unsigned int nargs,
14722                      tree return_type,
14723                      unification_kind_t strict,
14724                      int flags,
14725                      bool explain_p)
14726 {
14727   tree parms;
14728   tree fntype;
14729   int result;
14730
14731   gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
14732
14733   fntype = TREE_TYPE (fn);
14734   if (explicit_targs)
14735     {
14736       /* [temp.deduct]
14737
14738          The specified template arguments must match the template
14739          parameters in kind (i.e., type, nontype, template), and there
14740          must not be more arguments than there are parameters;
14741          otherwise type deduction fails.
14742
14743          Nontype arguments must match the types of the corresponding
14744          nontype template parameters, or must be convertible to the
14745          types of the corresponding nontype parameters as specified in
14746          _temp.arg.nontype_, otherwise type deduction fails.
14747
14748          All references in the function type of the function template
14749          to the corresponding template parameters are replaced by the
14750          specified template argument values.  If a substitution in a
14751          template parameter or in the function type of the function
14752          template results in an invalid type, type deduction fails.  */
14753       tree tparms = DECL_INNERMOST_TEMPLATE_PARMS (fn);
14754       int i, len = TREE_VEC_LENGTH (tparms);
14755       tree converted_args;
14756       bool incomplete = false;
14757
14758       if (explicit_targs == error_mark_node)
14759         return unify_invalid (explain_p);
14760
14761       converted_args
14762         = (coerce_template_parms (tparms, explicit_targs, NULL_TREE,
14763                                   (explain_p
14764                                    ? tf_warning_or_error
14765                                    : tf_none),
14766                                    /*require_all_args=*/false,
14767                                    /*use_default_args=*/false));
14768       if (converted_args == error_mark_node)
14769         return 1;
14770
14771       /* Substitute the explicit args into the function type.  This is
14772          necessary so that, for instance, explicitly declared function
14773          arguments can match null pointed constants.  If we were given
14774          an incomplete set of explicit args, we must not do semantic
14775          processing during substitution as we could create partial
14776          instantiations.  */
14777       for (i = 0; i < len; i++)
14778         {
14779           tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
14780           bool parameter_pack = false;
14781           tree targ = TREE_VEC_ELT (converted_args, i);
14782
14783           /* Dig out the actual parm.  */
14784           if (TREE_CODE (parm) == TYPE_DECL
14785               || TREE_CODE (parm) == TEMPLATE_DECL)
14786             {
14787               parm = TREE_TYPE (parm);
14788               parameter_pack = TEMPLATE_TYPE_PARAMETER_PACK (parm);
14789             }
14790           else if (TREE_CODE (parm) == PARM_DECL)
14791             {
14792               parm = DECL_INITIAL (parm);
14793               parameter_pack = TEMPLATE_PARM_PARAMETER_PACK (parm);
14794             }
14795
14796           if (!parameter_pack && targ == NULL_TREE)
14797             /* No explicit argument for this template parameter.  */
14798             incomplete = true;
14799
14800           if (parameter_pack && pack_deducible_p (parm, fn))
14801             {
14802               /* Mark the argument pack as "incomplete". We could
14803                  still deduce more arguments during unification.
14804                  We remove this mark in type_unification_real.  */
14805               if (targ)
14806                 {
14807                   ARGUMENT_PACK_INCOMPLETE_P(targ) = 1;
14808                   ARGUMENT_PACK_EXPLICIT_ARGS (targ) 
14809                     = ARGUMENT_PACK_ARGS (targ);
14810                 }
14811
14812               /* We have some incomplete argument packs.  */
14813               incomplete = true;
14814             }
14815         }
14816
14817       processing_template_decl += incomplete;
14818       fntype = deduction_tsubst_fntype (fn, converted_args,
14819                                         (explain_p
14820                                          ? tf_warning_or_error
14821                                          : tf_none));
14822       processing_template_decl -= incomplete;
14823
14824       if (fntype == error_mark_node)
14825         return 1;
14826
14827       /* Place the explicitly specified arguments in TARGS.  */
14828       for (i = NUM_TMPL_ARGS (converted_args); i--;)
14829         TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
14830     }
14831
14832   /* Never do unification on the 'this' parameter.  */
14833   parms = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (fntype));
14834
14835   if (return_type)
14836     {
14837       tree *new_args;
14838
14839       parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
14840       new_args = XALLOCAVEC (tree, nargs + 1);
14841       new_args[0] = return_type;
14842       memcpy (new_args + 1, args, nargs * sizeof (tree));
14843       args = new_args;
14844       ++nargs;
14845     }
14846
14847   /* We allow incomplete unification without an error message here
14848      because the standard doesn't seem to explicitly prohibit it.  Our
14849      callers must be ready to deal with unification failures in any
14850      event.  */
14851   result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
14852                                   targs, parms, args, nargs, /*subr=*/0,
14853                                   strict, flags, explain_p);
14854
14855   /* Now that we have bindings for all of the template arguments,
14856      ensure that the arguments deduced for the template template
14857      parameters have compatible template parameter lists.  We cannot
14858      check this property before we have deduced all template
14859      arguments, because the template parameter types of a template
14860      template parameter might depend on prior template parameters
14861      deduced after the template template parameter.  The following
14862      ill-formed example illustrates this issue:
14863
14864        template<typename T, template<T> class C> void f(C<5>, T);
14865
14866        template<int N> struct X {};
14867
14868        void g() {
14869          f(X<5>(), 5l); // error: template argument deduction fails
14870        }
14871
14872      The template parameter list of 'C' depends on the template type
14873      parameter 'T', but 'C' is deduced to 'X' before 'T' is deduced to
14874      'long'.  Thus, we can't check that 'C' cannot bind to 'X' at the
14875      time that we deduce 'C'.  */
14876   if (result == 0
14877       && !template_template_parm_bindings_ok_p 
14878            (DECL_INNERMOST_TEMPLATE_PARMS (fn), targs))
14879     return unify_inconsistent_template_template_parameters (explain_p);
14880
14881   if (result == 0)
14882     /* All is well so far.  Now, check:
14883
14884        [temp.deduct]
14885
14886        When all template arguments have been deduced, all uses of
14887        template parameters in nondeduced contexts are replaced with
14888        the corresponding deduced argument values.  If the
14889        substitution results in an invalid type, as described above,
14890        type deduction fails.  */
14891     {
14892       tree substed = deduction_tsubst_fntype (fn, targs,
14893                                               (explain_p
14894                                                ? tf_warning_or_error
14895                                                : tf_none));
14896       if (substed == error_mark_node)
14897         return 1;
14898
14899       /* If we're looking for an exact match, check that what we got
14900          is indeed an exact match.  It might not be if some template
14901          parameters are used in non-deduced contexts.  */
14902       if (strict == DEDUCE_EXACT)
14903         {
14904           unsigned int i;
14905
14906           tree sarg
14907             = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (substed));
14908           if (return_type)
14909             sarg = tree_cons (NULL_TREE, TREE_TYPE (substed), sarg);
14910           for (i = 0; i < nargs && sarg; ++i, sarg = TREE_CHAIN (sarg))
14911             if (!same_type_p (args[i], TREE_VALUE (sarg)))
14912               return unify_type_mismatch (explain_p, args[i],
14913                                           TREE_VALUE (sarg));
14914         }
14915     }
14916
14917   return result;
14918 }
14919
14920 /* Adjust types before performing type deduction, as described in
14921    [temp.deduct.call] and [temp.deduct.conv].  The rules in these two
14922    sections are symmetric.  PARM is the type of a function parameter
14923    or the return type of the conversion function.  ARG is the type of
14924    the argument passed to the call, or the type of the value
14925    initialized with the result of the conversion function.
14926    ARG_EXPR is the original argument expression, which may be null.  */
14927
14928 static int
14929 maybe_adjust_types_for_deduction (unification_kind_t strict,
14930                                   tree* parm,
14931                                   tree* arg,
14932                                   tree arg_expr)
14933 {
14934   int result = 0;
14935
14936   switch (strict)
14937     {
14938     case DEDUCE_CALL:
14939       break;
14940
14941     case DEDUCE_CONV:
14942       {
14943         /* Swap PARM and ARG throughout the remainder of this
14944            function; the handling is precisely symmetric since PARM
14945            will initialize ARG rather than vice versa.  */
14946         tree* temp = parm;
14947         parm = arg;
14948         arg = temp;
14949         break;
14950       }
14951
14952     case DEDUCE_EXACT:
14953       /* Core issue #873: Do the DR606 thing (see below) for these cases,
14954          too, but here handle it by stripping the reference from PARM
14955          rather than by adding it to ARG.  */
14956       if (TREE_CODE (*parm) == REFERENCE_TYPE
14957           && TYPE_REF_IS_RVALUE (*parm)
14958           && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
14959           && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
14960           && TREE_CODE (*arg) == REFERENCE_TYPE
14961           && !TYPE_REF_IS_RVALUE (*arg))
14962         *parm = TREE_TYPE (*parm);
14963       /* Nothing else to do in this case.  */
14964       return 0;
14965
14966     default:
14967       gcc_unreachable ();
14968     }
14969
14970   if (TREE_CODE (*parm) != REFERENCE_TYPE)
14971     {
14972       /* [temp.deduct.call]
14973
14974          If P is not a reference type:
14975
14976          --If A is an array type, the pointer type produced by the
14977          array-to-pointer standard conversion (_conv.array_) is
14978          used in place of A for type deduction; otherwise,
14979
14980          --If A is a function type, the pointer type produced by
14981          the function-to-pointer standard conversion
14982          (_conv.func_) is used in place of A for type deduction;
14983          otherwise,
14984
14985          --If A is a cv-qualified type, the top level
14986          cv-qualifiers of A's type are ignored for type
14987          deduction.  */
14988       if (TREE_CODE (*arg) == ARRAY_TYPE)
14989         *arg = build_pointer_type (TREE_TYPE (*arg));
14990       else if (TREE_CODE (*arg) == FUNCTION_TYPE)
14991         *arg = build_pointer_type (*arg);
14992       else
14993         *arg = TYPE_MAIN_VARIANT (*arg);
14994     }
14995
14996   /* From C++0x [14.8.2.1/3 temp.deduct.call] (after DR606), "If P is
14997      of the form T&&, where T is a template parameter, and the argument
14998      is an lvalue, T is deduced as A& */
14999   if (TREE_CODE (*parm) == REFERENCE_TYPE
15000       && TYPE_REF_IS_RVALUE (*parm)
15001       && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
15002       && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
15003       && (arg_expr ? real_lvalue_p (arg_expr)
15004           /* try_one_overload doesn't provide an arg_expr, but
15005              functions are always lvalues.  */
15006           : TREE_CODE (*arg) == FUNCTION_TYPE))
15007     *arg = build_reference_type (*arg);
15008
15009   /* [temp.deduct.call]
15010
15011      If P is a cv-qualified type, the top level cv-qualifiers
15012      of P's type are ignored for type deduction.  If P is a
15013      reference type, the type referred to by P is used for
15014      type deduction.  */
15015   *parm = TYPE_MAIN_VARIANT (*parm);
15016   if (TREE_CODE (*parm) == REFERENCE_TYPE)
15017     {
15018       *parm = TREE_TYPE (*parm);
15019       result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
15020     }
15021
15022   /* DR 322. For conversion deduction, remove a reference type on parm
15023      too (which has been swapped into ARG).  */
15024   if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
15025     *arg = TREE_TYPE (*arg);
15026
15027   return result;
15028 }
15029
15030 /* Subroutine of unify_one_argument.  PARM is a function parameter of a
15031    template which does contain any deducible template parameters; check if
15032    ARG is a suitable match for it.  STRICT, FLAGS and EXPLAIN_P are as in
15033    unify_one_argument.  */
15034
15035 static int
15036 check_non_deducible_conversion (tree parm, tree arg, int strict,
15037                                 int flags, bool explain_p)
15038 {
15039   tree type;
15040
15041   if (!TYPE_P (arg))
15042     type = TREE_TYPE (arg);
15043   else
15044     type = arg;
15045
15046   if (same_type_p (parm, type))
15047     return unify_success (explain_p);
15048
15049   if (strict == DEDUCE_CONV)
15050     {
15051       if (can_convert_arg (type, parm, NULL_TREE, flags))
15052         return unify_success (explain_p);
15053     }
15054   else if (strict != DEDUCE_EXACT)
15055     {
15056       if (can_convert_arg (parm, type,
15057                            TYPE_P (arg) ? NULL_TREE : arg,
15058                            flags))
15059         return unify_success (explain_p);
15060     }
15061
15062   if (strict == DEDUCE_EXACT)
15063     return unify_type_mismatch (explain_p, parm, arg);
15064   else
15065     return unify_arg_conversion (explain_p, parm, type, arg);
15066 }
15067
15068 /* Subroutine of type_unification_real and unify_pack_expansion to
15069    handle unification of a single P/A pair.  Parameters are as
15070    for those functions.  */
15071
15072 static int
15073 unify_one_argument (tree tparms, tree targs, tree parm, tree arg,
15074                     int subr, unification_kind_t strict, int flags,
15075                     bool explain_p)
15076 {
15077   tree arg_expr = NULL_TREE;
15078   int arg_strict;
15079
15080   if (arg == error_mark_node || parm == error_mark_node)
15081     return unify_invalid (explain_p);
15082   if (arg == unknown_type_node)
15083     /* We can't deduce anything from this, but we might get all the
15084        template args from other function args.  */
15085     return unify_success (explain_p);
15086
15087   /* FIXME uses_deducible_template_parms */
15088   if (TYPE_P (parm) && !uses_template_parms (parm))
15089     return check_non_deducible_conversion (parm, arg, strict, flags,
15090                                            explain_p);
15091
15092   switch (strict)
15093     {
15094     case DEDUCE_CALL:
15095       arg_strict = (UNIFY_ALLOW_OUTER_LEVEL
15096                     | UNIFY_ALLOW_MORE_CV_QUAL
15097                     | UNIFY_ALLOW_DERIVED);
15098       break;
15099
15100     case DEDUCE_CONV:
15101       arg_strict = UNIFY_ALLOW_LESS_CV_QUAL;
15102       break;
15103
15104     case DEDUCE_EXACT:
15105       arg_strict = UNIFY_ALLOW_NONE;
15106       break;
15107
15108     default:
15109       gcc_unreachable ();
15110     }
15111
15112   /* We only do these transformations if this is the top-level
15113      parameter_type_list in a call or declaration matching; in other
15114      situations (nested function declarators, template argument lists) we
15115      won't be comparing a type to an expression, and we don't do any type
15116      adjustments.  */
15117   if (!subr)
15118     {
15119       if (!TYPE_P (arg))
15120         {
15121           gcc_assert (TREE_TYPE (arg) != NULL_TREE);
15122           if (type_unknown_p (arg))
15123             {
15124               /* [temp.deduct.type] A template-argument can be
15125                  deduced from a pointer to function or pointer
15126                  to member function argument if the set of
15127                  overloaded functions does not contain function
15128                  templates and at most one of a set of
15129                  overloaded functions provides a unique
15130                  match.  */
15131
15132               if (resolve_overloaded_unification
15133                   (tparms, targs, parm, arg, strict,
15134                    arg_strict, explain_p))
15135                 return unify_success (explain_p);
15136               return unify_overload_resolution_failure (explain_p, arg);
15137             }
15138
15139           arg_expr = arg;
15140           arg = unlowered_expr_type (arg);
15141           if (arg == error_mark_node)
15142             return unify_invalid (explain_p);
15143         }
15144
15145       arg_strict |=
15146         maybe_adjust_types_for_deduction (strict, &parm, &arg, arg_expr);
15147     }
15148   else
15149     gcc_assert ((TYPE_P (parm) || TREE_CODE (parm) == TEMPLATE_DECL)
15150                 == (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL));
15151
15152   /* For deduction from an init-list we need the actual list.  */
15153   if (arg_expr && BRACE_ENCLOSED_INITIALIZER_P (arg_expr))
15154     arg = arg_expr;
15155   return unify (tparms, targs, parm, arg, arg_strict, explain_p);
15156 }
15157
15158 /* Most parms like fn_type_unification.
15159
15160    If SUBR is 1, we're being called recursively (to unify the
15161    arguments of a function or method parameter of a function
15162    template). */
15163
15164 static int
15165 type_unification_real (tree tparms,
15166                        tree targs,
15167                        tree xparms,
15168                        const tree *xargs,
15169                        unsigned int xnargs,
15170                        int subr,
15171                        unification_kind_t strict,
15172                        int flags,
15173                        bool explain_p)
15174 {
15175   tree parm, arg;
15176   int i;
15177   int ntparms = TREE_VEC_LENGTH (tparms);
15178   int saw_undeduced = 0;
15179   tree parms;
15180   const tree *args;
15181   unsigned int nargs;
15182   unsigned int ia;
15183
15184   gcc_assert (TREE_CODE (tparms) == TREE_VEC);
15185   gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
15186   gcc_assert (ntparms > 0);
15187
15188   /* Reset the number of non-defaulted template arguments contained
15189      in TARGS.  */
15190   NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs) = NULL_TREE;
15191
15192  again:
15193   parms = xparms;
15194   args = xargs;
15195   nargs = xnargs;
15196
15197   ia = 0;
15198   while (parms && parms != void_list_node
15199          && ia < nargs)
15200     {
15201       parm = TREE_VALUE (parms);
15202
15203       if (TREE_CODE (parm) == TYPE_PACK_EXPANSION
15204           && (!TREE_CHAIN (parms) || TREE_CHAIN (parms) == void_list_node))
15205         /* For a function parameter pack that occurs at the end of the
15206            parameter-declaration-list, the type A of each remaining
15207            argument of the call is compared with the type P of the
15208            declarator-id of the function parameter pack.  */
15209         break;
15210
15211       parms = TREE_CHAIN (parms);
15212
15213       if (TREE_CODE (parm) == TYPE_PACK_EXPANSION)
15214         /* For a function parameter pack that does not occur at the
15215            end of the parameter-declaration-list, the type of the
15216            parameter pack is a non-deduced context.  */
15217         continue;
15218
15219       arg = args[ia];
15220       ++ia;
15221
15222       if (unify_one_argument (tparms, targs, parm, arg, subr, strict,
15223                               flags, explain_p))
15224         return 1;
15225     }
15226
15227   if (parms 
15228       && parms != void_list_node
15229       && TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
15230     {
15231       /* Unify the remaining arguments with the pack expansion type.  */
15232       tree argvec;
15233       tree parmvec = make_tree_vec (1);
15234
15235       /* Allocate a TREE_VEC and copy in all of the arguments */ 
15236       argvec = make_tree_vec (nargs - ia);
15237       for (i = 0; ia < nargs; ++ia, ++i)
15238         TREE_VEC_ELT (argvec, i) = args[ia];
15239
15240       /* Copy the parameter into parmvec.  */
15241       TREE_VEC_ELT (parmvec, 0) = TREE_VALUE (parms);
15242       if (unify_pack_expansion (tparms, targs, parmvec, argvec, strict,
15243                                 /*subr=*/subr, explain_p))
15244         return 1;
15245
15246       /* Advance to the end of the list of parameters.  */
15247       parms = TREE_CHAIN (parms);
15248     }
15249
15250   /* Fail if we've reached the end of the parm list, and more args
15251      are present, and the parm list isn't variadic.  */
15252   if (ia < nargs && parms == void_list_node)
15253     return unify_too_many_arguments (explain_p, nargs, ia);
15254   /* Fail if parms are left and they don't have default values.  */
15255   if (parms && parms != void_list_node
15256       && TREE_PURPOSE (parms) == NULL_TREE)
15257     {
15258       unsigned int count = nargs;
15259       tree p = parms;
15260       while (p && p != void_list_node)
15261         {
15262           count++;
15263           p = TREE_CHAIN (p);
15264         }
15265       return unify_too_few_arguments (explain_p, ia, count);
15266     }
15267
15268   if (!subr)
15269     {
15270       tsubst_flags_t complain = (explain_p
15271                                  ? tf_warning_or_error
15272                                  : tf_none);
15273
15274       /* Check to see if we need another pass before we start clearing
15275          ARGUMENT_PACK_INCOMPLETE_P.  */
15276       for (i = 0; i < ntparms; i++)
15277         {
15278           tree targ = TREE_VEC_ELT (targs, i);
15279           tree tparm = TREE_VEC_ELT (tparms, i);
15280
15281           if (targ || tparm == error_mark_node)
15282             continue;
15283           tparm = TREE_VALUE (tparm);
15284
15285           /* If this is an undeduced nontype parameter that depends on
15286              a type parameter, try another pass; its type may have been
15287              deduced from a later argument than the one from which
15288              this parameter can be deduced.  */
15289           if (TREE_CODE (tparm) == PARM_DECL
15290               && uses_template_parms (TREE_TYPE (tparm))
15291               && !saw_undeduced++)
15292             goto again;
15293         }
15294
15295       for (i = 0; i < ntparms; i++)
15296         {
15297           tree targ = TREE_VEC_ELT (targs, i);
15298           tree tparm = TREE_VEC_ELT (tparms, i);
15299
15300           /* Clear the "incomplete" flags on all argument packs now so that
15301              substituting them into later default arguments works.  */
15302           if (targ && ARGUMENT_PACK_P (targ))
15303             {
15304               ARGUMENT_PACK_INCOMPLETE_P (targ) = 0;
15305               ARGUMENT_PACK_EXPLICIT_ARGS (targ) = NULL_TREE;
15306             }
15307
15308           if (targ || tparm == error_mark_node)
15309             continue;
15310           tparm = TREE_VALUE (tparm);
15311
15312           /* Core issue #226 (C++0x) [temp.deduct]:
15313
15314              If a template argument has not been deduced, its
15315              default template argument, if any, is used. 
15316
15317              When we are in C++98 mode, TREE_PURPOSE will either
15318              be NULL_TREE or ERROR_MARK_NODE, so we do not need
15319              to explicitly check cxx_dialect here.  */
15320           if (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)))
15321             {
15322               tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
15323               tree arg = TREE_PURPOSE (TREE_VEC_ELT (tparms, i));
15324               location_t save_loc = input_location;
15325               if (DECL_P (parm))
15326                 input_location = DECL_SOURCE_LOCATION (parm);
15327               arg = tsubst_template_arg (arg, targs, complain, NULL_TREE);
15328               arg = convert_template_argument (parm, arg, targs, complain,
15329                                                i, NULL_TREE);
15330               input_location = save_loc;
15331               if (arg == error_mark_node)
15332                 return 1;
15333               else
15334                 {
15335                   TREE_VEC_ELT (targs, i) = arg;
15336                   /* The position of the first default template argument,
15337                      is also the number of non-defaulted arguments in TARGS.
15338                      Record that.  */
15339                   if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
15340                     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, i);
15341                   continue;
15342                 }
15343             }
15344
15345           /* If the type parameter is a parameter pack, then it will
15346              be deduced to an empty parameter pack.  */
15347           if (template_parameter_pack_p (tparm))
15348             {
15349               tree arg;
15350
15351               if (TREE_CODE (tparm) == TEMPLATE_PARM_INDEX)
15352                 {
15353                   arg = make_node (NONTYPE_ARGUMENT_PACK);
15354                   TREE_TYPE (arg)  = TREE_TYPE (TEMPLATE_PARM_DECL (tparm));
15355                   TREE_CONSTANT (arg) = 1;
15356                 }
15357               else
15358                 arg = cxx_make_type (TYPE_ARGUMENT_PACK);
15359
15360               SET_ARGUMENT_PACK_ARGS (arg, make_tree_vec (0));
15361
15362               TREE_VEC_ELT (targs, i) = arg;
15363               continue;
15364             }
15365
15366           return unify_parameter_deduction_failure (explain_p, tparm);
15367         }
15368     }
15369 #ifdef ENABLE_CHECKING
15370   if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
15371     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, TREE_VEC_LENGTH (targs));
15372 #endif
15373
15374   return unify_success (explain_p);
15375 }
15376
15377 /* Subroutine of type_unification_real.  Args are like the variables
15378    at the call site.  ARG is an overloaded function (or template-id);
15379    we try deducing template args from each of the overloads, and if
15380    only one succeeds, we go with that.  Modifies TARGS and returns
15381    true on success.  */
15382
15383 static bool
15384 resolve_overloaded_unification (tree tparms,
15385                                 tree targs,
15386                                 tree parm,
15387                                 tree arg,
15388                                 unification_kind_t strict,
15389                                 int sub_strict,
15390                                 bool explain_p)
15391 {
15392   tree tempargs = copy_node (targs);
15393   int good = 0;
15394   tree goodfn = NULL_TREE;
15395   bool addr_p;
15396
15397   if (TREE_CODE (arg) == ADDR_EXPR)
15398     {
15399       arg = TREE_OPERAND (arg, 0);
15400       addr_p = true;
15401     }
15402   else
15403     addr_p = false;
15404
15405   if (TREE_CODE (arg) == COMPONENT_REF)
15406     /* Handle `&x' where `x' is some static or non-static member
15407        function name.  */
15408     arg = TREE_OPERAND (arg, 1);
15409
15410   if (TREE_CODE (arg) == OFFSET_REF)
15411     arg = TREE_OPERAND (arg, 1);
15412
15413   /* Strip baselink information.  */
15414   if (BASELINK_P (arg))
15415     arg = BASELINK_FUNCTIONS (arg);
15416
15417   if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
15418     {
15419       /* If we got some explicit template args, we need to plug them into
15420          the affected templates before we try to unify, in case the
15421          explicit args will completely resolve the templates in question.  */
15422
15423       int ok = 0;
15424       tree expl_subargs = TREE_OPERAND (arg, 1);
15425       arg = TREE_OPERAND (arg, 0);
15426
15427       for (; arg; arg = OVL_NEXT (arg))
15428         {
15429           tree fn = OVL_CURRENT (arg);
15430           tree subargs, elem;
15431
15432           if (TREE_CODE (fn) != TEMPLATE_DECL)
15433             continue;
15434
15435           ++processing_template_decl;
15436           subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
15437                                   expl_subargs, /*check_ret=*/false);
15438           if (subargs && !any_dependent_template_arguments_p (subargs))
15439             {
15440               elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
15441               if (try_one_overload (tparms, targs, tempargs, parm,
15442                                     elem, strict, sub_strict, addr_p, explain_p)
15443                   && (!goodfn || !decls_match (goodfn, elem)))
15444                 {
15445                   goodfn = elem;
15446                   ++good;
15447                 }
15448             }
15449           else if (subargs)
15450             ++ok;
15451           --processing_template_decl;
15452         }
15453       /* If no templates (or more than one) are fully resolved by the
15454          explicit arguments, this template-id is a non-deduced context; it
15455          could still be OK if we deduce all template arguments for the
15456          enclosing call through other arguments.  */
15457       if (good != 1)
15458         good = ok;
15459     }
15460   else if (TREE_CODE (arg) != OVERLOAD
15461            && TREE_CODE (arg) != FUNCTION_DECL)
15462     /* If ARG is, for example, "(0, &f)" then its type will be unknown
15463        -- but the deduction does not succeed because the expression is
15464        not just the function on its own.  */
15465     return false;
15466   else
15467     for (; arg; arg = OVL_NEXT (arg))
15468       if (try_one_overload (tparms, targs, tempargs, parm,
15469                             TREE_TYPE (OVL_CURRENT (arg)),
15470                             strict, sub_strict, addr_p, explain_p)
15471           && (!goodfn || !decls_match (goodfn, OVL_CURRENT (arg))))
15472         {
15473           goodfn = OVL_CURRENT (arg);
15474           ++good;
15475         }
15476
15477   /* [temp.deduct.type] A template-argument can be deduced from a pointer
15478      to function or pointer to member function argument if the set of
15479      overloaded functions does not contain function templates and at most
15480      one of a set of overloaded functions provides a unique match.
15481
15482      So if we found multiple possibilities, we return success but don't
15483      deduce anything.  */
15484
15485   if (good == 1)
15486     {
15487       int i = TREE_VEC_LENGTH (targs);
15488       for (; i--; )
15489         if (TREE_VEC_ELT (tempargs, i))
15490           TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
15491     }
15492   if (good)
15493     return true;
15494
15495   return false;
15496 }
15497
15498 /* Core DR 115: In contexts where deduction is done and fails, or in
15499    contexts where deduction is not done, if a template argument list is
15500    specified and it, along with any default template arguments, identifies
15501    a single function template specialization, then the template-id is an
15502    lvalue for the function template specialization.  */
15503
15504 tree
15505 resolve_nondeduced_context (tree orig_expr)
15506 {
15507   tree expr, offset, baselink;
15508   bool addr;
15509
15510   if (!type_unknown_p (orig_expr))
15511     return orig_expr;
15512
15513   expr = orig_expr;
15514   addr = false;
15515   offset = NULL_TREE;
15516   baselink = NULL_TREE;
15517
15518   if (TREE_CODE (expr) == ADDR_EXPR)
15519     {
15520       expr = TREE_OPERAND (expr, 0);
15521       addr = true;
15522     }
15523   if (TREE_CODE (expr) == OFFSET_REF)
15524     {
15525       offset = expr;
15526       expr = TREE_OPERAND (expr, 1);
15527     }
15528   if (BASELINK_P (expr))
15529     {
15530       baselink = expr;
15531       expr = BASELINK_FUNCTIONS (expr);
15532     }
15533
15534   if (TREE_CODE (expr) == TEMPLATE_ID_EXPR)
15535     {
15536       int good = 0;
15537       tree goodfn = NULL_TREE;
15538
15539       /* If we got some explicit template args, we need to plug them into
15540          the affected templates before we try to unify, in case the
15541          explicit args will completely resolve the templates in question.  */
15542
15543       tree expl_subargs = TREE_OPERAND (expr, 1);
15544       tree arg = TREE_OPERAND (expr, 0);
15545       tree badfn = NULL_TREE;
15546       tree badargs = NULL_TREE;
15547
15548       for (; arg; arg = OVL_NEXT (arg))
15549         {
15550           tree fn = OVL_CURRENT (arg);
15551           tree subargs, elem;
15552
15553           if (TREE_CODE (fn) != TEMPLATE_DECL)
15554             continue;
15555
15556           ++processing_template_decl;
15557           subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
15558                                   expl_subargs, /*check_ret=*/false);
15559           if (subargs && !any_dependent_template_arguments_p (subargs))
15560             {
15561               elem = instantiate_template (fn, subargs, tf_none);
15562               if (elem == error_mark_node)
15563                 {
15564                   badfn = fn;
15565                   badargs = subargs;
15566                 }
15567               else if (elem && (!goodfn || !decls_match (goodfn, elem)))
15568                 {
15569                   goodfn = elem;
15570                   ++good;
15571                 }
15572             }
15573           --processing_template_decl;
15574         }
15575       if (good == 1)
15576         {
15577           mark_used (goodfn);
15578           expr = goodfn;
15579           if (baselink)
15580             expr = build_baselink (BASELINK_BINFO (baselink),
15581                                    BASELINK_ACCESS_BINFO (baselink),
15582                                    expr, BASELINK_OPTYPE (baselink));
15583           if (offset)
15584             {
15585               tree base
15586                 = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (offset, 0)));
15587               expr = build_offset_ref (base, expr, addr);
15588             }
15589           if (addr)
15590             expr = cp_build_addr_expr (expr, tf_warning_or_error);
15591           return expr;
15592         }
15593       else if (good == 0 && badargs)
15594         /* There were no good options and at least one bad one, so let the
15595            user know what the problem is.  */
15596         instantiate_template (badfn, badargs, tf_warning_or_error);
15597     }
15598   return orig_expr;
15599 }
15600
15601 /* Subroutine of resolve_overloaded_unification; does deduction for a single
15602    overload.  Fills TARGS with any deduced arguments, or error_mark_node if
15603    different overloads deduce different arguments for a given parm.
15604    ADDR_P is true if the expression for which deduction is being
15605    performed was of the form "& fn" rather than simply "fn".
15606
15607    Returns 1 on success.  */
15608
15609 static int
15610 try_one_overload (tree tparms,
15611                   tree orig_targs,
15612                   tree targs,
15613                   tree parm,
15614                   tree arg,
15615                   unification_kind_t strict,
15616                   int sub_strict,
15617                   bool addr_p,
15618                   bool explain_p)
15619 {
15620   int nargs;
15621   tree tempargs;
15622   int i;
15623
15624   /* [temp.deduct.type] A template-argument can be deduced from a pointer
15625      to function or pointer to member function argument if the set of
15626      overloaded functions does not contain function templates and at most
15627      one of a set of overloaded functions provides a unique match.
15628
15629      So if this is a template, just return success.  */
15630
15631   if (uses_template_parms (arg))
15632     return 1;
15633
15634   if (TREE_CODE (arg) == METHOD_TYPE)
15635     arg = build_ptrmemfunc_type (build_pointer_type (arg));
15636   else if (addr_p)
15637     arg = build_pointer_type (arg);
15638
15639   sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
15640
15641   /* We don't copy orig_targs for this because if we have already deduced
15642      some template args from previous args, unify would complain when we
15643      try to deduce a template parameter for the same argument, even though
15644      there isn't really a conflict.  */
15645   nargs = TREE_VEC_LENGTH (targs);
15646   tempargs = make_tree_vec (nargs);
15647
15648   if (unify (tparms, tempargs, parm, arg, sub_strict, explain_p))
15649     return 0;
15650
15651   /* First make sure we didn't deduce anything that conflicts with
15652      explicitly specified args.  */
15653   for (i = nargs; i--; )
15654     {
15655       tree elt = TREE_VEC_ELT (tempargs, i);
15656       tree oldelt = TREE_VEC_ELT (orig_targs, i);
15657
15658       if (!elt)
15659         /*NOP*/;
15660       else if (uses_template_parms (elt))
15661         /* Since we're unifying against ourselves, we will fill in
15662            template args used in the function parm list with our own
15663            template parms.  Discard them.  */
15664         TREE_VEC_ELT (tempargs, i) = NULL_TREE;
15665       else if (oldelt && !template_args_equal (oldelt, elt))
15666         return 0;
15667     }
15668
15669   for (i = nargs; i--; )
15670     {
15671       tree elt = TREE_VEC_ELT (tempargs, i);
15672
15673       if (elt)
15674         TREE_VEC_ELT (targs, i) = elt;
15675     }
15676
15677   return 1;
15678 }
15679
15680 /* PARM is a template class (perhaps with unbound template
15681    parameters).  ARG is a fully instantiated type.  If ARG can be
15682    bound to PARM, return ARG, otherwise return NULL_TREE.  TPARMS and
15683    TARGS are as for unify.  */
15684
15685 static tree
15686 try_class_unification (tree tparms, tree targs, tree parm, tree arg,
15687                        bool explain_p)
15688 {
15689   tree copy_of_targs;
15690
15691   if (!CLASSTYPE_TEMPLATE_INFO (arg)
15692       || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
15693           != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
15694     return NULL_TREE;
15695
15696   /* We need to make a new template argument vector for the call to
15697      unify.  If we used TARGS, we'd clutter it up with the result of
15698      the attempted unification, even if this class didn't work out.
15699      We also don't want to commit ourselves to all the unifications
15700      we've already done, since unification is supposed to be done on
15701      an argument-by-argument basis.  In other words, consider the
15702      following pathological case:
15703
15704        template <int I, int J, int K>
15705        struct S {};
15706
15707        template <int I, int J>
15708        struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
15709
15710        template <int I, int J, int K>
15711        void f(S<I, J, K>, S<I, I, I>);
15712
15713        void g() {
15714          S<0, 0, 0> s0;
15715          S<0, 1, 2> s2;
15716
15717          f(s0, s2);
15718        }
15719
15720      Now, by the time we consider the unification involving `s2', we
15721      already know that we must have `f<0, 0, 0>'.  But, even though
15722      `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
15723      because there are two ways to unify base classes of S<0, 1, 2>
15724      with S<I, I, I>.  If we kept the already deduced knowledge, we
15725      would reject the possibility I=1.  */
15726   copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
15727
15728   /* If unification failed, we're done.  */
15729   if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
15730              CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE, explain_p))
15731     return NULL_TREE;
15732
15733   return arg;
15734 }
15735
15736 /* Given a template type PARM and a class type ARG, find the unique
15737    base type in ARG that is an instance of PARM.  We do not examine
15738    ARG itself; only its base-classes.  If there is not exactly one
15739    appropriate base class, return NULL_TREE.  PARM may be the type of
15740    a partial specialization, as well as a plain template type.  Used
15741    by unify.  */
15742
15743 static enum template_base_result
15744 get_template_base (tree tparms, tree targs, tree parm, tree arg,
15745                    bool explain_p, tree *result)
15746 {
15747   tree rval = NULL_TREE;
15748   tree binfo;
15749
15750   gcc_assert (RECORD_OR_UNION_CODE_P (TREE_CODE (arg)));
15751
15752   binfo = TYPE_BINFO (complete_type (arg));
15753   if (!binfo)
15754     {
15755       /* The type could not be completed.  */
15756       *result = NULL_TREE;
15757       return tbr_incomplete_type;
15758     }
15759
15760   /* Walk in inheritance graph order.  The search order is not
15761      important, and this avoids multiple walks of virtual bases.  */
15762   for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
15763     {
15764       tree r = try_class_unification (tparms, targs, parm,
15765                                       BINFO_TYPE (binfo), explain_p);
15766
15767       if (r)
15768         {
15769           /* If there is more than one satisfactory baseclass, then:
15770
15771                [temp.deduct.call]
15772
15773               If they yield more than one possible deduced A, the type
15774               deduction fails.
15775
15776              applies.  */
15777           if (rval && !same_type_p (r, rval))
15778             {
15779               *result = NULL_TREE;
15780               return tbr_ambiguous_baseclass;
15781             }
15782
15783           rval = r;
15784         }
15785     }
15786
15787   *result = rval;
15788   return tbr_success;
15789 }
15790
15791 /* Returns the level of DECL, which declares a template parameter.  */
15792
15793 static int
15794 template_decl_level (tree decl)
15795 {
15796   switch (TREE_CODE (decl))
15797     {
15798     case TYPE_DECL:
15799     case TEMPLATE_DECL:
15800       return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
15801
15802     case PARM_DECL:
15803       return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
15804
15805     default:
15806       gcc_unreachable ();
15807     }
15808   return 0;
15809 }
15810
15811 /* Decide whether ARG can be unified with PARM, considering only the
15812    cv-qualifiers of each type, given STRICT as documented for unify.
15813    Returns nonzero iff the unification is OK on that basis.  */
15814
15815 static int
15816 check_cv_quals_for_unify (int strict, tree arg, tree parm)
15817 {
15818   int arg_quals = cp_type_quals (arg);
15819   int parm_quals = cp_type_quals (parm);
15820
15821   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
15822       && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
15823     {
15824       /*  Although a CVR qualifier is ignored when being applied to a
15825           substituted template parameter ([8.3.2]/1 for example), that
15826           does not allow us to unify "const T" with "int&" because both
15827           types are not of the form "cv-list T" [14.8.2.5 temp.deduct.type].
15828           It is ok when we're allowing additional CV qualifiers
15829           at the outer level [14.8.2.1]/3,1st bullet.  */
15830       if ((TREE_CODE (arg) == REFERENCE_TYPE
15831            || TREE_CODE (arg) == FUNCTION_TYPE
15832            || TREE_CODE (arg) == METHOD_TYPE)
15833           && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
15834         return 0;
15835
15836       if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
15837           && (parm_quals & TYPE_QUAL_RESTRICT))
15838         return 0;
15839     }
15840
15841   if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
15842       && (arg_quals & parm_quals) != parm_quals)
15843     return 0;
15844
15845   if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
15846       && (parm_quals & arg_quals) != arg_quals)
15847     return 0;
15848
15849   return 1;
15850 }
15851
15852 /* Determines the LEVEL and INDEX for the template parameter PARM.  */
15853 void 
15854 template_parm_level_and_index (tree parm, int* level, int* index)
15855 {
15856   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
15857       || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
15858       || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
15859     {
15860       *index = TEMPLATE_TYPE_IDX (parm);
15861       *level = TEMPLATE_TYPE_LEVEL (parm);
15862     }
15863   else
15864     {
15865       *index = TEMPLATE_PARM_IDX (parm);
15866       *level = TEMPLATE_PARM_LEVEL (parm);
15867     }
15868 }
15869
15870 #define RECUR_AND_CHECK_FAILURE(TP, TA, P, A, S, EP)                    \
15871   do {                                                                  \
15872     if (unify (TP, TA, P, A, S, EP))                                    \
15873       return 1;                                                         \
15874   } while (0);
15875
15876 /* Unifies the remaining arguments in PACKED_ARGS with the pack
15877    expansion at the end of PACKED_PARMS. Returns 0 if the type
15878    deduction succeeds, 1 otherwise. STRICT is the same as in
15879    unify. CALL_ARGS_P is true iff PACKED_ARGS is actually a function
15880    call argument list. We'll need to adjust the arguments to make them
15881    types. SUBR tells us if this is from a recursive call to
15882    type_unification_real, or for comparing two template argument
15883    lists. */
15884
15885 static int
15886 unify_pack_expansion (tree tparms, tree targs, tree packed_parms, 
15887                       tree packed_args, unification_kind_t strict,
15888                       bool subr, bool explain_p)
15889 {
15890   tree parm 
15891     = TREE_VEC_ELT (packed_parms, TREE_VEC_LENGTH (packed_parms) - 1);
15892   tree pattern = PACK_EXPANSION_PATTERN (parm);
15893   tree pack, packs = NULL_TREE;
15894   int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
15895   int len = TREE_VEC_LENGTH (packed_args);
15896
15897   /* Determine the parameter packs we will be deducing from the
15898      pattern, and record their current deductions.  */
15899   for (pack = PACK_EXPANSION_PARAMETER_PACKS (parm); 
15900        pack; pack = TREE_CHAIN (pack))
15901     {
15902       tree parm_pack = TREE_VALUE (pack);
15903       int idx, level;
15904
15905       /* Determine the index and level of this parameter pack.  */
15906       template_parm_level_and_index (parm_pack, &level, &idx);
15907
15908       /* Keep track of the parameter packs and their corresponding
15909          argument packs.  */
15910       packs = tree_cons (parm_pack, TMPL_ARG (targs, level, idx), packs);
15911       TREE_TYPE (packs) = make_tree_vec (len - start);
15912     }
15913   
15914   /* Loop through all of the arguments that have not yet been
15915      unified and unify each with the pattern.  */
15916   for (i = start; i < len; i++)
15917     {
15918       tree parm;
15919       bool any_explicit = false;
15920       tree arg = TREE_VEC_ELT (packed_args, i);
15921
15922       /* For each parameter pack, set its TMPL_ARG to either NULL_TREE
15923          or the element of its argument pack at the current index if
15924          this argument was explicitly specified.  */
15925       for (pack = packs; pack; pack = TREE_CHAIN (pack))
15926         {
15927           int idx, level;
15928           tree arg, pargs;
15929           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
15930
15931           arg = NULL_TREE;
15932           if (TREE_VALUE (pack)
15933               && (pargs = ARGUMENT_PACK_EXPLICIT_ARGS (TREE_VALUE (pack)))
15934               && (i < TREE_VEC_LENGTH (pargs)))
15935             {
15936               any_explicit = true;
15937               arg = TREE_VEC_ELT (pargs, i);
15938             }
15939           TMPL_ARG (targs, level, idx) = arg;
15940         }
15941
15942       /* If we had explicit template arguments, substitute them into the
15943          pattern before deduction.  */
15944       if (any_explicit)
15945         {
15946           /* Some arguments might still be unspecified or dependent.  */
15947           bool dependent;
15948           ++processing_template_decl;
15949           dependent = any_dependent_template_arguments_p (targs);
15950           if (!dependent)
15951             --processing_template_decl;
15952           parm = tsubst (pattern, targs,
15953                          explain_p ? tf_warning_or_error : tf_none,
15954                          NULL_TREE);
15955           if (dependent)
15956             --processing_template_decl;
15957           if (parm == error_mark_node)
15958             return 1;
15959         }
15960       else
15961         parm = pattern;
15962
15963       /* Unify the pattern with the current argument.  */
15964       if (unify_one_argument (tparms, targs, parm, arg, subr, strict,
15965                               LOOKUP_IMPLICIT, explain_p))
15966         return 1;
15967
15968       /* For each parameter pack, collect the deduced value.  */
15969       for (pack = packs; pack; pack = TREE_CHAIN (pack))
15970         {
15971           int idx, level;
15972           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
15973
15974           TREE_VEC_ELT (TREE_TYPE (pack), i - start) = 
15975             TMPL_ARG (targs, level, idx);
15976         }
15977     }
15978
15979   /* Verify that the results of unification with the parameter packs
15980      produce results consistent with what we've seen before, and make
15981      the deduced argument packs available.  */
15982   for (pack = packs; pack; pack = TREE_CHAIN (pack))
15983     {
15984       tree old_pack = TREE_VALUE (pack);
15985       tree new_args = TREE_TYPE (pack);
15986       int i, len = TREE_VEC_LENGTH (new_args);
15987       int idx, level;
15988       bool nondeduced_p = false;
15989
15990       /* By default keep the original deduced argument pack.
15991          If necessary, more specific code is going to update the
15992          resulting deduced argument later down in this function.  */
15993       template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
15994       TMPL_ARG (targs, level, idx) = old_pack;
15995
15996       /* If NEW_ARGS contains any NULL_TREE entries, we didn't
15997          actually deduce anything.  */
15998       for (i = 0; i < len && !nondeduced_p; ++i)
15999         if (TREE_VEC_ELT (new_args, i) == NULL_TREE)
16000           nondeduced_p = true;
16001       if (nondeduced_p)
16002         continue;
16003
16004       if (old_pack && ARGUMENT_PACK_INCOMPLETE_P (old_pack))
16005         {
16006           /* If we had fewer function args than explicit template args,
16007              just use the explicits.  */
16008           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
16009           int explicit_len = TREE_VEC_LENGTH (explicit_args);
16010           if (len < explicit_len)
16011             new_args = explicit_args;
16012         }
16013
16014       if (!old_pack)
16015         {
16016           tree result;
16017           /* Build the deduced *_ARGUMENT_PACK.  */
16018           if (TREE_CODE (TREE_PURPOSE (pack)) == TEMPLATE_PARM_INDEX)
16019             {
16020               result = make_node (NONTYPE_ARGUMENT_PACK);
16021               TREE_TYPE (result) = 
16022                 TREE_TYPE (TEMPLATE_PARM_DECL (TREE_PURPOSE (pack)));
16023               TREE_CONSTANT (result) = 1;
16024             }
16025           else
16026             result = cxx_make_type (TYPE_ARGUMENT_PACK);
16027
16028           SET_ARGUMENT_PACK_ARGS (result, new_args);
16029
16030           /* Note the deduced argument packs for this parameter
16031              pack.  */
16032           TMPL_ARG (targs, level, idx) = result;
16033         }
16034       else if (ARGUMENT_PACK_INCOMPLETE_P (old_pack)
16035                && (ARGUMENT_PACK_ARGS (old_pack) 
16036                    == ARGUMENT_PACK_EXPLICIT_ARGS (old_pack)))
16037         {
16038           /* We only had the explicitly-provided arguments before, but
16039              now we have a complete set of arguments.  */
16040           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
16041
16042           SET_ARGUMENT_PACK_ARGS (old_pack, new_args);
16043           ARGUMENT_PACK_INCOMPLETE_P (old_pack) = 1;
16044           ARGUMENT_PACK_EXPLICIT_ARGS (old_pack) = explicit_args;
16045         }
16046       else
16047         {
16048           tree bad_old_arg = NULL_TREE, bad_new_arg = NULL_TREE;
16049           tree old_args = ARGUMENT_PACK_ARGS (old_pack);
16050
16051           if (!comp_template_args_with_info (old_args, new_args,
16052                                              &bad_old_arg, &bad_new_arg))
16053             /* Inconsistent unification of this parameter pack.  */
16054             return unify_parameter_pack_inconsistent (explain_p,
16055                                                       bad_old_arg,
16056                                                       bad_new_arg);
16057         }
16058     }
16059
16060   return unify_success (explain_p);
16061 }
16062
16063 /* Deduce the value of template parameters.  TPARMS is the (innermost)
16064    set of template parameters to a template.  TARGS is the bindings
16065    for those template parameters, as determined thus far; TARGS may
16066    include template arguments for outer levels of template parameters
16067    as well.  PARM is a parameter to a template function, or a
16068    subcomponent of that parameter; ARG is the corresponding argument.
16069    This function attempts to match PARM with ARG in a manner
16070    consistent with the existing assignments in TARGS.  If more values
16071    are deduced, then TARGS is updated.
16072
16073    Returns 0 if the type deduction succeeds, 1 otherwise.  The
16074    parameter STRICT is a bitwise or of the following flags:
16075
16076      UNIFY_ALLOW_NONE:
16077        Require an exact match between PARM and ARG.
16078      UNIFY_ALLOW_MORE_CV_QUAL:
16079        Allow the deduced ARG to be more cv-qualified (by qualification
16080        conversion) than ARG.
16081      UNIFY_ALLOW_LESS_CV_QUAL:
16082        Allow the deduced ARG to be less cv-qualified than ARG.
16083      UNIFY_ALLOW_DERIVED:
16084        Allow the deduced ARG to be a template base class of ARG,
16085        or a pointer to a template base class of the type pointed to by
16086        ARG.
16087      UNIFY_ALLOW_INTEGER:
16088        Allow any integral type to be deduced.  See the TEMPLATE_PARM_INDEX
16089        case for more information.
16090      UNIFY_ALLOW_OUTER_LEVEL:
16091        This is the outermost level of a deduction. Used to determine validity
16092        of qualification conversions. A valid qualification conversion must
16093        have const qualified pointers leading up to the inner type which
16094        requires additional CV quals, except at the outer level, where const
16095        is not required [conv.qual]. It would be normal to set this flag in
16096        addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
16097      UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
16098        This is the outermost level of a deduction, and PARM can be more CV
16099        qualified at this point.
16100      UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
16101        This is the outermost level of a deduction, and PARM can be less CV
16102        qualified at this point.  */
16103
16104 static int
16105 unify (tree tparms, tree targs, tree parm, tree arg, int strict,
16106        bool explain_p)
16107 {
16108   int idx;
16109   tree targ;
16110   tree tparm;
16111   int strict_in = strict;
16112
16113   /* I don't think this will do the right thing with respect to types.
16114      But the only case I've seen it in so far has been array bounds, where
16115      signedness is the only information lost, and I think that will be
16116      okay.  */
16117   while (TREE_CODE (parm) == NOP_EXPR)
16118     parm = TREE_OPERAND (parm, 0);
16119
16120   if (arg == error_mark_node)
16121     return unify_invalid (explain_p);
16122   if (arg == unknown_type_node
16123       || arg == init_list_type_node)
16124     /* We can't deduce anything from this, but we might get all the
16125        template args from other function args.  */
16126     return unify_success (explain_p);
16127
16128   /* If PARM uses template parameters, then we can't bail out here,
16129      even if ARG == PARM, since we won't record unifications for the
16130      template parameters.  We might need them if we're trying to
16131      figure out which of two things is more specialized.  */
16132   if (arg == parm && !uses_template_parms (parm))
16133     return unify_success (explain_p);
16134
16135   /* Handle init lists early, so the rest of the function can assume
16136      we're dealing with a type. */
16137   if (BRACE_ENCLOSED_INITIALIZER_P (arg))
16138     {
16139       tree elt, elttype;
16140       unsigned i;
16141       tree orig_parm = parm;
16142
16143       /* Replace T with std::initializer_list<T> for deduction.  */
16144       if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
16145           && flag_deduce_init_list)
16146         parm = listify (parm);
16147
16148       if (!is_std_init_list (parm))
16149         /* We can only deduce from an initializer list argument if the
16150            parameter is std::initializer_list; otherwise this is a
16151            non-deduced context. */
16152         return unify_success (explain_p);
16153
16154       elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (parm), 0);
16155
16156       FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (arg), i, elt)
16157         {
16158           int elt_strict = strict;
16159
16160           if (elt == error_mark_node)
16161             return unify_invalid (explain_p);
16162
16163           if (!BRACE_ENCLOSED_INITIALIZER_P (elt))
16164             {
16165               tree type = TREE_TYPE (elt);
16166               /* It should only be possible to get here for a call.  */
16167               gcc_assert (elt_strict & UNIFY_ALLOW_OUTER_LEVEL);
16168               elt_strict |= maybe_adjust_types_for_deduction
16169                 (DEDUCE_CALL, &elttype, &type, elt);
16170               elt = type;
16171             }
16172
16173           RECUR_AND_CHECK_FAILURE (tparms, targs, elttype, elt, elt_strict,
16174                                    explain_p);
16175         }
16176
16177       /* If the std::initializer_list<T> deduction worked, replace the
16178          deduced A with std::initializer_list<A>.  */
16179       if (orig_parm != parm)
16180         {
16181           idx = TEMPLATE_TYPE_IDX (orig_parm);
16182           targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
16183           targ = listify (targ);
16184           TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = targ;
16185         }
16186       return unify_success (explain_p);
16187     }
16188
16189   /* Immediately reject some pairs that won't unify because of
16190      cv-qualification mismatches.  */
16191   if (TREE_CODE (arg) == TREE_CODE (parm)
16192       && TYPE_P (arg)
16193       /* It is the elements of the array which hold the cv quals of an array
16194          type, and the elements might be template type parms. We'll check
16195          when we recurse.  */
16196       && TREE_CODE (arg) != ARRAY_TYPE
16197       /* We check the cv-qualifiers when unifying with template type
16198          parameters below.  We want to allow ARG `const T' to unify with
16199          PARM `T' for example, when computing which of two templates
16200          is more specialized, for example.  */
16201       && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
16202       && !check_cv_quals_for_unify (strict_in, arg, parm))
16203     return unify_cv_qual_mismatch (explain_p, parm, arg);
16204
16205   if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
16206       && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
16207     strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
16208   strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
16209   strict &= ~UNIFY_ALLOW_DERIVED;
16210   strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
16211   strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
16212
16213   switch (TREE_CODE (parm))
16214     {
16215     case TYPENAME_TYPE:
16216     case SCOPE_REF:
16217     case UNBOUND_CLASS_TEMPLATE:
16218       /* In a type which contains a nested-name-specifier, template
16219          argument values cannot be deduced for template parameters used
16220          within the nested-name-specifier.  */
16221       return unify_success (explain_p);
16222
16223     case TEMPLATE_TYPE_PARM:
16224     case TEMPLATE_TEMPLATE_PARM:
16225     case BOUND_TEMPLATE_TEMPLATE_PARM:
16226       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
16227       if (tparm == error_mark_node)
16228         return unify_invalid (explain_p);
16229
16230       if (TEMPLATE_TYPE_LEVEL (parm)
16231           != template_decl_level (tparm))
16232         /* The PARM is not one we're trying to unify.  Just check
16233            to see if it matches ARG.  */
16234         {
16235           if (TREE_CODE (arg) == TREE_CODE (parm)
16236               && same_type_p (parm, arg))
16237             return unify_success (explain_p);
16238           else
16239             return unify_type_mismatch (explain_p, parm, arg);
16240         }
16241       idx = TEMPLATE_TYPE_IDX (parm);
16242       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
16243       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
16244
16245       /* Check for mixed types and values.  */
16246       if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
16247            && TREE_CODE (tparm) != TYPE_DECL)
16248           || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
16249               && TREE_CODE (tparm) != TEMPLATE_DECL))
16250         gcc_unreachable ();
16251
16252       if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
16253         {
16254           /* ARG must be constructed from a template class or a template
16255              template parameter.  */
16256           if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
16257               && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
16258             return unify_template_deduction_failure (explain_p, parm, arg);
16259
16260           {
16261             tree parmvec = TYPE_TI_ARGS (parm);
16262             tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
16263             tree full_argvec = add_to_template_args (targs, argvec);
16264             tree parm_parms 
16265               = DECL_INNERMOST_TEMPLATE_PARMS
16266                   (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (parm));
16267             int i, len;
16268             int parm_variadic_p = 0;
16269
16270             /* The resolution to DR150 makes clear that default
16271                arguments for an N-argument may not be used to bind T
16272                to a template template parameter with fewer than N
16273                parameters.  It is not safe to permit the binding of
16274                default arguments as an extension, as that may change
16275                the meaning of a conforming program.  Consider:
16276
16277                   struct Dense { static const unsigned int dim = 1; };
16278
16279                   template <template <typename> class View,
16280                             typename Block>
16281                   void operator+(float, View<Block> const&);
16282
16283                   template <typename Block,
16284                             unsigned int Dim = Block::dim>
16285                   struct Lvalue_proxy { operator float() const; };
16286
16287                   void
16288                   test_1d (void) {
16289                     Lvalue_proxy<Dense> p;
16290                     float b;
16291                     b + p;
16292                   }
16293
16294               Here, if Lvalue_proxy is permitted to bind to View, then
16295               the global operator+ will be used; if they are not, the
16296               Lvalue_proxy will be converted to float.  */
16297             if (coerce_template_parms (parm_parms,
16298                                        full_argvec,
16299                                        TYPE_TI_TEMPLATE (parm),
16300                                        (explain_p
16301                                         ? tf_warning_or_error
16302                                         : tf_none),
16303                                        /*require_all_args=*/true,
16304                                        /*use_default_args=*/false)
16305                 == error_mark_node)
16306               return 1;
16307
16308             /* Deduce arguments T, i from TT<T> or TT<i>.
16309                We check each element of PARMVEC and ARGVEC individually
16310                rather than the whole TREE_VEC since they can have
16311                different number of elements.  */
16312
16313             parmvec = expand_template_argument_pack (parmvec);
16314             argvec = expand_template_argument_pack (argvec);
16315
16316             len = TREE_VEC_LENGTH (parmvec);
16317
16318             /* Check if the parameters end in a pack, making them
16319                variadic.  */
16320             if (len > 0
16321                 && PACK_EXPANSION_P (TREE_VEC_ELT (parmvec, len - 1)))
16322               parm_variadic_p = 1;
16323             
16324             if (TREE_VEC_LENGTH (argvec) < len - parm_variadic_p)
16325               return unify_too_few_arguments (explain_p,
16326                                               TREE_VEC_LENGTH (argvec), len);
16327
16328              for (i = 0; i < len - parm_variadic_p; ++i)
16329               {
16330                 RECUR_AND_CHECK_FAILURE (tparms, targs,
16331                                          TREE_VEC_ELT (parmvec, i),
16332                                          TREE_VEC_ELT (argvec, i),
16333                                          UNIFY_ALLOW_NONE, explain_p);
16334               }
16335
16336             if (parm_variadic_p
16337                 && unify_pack_expansion (tparms, targs,
16338                                          parmvec, argvec,
16339                                          DEDUCE_EXACT,
16340                                          /*subr=*/true, explain_p))
16341               return 1;
16342           }
16343           arg = TYPE_TI_TEMPLATE (arg);
16344
16345           /* Fall through to deduce template name.  */
16346         }
16347
16348       if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
16349           || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
16350         {
16351           /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>.  */
16352
16353           /* Simple cases: Value already set, does match or doesn't.  */
16354           if (targ != NULL_TREE && template_args_equal (targ, arg))
16355             return unify_success (explain_p);
16356           else if (targ)
16357             return unify_inconsistency (explain_p, parm, targ, arg);
16358         }
16359       else
16360         {
16361           /* If PARM is `const T' and ARG is only `int', we don't have
16362              a match unless we are allowing additional qualification.
16363              If ARG is `const int' and PARM is just `T' that's OK;
16364              that binds `const int' to `T'.  */
16365           if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
16366                                          arg, parm))
16367             return unify_cv_qual_mismatch (explain_p, parm, arg);
16368
16369           /* Consider the case where ARG is `const volatile int' and
16370              PARM is `const T'.  Then, T should be `volatile int'.  */
16371           arg = cp_build_qualified_type_real
16372             (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
16373           if (arg == error_mark_node)
16374             return unify_invalid (explain_p);
16375
16376           /* Simple cases: Value already set, does match or doesn't.  */
16377           if (targ != NULL_TREE && same_type_p (targ, arg))
16378             return unify_success (explain_p);
16379           else if (targ)
16380             return unify_inconsistency (explain_p, parm, targ, arg);
16381
16382           /* Make sure that ARG is not a variable-sized array.  (Note
16383              that were talking about variable-sized arrays (like
16384              `int[n]'), rather than arrays of unknown size (like
16385              `int[]').)  We'll get very confused by such a type since
16386              the bound of the array is not constant, and therefore
16387              not mangleable.  Besides, such types are not allowed in
16388              ISO C++, so we can do as we please here.  We do allow
16389              them for 'auto' deduction, since that isn't ABI-exposed.  */
16390           if (!is_auto (parm) && variably_modified_type_p (arg, NULL_TREE))
16391             return unify_vla_arg (explain_p, arg);
16392
16393           /* Strip typedefs as in convert_template_argument.  */
16394           arg = canonicalize_type_argument (arg, tf_none);
16395         }
16396
16397       /* If ARG is a parameter pack or an expansion, we cannot unify
16398          against it unless PARM is also a parameter pack.  */
16399       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
16400           && !template_parameter_pack_p (parm))
16401         return unify_parameter_pack_mismatch (explain_p, parm, arg);
16402
16403       /* If the argument deduction results is a METHOD_TYPE,
16404          then there is a problem.
16405          METHOD_TYPE doesn't map to any real C++ type the result of
16406          the deduction can not be of that type.  */
16407       if (TREE_CODE (arg) == METHOD_TYPE)
16408         return unify_method_type_error (explain_p, arg);
16409
16410       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
16411       return unify_success (explain_p);
16412
16413     case TEMPLATE_PARM_INDEX:
16414       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
16415       if (tparm == error_mark_node)
16416         return unify_invalid (explain_p);
16417
16418       if (TEMPLATE_PARM_LEVEL (parm)
16419           != template_decl_level (tparm))
16420         {
16421           /* The PARM is not one we're trying to unify.  Just check
16422              to see if it matches ARG.  */
16423           int result = !(TREE_CODE (arg) == TREE_CODE (parm)
16424                          && cp_tree_equal (parm, arg));
16425           if (result)
16426             unify_expression_unequal (explain_p, parm, arg);
16427           return result;
16428         }
16429
16430       idx = TEMPLATE_PARM_IDX (parm);
16431       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
16432
16433       if (targ)
16434         {
16435           int x = !cp_tree_equal (targ, arg);
16436           if (x)
16437             unify_inconsistency (explain_p, parm, targ, arg);
16438           return x;
16439         }
16440
16441       /* [temp.deduct.type] If, in the declaration of a function template
16442          with a non-type template-parameter, the non-type
16443          template-parameter is used in an expression in the function
16444          parameter-list and, if the corresponding template-argument is
16445          deduced, the template-argument type shall match the type of the
16446          template-parameter exactly, except that a template-argument
16447          deduced from an array bound may be of any integral type.
16448          The non-type parameter might use already deduced type parameters.  */
16449       tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
16450       if (!TREE_TYPE (arg))
16451         /* Template-parameter dependent expression.  Just accept it for now.
16452            It will later be processed in convert_template_argument.  */
16453         ;
16454       else if (same_type_p (TREE_TYPE (arg), tparm))
16455         /* OK */;
16456       else if ((strict & UNIFY_ALLOW_INTEGER)
16457                && (TREE_CODE (tparm) == INTEGER_TYPE
16458                    || TREE_CODE (tparm) == BOOLEAN_TYPE))
16459         /* Convert the ARG to the type of PARM; the deduced non-type
16460            template argument must exactly match the types of the
16461            corresponding parameter.  */
16462         arg = fold (build_nop (tparm, arg));
16463       else if (uses_template_parms (tparm))
16464         /* We haven't deduced the type of this parameter yet.  Try again
16465            later.  */
16466         return unify_success (explain_p);
16467       else
16468         return unify_type_mismatch (explain_p, tparm, arg);
16469
16470       /* If ARG is a parameter pack or an expansion, we cannot unify
16471          against it unless PARM is also a parameter pack.  */
16472       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
16473           && !TEMPLATE_PARM_PARAMETER_PACK (parm))
16474         return unify_parameter_pack_mismatch (explain_p, parm, arg);
16475
16476       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
16477       return unify_success (explain_p);
16478
16479     case PTRMEM_CST:
16480      {
16481         /* A pointer-to-member constant can be unified only with
16482          another constant.  */
16483       if (TREE_CODE (arg) != PTRMEM_CST)
16484         return unify_ptrmem_cst_mismatch (explain_p, parm, arg);
16485
16486       /* Just unify the class member. It would be useless (and possibly
16487          wrong, depending on the strict flags) to unify also
16488          PTRMEM_CST_CLASS, because we want to be sure that both parm and
16489          arg refer to the same variable, even if through different
16490          classes. For instance:
16491
16492          struct A { int x; };
16493          struct B : A { };
16494
16495          Unification of &A::x and &B::x must succeed.  */
16496       return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
16497                     PTRMEM_CST_MEMBER (arg), strict, explain_p);
16498      }
16499
16500     case POINTER_TYPE:
16501       {
16502         if (TREE_CODE (arg) != POINTER_TYPE)
16503           return unify_type_mismatch (explain_p, parm, arg);
16504
16505         /* [temp.deduct.call]
16506
16507            A can be another pointer or pointer to member type that can
16508            be converted to the deduced A via a qualification
16509            conversion (_conv.qual_).
16510
16511            We pass down STRICT here rather than UNIFY_ALLOW_NONE.
16512            This will allow for additional cv-qualification of the
16513            pointed-to types if appropriate.  */
16514
16515         if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
16516           /* The derived-to-base conversion only persists through one
16517              level of pointers.  */
16518           strict |= (strict_in & UNIFY_ALLOW_DERIVED);
16519
16520         return unify (tparms, targs, TREE_TYPE (parm),
16521                       TREE_TYPE (arg), strict, explain_p);
16522       }
16523
16524     case REFERENCE_TYPE:
16525       if (TREE_CODE (arg) != REFERENCE_TYPE)
16526         return unify_type_mismatch (explain_p, parm, arg);
16527       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
16528                     strict & UNIFY_ALLOW_MORE_CV_QUAL, explain_p);
16529
16530     case ARRAY_TYPE:
16531       if (TREE_CODE (arg) != ARRAY_TYPE)
16532         return unify_type_mismatch (explain_p, parm, arg);
16533       if ((TYPE_DOMAIN (parm) == NULL_TREE)
16534           != (TYPE_DOMAIN (arg) == NULL_TREE))
16535         return unify_type_mismatch (explain_p, parm, arg);
16536       if (TYPE_DOMAIN (parm) != NULL_TREE)
16537         {
16538           tree parm_max;
16539           tree arg_max;
16540           bool parm_cst;
16541           bool arg_cst;
16542
16543           /* Our representation of array types uses "N - 1" as the
16544              TYPE_MAX_VALUE for an array with "N" elements, if "N" is
16545              not an integer constant.  We cannot unify arbitrarily
16546              complex expressions, so we eliminate the MINUS_EXPRs
16547              here.  */
16548           parm_max = TYPE_MAX_VALUE (TYPE_DOMAIN (parm));
16549           parm_cst = TREE_CODE (parm_max) == INTEGER_CST;
16550           if (!parm_cst)
16551             {
16552               gcc_assert (TREE_CODE (parm_max) == MINUS_EXPR);
16553               parm_max = TREE_OPERAND (parm_max, 0);
16554             }
16555           arg_max = TYPE_MAX_VALUE (TYPE_DOMAIN (arg));
16556           arg_cst = TREE_CODE (arg_max) == INTEGER_CST;
16557           if (!arg_cst)
16558             {
16559               /* The ARG_MAX may not be a simple MINUS_EXPR, if we are
16560                  trying to unify the type of a variable with the type
16561                  of a template parameter.  For example:
16562
16563                    template <unsigned int N>
16564                    void f (char (&) [N]);
16565                    int g(); 
16566                    void h(int i) {
16567                      char a[g(i)];
16568                      f(a); 
16569                    }
16570
16571                 Here, the type of the ARG will be "int [g(i)]", and
16572                 may be a SAVE_EXPR, etc.  */
16573               if (TREE_CODE (arg_max) != MINUS_EXPR)
16574                 return unify_vla_arg (explain_p, arg);
16575               arg_max = TREE_OPERAND (arg_max, 0);
16576             }
16577
16578           /* If only one of the bounds used a MINUS_EXPR, compensate
16579              by adding one to the other bound.  */
16580           if (parm_cst && !arg_cst)
16581             parm_max = fold_build2_loc (input_location, PLUS_EXPR,
16582                                     integer_type_node,
16583                                     parm_max,
16584                                     integer_one_node);
16585           else if (arg_cst && !parm_cst)
16586             arg_max = fold_build2_loc (input_location, PLUS_EXPR,
16587                                    integer_type_node,
16588                                    arg_max,
16589                                    integer_one_node);
16590
16591           RECUR_AND_CHECK_FAILURE (tparms, targs, parm_max, arg_max,
16592                                    UNIFY_ALLOW_INTEGER, explain_p);
16593         }
16594       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
16595                     strict & UNIFY_ALLOW_MORE_CV_QUAL, explain_p);
16596
16597     case REAL_TYPE:
16598     case COMPLEX_TYPE:
16599     case VECTOR_TYPE:
16600     case INTEGER_TYPE:
16601     case BOOLEAN_TYPE:
16602     case ENUMERAL_TYPE:
16603     case VOID_TYPE:
16604       if (TREE_CODE (arg) != TREE_CODE (parm))
16605         return unify_type_mismatch (explain_p, parm, arg);
16606
16607       /* We have already checked cv-qualification at the top of the
16608          function.  */
16609       if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
16610         return unify_type_mismatch (explain_p, parm, arg);
16611
16612       /* As far as unification is concerned, this wins.  Later checks
16613          will invalidate it if necessary.  */
16614       return unify_success (explain_p);
16615
16616       /* Types INTEGER_CST and MINUS_EXPR can come from array bounds.  */
16617       /* Type INTEGER_CST can come from ordinary constant template args.  */
16618     case INTEGER_CST:
16619       while (TREE_CODE (arg) == NOP_EXPR)
16620         arg = TREE_OPERAND (arg, 0);
16621
16622       if (TREE_CODE (arg) != INTEGER_CST)
16623         return unify_template_argument_mismatch (explain_p, parm, arg);
16624       return (tree_int_cst_equal (parm, arg)
16625               ? unify_success (explain_p)
16626               : unify_template_argument_mismatch (explain_p, parm, arg));
16627
16628     case TREE_VEC:
16629       {
16630         int i, len, argslen;
16631         int parm_variadic_p = 0;
16632
16633         if (TREE_CODE (arg) != TREE_VEC)
16634           return unify_template_argument_mismatch (explain_p, parm, arg);
16635
16636         len = TREE_VEC_LENGTH (parm);
16637         argslen = TREE_VEC_LENGTH (arg);
16638
16639         /* Check for pack expansions in the parameters.  */
16640         for (i = 0; i < len; ++i)
16641           {
16642             if (PACK_EXPANSION_P (TREE_VEC_ELT (parm, i)))
16643               {
16644                 if (i == len - 1)
16645                   /* We can unify against something with a trailing
16646                      parameter pack.  */
16647                   parm_variadic_p = 1;
16648                 else
16649                   /* [temp.deduct.type]/9: If the template argument list of
16650                      P contains a pack expansion that is not the last
16651                      template argument, the entire template argument list
16652                      is a non-deduced context.  */
16653                   return unify_success (explain_p);
16654               }
16655           }
16656
16657         /* If we don't have enough arguments to satisfy the parameters
16658            (not counting the pack expression at the end), or we have
16659            too many arguments for a parameter list that doesn't end in
16660            a pack expression, we can't unify.  */
16661         if (parm_variadic_p
16662             ? argslen < len - parm_variadic_p
16663             : argslen != len)
16664           return unify_arity (explain_p, TREE_VEC_LENGTH (arg), len);
16665
16666         /* Unify all of the parameters that precede the (optional)
16667            pack expression.  */
16668         for (i = 0; i < len - parm_variadic_p; ++i)
16669           {
16670             RECUR_AND_CHECK_FAILURE (tparms, targs,
16671                                      TREE_VEC_ELT (parm, i),
16672                                      TREE_VEC_ELT (arg, i),
16673                                      UNIFY_ALLOW_NONE, explain_p);
16674           }
16675         if (parm_variadic_p)
16676           return unify_pack_expansion (tparms, targs, parm, arg,
16677                                        DEDUCE_EXACT,
16678                                        /*subr=*/true, explain_p);
16679         return unify_success (explain_p);
16680       }
16681
16682     case RECORD_TYPE:
16683     case UNION_TYPE:
16684       if (TREE_CODE (arg) != TREE_CODE (parm))
16685         return unify_type_mismatch (explain_p, parm, arg);
16686
16687       if (TYPE_PTRMEMFUNC_P (parm))
16688         {
16689           if (!TYPE_PTRMEMFUNC_P (arg))
16690             return unify_type_mismatch (explain_p, parm, arg);
16691
16692           return unify (tparms, targs,
16693                         TYPE_PTRMEMFUNC_FN_TYPE (parm),
16694                         TYPE_PTRMEMFUNC_FN_TYPE (arg),
16695                         strict, explain_p);
16696         }
16697
16698       if (CLASSTYPE_TEMPLATE_INFO (parm))
16699         {
16700           tree t = NULL_TREE;
16701
16702           if (strict_in & UNIFY_ALLOW_DERIVED)
16703             {
16704               /* First, we try to unify the PARM and ARG directly.  */
16705               t = try_class_unification (tparms, targs,
16706                                          parm, arg, explain_p);
16707
16708               if (!t)
16709                 {
16710                   /* Fallback to the special case allowed in
16711                      [temp.deduct.call]:
16712
16713                        If P is a class, and P has the form
16714                        template-id, then A can be a derived class of
16715                        the deduced A.  Likewise, if P is a pointer to
16716                        a class of the form template-id, A can be a
16717                        pointer to a derived class pointed to by the
16718                        deduced A.  */
16719                   enum template_base_result r;
16720                   r = get_template_base (tparms, targs, parm, arg,
16721                                          explain_p, &t);
16722
16723                   if (!t)
16724                     return unify_no_common_base (explain_p, r, parm, arg);
16725                 }
16726             }
16727           else if (CLASSTYPE_TEMPLATE_INFO (arg)
16728                    && (CLASSTYPE_TI_TEMPLATE (parm)
16729                        == CLASSTYPE_TI_TEMPLATE (arg)))
16730             /* Perhaps PARM is something like S<U> and ARG is S<int>.
16731                Then, we should unify `int' and `U'.  */
16732             t = arg;
16733           else
16734             /* There's no chance of unification succeeding.  */
16735             return unify_type_mismatch (explain_p, parm, arg);
16736
16737           return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
16738                         CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE, explain_p);
16739         }
16740       else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
16741         return unify_type_mismatch (explain_p, parm, arg);
16742       return unify_success (explain_p);
16743
16744     case METHOD_TYPE:
16745     case FUNCTION_TYPE:
16746       {
16747         unsigned int nargs;
16748         tree *args;
16749         tree a;
16750         unsigned int i;
16751
16752         if (TREE_CODE (arg) != TREE_CODE (parm))
16753           return unify_type_mismatch (explain_p, parm, arg);
16754
16755         /* CV qualifications for methods can never be deduced, they must
16756            match exactly.  We need to check them explicitly here,
16757            because type_unification_real treats them as any other
16758            cv-qualified parameter.  */
16759         if (TREE_CODE (parm) == METHOD_TYPE
16760             && (!check_cv_quals_for_unify
16761                 (UNIFY_ALLOW_NONE,
16762                  class_of_this_parm (arg),
16763                  class_of_this_parm (parm))))
16764           return unify_cv_qual_mismatch (explain_p, parm, arg);
16765
16766         RECUR_AND_CHECK_FAILURE (tparms, targs, TREE_TYPE (parm),
16767                                  TREE_TYPE (arg), UNIFY_ALLOW_NONE, explain_p);
16768
16769         nargs = list_length (TYPE_ARG_TYPES (arg));
16770         args = XALLOCAVEC (tree, nargs);
16771         for (a = TYPE_ARG_TYPES (arg), i = 0;
16772              a != NULL_TREE && a != void_list_node;
16773              a = TREE_CHAIN (a), ++i)
16774           args[i] = TREE_VALUE (a);
16775         nargs = i;
16776
16777         return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
16778                                       args, nargs, 1, DEDUCE_EXACT,
16779                                       LOOKUP_NORMAL, explain_p);
16780       }
16781
16782     case OFFSET_TYPE:
16783       /* Unify a pointer to member with a pointer to member function, which
16784          deduces the type of the member as a function type. */
16785       if (TYPE_PTRMEMFUNC_P (arg))
16786         {
16787           tree method_type;
16788           tree fntype;
16789
16790           /* Check top-level cv qualifiers */
16791           if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
16792             return unify_cv_qual_mismatch (explain_p, parm, arg);
16793
16794           RECUR_AND_CHECK_FAILURE (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
16795                                    TYPE_PTRMEMFUNC_OBJECT_TYPE (arg),
16796                                    UNIFY_ALLOW_NONE, explain_p);
16797
16798           /* Determine the type of the function we are unifying against. */
16799           method_type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (arg));
16800           fntype =
16801             build_function_type (TREE_TYPE (method_type),
16802                                  TREE_CHAIN (TYPE_ARG_TYPES (method_type)));
16803
16804           /* Extract the cv-qualifiers of the member function from the
16805              implicit object parameter and place them on the function
16806              type to be restored later. */
16807           fntype = apply_memfn_quals (fntype, type_memfn_quals (method_type));
16808           return unify (tparms, targs, TREE_TYPE (parm), fntype, strict, explain_p);
16809         }
16810
16811       if (TREE_CODE (arg) != OFFSET_TYPE)
16812         return unify_type_mismatch (explain_p, parm, arg);
16813       RECUR_AND_CHECK_FAILURE (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
16814                                TYPE_OFFSET_BASETYPE (arg),
16815                                UNIFY_ALLOW_NONE, explain_p);
16816       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
16817                     strict, explain_p);
16818
16819     case CONST_DECL:
16820       if (DECL_TEMPLATE_PARM_P (parm))
16821         return unify (tparms, targs, DECL_INITIAL (parm), arg, strict, explain_p);
16822       if (arg != integral_constant_value (parm))
16823         return unify_template_argument_mismatch (explain_p, parm, arg);
16824       return unify_success (explain_p);
16825
16826     case FIELD_DECL:
16827     case TEMPLATE_DECL:
16828       /* Matched cases are handled by the ARG == PARM test above.  */
16829       return unify_template_argument_mismatch (explain_p, parm, arg);
16830
16831     case VAR_DECL:
16832       /* A non-type template parameter that is a variable should be a
16833          an integral constant, in which case, it whould have been
16834          folded into its (constant) value. So we should not be getting
16835          a variable here.  */
16836       gcc_unreachable ();
16837
16838     case TYPE_ARGUMENT_PACK:
16839     case NONTYPE_ARGUMENT_PACK:
16840       return unify (tparms, targs, ARGUMENT_PACK_ARGS (parm),
16841                     ARGUMENT_PACK_ARGS (arg), strict, explain_p);
16842
16843     case TYPEOF_TYPE:
16844     case DECLTYPE_TYPE:
16845     case UNDERLYING_TYPE:
16846       /* Cannot deduce anything from TYPEOF_TYPE, DECLTYPE_TYPE,
16847          or UNDERLYING_TYPE nodes.  */
16848       return unify_success (explain_p);
16849
16850     case ERROR_MARK:
16851       /* Unification fails if we hit an error node.  */
16852       return unify_invalid (explain_p);
16853
16854     default:
16855       /* An unresolved overload is a nondeduced context.  */
16856       if (type_unknown_p (parm))
16857         return unify_success (explain_p);
16858       gcc_assert (EXPR_P (parm));
16859
16860       /* We must be looking at an expression.  This can happen with
16861          something like:
16862
16863            template <int I>
16864            void foo(S<I>, S<I + 2>);
16865
16866          This is a "nondeduced context":
16867
16868            [deduct.type]
16869
16870            The nondeduced contexts are:
16871
16872            --A type that is a template-id in which one or more of
16873              the template-arguments is an expression that references
16874              a template-parameter.
16875
16876          In these cases, we assume deduction succeeded, but don't
16877          actually infer any unifications.  */
16878
16879       if (!uses_template_parms (parm)
16880           && !template_args_equal (parm, arg))
16881         return unify_expression_unequal (explain_p, parm, arg);
16882       else
16883         return unify_success (explain_p);
16884     }
16885 }
16886 #undef RECUR_AND_CHECK_FAILURE
16887 \f
16888 /* Note that DECL can be defined in this translation unit, if
16889    required.  */
16890
16891 static void
16892 mark_definable (tree decl)
16893 {
16894   tree clone;
16895   DECL_NOT_REALLY_EXTERN (decl) = 1;
16896   FOR_EACH_CLONE (clone, decl)
16897     DECL_NOT_REALLY_EXTERN (clone) = 1;
16898 }
16899
16900 /* Called if RESULT is explicitly instantiated, or is a member of an
16901    explicitly instantiated class.  */
16902
16903 void
16904 mark_decl_instantiated (tree result, int extern_p)
16905 {
16906   SET_DECL_EXPLICIT_INSTANTIATION (result);
16907
16908   /* If this entity has already been written out, it's too late to
16909      make any modifications.  */
16910   if (TREE_ASM_WRITTEN (result))
16911     return;
16912
16913   if (TREE_CODE (result) != FUNCTION_DECL)
16914     /* The TREE_PUBLIC flag for function declarations will have been
16915        set correctly by tsubst.  */
16916     TREE_PUBLIC (result) = 1;
16917
16918   /* This might have been set by an earlier implicit instantiation.  */
16919   DECL_COMDAT (result) = 0;
16920
16921   if (extern_p)
16922     DECL_NOT_REALLY_EXTERN (result) = 0;
16923   else
16924     {
16925       mark_definable (result);
16926       /* Always make artificials weak.  */
16927       if (DECL_ARTIFICIAL (result) && flag_weak)
16928         comdat_linkage (result);
16929       /* For WIN32 we also want to put explicit instantiations in
16930          linkonce sections.  */
16931       else if (TREE_PUBLIC (result))
16932         maybe_make_one_only (result);
16933     }
16934
16935   /* If EXTERN_P, then this function will not be emitted -- unless
16936      followed by an explicit instantiation, at which point its linkage
16937      will be adjusted.  If !EXTERN_P, then this function will be
16938      emitted here.  In neither circumstance do we want
16939      import_export_decl to adjust the linkage.  */
16940   DECL_INTERFACE_KNOWN (result) = 1;
16941 }
16942
16943 /* Subroutine of more_specialized_fn: check whether TARGS is missing any
16944    important template arguments.  If any are missing, we check whether
16945    they're important by using error_mark_node for substituting into any
16946    args that were used for partial ordering (the ones between ARGS and END)
16947    and seeing if it bubbles up.  */
16948
16949 static bool
16950 check_undeduced_parms (tree targs, tree args, tree end)
16951 {
16952   bool found = false;
16953   int i;
16954   for (i = TREE_VEC_LENGTH (targs) - 1; i >= 0; --i)
16955     if (TREE_VEC_ELT (targs, i) == NULL_TREE)
16956       {
16957         found = true;
16958         TREE_VEC_ELT (targs, i) = error_mark_node;
16959       }
16960   if (found)
16961     {
16962       for (; args != end; args = TREE_CHAIN (args))
16963         {
16964           tree substed = tsubst (TREE_VALUE (args), targs, tf_none, NULL_TREE);
16965           if (substed == error_mark_node)
16966             return true;
16967         }
16968     }
16969   return false;
16970 }
16971
16972 /* Given two function templates PAT1 and PAT2, return:
16973
16974    1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
16975    -1 if PAT2 is more specialized than PAT1.
16976    0 if neither is more specialized.
16977
16978    LEN indicates the number of parameters we should consider
16979    (defaulted parameters should not be considered).
16980
16981    The 1998 std underspecified function template partial ordering, and
16982    DR214 addresses the issue.  We take pairs of arguments, one from
16983    each of the templates, and deduce them against each other.  One of
16984    the templates will be more specialized if all the *other*
16985    template's arguments deduce against its arguments and at least one
16986    of its arguments *does* *not* deduce against the other template's
16987    corresponding argument.  Deduction is done as for class templates.
16988    The arguments used in deduction have reference and top level cv
16989    qualifiers removed.  Iff both arguments were originally reference
16990    types *and* deduction succeeds in both directions, the template
16991    with the more cv-qualified argument wins for that pairing (if
16992    neither is more cv-qualified, they both are equal).  Unlike regular
16993    deduction, after all the arguments have been deduced in this way,
16994    we do *not* verify the deduced template argument values can be
16995    substituted into non-deduced contexts.
16996
16997    The logic can be a bit confusing here, because we look at deduce1 and
16998    targs1 to see if pat2 is at least as specialized, and vice versa; if we
16999    can find template arguments for pat1 to make arg1 look like arg2, that
17000    means that arg2 is at least as specialized as arg1.  */
17001
17002 int
17003 more_specialized_fn (tree pat1, tree pat2, int len)
17004 {
17005   tree decl1 = DECL_TEMPLATE_RESULT (pat1);
17006   tree decl2 = DECL_TEMPLATE_RESULT (pat2);
17007   tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
17008   tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
17009   tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
17010   tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
17011   tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
17012   tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
17013   tree origs1, origs2;
17014   bool lose1 = false;
17015   bool lose2 = false;
17016
17017   /* Remove the this parameter from non-static member functions.  If
17018      one is a non-static member function and the other is not a static
17019      member function, remove the first parameter from that function
17020      also.  This situation occurs for operator functions where we
17021      locate both a member function (with this pointer) and non-member
17022      operator (with explicit first operand).  */
17023   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
17024     {
17025       len--; /* LEN is the number of significant arguments for DECL1 */
17026       args1 = TREE_CHAIN (args1);
17027       if (!DECL_STATIC_FUNCTION_P (decl2))
17028         args2 = TREE_CHAIN (args2);
17029     }
17030   else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
17031     {
17032       args2 = TREE_CHAIN (args2);
17033       if (!DECL_STATIC_FUNCTION_P (decl1))
17034         {
17035           len--;
17036           args1 = TREE_CHAIN (args1);
17037         }
17038     }
17039
17040   /* If only one is a conversion operator, they are unordered.  */
17041   if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
17042     return 0;
17043
17044   /* Consider the return type for a conversion function */
17045   if (DECL_CONV_FN_P (decl1))
17046     {
17047       args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
17048       args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
17049       len++;
17050     }
17051
17052   processing_template_decl++;
17053
17054   origs1 = args1;
17055   origs2 = args2;
17056
17057   while (len--
17058          /* Stop when an ellipsis is seen.  */
17059          && args1 != NULL_TREE && args2 != NULL_TREE)
17060     {
17061       tree arg1 = TREE_VALUE (args1);
17062       tree arg2 = TREE_VALUE (args2);
17063       int deduce1, deduce2;
17064       int quals1 = -1;
17065       int quals2 = -1;
17066
17067       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
17068           && TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
17069         {
17070           /* When both arguments are pack expansions, we need only
17071              unify the patterns themselves.  */
17072           arg1 = PACK_EXPANSION_PATTERN (arg1);
17073           arg2 = PACK_EXPANSION_PATTERN (arg2);
17074
17075           /* This is the last comparison we need to do.  */
17076           len = 0;
17077         }
17078
17079       if (TREE_CODE (arg1) == REFERENCE_TYPE)
17080         {
17081           arg1 = TREE_TYPE (arg1);
17082           quals1 = cp_type_quals (arg1);
17083         }
17084
17085       if (TREE_CODE (arg2) == REFERENCE_TYPE)
17086         {
17087           arg2 = TREE_TYPE (arg2);
17088           quals2 = cp_type_quals (arg2);
17089         }
17090
17091       if ((quals1 < 0) != (quals2 < 0))
17092         {
17093           /* Only of the args is a reference, see if we should apply
17094              array/function pointer decay to it.  This is not part of
17095              DR214, but is, IMHO, consistent with the deduction rules
17096              for the function call itself, and with our earlier
17097              implementation of the underspecified partial ordering
17098              rules.  (nathan).  */
17099           if (quals1 >= 0)
17100             {
17101               switch (TREE_CODE (arg1))
17102                 {
17103                 case ARRAY_TYPE:
17104                   arg1 = TREE_TYPE (arg1);
17105                   /* FALLTHROUGH. */
17106                 case FUNCTION_TYPE:
17107                   arg1 = build_pointer_type (arg1);
17108                   break;
17109
17110                 default:
17111                   break;
17112                 }
17113             }
17114           else
17115             {
17116               switch (TREE_CODE (arg2))
17117                 {
17118                 case ARRAY_TYPE:
17119                   arg2 = TREE_TYPE (arg2);
17120                   /* FALLTHROUGH. */
17121                 case FUNCTION_TYPE:
17122                   arg2 = build_pointer_type (arg2);
17123                   break;
17124
17125                 default:
17126                   break;
17127                 }
17128             }
17129         }
17130
17131       arg1 = TYPE_MAIN_VARIANT (arg1);
17132       arg2 = TYPE_MAIN_VARIANT (arg2);
17133
17134       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION)
17135         {
17136           int i, len2 = list_length (args2);
17137           tree parmvec = make_tree_vec (1);
17138           tree argvec = make_tree_vec (len2);
17139           tree ta = args2;
17140
17141           /* Setup the parameter vector, which contains only ARG1.  */
17142           TREE_VEC_ELT (parmvec, 0) = arg1;
17143
17144           /* Setup the argument vector, which contains the remaining
17145              arguments.  */
17146           for (i = 0; i < len2; i++, ta = TREE_CHAIN (ta))
17147             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
17148
17149           deduce1 = (unify_pack_expansion (tparms1, targs1, parmvec,
17150                                            argvec, DEDUCE_EXACT,
17151                                            /*subr=*/true, /*explain_p=*/false)
17152                      == 0);
17153
17154           /* We cannot deduce in the other direction, because ARG1 is
17155              a pack expansion but ARG2 is not.  */
17156           deduce2 = 0;
17157         }
17158       else if (TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
17159         {
17160           int i, len1 = list_length (args1);
17161           tree parmvec = make_tree_vec (1);
17162           tree argvec = make_tree_vec (len1);
17163           tree ta = args1;
17164
17165           /* Setup the parameter vector, which contains only ARG1.  */
17166           TREE_VEC_ELT (parmvec, 0) = arg2;
17167
17168           /* Setup the argument vector, which contains the remaining
17169              arguments.  */
17170           for (i = 0; i < len1; i++, ta = TREE_CHAIN (ta))
17171             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
17172
17173           deduce2 = (unify_pack_expansion (tparms2, targs2, parmvec,
17174                                            argvec, DEDUCE_EXACT,
17175                                            /*subr=*/true, /*explain_p=*/false)
17176                      == 0);
17177
17178           /* We cannot deduce in the other direction, because ARG2 is
17179              a pack expansion but ARG1 is not.*/
17180           deduce1 = 0;
17181         }
17182
17183       else
17184         {
17185           /* The normal case, where neither argument is a pack
17186              expansion.  */
17187           deduce1 = (unify (tparms1, targs1, arg1, arg2,
17188                             UNIFY_ALLOW_NONE, /*explain_p=*/false)
17189                      == 0);
17190           deduce2 = (unify (tparms2, targs2, arg2, arg1,
17191                             UNIFY_ALLOW_NONE, /*explain_p=*/false)
17192                      == 0);
17193         }
17194
17195       /* If we couldn't deduce arguments for tparms1 to make arg1 match
17196          arg2, then arg2 is not as specialized as arg1.  */
17197       if (!deduce1)
17198         lose2 = true;
17199       if (!deduce2)
17200         lose1 = true;
17201
17202       /* "If, for a given type, deduction succeeds in both directions
17203          (i.e., the types are identical after the transformations above)
17204          and if the type from the argument template is more cv-qualified
17205          than the type from the parameter template (as described above)
17206          that type is considered to be more specialized than the other. If
17207          neither type is more cv-qualified than the other then neither type
17208          is more specialized than the other."  */
17209
17210       if (deduce1 && deduce2
17211           && quals1 != quals2 && quals1 >= 0 && quals2 >= 0)
17212         {
17213           if ((quals1 & quals2) == quals2)
17214             lose2 = true;
17215           if ((quals1 & quals2) == quals1)
17216             lose1 = true;
17217         }
17218
17219       if (lose1 && lose2)
17220         /* We've failed to deduce something in either direction.
17221            These must be unordered.  */
17222         break;
17223
17224       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
17225           || TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
17226         /* We have already processed all of the arguments in our
17227            handing of the pack expansion type.  */
17228         len = 0;
17229
17230       args1 = TREE_CHAIN (args1);
17231       args2 = TREE_CHAIN (args2);
17232     }
17233
17234   /* "In most cases, all template parameters must have values in order for
17235      deduction to succeed, but for partial ordering purposes a template
17236      parameter may remain without a value provided it is not used in the
17237      types being used for partial ordering."
17238
17239      Thus, if we are missing any of the targs1 we need to substitute into
17240      origs1, then pat2 is not as specialized as pat1.  This can happen when
17241      there is a nondeduced context.  */
17242   if (!lose2 && check_undeduced_parms (targs1, origs1, args1))
17243     lose2 = true;
17244   if (!lose1 && check_undeduced_parms (targs2, origs2, args2))
17245     lose1 = true;
17246
17247   processing_template_decl--;
17248
17249   /* All things being equal, if the next argument is a pack expansion
17250      for one function but not for the other, prefer the
17251      non-variadic function.  FIXME this is bogus; see c++/41958.  */
17252   if (lose1 == lose2
17253       && args1 && TREE_VALUE (args1)
17254       && args2 && TREE_VALUE (args2))
17255     {
17256       lose1 = TREE_CODE (TREE_VALUE (args1)) == TYPE_PACK_EXPANSION;
17257       lose2 = TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION;
17258     }
17259
17260   if (lose1 == lose2)
17261     return 0;
17262   else if (!lose1)
17263     return 1;
17264   else
17265     return -1;
17266 }
17267
17268 /* Determine which of two partial specializations is more specialized.
17269
17270    PAT1 is a TREE_LIST whose TREE_TYPE is the _TYPE node corresponding
17271    to the first partial specialization.  The TREE_VALUE is the
17272    innermost set of template parameters for the partial
17273    specialization.  PAT2 is similar, but for the second template.
17274
17275    Return 1 if the first partial specialization is more specialized;
17276    -1 if the second is more specialized; 0 if neither is more
17277    specialized.
17278
17279    See [temp.class.order] for information about determining which of
17280    two templates is more specialized.  */
17281
17282 static int
17283 more_specialized_class (tree pat1, tree pat2)
17284 {
17285   tree targs;
17286   tree tmpl1, tmpl2;
17287   int winner = 0;
17288   bool any_deductions = false;
17289
17290   tmpl1 = TREE_TYPE (pat1);
17291   tmpl2 = TREE_TYPE (pat2);
17292
17293   /* Just like what happens for functions, if we are ordering between
17294      different class template specializations, we may encounter dependent
17295      types in the arguments, and we need our dependency check functions
17296      to behave correctly.  */
17297   ++processing_template_decl;
17298   targs = get_class_bindings (TREE_VALUE (pat1),
17299                               CLASSTYPE_TI_ARGS (tmpl1),
17300                               CLASSTYPE_TI_ARGS (tmpl2));
17301   if (targs)
17302     {
17303       --winner;
17304       any_deductions = true;
17305     }
17306
17307   targs = get_class_bindings (TREE_VALUE (pat2),
17308                               CLASSTYPE_TI_ARGS (tmpl2),
17309                               CLASSTYPE_TI_ARGS (tmpl1));
17310   if (targs)
17311     {
17312       ++winner;
17313       any_deductions = true;
17314     }
17315   --processing_template_decl;
17316
17317   /* In the case of a tie where at least one of the class templates
17318      has a parameter pack at the end, the template with the most
17319      non-packed parameters wins.  */
17320   if (winner == 0
17321       && any_deductions
17322       && (template_args_variadic_p (TREE_PURPOSE (pat1))
17323           || template_args_variadic_p (TREE_PURPOSE (pat2))))
17324     {
17325       tree args1 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat1));
17326       tree args2 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat2));
17327       int len1 = TREE_VEC_LENGTH (args1);
17328       int len2 = TREE_VEC_LENGTH (args2);
17329
17330       /* We don't count the pack expansion at the end.  */
17331       if (template_args_variadic_p (TREE_PURPOSE (pat1)))
17332         --len1;
17333       if (template_args_variadic_p (TREE_PURPOSE (pat2)))
17334         --len2;
17335
17336       if (len1 > len2)
17337         return 1;
17338       else if (len1 < len2)
17339         return -1;
17340     }
17341
17342   return winner;
17343 }
17344
17345 /* Return the template arguments that will produce the function signature
17346    DECL from the function template FN, with the explicit template
17347    arguments EXPLICIT_ARGS.  If CHECK_RETTYPE is true, the return type must
17348    also match.  Return NULL_TREE if no satisfactory arguments could be
17349    found.  */
17350
17351 static tree
17352 get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
17353 {
17354   int ntparms = DECL_NTPARMS (fn);
17355   tree targs = make_tree_vec (ntparms);
17356   tree decl_type;
17357   tree decl_arg_types;
17358   tree *args;
17359   unsigned int nargs, ix;
17360   tree arg;
17361
17362   /* Substitute the explicit template arguments into the type of DECL.
17363      The call to fn_type_unification will handle substitution into the
17364      FN.  */
17365   decl_type = TREE_TYPE (decl);
17366   if (explicit_args && uses_template_parms (decl_type))
17367     {
17368       tree tmpl;
17369       tree converted_args;
17370
17371       if (DECL_TEMPLATE_INFO (decl))
17372         tmpl = DECL_TI_TEMPLATE (decl);
17373       else
17374         /* We can get here for some invalid specializations.  */
17375         return NULL_TREE;
17376
17377       converted_args
17378         = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
17379                                  explicit_args, NULL_TREE,
17380                                  tf_none,
17381                                  /*require_all_args=*/false,
17382                                  /*use_default_args=*/false);
17383       if (converted_args == error_mark_node)
17384         return NULL_TREE;
17385
17386       decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE);
17387       if (decl_type == error_mark_node)
17388         return NULL_TREE;
17389     }
17390
17391   /* Never do unification on the 'this' parameter.  */
17392   decl_arg_types = skip_artificial_parms_for (decl, 
17393                                               TYPE_ARG_TYPES (decl_type));
17394
17395   nargs = list_length (decl_arg_types);
17396   args = XALLOCAVEC (tree, nargs);
17397   for (arg = decl_arg_types, ix = 0;
17398        arg != NULL_TREE && arg != void_list_node;
17399        arg = TREE_CHAIN (arg), ++ix)
17400     args[ix] = TREE_VALUE (arg);
17401
17402   if (fn_type_unification (fn, explicit_args, targs,
17403                            args, ix,
17404                            (check_rettype || DECL_CONV_FN_P (fn)
17405                             ? TREE_TYPE (decl_type) : NULL_TREE),
17406                            DEDUCE_EXACT, LOOKUP_NORMAL, /*explain_p=*/false))
17407     return NULL_TREE;
17408
17409   return targs;
17410 }
17411
17412 /* Return the innermost template arguments that, when applied to a
17413    template specialization whose innermost template parameters are
17414    TPARMS, and whose specialization arguments are SPEC_ARGS, yield the
17415    ARGS.
17416
17417    For example, suppose we have:
17418
17419      template <class T, class U> struct S {};
17420      template <class T> struct S<T*, int> {};
17421
17422    Then, suppose we want to get `S<double*, int>'.  The TPARMS will be
17423    {T}, the SPEC_ARGS will be {T*, int} and the ARGS will be {double*,
17424    int}.  The resulting vector will be {double}, indicating that `T'
17425    is bound to `double'.  */
17426
17427 static tree
17428 get_class_bindings (tree tparms, tree spec_args, tree args)
17429 {
17430   int i, ntparms = TREE_VEC_LENGTH (tparms);
17431   tree deduced_args;
17432   tree innermost_deduced_args;
17433
17434   innermost_deduced_args = make_tree_vec (ntparms);
17435   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
17436     {
17437       deduced_args = copy_node (args);
17438       SET_TMPL_ARGS_LEVEL (deduced_args,
17439                            TMPL_ARGS_DEPTH (deduced_args),
17440                            innermost_deduced_args);
17441     }
17442   else
17443     deduced_args = innermost_deduced_args;
17444
17445   if (unify (tparms, deduced_args,
17446              INNERMOST_TEMPLATE_ARGS (spec_args),
17447              INNERMOST_TEMPLATE_ARGS (args),
17448              UNIFY_ALLOW_NONE, /*explain_p=*/false))
17449     return NULL_TREE;
17450
17451   for (i =  0; i < ntparms; ++i)
17452     if (! TREE_VEC_ELT (innermost_deduced_args, i))
17453       return NULL_TREE;
17454
17455   /* Verify that nondeduced template arguments agree with the type
17456      obtained from argument deduction.
17457
17458      For example:
17459
17460        struct A { typedef int X; };
17461        template <class T, class U> struct C {};
17462        template <class T> struct C<T, typename T::X> {};
17463
17464      Then with the instantiation `C<A, int>', we can deduce that
17465      `T' is `A' but unify () does not check whether `typename T::X'
17466      is `int'.  */
17467   spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
17468   if (spec_args == error_mark_node
17469       /* We only need to check the innermost arguments; the other
17470          arguments will always agree.  */
17471       || !comp_template_args (INNERMOST_TEMPLATE_ARGS (spec_args),
17472                               INNERMOST_TEMPLATE_ARGS (args)))
17473     return NULL_TREE;
17474
17475   /* Now that we have bindings for all of the template arguments,
17476      ensure that the arguments deduced for the template template
17477      parameters have compatible template parameter lists.  See the use
17478      of template_template_parm_bindings_ok_p in fn_type_unification
17479      for more information.  */
17480   if (!template_template_parm_bindings_ok_p (tparms, deduced_args))
17481     return NULL_TREE;
17482
17483   return deduced_args;
17484 }
17485
17486 /* TEMPLATES is a TREE_LIST.  Each TREE_VALUE is a TEMPLATE_DECL.
17487    Return the TREE_LIST node with the most specialized template, if
17488    any.  If there is no most specialized template, the error_mark_node
17489    is returned.
17490
17491    Note that this function does not look at, or modify, the
17492    TREE_PURPOSE or TREE_TYPE of any of the nodes.  Since the node
17493    returned is one of the elements of INSTANTIATIONS, callers may
17494    store information in the TREE_PURPOSE or TREE_TYPE of the nodes,
17495    and retrieve it from the value returned.  */
17496
17497 tree
17498 most_specialized_instantiation (tree templates)
17499 {
17500   tree fn, champ;
17501
17502   ++processing_template_decl;
17503
17504   champ = templates;
17505   for (fn = TREE_CHAIN (templates); fn; fn = TREE_CHAIN (fn))
17506     {
17507       int fate = 0;
17508
17509       if (get_bindings (TREE_VALUE (champ),
17510                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
17511                         NULL_TREE, /*check_ret=*/true))
17512         fate--;
17513
17514       if (get_bindings (TREE_VALUE (fn),
17515                         DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
17516                         NULL_TREE, /*check_ret=*/true))
17517         fate++;
17518
17519       if (fate == -1)
17520         champ = fn;
17521       else if (!fate)
17522         {
17523           /* Equally specialized, move to next function.  If there
17524              is no next function, nothing's most specialized.  */
17525           fn = TREE_CHAIN (fn);
17526           champ = fn;
17527           if (!fn)
17528             break;
17529         }
17530     }
17531
17532   if (champ)
17533     /* Now verify that champ is better than everything earlier in the
17534        instantiation list.  */
17535     for (fn = templates; fn != champ; fn = TREE_CHAIN (fn))
17536       if (get_bindings (TREE_VALUE (champ),
17537                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
17538                         NULL_TREE, /*check_ret=*/true)
17539           || !get_bindings (TREE_VALUE (fn),
17540                             DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
17541                             NULL_TREE, /*check_ret=*/true))
17542         {
17543           champ = NULL_TREE;
17544           break;
17545         }
17546
17547   processing_template_decl--;
17548
17549   if (!champ)
17550     return error_mark_node;
17551
17552   return champ;
17553 }
17554
17555 /* If DECL is a specialization of some template, return the most
17556    general such template.  Otherwise, returns NULL_TREE.
17557
17558    For example, given:
17559
17560      template <class T> struct S { template <class U> void f(U); };
17561
17562    if TMPL is `template <class U> void S<int>::f(U)' this will return
17563    the full template.  This function will not trace past partial
17564    specializations, however.  For example, given in addition:
17565
17566      template <class T> struct S<T*> { template <class U> void f(U); };
17567
17568    if TMPL is `template <class U> void S<int*>::f(U)' this will return
17569    `template <class T> template <class U> S<T*>::f(U)'.  */
17570
17571 tree
17572 most_general_template (tree decl)
17573 {
17574   /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
17575      an immediate specialization.  */
17576   if (TREE_CODE (decl) == FUNCTION_DECL)
17577     {
17578       if (DECL_TEMPLATE_INFO (decl)) {
17579         decl = DECL_TI_TEMPLATE (decl);
17580
17581         /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
17582            template friend.  */
17583         if (TREE_CODE (decl) != TEMPLATE_DECL)
17584           return NULL_TREE;
17585       } else
17586         return NULL_TREE;
17587     }
17588
17589   /* Look for more and more general templates.  */
17590   while (DECL_TEMPLATE_INFO (decl))
17591     {
17592       /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
17593          (See cp-tree.h for details.)  */
17594       if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
17595         break;
17596
17597       if (CLASS_TYPE_P (TREE_TYPE (decl))
17598           && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
17599         break;
17600
17601       /* Stop if we run into an explicitly specialized class template.  */
17602       if (!DECL_NAMESPACE_SCOPE_P (decl)
17603           && DECL_CONTEXT (decl)
17604           && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
17605         break;
17606
17607       decl = DECL_TI_TEMPLATE (decl);
17608     }
17609
17610   return decl;
17611 }
17612
17613 /* Return the most specialized of the class template partial
17614    specializations of TMPL which can produce TYPE, a specialization of
17615    TMPL.  The value returned is actually a TREE_LIST; the TREE_TYPE is
17616    a _TYPE node corresponding to the partial specialization, while the
17617    TREE_PURPOSE is the set of template arguments that must be
17618    substituted into the TREE_TYPE in order to generate TYPE.
17619
17620    If the choice of partial specialization is ambiguous, a diagnostic
17621    is issued, and the error_mark_node is returned.  If there are no
17622    partial specializations of TMPL matching TYPE, then NULL_TREE is
17623    returned.  */
17624
17625 static tree
17626 most_specialized_class (tree type, tree tmpl, tsubst_flags_t complain)
17627 {
17628   tree list = NULL_TREE;
17629   tree t;
17630   tree champ;
17631   int fate;
17632   bool ambiguous_p;
17633   tree args;
17634   tree outer_args = NULL_TREE;
17635
17636   tmpl = most_general_template (tmpl);
17637   args = CLASSTYPE_TI_ARGS (type);
17638
17639   /* For determining which partial specialization to use, only the
17640      innermost args are interesting.  */
17641   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
17642     {
17643       outer_args = strip_innermost_template_args (args, 1);
17644       args = INNERMOST_TEMPLATE_ARGS (args);
17645     }
17646
17647   for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
17648     {
17649       tree partial_spec_args;
17650       tree spec_args;
17651       tree parms = TREE_VALUE (t);
17652
17653       partial_spec_args = CLASSTYPE_TI_ARGS (TREE_TYPE (t));
17654
17655       ++processing_template_decl;
17656
17657       if (outer_args)
17658         {
17659           int i;
17660
17661           /* Discard the outer levels of args, and then substitute in the
17662              template args from the enclosing class.  */
17663           partial_spec_args = INNERMOST_TEMPLATE_ARGS (partial_spec_args);
17664           partial_spec_args = tsubst_template_args
17665             (partial_spec_args, outer_args, tf_none, NULL_TREE);
17666
17667           /* PARMS already refers to just the innermost parms, but the
17668              template parms in partial_spec_args had their levels lowered
17669              by tsubst, so we need to do the same for the parm list.  We
17670              can't just tsubst the TREE_VEC itself, as tsubst wants to
17671              treat a TREE_VEC as an argument vector.  */
17672           parms = copy_node (parms);
17673           for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
17674             TREE_VEC_ELT (parms, i) =
17675               tsubst (TREE_VEC_ELT (parms, i), outer_args, tf_none, NULL_TREE);
17676
17677         }
17678
17679       partial_spec_args =
17680           coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
17681                                  add_to_template_args (outer_args,
17682                                                        partial_spec_args),
17683                                  tmpl, tf_none,
17684                                  /*require_all_args=*/true,
17685                                  /*use_default_args=*/true);
17686
17687       --processing_template_decl;
17688
17689       if (partial_spec_args == error_mark_node)
17690         return error_mark_node;
17691
17692       spec_args = get_class_bindings (parms,
17693                                       partial_spec_args,
17694                                       args);
17695       if (spec_args)
17696         {
17697           if (outer_args)
17698             spec_args = add_to_template_args (outer_args, spec_args);
17699           list = tree_cons (spec_args, TREE_VALUE (t), list);
17700           TREE_TYPE (list) = TREE_TYPE (t);
17701         }
17702     }
17703
17704   if (! list)
17705     return NULL_TREE;
17706
17707   ambiguous_p = false;
17708   t = list;
17709   champ = t;
17710   t = TREE_CHAIN (t);
17711   for (; t; t = TREE_CHAIN (t))
17712     {
17713       fate = more_specialized_class (champ, t);
17714       if (fate == 1)
17715         ;
17716       else
17717         {
17718           if (fate == 0)
17719             {
17720               t = TREE_CHAIN (t);
17721               if (! t)
17722                 {
17723                   ambiguous_p = true;
17724                   break;
17725                 }
17726             }
17727           champ = t;
17728         }
17729     }
17730
17731   if (!ambiguous_p)
17732     for (t = list; t && t != champ; t = TREE_CHAIN (t))
17733       {
17734         fate = more_specialized_class (champ, t);
17735         if (fate != 1)
17736           {
17737             ambiguous_p = true;
17738             break;
17739           }
17740       }
17741
17742   if (ambiguous_p)
17743     {
17744       const char *str;
17745       char *spaces = NULL;
17746       if (!(complain & tf_error))
17747         return error_mark_node;
17748       error ("ambiguous class template instantiation for %q#T", type);
17749       str = ngettext ("candidate is:", "candidates are:", list_length (list));
17750       for (t = list; t; t = TREE_CHAIN (t))
17751         {
17752           error ("%s %+#T", spaces ? spaces : str, TREE_TYPE (t));
17753           spaces = spaces ? spaces : get_spaces (str);
17754         }
17755       free (spaces);
17756       return error_mark_node;
17757     }
17758
17759   return champ;
17760 }
17761
17762 /* Explicitly instantiate DECL.  */
17763
17764 void
17765 do_decl_instantiation (tree decl, tree storage)
17766 {
17767   tree result = NULL_TREE;
17768   int extern_p = 0;
17769
17770   if (!decl || decl == error_mark_node)
17771     /* An error occurred, for which grokdeclarator has already issued
17772        an appropriate message.  */
17773     return;
17774   else if (! DECL_LANG_SPECIFIC (decl))
17775     {
17776       error ("explicit instantiation of non-template %q#D", decl);
17777       return;
17778     }
17779   else if (TREE_CODE (decl) == VAR_DECL)
17780     {
17781       /* There is an asymmetry here in the way VAR_DECLs and
17782          FUNCTION_DECLs are handled by grokdeclarator.  In the case of
17783          the latter, the DECL we get back will be marked as a
17784          template instantiation, and the appropriate
17785          DECL_TEMPLATE_INFO will be set up.  This does not happen for
17786          VAR_DECLs so we do the lookup here.  Probably, grokdeclarator
17787          should handle VAR_DECLs as it currently handles
17788          FUNCTION_DECLs.  */
17789       if (!DECL_CLASS_SCOPE_P (decl))
17790         {
17791           error ("%qD is not a static data member of a class template", decl);
17792           return;
17793         }
17794       result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
17795       if (!result || TREE_CODE (result) != VAR_DECL)
17796         {
17797           error ("no matching template for %qD found", decl);
17798           return;
17799         }
17800       if (!same_type_p (TREE_TYPE (result), TREE_TYPE (decl)))
17801         {
17802           error ("type %qT for explicit instantiation %qD does not match "
17803                  "declared type %qT", TREE_TYPE (result), decl,
17804                  TREE_TYPE (decl));
17805           return;
17806         }
17807     }
17808   else if (TREE_CODE (decl) != FUNCTION_DECL)
17809     {
17810       error ("explicit instantiation of %q#D", decl);
17811       return;
17812     }
17813   else
17814     result = decl;
17815
17816   /* Check for various error cases.  Note that if the explicit
17817      instantiation is valid the RESULT will currently be marked as an
17818      *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
17819      until we get here.  */
17820
17821   if (DECL_TEMPLATE_SPECIALIZATION (result))
17822     {
17823       /* DR 259 [temp.spec].
17824
17825          Both an explicit instantiation and a declaration of an explicit
17826          specialization shall not appear in a program unless the explicit
17827          instantiation follows a declaration of the explicit specialization.
17828
17829          For a given set of template parameters, if an explicit
17830          instantiation of a template appears after a declaration of an
17831          explicit specialization for that template, the explicit
17832          instantiation has no effect.  */
17833       return;
17834     }
17835   else if (DECL_EXPLICIT_INSTANTIATION (result))
17836     {
17837       /* [temp.spec]
17838
17839          No program shall explicitly instantiate any template more
17840          than once.
17841
17842          We check DECL_NOT_REALLY_EXTERN so as not to complain when
17843          the first instantiation was `extern' and the second is not,
17844          and EXTERN_P for the opposite case.  */
17845       if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
17846         permerror (input_location, "duplicate explicit instantiation of %q#D", result);
17847       /* If an "extern" explicit instantiation follows an ordinary
17848          explicit instantiation, the template is instantiated.  */
17849       if (extern_p)
17850         return;
17851     }
17852   else if (!DECL_IMPLICIT_INSTANTIATION (result))
17853     {
17854       error ("no matching template for %qD found", result);
17855       return;
17856     }
17857   else if (!DECL_TEMPLATE_INFO (result))
17858     {
17859       permerror (input_location, "explicit instantiation of non-template %q#D", result);
17860       return;
17861     }
17862
17863   if (storage == NULL_TREE)
17864     ;
17865   else if (storage == ridpointers[(int) RID_EXTERN])
17866     {
17867       if (!in_system_header && (cxx_dialect == cxx98))
17868         pedwarn (input_location, OPT_pedantic, 
17869                  "ISO C++ 1998 forbids the use of %<extern%> on explicit "
17870                  "instantiations");
17871       extern_p = 1;
17872     }
17873   else
17874     error ("storage class %qD applied to template instantiation", storage);
17875
17876   check_explicit_instantiation_namespace (result);
17877   mark_decl_instantiated (result, extern_p);
17878   if (! extern_p)
17879     instantiate_decl (result, /*defer_ok=*/1,
17880                       /*expl_inst_class_mem_p=*/false);
17881 }
17882
17883 static void
17884 mark_class_instantiated (tree t, int extern_p)
17885 {
17886   SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
17887   SET_CLASSTYPE_INTERFACE_KNOWN (t);
17888   CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
17889   TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
17890   if (! extern_p)
17891     {
17892       CLASSTYPE_DEBUG_REQUESTED (t) = 1;
17893       rest_of_type_compilation (t, 1);
17894     }
17895 }
17896
17897 /* Called from do_type_instantiation through binding_table_foreach to
17898    do recursive instantiation for the type bound in ENTRY.  */
17899 static void
17900 bt_instantiate_type_proc (binding_entry entry, void *data)
17901 {
17902   tree storage = *(tree *) data;
17903
17904   if (MAYBE_CLASS_TYPE_P (entry->type)
17905       && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
17906     do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
17907 }
17908
17909 /* Called from do_type_instantiation to instantiate a member
17910    (a member function or a static member variable) of an
17911    explicitly instantiated class template.  */
17912 static void
17913 instantiate_class_member (tree decl, int extern_p)
17914 {
17915   mark_decl_instantiated (decl, extern_p);
17916   if (! extern_p)
17917     instantiate_decl (decl, /*defer_ok=*/1,
17918                       /*expl_inst_class_mem_p=*/true);
17919 }
17920
17921 /* Perform an explicit instantiation of template class T.  STORAGE, if
17922    non-null, is the RID for extern, inline or static.  COMPLAIN is
17923    nonzero if this is called from the parser, zero if called recursively,
17924    since the standard is unclear (as detailed below).  */
17925
17926 void
17927 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
17928 {
17929   int extern_p = 0;
17930   int nomem_p = 0;
17931   int static_p = 0;
17932   int previous_instantiation_extern_p = 0;
17933
17934   if (TREE_CODE (t) == TYPE_DECL)
17935     t = TREE_TYPE (t);
17936
17937   if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
17938     {
17939       tree tmpl =
17940         (TYPE_TEMPLATE_INFO (t)) ? TYPE_TI_TEMPLATE (t) : NULL;
17941       if (tmpl)
17942         error ("explicit instantiation of non-class template %qD", tmpl);
17943       else
17944         error ("explicit instantiation of non-template type %qT", t);
17945       return;
17946     }
17947
17948   complete_type (t);
17949
17950   if (!COMPLETE_TYPE_P (t))
17951     {
17952       if (complain & tf_error)
17953         error ("explicit instantiation of %q#T before definition of template",
17954                t);
17955       return;
17956     }
17957
17958   if (storage != NULL_TREE)
17959     {
17960       if (!in_system_header)
17961         {
17962           if (storage == ridpointers[(int) RID_EXTERN])
17963             {
17964               if (cxx_dialect == cxx98)
17965                 pedwarn (input_location, OPT_pedantic, 
17966                          "ISO C++ 1998 forbids the use of %<extern%> on "
17967                          "explicit instantiations");
17968             }
17969           else
17970             pedwarn (input_location, OPT_pedantic, 
17971                      "ISO C++ forbids the use of %qE"
17972                      " on explicit instantiations", storage);
17973         }
17974
17975       if (storage == ridpointers[(int) RID_INLINE])
17976         nomem_p = 1;
17977       else if (storage == ridpointers[(int) RID_EXTERN])
17978         extern_p = 1;
17979       else if (storage == ridpointers[(int) RID_STATIC])
17980         static_p = 1;
17981       else
17982         {
17983           error ("storage class %qD applied to template instantiation",
17984                  storage);
17985           extern_p = 0;
17986         }
17987     }
17988
17989   if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
17990     {
17991       /* DR 259 [temp.spec].
17992
17993          Both an explicit instantiation and a declaration of an explicit
17994          specialization shall not appear in a program unless the explicit
17995          instantiation follows a declaration of the explicit specialization.
17996
17997          For a given set of template parameters, if an explicit
17998          instantiation of a template appears after a declaration of an
17999          explicit specialization for that template, the explicit
18000          instantiation has no effect.  */
18001       return;
18002     }
18003   else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
18004     {
18005       /* [temp.spec]
18006
18007          No program shall explicitly instantiate any template more
18008          than once.
18009
18010          If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
18011          instantiation was `extern'.  If EXTERN_P then the second is.
18012          These cases are OK.  */
18013       previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
18014
18015       if (!previous_instantiation_extern_p && !extern_p
18016           && (complain & tf_error))
18017         permerror (input_location, "duplicate explicit instantiation of %q#T", t);
18018
18019       /* If we've already instantiated the template, just return now.  */
18020       if (!CLASSTYPE_INTERFACE_ONLY (t))
18021         return;
18022     }
18023
18024   check_explicit_instantiation_namespace (TYPE_NAME (t));
18025   mark_class_instantiated (t, extern_p);
18026
18027   if (nomem_p)
18028     return;
18029
18030   {
18031     tree tmp;
18032
18033     /* In contrast to implicit instantiation, where only the
18034        declarations, and not the definitions, of members are
18035        instantiated, we have here:
18036
18037          [temp.explicit]
18038
18039          The explicit instantiation of a class template specialization
18040          implies the instantiation of all of its members not
18041          previously explicitly specialized in the translation unit
18042          containing the explicit instantiation.
18043
18044        Of course, we can't instantiate member template classes, since
18045        we don't have any arguments for them.  Note that the standard
18046        is unclear on whether the instantiation of the members are
18047        *explicit* instantiations or not.  However, the most natural
18048        interpretation is that it should be an explicit instantiation.  */
18049
18050     if (! static_p)
18051       for (tmp = TYPE_METHODS (t); tmp; tmp = DECL_CHAIN (tmp))
18052         if (TREE_CODE (tmp) == FUNCTION_DECL
18053             && DECL_TEMPLATE_INSTANTIATION (tmp))
18054           instantiate_class_member (tmp, extern_p);
18055
18056     for (tmp = TYPE_FIELDS (t); tmp; tmp = DECL_CHAIN (tmp))
18057       if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
18058         instantiate_class_member (tmp, extern_p);
18059
18060     if (CLASSTYPE_NESTED_UTDS (t))
18061       binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
18062                              bt_instantiate_type_proc, &storage);
18063   }
18064 }
18065
18066 /* Given a function DECL, which is a specialization of TMPL, modify
18067    DECL to be a re-instantiation of TMPL with the same template
18068    arguments.  TMPL should be the template into which tsubst'ing
18069    should occur for DECL, not the most general template.
18070
18071    One reason for doing this is a scenario like this:
18072
18073      template <class T>
18074      void f(const T&, int i);
18075
18076      void g() { f(3, 7); }
18077
18078      template <class T>
18079      void f(const T& t, const int i) { }
18080
18081    Note that when the template is first instantiated, with
18082    instantiate_template, the resulting DECL will have no name for the
18083    first parameter, and the wrong type for the second.  So, when we go
18084    to instantiate the DECL, we regenerate it.  */
18085
18086 static void
18087 regenerate_decl_from_template (tree decl, tree tmpl)
18088 {
18089   /* The arguments used to instantiate DECL, from the most general
18090      template.  */
18091   tree args;
18092   tree code_pattern;
18093
18094   args = DECL_TI_ARGS (decl);
18095   code_pattern = DECL_TEMPLATE_RESULT (tmpl);
18096
18097   /* Make sure that we can see identifiers, and compute access
18098      correctly.  */
18099   push_access_scope (decl);
18100
18101   if (TREE_CODE (decl) == FUNCTION_DECL)
18102     {
18103       tree decl_parm;
18104       tree pattern_parm;
18105       tree specs;
18106       int args_depth;
18107       int parms_depth;
18108
18109       args_depth = TMPL_ARGS_DEPTH (args);
18110       parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
18111       if (args_depth > parms_depth)
18112         args = get_innermost_template_args (args, parms_depth);
18113
18114       specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
18115                                               args, tf_error, NULL_TREE,
18116                                               /*defer_ok*/false);
18117       if (specs && specs != error_mark_node)
18118         TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
18119                                                     specs);
18120
18121       /* Merge parameter declarations.  */
18122       decl_parm = skip_artificial_parms_for (decl,
18123                                              DECL_ARGUMENTS (decl));
18124       pattern_parm
18125         = skip_artificial_parms_for (code_pattern,
18126                                      DECL_ARGUMENTS (code_pattern));
18127       while (decl_parm && !FUNCTION_PARAMETER_PACK_P (pattern_parm))
18128         {
18129           tree parm_type;
18130           tree attributes;
18131           
18132           if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
18133             DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
18134           parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
18135                               NULL_TREE);
18136           parm_type = type_decays_to (parm_type);
18137           if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
18138             TREE_TYPE (decl_parm) = parm_type;
18139           attributes = DECL_ATTRIBUTES (pattern_parm);
18140           if (DECL_ATTRIBUTES (decl_parm) != attributes)
18141             {
18142               DECL_ATTRIBUTES (decl_parm) = attributes;
18143               cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
18144             }
18145           decl_parm = DECL_CHAIN (decl_parm);
18146           pattern_parm = DECL_CHAIN (pattern_parm);
18147         }
18148       /* Merge any parameters that match with the function parameter
18149          pack.  */
18150       if (pattern_parm && FUNCTION_PARAMETER_PACK_P (pattern_parm))
18151         {
18152           int i, len;
18153           tree expanded_types;
18154           /* Expand the TYPE_PACK_EXPANSION that provides the types for
18155              the parameters in this function parameter pack.  */
18156           expanded_types = tsubst_pack_expansion (TREE_TYPE (pattern_parm), 
18157                                                  args, tf_error, NULL_TREE);
18158           len = TREE_VEC_LENGTH (expanded_types);
18159           for (i = 0; i < len; i++)
18160             {
18161               tree parm_type;
18162               tree attributes;
18163           
18164               if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
18165                 /* Rename the parameter to include the index.  */
18166                 DECL_NAME (decl_parm) = 
18167                   make_ith_pack_parameter_name (DECL_NAME (pattern_parm), i);
18168               parm_type = TREE_VEC_ELT (expanded_types, i);
18169               parm_type = type_decays_to (parm_type);
18170               if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
18171                 TREE_TYPE (decl_parm) = parm_type;
18172               attributes = DECL_ATTRIBUTES (pattern_parm);
18173               if (DECL_ATTRIBUTES (decl_parm) != attributes)
18174                 {
18175                   DECL_ATTRIBUTES (decl_parm) = attributes;
18176                   cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
18177                 }
18178               decl_parm = DECL_CHAIN (decl_parm);
18179             }
18180         }
18181       /* Merge additional specifiers from the CODE_PATTERN.  */
18182       if (DECL_DECLARED_INLINE_P (code_pattern)
18183           && !DECL_DECLARED_INLINE_P (decl))
18184         DECL_DECLARED_INLINE_P (decl) = 1;
18185     }
18186   else if (TREE_CODE (decl) == VAR_DECL)
18187     {
18188       DECL_INITIAL (decl) =
18189         tsubst_expr (DECL_INITIAL (code_pattern), args,
18190                      tf_error, DECL_TI_TEMPLATE (decl),
18191                      /*integral_constant_expression_p=*/false);
18192       if (VAR_HAD_UNKNOWN_BOUND (decl))
18193         TREE_TYPE (decl) = tsubst (TREE_TYPE (code_pattern), args,
18194                                    tf_error, DECL_TI_TEMPLATE (decl));
18195     }
18196   else
18197     gcc_unreachable ();
18198
18199   pop_access_scope (decl);
18200 }
18201
18202 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
18203    substituted to get DECL.  */
18204
18205 tree
18206 template_for_substitution (tree decl)
18207 {
18208   tree tmpl = DECL_TI_TEMPLATE (decl);
18209
18210   /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
18211      for the instantiation.  This is not always the most general
18212      template.  Consider, for example:
18213
18214         template <class T>
18215         struct S { template <class U> void f();
18216                    template <> void f<int>(); };
18217
18218      and an instantiation of S<double>::f<int>.  We want TD to be the
18219      specialization S<T>::f<int>, not the more general S<T>::f<U>.  */
18220   while (/* An instantiation cannot have a definition, so we need a
18221             more general template.  */
18222          DECL_TEMPLATE_INSTANTIATION (tmpl)
18223            /* We must also deal with friend templates.  Given:
18224
18225                 template <class T> struct S {
18226                   template <class U> friend void f() {};
18227                 };
18228
18229               S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
18230               so far as the language is concerned, but that's still
18231               where we get the pattern for the instantiation from.  On
18232               other hand, if the definition comes outside the class, say:
18233
18234                 template <class T> struct S {
18235                   template <class U> friend void f();
18236                 };
18237                 template <class U> friend void f() {}
18238
18239               we don't need to look any further.  That's what the check for
18240               DECL_INITIAL is for.  */
18241           || (TREE_CODE (decl) == FUNCTION_DECL
18242               && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
18243               && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
18244     {
18245       /* The present template, TD, should not be a definition.  If it
18246          were a definition, we should be using it!  Note that we
18247          cannot restructure the loop to just keep going until we find
18248          a template with a definition, since that might go too far if
18249          a specialization was declared, but not defined.  */
18250       gcc_assert (TREE_CODE (decl) != VAR_DECL
18251                   || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl)));
18252
18253       /* Fetch the more general template.  */
18254       tmpl = DECL_TI_TEMPLATE (tmpl);
18255     }
18256
18257   return tmpl;
18258 }
18259
18260 /* Returns true if we need to instantiate this template instance even if we
18261    know we aren't going to emit it..  */
18262
18263 bool
18264 always_instantiate_p (tree decl)
18265 {
18266   /* We always instantiate inline functions so that we can inline them.  An
18267      explicit instantiation declaration prohibits implicit instantiation of
18268      non-inline functions.  With high levels of optimization, we would
18269      normally inline non-inline functions -- but we're not allowed to do
18270      that for "extern template" functions.  Therefore, we check
18271      DECL_DECLARED_INLINE_P, rather than possibly_inlined_p.  */
18272   return ((TREE_CODE (decl) == FUNCTION_DECL
18273            && DECL_DECLARED_INLINE_P (decl))
18274           /* And we need to instantiate static data members so that
18275              their initializers are available in integral constant
18276              expressions.  */
18277           || (TREE_CODE (decl) == VAR_DECL
18278               && decl_maybe_constant_var_p (decl)));
18279 }
18280
18281 /* If FN has a noexcept-specifier that hasn't been instantiated yet,
18282    instantiate it now, modifying TREE_TYPE (fn).  */
18283
18284 void
18285 maybe_instantiate_noexcept (tree fn)
18286 {
18287   tree fntype, spec, noex, clone;
18288
18289   if (DECL_CLONED_FUNCTION_P (fn))
18290     fn = DECL_CLONED_FUNCTION (fn);
18291   fntype = TREE_TYPE (fn);
18292   spec = TYPE_RAISES_EXCEPTIONS (fntype);
18293
18294   if (!DEFERRED_NOEXCEPT_SPEC_P (spec))
18295     return;
18296
18297   noex = TREE_PURPOSE (spec);
18298
18299   if (TREE_CODE (noex) == DEFERRED_NOEXCEPT)
18300     {
18301       if (push_tinst_level (fn))
18302         {
18303           push_access_scope (fn);
18304           input_location = DECL_SOURCE_LOCATION (fn);
18305           noex = tsubst_copy_and_build (DEFERRED_NOEXCEPT_PATTERN (noex),
18306                                         DEFERRED_NOEXCEPT_ARGS (noex),
18307                                         tf_warning_or_error, fn,
18308                                         /*function_p=*/false,
18309                                         /*integral_constant_expression_p=*/true);
18310           pop_access_scope (fn);
18311           pop_tinst_level ();
18312           spec = build_noexcept_spec (noex, tf_warning_or_error);
18313           if (spec == error_mark_node)
18314             spec = noexcept_false_spec;
18315         }
18316       else
18317         spec = noexcept_false_spec;
18318     }
18319   else
18320     {
18321       /* This is an implicitly declared function, so NOEX is a list of
18322          other functions to evaluate and merge.  */
18323       tree elt;
18324       spec = noexcept_true_spec;
18325       for (elt = noex; elt; elt = OVL_NEXT (elt))
18326         {
18327           tree fn = OVL_CURRENT (elt);
18328           tree subspec;
18329           maybe_instantiate_noexcept (fn);
18330           subspec = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn));
18331           spec = merge_exception_specifiers (spec, subspec, NULL_TREE);
18332         }
18333     }
18334
18335   TREE_TYPE (fn) = build_exception_variant (fntype, spec);
18336
18337   FOR_EACH_CLONE (clone, fn)
18338     {
18339       if (TREE_TYPE (clone) == fntype)
18340         TREE_TYPE (clone) = TREE_TYPE (fn);
18341       else
18342         TREE_TYPE (clone) = build_exception_variant (TREE_TYPE (clone), spec);
18343     }
18344 }
18345
18346 /* Produce the definition of D, a _DECL generated from a template.  If
18347    DEFER_OK is nonzero, then we don't have to actually do the
18348    instantiation now; we just have to do it sometime.  Normally it is
18349    an error if this is an explicit instantiation but D is undefined.
18350    EXPL_INST_CLASS_MEM_P is true iff D is a member of an
18351    explicitly instantiated class template.  */
18352
18353 tree
18354 instantiate_decl (tree d, int defer_ok,
18355                   bool expl_inst_class_mem_p)
18356 {
18357   tree tmpl = DECL_TI_TEMPLATE (d);
18358   tree gen_args;
18359   tree args;
18360   tree td;
18361   tree code_pattern;
18362   tree spec;
18363   tree gen_tmpl;
18364   bool pattern_defined;
18365   int need_push;
18366   location_t saved_loc = input_location;
18367   bool external_p;
18368
18369   /* This function should only be used to instantiate templates for
18370      functions and static member variables.  */
18371   gcc_assert (TREE_CODE (d) == FUNCTION_DECL
18372               || TREE_CODE (d) == VAR_DECL);
18373
18374   /* Variables are never deferred; if instantiation is required, they
18375      are instantiated right away.  That allows for better code in the
18376      case that an expression refers to the value of the variable --
18377      if the variable has a constant value the referring expression can
18378      take advantage of that fact.  */
18379   if (TREE_CODE (d) == VAR_DECL
18380       || DECL_DECLARED_CONSTEXPR_P (d))
18381     defer_ok = 0;
18382
18383   /* Don't instantiate cloned functions.  Instead, instantiate the
18384      functions they cloned.  */
18385   if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
18386     d = DECL_CLONED_FUNCTION (d);
18387
18388   if (DECL_TEMPLATE_INSTANTIATED (d)
18389       || (TREE_CODE (d) == FUNCTION_DECL
18390           && DECL_DEFAULTED_FN (d) && DECL_INITIAL (d))
18391       || DECL_TEMPLATE_SPECIALIZATION (d))
18392     /* D has already been instantiated or explicitly specialized, so
18393        there's nothing for us to do here.
18394
18395        It might seem reasonable to check whether or not D is an explicit
18396        instantiation, and, if so, stop here.  But when an explicit
18397        instantiation is deferred until the end of the compilation,
18398        DECL_EXPLICIT_INSTANTIATION is set, even though we still need to do
18399        the instantiation.  */
18400     return d;
18401
18402   /* Check to see whether we know that this template will be
18403      instantiated in some other file, as with "extern template"
18404      extension.  */
18405   external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
18406
18407   /* In general, we do not instantiate such templates.  */
18408   if (external_p && !always_instantiate_p (d))
18409     return d;
18410
18411   gen_tmpl = most_general_template (tmpl);
18412   gen_args = DECL_TI_ARGS (d);
18413
18414   if (tmpl != gen_tmpl)
18415     /* We should already have the extra args.  */
18416     gcc_assert (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (gen_tmpl))
18417                 == TMPL_ARGS_DEPTH (gen_args));
18418   /* And what's in the hash table should match D.  */
18419   gcc_assert ((spec = retrieve_specialization (gen_tmpl, gen_args, 0)) == d
18420               || spec == NULL_TREE);
18421
18422   /* This needs to happen before any tsubsting.  */
18423   if (! push_tinst_level (d))
18424     return d;
18425
18426   timevar_push (TV_TEMPLATE_INST);
18427
18428   /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
18429      for the instantiation.  */
18430   td = template_for_substitution (d);
18431   code_pattern = DECL_TEMPLATE_RESULT (td);
18432
18433   /* We should never be trying to instantiate a member of a class
18434      template or partial specialization.  */
18435   gcc_assert (d != code_pattern);
18436
18437   if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
18438       || DECL_TEMPLATE_SPECIALIZATION (td))
18439     /* In the case of a friend template whose definition is provided
18440        outside the class, we may have too many arguments.  Drop the
18441        ones we don't need.  The same is true for specializations.  */
18442     args = get_innermost_template_args
18443       (gen_args, TMPL_PARMS_DEPTH  (DECL_TEMPLATE_PARMS (td)));
18444   else
18445     args = gen_args;
18446
18447   if (TREE_CODE (d) == FUNCTION_DECL)
18448     pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE
18449                        || DECL_DEFAULTED_OUTSIDE_CLASS_P (code_pattern));
18450   else
18451     pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
18452
18453   /* We may be in the middle of deferred access check.  Disable it now.  */
18454   push_deferring_access_checks (dk_no_deferred);
18455
18456   /* Unless an explicit instantiation directive has already determined
18457      the linkage of D, remember that a definition is available for
18458      this entity.  */
18459   if (pattern_defined
18460       && !DECL_INTERFACE_KNOWN (d)
18461       && !DECL_NOT_REALLY_EXTERN (d))
18462     mark_definable (d);
18463
18464   DECL_SOURCE_LOCATION (td) = DECL_SOURCE_LOCATION (code_pattern);
18465   DECL_SOURCE_LOCATION (d) = DECL_SOURCE_LOCATION (code_pattern);
18466   input_location = DECL_SOURCE_LOCATION (d);
18467
18468   /* If D is a member of an explicitly instantiated class template,
18469      and no definition is available, treat it like an implicit
18470      instantiation.  */
18471   if (!pattern_defined && expl_inst_class_mem_p
18472       && DECL_EXPLICIT_INSTANTIATION (d))
18473     {
18474       /* Leave linkage flags alone on instantiations with anonymous
18475          visibility.  */
18476       if (TREE_PUBLIC (d))
18477         {
18478           DECL_NOT_REALLY_EXTERN (d) = 0;
18479           DECL_INTERFACE_KNOWN (d) = 0;
18480         }
18481       SET_DECL_IMPLICIT_INSTANTIATION (d);
18482     }
18483
18484   if (TREE_CODE (d) == FUNCTION_DECL)
18485     maybe_instantiate_noexcept (d);
18486
18487   /* Recheck the substitutions to obtain any warning messages
18488      about ignoring cv qualifiers.  Don't do this for artificial decls,
18489      as it breaks the context-sensitive substitution for lambda op(). */
18490   if (!defer_ok && !DECL_ARTIFICIAL (d))
18491     {
18492       tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
18493       tree type = TREE_TYPE (gen);
18494
18495       /* Make sure that we can see identifiers, and compute access
18496          correctly.  D is already the target FUNCTION_DECL with the
18497          right context.  */
18498       push_access_scope (d);
18499
18500       if (TREE_CODE (gen) == FUNCTION_DECL)
18501         {
18502           tsubst (DECL_ARGUMENTS (gen), gen_args, tf_warning_or_error, d);
18503           tsubst_exception_specification (type, gen_args, tf_warning_or_error,
18504                                           d, /*defer_ok*/true);
18505           /* Don't simply tsubst the function type, as that will give
18506              duplicate warnings about poor parameter qualifications.
18507              The function arguments are the same as the decl_arguments
18508              without the top level cv qualifiers.  */
18509           type = TREE_TYPE (type);
18510         }
18511       tsubst (type, gen_args, tf_warning_or_error, d);
18512
18513       pop_access_scope (d);
18514     }
18515
18516   /* Defer all other templates, unless we have been explicitly
18517      forbidden from doing so.  */
18518   if (/* If there is no definition, we cannot instantiate the
18519          template.  */
18520       ! pattern_defined
18521       /* If it's OK to postpone instantiation, do so.  */
18522       || defer_ok
18523       /* If this is a static data member that will be defined
18524          elsewhere, we don't want to instantiate the entire data
18525          member, but we do want to instantiate the initializer so that
18526          we can substitute that elsewhere.  */
18527       || (external_p && TREE_CODE (d) == VAR_DECL))
18528     {
18529       /* The definition of the static data member is now required so
18530          we must substitute the initializer.  */
18531       if (TREE_CODE (d) == VAR_DECL
18532           && !DECL_INITIAL (d)
18533           && DECL_INITIAL (code_pattern))
18534         {
18535           tree ns;
18536           tree init;
18537           bool const_init = false;
18538
18539           ns = decl_namespace_context (d);
18540           push_nested_namespace (ns);
18541           push_nested_class (DECL_CONTEXT (d));
18542           init = tsubst_expr (DECL_INITIAL (code_pattern),
18543                               args,
18544                               tf_warning_or_error, NULL_TREE,
18545                               /*integral_constant_expression_p=*/false);
18546           /* Make sure the initializer is still constant, in case of
18547              circular dependency (template/instantiate6.C). */
18548           const_init
18549             = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (code_pattern);
18550           cp_finish_decl (d, init, /*init_const_expr_p=*/const_init,
18551                           /*asmspec_tree=*/NULL_TREE,
18552                           LOOKUP_ONLYCONVERTING);
18553           pop_nested_class ();
18554           pop_nested_namespace (ns);
18555         }
18556
18557       /* We restore the source position here because it's used by
18558          add_pending_template.  */
18559       input_location = saved_loc;
18560
18561       if (at_eof && !pattern_defined
18562           && DECL_EXPLICIT_INSTANTIATION (d)
18563           && DECL_NOT_REALLY_EXTERN (d))
18564         /* [temp.explicit]
18565
18566            The definition of a non-exported function template, a
18567            non-exported member function template, or a non-exported
18568            member function or static data member of a class template
18569            shall be present in every translation unit in which it is
18570            explicitly instantiated.  */
18571         permerror (input_location,  "explicit instantiation of %qD "
18572                    "but no definition available", d);
18573
18574       /* If we're in unevaluated context, we just wanted to get the
18575          constant value; this isn't an odr use, so don't queue
18576          a full instantiation.  */
18577       if (cp_unevaluated_operand != 0)
18578         goto out;
18579       /* ??? Historically, we have instantiated inline functions, even
18580          when marked as "extern template".  */
18581       if (!(external_p && TREE_CODE (d) == VAR_DECL))
18582         add_pending_template (d);
18583       goto out;
18584     }
18585   /* Tell the repository that D is available in this translation unit
18586      -- and see if it is supposed to be instantiated here.  */
18587   if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
18588     {
18589       /* In a PCH file, despite the fact that the repository hasn't
18590          requested instantiation in the PCH it is still possible that
18591          an instantiation will be required in a file that includes the
18592          PCH.  */
18593       if (pch_file)
18594         add_pending_template (d);
18595       /* Instantiate inline functions so that the inliner can do its
18596          job, even though we'll not be emitting a copy of this
18597          function.  */
18598       if (!(TREE_CODE (d) == FUNCTION_DECL && possibly_inlined_p (d)))
18599         goto out;
18600     }
18601
18602   need_push = !cfun || !global_bindings_p ();
18603   if (need_push)
18604     push_to_top_level ();
18605
18606   /* Mark D as instantiated so that recursive calls to
18607      instantiate_decl do not try to instantiate it again.  */
18608   DECL_TEMPLATE_INSTANTIATED (d) = 1;
18609
18610   /* Regenerate the declaration in case the template has been modified
18611      by a subsequent redeclaration.  */
18612   regenerate_decl_from_template (d, td);
18613
18614   /* We already set the file and line above.  Reset them now in case
18615      they changed as a result of calling regenerate_decl_from_template.  */
18616   input_location = DECL_SOURCE_LOCATION (d);
18617
18618   if (TREE_CODE (d) == VAR_DECL)
18619     {
18620       tree init;
18621       bool const_init = false;
18622
18623       /* Clear out DECL_RTL; whatever was there before may not be right
18624          since we've reset the type of the declaration.  */
18625       SET_DECL_RTL (d, NULL);
18626       DECL_IN_AGGR_P (d) = 0;
18627
18628       /* The initializer is placed in DECL_INITIAL by
18629          regenerate_decl_from_template so we don't need to
18630          push/pop_access_scope again here.  Pull it out so that
18631          cp_finish_decl can process it.  */
18632       init = DECL_INITIAL (d);
18633       DECL_INITIAL (d) = NULL_TREE;
18634       DECL_INITIALIZED_P (d) = 0;
18635
18636       /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
18637          initializer.  That function will defer actual emission until
18638          we have a chance to determine linkage.  */
18639       DECL_EXTERNAL (d) = 0;
18640
18641       /* Enter the scope of D so that access-checking works correctly.  */
18642       push_nested_class (DECL_CONTEXT (d));
18643       const_init = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (code_pattern);
18644       cp_finish_decl (d, init, const_init, NULL_TREE, 0);
18645       pop_nested_class ();
18646     }
18647   else if (TREE_CODE (d) == FUNCTION_DECL && DECL_DEFAULTED_FN (code_pattern))
18648     synthesize_method (d);
18649   else if (TREE_CODE (d) == FUNCTION_DECL)
18650     {
18651       htab_t saved_local_specializations;
18652       tree subst_decl;
18653       tree tmpl_parm;
18654       tree spec_parm;
18655
18656       /* Save away the current list, in case we are instantiating one
18657          template from within the body of another.  */
18658       saved_local_specializations = local_specializations;
18659
18660       /* Set up the list of local specializations.  */
18661       local_specializations = htab_create (37,
18662                                            hash_local_specialization,
18663                                            eq_local_specializations,
18664                                            NULL);
18665
18666       /* Set up context.  */
18667       start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
18668
18669       /* Create substitution entries for the parameters.  */
18670       subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
18671       tmpl_parm = DECL_ARGUMENTS (subst_decl);
18672       spec_parm = DECL_ARGUMENTS (d);
18673       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
18674         {
18675           register_local_specialization (spec_parm, tmpl_parm);
18676           spec_parm = skip_artificial_parms_for (d, spec_parm);
18677           tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
18678         }
18679       for (; tmpl_parm; tmpl_parm = DECL_CHAIN (tmpl_parm))
18680         {
18681           if (!FUNCTION_PARAMETER_PACK_P (tmpl_parm))
18682             {
18683               register_local_specialization (spec_parm, tmpl_parm);
18684               spec_parm = DECL_CHAIN (spec_parm);
18685             }
18686           else
18687             {
18688               /* Register the (value) argument pack as a specialization of
18689                  TMPL_PARM, then move on.  */
18690               tree argpack = extract_fnparm_pack (tmpl_parm, &spec_parm);
18691               register_local_specialization (argpack, tmpl_parm);
18692             }
18693         }
18694       gcc_assert (!spec_parm);
18695
18696       /* Substitute into the body of the function.  */
18697       tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
18698                    tf_warning_or_error, tmpl,
18699                    /*integral_constant_expression_p=*/false);
18700
18701       /* Set the current input_location to the end of the function
18702          so that finish_function knows where we are.  */
18703       input_location = DECL_STRUCT_FUNCTION (code_pattern)->function_end_locus;
18704
18705       /* We don't need the local specializations any more.  */
18706       htab_delete (local_specializations);
18707       local_specializations = saved_local_specializations;
18708
18709       /* Finish the function.  */
18710       d = finish_function (0);
18711       expand_or_defer_fn (d);
18712     }
18713
18714   /* We're not deferring instantiation any more.  */
18715   TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
18716
18717   if (need_push)
18718     pop_from_top_level ();
18719
18720 out:
18721   input_location = saved_loc;
18722   pop_deferring_access_checks ();
18723   pop_tinst_level ();
18724
18725   timevar_pop (TV_TEMPLATE_INST);
18726
18727   return d;
18728 }
18729
18730 /* Run through the list of templates that we wish we could
18731    instantiate, and instantiate any we can.  RETRIES is the
18732    number of times we retry pending template instantiation.  */
18733
18734 void
18735 instantiate_pending_templates (int retries)
18736 {
18737   int reconsider;
18738   location_t saved_loc = input_location;
18739
18740   /* Instantiating templates may trigger vtable generation.  This in turn
18741      may require further template instantiations.  We place a limit here
18742      to avoid infinite loop.  */
18743   if (pending_templates && retries >= max_tinst_depth)
18744     {
18745       tree decl = pending_templates->tinst->decl;
18746
18747       error ("template instantiation depth exceeds maximum of %d"
18748              " instantiating %q+D, possibly from virtual table generation"
18749              " (use -ftemplate-depth= to increase the maximum)",
18750              max_tinst_depth, decl);
18751       if (TREE_CODE (decl) == FUNCTION_DECL)
18752         /* Pretend that we defined it.  */
18753         DECL_INITIAL (decl) = error_mark_node;
18754       return;
18755     }
18756
18757   do
18758     {
18759       struct pending_template **t = &pending_templates;
18760       struct pending_template *last = NULL;
18761       reconsider = 0;
18762       while (*t)
18763         {
18764           tree instantiation = reopen_tinst_level ((*t)->tinst);
18765           bool complete = false;
18766
18767           if (TYPE_P (instantiation))
18768             {
18769               tree fn;
18770
18771               if (!COMPLETE_TYPE_P (instantiation))
18772                 {
18773                   instantiate_class_template (instantiation);
18774                   if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
18775                     for (fn = TYPE_METHODS (instantiation);
18776                          fn;
18777                          fn = TREE_CHAIN (fn))
18778                       if (! DECL_ARTIFICIAL (fn))
18779                         instantiate_decl (fn,
18780                                           /*defer_ok=*/0,
18781                                           /*expl_inst_class_mem_p=*/false);
18782                   if (COMPLETE_TYPE_P (instantiation))
18783                     reconsider = 1;
18784                 }
18785
18786               complete = COMPLETE_TYPE_P (instantiation);
18787             }
18788           else
18789             {
18790               if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
18791                   && !DECL_TEMPLATE_INSTANTIATED (instantiation))
18792                 {
18793                   instantiation
18794                     = instantiate_decl (instantiation,
18795                                         /*defer_ok=*/0,
18796                                         /*expl_inst_class_mem_p=*/false);
18797                   if (DECL_TEMPLATE_INSTANTIATED (instantiation))
18798                     reconsider = 1;
18799                 }
18800
18801               complete = (DECL_TEMPLATE_SPECIALIZATION (instantiation)
18802                           || DECL_TEMPLATE_INSTANTIATED (instantiation));
18803             }
18804
18805           if (complete)
18806             /* If INSTANTIATION has been instantiated, then we don't
18807                need to consider it again in the future.  */
18808             *t = (*t)->next;
18809           else
18810             {
18811               last = *t;
18812               t = &(*t)->next;
18813             }
18814           tinst_depth = 0;
18815           current_tinst_level = NULL;
18816         }
18817       last_pending_template = last;
18818     }
18819   while (reconsider);
18820
18821   input_location = saved_loc;
18822 }
18823
18824 /* Substitute ARGVEC into T, which is a list of initializers for
18825    either base class or a non-static data member.  The TREE_PURPOSEs
18826    are DECLs, and the TREE_VALUEs are the initializer values.  Used by
18827    instantiate_decl.  */
18828
18829 static tree
18830 tsubst_initializer_list (tree t, tree argvec)
18831 {
18832   tree inits = NULL_TREE;
18833
18834   for (; t; t = TREE_CHAIN (t))
18835     {
18836       tree decl;
18837       tree init;
18838       tree expanded_bases = NULL_TREE;
18839       tree expanded_arguments = NULL_TREE;
18840       int i, len = 1;
18841
18842       if (TREE_CODE (TREE_PURPOSE (t)) == TYPE_PACK_EXPANSION)
18843         {
18844           tree expr;
18845           tree arg;
18846
18847           /* Expand the base class expansion type into separate base
18848              classes.  */
18849           expanded_bases = tsubst_pack_expansion (TREE_PURPOSE (t), argvec,
18850                                                  tf_warning_or_error,
18851                                                  NULL_TREE);
18852           if (expanded_bases == error_mark_node)
18853             continue;
18854           
18855           /* We'll be building separate TREE_LISTs of arguments for
18856              each base.  */
18857           len = TREE_VEC_LENGTH (expanded_bases);
18858           expanded_arguments = make_tree_vec (len);
18859           for (i = 0; i < len; i++)
18860             TREE_VEC_ELT (expanded_arguments, i) = NULL_TREE;
18861
18862           /* Build a dummy EXPR_PACK_EXPANSION that will be used to
18863              expand each argument in the TREE_VALUE of t.  */
18864           expr = make_node (EXPR_PACK_EXPANSION);
18865           PACK_EXPANSION_PARAMETER_PACKS (expr) =
18866             PACK_EXPANSION_PARAMETER_PACKS (TREE_PURPOSE (t));
18867
18868           if (TREE_VALUE (t) == void_type_node)
18869             /* VOID_TYPE_NODE is used to indicate
18870                value-initialization.  */
18871             {
18872               for (i = 0; i < len; i++)
18873                 TREE_VEC_ELT (expanded_arguments, i) = void_type_node;
18874             }
18875           else
18876             {
18877               /* Substitute parameter packs into each argument in the
18878                  TREE_LIST.  */
18879               in_base_initializer = 1;
18880               for (arg = TREE_VALUE (t); arg; arg = TREE_CHAIN (arg))
18881                 {
18882                   tree expanded_exprs;
18883
18884                   /* Expand the argument.  */
18885                   SET_PACK_EXPANSION_PATTERN (expr, TREE_VALUE (arg));
18886                   expanded_exprs 
18887                     = tsubst_pack_expansion (expr, argvec,
18888                                              tf_warning_or_error,
18889                                              NULL_TREE);
18890                   if (expanded_exprs == error_mark_node)
18891                     continue;
18892
18893                   /* Prepend each of the expanded expressions to the
18894                      corresponding TREE_LIST in EXPANDED_ARGUMENTS.  */
18895                   for (i = 0; i < len; i++)
18896                     {
18897                       TREE_VEC_ELT (expanded_arguments, i) = 
18898                         tree_cons (NULL_TREE, 
18899                                    TREE_VEC_ELT (expanded_exprs, i),
18900                                    TREE_VEC_ELT (expanded_arguments, i));
18901                     }
18902                 }
18903               in_base_initializer = 0;
18904
18905               /* Reverse all of the TREE_LISTs in EXPANDED_ARGUMENTS,
18906                  since we built them backwards.  */
18907               for (i = 0; i < len; i++)
18908                 {
18909                   TREE_VEC_ELT (expanded_arguments, i) = 
18910                     nreverse (TREE_VEC_ELT (expanded_arguments, i));
18911                 }
18912             }
18913         }
18914
18915       for (i = 0; i < len; ++i)
18916         {
18917           if (expanded_bases)
18918             {
18919               decl = TREE_VEC_ELT (expanded_bases, i);
18920               decl = expand_member_init (decl);
18921               init = TREE_VEC_ELT (expanded_arguments, i);
18922             }
18923           else
18924             {
18925               decl = tsubst_copy (TREE_PURPOSE (t), argvec, 
18926                                   tf_warning_or_error, NULL_TREE);
18927
18928               decl = expand_member_init (decl);
18929               if (decl && !DECL_P (decl))
18930                 in_base_initializer = 1;
18931
18932               init = TREE_VALUE (t);
18933               if (init != void_type_node)
18934                 init = tsubst_expr (init, argvec,
18935                                     tf_warning_or_error, NULL_TREE,
18936                                     /*integral_constant_expression_p=*/false);
18937               in_base_initializer = 0;
18938             }
18939
18940           if (decl)
18941             {
18942               init = build_tree_list (decl, init);
18943               TREE_CHAIN (init) = inits;
18944               inits = init;
18945             }
18946         }
18947     }
18948   return inits;
18949 }
18950
18951 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL.  */
18952
18953 static void
18954 set_current_access_from_decl (tree decl)
18955 {
18956   if (TREE_PRIVATE (decl))
18957     current_access_specifier = access_private_node;
18958   else if (TREE_PROTECTED (decl))
18959     current_access_specifier = access_protected_node;
18960   else
18961     current_access_specifier = access_public_node;
18962 }
18963
18964 /* Instantiate an enumerated type.  TAG is the template type, NEWTAG
18965    is the instantiation (which should have been created with
18966    start_enum) and ARGS are the template arguments to use.  */
18967
18968 static void
18969 tsubst_enum (tree tag, tree newtag, tree args)
18970 {
18971   tree e;
18972
18973   if (SCOPED_ENUM_P (newtag))
18974     begin_scope (sk_scoped_enum, newtag);
18975
18976   for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
18977     {
18978       tree value;
18979       tree decl;
18980
18981       decl = TREE_VALUE (e);
18982       /* Note that in a template enum, the TREE_VALUE is the
18983          CONST_DECL, not the corresponding INTEGER_CST.  */
18984       value = tsubst_expr (DECL_INITIAL (decl),
18985                            args, tf_warning_or_error, NULL_TREE,
18986                            /*integral_constant_expression_p=*/true);
18987
18988       /* Give this enumeration constant the correct access.  */
18989       set_current_access_from_decl (decl);
18990
18991       /* Actually build the enumerator itself.  */
18992       build_enumerator
18993         (DECL_NAME (decl), value, newtag, DECL_SOURCE_LOCATION (decl));
18994     }
18995
18996   if (SCOPED_ENUM_P (newtag))
18997     finish_scope ();
18998
18999   finish_enum_value_list (newtag);
19000   finish_enum (newtag);
19001
19002   DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
19003     = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
19004 }
19005
19006 /* DECL is a FUNCTION_DECL that is a template specialization.  Return
19007    its type -- but without substituting the innermost set of template
19008    arguments.  So, innermost set of template parameters will appear in
19009    the type.  */
19010
19011 tree
19012 get_mostly_instantiated_function_type (tree decl)
19013 {
19014   tree fn_type;
19015   tree tmpl;
19016   tree targs;
19017   tree tparms;
19018   int parm_depth;
19019
19020   tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
19021   targs = DECL_TI_ARGS (decl);
19022   tparms = DECL_TEMPLATE_PARMS (tmpl);
19023   parm_depth = TMPL_PARMS_DEPTH (tparms);
19024
19025   /* There should be as many levels of arguments as there are levels
19026      of parameters.  */
19027   gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
19028
19029   fn_type = TREE_TYPE (tmpl);
19030
19031   if (parm_depth == 1)
19032     /* No substitution is necessary.  */
19033     ;
19034   else
19035     {
19036       int i;
19037       tree partial_args;
19038
19039       /* Replace the innermost level of the TARGS with NULL_TREEs to
19040          let tsubst know not to substitute for those parameters.  */
19041       partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
19042       for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
19043         SET_TMPL_ARGS_LEVEL (partial_args, i,
19044                              TMPL_ARGS_LEVEL (targs, i));
19045       SET_TMPL_ARGS_LEVEL (partial_args,
19046                            TMPL_ARGS_DEPTH (targs),
19047                            make_tree_vec (DECL_NTPARMS (tmpl)));
19048
19049       /* Make sure that we can see identifiers, and compute access
19050          correctly.  */
19051       push_access_scope (decl);
19052
19053       ++processing_template_decl;
19054       /* Now, do the (partial) substitution to figure out the
19055          appropriate function type.  */
19056       fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
19057       --processing_template_decl;
19058
19059       /* Substitute into the template parameters to obtain the real
19060          innermost set of parameters.  This step is important if the
19061          innermost set of template parameters contains value
19062          parameters whose types depend on outer template parameters.  */
19063       TREE_VEC_LENGTH (partial_args)--;
19064       tparms = tsubst_template_parms (tparms, partial_args, tf_error);
19065
19066       pop_access_scope (decl);
19067     }
19068
19069   return fn_type;
19070 }
19071
19072 /* Return truthvalue if we're processing a template different from
19073    the last one involved in diagnostics.  */
19074 int
19075 problematic_instantiation_changed (void)
19076 {
19077   return current_tinst_level != last_error_tinst_level;
19078 }
19079
19080 /* Remember current template involved in diagnostics.  */
19081 void
19082 record_last_problematic_instantiation (void)
19083 {
19084   last_error_tinst_level = current_tinst_level;
19085 }
19086
19087 struct tinst_level *
19088 current_instantiation (void)
19089 {
19090   return current_tinst_level;
19091 }
19092
19093 /* [temp.param] Check that template non-type parm TYPE is of an allowable
19094    type. Return zero for ok, nonzero for disallowed. Issue error and
19095    warning messages under control of COMPLAIN.  */
19096
19097 static int
19098 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
19099 {
19100   if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
19101     return 0;
19102   else if (POINTER_TYPE_P (type))
19103     return 0;
19104   else if (TYPE_PTR_TO_MEMBER_P (type))
19105     return 0;
19106   else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
19107     return 0;
19108   else if (TREE_CODE (type) == TYPENAME_TYPE)
19109     return 0;
19110   else if (TREE_CODE (type) == DECLTYPE_TYPE)
19111     return 0;
19112   else if (TREE_CODE (type) == NULLPTR_TYPE)
19113     return 0;
19114
19115   if (complain & tf_error)
19116     {
19117       if (type == error_mark_node)
19118         inform (input_location, "invalid template non-type parameter");
19119       else
19120         error ("%q#T is not a valid type for a template non-type parameter",
19121                type);
19122     }
19123   return 1;
19124 }
19125
19126 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
19127    Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
19128
19129 static bool
19130 dependent_type_p_r (tree type)
19131 {
19132   tree scope;
19133
19134   /* [temp.dep.type]
19135
19136      A type is dependent if it is:
19137
19138      -- a template parameter. Template template parameters are types
19139         for us (since TYPE_P holds true for them) so we handle
19140         them here.  */
19141   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
19142       || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
19143     return true;
19144   /* -- a qualified-id with a nested-name-specifier which contains a
19145         class-name that names a dependent type or whose unqualified-id
19146         names a dependent type.  */
19147   if (TREE_CODE (type) == TYPENAME_TYPE)
19148     return true;
19149   /* -- a cv-qualified type where the cv-unqualified type is
19150         dependent.  */
19151   type = TYPE_MAIN_VARIANT (type);
19152   /* -- a compound type constructed from any dependent type.  */
19153   if (TYPE_PTR_TO_MEMBER_P (type))
19154     return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
19155             || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
19156                                            (type)));
19157   else if (TREE_CODE (type) == POINTER_TYPE
19158            || TREE_CODE (type) == REFERENCE_TYPE)
19159     return dependent_type_p (TREE_TYPE (type));
19160   else if (TREE_CODE (type) == FUNCTION_TYPE
19161            || TREE_CODE (type) == METHOD_TYPE)
19162     {
19163       tree arg_type;
19164
19165       if (dependent_type_p (TREE_TYPE (type)))
19166         return true;
19167       for (arg_type = TYPE_ARG_TYPES (type);
19168            arg_type;
19169            arg_type = TREE_CHAIN (arg_type))
19170         if (dependent_type_p (TREE_VALUE (arg_type)))
19171           return true;
19172       return false;
19173     }
19174   /* -- an array type constructed from any dependent type or whose
19175         size is specified by a constant expression that is
19176         value-dependent.
19177
19178         We checked for type- and value-dependence of the bounds in
19179         compute_array_index_type, so TYPE_DEPENDENT_P is already set.  */
19180   if (TREE_CODE (type) == ARRAY_TYPE)
19181     {
19182       if (TYPE_DOMAIN (type)
19183           && dependent_type_p (TYPE_DOMAIN (type)))
19184         return true;
19185       return dependent_type_p (TREE_TYPE (type));
19186     }
19187
19188   /* -- a template-id in which either the template name is a template
19189      parameter ...  */
19190   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
19191     return true;
19192   /* ... or any of the template arguments is a dependent type or
19193         an expression that is type-dependent or value-dependent.  */
19194   else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
19195            && (any_dependent_template_arguments_p
19196                (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
19197     return true;
19198
19199   /* All TYPEOF_TYPEs, DECLTYPE_TYPEs, and UNDERLYING_TYPEs are
19200      dependent; if the argument of the `typeof' expression is not
19201      type-dependent, then it should already been have resolved.  */
19202   if (TREE_CODE (type) == TYPEOF_TYPE
19203       || TREE_CODE (type) == DECLTYPE_TYPE
19204       || TREE_CODE (type) == UNDERLYING_TYPE)
19205     return true;
19206
19207   /* A template argument pack is dependent if any of its packed
19208      arguments are.  */
19209   if (TREE_CODE (type) == TYPE_ARGUMENT_PACK)
19210     {
19211       tree args = ARGUMENT_PACK_ARGS (type);
19212       int i, len = TREE_VEC_LENGTH (args);
19213       for (i = 0; i < len; ++i)
19214         if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
19215           return true;
19216     }
19217
19218   /* All TYPE_PACK_EXPANSIONs are dependent, because parameter packs must
19219      be template parameters.  */
19220   if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
19221     return true;
19222
19223   /* The standard does not specifically mention types that are local
19224      to template functions or local classes, but they should be
19225      considered dependent too.  For example:
19226
19227        template <int I> void f() {
19228          enum E { a = I };
19229          S<sizeof (E)> s;
19230        }
19231
19232      The size of `E' cannot be known until the value of `I' has been
19233      determined.  Therefore, `E' must be considered dependent.  */
19234   scope = TYPE_CONTEXT (type);
19235   if (scope && TYPE_P (scope))
19236     return dependent_type_p (scope);
19237   /* Don't use type_dependent_expression_p here, as it can lead
19238      to infinite recursion trying to determine whether a lambda
19239      nested in a lambda is dependent (c++/47687).  */
19240   else if (scope && TREE_CODE (scope) == FUNCTION_DECL
19241            && DECL_LANG_SPECIFIC (scope)
19242            && DECL_TEMPLATE_INFO (scope)
19243            && (any_dependent_template_arguments_p
19244                (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (scope)))))
19245     return true;
19246
19247   /* Other types are non-dependent.  */
19248   return false;
19249 }
19250
19251 /* Returns TRUE if TYPE is dependent, in the sense of
19252    [temp.dep.type].  Note that a NULL type is considered dependent.  */
19253
19254 bool
19255 dependent_type_p (tree type)
19256 {
19257   /* If there are no template parameters in scope, then there can't be
19258      any dependent types.  */
19259   if (!processing_template_decl)
19260     {
19261       /* If we are not processing a template, then nobody should be
19262          providing us with a dependent type.  */
19263       gcc_assert (type);
19264       gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM || is_auto (type));
19265       return false;
19266     }
19267
19268   /* If the type is NULL, we have not computed a type for the entity
19269      in question; in that case, the type is dependent.  */
19270   if (!type)
19271     return true;
19272
19273   /* Erroneous types can be considered non-dependent.  */
19274   if (type == error_mark_node)
19275     return false;
19276
19277   /* If we have not already computed the appropriate value for TYPE,
19278      do so now.  */
19279   if (!TYPE_DEPENDENT_P_VALID (type))
19280     {
19281       TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
19282       TYPE_DEPENDENT_P_VALID (type) = 1;
19283     }
19284
19285   return TYPE_DEPENDENT_P (type);
19286 }
19287
19288 /* Returns TRUE if SCOPE is a dependent scope, in which we can't do any
19289    lookup.  In other words, a dependent type that is not the current
19290    instantiation.  */
19291
19292 bool
19293 dependent_scope_p (tree scope)
19294 {
19295   return (scope && TYPE_P (scope) && dependent_type_p (scope)
19296           && !currently_open_class (scope));
19297 }
19298
19299 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
19300    [temp.dep.constexpr].  EXPRESSION is already known to be a constant
19301    expression.  */
19302
19303 /* Note that this predicate is not appropriate for general expressions;
19304    only constant expressions (that satisfy potential_constant_expression)
19305    can be tested for value dependence.
19306
19307    We should really also have a predicate for "instantiation-dependent".
19308
19309    fold_non_dependent_expr: fold if constant and not type-dependent and not value-dependent.
19310      (what about instantiation-dependent constant-expressions?)
19311    is_late_template_attribute: defer if instantiation-dependent.
19312    compute_array_index_type: proceed if constant and not t- or v-dependent
19313      if instantiation-dependent, need to remember full expression
19314    uses_template_parms: FIXME - need to audit callers
19315    tsubst_decl [function_decl]: Why is this using value_dependent_expression_p?
19316    dependent_type_p [array_type]: dependent if index type is dependent
19317      (or non-constant?)
19318    static_assert - instantiation-dependent */
19319
19320 bool
19321 value_dependent_expression_p (tree expression)
19322 {
19323   if (!processing_template_decl)
19324     return false;
19325
19326   /* A name declared with a dependent type.  */
19327   if (DECL_P (expression) && type_dependent_expression_p (expression))
19328     return true;
19329
19330   switch (TREE_CODE (expression))
19331     {
19332     case IDENTIFIER_NODE:
19333       /* A name that has not been looked up -- must be dependent.  */
19334       return true;
19335
19336     case TEMPLATE_PARM_INDEX:
19337       /* A non-type template parm.  */
19338       return true;
19339
19340     case CONST_DECL:
19341       /* A non-type template parm.  */
19342       if (DECL_TEMPLATE_PARM_P (expression))
19343         return true;
19344       return value_dependent_expression_p (DECL_INITIAL (expression));
19345
19346     case VAR_DECL:
19347        /* A constant with literal type and is initialized
19348           with an expression that is value-dependent.  */
19349       if (DECL_INITIAL (expression)
19350           && decl_constant_var_p (expression)
19351           && value_dependent_expression_p (DECL_INITIAL (expression)))
19352         return true;
19353       return false;
19354
19355     case DYNAMIC_CAST_EXPR:
19356     case STATIC_CAST_EXPR:
19357     case CONST_CAST_EXPR:
19358     case REINTERPRET_CAST_EXPR:
19359     case CAST_EXPR:
19360       /* These expressions are value-dependent if the type to which
19361          the cast occurs is dependent or the expression being casted
19362          is value-dependent.  */
19363       {
19364         tree type = TREE_TYPE (expression);
19365
19366         if (dependent_type_p (type))
19367           return true;
19368
19369         /* A functional cast has a list of operands.  */
19370         expression = TREE_OPERAND (expression, 0);
19371         if (!expression)
19372           {
19373             /* If there are no operands, it must be an expression such
19374                as "int()". This should not happen for aggregate types
19375                because it would form non-constant expressions.  */
19376             gcc_assert (cxx_dialect >= cxx0x
19377                         || INTEGRAL_OR_ENUMERATION_TYPE_P (type));
19378
19379             return false;
19380           }
19381
19382         if (TREE_CODE (expression) == TREE_LIST)
19383           return any_value_dependent_elements_p (expression);
19384
19385         return value_dependent_expression_p (expression);
19386       }
19387
19388     case SIZEOF_EXPR:
19389     case ALIGNOF_EXPR:
19390     case TYPEID_EXPR:
19391       /* A `sizeof' expression is value-dependent if the operand is
19392          type-dependent or is a pack expansion.  */
19393       expression = TREE_OPERAND (expression, 0);
19394       if (PACK_EXPANSION_P (expression))
19395         return true;
19396       else if (TYPE_P (expression))
19397         return dependent_type_p (expression);
19398       return type_dependent_expression_p (expression);
19399
19400     case AT_ENCODE_EXPR:
19401       /* An 'encode' expression is value-dependent if the operand is
19402          type-dependent.  */
19403       expression = TREE_OPERAND (expression, 0);
19404       return dependent_type_p (expression);
19405
19406     case NOEXCEPT_EXPR:
19407       expression = TREE_OPERAND (expression, 0);
19408       return type_dependent_expression_p (expression);
19409
19410     case SCOPE_REF:
19411       {
19412         tree name = TREE_OPERAND (expression, 1);
19413         return value_dependent_expression_p (name);
19414       }
19415
19416     case COMPONENT_REF:
19417       return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
19418               || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
19419
19420     case NONTYPE_ARGUMENT_PACK:
19421       /* A NONTYPE_ARGUMENT_PACK is value-dependent if any packed argument
19422          is value-dependent.  */
19423       {
19424         tree values = ARGUMENT_PACK_ARGS (expression);
19425         int i, len = TREE_VEC_LENGTH (values);
19426         
19427         for (i = 0; i < len; ++i)
19428           if (value_dependent_expression_p (TREE_VEC_ELT (values, i)))
19429             return true;
19430         
19431         return false;
19432       }
19433
19434     case TRAIT_EXPR:
19435       {
19436         tree type2 = TRAIT_EXPR_TYPE2 (expression);
19437         return (dependent_type_p (TRAIT_EXPR_TYPE1 (expression))
19438                 || (type2 ? dependent_type_p (type2) : false));
19439       }
19440
19441     case MODOP_EXPR:
19442       return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
19443               || (value_dependent_expression_p (TREE_OPERAND (expression, 2))));
19444
19445     case ARRAY_REF:
19446       return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
19447               || (value_dependent_expression_p (TREE_OPERAND (expression, 1))));
19448
19449     case ADDR_EXPR:
19450       {
19451         tree op = TREE_OPERAND (expression, 0);
19452         return (value_dependent_expression_p (op)
19453                 || has_value_dependent_address (op));
19454       }
19455
19456     case CALL_EXPR:
19457       {
19458         tree fn = get_callee_fndecl (expression);
19459         int i, nargs;
19460         if (!fn && value_dependent_expression_p (CALL_EXPR_FN (expression)))
19461           return true;
19462         nargs = call_expr_nargs (expression);
19463         for (i = 0; i < nargs; ++i)
19464           {
19465             tree op = CALL_EXPR_ARG (expression, i);
19466             /* In a call to a constexpr member function, look through the
19467                implicit ADDR_EXPR on the object argument so that it doesn't
19468                cause the call to be considered value-dependent.  We also
19469                look through it in potential_constant_expression.  */
19470             if (i == 0 && fn && DECL_DECLARED_CONSTEXPR_P (fn)
19471                 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
19472                 && TREE_CODE (op) == ADDR_EXPR)
19473               op = TREE_OPERAND (op, 0);
19474             if (value_dependent_expression_p (op))
19475               return true;
19476           }
19477         return false;
19478       }
19479
19480     case TEMPLATE_ID_EXPR:
19481       /* If a TEMPLATE_ID_EXPR involves a dependent name, it will be
19482          type-dependent.  */
19483       return type_dependent_expression_p (expression);
19484
19485     case CONSTRUCTOR:
19486       {
19487         unsigned ix;
19488         tree val;
19489         FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), ix, val)
19490           if (value_dependent_expression_p (val))
19491             return true;
19492         return false;
19493       }
19494
19495     default:
19496       /* A constant expression is value-dependent if any subexpression is
19497          value-dependent.  */
19498       switch (TREE_CODE_CLASS (TREE_CODE (expression)))
19499         {
19500         case tcc_reference:
19501         case tcc_unary:
19502         case tcc_comparison:
19503         case tcc_binary:
19504         case tcc_expression:
19505         case tcc_vl_exp:
19506           {
19507             int i, len = cp_tree_operand_length (expression);
19508
19509             for (i = 0; i < len; i++)
19510               {
19511                 tree t = TREE_OPERAND (expression, i);
19512
19513                 /* In some cases, some of the operands may be missing.l
19514                    (For example, in the case of PREDECREMENT_EXPR, the
19515                    amount to increment by may be missing.)  That doesn't
19516                    make the expression dependent.  */
19517                 if (t && value_dependent_expression_p (t))
19518                   return true;
19519               }
19520           }
19521           break;
19522         default:
19523           break;
19524         }
19525       break;
19526     }
19527
19528   /* The expression is not value-dependent.  */
19529   return false;
19530 }
19531
19532 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
19533    [temp.dep.expr].  Note that an expression with no type is
19534    considered dependent.  Other parts of the compiler arrange for an
19535    expression with type-dependent subexpressions to have no type, so
19536    this function doesn't have to be fully recursive.  */
19537
19538 bool
19539 type_dependent_expression_p (tree expression)
19540 {
19541   if (!processing_template_decl)
19542     return false;
19543
19544   if (expression == error_mark_node)
19545     return false;
19546
19547   /* An unresolved name is always dependent.  */
19548   if (TREE_CODE (expression) == IDENTIFIER_NODE
19549       || TREE_CODE (expression) == USING_DECL)
19550     return true;
19551
19552   /* Some expression forms are never type-dependent.  */
19553   if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
19554       || TREE_CODE (expression) == SIZEOF_EXPR
19555       || TREE_CODE (expression) == ALIGNOF_EXPR
19556       || TREE_CODE (expression) == AT_ENCODE_EXPR
19557       || TREE_CODE (expression) == NOEXCEPT_EXPR
19558       || TREE_CODE (expression) == TRAIT_EXPR
19559       || TREE_CODE (expression) == TYPEID_EXPR
19560       || TREE_CODE (expression) == DELETE_EXPR
19561       || TREE_CODE (expression) == VEC_DELETE_EXPR
19562       || TREE_CODE (expression) == THROW_EXPR)
19563     return false;
19564
19565   /* The types of these expressions depends only on the type to which
19566      the cast occurs.  */
19567   if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
19568       || TREE_CODE (expression) == STATIC_CAST_EXPR
19569       || TREE_CODE (expression) == CONST_CAST_EXPR
19570       || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
19571       || TREE_CODE (expression) == IMPLICIT_CONV_EXPR
19572       || TREE_CODE (expression) == CAST_EXPR)
19573     return dependent_type_p (TREE_TYPE (expression));
19574
19575   /* The types of these expressions depends only on the type created
19576      by the expression.  */
19577   if (TREE_CODE (expression) == NEW_EXPR
19578       || TREE_CODE (expression) == VEC_NEW_EXPR)
19579     {
19580       /* For NEW_EXPR tree nodes created inside a template, either
19581          the object type itself or a TREE_LIST may appear as the
19582          operand 1.  */
19583       tree type = TREE_OPERAND (expression, 1);
19584       if (TREE_CODE (type) == TREE_LIST)
19585         /* This is an array type.  We need to check array dimensions
19586            as well.  */
19587         return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
19588                || value_dependent_expression_p
19589                     (TREE_OPERAND (TREE_VALUE (type), 1));
19590       else
19591         return dependent_type_p (type);
19592     }
19593
19594   if (TREE_CODE (expression) == SCOPE_REF)
19595     {
19596       tree scope = TREE_OPERAND (expression, 0);
19597       tree name = TREE_OPERAND (expression, 1);
19598
19599       /* 14.6.2.2 [temp.dep.expr]: An id-expression is type-dependent if it
19600          contains an identifier associated by name lookup with one or more
19601          declarations declared with a dependent type, or...a
19602          nested-name-specifier or qualified-id that names a member of an
19603          unknown specialization.  */
19604       return (type_dependent_expression_p (name)
19605               || dependent_scope_p (scope));
19606     }
19607
19608   if (TREE_CODE (expression) == FUNCTION_DECL
19609       && DECL_LANG_SPECIFIC (expression)
19610       && DECL_TEMPLATE_INFO (expression)
19611       && (any_dependent_template_arguments_p
19612           (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
19613     return true;
19614
19615   if (TREE_CODE (expression) == TEMPLATE_DECL
19616       && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
19617     return false;
19618
19619   if (TREE_CODE (expression) == STMT_EXPR)
19620     expression = stmt_expr_value_expr (expression);
19621
19622   if (BRACE_ENCLOSED_INITIALIZER_P (expression))
19623     {
19624       tree elt;
19625       unsigned i;
19626
19627       FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), i, elt)
19628         {
19629           if (type_dependent_expression_p (elt))
19630             return true;
19631         }
19632       return false;
19633     }
19634
19635   /* A static data member of the current instantiation with incomplete
19636      array type is type-dependent, as the definition and specializations
19637      can have different bounds.  */
19638   if (TREE_CODE (expression) == VAR_DECL
19639       && DECL_CLASS_SCOPE_P (expression)
19640       && dependent_type_p (DECL_CONTEXT (expression))
19641       && VAR_HAD_UNKNOWN_BOUND (expression))
19642     return true;
19643
19644   if (TREE_TYPE (expression) == unknown_type_node)
19645     {
19646       if (TREE_CODE (expression) == ADDR_EXPR)
19647         return type_dependent_expression_p (TREE_OPERAND (expression, 0));
19648       if (TREE_CODE (expression) == COMPONENT_REF
19649           || TREE_CODE (expression) == OFFSET_REF)
19650         {
19651           if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
19652             return true;
19653           expression = TREE_OPERAND (expression, 1);
19654           if (TREE_CODE (expression) == IDENTIFIER_NODE)
19655             return false;
19656         }
19657       /* SCOPE_REF with non-null TREE_TYPE is always non-dependent.  */
19658       if (TREE_CODE (expression) == SCOPE_REF)
19659         return false;
19660
19661       if (BASELINK_P (expression))
19662         expression = BASELINK_FUNCTIONS (expression);
19663
19664       if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
19665         {
19666           if (any_dependent_template_arguments_p
19667               (TREE_OPERAND (expression, 1)))
19668             return true;
19669           expression = TREE_OPERAND (expression, 0);
19670         }
19671       gcc_assert (TREE_CODE (expression) == OVERLOAD
19672                   || TREE_CODE (expression) == FUNCTION_DECL);
19673
19674       while (expression)
19675         {
19676           if (type_dependent_expression_p (OVL_CURRENT (expression)))
19677             return true;
19678           expression = OVL_NEXT (expression);
19679         }
19680       return false;
19681     }
19682
19683   gcc_assert (TREE_CODE (expression) != TYPE_DECL);
19684
19685   return (dependent_type_p (TREE_TYPE (expression)));
19686 }
19687
19688 /* Like type_dependent_expression_p, but it also works while not processing
19689    a template definition, i.e. during substitution or mangling.  */
19690
19691 bool
19692 type_dependent_expression_p_push (tree expr)
19693 {
19694   bool b;
19695   ++processing_template_decl;
19696   b = type_dependent_expression_p (expr);
19697   --processing_template_decl;
19698   return b;
19699 }
19700
19701 /* Returns TRUE if ARGS contains a type-dependent expression.  */
19702
19703 bool
19704 any_type_dependent_arguments_p (const VEC(tree,gc) *args)
19705 {
19706   unsigned int i;
19707   tree arg;
19708
19709   FOR_EACH_VEC_ELT (tree, args, i, arg)
19710     {
19711       if (type_dependent_expression_p (arg))
19712         return true;
19713     }
19714   return false;
19715 }
19716
19717 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
19718    expressions) contains any type-dependent expressions.  */
19719
19720 bool
19721 any_type_dependent_elements_p (const_tree list)
19722 {
19723   for (; list; list = TREE_CHAIN (list))
19724     if (value_dependent_expression_p (TREE_VALUE (list)))
19725       return true;
19726
19727   return false;
19728 }
19729
19730 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
19731    expressions) contains any value-dependent expressions.  */
19732
19733 bool
19734 any_value_dependent_elements_p (const_tree list)
19735 {
19736   for (; list; list = TREE_CHAIN (list))
19737     if (value_dependent_expression_p (TREE_VALUE (list)))
19738       return true;
19739
19740   return false;
19741 }
19742
19743 /* Returns TRUE if the ARG (a template argument) is dependent.  */
19744
19745 bool
19746 dependent_template_arg_p (tree arg)
19747 {
19748   if (!processing_template_decl)
19749     return false;
19750
19751   /* Assume a template argument that was wrongly written by the user
19752      is dependent. This is consistent with what
19753      any_dependent_template_arguments_p [that calls this function]
19754      does.  */
19755   if (!arg || arg == error_mark_node)
19756     return true;
19757
19758   if (TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
19759     arg = ARGUMENT_PACK_SELECT_ARG (arg);
19760
19761   if (TREE_CODE (arg) == TEMPLATE_DECL
19762       || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
19763     return dependent_template_p (arg);
19764   else if (ARGUMENT_PACK_P (arg))
19765     {
19766       tree args = ARGUMENT_PACK_ARGS (arg);
19767       int i, len = TREE_VEC_LENGTH (args);
19768       for (i = 0; i < len; ++i)
19769         {
19770           if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
19771             return true;
19772         }
19773
19774       return false;
19775     }
19776   else if (TYPE_P (arg))
19777     return dependent_type_p (arg);
19778   else
19779     return (type_dependent_expression_p (arg)
19780             || value_dependent_expression_p (arg));
19781 }
19782
19783 /* Returns true if ARGS (a collection of template arguments) contains
19784    any types that require structural equality testing.  */
19785
19786 bool
19787 any_template_arguments_need_structural_equality_p (tree args)
19788 {
19789   int i;
19790   int j;
19791
19792   if (!args)
19793     return false;
19794   if (args == error_mark_node)
19795     return true;
19796
19797   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
19798     {
19799       tree level = TMPL_ARGS_LEVEL (args, i + 1);
19800       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
19801         {
19802           tree arg = TREE_VEC_ELT (level, j);
19803           tree packed_args = NULL_TREE;
19804           int k, len = 1;
19805
19806           if (ARGUMENT_PACK_P (arg))
19807             {
19808               /* Look inside the argument pack.  */
19809               packed_args = ARGUMENT_PACK_ARGS (arg);
19810               len = TREE_VEC_LENGTH (packed_args);
19811             }
19812
19813           for (k = 0; k < len; ++k)
19814             {
19815               if (packed_args)
19816                 arg = TREE_VEC_ELT (packed_args, k);
19817
19818               if (error_operand_p (arg))
19819                 return true;
19820               else if (TREE_CODE (arg) == TEMPLATE_DECL
19821                        || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
19822                 continue;
19823               else if (TYPE_P (arg) && TYPE_STRUCTURAL_EQUALITY_P (arg))
19824                 return true;
19825               else if (!TYPE_P (arg) && TREE_TYPE (arg)
19826                        && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (arg)))
19827                 return true;
19828             }
19829         }
19830     }
19831
19832   return false;
19833 }
19834
19835 /* Returns true if ARGS (a collection of template arguments) contains
19836    any dependent arguments.  */
19837
19838 bool
19839 any_dependent_template_arguments_p (const_tree args)
19840 {
19841   int i;
19842   int j;
19843
19844   if (!args)
19845     return false;
19846   if (args == error_mark_node)
19847     return true;
19848
19849   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
19850     {
19851       const_tree level = TMPL_ARGS_LEVEL (args, i + 1);
19852       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
19853         if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
19854           return true;
19855     }
19856
19857   return false;
19858 }
19859
19860 /* Returns TRUE if the template TMPL is dependent.  */
19861
19862 bool
19863 dependent_template_p (tree tmpl)
19864 {
19865   if (TREE_CODE (tmpl) == OVERLOAD)
19866     {
19867       while (tmpl)
19868         {
19869           if (dependent_template_p (OVL_CURRENT (tmpl)))
19870             return true;
19871           tmpl = OVL_NEXT (tmpl);
19872         }
19873       return false;
19874     }
19875
19876   /* Template template parameters are dependent.  */
19877   if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
19878       || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
19879     return true;
19880   /* So are names that have not been looked up.  */
19881   if (TREE_CODE (tmpl) == SCOPE_REF
19882       || TREE_CODE (tmpl) == IDENTIFIER_NODE)
19883     return true;
19884   /* So are member templates of dependent classes.  */
19885   if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
19886     return dependent_type_p (DECL_CONTEXT (tmpl));
19887   return false;
19888 }
19889
19890 /* Returns TRUE if the specialization TMPL<ARGS> is dependent.  */
19891
19892 bool
19893 dependent_template_id_p (tree tmpl, tree args)
19894 {
19895   return (dependent_template_p (tmpl)
19896           || any_dependent_template_arguments_p (args));
19897 }
19898
19899 /* Returns TRUE if OMP_FOR with DECLV, INITV, CONDV and INCRV vectors
19900    is dependent.  */
19901
19902 bool
19903 dependent_omp_for_p (tree declv, tree initv, tree condv, tree incrv)
19904 {
19905   int i;
19906
19907   if (!processing_template_decl)
19908     return false;
19909
19910   for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
19911     {
19912       tree decl = TREE_VEC_ELT (declv, i);
19913       tree init = TREE_VEC_ELT (initv, i);
19914       tree cond = TREE_VEC_ELT (condv, i);
19915       tree incr = TREE_VEC_ELT (incrv, i);
19916
19917       if (type_dependent_expression_p (decl))
19918         return true;
19919
19920       if (init && type_dependent_expression_p (init))
19921         return true;
19922
19923       if (type_dependent_expression_p (cond))
19924         return true;
19925
19926       if (COMPARISON_CLASS_P (cond)
19927           && (type_dependent_expression_p (TREE_OPERAND (cond, 0))
19928               || type_dependent_expression_p (TREE_OPERAND (cond, 1))))
19929         return true;
19930
19931       if (TREE_CODE (incr) == MODOP_EXPR)
19932         {
19933           if (type_dependent_expression_p (TREE_OPERAND (incr, 0))
19934               || type_dependent_expression_p (TREE_OPERAND (incr, 2)))
19935             return true;
19936         }
19937       else if (type_dependent_expression_p (incr))
19938         return true;
19939       else if (TREE_CODE (incr) == MODIFY_EXPR)
19940         {
19941           if (type_dependent_expression_p (TREE_OPERAND (incr, 0)))
19942             return true;
19943           else if (BINARY_CLASS_P (TREE_OPERAND (incr, 1)))
19944             {
19945               tree t = TREE_OPERAND (incr, 1);
19946               if (type_dependent_expression_p (TREE_OPERAND (t, 0))
19947                   || type_dependent_expression_p (TREE_OPERAND (t, 1)))
19948                 return true;
19949             }
19950         }
19951     }
19952
19953   return false;
19954 }
19955
19956 /* TYPE is a TYPENAME_TYPE.  Returns the ordinary TYPE to which the
19957    TYPENAME_TYPE corresponds.  Returns the original TYPENAME_TYPE if
19958    no such TYPE can be found.  Note that this function peers inside
19959    uninstantiated templates and therefore should be used only in
19960    extremely limited situations.  ONLY_CURRENT_P restricts this
19961    peering to the currently open classes hierarchy (which is required
19962    when comparing types).  */
19963
19964 tree
19965 resolve_typename_type (tree type, bool only_current_p)
19966 {
19967   tree scope;
19968   tree name;
19969   tree decl;
19970   int quals;
19971   tree pushed_scope;
19972   tree result;
19973
19974   gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
19975
19976   scope = TYPE_CONTEXT (type);
19977   /* Usually the non-qualified identifier of a TYPENAME_TYPE is
19978      TYPE_IDENTIFIER (type). But when 'type' is a typedef variant of
19979      a TYPENAME_TYPE node, then TYPE_NAME (type) is set to the TYPE_DECL representing
19980      the typedef. In that case TYPE_IDENTIFIER (type) is not the non-qualified
19981      identifier  of the TYPENAME_TYPE anymore.
19982      So by getting the TYPE_IDENTIFIER of the _main declaration_ of the
19983      TYPENAME_TYPE instead, we avoid messing up with a possible
19984      typedef variant case.  */
19985   name = TYPE_IDENTIFIER (TYPE_MAIN_VARIANT (type));
19986
19987   /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
19988      it first before we can figure out what NAME refers to.  */
19989   if (TREE_CODE (scope) == TYPENAME_TYPE)
19990     scope = resolve_typename_type (scope, only_current_p);
19991   /* If we don't know what SCOPE refers to, then we cannot resolve the
19992      TYPENAME_TYPE.  */
19993   if (TREE_CODE (scope) == TYPENAME_TYPE)
19994     return type;
19995   /* If the SCOPE is a template type parameter, we have no way of
19996      resolving the name.  */
19997   if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
19998     return type;
19999   /* If the SCOPE is not the current instantiation, there's no reason
20000      to look inside it.  */
20001   if (only_current_p && !currently_open_class (scope))
20002     return type;
20003   /* If this is a typedef, we don't want to look inside (c++/11987).  */
20004   if (typedef_variant_p (type))
20005     return type;
20006   /* If SCOPE isn't the template itself, it will not have a valid
20007      TYPE_FIELDS list.  */
20008   if (same_type_p (scope, CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope)))
20009     /* scope is either the template itself or a compatible instantiation
20010        like X<T>, so look up the name in the original template.  */
20011     scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
20012   else
20013     /* scope is a partial instantiation, so we can't do the lookup or we
20014        will lose the template arguments.  */
20015     return type;
20016   /* Enter the SCOPE so that name lookup will be resolved as if we
20017      were in the class definition.  In particular, SCOPE will no
20018      longer be considered a dependent type.  */
20019   pushed_scope = push_scope (scope);
20020   /* Look up the declaration.  */
20021   decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true,
20022                         tf_warning_or_error);
20023
20024   result = NULL_TREE;
20025   
20026   /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
20027      find a TEMPLATE_DECL.  Otherwise, we want to find a TYPE_DECL.  */
20028   if (!decl)
20029     /*nop*/;
20030   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
20031            && TREE_CODE (decl) == TYPE_DECL)
20032     {
20033       result = TREE_TYPE (decl);
20034       if (result == error_mark_node)
20035         result = NULL_TREE;
20036     }
20037   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
20038            && DECL_CLASS_TEMPLATE_P (decl))
20039     {
20040       tree tmpl;
20041       tree args;
20042       /* Obtain the template and the arguments.  */
20043       tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
20044       args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
20045       /* Instantiate the template.  */
20046       result = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
20047                                       /*entering_scope=*/0,
20048                                       tf_error | tf_user);
20049       if (result == error_mark_node)
20050         result = NULL_TREE;
20051     }
20052   
20053   /* Leave the SCOPE.  */
20054   if (pushed_scope)
20055     pop_scope (pushed_scope);
20056
20057   /* If we failed to resolve it, return the original typename.  */
20058   if (!result)
20059     return type;
20060   
20061   /* If lookup found a typename type, resolve that too.  */
20062   if (TREE_CODE (result) == TYPENAME_TYPE && !TYPENAME_IS_RESOLVING_P (result))
20063     {
20064       /* Ill-formed programs can cause infinite recursion here, so we
20065          must catch that.  */
20066       TYPENAME_IS_RESOLVING_P (type) = 1;
20067       result = resolve_typename_type (result, only_current_p);
20068       TYPENAME_IS_RESOLVING_P (type) = 0;
20069     }
20070   
20071   /* Qualify the resulting type.  */
20072   quals = cp_type_quals (type);
20073   if (quals)
20074     result = cp_build_qualified_type (result, cp_type_quals (result) | quals);
20075
20076   return result;
20077 }
20078
20079 /* EXPR is an expression which is not type-dependent.  Return a proxy
20080    for EXPR that can be used to compute the types of larger
20081    expressions containing EXPR.  */
20082
20083 tree
20084 build_non_dependent_expr (tree expr)
20085 {
20086   tree inner_expr;
20087
20088 #ifdef ENABLE_CHECKING
20089   /* Try to get a constant value for all non-type-dependent expressions in
20090       order to expose bugs in *_dependent_expression_p and constexpr.  */
20091   if (cxx_dialect >= cxx0x)
20092     maybe_constant_value (fold_non_dependent_expr_sfinae (expr, tf_none));
20093 #endif
20094
20095   /* Preserve OVERLOADs; the functions must be available to resolve
20096      types.  */
20097   inner_expr = expr;
20098   if (TREE_CODE (inner_expr) == STMT_EXPR)
20099     inner_expr = stmt_expr_value_expr (inner_expr);
20100   if (TREE_CODE (inner_expr) == ADDR_EXPR)
20101     inner_expr = TREE_OPERAND (inner_expr, 0);
20102   if (TREE_CODE (inner_expr) == COMPONENT_REF)
20103     inner_expr = TREE_OPERAND (inner_expr, 1);
20104   if (is_overloaded_fn (inner_expr)
20105       || TREE_CODE (inner_expr) == OFFSET_REF)
20106     return expr;
20107   /* There is no need to return a proxy for a variable.  */
20108   if (TREE_CODE (expr) == VAR_DECL)
20109     return expr;
20110   /* Preserve string constants; conversions from string constants to
20111      "char *" are allowed, even though normally a "const char *"
20112      cannot be used to initialize a "char *".  */
20113   if (TREE_CODE (expr) == STRING_CST)
20114     return expr;
20115   /* Preserve arithmetic constants, as an optimization -- there is no
20116      reason to create a new node.  */
20117   if (TREE_CODE (expr) == INTEGER_CST || TREE_CODE (expr) == REAL_CST)
20118     return expr;
20119   /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
20120      There is at least one place where we want to know that a
20121      particular expression is a throw-expression: when checking a ?:
20122      expression, there are special rules if the second or third
20123      argument is a throw-expression.  */
20124   if (TREE_CODE (expr) == THROW_EXPR)
20125     return expr;
20126
20127   /* Don't wrap an initializer list, we need to be able to look inside.  */
20128   if (BRACE_ENCLOSED_INITIALIZER_P (expr))
20129     return expr;
20130
20131   if (TREE_CODE (expr) == COND_EXPR)
20132     return build3 (COND_EXPR,
20133                    TREE_TYPE (expr),
20134                    TREE_OPERAND (expr, 0),
20135                    (TREE_OPERAND (expr, 1)
20136                     ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
20137                     : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
20138                    build_non_dependent_expr (TREE_OPERAND (expr, 2)));
20139   if (TREE_CODE (expr) == COMPOUND_EXPR
20140       && !COMPOUND_EXPR_OVERLOADED (expr))
20141     return build2 (COMPOUND_EXPR,
20142                    TREE_TYPE (expr),
20143                    TREE_OPERAND (expr, 0),
20144                    build_non_dependent_expr (TREE_OPERAND (expr, 1)));
20145
20146   /* If the type is unknown, it can't really be non-dependent */
20147   gcc_assert (TREE_TYPE (expr) != unknown_type_node);
20148
20149   /* Otherwise, build a NON_DEPENDENT_EXPR.  */
20150   return build1 (NON_DEPENDENT_EXPR, TREE_TYPE (expr), expr);
20151 }
20152
20153 /* ARGS is a vector of expressions as arguments to a function call.
20154    Replace the arguments with equivalent non-dependent expressions.
20155    This modifies ARGS in place.  */
20156
20157 void
20158 make_args_non_dependent (VEC(tree,gc) *args)
20159 {
20160   unsigned int ix;
20161   tree arg;
20162
20163   FOR_EACH_VEC_ELT (tree, args, ix, arg)
20164     {
20165       tree newarg = build_non_dependent_expr (arg);
20166       if (newarg != arg)
20167         VEC_replace (tree, args, ix, newarg);
20168     }
20169 }
20170
20171 /* Returns a type which represents 'auto'.  We use a TEMPLATE_TYPE_PARM
20172    with a level one deeper than the actual template parms.  */
20173
20174 tree
20175 make_auto (void)
20176 {
20177   tree au = cxx_make_type (TEMPLATE_TYPE_PARM);
20178   TYPE_NAME (au) = build_decl (BUILTINS_LOCATION,
20179                                TYPE_DECL, get_identifier ("auto"), au);
20180   TYPE_STUB_DECL (au) = TYPE_NAME (au);
20181   TEMPLATE_TYPE_PARM_INDEX (au) = build_template_parm_index
20182     (0, processing_template_decl + 1, processing_template_decl + 1,
20183      0, TYPE_NAME (au), NULL_TREE);
20184   TYPE_CANONICAL (au) = canonical_type_parameter (au);
20185   DECL_ARTIFICIAL (TYPE_NAME (au)) = 1;
20186   SET_DECL_TEMPLATE_PARM_P (TYPE_NAME (au));
20187
20188   return au;
20189 }
20190
20191 /* Given type ARG, return std::initializer_list<ARG>.  */
20192
20193 static tree
20194 listify (tree arg)
20195 {
20196   tree std_init_list = namespace_binding
20197     (get_identifier ("initializer_list"), std_node);
20198   tree argvec;
20199   if (!std_init_list || !DECL_CLASS_TEMPLATE_P (std_init_list))
20200     {    
20201       error ("deducing from brace-enclosed initializer list requires "
20202              "#include <initializer_list>");
20203       return error_mark_node;
20204     }
20205   argvec = make_tree_vec (1);
20206   TREE_VEC_ELT (argvec, 0) = arg;
20207   return lookup_template_class (std_init_list, argvec, NULL_TREE,
20208                                 NULL_TREE, 0, tf_warning_or_error);
20209 }
20210
20211 /* Replace auto in TYPE with std::initializer_list<auto>.  */
20212
20213 static tree
20214 listify_autos (tree type, tree auto_node)
20215 {
20216   tree init_auto = listify (auto_node);
20217   tree argvec = make_tree_vec (1);
20218   TREE_VEC_ELT (argvec, 0) = init_auto;
20219   if (processing_template_decl)
20220     argvec = add_to_template_args (current_template_args (), argvec);
20221   return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
20222 }
20223
20224 /* walk_tree helper for do_auto_deduction.  */
20225
20226 static tree
20227 contains_auto_r (tree *tp, int *walk_subtrees ATTRIBUTE_UNUSED,
20228                  void *type)
20229 {
20230   /* Is this a variable with the type we're looking for?  */
20231   if (DECL_P (*tp)
20232       && TREE_TYPE (*tp) == type)
20233     return *tp;
20234   else
20235     return NULL_TREE;
20236 }
20237
20238 /* Replace occurrences of 'auto' in TYPE with the appropriate type deduced
20239    from INIT.  AUTO_NODE is the TEMPLATE_TYPE_PARM used for 'auto' in TYPE.  */
20240
20241 tree
20242 do_auto_deduction (tree type, tree init, tree auto_node)
20243 {
20244   tree parms, tparms, targs;
20245   tree args[1];
20246   tree decl;
20247   int val;
20248
20249   if (processing_template_decl
20250       && (TREE_TYPE (init) == NULL_TREE
20251           || BRACE_ENCLOSED_INITIALIZER_P (init)))
20252     /* Not enough information to try this yet.  */
20253     return type;
20254
20255   /* The name of the object being declared shall not appear in the
20256      initializer expression.  */
20257   decl = cp_walk_tree_without_duplicates (&init, contains_auto_r, type);
20258   if (decl)
20259     {
20260       error ("variable %q#D with %<auto%> type used in its own "
20261              "initializer", decl);
20262       return error_mark_node;
20263     }
20264
20265   /* [dcl.spec.auto]: Obtain P from T by replacing the occurrences of auto
20266      with either a new invented type template parameter U or, if the
20267      initializer is a braced-init-list (8.5.4), with
20268      std::initializer_list<U>.  */
20269   if (BRACE_ENCLOSED_INITIALIZER_P (init))
20270     type = listify_autos (type, auto_node);
20271
20272   init = resolve_nondeduced_context (init);
20273
20274   parms = build_tree_list (NULL_TREE, type);
20275   args[0] = init;
20276   tparms = make_tree_vec (1);
20277   targs = make_tree_vec (1);
20278   TREE_VEC_ELT (tparms, 0)
20279     = build_tree_list (NULL_TREE, TYPE_NAME (auto_node));
20280   val = type_unification_real (tparms, targs, parms, args, 1, 0,
20281                                DEDUCE_CALL, LOOKUP_NORMAL,
20282                                /*explain_p=*/false);
20283   if (val > 0)
20284     {
20285       if (processing_template_decl)
20286         /* Try again at instantiation time.  */
20287         return type;
20288       if (type && type != error_mark_node)
20289         /* If type is error_mark_node a diagnostic must have been
20290            emitted by now.  Also, having a mention to '<type error>'
20291            in the diagnostic is not really useful to the user.  */
20292         error ("unable to deduce %qT from %qE", type, init);
20293       return error_mark_node;
20294     }
20295
20296   /* If the list of declarators contains more than one declarator, the type
20297      of each declared variable is determined as described above. If the
20298      type deduced for the template parameter U is not the same in each
20299      deduction, the program is ill-formed.  */
20300   if (TREE_TYPE (auto_node)
20301       && !same_type_p (TREE_TYPE (auto_node), TREE_VEC_ELT (targs, 0)))
20302     {
20303       error ("inconsistent deduction for %qT: %qT and then %qT",
20304              auto_node, TREE_TYPE (auto_node), TREE_VEC_ELT (targs, 0));
20305       return error_mark_node;
20306     }
20307   TREE_TYPE (auto_node) = TREE_VEC_ELT (targs, 0);
20308
20309   if (processing_template_decl)
20310     targs = add_to_template_args (current_template_args (), targs);
20311   return tsubst (type, targs, tf_warning_or_error, NULL_TREE);
20312 }
20313
20314 /* Substitutes LATE_RETURN_TYPE for 'auto' in TYPE and returns the
20315    result.  */
20316
20317 tree
20318 splice_late_return_type (tree type, tree late_return_type)
20319 {
20320   tree argvec;
20321
20322   if (late_return_type == NULL_TREE)
20323     return type;
20324   argvec = make_tree_vec (1);
20325   TREE_VEC_ELT (argvec, 0) = late_return_type;
20326   if (processing_template_parmlist)
20327     /* For a late-specified return type in a template type-parameter, we
20328        need to add a dummy argument level for its parmlist.  */
20329     argvec = add_to_template_args
20330       (make_tree_vec (processing_template_parmlist), argvec);
20331   if (current_template_parms)
20332     argvec = add_to_template_args (current_template_args (), argvec);
20333   return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
20334 }
20335
20336 /* Returns true iff TYPE is a TEMPLATE_TYPE_PARM representing 'auto'.  */
20337
20338 bool
20339 is_auto (const_tree type)
20340 {
20341   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
20342       && TYPE_IDENTIFIER (type) == get_identifier ("auto"))
20343     return true;
20344   else
20345     return false;
20346 }
20347
20348 /* Returns true iff TYPE contains a use of 'auto'.  Since auto can only
20349    appear as a type-specifier for the declaration in question, we don't
20350    have to look through the whole type.  */
20351
20352 tree
20353 type_uses_auto (tree type)
20354 {
20355   enum tree_code code;
20356   if (is_auto (type))
20357     return type;
20358
20359   code = TREE_CODE (type);
20360
20361   if (code == POINTER_TYPE || code == REFERENCE_TYPE
20362       || code == OFFSET_TYPE || code == FUNCTION_TYPE
20363       || code == METHOD_TYPE || code == ARRAY_TYPE)
20364     return type_uses_auto (TREE_TYPE (type));
20365
20366   if (TYPE_PTRMEMFUNC_P (type))
20367     return type_uses_auto (TREE_TYPE (TREE_TYPE
20368                                    (TYPE_PTRMEMFUNC_FN_TYPE (type))));
20369
20370   return NULL_TREE;
20371 }
20372
20373 /* For a given template T, return the vector of typedefs referenced
20374    in T for which access check is needed at T instantiation time.
20375    T is either  a FUNCTION_DECL or a RECORD_TYPE.
20376    Those typedefs were added to T by the function
20377    append_type_to_template_for_access_check.  */
20378
20379 VEC(qualified_typedef_usage_t,gc)*
20380 get_types_needing_access_check (tree t)
20381 {
20382   tree ti;
20383   VEC(qualified_typedef_usage_t,gc) *result = NULL;
20384
20385   if (!t || t == error_mark_node)
20386     return NULL;
20387
20388   if (!(ti = get_template_info (t)))
20389     return NULL;
20390
20391   if (CLASS_TYPE_P (t)
20392       || TREE_CODE (t) == FUNCTION_DECL)
20393     {
20394       if (!TI_TEMPLATE (ti))
20395         return NULL;
20396
20397       result = TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti);
20398     }
20399
20400   return result;
20401 }
20402
20403 /* Append the typedef TYPE_DECL used in template T to a list of typedefs
20404    tied to T. That list of typedefs will be access checked at
20405    T instantiation time.
20406    T is either a FUNCTION_DECL or a RECORD_TYPE.
20407    TYPE_DECL is a TYPE_DECL node representing a typedef.
20408    SCOPE is the scope through which TYPE_DECL is accessed.
20409    LOCATION is the location of the usage point of TYPE_DECL.
20410
20411    This function is a subroutine of
20412    append_type_to_template_for_access_check.  */
20413
20414 static void
20415 append_type_to_template_for_access_check_1 (tree t,
20416                                             tree type_decl,
20417                                             tree scope,
20418                                             location_t location)
20419 {
20420   qualified_typedef_usage_t typedef_usage;
20421   tree ti;
20422
20423   if (!t || t == error_mark_node)
20424     return;
20425
20426   gcc_assert ((TREE_CODE (t) == FUNCTION_DECL
20427                || CLASS_TYPE_P (t))
20428               && type_decl
20429               && TREE_CODE (type_decl) == TYPE_DECL
20430               && scope);
20431
20432   if (!(ti = get_template_info (t)))
20433     return;
20434
20435   gcc_assert (TI_TEMPLATE (ti));
20436
20437   typedef_usage.typedef_decl = type_decl;
20438   typedef_usage.context = scope;
20439   typedef_usage.locus = location;
20440
20441   VEC_safe_push (qualified_typedef_usage_t, gc,
20442                  TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti),
20443                  &typedef_usage);
20444 }
20445
20446 /* Append TYPE_DECL to the template TEMPL.
20447    TEMPL is either a class type, a FUNCTION_DECL or a a TEMPLATE_DECL.
20448    At TEMPL instanciation time, TYPE_DECL will be checked to see
20449    if it can be accessed through SCOPE.
20450    LOCATION is the location of the usage point of TYPE_DECL.
20451
20452    e.g. consider the following code snippet:
20453
20454      class C
20455      {
20456        typedef int myint;
20457      };
20458
20459      template<class U> struct S
20460      {
20461        C::myint mi; // <-- usage point of the typedef C::myint
20462      };
20463
20464      S<char> s;
20465
20466    At S<char> instantiation time, we need to check the access of C::myint
20467    In other words, we need to check the access of the myint typedef through
20468    the C scope. For that purpose, this function will add the myint typedef
20469    and the scope C through which its being accessed to a list of typedefs
20470    tied to the template S. That list will be walked at template instantiation
20471    time and access check performed on each typedefs it contains.
20472    Note that this particular code snippet should yield an error because
20473    myint is private to C.  */
20474
20475 void
20476 append_type_to_template_for_access_check (tree templ,
20477                                           tree type_decl,
20478                                           tree scope,
20479                                           location_t location)
20480 {
20481   qualified_typedef_usage_t *iter;
20482   int i;
20483
20484   gcc_assert (type_decl && (TREE_CODE (type_decl) == TYPE_DECL));
20485
20486   /* Make sure we don't append the type to the template twice.  */
20487   FOR_EACH_VEC_ELT (qualified_typedef_usage_t,
20488                     get_types_needing_access_check (templ),
20489                     i, iter)
20490     if (iter->typedef_decl == type_decl && scope == iter->context)
20491       return;
20492
20493   append_type_to_template_for_access_check_1 (templ, type_decl,
20494                                               scope, location);
20495 }
20496
20497 /* Set up the hash tables for template instantiations.  */
20498
20499 void
20500 init_template_processing (void)
20501 {
20502   decl_specializations = htab_create_ggc (37,
20503                                           hash_specialization,
20504                                           eq_specializations,
20505                                           ggc_free);
20506   type_specializations = htab_create_ggc (37,
20507                                           hash_specialization,
20508                                           eq_specializations,
20509                                           ggc_free);
20510 }
20511
20512 /* Print stats about the template hash tables for -fstats.  */
20513
20514 void
20515 print_template_statistics (void)
20516 {
20517   fprintf (stderr, "decl_specializations: size %ld, %ld elements, "
20518            "%f collisions\n", (long) htab_size (decl_specializations),
20519            (long) htab_elements (decl_specializations),
20520            htab_collisions (decl_specializations));
20521   fprintf (stderr, "type_specializations: size %ld, %ld elements, "
20522            "%f collisions\n", (long) htab_size (type_specializations),
20523            (long) htab_elements (type_specializations),
20524            htab_collisions (type_specializations));
20525 }
20526
20527 #include "gt-cp-pt.h"