OSDN Git Service

3c8fea234d646703a2e47dd7214e91da0e03e8fd
[pf3gnuchains/gcc-fork.git] / gcc / cp / pt.c
1 /* Handle parameterized types (templates) for GNU C++.
2    Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3    2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011, 2012
4    Free Software Foundation, Inc.
5    Written by Ken Raeburn (raeburn@cygnus.com) while at Watchmaker Computing.
6    Rewritten by Jason Merrill (jason@cygnus.com).
7
8 This file is part of GCC.
9
10 GCC is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 3, or (at your option)
13 any later version.
14
15 GCC is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18 GNU General Public License for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with GCC; see the file COPYING3.  If not see
22 <http://www.gnu.org/licenses/>.  */
23
24 /* Known bugs or deficiencies include:
25
26      all methods must be provided in header files; can't use a source
27      file that contains only the method templates and "just win".  */
28
29 #include "config.h"
30 #include "system.h"
31 #include "coretypes.h"
32 #include "tm.h"
33 #include "tree.h"
34 #include "intl.h"
35 #include "pointer-set.h"
36 #include "flags.h"
37 #include "cp-tree.h"
38 #include "c-family/c-common.h"
39 #include "c-family/c-objc.h"
40 #include "cp-objcp-common.h"
41 #include "tree-inline.h"
42 #include "decl.h"
43 #include "output.h"
44 #include "toplev.h"
45 #include "timevar.h"
46 #include "tree-iterator.h"
47 #include "vecprim.h"
48
49 /* The type of functions taking a tree, and some additional data, and
50    returning an int.  */
51 typedef int (*tree_fn_t) (tree, void*);
52
53 /* The PENDING_TEMPLATES is a TREE_LIST of templates whose
54    instantiations have been deferred, either because their definitions
55    were not yet available, or because we were putting off doing the work.  */
56 struct GTY ((chain_next ("%h.next"))) pending_template {
57   struct pending_template *next;
58   struct tinst_level *tinst;
59 };
60
61 static GTY(()) struct pending_template *pending_templates;
62 static GTY(()) struct pending_template *last_pending_template;
63
64 int processing_template_parmlist;
65 static int template_header_count;
66
67 static GTY(()) tree saved_trees;
68 static VEC(int,heap) *inline_parm_levels;
69
70 static GTY(()) struct tinst_level *current_tinst_level;
71
72 static GTY(()) tree saved_access_scope;
73
74 /* Live only within one (recursive) call to tsubst_expr.  We use
75    this to pass the statement expression node from the STMT_EXPR
76    to the EXPR_STMT that is its result.  */
77 static tree cur_stmt_expr;
78
79 /* A map from local variable declarations in the body of the template
80    presently being instantiated to the corresponding instantiated
81    local variables.  */
82 static htab_t local_specializations;
83
84 typedef struct GTY(()) spec_entry
85 {
86   tree tmpl;
87   tree args;
88   tree spec;
89 } spec_entry;
90
91 static GTY ((param_is (spec_entry)))
92   htab_t decl_specializations;
93
94 static GTY ((param_is (spec_entry)))
95   htab_t type_specializations;
96
97 /* Contains canonical template parameter types. The vector is indexed by
98    the TEMPLATE_TYPE_IDX of the template parameter. Each element is a
99    TREE_LIST, whose TREE_VALUEs contain the canonical template
100    parameters of various types and levels.  */
101 static GTY(()) VEC(tree,gc) *canonical_template_parms;
102
103 #define UNIFY_ALLOW_NONE 0
104 #define UNIFY_ALLOW_MORE_CV_QUAL 1
105 #define UNIFY_ALLOW_LESS_CV_QUAL 2
106 #define UNIFY_ALLOW_DERIVED 4
107 #define UNIFY_ALLOW_INTEGER 8
108 #define UNIFY_ALLOW_OUTER_LEVEL 16
109 #define UNIFY_ALLOW_OUTER_MORE_CV_QUAL 32
110 #define UNIFY_ALLOW_OUTER_LESS_CV_QUAL 64
111
112 enum template_base_result {
113   tbr_incomplete_type,
114   tbr_ambiguous_baseclass,
115   tbr_success
116 };
117
118 static void push_access_scope (tree);
119 static void pop_access_scope (tree);
120 static void push_deduction_access_scope (tree);
121 static void pop_deduction_access_scope (tree);
122 static bool resolve_overloaded_unification (tree, tree, tree, tree,
123                                             unification_kind_t, int,
124                                             bool);
125 static int try_one_overload (tree, tree, tree, tree, tree,
126                              unification_kind_t, int, bool, bool);
127 static int unify (tree, tree, tree, tree, int, bool);
128 static void add_pending_template (tree);
129 static tree reopen_tinst_level (struct tinst_level *);
130 static tree tsubst_initializer_list (tree, tree);
131 static tree get_class_bindings (tree, tree, tree);
132 static tree coerce_template_parms (tree, tree, tree, tsubst_flags_t,
133                                    bool, bool);
134 static void tsubst_enum (tree, tree, tree);
135 static tree add_to_template_args (tree, tree);
136 static tree add_outermost_template_args (tree, tree);
137 static bool check_instantiated_args (tree, tree, tsubst_flags_t);
138 static int maybe_adjust_types_for_deduction (unification_kind_t, tree*, tree*,
139                                              tree);
140 static int type_unification_real (tree, tree, tree, const tree *,
141                                   unsigned int, int, unification_kind_t, int,
142                                   bool);
143 static void note_template_header (int);
144 static tree convert_nontype_argument_function (tree, tree);
145 static tree convert_nontype_argument (tree, tree, tsubst_flags_t);
146 static tree convert_template_argument (tree, tree, tree,
147                                        tsubst_flags_t, int, tree);
148 static int for_each_template_parm (tree, tree_fn_t, void*,
149                                    struct pointer_set_t*, bool);
150 static tree expand_template_argument_pack (tree);
151 static tree build_template_parm_index (int, int, int, int, tree, tree);
152 static bool inline_needs_template_parms (tree);
153 static void push_inline_template_parms_recursive (tree, int);
154 static tree retrieve_local_specialization (tree);
155 static void register_local_specialization (tree, tree);
156 static hashval_t hash_specialization (const void *p);
157 static tree reduce_template_parm_level (tree, tree, int, tree, tsubst_flags_t);
158 static int mark_template_parm (tree, void *);
159 static int template_parm_this_level_p (tree, void *);
160 static tree tsubst_friend_function (tree, tree);
161 static tree tsubst_friend_class (tree, tree);
162 static int can_complete_type_without_circularity (tree);
163 static tree get_bindings (tree, tree, tree, bool);
164 static int template_decl_level (tree);
165 static int check_cv_quals_for_unify (int, tree, tree);
166 static void template_parm_level_and_index (tree, int*, int*);
167 static int unify_pack_expansion (tree, tree, tree,
168                                  tree, unification_kind_t, bool, bool);
169 static tree tsubst_template_arg (tree, tree, tsubst_flags_t, tree);
170 static tree tsubst_template_args (tree, tree, tsubst_flags_t, tree);
171 static tree tsubst_template_parms (tree, tree, tsubst_flags_t);
172 static void regenerate_decl_from_template (tree, tree);
173 static tree most_specialized_class (tree, tree, tsubst_flags_t);
174 static tree tsubst_aggr_type (tree, tree, tsubst_flags_t, tree, int);
175 static tree tsubst_arg_types (tree, tree, tsubst_flags_t, tree);
176 static tree tsubst_function_type (tree, tree, tsubst_flags_t, tree);
177 static bool check_specialization_scope (void);
178 static tree process_partial_specialization (tree);
179 static void set_current_access_from_decl (tree);
180 static enum template_base_result get_template_base (tree, tree, tree, tree,
181                                                     bool , tree *);
182 static tree try_class_unification (tree, tree, tree, tree, bool);
183 static int coerce_template_template_parms (tree, tree, tsubst_flags_t,
184                                            tree, tree);
185 static bool template_template_parm_bindings_ok_p (tree, tree);
186 static int template_args_equal (tree, tree);
187 static void tsubst_default_arguments (tree);
188 static tree for_each_template_parm_r (tree *, int *, void *);
189 static tree copy_default_args_to_explicit_spec_1 (tree, tree);
190 static void copy_default_args_to_explicit_spec (tree);
191 static int invalid_nontype_parm_type_p (tree, tsubst_flags_t);
192 static int eq_local_specializations (const void *, const void *);
193 static bool dependent_template_arg_p (tree);
194 static bool any_template_arguments_need_structural_equality_p (tree);
195 static bool dependent_type_p_r (tree);
196 static tree tsubst_expr (tree, tree, tsubst_flags_t, tree, bool);
197 static tree tsubst_copy (tree, tree, tsubst_flags_t, tree);
198 static tree tsubst_pack_expansion (tree, tree, tsubst_flags_t, tree);
199 static tree tsubst_decl (tree, tree, tsubst_flags_t);
200 static void perform_typedefs_access_check (tree tmpl, tree targs);
201 static void append_type_to_template_for_access_check_1 (tree, tree, tree,
202                                                         location_t);
203 static tree listify (tree);
204 static tree listify_autos (tree, tree);
205 static tree template_parm_to_arg (tree t);
206 static bool arg_from_parm_pack_p (tree, tree);
207 static tree current_template_args (void);
208 static tree fixup_template_type_parm_type (tree, int);
209 static tree fixup_template_parm_index (tree, tree, int);
210 static tree tsubst_template_parm (tree, tree, tsubst_flags_t);
211
212 /* Make the current scope suitable for access checking when we are
213    processing T.  T can be FUNCTION_DECL for instantiated function
214    template, or VAR_DECL for static member variable (need by
215    instantiate_decl).  */
216
217 static void
218 push_access_scope (tree t)
219 {
220   gcc_assert (TREE_CODE (t) == FUNCTION_DECL
221               || TREE_CODE (t) == VAR_DECL);
222
223   if (DECL_FRIEND_CONTEXT (t))
224     push_nested_class (DECL_FRIEND_CONTEXT (t));
225   else if (DECL_CLASS_SCOPE_P (t))
226     push_nested_class (DECL_CONTEXT (t));
227   else
228     push_to_top_level ();
229
230   if (TREE_CODE (t) == FUNCTION_DECL)
231     {
232       saved_access_scope = tree_cons
233         (NULL_TREE, current_function_decl, saved_access_scope);
234       current_function_decl = t;
235     }
236 }
237
238 /* Restore the scope set up by push_access_scope.  T is the node we
239    are processing.  */
240
241 static void
242 pop_access_scope (tree t)
243 {
244   if (TREE_CODE (t) == FUNCTION_DECL)
245     {
246       current_function_decl = TREE_VALUE (saved_access_scope);
247       saved_access_scope = TREE_CHAIN (saved_access_scope);
248     }
249
250   if (DECL_FRIEND_CONTEXT (t) || DECL_CLASS_SCOPE_P (t))
251     pop_nested_class ();
252   else
253     pop_from_top_level ();
254 }
255
256 /* Do any processing required when DECL (a member template
257    declaration) is finished.  Returns the TEMPLATE_DECL corresponding
258    to DECL, unless it is a specialization, in which case the DECL
259    itself is returned.  */
260
261 tree
262 finish_member_template_decl (tree decl)
263 {
264   if (decl == error_mark_node)
265     return error_mark_node;
266
267   gcc_assert (DECL_P (decl));
268
269   if (TREE_CODE (decl) == TYPE_DECL)
270     {
271       tree type;
272
273       type = TREE_TYPE (decl);
274       if (type == error_mark_node)
275         return error_mark_node;
276       if (MAYBE_CLASS_TYPE_P (type)
277           && CLASSTYPE_TEMPLATE_INFO (type)
278           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
279         {
280           tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
281           check_member_template (tmpl);
282           return tmpl;
283         }
284       return NULL_TREE;
285     }
286   else if (TREE_CODE (decl) == FIELD_DECL)
287     error ("data member %qD cannot be a member template", decl);
288   else if (DECL_TEMPLATE_INFO (decl))
289     {
290       if (!DECL_TEMPLATE_SPECIALIZATION (decl))
291         {
292           check_member_template (DECL_TI_TEMPLATE (decl));
293           return DECL_TI_TEMPLATE (decl);
294         }
295       else
296         return decl;
297     }
298   else
299     error ("invalid member template declaration %qD", decl);
300
301   return error_mark_node;
302 }
303
304 /* Create a template info node.  */
305
306 tree
307 build_template_info (tree template_decl, tree template_args)
308 {
309   tree result = make_node (TEMPLATE_INFO);
310   TI_TEMPLATE (result) = template_decl;
311   TI_ARGS (result) = template_args;
312   return result;
313 }
314
315 /* Return the template info node corresponding to T, whatever T is.  */
316
317 tree
318 get_template_info (const_tree t)
319 {
320   tree tinfo = NULL_TREE;
321
322   if (!t || t == error_mark_node)
323     return NULL;
324
325   if (DECL_P (t) && DECL_LANG_SPECIFIC (t))
326     tinfo = DECL_TEMPLATE_INFO (t);
327
328   if (!tinfo && DECL_IMPLICIT_TYPEDEF_P (t))
329     t = TREE_TYPE (t);
330
331   if (TAGGED_TYPE_P (t))
332     tinfo = TYPE_TEMPLATE_INFO (t);
333   else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
334     tinfo = TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t);
335
336   return tinfo;
337 }
338
339 /* Returns the template nesting level of the indicated class TYPE.
340
341    For example, in:
342      template <class T>
343      struct A
344      {
345        template <class U>
346        struct B {};
347      };
348
349    A<T>::B<U> has depth two, while A<T> has depth one.
350    Both A<T>::B<int> and A<int>::B<U> have depth one, if
351    they are instantiations, not specializations.
352
353    This function is guaranteed to return 0 if passed NULL_TREE so
354    that, for example, `template_class_depth (current_class_type)' is
355    always safe.  */
356
357 int
358 template_class_depth (tree type)
359 {
360   int depth;
361
362   for (depth = 0;
363        type && TREE_CODE (type) != NAMESPACE_DECL;
364        type = (TREE_CODE (type) == FUNCTION_DECL)
365          ? CP_DECL_CONTEXT (type) : CP_TYPE_CONTEXT (type))
366     {
367       tree tinfo = get_template_info (type);
368
369       if (tinfo && PRIMARY_TEMPLATE_P (TI_TEMPLATE (tinfo))
370           && uses_template_parms (INNERMOST_TEMPLATE_ARGS (TI_ARGS (tinfo))))
371         ++depth;
372     }
373
374   return depth;
375 }
376
377 /* Subroutine of maybe_begin_member_template_processing.
378    Returns true if processing DECL needs us to push template parms.  */
379
380 static bool
381 inline_needs_template_parms (tree decl)
382 {
383   if (! DECL_TEMPLATE_INFO (decl))
384     return false;
385
386   return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (most_general_template (decl)))
387           > (processing_template_decl + DECL_TEMPLATE_SPECIALIZATION (decl)));
388 }
389
390 /* Subroutine of maybe_begin_member_template_processing.
391    Push the template parms in PARMS, starting from LEVELS steps into the
392    chain, and ending at the beginning, since template parms are listed
393    innermost first.  */
394
395 static void
396 push_inline_template_parms_recursive (tree parmlist, int levels)
397 {
398   tree parms = TREE_VALUE (parmlist);
399   int i;
400
401   if (levels > 1)
402     push_inline_template_parms_recursive (TREE_CHAIN (parmlist), levels - 1);
403
404   ++processing_template_decl;
405   current_template_parms
406     = tree_cons (size_int (processing_template_decl),
407                  parms, current_template_parms);
408   TEMPLATE_PARMS_FOR_INLINE (current_template_parms) = 1;
409
410   begin_scope (TREE_VEC_LENGTH (parms) ? sk_template_parms : sk_template_spec,
411                NULL);
412   for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
413     {
414       tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
415
416       if (parm == error_mark_node)
417         continue;
418
419       gcc_assert (DECL_P (parm));
420
421       switch (TREE_CODE (parm))
422         {
423         case TYPE_DECL:
424         case TEMPLATE_DECL:
425           pushdecl (parm);
426           break;
427
428         case PARM_DECL:
429           {
430             /* Make a CONST_DECL as is done in process_template_parm.
431                It is ugly that we recreate this here; the original
432                version built in process_template_parm is no longer
433                available.  */
434             tree decl = build_decl (DECL_SOURCE_LOCATION (parm),
435                                     CONST_DECL, DECL_NAME (parm),
436                                     TREE_TYPE (parm));
437             DECL_ARTIFICIAL (decl) = 1;
438             TREE_CONSTANT (decl) = 1;
439             TREE_READONLY (decl) = 1;
440             DECL_INITIAL (decl) = DECL_INITIAL (parm);
441             SET_DECL_TEMPLATE_PARM_P (decl);
442             pushdecl (decl);
443           }
444           break;
445
446         default:
447           gcc_unreachable ();
448         }
449     }
450 }
451
452 /* Restore the template parameter context for a member template or
453    a friend template defined in a class definition.  */
454
455 void
456 maybe_begin_member_template_processing (tree decl)
457 {
458   tree parms;
459   int levels = 0;
460
461   if (inline_needs_template_parms (decl))
462     {
463       parms = DECL_TEMPLATE_PARMS (most_general_template (decl));
464       levels = TMPL_PARMS_DEPTH (parms) - processing_template_decl;
465
466       if (DECL_TEMPLATE_SPECIALIZATION (decl))
467         {
468           --levels;
469           parms = TREE_CHAIN (parms);
470         }
471
472       push_inline_template_parms_recursive (parms, levels);
473     }
474
475   /* Remember how many levels of template parameters we pushed so that
476      we can pop them later.  */
477   VEC_safe_push (int, heap, inline_parm_levels, levels);
478 }
479
480 /* Undo the effects of maybe_begin_member_template_processing.  */
481
482 void
483 maybe_end_member_template_processing (void)
484 {
485   int i;
486   int last;
487
488   if (VEC_length (int, inline_parm_levels) == 0)
489     return;
490
491   last = VEC_pop (int, inline_parm_levels);
492   for (i = 0; i < last; ++i)
493     {
494       --processing_template_decl;
495       current_template_parms = TREE_CHAIN (current_template_parms);
496       poplevel (0, 0, 0);
497     }
498 }
499
500 /* Return a new template argument vector which contains all of ARGS,
501    but has as its innermost set of arguments the EXTRA_ARGS.  */
502
503 static tree
504 add_to_template_args (tree args, tree extra_args)
505 {
506   tree new_args;
507   int extra_depth;
508   int i;
509   int j;
510
511   if (args == NULL_TREE || extra_args == error_mark_node)
512     return extra_args;
513
514   extra_depth = TMPL_ARGS_DEPTH (extra_args);
515   new_args = make_tree_vec (TMPL_ARGS_DEPTH (args) + extra_depth);
516
517   for (i = 1; i <= TMPL_ARGS_DEPTH (args); ++i)
518     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (args, i));
519
520   for (j = 1; j <= extra_depth; ++j, ++i)
521     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (extra_args, j));
522
523   return new_args;
524 }
525
526 /* Like add_to_template_args, but only the outermost ARGS are added to
527    the EXTRA_ARGS.  In particular, all but TMPL_ARGS_DEPTH
528    (EXTRA_ARGS) levels are added.  This function is used to combine
529    the template arguments from a partial instantiation with the
530    template arguments used to attain the full instantiation from the
531    partial instantiation.  */
532
533 static tree
534 add_outermost_template_args (tree args, tree extra_args)
535 {
536   tree new_args;
537
538   /* If there are more levels of EXTRA_ARGS than there are ARGS,
539      something very fishy is going on.  */
540   gcc_assert (TMPL_ARGS_DEPTH (args) >= TMPL_ARGS_DEPTH (extra_args));
541
542   /* If *all* the new arguments will be the EXTRA_ARGS, just return
543      them.  */
544   if (TMPL_ARGS_DEPTH (args) == TMPL_ARGS_DEPTH (extra_args))
545     return extra_args;
546
547   /* For the moment, we make ARGS look like it contains fewer levels.  */
548   TREE_VEC_LENGTH (args) -= TMPL_ARGS_DEPTH (extra_args);
549
550   new_args = add_to_template_args (args, extra_args);
551
552   /* Now, we restore ARGS to its full dimensions.  */
553   TREE_VEC_LENGTH (args) += TMPL_ARGS_DEPTH (extra_args);
554
555   return new_args;
556 }
557
558 /* Return the N levels of innermost template arguments from the ARGS.  */
559
560 tree
561 get_innermost_template_args (tree args, int n)
562 {
563   tree new_args;
564   int extra_levels;
565   int i;
566
567   gcc_assert (n >= 0);
568
569   /* If N is 1, just return the innermost set of template arguments.  */
570   if (n == 1)
571     return TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args));
572
573   /* If we're not removing anything, just return the arguments we were
574      given.  */
575   extra_levels = TMPL_ARGS_DEPTH (args) - n;
576   gcc_assert (extra_levels >= 0);
577   if (extra_levels == 0)
578     return args;
579
580   /* Make a new set of arguments, not containing the outer arguments.  */
581   new_args = make_tree_vec (n);
582   for (i = 1; i <= n; ++i)
583     SET_TMPL_ARGS_LEVEL (new_args, i,
584                          TMPL_ARGS_LEVEL (args, i + extra_levels));
585
586   return new_args;
587 }
588
589 /* The inverse of get_innermost_template_args: Return all but the innermost
590    EXTRA_LEVELS levels of template arguments from the ARGS.  */
591
592 static tree
593 strip_innermost_template_args (tree args, int extra_levels)
594 {
595   tree new_args;
596   int n = TMPL_ARGS_DEPTH (args) - extra_levels;
597   int i;
598
599   gcc_assert (n >= 0);
600
601   /* If N is 1, just return the outermost set of template arguments.  */
602   if (n == 1)
603     return TMPL_ARGS_LEVEL (args, 1);
604
605   /* If we're not removing anything, just return the arguments we were
606      given.  */
607   gcc_assert (extra_levels >= 0);
608   if (extra_levels == 0)
609     return args;
610
611   /* Make a new set of arguments, not containing the inner arguments.  */
612   new_args = make_tree_vec (n);
613   for (i = 1; i <= n; ++i)
614     SET_TMPL_ARGS_LEVEL (new_args, i,
615                          TMPL_ARGS_LEVEL (args, i));
616
617   return new_args;
618 }
619
620 /* We've got a template header coming up; push to a new level for storing
621    the parms.  */
622
623 void
624 begin_template_parm_list (void)
625 {
626   /* We use a non-tag-transparent scope here, which causes pushtag to
627      put tags in this scope, rather than in the enclosing class or
628      namespace scope.  This is the right thing, since we want
629      TEMPLATE_DECLS, and not TYPE_DECLS for template classes.  For a
630      global template class, push_template_decl handles putting the
631      TEMPLATE_DECL into top-level scope.  For a nested template class,
632      e.g.:
633
634        template <class T> struct S1 {
635          template <class T> struct S2 {};
636        };
637
638      pushtag contains special code to call pushdecl_with_scope on the
639      TEMPLATE_DECL for S2.  */
640   begin_scope (sk_template_parms, NULL);
641   ++processing_template_decl;
642   ++processing_template_parmlist;
643   note_template_header (0);
644 }
645
646 /* This routine is called when a specialization is declared.  If it is
647    invalid to declare a specialization here, an error is reported and
648    false is returned, otherwise this routine will return true.  */
649
650 static bool
651 check_specialization_scope (void)
652 {
653   tree scope = current_scope ();
654
655   /* [temp.expl.spec]
656
657      An explicit specialization shall be declared in the namespace of
658      which the template is a member, or, for member templates, in the
659      namespace of which the enclosing class or enclosing class
660      template is a member.  An explicit specialization of a member
661      function, member class or static data member of a class template
662      shall be declared in the namespace of which the class template
663      is a member.  */
664   if (scope && TREE_CODE (scope) != NAMESPACE_DECL)
665     {
666       error ("explicit specialization in non-namespace scope %qD", scope);
667       return false;
668     }
669
670   /* [temp.expl.spec]
671
672      In an explicit specialization declaration for a member of a class
673      template or a member template that appears in namespace scope,
674      the member template and some of its enclosing class templates may
675      remain unspecialized, except that the declaration shall not
676      explicitly specialize a class member template if its enclosing
677      class templates are not explicitly specialized as well.  */
678   if (current_template_parms)
679     {
680       error ("enclosing class templates are not explicitly specialized");
681       return false;
682     }
683
684   return true;
685 }
686
687 /* We've just seen template <>.  */
688
689 bool
690 begin_specialization (void)
691 {
692   begin_scope (sk_template_spec, NULL);
693   note_template_header (1);
694   return check_specialization_scope ();
695 }
696
697 /* Called at then end of processing a declaration preceded by
698    template<>.  */
699
700 void
701 end_specialization (void)
702 {
703   finish_scope ();
704   reset_specialization ();
705 }
706
707 /* Any template <>'s that we have seen thus far are not referring to a
708    function specialization.  */
709
710 void
711 reset_specialization (void)
712 {
713   processing_specialization = 0;
714   template_header_count = 0;
715 }
716
717 /* We've just seen a template header.  If SPECIALIZATION is nonzero,
718    it was of the form template <>.  */
719
720 static void
721 note_template_header (int specialization)
722 {
723   processing_specialization = specialization;
724   template_header_count++;
725 }
726
727 /* We're beginning an explicit instantiation.  */
728
729 void
730 begin_explicit_instantiation (void)
731 {
732   gcc_assert (!processing_explicit_instantiation);
733   processing_explicit_instantiation = true;
734 }
735
736
737 void
738 end_explicit_instantiation (void)
739 {
740   gcc_assert (processing_explicit_instantiation);
741   processing_explicit_instantiation = false;
742 }
743
744 /* An explicit specialization or partial specialization TMPL is being
745    declared.  Check that the namespace in which the specialization is
746    occurring is permissible.  Returns false iff it is invalid to
747    specialize TMPL in the current namespace.  */
748
749 static bool
750 check_specialization_namespace (tree tmpl)
751 {
752   tree tpl_ns = decl_namespace_context (tmpl);
753
754   /* [tmpl.expl.spec]
755
756      An explicit specialization shall be declared in the namespace of
757      which the template is a member, or, for member templates, in the
758      namespace of which the enclosing class or enclosing class
759      template is a member.  An explicit specialization of a member
760      function, member class or static data member of a class template
761      shall be declared in the namespace of which the class template is
762      a member.  */
763   if (current_scope() != DECL_CONTEXT (tmpl)
764       && !at_namespace_scope_p ())
765     {
766       error ("specialization of %qD must appear at namespace scope", tmpl);
767       return false;
768     }
769   if (is_associated_namespace (current_namespace, tpl_ns))
770     /* Same or super-using namespace.  */
771     return true;
772   else
773     {
774       permerror (input_location, "specialization of %qD in different namespace", tmpl);
775       permerror (input_location, "  from definition of %q+#D", tmpl);
776       return false;
777     }
778 }
779
780 /* SPEC is an explicit instantiation.  Check that it is valid to
781    perform this explicit instantiation in the current namespace.  */
782
783 static void
784 check_explicit_instantiation_namespace (tree spec)
785 {
786   tree ns;
787
788   /* DR 275: An explicit instantiation shall appear in an enclosing
789      namespace of its template.  */
790   ns = decl_namespace_context (spec);
791   if (!is_ancestor (current_namespace, ns))
792     permerror (input_location, "explicit instantiation of %qD in namespace %qD "
793                "(which does not enclose namespace %qD)",
794                spec, current_namespace, ns);
795 }
796
797 /* The TYPE is being declared.  If it is a template type, that means it
798    is a partial specialization.  Do appropriate error-checking.  */
799
800 tree
801 maybe_process_partial_specialization (tree type)
802 {
803   tree context;
804
805   if (type == error_mark_node)
806     return error_mark_node;
807
808   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
809     {
810       error ("name of class shadows template template parameter %qD",
811              TYPE_NAME (type));
812       return error_mark_node;
813     }
814
815   context = TYPE_CONTEXT (type);
816
817   if ((CLASS_TYPE_P (type) && CLASSTYPE_USE_TEMPLATE (type))
818       /* Consider non-class instantiations of alias templates as
819          well.  */
820       || (TYPE_P (type)
821           && TYPE_TEMPLATE_INFO (type)
822           && DECL_LANG_SPECIFIC (TYPE_NAME (type))
823           && DECL_USE_TEMPLATE (TYPE_NAME (type))))
824     {
825       /* This is for ordinary explicit specialization and partial
826          specialization of a template class such as:
827
828            template <> class C<int>;
829
830          or:
831
832            template <class T> class C<T*>;
833
834          Make sure that `C<int>' and `C<T*>' are implicit instantiations.  */
835
836       if (CLASS_TYPE_P (type)
837           && CLASSTYPE_IMPLICIT_INSTANTIATION (type)
838           && !COMPLETE_TYPE_P (type))
839         {
840           check_specialization_namespace (CLASSTYPE_TI_TEMPLATE (type));
841           SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
842           if (processing_template_decl)
843             {
844               if (push_template_decl (TYPE_MAIN_DECL (type))
845                   == error_mark_node)
846                 return error_mark_node;
847             }
848         }
849       else if (CLASS_TYPE_P (type)
850                && CLASSTYPE_TEMPLATE_INSTANTIATION (type))
851         error ("specialization of %qT after instantiation", type);
852
853       if (DECL_ALIAS_TEMPLATE_P (TYPE_TI_TEMPLATE (type)))
854         {
855           error ("partial specialization of alias template %qD",
856                  TYPE_TI_TEMPLATE (type));
857           return error_mark_node;
858         }
859     }
860   else if (CLASS_TYPE_P (type)
861            && !CLASSTYPE_USE_TEMPLATE (type)
862            && CLASSTYPE_TEMPLATE_INFO (type)
863            && context && CLASS_TYPE_P (context)
864            && CLASSTYPE_TEMPLATE_INFO (context))
865     {
866       /* This is for an explicit specialization of member class
867          template according to [temp.expl.spec/18]:
868
869            template <> template <class U> class C<int>::D;
870
871          The context `C<int>' must be an implicit instantiation.
872          Otherwise this is just a member class template declared
873          earlier like:
874
875            template <> class C<int> { template <class U> class D; };
876            template <> template <class U> class C<int>::D;
877
878          In the first case, `C<int>::D' is a specialization of `C<T>::D'
879          while in the second case, `C<int>::D' is a primary template
880          and `C<T>::D' may not exist.  */
881
882       if (CLASSTYPE_IMPLICIT_INSTANTIATION (context)
883           && !COMPLETE_TYPE_P (type))
884         {
885           tree t;
886           tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
887
888           if (current_namespace
889               != decl_namespace_context (tmpl))
890             {
891               permerror (input_location, "specializing %q#T in different namespace", type);
892               permerror (input_location, "  from definition of %q+#D", tmpl);
893             }
894
895           /* Check for invalid specialization after instantiation:
896
897                template <> template <> class C<int>::D<int>;
898                template <> template <class U> class C<int>::D;  */
899
900           for (t = DECL_TEMPLATE_INSTANTIATIONS (tmpl);
901                t; t = TREE_CHAIN (t))
902             {
903               tree inst = TREE_VALUE (t);
904               if (CLASSTYPE_TEMPLATE_SPECIALIZATION (inst))
905                 {
906                   /* We already have a full specialization of this partial
907                      instantiation.  Reassign it to the new member
908                      specialization template.  */
909                   spec_entry elt;
910                   spec_entry *entry;
911                   void **slot;
912
913                   elt.tmpl = most_general_template (tmpl);
914                   elt.args = CLASSTYPE_TI_ARGS (inst);
915                   elt.spec = inst;
916
917                   htab_remove_elt (type_specializations, &elt);
918
919                   elt.tmpl = tmpl;
920                   elt.args = INNERMOST_TEMPLATE_ARGS (elt.args);
921
922                   slot = htab_find_slot (type_specializations, &elt, INSERT);
923                   entry = ggc_alloc_spec_entry ();
924                   *entry = elt;
925                   *slot = entry;
926                 }
927               else if (COMPLETE_OR_OPEN_TYPE_P (inst))
928                 /* But if we've had an implicit instantiation, that's a
929                    problem ([temp.expl.spec]/6).  */
930                 error ("specialization %qT after instantiation %qT",
931                        type, inst);
932             }
933
934           /* Mark TYPE as a specialization.  And as a result, we only
935              have one level of template argument for the innermost
936              class template.  */
937           SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
938           CLASSTYPE_TI_ARGS (type)
939             = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type));
940         }
941     }
942   else if (processing_specialization)
943     {
944        /* Someday C++0x may allow for enum template specialization.  */
945       if (cxx_dialect > cxx98 && TREE_CODE (type) == ENUMERAL_TYPE
946           && CLASS_TYPE_P (context) && CLASSTYPE_USE_TEMPLATE (context))
947         pedwarn (input_location, OPT_pedantic, "template specialization "
948                  "of %qD not allowed by ISO C++", type);
949       else
950         {
951           error ("explicit specialization of non-template %qT", type);
952           return error_mark_node;
953         }
954     }
955
956   return type;
957 }
958
959 /* Returns nonzero if we can optimize the retrieval of specializations
960    for TMPL, a TEMPLATE_DECL.  In particular, for such a template, we
961    do not use DECL_TEMPLATE_SPECIALIZATIONS at all.  */
962
963 static inline bool
964 optimize_specialization_lookup_p (tree tmpl)
965 {
966   return (DECL_FUNCTION_TEMPLATE_P (tmpl)
967           && DECL_CLASS_SCOPE_P (tmpl)
968           /* DECL_CLASS_SCOPE_P holds of T::f even if T is a template
969              parameter.  */
970           && CLASS_TYPE_P (DECL_CONTEXT (tmpl))
971           /* The optimized lookup depends on the fact that the
972              template arguments for the member function template apply
973              purely to the containing class, which is not true if the
974              containing class is an explicit or partial
975              specialization.  */
976           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (tmpl))
977           && !DECL_MEMBER_TEMPLATE_P (tmpl)
978           && !DECL_CONV_FN_P (tmpl)
979           /* It is possible to have a template that is not a member
980              template and is not a member of a template class:
981
982              template <typename T>
983              struct S { friend A::f(); };
984
985              Here, the friend function is a template, but the context does
986              not have template information.  The optimized lookup relies
987              on having ARGS be the template arguments for both the class
988              and the function template.  */
989           && !DECL_FRIEND_P (DECL_TEMPLATE_RESULT (tmpl)));
990 }
991
992 /* Retrieve the specialization (in the sense of [temp.spec] - a
993    specialization is either an instantiation or an explicit
994    specialization) of TMPL for the given template ARGS.  If there is
995    no such specialization, return NULL_TREE.  The ARGS are a vector of
996    arguments, or a vector of vectors of arguments, in the case of
997    templates with more than one level of parameters.
998
999    If TMPL is a type template and CLASS_SPECIALIZATIONS_P is true,
1000    then we search for a partial specialization matching ARGS.  This
1001    parameter is ignored if TMPL is not a class template.  */
1002
1003 static tree
1004 retrieve_specialization (tree tmpl, tree args, hashval_t hash)
1005 {
1006   if (args == error_mark_node)
1007     return NULL_TREE;
1008
1009   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
1010
1011   /* There should be as many levels of arguments as there are
1012      levels of parameters.  */
1013   gcc_assert (TMPL_ARGS_DEPTH (args)
1014               == TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl)));
1015
1016   if (optimize_specialization_lookup_p (tmpl))
1017     {
1018       tree class_template;
1019       tree class_specialization;
1020       VEC(tree,gc) *methods;
1021       tree fns;
1022       int idx;
1023
1024       /* The template arguments actually apply to the containing
1025          class.  Find the class specialization with those
1026          arguments.  */
1027       class_template = CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (tmpl));
1028       class_specialization
1029         = retrieve_specialization (class_template, args, 0);
1030       if (!class_specialization)
1031         return NULL_TREE;
1032       /* Now, find the appropriate entry in the CLASSTYPE_METHOD_VEC
1033          for the specialization.  */
1034       idx = class_method_index_for_fn (class_specialization, tmpl);
1035       if (idx == -1)
1036         return NULL_TREE;
1037       /* Iterate through the methods with the indicated name, looking
1038          for the one that has an instance of TMPL.  */
1039       methods = CLASSTYPE_METHOD_VEC (class_specialization);
1040       for (fns = VEC_index (tree, methods, idx); fns; fns = OVL_NEXT (fns))
1041         {
1042           tree fn = OVL_CURRENT (fns);
1043           if (DECL_TEMPLATE_INFO (fn) && DECL_TI_TEMPLATE (fn) == tmpl
1044               /* using-declarations can add base methods to the method vec,
1045                  and we don't want those here.  */
1046               && DECL_CONTEXT (fn) == class_specialization)
1047             return fn;
1048         }
1049       return NULL_TREE;
1050     }
1051   else
1052     {
1053       spec_entry *found;
1054       spec_entry elt;
1055       htab_t specializations;
1056
1057       elt.tmpl = tmpl;
1058       elt.args = args;
1059       elt.spec = NULL_TREE;
1060
1061       if (DECL_CLASS_TEMPLATE_P (tmpl))
1062         specializations = type_specializations;
1063       else
1064         specializations = decl_specializations;
1065
1066       if (hash == 0)
1067         hash = hash_specialization (&elt);
1068       found = (spec_entry *) htab_find_with_hash (specializations, &elt, hash);
1069       if (found)
1070         return found->spec;
1071     }
1072
1073   return NULL_TREE;
1074 }
1075
1076 /* Like retrieve_specialization, but for local declarations.  */
1077
1078 static tree
1079 retrieve_local_specialization (tree tmpl)
1080 {
1081   tree spec;
1082
1083   if (local_specializations == NULL)
1084     return NULL_TREE;
1085
1086   spec = (tree) htab_find_with_hash (local_specializations, tmpl,
1087                                      htab_hash_pointer (tmpl));
1088   return spec ? TREE_PURPOSE (spec) : NULL_TREE;
1089 }
1090
1091 /* Returns nonzero iff DECL is a specialization of TMPL.  */
1092
1093 int
1094 is_specialization_of (tree decl, tree tmpl)
1095 {
1096   tree t;
1097
1098   if (TREE_CODE (decl) == FUNCTION_DECL)
1099     {
1100       for (t = decl;
1101            t != NULL_TREE;
1102            t = DECL_TEMPLATE_INFO (t) ? DECL_TI_TEMPLATE (t) : NULL_TREE)
1103         if (t == tmpl)
1104           return 1;
1105     }
1106   else
1107     {
1108       gcc_assert (TREE_CODE (decl) == TYPE_DECL);
1109
1110       for (t = TREE_TYPE (decl);
1111            t != NULL_TREE;
1112            t = CLASSTYPE_USE_TEMPLATE (t)
1113              ? TREE_TYPE (CLASSTYPE_TI_TEMPLATE (t)) : NULL_TREE)
1114         if (same_type_ignoring_top_level_qualifiers_p (t, TREE_TYPE (tmpl)))
1115           return 1;
1116     }
1117
1118   return 0;
1119 }
1120
1121 /* Returns nonzero iff DECL is a specialization of friend declaration
1122    FRIEND_DECL according to [temp.friend].  */
1123
1124 bool
1125 is_specialization_of_friend (tree decl, tree friend_decl)
1126 {
1127   bool need_template = true;
1128   int template_depth;
1129
1130   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
1131               || TREE_CODE (decl) == TYPE_DECL);
1132
1133   /* For [temp.friend/6] when FRIEND_DECL is an ordinary member function
1134      of a template class, we want to check if DECL is a specialization
1135      if this.  */
1136   if (TREE_CODE (friend_decl) == FUNCTION_DECL
1137       && DECL_TEMPLATE_INFO (friend_decl)
1138       && !DECL_USE_TEMPLATE (friend_decl))
1139     {
1140       /* We want a TEMPLATE_DECL for `is_specialization_of'.  */
1141       friend_decl = DECL_TI_TEMPLATE (friend_decl);
1142       need_template = false;
1143     }
1144   else if (TREE_CODE (friend_decl) == TEMPLATE_DECL
1145            && !PRIMARY_TEMPLATE_P (friend_decl))
1146     need_template = false;
1147
1148   /* There is nothing to do if this is not a template friend.  */
1149   if (TREE_CODE (friend_decl) != TEMPLATE_DECL)
1150     return false;
1151
1152   if (is_specialization_of (decl, friend_decl))
1153     return true;
1154
1155   /* [temp.friend/6]
1156      A member of a class template may be declared to be a friend of a
1157      non-template class.  In this case, the corresponding member of
1158      every specialization of the class template is a friend of the
1159      class granting friendship.
1160
1161      For example, given a template friend declaration
1162
1163        template <class T> friend void A<T>::f();
1164
1165      the member function below is considered a friend
1166
1167        template <> struct A<int> {
1168          void f();
1169        };
1170
1171      For this type of template friend, TEMPLATE_DEPTH below will be
1172      nonzero.  To determine if DECL is a friend of FRIEND, we first
1173      check if the enclosing class is a specialization of another.  */
1174
1175   template_depth = template_class_depth (CP_DECL_CONTEXT (friend_decl));
1176   if (template_depth
1177       && DECL_CLASS_SCOPE_P (decl)
1178       && is_specialization_of (TYPE_NAME (DECL_CONTEXT (decl)),
1179                                CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (friend_decl))))
1180     {
1181       /* Next, we check the members themselves.  In order to handle
1182          a few tricky cases, such as when FRIEND_DECL's are
1183
1184            template <class T> friend void A<T>::g(T t);
1185            template <class T> template <T t> friend void A<T>::h();
1186
1187          and DECL's are
1188
1189            void A<int>::g(int);
1190            template <int> void A<int>::h();
1191
1192          we need to figure out ARGS, the template arguments from
1193          the context of DECL.  This is required for template substitution
1194          of `T' in the function parameter of `g' and template parameter
1195          of `h' in the above examples.  Here ARGS corresponds to `int'.  */
1196
1197       tree context = DECL_CONTEXT (decl);
1198       tree args = NULL_TREE;
1199       int current_depth = 0;
1200
1201       while (current_depth < template_depth)
1202         {
1203           if (CLASSTYPE_TEMPLATE_INFO (context))
1204             {
1205               if (current_depth == 0)
1206                 args = TYPE_TI_ARGS (context);
1207               else
1208                 args = add_to_template_args (TYPE_TI_ARGS (context), args);
1209               current_depth++;
1210             }
1211           context = TYPE_CONTEXT (context);
1212         }
1213
1214       if (TREE_CODE (decl) == FUNCTION_DECL)
1215         {
1216           bool is_template;
1217           tree friend_type;
1218           tree decl_type;
1219           tree friend_args_type;
1220           tree decl_args_type;
1221
1222           /* Make sure that both DECL and FRIEND_DECL are templates or
1223              non-templates.  */
1224           is_template = DECL_TEMPLATE_INFO (decl)
1225                         && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl));
1226           if (need_template ^ is_template)
1227             return false;
1228           else if (is_template)
1229             {
1230               /* If both are templates, check template parameter list.  */
1231               tree friend_parms
1232                 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1233                                          args, tf_none);
1234               if (!comp_template_parms
1235                      (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (decl)),
1236                       friend_parms))
1237                 return false;
1238
1239               decl_type = TREE_TYPE (DECL_TI_TEMPLATE (decl));
1240             }
1241           else
1242             decl_type = TREE_TYPE (decl);
1243
1244           friend_type = tsubst_function_type (TREE_TYPE (friend_decl), args,
1245                                               tf_none, NULL_TREE);
1246           if (friend_type == error_mark_node)
1247             return false;
1248
1249           /* Check if return types match.  */
1250           if (!same_type_p (TREE_TYPE (decl_type), TREE_TYPE (friend_type)))
1251             return false;
1252
1253           /* Check if function parameter types match, ignoring the
1254              `this' parameter.  */
1255           friend_args_type = TYPE_ARG_TYPES (friend_type);
1256           decl_args_type = TYPE_ARG_TYPES (decl_type);
1257           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (friend_decl))
1258             friend_args_type = TREE_CHAIN (friend_args_type);
1259           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1260             decl_args_type = TREE_CHAIN (decl_args_type);
1261
1262           return compparms (decl_args_type, friend_args_type);
1263         }
1264       else
1265         {
1266           /* DECL is a TYPE_DECL */
1267           bool is_template;
1268           tree decl_type = TREE_TYPE (decl);
1269
1270           /* Make sure that both DECL and FRIEND_DECL are templates or
1271              non-templates.  */
1272           is_template
1273             = CLASSTYPE_TEMPLATE_INFO (decl_type)
1274               && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (decl_type));
1275
1276           if (need_template ^ is_template)
1277             return false;
1278           else if (is_template)
1279             {
1280               tree friend_parms;
1281               /* If both are templates, check the name of the two
1282                  TEMPLATE_DECL's first because is_friend didn't.  */
1283               if (DECL_NAME (CLASSTYPE_TI_TEMPLATE (decl_type))
1284                   != DECL_NAME (friend_decl))
1285                 return false;
1286
1287               /* Now check template parameter list.  */
1288               friend_parms
1289                 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1290                                          args, tf_none);
1291               return comp_template_parms
1292                 (DECL_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (decl_type)),
1293                  friend_parms);
1294             }
1295           else
1296             return (DECL_NAME (decl)
1297                     == DECL_NAME (friend_decl));
1298         }
1299     }
1300   return false;
1301 }
1302
1303 /* Register the specialization SPEC as a specialization of TMPL with
1304    the indicated ARGS.  IS_FRIEND indicates whether the specialization
1305    is actually just a friend declaration.  Returns SPEC, or an
1306    equivalent prior declaration, if available.  */
1307
1308 static tree
1309 register_specialization (tree spec, tree tmpl, tree args, bool is_friend,
1310                          hashval_t hash)
1311 {
1312   tree fn;
1313   void **slot = NULL;
1314   spec_entry elt;
1315
1316   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL && DECL_P (spec));
1317
1318   if (TREE_CODE (spec) == FUNCTION_DECL
1319       && uses_template_parms (DECL_TI_ARGS (spec)))
1320     /* This is the FUNCTION_DECL for a partial instantiation.  Don't
1321        register it; we want the corresponding TEMPLATE_DECL instead.
1322        We use `uses_template_parms (DECL_TI_ARGS (spec))' rather than
1323        the more obvious `uses_template_parms (spec)' to avoid problems
1324        with default function arguments.  In particular, given
1325        something like this:
1326
1327           template <class T> void f(T t1, T t = T())
1328
1329        the default argument expression is not substituted for in an
1330        instantiation unless and until it is actually needed.  */
1331     return spec;
1332
1333   if (optimize_specialization_lookup_p (tmpl))
1334     /* We don't put these specializations in the hash table, but we might
1335        want to give an error about a mismatch.  */
1336     fn = retrieve_specialization (tmpl, args, 0);
1337   else
1338     {
1339       elt.tmpl = tmpl;
1340       elt.args = args;
1341       elt.spec = spec;
1342
1343       if (hash == 0)
1344         hash = hash_specialization (&elt);
1345
1346       slot =
1347         htab_find_slot_with_hash (decl_specializations, &elt, hash, INSERT);
1348       if (*slot)
1349         fn = ((spec_entry *) *slot)->spec;
1350       else
1351         fn = NULL_TREE;
1352     }
1353
1354   /* We can sometimes try to re-register a specialization that we've
1355      already got.  In particular, regenerate_decl_from_template calls
1356      duplicate_decls which will update the specialization list.  But,
1357      we'll still get called again here anyhow.  It's more convenient
1358      to simply allow this than to try to prevent it.  */
1359   if (fn == spec)
1360     return spec;
1361   else if (fn && DECL_TEMPLATE_SPECIALIZATION (spec))
1362     {
1363       if (DECL_TEMPLATE_INSTANTIATION (fn))
1364         {
1365           if (DECL_ODR_USED (fn)
1366               || DECL_EXPLICIT_INSTANTIATION (fn))
1367             {
1368               error ("specialization of %qD after instantiation",
1369                      fn);
1370               return error_mark_node;
1371             }
1372           else
1373             {
1374               tree clone;
1375               /* This situation should occur only if the first
1376                  specialization is an implicit instantiation, the
1377                  second is an explicit specialization, and the
1378                  implicit instantiation has not yet been used.  That
1379                  situation can occur if we have implicitly
1380                  instantiated a member function and then specialized
1381                  it later.
1382
1383                  We can also wind up here if a friend declaration that
1384                  looked like an instantiation turns out to be a
1385                  specialization:
1386
1387                    template <class T> void foo(T);
1388                    class S { friend void foo<>(int) };
1389                    template <> void foo(int);
1390
1391                  We transform the existing DECL in place so that any
1392                  pointers to it become pointers to the updated
1393                  declaration.
1394
1395                  If there was a definition for the template, but not
1396                  for the specialization, we want this to look as if
1397                  there were no definition, and vice versa.  */
1398               DECL_INITIAL (fn) = NULL_TREE;
1399               duplicate_decls (spec, fn, is_friend);
1400               /* The call to duplicate_decls will have applied
1401                  [temp.expl.spec]:
1402
1403                    An explicit specialization of a function template
1404                    is inline only if it is explicitly declared to be,
1405                    and independently of whether its function template
1406                    is.
1407
1408                 to the primary function; now copy the inline bits to
1409                 the various clones.  */
1410               FOR_EACH_CLONE (clone, fn)
1411                 {
1412                   DECL_DECLARED_INLINE_P (clone)
1413                     = DECL_DECLARED_INLINE_P (fn);
1414                   DECL_SOURCE_LOCATION (clone)
1415                     = DECL_SOURCE_LOCATION (fn);
1416                 }
1417               check_specialization_namespace (fn);
1418
1419               return fn;
1420             }
1421         }
1422       else if (DECL_TEMPLATE_SPECIALIZATION (fn))
1423         {
1424           if (!duplicate_decls (spec, fn, is_friend) && DECL_INITIAL (spec))
1425             /* Dup decl failed, but this is a new definition. Set the
1426                line number so any errors match this new
1427                definition.  */
1428             DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (spec);
1429
1430           return fn;
1431         }
1432     }
1433   else if (fn)
1434     return duplicate_decls (spec, fn, is_friend);
1435
1436   /* A specialization must be declared in the same namespace as the
1437      template it is specializing.  */
1438   if (DECL_TEMPLATE_SPECIALIZATION (spec)
1439       && !check_specialization_namespace (tmpl))
1440     DECL_CONTEXT (spec) = DECL_CONTEXT (tmpl);
1441
1442   if (slot != NULL /* !optimize_specialization_lookup_p (tmpl) */)
1443     {
1444       spec_entry *entry = ggc_alloc_spec_entry ();
1445       gcc_assert (tmpl && args && spec);
1446       *entry = elt;
1447       *slot = entry;
1448       if (TREE_CODE (spec) == FUNCTION_DECL && DECL_NAMESPACE_SCOPE_P (spec)
1449           && PRIMARY_TEMPLATE_P (tmpl)
1450           && DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (tmpl)) == NULL_TREE)
1451         /* TMPL is a forward declaration of a template function; keep a list
1452            of all specializations in case we need to reassign them to a friend
1453            template later in tsubst_friend_function.  */
1454         DECL_TEMPLATE_INSTANTIATIONS (tmpl)
1455           = tree_cons (args, spec, DECL_TEMPLATE_INSTANTIATIONS (tmpl));
1456     }
1457
1458   return spec;
1459 }
1460
1461 /* Returns true iff two spec_entry nodes are equivalent.  Only compares the
1462    TMPL and ARGS members, ignores SPEC.  */
1463
1464 static int
1465 eq_specializations (const void *p1, const void *p2)
1466 {
1467   const spec_entry *e1 = (const spec_entry *)p1;
1468   const spec_entry *e2 = (const spec_entry *)p2;
1469
1470   return (e1->tmpl == e2->tmpl
1471           && comp_template_args (e1->args, e2->args));
1472 }
1473
1474 /* Returns a hash for a template TMPL and template arguments ARGS.  */
1475
1476 static hashval_t
1477 hash_tmpl_and_args (tree tmpl, tree args)
1478 {
1479   hashval_t val = DECL_UID (tmpl);
1480   return iterative_hash_template_arg (args, val);
1481 }
1482
1483 /* Returns a hash for a spec_entry node based on the TMPL and ARGS members,
1484    ignoring SPEC.  */
1485
1486 static hashval_t
1487 hash_specialization (const void *p)
1488 {
1489   const spec_entry *e = (const spec_entry *)p;
1490   return hash_tmpl_and_args (e->tmpl, e->args);
1491 }
1492
1493 /* Recursively calculate a hash value for a template argument ARG, for use
1494    in the hash tables of template specializations.  */
1495
1496 hashval_t
1497 iterative_hash_template_arg (tree arg, hashval_t val)
1498 {
1499   unsigned HOST_WIDE_INT i;
1500   enum tree_code code;
1501   char tclass;
1502
1503   if (arg == NULL_TREE)
1504     return iterative_hash_object (arg, val);
1505
1506   if (!TYPE_P (arg))
1507     STRIP_NOPS (arg);
1508
1509   if (TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
1510     /* We can get one of these when re-hashing a previous entry in the middle
1511        of substituting into a pack expansion.  Just look through it.  */
1512     arg = ARGUMENT_PACK_SELECT_FROM_PACK (arg);
1513
1514   code = TREE_CODE (arg);
1515   tclass = TREE_CODE_CLASS (code);
1516
1517   val = iterative_hash_object (code, val);
1518
1519   switch (code)
1520     {
1521     case ERROR_MARK:
1522       return val;
1523
1524     case IDENTIFIER_NODE:
1525       return iterative_hash_object (IDENTIFIER_HASH_VALUE (arg), val);
1526
1527     case TREE_VEC:
1528       {
1529         int i, len = TREE_VEC_LENGTH (arg);
1530         for (i = 0; i < len; ++i)
1531           val = iterative_hash_template_arg (TREE_VEC_ELT (arg, i), val);
1532         return val;
1533       }
1534
1535     case TYPE_PACK_EXPANSION:
1536     case EXPR_PACK_EXPANSION:
1537       val = iterative_hash_template_arg (PACK_EXPANSION_PATTERN (arg), val);
1538       return iterative_hash_template_arg (PACK_EXPANSION_EXTRA_ARGS (arg), val);
1539
1540     case TYPE_ARGUMENT_PACK:
1541     case NONTYPE_ARGUMENT_PACK:
1542       return iterative_hash_template_arg (ARGUMENT_PACK_ARGS (arg), val);
1543
1544     case TREE_LIST:
1545       for (; arg; arg = TREE_CHAIN (arg))
1546         val = iterative_hash_template_arg (TREE_VALUE (arg), val);
1547       return val;
1548
1549     case OVERLOAD:
1550       for (; arg; arg = OVL_NEXT (arg))
1551         val = iterative_hash_template_arg (OVL_CURRENT (arg), val);
1552       return val;
1553
1554     case CONSTRUCTOR:
1555       {
1556         tree field, value;
1557         FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (arg), i, field, value)
1558           {
1559             val = iterative_hash_template_arg (field, val);
1560             val = iterative_hash_template_arg (value, val);
1561           }
1562         return val;
1563       }
1564
1565     case PARM_DECL:
1566       if (!DECL_ARTIFICIAL (arg))
1567         {
1568           val = iterative_hash_object (DECL_PARM_INDEX (arg), val);
1569           val = iterative_hash_object (DECL_PARM_LEVEL (arg), val);
1570         }
1571       return iterative_hash_template_arg (TREE_TYPE (arg), val);
1572
1573     case TARGET_EXPR:
1574       return iterative_hash_template_arg (TARGET_EXPR_INITIAL (arg), val);
1575
1576     case PTRMEM_CST:
1577       val = iterative_hash_template_arg (PTRMEM_CST_CLASS (arg), val);
1578       return iterative_hash_template_arg (PTRMEM_CST_MEMBER (arg), val);
1579
1580     case TEMPLATE_PARM_INDEX:
1581       val = iterative_hash_template_arg
1582         (TREE_TYPE (TEMPLATE_PARM_DECL (arg)), val);
1583       val = iterative_hash_object (TEMPLATE_PARM_LEVEL (arg), val);
1584       return iterative_hash_object (TEMPLATE_PARM_IDX (arg), val);
1585
1586     case TRAIT_EXPR:
1587       val = iterative_hash_object (TRAIT_EXPR_KIND (arg), val);
1588       val = iterative_hash_template_arg (TRAIT_EXPR_TYPE1 (arg), val);
1589       return iterative_hash_template_arg (TRAIT_EXPR_TYPE2 (arg), val);
1590
1591     case BASELINK:
1592       val = iterative_hash_template_arg (BINFO_TYPE (BASELINK_BINFO (arg)),
1593                                          val);
1594       return iterative_hash_template_arg (DECL_NAME (get_first_fn (arg)),
1595                                           val);
1596
1597     case MODOP_EXPR:
1598       val = iterative_hash_template_arg (TREE_OPERAND (arg, 0), val);
1599       code = TREE_CODE (TREE_OPERAND (arg, 1));
1600       val = iterative_hash_object (code, val);
1601       return iterative_hash_template_arg (TREE_OPERAND (arg, 2), val);
1602
1603     case LAMBDA_EXPR:
1604       /* A lambda can't appear in a template arg, but don't crash on
1605          erroneous input.  */
1606       gcc_assert (seen_error ());
1607       return val;
1608
1609     case CAST_EXPR:
1610     case IMPLICIT_CONV_EXPR:
1611     case STATIC_CAST_EXPR:
1612     case REINTERPRET_CAST_EXPR:
1613     case CONST_CAST_EXPR:
1614     case DYNAMIC_CAST_EXPR:
1615     case NEW_EXPR:
1616       val = iterative_hash_template_arg (TREE_TYPE (arg), val);
1617       /* Now hash operands as usual.  */
1618       break;
1619
1620     default:
1621       break;
1622     }
1623
1624   switch (tclass)
1625     {
1626     case tcc_type:
1627       if (TYPE_CANONICAL (arg))
1628         return iterative_hash_object (TYPE_HASH (TYPE_CANONICAL (arg)),
1629                                       val);
1630       else if (TREE_CODE (arg) == DECLTYPE_TYPE)
1631         return iterative_hash_template_arg (DECLTYPE_TYPE_EXPR (arg), val);
1632       /* Otherwise just compare the types during lookup.  */
1633       return val;
1634
1635     case tcc_declaration:
1636     case tcc_constant:
1637       return iterative_hash_expr (arg, val);
1638
1639     default:
1640       gcc_assert (IS_EXPR_CODE_CLASS (tclass));
1641       {
1642         unsigned n = cp_tree_operand_length (arg);
1643         for (i = 0; i < n; ++i)
1644           val = iterative_hash_template_arg (TREE_OPERAND (arg, i), val);
1645         return val;
1646       }
1647     }
1648   gcc_unreachable ();
1649   return 0;
1650 }
1651
1652 /* Unregister the specialization SPEC as a specialization of TMPL.
1653    Replace it with NEW_SPEC, if NEW_SPEC is non-NULL.  Returns true
1654    if the SPEC was listed as a specialization of TMPL.
1655
1656    Note that SPEC has been ggc_freed, so we can't look inside it.  */
1657
1658 bool
1659 reregister_specialization (tree spec, tree tinfo, tree new_spec)
1660 {
1661   spec_entry *entry;
1662   spec_entry elt;
1663
1664   elt.tmpl = most_general_template (TI_TEMPLATE (tinfo));
1665   elt.args = TI_ARGS (tinfo);
1666   elt.spec = NULL_TREE;
1667
1668   entry = (spec_entry *) htab_find (decl_specializations, &elt);
1669   if (entry != NULL)
1670     {
1671       gcc_assert (entry->spec == spec || entry->spec == new_spec);
1672       gcc_assert (new_spec != NULL_TREE);
1673       entry->spec = new_spec;
1674       return 1;
1675     }
1676
1677   return 0;
1678 }
1679
1680 /* Compare an entry in the local specializations hash table P1 (which
1681    is really a pointer to a TREE_LIST) with P2 (which is really a
1682    DECL).  */
1683
1684 static int
1685 eq_local_specializations (const void *p1, const void *p2)
1686 {
1687   return TREE_VALUE ((const_tree) p1) == (const_tree) p2;
1688 }
1689
1690 /* Hash P1, an entry in the local specializations table.  */
1691
1692 static hashval_t
1693 hash_local_specialization (const void* p1)
1694 {
1695   return htab_hash_pointer (TREE_VALUE ((const_tree) p1));
1696 }
1697
1698 /* Like register_specialization, but for local declarations.  We are
1699    registering SPEC, an instantiation of TMPL.  */
1700
1701 static void
1702 register_local_specialization (tree spec, tree tmpl)
1703 {
1704   void **slot;
1705
1706   slot = htab_find_slot_with_hash (local_specializations, tmpl,
1707                                    htab_hash_pointer (tmpl), INSERT);
1708   *slot = build_tree_list (spec, tmpl);
1709 }
1710
1711 /* TYPE is a class type.  Returns true if TYPE is an explicitly
1712    specialized class.  */
1713
1714 bool
1715 explicit_class_specialization_p (tree type)
1716 {
1717   if (!CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
1718     return false;
1719   return !uses_template_parms (CLASSTYPE_TI_ARGS (type));
1720 }
1721
1722 /* Print the list of functions at FNS, going through all the overloads
1723    for each element of the list.  Alternatively, FNS can not be a
1724    TREE_LIST, in which case it will be printed together with all the
1725    overloads.
1726
1727    MORE and *STR should respectively be FALSE and NULL when the function
1728    is called from the outside.  They are used internally on recursive
1729    calls.  print_candidates manages the two parameters and leaves NULL
1730    in *STR when it ends.  */
1731
1732 static void
1733 print_candidates_1 (tree fns, bool more, const char **str)
1734 {
1735   tree fn, fn2;
1736   char *spaces = NULL;
1737
1738   for (fn = fns; fn; fn = OVL_NEXT (fn))
1739     if (TREE_CODE (fn) == TREE_LIST)
1740       {
1741         for (fn2 = fn; fn2 != NULL_TREE; fn2 = TREE_CHAIN (fn2))
1742           print_candidates_1 (TREE_VALUE (fn2),
1743                               TREE_CHAIN (fn2) || more, str);
1744       }
1745     else
1746       {
1747         if (!*str)
1748           {
1749             /* Pick the prefix string.  */
1750             if (!more && !OVL_NEXT (fns))
1751               {
1752                 error ("candidate is: %+#D", OVL_CURRENT (fn));
1753                 continue;
1754               }
1755
1756             *str = _("candidates are:");
1757             spaces = get_spaces (*str);
1758           }
1759         error ("%s %+#D", *str, OVL_CURRENT (fn));
1760         *str = spaces ? spaces : *str;
1761       }
1762
1763   if (!more)
1764     {
1765       free (spaces);
1766       *str = NULL;
1767     }
1768 }
1769
1770 /* Print the list of candidate FNS in an error message.  FNS can also
1771    be a TREE_LIST of non-functions in the case of an ambiguous lookup.  */
1772
1773 void
1774 print_candidates (tree fns)
1775 {
1776   const char *str = NULL;
1777   print_candidates_1 (fns, false, &str);
1778   gcc_assert (str == NULL);
1779 }
1780
1781 /* Returns the template (one of the functions given by TEMPLATE_ID)
1782    which can be specialized to match the indicated DECL with the
1783    explicit template args given in TEMPLATE_ID.  The DECL may be
1784    NULL_TREE if none is available.  In that case, the functions in
1785    TEMPLATE_ID are non-members.
1786
1787    If NEED_MEMBER_TEMPLATE is nonzero the function is known to be a
1788    specialization of a member template.
1789
1790    The TEMPLATE_COUNT is the number of references to qualifying
1791    template classes that appeared in the name of the function. See
1792    check_explicit_specialization for a more accurate description.
1793
1794    TSK indicates what kind of template declaration (if any) is being
1795    declared.  TSK_TEMPLATE indicates that the declaration given by
1796    DECL, though a FUNCTION_DECL, has template parameters, and is
1797    therefore a template function.
1798
1799    The template args (those explicitly specified and those deduced)
1800    are output in a newly created vector *TARGS_OUT.
1801
1802    If it is impossible to determine the result, an error message is
1803    issued.  The error_mark_node is returned to indicate failure.  */
1804
1805 static tree
1806 determine_specialization (tree template_id,
1807                           tree decl,
1808                           tree* targs_out,
1809                           int need_member_template,
1810                           int template_count,
1811                           tmpl_spec_kind tsk)
1812 {
1813   tree fns;
1814   tree targs;
1815   tree explicit_targs;
1816   tree candidates = NULL_TREE;
1817   /* A TREE_LIST of templates of which DECL may be a specialization.
1818      The TREE_VALUE of each node is a TEMPLATE_DECL.  The
1819      corresponding TREE_PURPOSE is the set of template arguments that,
1820      when used to instantiate the template, would produce a function
1821      with the signature of DECL.  */
1822   tree templates = NULL_TREE;
1823   int header_count;
1824   cp_binding_level *b;
1825
1826   *targs_out = NULL_TREE;
1827
1828   if (template_id == error_mark_node || decl == error_mark_node)
1829     return error_mark_node;
1830
1831   fns = TREE_OPERAND (template_id, 0);
1832   explicit_targs = TREE_OPERAND (template_id, 1);
1833
1834   if (fns == error_mark_node)
1835     return error_mark_node;
1836
1837   /* Check for baselinks.  */
1838   if (BASELINK_P (fns))
1839     fns = BASELINK_FUNCTIONS (fns);
1840
1841   if (!is_overloaded_fn (fns))
1842     {
1843       error ("%qD is not a function template", fns);
1844       return error_mark_node;
1845     }
1846
1847   /* Count the number of template headers specified for this
1848      specialization.  */
1849   header_count = 0;
1850   for (b = current_binding_level;
1851        b->kind == sk_template_parms;
1852        b = b->level_chain)
1853     ++header_count;
1854
1855   for (; fns; fns = OVL_NEXT (fns))
1856     {
1857       tree fn = OVL_CURRENT (fns);
1858
1859       if (TREE_CODE (fn) == TEMPLATE_DECL)
1860         {
1861           tree decl_arg_types;
1862           tree fn_arg_types;
1863
1864           /* In case of explicit specialization, we need to check if
1865              the number of template headers appearing in the specialization
1866              is correct. This is usually done in check_explicit_specialization,
1867              but the check done there cannot be exhaustive when specializing
1868              member functions. Consider the following code:
1869
1870              template <> void A<int>::f(int);
1871              template <> template <> void A<int>::f(int);
1872
1873              Assuming that A<int> is not itself an explicit specialization
1874              already, the first line specializes "f" which is a non-template
1875              member function, whilst the second line specializes "f" which
1876              is a template member function. So both lines are syntactically
1877              correct, and check_explicit_specialization does not reject
1878              them.
1879
1880              Here, we can do better, as we are matching the specialization
1881              against the declarations. We count the number of template
1882              headers, and we check if they match TEMPLATE_COUNT + 1
1883              (TEMPLATE_COUNT is the number of qualifying template classes,
1884              plus there must be another header for the member template
1885              itself).
1886
1887              Notice that if header_count is zero, this is not a
1888              specialization but rather a template instantiation, so there
1889              is no check we can perform here.  */
1890           if (header_count && header_count != template_count + 1)
1891             continue;
1892
1893           /* Check that the number of template arguments at the
1894              innermost level for DECL is the same as for FN.  */
1895           if (current_binding_level->kind == sk_template_parms
1896               && !current_binding_level->explicit_spec_p
1897               && (TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (fn))
1898                   != TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS
1899                                       (current_template_parms))))
1900             continue;
1901
1902           /* DECL might be a specialization of FN.  */
1903           decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1904           fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
1905
1906           /* For a non-static member function, we need to make sure
1907              that the const qualification is the same.  Since
1908              get_bindings does not try to merge the "this" parameter,
1909              we must do the comparison explicitly.  */
1910           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1911               && !same_type_p (TREE_VALUE (fn_arg_types),
1912                                TREE_VALUE (decl_arg_types)))
1913             continue;
1914
1915           /* Skip the "this" parameter and, for constructors of
1916              classes with virtual bases, the VTT parameter.  A
1917              full specialization of a constructor will have a VTT
1918              parameter, but a template never will.  */ 
1919           decl_arg_types 
1920             = skip_artificial_parms_for (decl, decl_arg_types);
1921           fn_arg_types 
1922             = skip_artificial_parms_for (fn, fn_arg_types);
1923
1924           /* Check that the number of function parameters matches.
1925              For example,
1926                template <class T> void f(int i = 0);
1927                template <> void f<int>();
1928              The specialization f<int> is invalid but is not caught
1929              by get_bindings below.  */
1930           if (list_length (fn_arg_types) != list_length (decl_arg_types))
1931             continue;
1932
1933           /* Function templates cannot be specializations; there are
1934              no partial specializations of functions.  Therefore, if
1935              the type of DECL does not match FN, there is no
1936              match.  */
1937           if (tsk == tsk_template)
1938             {
1939               if (compparms (fn_arg_types, decl_arg_types))
1940                 candidates = tree_cons (NULL_TREE, fn, candidates);
1941               continue;
1942             }
1943
1944           /* See whether this function might be a specialization of this
1945              template.  */
1946           targs = get_bindings (fn, decl, explicit_targs, /*check_ret=*/true);
1947
1948           if (!targs)
1949             /* We cannot deduce template arguments that when used to
1950                specialize TMPL will produce DECL.  */
1951             continue;
1952
1953           /* Save this template, and the arguments deduced.  */
1954           templates = tree_cons (targs, fn, templates);
1955         }
1956       else if (need_member_template)
1957         /* FN is an ordinary member function, and we need a
1958            specialization of a member template.  */
1959         ;
1960       else if (TREE_CODE (fn) != FUNCTION_DECL)
1961         /* We can get IDENTIFIER_NODEs here in certain erroneous
1962            cases.  */
1963         ;
1964       else if (!DECL_FUNCTION_MEMBER_P (fn))
1965         /* This is just an ordinary non-member function.  Nothing can
1966            be a specialization of that.  */
1967         ;
1968       else if (DECL_ARTIFICIAL (fn))
1969         /* Cannot specialize functions that are created implicitly.  */
1970         ;
1971       else
1972         {
1973           tree decl_arg_types;
1974
1975           /* This is an ordinary member function.  However, since
1976              we're here, we can assume it's enclosing class is a
1977              template class.  For example,
1978
1979                template <typename T> struct S { void f(); };
1980                template <> void S<int>::f() {}
1981
1982              Here, S<int>::f is a non-template, but S<int> is a
1983              template class.  If FN has the same type as DECL, we
1984              might be in business.  */
1985
1986           if (!DECL_TEMPLATE_INFO (fn))
1987             /* Its enclosing class is an explicit specialization
1988                of a template class.  This is not a candidate.  */
1989             continue;
1990
1991           if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
1992                             TREE_TYPE (TREE_TYPE (fn))))
1993             /* The return types differ.  */
1994             continue;
1995
1996           /* Adjust the type of DECL in case FN is a static member.  */
1997           decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1998           if (DECL_STATIC_FUNCTION_P (fn)
1999               && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2000             decl_arg_types = TREE_CHAIN (decl_arg_types);
2001
2002           if (compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
2003                          decl_arg_types))
2004             /* They match!  */
2005             candidates = tree_cons (NULL_TREE, fn, candidates);
2006         }
2007     }
2008
2009   if (templates && TREE_CHAIN (templates))
2010     {
2011       /* We have:
2012
2013            [temp.expl.spec]
2014
2015            It is possible for a specialization with a given function
2016            signature to be instantiated from more than one function
2017            template.  In such cases, explicit specification of the
2018            template arguments must be used to uniquely identify the
2019            function template specialization being specialized.
2020
2021          Note that here, there's no suggestion that we're supposed to
2022          determine which of the candidate templates is most
2023          specialized.  However, we, also have:
2024
2025            [temp.func.order]
2026
2027            Partial ordering of overloaded function template
2028            declarations is used in the following contexts to select
2029            the function template to which a function template
2030            specialization refers:
2031
2032            -- when an explicit specialization refers to a function
2033               template.
2034
2035          So, we do use the partial ordering rules, at least for now.
2036          This extension can only serve to make invalid programs valid,
2037          so it's safe.  And, there is strong anecdotal evidence that
2038          the committee intended the partial ordering rules to apply;
2039          the EDG front end has that behavior, and John Spicer claims
2040          that the committee simply forgot to delete the wording in
2041          [temp.expl.spec].  */
2042       tree tmpl = most_specialized_instantiation (templates);
2043       if (tmpl != error_mark_node)
2044         {
2045           templates = tmpl;
2046           TREE_CHAIN (templates) = NULL_TREE;
2047         }
2048     }
2049
2050   if (templates == NULL_TREE && candidates == NULL_TREE)
2051     {
2052       error ("template-id %qD for %q+D does not match any template "
2053              "declaration", template_id, decl);
2054       if (header_count && header_count != template_count + 1)
2055         inform (input_location, "saw %d %<template<>%>, need %d for "
2056                 "specializing a member function template",
2057                 header_count, template_count + 1);
2058       return error_mark_node;
2059     }
2060   else if ((templates && TREE_CHAIN (templates))
2061            || (candidates && TREE_CHAIN (candidates))
2062            || (templates && candidates))
2063     {
2064       error ("ambiguous template specialization %qD for %q+D",
2065              template_id, decl);
2066       candidates = chainon (candidates, templates);
2067       print_candidates (candidates);
2068       return error_mark_node;
2069     }
2070
2071   /* We have one, and exactly one, match.  */
2072   if (candidates)
2073     {
2074       tree fn = TREE_VALUE (candidates);
2075       *targs_out = copy_node (DECL_TI_ARGS (fn));
2076       /* DECL is a re-declaration or partial instantiation of a template
2077          function.  */
2078       if (TREE_CODE (fn) == TEMPLATE_DECL)
2079         return fn;
2080       /* It was a specialization of an ordinary member function in a
2081          template class.  */
2082       return DECL_TI_TEMPLATE (fn);
2083     }
2084
2085   /* It was a specialization of a template.  */
2086   targs = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (TREE_VALUE (templates)));
2087   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (targs))
2088     {
2089       *targs_out = copy_node (targs);
2090       SET_TMPL_ARGS_LEVEL (*targs_out,
2091                            TMPL_ARGS_DEPTH (*targs_out),
2092                            TREE_PURPOSE (templates));
2093     }
2094   else
2095     *targs_out = TREE_PURPOSE (templates);
2096   return TREE_VALUE (templates);
2097 }
2098
2099 /* Returns a chain of parameter types, exactly like the SPEC_TYPES,
2100    but with the default argument values filled in from those in the
2101    TMPL_TYPES.  */
2102
2103 static tree
2104 copy_default_args_to_explicit_spec_1 (tree spec_types,
2105                                       tree tmpl_types)
2106 {
2107   tree new_spec_types;
2108
2109   if (!spec_types)
2110     return NULL_TREE;
2111
2112   if (spec_types == void_list_node)
2113     return void_list_node;
2114
2115   /* Substitute into the rest of the list.  */
2116   new_spec_types =
2117     copy_default_args_to_explicit_spec_1 (TREE_CHAIN (spec_types),
2118                                           TREE_CHAIN (tmpl_types));
2119
2120   /* Add the default argument for this parameter.  */
2121   return hash_tree_cons (TREE_PURPOSE (tmpl_types),
2122                          TREE_VALUE (spec_types),
2123                          new_spec_types);
2124 }
2125
2126 /* DECL is an explicit specialization.  Replicate default arguments
2127    from the template it specializes.  (That way, code like:
2128
2129      template <class T> void f(T = 3);
2130      template <> void f(double);
2131      void g () { f (); }
2132
2133    works, as required.)  An alternative approach would be to look up
2134    the correct default arguments at the call-site, but this approach
2135    is consistent with how implicit instantiations are handled.  */
2136
2137 static void
2138 copy_default_args_to_explicit_spec (tree decl)
2139 {
2140   tree tmpl;
2141   tree spec_types;
2142   tree tmpl_types;
2143   tree new_spec_types;
2144   tree old_type;
2145   tree new_type;
2146   tree t;
2147   tree object_type = NULL_TREE;
2148   tree in_charge = NULL_TREE;
2149   tree vtt = NULL_TREE;
2150
2151   /* See if there's anything we need to do.  */
2152   tmpl = DECL_TI_TEMPLATE (decl);
2153   tmpl_types = TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (tmpl)));
2154   for (t = tmpl_types; t; t = TREE_CHAIN (t))
2155     if (TREE_PURPOSE (t))
2156       break;
2157   if (!t)
2158     return;
2159
2160   old_type = TREE_TYPE (decl);
2161   spec_types = TYPE_ARG_TYPES (old_type);
2162
2163   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2164     {
2165       /* Remove the this pointer, but remember the object's type for
2166          CV quals.  */
2167       object_type = TREE_TYPE (TREE_VALUE (spec_types));
2168       spec_types = TREE_CHAIN (spec_types);
2169       tmpl_types = TREE_CHAIN (tmpl_types);
2170
2171       if (DECL_HAS_IN_CHARGE_PARM_P (decl))
2172         {
2173           /* DECL may contain more parameters than TMPL due to the extra
2174              in-charge parameter in constructors and destructors.  */
2175           in_charge = spec_types;
2176           spec_types = TREE_CHAIN (spec_types);
2177         }
2178       if (DECL_HAS_VTT_PARM_P (decl))
2179         {
2180           vtt = spec_types;
2181           spec_types = TREE_CHAIN (spec_types);
2182         }
2183     }
2184
2185   /* Compute the merged default arguments.  */
2186   new_spec_types =
2187     copy_default_args_to_explicit_spec_1 (spec_types, tmpl_types);
2188
2189   /* Compute the new FUNCTION_TYPE.  */
2190   if (object_type)
2191     {
2192       if (vtt)
2193         new_spec_types = hash_tree_cons (TREE_PURPOSE (vtt),
2194                                          TREE_VALUE (vtt),
2195                                          new_spec_types);
2196
2197       if (in_charge)
2198         /* Put the in-charge parameter back.  */
2199         new_spec_types = hash_tree_cons (TREE_PURPOSE (in_charge),
2200                                          TREE_VALUE (in_charge),
2201                                          new_spec_types);
2202
2203       new_type = build_method_type_directly (object_type,
2204                                              TREE_TYPE (old_type),
2205                                              new_spec_types);
2206     }
2207   else
2208     new_type = build_function_type (TREE_TYPE (old_type),
2209                                     new_spec_types);
2210   new_type = cp_build_type_attribute_variant (new_type,
2211                                               TYPE_ATTRIBUTES (old_type));
2212   new_type = build_exception_variant (new_type,
2213                                       TYPE_RAISES_EXCEPTIONS (old_type));
2214   TREE_TYPE (decl) = new_type;
2215 }
2216
2217 /* Check to see if the function just declared, as indicated in
2218    DECLARATOR, and in DECL, is a specialization of a function
2219    template.  We may also discover that the declaration is an explicit
2220    instantiation at this point.
2221
2222    Returns DECL, or an equivalent declaration that should be used
2223    instead if all goes well.  Issues an error message if something is
2224    amiss.  Returns error_mark_node if the error is not easily
2225    recoverable.
2226
2227    FLAGS is a bitmask consisting of the following flags:
2228
2229    2: The function has a definition.
2230    4: The function is a friend.
2231
2232    The TEMPLATE_COUNT is the number of references to qualifying
2233    template classes that appeared in the name of the function.  For
2234    example, in
2235
2236      template <class T> struct S { void f(); };
2237      void S<int>::f();
2238
2239    the TEMPLATE_COUNT would be 1.  However, explicitly specialized
2240    classes are not counted in the TEMPLATE_COUNT, so that in
2241
2242      template <class T> struct S {};
2243      template <> struct S<int> { void f(); }
2244      template <> void S<int>::f();
2245
2246    the TEMPLATE_COUNT would be 0.  (Note that this declaration is
2247    invalid; there should be no template <>.)
2248
2249    If the function is a specialization, it is marked as such via
2250    DECL_TEMPLATE_SPECIALIZATION.  Furthermore, its DECL_TEMPLATE_INFO
2251    is set up correctly, and it is added to the list of specializations
2252    for that template.  */
2253
2254 tree
2255 check_explicit_specialization (tree declarator,
2256                                tree decl,
2257                                int template_count,
2258                                int flags)
2259 {
2260   int have_def = flags & 2;
2261   int is_friend = flags & 4;
2262   int specialization = 0;
2263   int explicit_instantiation = 0;
2264   int member_specialization = 0;
2265   tree ctype = DECL_CLASS_CONTEXT (decl);
2266   tree dname = DECL_NAME (decl);
2267   tmpl_spec_kind tsk;
2268
2269   if (is_friend)
2270     {
2271       if (!processing_specialization)
2272         tsk = tsk_none;
2273       else
2274         tsk = tsk_excessive_parms;
2275     }
2276   else
2277     tsk = current_tmpl_spec_kind (template_count);
2278
2279   switch (tsk)
2280     {
2281     case tsk_none:
2282       if (processing_specialization)
2283         {
2284           specialization = 1;
2285           SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2286         }
2287       else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
2288         {
2289           if (is_friend)
2290             /* This could be something like:
2291
2292                template <class T> void f(T);
2293                class S { friend void f<>(int); }  */
2294             specialization = 1;
2295           else
2296             {
2297               /* This case handles bogus declarations like template <>
2298                  template <class T> void f<int>(); */
2299
2300               error ("template-id %qD in declaration of primary template",
2301                      declarator);
2302               return decl;
2303             }
2304         }
2305       break;
2306
2307     case tsk_invalid_member_spec:
2308       /* The error has already been reported in
2309          check_specialization_scope.  */
2310       return error_mark_node;
2311
2312     case tsk_invalid_expl_inst:
2313       error ("template parameter list used in explicit instantiation");
2314
2315       /* Fall through.  */
2316
2317     case tsk_expl_inst:
2318       if (have_def)
2319         error ("definition provided for explicit instantiation");
2320
2321       explicit_instantiation = 1;
2322       break;
2323
2324     case tsk_excessive_parms:
2325     case tsk_insufficient_parms:
2326       if (tsk == tsk_excessive_parms)
2327         error ("too many template parameter lists in declaration of %qD",
2328                decl);
2329       else if (template_header_count)
2330         error("too few template parameter lists in declaration of %qD", decl);
2331       else
2332         error("explicit specialization of %qD must be introduced by "
2333               "%<template <>%>", decl);
2334
2335       /* Fall through.  */
2336     case tsk_expl_spec:
2337       SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2338       if (ctype)
2339         member_specialization = 1;
2340       else
2341         specialization = 1;
2342       break;
2343
2344     case tsk_template:
2345       if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
2346         {
2347           /* This case handles bogus declarations like template <>
2348              template <class T> void f<int>(); */
2349
2350           if (uses_template_parms (declarator))
2351             error ("function template partial specialization %qD "
2352                    "is not allowed", declarator);
2353           else
2354             error ("template-id %qD in declaration of primary template",
2355                    declarator);
2356           return decl;
2357         }
2358
2359       if (ctype && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype))
2360         /* This is a specialization of a member template, without
2361            specialization the containing class.  Something like:
2362
2363              template <class T> struct S {
2364                template <class U> void f (U);
2365              };
2366              template <> template <class U> void S<int>::f(U) {}
2367
2368            That's a specialization -- but of the entire template.  */
2369         specialization = 1;
2370       break;
2371
2372     default:
2373       gcc_unreachable ();
2374     }
2375
2376   if (specialization || member_specialization)
2377     {
2378       tree t = TYPE_ARG_TYPES (TREE_TYPE (decl));
2379       for (; t; t = TREE_CHAIN (t))
2380         if (TREE_PURPOSE (t))
2381           {
2382             permerror (input_location, 
2383                        "default argument specified in explicit specialization");
2384             break;
2385           }
2386     }
2387
2388   if (specialization || member_specialization || explicit_instantiation)
2389     {
2390       tree tmpl = NULL_TREE;
2391       tree targs = NULL_TREE;
2392
2393       /* Make sure that the declarator is a TEMPLATE_ID_EXPR.  */
2394       if (TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
2395         {
2396           tree fns;
2397
2398           gcc_assert (TREE_CODE (declarator) == IDENTIFIER_NODE);
2399           if (ctype)
2400             fns = dname;
2401           else
2402             {
2403               /* If there is no class context, the explicit instantiation
2404                  must be at namespace scope.  */
2405               gcc_assert (DECL_NAMESPACE_SCOPE_P (decl));
2406
2407               /* Find the namespace binding, using the declaration
2408                  context.  */
2409               fns = lookup_qualified_name (CP_DECL_CONTEXT (decl), dname,
2410                                            false, true);
2411               if (fns == error_mark_node || !is_overloaded_fn (fns))
2412                 {
2413                   error ("%qD is not a template function", dname);
2414                   fns = error_mark_node;
2415                 }
2416               else
2417                 {
2418                   tree fn = OVL_CURRENT (fns);
2419                   if (!is_associated_namespace (CP_DECL_CONTEXT (decl),
2420                                                 CP_DECL_CONTEXT (fn)))
2421                     error ("%qD is not declared in %qD",
2422                            decl, current_namespace);
2423                 }
2424             }
2425
2426           declarator = lookup_template_function (fns, NULL_TREE);
2427         }
2428
2429       if (declarator == error_mark_node)
2430         return error_mark_node;
2431
2432       if (ctype != NULL_TREE && TYPE_BEING_DEFINED (ctype))
2433         {
2434           if (!explicit_instantiation)
2435             /* A specialization in class scope.  This is invalid,
2436                but the error will already have been flagged by
2437                check_specialization_scope.  */
2438             return error_mark_node;
2439           else
2440             {
2441               /* It's not valid to write an explicit instantiation in
2442                  class scope, e.g.:
2443
2444                    class C { template void f(); }
2445
2446                    This case is caught by the parser.  However, on
2447                    something like:
2448
2449                    template class C { void f(); };
2450
2451                    (which is invalid) we can get here.  The error will be
2452                    issued later.  */
2453               ;
2454             }
2455
2456           return decl;
2457         }
2458       else if (ctype != NULL_TREE
2459                && (TREE_CODE (TREE_OPERAND (declarator, 0)) ==
2460                    IDENTIFIER_NODE))
2461         {
2462           /* Find the list of functions in ctype that have the same
2463              name as the declared function.  */
2464           tree name = TREE_OPERAND (declarator, 0);
2465           tree fns = NULL_TREE;
2466           int idx;
2467
2468           if (constructor_name_p (name, ctype))
2469             {
2470               int is_constructor = DECL_CONSTRUCTOR_P (decl);
2471
2472               if (is_constructor ? !TYPE_HAS_USER_CONSTRUCTOR (ctype)
2473                   : !CLASSTYPE_DESTRUCTORS (ctype))
2474                 {
2475                   /* From [temp.expl.spec]:
2476
2477                      If such an explicit specialization for the member
2478                      of a class template names an implicitly-declared
2479                      special member function (clause _special_), the
2480                      program is ill-formed.
2481
2482                      Similar language is found in [temp.explicit].  */
2483                   error ("specialization of implicitly-declared special member function");
2484                   return error_mark_node;
2485                 }
2486
2487               name = is_constructor ? ctor_identifier : dtor_identifier;
2488             }
2489
2490           if (!DECL_CONV_FN_P (decl))
2491             {
2492               idx = lookup_fnfields_1 (ctype, name);
2493               if (idx >= 0)
2494                 fns = VEC_index (tree, CLASSTYPE_METHOD_VEC (ctype), idx);
2495             }
2496           else
2497             {
2498               VEC(tree,gc) *methods;
2499               tree ovl;
2500
2501               /* For a type-conversion operator, we cannot do a
2502                  name-based lookup.  We might be looking for `operator
2503                  int' which will be a specialization of `operator T'.
2504                  So, we find *all* the conversion operators, and then
2505                  select from them.  */
2506               fns = NULL_TREE;
2507
2508               methods = CLASSTYPE_METHOD_VEC (ctype);
2509               if (methods)
2510                 for (idx = CLASSTYPE_FIRST_CONVERSION_SLOT;
2511                      VEC_iterate (tree, methods, idx, ovl);
2512                      ++idx)
2513                   {
2514                     if (!DECL_CONV_FN_P (OVL_CURRENT (ovl)))
2515                       /* There are no more conversion functions.  */
2516                       break;
2517
2518                     /* Glue all these conversion functions together
2519                        with those we already have.  */
2520                     for (; ovl; ovl = OVL_NEXT (ovl))
2521                       fns = ovl_cons (OVL_CURRENT (ovl), fns);
2522                   }
2523             }
2524
2525           if (fns == NULL_TREE)
2526             {
2527               error ("no member function %qD declared in %qT", name, ctype);
2528               return error_mark_node;
2529             }
2530           else
2531             TREE_OPERAND (declarator, 0) = fns;
2532         }
2533
2534       /* Figure out what exactly is being specialized at this point.
2535          Note that for an explicit instantiation, even one for a
2536          member function, we cannot tell apriori whether the
2537          instantiation is for a member template, or just a member
2538          function of a template class.  Even if a member template is
2539          being instantiated, the member template arguments may be
2540          elided if they can be deduced from the rest of the
2541          declaration.  */
2542       tmpl = determine_specialization (declarator, decl,
2543                                        &targs,
2544                                        member_specialization,
2545                                        template_count,
2546                                        tsk);
2547
2548       if (!tmpl || tmpl == error_mark_node)
2549         /* We couldn't figure out what this declaration was
2550            specializing.  */
2551         return error_mark_node;
2552       else
2553         {
2554           tree gen_tmpl = most_general_template (tmpl);
2555
2556           if (explicit_instantiation)
2557             {
2558               /* We don't set DECL_EXPLICIT_INSTANTIATION here; that
2559                  is done by do_decl_instantiation later.  */
2560
2561               int arg_depth = TMPL_ARGS_DEPTH (targs);
2562               int parm_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
2563
2564               if (arg_depth > parm_depth)
2565                 {
2566                   /* If TMPL is not the most general template (for
2567                      example, if TMPL is a friend template that is
2568                      injected into namespace scope), then there will
2569                      be too many levels of TARGS.  Remove some of them
2570                      here.  */
2571                   int i;
2572                   tree new_targs;
2573
2574                   new_targs = make_tree_vec (parm_depth);
2575                   for (i = arg_depth - parm_depth; i < arg_depth; ++i)
2576                     TREE_VEC_ELT (new_targs, i - (arg_depth - parm_depth))
2577                       = TREE_VEC_ELT (targs, i);
2578                   targs = new_targs;
2579                 }
2580
2581               return instantiate_template (tmpl, targs, tf_error);
2582             }
2583
2584           /* If we thought that the DECL was a member function, but it
2585              turns out to be specializing a static member function,
2586              make DECL a static member function as well.  */
2587           if (DECL_STATIC_FUNCTION_P (tmpl)
2588               && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2589             revert_static_member_fn (decl);
2590
2591           /* If this is a specialization of a member template of a
2592              template class, we want to return the TEMPLATE_DECL, not
2593              the specialization of it.  */
2594           if (tsk == tsk_template)
2595             {
2596               tree result = DECL_TEMPLATE_RESULT (tmpl);
2597               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
2598               DECL_INITIAL (result) = NULL_TREE;
2599               if (have_def)
2600                 {
2601                   tree parm;
2602                   DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
2603                   DECL_SOURCE_LOCATION (result)
2604                     = DECL_SOURCE_LOCATION (decl);
2605                   /* We want to use the argument list specified in the
2606                      definition, not in the original declaration.  */
2607                   DECL_ARGUMENTS (result) = DECL_ARGUMENTS (decl);
2608                   for (parm = DECL_ARGUMENTS (result); parm;
2609                        parm = DECL_CHAIN (parm))
2610                     DECL_CONTEXT (parm) = result;
2611                 }
2612               return register_specialization (tmpl, gen_tmpl, targs,
2613                                               is_friend, 0);
2614             }
2615
2616           /* Set up the DECL_TEMPLATE_INFO for DECL.  */
2617           DECL_TEMPLATE_INFO (decl) = build_template_info (tmpl, targs);
2618
2619           /* Inherit default function arguments from the template
2620              DECL is specializing.  */
2621           copy_default_args_to_explicit_spec (decl);
2622
2623           /* This specialization has the same protection as the
2624              template it specializes.  */
2625           TREE_PRIVATE (decl) = TREE_PRIVATE (gen_tmpl);
2626           TREE_PROTECTED (decl) = TREE_PROTECTED (gen_tmpl);
2627
2628           /* 7.1.1-1 [dcl.stc]
2629
2630              A storage-class-specifier shall not be specified in an
2631              explicit specialization...
2632
2633              The parser rejects these, so unless action is taken here,
2634              explicit function specializations will always appear with
2635              global linkage.
2636
2637              The action recommended by the C++ CWG in response to C++
2638              defect report 605 is to make the storage class and linkage
2639              of the explicit specialization match the templated function:
2640
2641              http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#605
2642            */
2643           if (tsk == tsk_expl_spec && DECL_FUNCTION_TEMPLATE_P (gen_tmpl))
2644             {
2645               tree tmpl_func = DECL_TEMPLATE_RESULT (gen_tmpl);
2646               gcc_assert (TREE_CODE (tmpl_func) == FUNCTION_DECL);
2647
2648               /* This specialization has the same linkage and visibility as
2649                  the function template it specializes.  */
2650               TREE_PUBLIC (decl) = TREE_PUBLIC (tmpl_func);
2651               if (! TREE_PUBLIC (decl))
2652                 {
2653                   DECL_INTERFACE_KNOWN (decl) = 1;
2654                   DECL_NOT_REALLY_EXTERN (decl) = 1;
2655                 }
2656               DECL_THIS_STATIC (decl) = DECL_THIS_STATIC (tmpl_func);
2657               if (DECL_VISIBILITY_SPECIFIED (tmpl_func))
2658                 {
2659                   DECL_VISIBILITY_SPECIFIED (decl) = 1;
2660                   DECL_VISIBILITY (decl) = DECL_VISIBILITY (tmpl_func);
2661                 }
2662             }
2663
2664           /* If DECL is a friend declaration, declared using an
2665              unqualified name, the namespace associated with DECL may
2666              have been set incorrectly.  For example, in:
2667
2668                template <typename T> void f(T);
2669                namespace N {
2670                  struct S { friend void f<int>(int); }
2671                }
2672
2673              we will have set the DECL_CONTEXT for the friend
2674              declaration to N, rather than to the global namespace.  */
2675           if (DECL_NAMESPACE_SCOPE_P (decl))
2676             DECL_CONTEXT (decl) = DECL_CONTEXT (tmpl);
2677
2678           if (is_friend && !have_def)
2679             /* This is not really a declaration of a specialization.
2680                It's just the name of an instantiation.  But, it's not
2681                a request for an instantiation, either.  */
2682             SET_DECL_IMPLICIT_INSTANTIATION (decl);
2683           else if (DECL_CONSTRUCTOR_P (decl) || DECL_DESTRUCTOR_P (decl))
2684             /* This is indeed a specialization.  In case of constructors
2685                and destructors, we need in-charge and not-in-charge
2686                versions in V3 ABI.  */
2687             clone_function_decl (decl, /*update_method_vec_p=*/0);
2688
2689           /* Register this specialization so that we can find it
2690              again.  */
2691           decl = register_specialization (decl, gen_tmpl, targs, is_friend, 0);
2692         }
2693     }
2694
2695   return decl;
2696 }
2697
2698 /* Returns 1 iff PARMS1 and PARMS2 are identical sets of template
2699    parameters.  These are represented in the same format used for
2700    DECL_TEMPLATE_PARMS.  */
2701
2702 int
2703 comp_template_parms (const_tree parms1, const_tree parms2)
2704 {
2705   const_tree p1;
2706   const_tree p2;
2707
2708   if (parms1 == parms2)
2709     return 1;
2710
2711   for (p1 = parms1, p2 = parms2;
2712        p1 != NULL_TREE && p2 != NULL_TREE;
2713        p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2))
2714     {
2715       tree t1 = TREE_VALUE (p1);
2716       tree t2 = TREE_VALUE (p2);
2717       int i;
2718
2719       gcc_assert (TREE_CODE (t1) == TREE_VEC);
2720       gcc_assert (TREE_CODE (t2) == TREE_VEC);
2721
2722       if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
2723         return 0;
2724
2725       for (i = 0; i < TREE_VEC_LENGTH (t2); ++i)
2726         {
2727           tree parm1 = TREE_VALUE (TREE_VEC_ELT (t1, i));
2728           tree parm2 = TREE_VALUE (TREE_VEC_ELT (t2, i));
2729
2730           /* If either of the template parameters are invalid, assume
2731              they match for the sake of error recovery. */
2732           if (parm1 == error_mark_node || parm2 == error_mark_node)
2733             return 1;
2734
2735           if (TREE_CODE (parm1) != TREE_CODE (parm2))
2736             return 0;
2737
2738           if (TREE_CODE (parm1) == TEMPLATE_TYPE_PARM
2739               && (TEMPLATE_TYPE_PARAMETER_PACK (parm1)
2740                   == TEMPLATE_TYPE_PARAMETER_PACK (parm2)))
2741             continue;
2742           else if (!same_type_p (TREE_TYPE (parm1), TREE_TYPE (parm2)))
2743             return 0;
2744         }
2745     }
2746
2747   if ((p1 != NULL_TREE) != (p2 != NULL_TREE))
2748     /* One set of parameters has more parameters lists than the
2749        other.  */
2750     return 0;
2751
2752   return 1;
2753 }
2754
2755 /* Determine whether PARM is a parameter pack.  */
2756
2757 bool 
2758 template_parameter_pack_p (const_tree parm)
2759 {
2760   /* Determine if we have a non-type template parameter pack.  */
2761   if (TREE_CODE (parm) == PARM_DECL)
2762     return (DECL_TEMPLATE_PARM_P (parm) 
2763             && TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)));
2764   if (TREE_CODE (parm) == TEMPLATE_PARM_INDEX)
2765     return TEMPLATE_PARM_PARAMETER_PACK (parm);
2766
2767   /* If this is a list of template parameters, we could get a
2768      TYPE_DECL or a TEMPLATE_DECL.  */ 
2769   if (TREE_CODE (parm) == TYPE_DECL || TREE_CODE (parm) == TEMPLATE_DECL)
2770     parm = TREE_TYPE (parm);
2771
2772   /* Otherwise it must be a type template parameter.  */
2773   return ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
2774            || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM)
2775           && TEMPLATE_TYPE_PARAMETER_PACK (parm));
2776 }
2777
2778 /* Determine if T is a function parameter pack.  */
2779
2780 bool
2781 function_parameter_pack_p (const_tree t)
2782 {
2783   if (t && TREE_CODE (t) == PARM_DECL)
2784     return FUNCTION_PARAMETER_PACK_P (t);
2785   return false;
2786 }
2787
2788 /* Return the function template declaration of PRIMARY_FUNC_TMPL_INST.
2789    PRIMARY_FUNC_TMPL_INST is a primary function template instantiation.  */
2790
2791 tree
2792 get_function_template_decl (const_tree primary_func_tmpl_inst)
2793 {
2794   if (! primary_func_tmpl_inst
2795       || TREE_CODE (primary_func_tmpl_inst) != FUNCTION_DECL
2796       || ! primary_template_instantiation_p (primary_func_tmpl_inst))
2797     return NULL;
2798
2799   return DECL_TEMPLATE_RESULT (DECL_TI_TEMPLATE (primary_func_tmpl_inst));
2800 }
2801
2802 /* Return true iff the function parameter PARAM_DECL was expanded
2803    from the function parameter pack PACK.  */
2804
2805 bool
2806 function_parameter_expanded_from_pack_p (tree param_decl, tree pack)
2807 {
2808   if (DECL_ARTIFICIAL (param_decl)
2809       || !function_parameter_pack_p (pack))
2810     return false;
2811
2812   /* The parameter pack and its pack arguments have the same
2813      DECL_PARM_INDEX.  */
2814   return DECL_PARM_INDEX (pack) == DECL_PARM_INDEX (param_decl);
2815 }
2816
2817 /* Determine whether ARGS describes a variadic template args list,
2818    i.e., one that is terminated by a template argument pack.  */
2819
2820 static bool 
2821 template_args_variadic_p (tree args)
2822 {
2823   int nargs;
2824   tree last_parm;
2825
2826   if (args == NULL_TREE)
2827     return false;
2828
2829   args = INNERMOST_TEMPLATE_ARGS (args);
2830   nargs = TREE_VEC_LENGTH (args);
2831
2832   if (nargs == 0)
2833     return false;
2834
2835   last_parm = TREE_VEC_ELT (args, nargs - 1);
2836
2837   return ARGUMENT_PACK_P (last_parm);
2838 }
2839
2840 /* Generate a new name for the parameter pack name NAME (an
2841    IDENTIFIER_NODE) that incorporates its */
2842
2843 static tree
2844 make_ith_pack_parameter_name (tree name, int i)
2845 {
2846   /* Munge the name to include the parameter index.  */
2847 #define NUMBUF_LEN 128
2848   char numbuf[NUMBUF_LEN];
2849   char* newname;
2850   int newname_len;
2851
2852   snprintf (numbuf, NUMBUF_LEN, "%i", i);
2853   newname_len = IDENTIFIER_LENGTH (name)
2854                 + strlen (numbuf) + 2;
2855   newname = (char*)alloca (newname_len);
2856   snprintf (newname, newname_len,
2857             "%s#%i", IDENTIFIER_POINTER (name), i);
2858   return get_identifier (newname);
2859 }
2860
2861 /* Return true if T is a primary function, class or alias template
2862    instantiation.  */
2863
2864 bool
2865 primary_template_instantiation_p (const_tree t)
2866 {
2867   if (!t)
2868     return false;
2869
2870   if (TREE_CODE (t) == FUNCTION_DECL)
2871     return DECL_LANG_SPECIFIC (t)
2872            && DECL_TEMPLATE_INSTANTIATION (t)
2873            && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (t));
2874   else if (CLASS_TYPE_P (t) && !TYPE_DECL_ALIAS_P (TYPE_NAME (t)))
2875     return CLASSTYPE_TEMPLATE_INSTANTIATION (t)
2876            && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t));
2877   else if (TYPE_P (t)
2878            && TYPE_TEMPLATE_INFO (t)
2879            && PRIMARY_TEMPLATE_P (TYPE_TI_TEMPLATE (t))
2880            && DECL_TEMPLATE_INSTANTIATION (TYPE_NAME (t)))
2881     return true;
2882   return false;
2883 }
2884
2885 /* Return true if PARM is a template template parameter.  */
2886
2887 bool
2888 template_template_parameter_p (const_tree parm)
2889 {
2890   return DECL_TEMPLATE_TEMPLATE_PARM_P (parm);
2891 }
2892
2893 /* Return the template parameters of T if T is a
2894    primary template instantiation, NULL otherwise.  */
2895
2896 tree
2897 get_primary_template_innermost_parameters (const_tree t)
2898 {
2899   tree parms = NULL, template_info = NULL;
2900
2901   if ((template_info = get_template_info (t))
2902       && primary_template_instantiation_p (t))
2903     parms = INNERMOST_TEMPLATE_PARMS
2904         (DECL_TEMPLATE_PARMS (TI_TEMPLATE (template_info)));
2905
2906   return parms;
2907 }
2908
2909 /* Return the template parameters of the LEVELth level from the full list
2910    of template parameters PARMS.  */
2911
2912 tree
2913 get_template_parms_at_level (tree parms, int level)
2914 {
2915   tree p;
2916   if (!parms
2917       || TREE_CODE (parms) != TREE_LIST
2918       || level > TMPL_PARMS_DEPTH (parms))
2919     return NULL_TREE;
2920
2921   for (p = parms; p; p = TREE_CHAIN (p))
2922     if (TMPL_PARMS_DEPTH (p) == level)
2923       return p;
2924
2925   return NULL_TREE;
2926 }
2927
2928 /* Returns the template arguments of T if T is a template instantiation,
2929    NULL otherwise.  */
2930
2931 tree
2932 get_template_innermost_arguments (const_tree t)
2933 {
2934   tree args = NULL, template_info = NULL;
2935
2936   if ((template_info = get_template_info (t))
2937       && TI_ARGS (template_info))
2938     args = INNERMOST_TEMPLATE_ARGS (TI_ARGS (template_info));
2939
2940   return args;
2941 }
2942
2943 /* Return the argument pack elements of T if T is a template argument pack,
2944    NULL otherwise.  */
2945
2946 tree
2947 get_template_argument_pack_elems (const_tree t)
2948 {
2949   if (TREE_CODE (t) != TYPE_ARGUMENT_PACK
2950       && TREE_CODE (t) != NONTYPE_ARGUMENT_PACK)
2951     return NULL;
2952
2953   return ARGUMENT_PACK_ARGS (t);
2954 }
2955
2956 /* Structure used to track the progress of find_parameter_packs_r.  */
2957 struct find_parameter_pack_data 
2958 {
2959   /* TREE_LIST that will contain all of the parameter packs found by
2960      the traversal.  */
2961   tree* parameter_packs;
2962
2963   /* Set of AST nodes that have been visited by the traversal.  */
2964   struct pointer_set_t *visited;
2965 };
2966
2967 /* Identifies all of the argument packs that occur in a template
2968    argument and appends them to the TREE_LIST inside DATA, which is a
2969    find_parameter_pack_data structure. This is a subroutine of
2970    make_pack_expansion and uses_parameter_packs.  */
2971 static tree
2972 find_parameter_packs_r (tree *tp, int *walk_subtrees, void* data)
2973 {
2974   tree t = *tp;
2975   struct find_parameter_pack_data* ppd = 
2976     (struct find_parameter_pack_data*)data;
2977   bool parameter_pack_p = false;
2978
2979   /* Handle type aliases/typedefs.  */
2980   if (TYPE_P (t)
2981       && TYPE_NAME (t)
2982       && TREE_CODE (TYPE_NAME (t)) == TYPE_DECL
2983       && TYPE_DECL_ALIAS_P (TYPE_NAME (t)))
2984     {
2985       if (TYPE_TEMPLATE_INFO (t))
2986         cp_walk_tree (&TYPE_TI_ARGS (t),
2987                       &find_parameter_packs_r,
2988                       ppd, ppd->visited);
2989       *walk_subtrees = 0;
2990       return NULL_TREE;
2991     }
2992
2993   /* Identify whether this is a parameter pack or not.  */
2994   switch (TREE_CODE (t))
2995     {
2996     case TEMPLATE_PARM_INDEX:
2997       if (TEMPLATE_PARM_PARAMETER_PACK (t))
2998         parameter_pack_p = true;
2999       break;
3000
3001     case TEMPLATE_TYPE_PARM:
3002       t = TYPE_MAIN_VARIANT (t);
3003     case TEMPLATE_TEMPLATE_PARM:
3004       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
3005         parameter_pack_p = true;
3006       break;
3007
3008     case PARM_DECL:
3009       if (FUNCTION_PARAMETER_PACK_P (t))
3010         {
3011           /* We don't want to walk into the type of a PARM_DECL,
3012              because we don't want to see the type parameter pack.  */
3013           *walk_subtrees = 0;
3014           parameter_pack_p = true;
3015         }
3016       break;
3017
3018     case BASES:
3019       parameter_pack_p = true;
3020       break;
3021     default:
3022       /* Not a parameter pack.  */
3023       break;
3024     }
3025
3026   if (parameter_pack_p)
3027     {
3028       /* Add this parameter pack to the list.  */
3029       *ppd->parameter_packs = tree_cons (NULL_TREE, t, *ppd->parameter_packs);
3030     }
3031
3032   if (TYPE_P (t))
3033     cp_walk_tree (&TYPE_CONTEXT (t), 
3034                   &find_parameter_packs_r, ppd, ppd->visited);
3035
3036   /* This switch statement will return immediately if we don't find a
3037      parameter pack.  */
3038   switch (TREE_CODE (t)) 
3039     {
3040     case TEMPLATE_PARM_INDEX:
3041       return NULL_TREE;
3042
3043     case BOUND_TEMPLATE_TEMPLATE_PARM:
3044       /* Check the template itself.  */
3045       cp_walk_tree (&TREE_TYPE (TYPE_TI_TEMPLATE (t)), 
3046                     &find_parameter_packs_r, ppd, ppd->visited);
3047       /* Check the template arguments.  */
3048       cp_walk_tree (&TYPE_TI_ARGS (t), &find_parameter_packs_r, ppd, 
3049                     ppd->visited);
3050       *walk_subtrees = 0;
3051       return NULL_TREE;
3052
3053     case TEMPLATE_TYPE_PARM:
3054     case TEMPLATE_TEMPLATE_PARM:
3055       return NULL_TREE;
3056
3057     case PARM_DECL:
3058       return NULL_TREE;
3059
3060     case RECORD_TYPE:
3061       if (TYPE_PTRMEMFUNC_P (t))
3062         return NULL_TREE;
3063       /* Fall through.  */
3064
3065     case UNION_TYPE:
3066     case ENUMERAL_TYPE:
3067       if (TYPE_TEMPLATE_INFO (t))
3068         cp_walk_tree (&TI_ARGS (TYPE_TEMPLATE_INFO (t)),
3069                       &find_parameter_packs_r, ppd, ppd->visited);
3070
3071       *walk_subtrees = 0;
3072       return NULL_TREE;
3073
3074     case CONSTRUCTOR:
3075     case TEMPLATE_DECL:
3076       cp_walk_tree (&TREE_TYPE (t),
3077                     &find_parameter_packs_r, ppd, ppd->visited);
3078       return NULL_TREE;
3079  
3080     case TYPENAME_TYPE:
3081       cp_walk_tree (&TYPENAME_TYPE_FULLNAME (t), &find_parameter_packs_r,
3082                    ppd, ppd->visited);
3083       *walk_subtrees = 0;
3084       return NULL_TREE;
3085       
3086     case TYPE_PACK_EXPANSION:
3087     case EXPR_PACK_EXPANSION:
3088       *walk_subtrees = 0;
3089       return NULL_TREE;
3090
3091     case INTEGER_TYPE:
3092       cp_walk_tree (&TYPE_MAX_VALUE (t), &find_parameter_packs_r, 
3093                     ppd, ppd->visited);
3094       *walk_subtrees = 0;
3095       return NULL_TREE;
3096
3097     case IDENTIFIER_NODE:
3098       cp_walk_tree (&TREE_TYPE (t), &find_parameter_packs_r, ppd, 
3099                     ppd->visited);
3100       *walk_subtrees = 0;
3101       return NULL_TREE;
3102
3103     default:
3104       return NULL_TREE;
3105     }
3106
3107   return NULL_TREE;
3108 }
3109
3110 /* Determines if the expression or type T uses any parameter packs.  */
3111 bool
3112 uses_parameter_packs (tree t)
3113 {
3114   tree parameter_packs = NULL_TREE;
3115   struct find_parameter_pack_data ppd;
3116   ppd.parameter_packs = &parameter_packs;
3117   ppd.visited = pointer_set_create ();
3118   cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
3119   pointer_set_destroy (ppd.visited);
3120   return parameter_packs != NULL_TREE;
3121 }
3122
3123 /* Turn ARG, which may be an expression, type, or a TREE_LIST
3124    representation a base-class initializer into a parameter pack
3125    expansion. If all goes well, the resulting node will be an
3126    EXPR_PACK_EXPANSION, TYPE_PACK_EXPANSION, or TREE_LIST,
3127    respectively.  */
3128 tree 
3129 make_pack_expansion (tree arg)
3130 {
3131   tree result;
3132   tree parameter_packs = NULL_TREE;
3133   bool for_types = false;
3134   struct find_parameter_pack_data ppd;
3135
3136   if (!arg || arg == error_mark_node)
3137     return arg;
3138
3139   if (TREE_CODE (arg) == TREE_LIST)
3140     {
3141       /* The only time we will see a TREE_LIST here is for a base
3142          class initializer.  In this case, the TREE_PURPOSE will be a
3143          _TYPE node (representing the base class expansion we're
3144          initializing) and the TREE_VALUE will be a TREE_LIST
3145          containing the initialization arguments. 
3146
3147          The resulting expansion looks somewhat different from most
3148          expansions. Rather than returning just one _EXPANSION, we
3149          return a TREE_LIST whose TREE_PURPOSE is a
3150          TYPE_PACK_EXPANSION containing the bases that will be
3151          initialized.  The TREE_VALUE will be identical to the
3152          original TREE_VALUE, which is a list of arguments that will
3153          be passed to each base.  We do not introduce any new pack
3154          expansion nodes into the TREE_VALUE (although it is possible
3155          that some already exist), because the TREE_PURPOSE and
3156          TREE_VALUE all need to be expanded together with the same
3157          _EXPANSION node.  Note that the TYPE_PACK_EXPANSION in the
3158          resulting TREE_PURPOSE will mention the parameter packs in
3159          both the bases and the arguments to the bases.  */
3160       tree purpose;
3161       tree value;
3162       tree parameter_packs = NULL_TREE;
3163
3164       /* Determine which parameter packs will be used by the base
3165          class expansion.  */
3166       ppd.visited = pointer_set_create ();
3167       ppd.parameter_packs = &parameter_packs;
3168       cp_walk_tree (&TREE_PURPOSE (arg), &find_parameter_packs_r, 
3169                     &ppd, ppd.visited);
3170
3171       if (parameter_packs == NULL_TREE)
3172         {
3173           error ("base initializer expansion %<%T%> contains no parameter packs", arg);
3174           pointer_set_destroy (ppd.visited);
3175           return error_mark_node;
3176         }
3177
3178       if (TREE_VALUE (arg) != void_type_node)
3179         {
3180           /* Collect the sets of parameter packs used in each of the
3181              initialization arguments.  */
3182           for (value = TREE_VALUE (arg); value; value = TREE_CHAIN (value))
3183             {
3184               /* Determine which parameter packs will be expanded in this
3185                  argument.  */
3186               cp_walk_tree (&TREE_VALUE (value), &find_parameter_packs_r, 
3187                             &ppd, ppd.visited);
3188             }
3189         }
3190
3191       pointer_set_destroy (ppd.visited);
3192
3193       /* Create the pack expansion type for the base type.  */
3194       purpose = cxx_make_type (TYPE_PACK_EXPANSION);
3195       SET_PACK_EXPANSION_PATTERN (purpose, TREE_PURPOSE (arg));
3196       PACK_EXPANSION_PARAMETER_PACKS (purpose) = parameter_packs;
3197
3198       /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
3199          they will rarely be compared to anything.  */
3200       SET_TYPE_STRUCTURAL_EQUALITY (purpose);
3201
3202       return tree_cons (purpose, TREE_VALUE (arg), NULL_TREE);
3203     }
3204
3205   if (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL)
3206     for_types = true;
3207
3208   /* Build the PACK_EXPANSION_* node.  */
3209   result = for_types
3210      ? cxx_make_type (TYPE_PACK_EXPANSION)
3211      : make_node (EXPR_PACK_EXPANSION);
3212   SET_PACK_EXPANSION_PATTERN (result, arg);
3213   if (TREE_CODE (result) == EXPR_PACK_EXPANSION)
3214     {
3215       /* Propagate type and const-expression information.  */
3216       TREE_TYPE (result) = TREE_TYPE (arg);
3217       TREE_CONSTANT (result) = TREE_CONSTANT (arg);
3218     }
3219   else
3220     /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
3221        they will rarely be compared to anything.  */
3222     SET_TYPE_STRUCTURAL_EQUALITY (result);
3223
3224   /* Determine which parameter packs will be expanded.  */
3225   ppd.parameter_packs = &parameter_packs;
3226   ppd.visited = pointer_set_create ();
3227   cp_walk_tree (&arg, &find_parameter_packs_r, &ppd, ppd.visited);
3228   pointer_set_destroy (ppd.visited);
3229
3230   /* Make sure we found some parameter packs.  */
3231   if (parameter_packs == NULL_TREE)
3232     {
3233       if (TYPE_P (arg))
3234         error ("expansion pattern %<%T%> contains no argument packs", arg);
3235       else
3236         error ("expansion pattern %<%E%> contains no argument packs", arg);
3237       return error_mark_node;
3238     }
3239   PACK_EXPANSION_PARAMETER_PACKS (result) = parameter_packs;
3240
3241   PACK_EXPANSION_LOCAL_P (result) = at_function_scope_p ();
3242
3243   return result;
3244 }
3245
3246 /* Checks T for any "bare" parameter packs, which have not yet been
3247    expanded, and issues an error if any are found. This operation can
3248    only be done on full expressions or types (e.g., an expression
3249    statement, "if" condition, etc.), because we could have expressions like:
3250
3251      foo(f(g(h(args)))...)
3252
3253    where "args" is a parameter pack. check_for_bare_parameter_packs
3254    should not be called for the subexpressions args, h(args),
3255    g(h(args)), or f(g(h(args))), because we would produce erroneous
3256    error messages. 
3257
3258    Returns TRUE and emits an error if there were bare parameter packs,
3259    returns FALSE otherwise.  */
3260 bool 
3261 check_for_bare_parameter_packs (tree t)
3262 {
3263   tree parameter_packs = NULL_TREE;
3264   struct find_parameter_pack_data ppd;
3265
3266   if (!processing_template_decl || !t || t == error_mark_node)
3267     return false;
3268
3269   if (TREE_CODE (t) == TYPE_DECL)
3270     t = TREE_TYPE (t);
3271
3272   ppd.parameter_packs = &parameter_packs;
3273   ppd.visited = pointer_set_create ();
3274   cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
3275   pointer_set_destroy (ppd.visited);
3276
3277   if (parameter_packs) 
3278     {
3279       error ("parameter packs not expanded with %<...%>:");
3280       while (parameter_packs)
3281         {
3282           tree pack = TREE_VALUE (parameter_packs);
3283           tree name = NULL_TREE;
3284
3285           if (TREE_CODE (pack) == TEMPLATE_TYPE_PARM
3286               || TREE_CODE (pack) == TEMPLATE_TEMPLATE_PARM)
3287             name = TYPE_NAME (pack);
3288           else if (TREE_CODE (pack) == TEMPLATE_PARM_INDEX)
3289             name = DECL_NAME (TEMPLATE_PARM_DECL (pack));
3290           else
3291             name = DECL_NAME (pack);
3292
3293           if (name)
3294             inform (input_location, "        %qD", name);
3295           else
3296             inform (input_location, "        <anonymous>");
3297
3298           parameter_packs = TREE_CHAIN (parameter_packs);
3299         }
3300
3301       return true;
3302     }
3303
3304   return false;
3305 }
3306
3307 /* Expand any parameter packs that occur in the template arguments in
3308    ARGS.  */
3309 tree
3310 expand_template_argument_pack (tree args)
3311 {
3312   tree result_args = NULL_TREE;
3313   int in_arg, out_arg = 0, nargs = args ? TREE_VEC_LENGTH (args) : 0;
3314   int num_result_args = -1;
3315   int non_default_args_count = -1;
3316
3317   /* First, determine if we need to expand anything, and the number of
3318      slots we'll need.  */
3319   for (in_arg = 0; in_arg < nargs; ++in_arg)
3320     {
3321       tree arg = TREE_VEC_ELT (args, in_arg);
3322       if (arg == NULL_TREE)
3323         return args;
3324       if (ARGUMENT_PACK_P (arg))
3325         {
3326           int num_packed = TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg));
3327           if (num_result_args < 0)
3328             num_result_args = in_arg + num_packed;
3329           else
3330             num_result_args += num_packed;
3331         }
3332       else
3333         {
3334           if (num_result_args >= 0)
3335             num_result_args++;
3336         }
3337     }
3338
3339   /* If no expansion is necessary, we're done.  */
3340   if (num_result_args < 0)
3341     return args;
3342
3343   /* Expand arguments.  */
3344   result_args = make_tree_vec (num_result_args);
3345   if (NON_DEFAULT_TEMPLATE_ARGS_COUNT (args))
3346     non_default_args_count =
3347       GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (args);
3348   for (in_arg = 0; in_arg < nargs; ++in_arg)
3349     {
3350       tree arg = TREE_VEC_ELT (args, in_arg);
3351       if (ARGUMENT_PACK_P (arg))
3352         {
3353           tree packed = ARGUMENT_PACK_ARGS (arg);
3354           int i, num_packed = TREE_VEC_LENGTH (packed);
3355           for (i = 0; i < num_packed; ++i, ++out_arg)
3356             TREE_VEC_ELT (result_args, out_arg) = TREE_VEC_ELT(packed, i);
3357           if (non_default_args_count > 0)
3358             non_default_args_count += num_packed;
3359         }
3360       else
3361         {
3362           TREE_VEC_ELT (result_args, out_arg) = arg;
3363           ++out_arg;
3364         }
3365     }
3366   if (non_default_args_count >= 0)
3367     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (result_args, non_default_args_count);
3368   return result_args;
3369 }
3370
3371 /* Checks if DECL shadows a template parameter.
3372
3373    [temp.local]: A template-parameter shall not be redeclared within its
3374    scope (including nested scopes).
3375
3376    Emits an error and returns TRUE if the DECL shadows a parameter,
3377    returns FALSE otherwise.  */
3378
3379 bool
3380 check_template_shadow (tree decl)
3381 {
3382   tree olddecl;
3383
3384   /* If we're not in a template, we can't possibly shadow a template
3385      parameter.  */
3386   if (!current_template_parms)
3387     return true;
3388
3389   /* Figure out what we're shadowing.  */
3390   if (TREE_CODE (decl) == OVERLOAD)
3391     decl = OVL_CURRENT (decl);
3392   olddecl = innermost_non_namespace_value (DECL_NAME (decl));
3393
3394   /* If there's no previous binding for this name, we're not shadowing
3395      anything, let alone a template parameter.  */
3396   if (!olddecl)
3397     return true;
3398
3399   /* If we're not shadowing a template parameter, we're done.  Note
3400      that OLDDECL might be an OVERLOAD (or perhaps even an
3401      ERROR_MARK), so we can't just blithely assume it to be a _DECL
3402      node.  */
3403   if (!DECL_P (olddecl) || !DECL_TEMPLATE_PARM_P (olddecl))
3404     return true;
3405
3406   /* We check for decl != olddecl to avoid bogus errors for using a
3407      name inside a class.  We check TPFI to avoid duplicate errors for
3408      inline member templates.  */
3409   if (decl == olddecl
3410       || TEMPLATE_PARMS_FOR_INLINE (current_template_parms))
3411     return true;
3412
3413   error ("declaration of %q+#D", decl);
3414   error (" shadows template parm %q+#D", olddecl);
3415   return false;
3416 }
3417
3418 /* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
3419    ORIG_LEVEL, DECL, and TYPE.  NUM_SIBLINGS is the total number of
3420    template parameters.  */
3421
3422 static tree
3423 build_template_parm_index (int index,
3424                            int level,
3425                            int orig_level,
3426                            int num_siblings,
3427                            tree decl,
3428                            tree type)
3429 {
3430   tree t = make_node (TEMPLATE_PARM_INDEX);
3431   TEMPLATE_PARM_IDX (t) = index;
3432   TEMPLATE_PARM_LEVEL (t) = level;
3433   TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
3434   TEMPLATE_PARM_NUM_SIBLINGS (t) = num_siblings;
3435   TEMPLATE_PARM_DECL (t) = decl;
3436   TREE_TYPE (t) = type;
3437   TREE_CONSTANT (t) = TREE_CONSTANT (decl);
3438   TREE_READONLY (t) = TREE_READONLY (decl);
3439
3440   return t;
3441 }
3442
3443 /* Find the canonical type parameter for the given template type
3444    parameter.  Returns the canonical type parameter, which may be TYPE
3445    if no such parameter existed.  */
3446
3447 static tree
3448 canonical_type_parameter (tree type)
3449 {
3450   tree list;
3451   int idx = TEMPLATE_TYPE_IDX (type);
3452   if (!canonical_template_parms)
3453     canonical_template_parms = VEC_alloc (tree, gc, idx+1);
3454
3455   while (VEC_length (tree, canonical_template_parms) <= (unsigned)idx)
3456     VEC_safe_push (tree, gc, canonical_template_parms, NULL_TREE);
3457
3458   list = VEC_index (tree, canonical_template_parms, idx);
3459   while (list && !comptypes (type, TREE_VALUE (list), COMPARE_STRUCTURAL))
3460     list = TREE_CHAIN (list);
3461
3462   if (list)
3463     return TREE_VALUE (list);
3464   else
3465     {
3466       VEC_replace(tree, canonical_template_parms, idx,
3467                   tree_cons (NULL_TREE, type, 
3468                              VEC_index (tree, canonical_template_parms, idx)));
3469       return type;
3470     }
3471 }
3472
3473 /* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
3474    TEMPLATE_PARM_LEVEL has been decreased by LEVELS.  If such a
3475    TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
3476    new one is created.  */
3477
3478 static tree
3479 reduce_template_parm_level (tree index, tree type, int levels, tree args,
3480                             tsubst_flags_t complain)
3481 {
3482   if (TEMPLATE_PARM_DESCENDANTS (index) == NULL_TREE
3483       || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
3484           != TEMPLATE_PARM_LEVEL (index) - levels)
3485       || !same_type_p (type, TREE_TYPE (TEMPLATE_PARM_DESCENDANTS (index))))
3486     {
3487       tree orig_decl = TEMPLATE_PARM_DECL (index);
3488       tree decl, t;
3489
3490       decl = build_decl (DECL_SOURCE_LOCATION (orig_decl),
3491                          TREE_CODE (orig_decl), DECL_NAME (orig_decl), type);
3492       TREE_CONSTANT (decl) = TREE_CONSTANT (orig_decl);
3493       TREE_READONLY (decl) = TREE_READONLY (orig_decl);
3494       DECL_ARTIFICIAL (decl) = 1;
3495       SET_DECL_TEMPLATE_PARM_P (decl);
3496
3497       t = build_template_parm_index (TEMPLATE_PARM_IDX (index),
3498                                      TEMPLATE_PARM_LEVEL (index) - levels,
3499                                      TEMPLATE_PARM_ORIG_LEVEL (index),
3500                                      TEMPLATE_PARM_NUM_SIBLINGS (index),
3501                                      decl, type);
3502       TEMPLATE_PARM_DESCENDANTS (index) = t;
3503       TEMPLATE_PARM_PARAMETER_PACK (t) 
3504         = TEMPLATE_PARM_PARAMETER_PACK (index);
3505
3506         /* Template template parameters need this.  */
3507       if (TREE_CODE (decl) == TEMPLATE_DECL)
3508         DECL_TEMPLATE_PARMS (decl) = tsubst_template_parms
3509           (DECL_TEMPLATE_PARMS (TEMPLATE_PARM_DECL (index)),
3510            args, complain);
3511     }
3512
3513   return TEMPLATE_PARM_DESCENDANTS (index);
3514 }
3515
3516 /* Process information from new template parameter PARM and append it
3517    to the LIST being built.  This new parameter is a non-type
3518    parameter iff IS_NON_TYPE is true. This new parameter is a
3519    parameter pack iff IS_PARAMETER_PACK is true.  The location of PARM
3520    is in PARM_LOC. NUM_TEMPLATE_PARMS is the size of the template
3521    parameter list PARM belongs to. This is used used to create a
3522    proper canonical type for the type of PARM that is to be created,
3523    iff PARM is a type.  If the size is not known, this parameter shall
3524    be set to 0.  */
3525
3526 tree
3527 process_template_parm (tree list, location_t parm_loc, tree parm,
3528                        bool is_non_type, bool is_parameter_pack,
3529                        unsigned num_template_parms)
3530 {
3531   tree decl = 0;
3532   tree defval;
3533   tree err_parm_list;
3534   int idx = 0;
3535
3536   gcc_assert (TREE_CODE (parm) == TREE_LIST);
3537   defval = TREE_PURPOSE (parm);
3538
3539   if (list)
3540     {
3541       tree p = tree_last (list);
3542
3543       if (p && TREE_VALUE (p) != error_mark_node)
3544         {
3545           p = TREE_VALUE (p);
3546           if (TREE_CODE (p) == TYPE_DECL || TREE_CODE (p) == TEMPLATE_DECL)
3547             idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
3548           else
3549             idx = TEMPLATE_PARM_IDX (DECL_INITIAL (p));
3550         }
3551
3552       ++idx;
3553     }
3554   else
3555     idx = 0;
3556
3557   if (is_non_type)
3558     {
3559       parm = TREE_VALUE (parm);
3560
3561       SET_DECL_TEMPLATE_PARM_P (parm);
3562
3563       if (TREE_TYPE (parm) == error_mark_node)
3564         {
3565           err_parm_list = build_tree_list (defval, parm);
3566           TREE_VALUE (err_parm_list) = error_mark_node;
3567            return chainon (list, err_parm_list);
3568         }
3569       else
3570       {
3571         /* [temp.param]
3572
3573            The top-level cv-qualifiers on the template-parameter are
3574            ignored when determining its type.  */
3575         TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
3576         if (invalid_nontype_parm_type_p (TREE_TYPE (parm), 1))
3577           {
3578             err_parm_list = build_tree_list (defval, parm);
3579             TREE_VALUE (err_parm_list) = error_mark_node;
3580              return chainon (list, err_parm_list);
3581           }
3582
3583         if (uses_parameter_packs (TREE_TYPE (parm)) && !is_parameter_pack)
3584           {
3585             /* This template parameter is not a parameter pack, but it
3586                should be. Complain about "bare" parameter packs.  */
3587             check_for_bare_parameter_packs (TREE_TYPE (parm));
3588             
3589             /* Recover by calling this a parameter pack.  */
3590             is_parameter_pack = true;
3591           }
3592       }
3593
3594       /* A template parameter is not modifiable.  */
3595       TREE_CONSTANT (parm) = 1;
3596       TREE_READONLY (parm) = 1;
3597       decl = build_decl (parm_loc,
3598                          CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
3599       TREE_CONSTANT (decl) = 1;
3600       TREE_READONLY (decl) = 1;
3601       DECL_INITIAL (parm) = DECL_INITIAL (decl)
3602         = build_template_parm_index (idx, processing_template_decl,
3603                                      processing_template_decl,
3604                                      num_template_parms,
3605                                      decl, TREE_TYPE (parm));
3606
3607       TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)) 
3608         = is_parameter_pack;
3609     }
3610   else
3611     {
3612       tree t;
3613       parm = TREE_VALUE (TREE_VALUE (parm));
3614
3615       if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
3616         {
3617           t = cxx_make_type (TEMPLATE_TEMPLATE_PARM);
3618           /* This is for distinguishing between real templates and template
3619              template parameters */
3620           TREE_TYPE (parm) = t;
3621           TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
3622           decl = parm;
3623         }
3624       else
3625         {
3626           t = cxx_make_type (TEMPLATE_TYPE_PARM);
3627           /* parm is either IDENTIFIER_NODE or NULL_TREE.  */
3628           decl = build_decl (parm_loc,
3629                              TYPE_DECL, parm, t);
3630         }
3631
3632       TYPE_NAME (t) = decl;
3633       TYPE_STUB_DECL (t) = decl;
3634       parm = decl;
3635       TEMPLATE_TYPE_PARM_INDEX (t)
3636         = build_template_parm_index (idx, processing_template_decl,
3637                                      processing_template_decl,
3638                                      num_template_parms,
3639                                      decl, TREE_TYPE (parm));
3640       TEMPLATE_TYPE_PARAMETER_PACK (t) = is_parameter_pack;
3641       TYPE_CANONICAL (t) = canonical_type_parameter (t);
3642     }
3643   DECL_ARTIFICIAL (decl) = 1;
3644   SET_DECL_TEMPLATE_PARM_P (decl);
3645   pushdecl (decl);
3646   parm = build_tree_list (defval, parm);
3647   return chainon (list, parm);
3648 }
3649
3650 /* The end of a template parameter list has been reached.  Process the
3651    tree list into a parameter vector, converting each parameter into a more
3652    useful form.  Type parameters are saved as IDENTIFIER_NODEs, and others
3653    as PARM_DECLs.  */
3654
3655 tree
3656 end_template_parm_list (tree parms)
3657 {
3658   int nparms;
3659   tree parm, next;
3660   tree saved_parmlist = make_tree_vec (list_length (parms));
3661
3662   current_template_parms
3663     = tree_cons (size_int (processing_template_decl),
3664                  saved_parmlist, current_template_parms);
3665
3666   for (parm = parms, nparms = 0; parm; parm = next, nparms++)
3667     {
3668       next = TREE_CHAIN (parm);
3669       TREE_VEC_ELT (saved_parmlist, nparms) = parm;
3670       TREE_CHAIN (parm) = NULL_TREE;
3671     }
3672
3673   --processing_template_parmlist;
3674
3675   return saved_parmlist;
3676 }
3677
3678 /* Create a new type almost identical to TYPE but which has the
3679    following differences:
3680
3681      1/ T has a new TEMPLATE_PARM_INDEX that carries the new number of
3682      template sibling parameters of T.
3683
3684      2/ T has a new canonical type that matches the new number
3685      of sibling parms.
3686
3687      3/ From now on, T is going to be what lookups referring to the
3688      name of TYPE will return. No lookup should return TYPE anymore.
3689
3690    NUM_PARMS is the new number of sibling parms TYPE belongs to.
3691
3692    This is a subroutine of fixup_template_parms.  */
3693
3694 static tree
3695 fixup_template_type_parm_type (tree type, int num_parms)
3696 {
3697   tree orig_idx = TEMPLATE_TYPE_PARM_INDEX (type), idx;
3698   tree t;
3699   /* This is the decl which name is inserted into the symbol table for
3700      the template parm type. So whenever we lookup the type name, this
3701      is the DECL we get.  */
3702   tree decl;
3703
3704   /* Do not fix up the type twice.  */
3705   if (orig_idx && TEMPLATE_PARM_NUM_SIBLINGS (orig_idx) != 0)
3706     return type;
3707
3708   t = copy_type (type);
3709   decl = TYPE_NAME (t);
3710
3711   TYPE_MAIN_VARIANT (t) = t;
3712   TYPE_NEXT_VARIANT (t)= NULL_TREE;
3713   TYPE_POINTER_TO (t) = 0;
3714   TYPE_REFERENCE_TO (t) = 0;
3715
3716   idx = build_template_parm_index (TEMPLATE_PARM_IDX (orig_idx),
3717                                    TEMPLATE_PARM_LEVEL (orig_idx),
3718                                    TEMPLATE_PARM_ORIG_LEVEL (orig_idx),
3719                                    num_parms,
3720                                    decl, t);
3721   TEMPLATE_PARM_DESCENDANTS (idx) = TEMPLATE_PARM_DESCENDANTS (orig_idx);
3722   TEMPLATE_PARM_PARAMETER_PACK (idx) = TEMPLATE_PARM_PARAMETER_PACK (orig_idx);
3723   TEMPLATE_TYPE_PARM_INDEX (t) = idx;
3724
3725   TYPE_STUB_DECL (t) = decl;
3726   TEMPLATE_TYPE_DECL (t) = decl;
3727   if (TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
3728     TREE_TYPE (DECL_TEMPLATE_RESULT  (decl)) = t;
3729
3730   /* Update the type associated to the type name stored in the symbol
3731      table. Now, whenever the type name is looked up, the resulting
3732      type is properly fixed up.  */
3733   TREE_TYPE (decl) = t;
3734
3735   TYPE_CANONICAL (t) = canonical_type_parameter (t);
3736
3737   return t;
3738 }
3739
3740 /* Create and return a new TEMPLATE_PARM_INDEX that is almost
3741    identical to I, but that is fixed up as to:
3742
3743    1/ carry the number of sibling parms (NUM_PARMS) of the template
3744    parm represented by I.
3745
3746    2/ replace all references to template parm types declared before I
3747    (in the same template parm list as I) by references to template
3748    parm types contained in ARGS. ARGS should contain the list of
3749    template parms that have been fixed up so far, in a form suitable
3750    to be passed to tsubst.
3751
3752    This is a subroutine of fixup_template_parms.  */
3753
3754 static tree
3755 fixup_template_parm_index (tree i, tree args, int num_parms)
3756 {
3757   tree index, decl, type;
3758
3759   if (i == NULL_TREE
3760       || TREE_CODE (i) != TEMPLATE_PARM_INDEX
3761       /* Do not fix up the index twice.  */
3762       || (TEMPLATE_PARM_NUM_SIBLINGS (i) != 0))
3763     return i;
3764
3765   decl = TEMPLATE_PARM_DECL (i);
3766   type = TREE_TYPE (decl);
3767
3768   index = build_template_parm_index (TEMPLATE_PARM_IDX (i),
3769                                      TEMPLATE_PARM_LEVEL (i),
3770                                      TEMPLATE_PARM_ORIG_LEVEL (i),
3771                                      num_parms,
3772                                      decl, type);
3773
3774   TEMPLATE_PARM_DESCENDANTS (index) = TEMPLATE_PARM_DESCENDANTS (i);
3775   TEMPLATE_PARM_PARAMETER_PACK (index) = TEMPLATE_PARM_PARAMETER_PACK (i);
3776
3777   type = tsubst (type, args, tf_none, NULL_TREE);
3778   
3779   TREE_TYPE (decl) = type;
3780   TREE_TYPE (index) = type;
3781
3782   return index;
3783 }
3784
3785 /* 
3786    This is a subroutine of fixup_template_parms.
3787
3788    It computes the canonical type of the type of the template
3789    parameter PARM_DESC and update all references to that type so that
3790    they use the newly computed canonical type. No access check is
3791    performed during the fixup. PARM_DESC is a TREE_LIST which
3792    TREE_VALUE is the template parameter and its TREE_PURPOSE is the
3793    default argument of the template parm if any. IDX is the index of
3794    the template parameter, starting at 0. NUM_PARMS is the number of
3795    template parameters in the set PARM_DESC belongs to. ARGLIST is a
3796    TREE_VEC containing the full set of template parameters in a form
3797    suitable to be passed to substs functions as their ARGS
3798    argument. This is what current_template_args returns for a given
3799    template. The innermost vector of args in ARGLIST is the set of
3800    template parms that have been fixed up so far. This function adds
3801    the fixed up parameter into that vector.  */
3802
3803 static void
3804 fixup_template_parm (tree parm_desc,
3805                      int idx,
3806                      int num_parms,
3807                      tree arglist)
3808 {
3809   tree parm = TREE_VALUE (parm_desc);
3810   tree fixedup_args = INNERMOST_TEMPLATE_ARGS (arglist);
3811
3812   push_deferring_access_checks (dk_no_check);
3813
3814   if (TREE_CODE (parm) == TYPE_DECL)
3815     {
3816       /* PARM is a template type parameter. Fix up its type, add
3817          the fixed-up template parm to the vector of fixed-up
3818          template parms so far, and substitute the fixed-up
3819          template parms into the default argument of this
3820          parameter.  */
3821       tree t =
3822         fixup_template_type_parm_type (TREE_TYPE (parm), num_parms);
3823       TREE_TYPE (parm) = t;
3824
3825       TREE_VEC_ELT (fixedup_args, idx) = template_parm_to_arg (parm_desc);
3826     }
3827   else if (TREE_CODE (parm) == TEMPLATE_DECL)
3828     {
3829       /* PARM is a template template parameter. This is going to
3830          be interesting.  */
3831       tree tparms, targs, innermost_args, t;
3832       int j;
3833
3834       /* First, fix up the parms of the template template parm
3835          because the parms are involved in defining the new canonical
3836          type of the template template parm.  */
3837
3838       /* So we need to substitute the template parm types that have
3839          been fixed up so far into the template parms of this template
3840          template parm. E.g, consider this:
3841
3842          template<class T, template<T u> class TT> class S;
3843
3844          In this case we want to substitute T into the
3845          template parameters of TT.
3846
3847          So let's walk the template parms of PARM here, and
3848          tsubst ARGLIST into into each of the template
3849          parms.   */
3850
3851       /* For this substitution we need to build the full set of
3852          template parameters and use that as arguments for the
3853          tsubsting function.  */
3854       tparms = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (parm));
3855
3856       /* This will contain the innermost parms of PARM into which
3857          we have substituted so far.  */
3858       innermost_args = make_tree_vec (TREE_VEC_LENGTH (tparms));
3859       targs = add_to_template_args (arglist, innermost_args);
3860       for (j = 0; j < TREE_VEC_LENGTH (tparms); ++j)
3861         {
3862           tree parameter;
3863
3864           parameter = TREE_VEC_ELT (tparms, j);
3865
3866           /* INNERMOST_ARGS needs to have at least the same number
3867              of elements as the index PARAMETER, ortherwise
3868              tsubsting into PARAMETER will result in partially
3869              instantiating it, reducing its tempate parm
3870              level. Let's tactically fill INNERMOST_ARGS for that
3871              purpose.  */
3872           TREE_VEC_ELT (innermost_args, j) =
3873             template_parm_to_arg (parameter);
3874
3875           fixup_template_parm (parameter, j,
3876                                TREE_VEC_LENGTH (tparms),
3877                                targs);
3878         }
3879
3880       /* Now fix up the type of the template template parm.  */
3881
3882       t = fixup_template_type_parm_type (TREE_TYPE (parm), num_parms);
3883       TREE_TYPE (parm) = t;
3884
3885       TREE_VEC_ELT (fixedup_args, idx) =
3886         template_parm_to_arg (parm_desc);
3887     }
3888   else if (TREE_CODE (parm) == PARM_DECL)
3889     {
3890       /* PARM is a non-type template parameter. We need to:
3891
3892        * Fix up its TEMPLATE_PARM_INDEX to make it carry the
3893        proper number of sibling parameters.
3894
3895        * Make lookups of the template parameter return a reference
3896        to the fixed-up index. No lookup should return references
3897        to the former index anymore.
3898
3899        * Substitute the template parms that got fixed up so far
3900
3901        * into the type of PARM.  */
3902
3903       tree index = DECL_INITIAL (parm);
3904
3905       /* PUSHED_DECL is the decl added to the symbol table with
3906          the name of the parameter. E,g:
3907              
3908          template<class T, T u> //#0
3909          auto my_function(T t) -> decltype(u); //#1
3910
3911          Here, when looking up u at //#1, we get the decl of u
3912          resulting from the declaration in #0. This is what
3913          PUSHED_DECL is. We need to replace the reference to the
3914          old TEMPLATE_PARM_INDEX carried by PUSHED_DECL by the
3915          fixed-up TEMPLATE_PARM_INDEX.  */
3916       tree pushed_decl = TEMPLATE_PARM_DECL (index);
3917
3918       /* Let's fix up the TEMPLATE_PARM_INDEX then. Note that we must
3919          fixup the type of PUSHED_DECL as well and luckily
3920          fixup_template_parm_index does it for us too.  */
3921       tree fixed_up_index =
3922         fixup_template_parm_index (index, arglist, num_parms);
3923
3924       DECL_INITIAL (pushed_decl) = DECL_INITIAL (parm) = fixed_up_index;
3925
3926       /* Add this fixed up PARM to the template parms we've fixed
3927          up so far and use that to substitute the fixed-up
3928          template parms into the type of PARM.  */
3929       TREE_VEC_ELT (fixedup_args, idx) =
3930         template_parm_to_arg (parm_desc);
3931       TREE_TYPE (parm) = tsubst (TREE_TYPE (parm), arglist,
3932                                  tf_none, NULL_TREE);
3933     }
3934
3935   TREE_PURPOSE (parm_desc) =
3936     tsubst_template_arg (TREE_PURPOSE (parm_desc),
3937                          arglist, tf_none, parm);
3938
3939   pop_deferring_access_checks ();
3940 }
3941
3942 /* Walk the current template parms and properly compute the canonical
3943    types of the dependent types created during
3944    cp_parser_template_parameter_list.  */
3945
3946 void
3947 fixup_template_parms (void)
3948 {
3949   tree arglist;
3950   tree parameter_vec;
3951   tree fixedup_args;
3952   int i, num_parms;
3953
3954   parameter_vec = INNERMOST_TEMPLATE_PARMS (current_template_parms);
3955   if (parameter_vec == NULL_TREE)
3956     return;
3957
3958   num_parms = TREE_VEC_LENGTH (parameter_vec);
3959
3960   /* This vector contains the current innermost template parms that
3961      have been fixed up so far.  The form of FIXEDUP_ARGS is suitable
3962      to be passed to tsubst* functions as their ARGS argument.  */
3963   fixedup_args = make_tree_vec (num_parms);
3964
3965   /* This vector contains the full set of template parms in a form
3966      suitable to be passed to substs functions as their ARGS
3967      argument.  */
3968   arglist = current_template_args ();
3969   arglist = add_outermost_template_args (arglist, fixedup_args);
3970
3971   /* Let's do the proper fixup now.  */
3972   for (i = 0; i < num_parms; ++i)
3973     fixup_template_parm (TREE_VEC_ELT (parameter_vec, i),
3974                          i, num_parms, arglist);
3975 }
3976
3977 /* end_template_decl is called after a template declaration is seen.  */
3978
3979 void
3980 end_template_decl (void)
3981 {
3982   reset_specialization ();
3983
3984   if (! processing_template_decl)
3985     return;
3986
3987   /* This matches the pushlevel in begin_template_parm_list.  */
3988   finish_scope ();
3989
3990   --processing_template_decl;
3991   current_template_parms = TREE_CHAIN (current_template_parms);
3992 }
3993
3994 /* Takes a TREE_LIST representing a template parameter and convert it
3995    into an argument suitable to be passed to the type substitution
3996    functions.  Note that If the TREE_LIST contains an error_mark
3997    node, the returned argument is error_mark_node.  */
3998
3999 static tree
4000 template_parm_to_arg (tree t)
4001 {
4002
4003   if (t == NULL_TREE
4004       || TREE_CODE (t) != TREE_LIST)
4005     return t;
4006
4007   if (error_operand_p (TREE_VALUE (t)))
4008     return error_mark_node;
4009
4010   t = TREE_VALUE (t);
4011
4012   if (TREE_CODE (t) == TYPE_DECL
4013       || TREE_CODE (t) == TEMPLATE_DECL)
4014     {
4015       t = TREE_TYPE (t);
4016
4017       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
4018         {
4019           /* Turn this argument into a TYPE_ARGUMENT_PACK
4020              with a single element, which expands T.  */
4021           tree vec = make_tree_vec (1);
4022 #ifdef ENABLE_CHECKING
4023           SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT
4024             (vec, TREE_VEC_LENGTH (vec));
4025 #endif
4026           TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
4027
4028           t = cxx_make_type (TYPE_ARGUMENT_PACK);
4029           SET_ARGUMENT_PACK_ARGS (t, vec);
4030         }
4031     }
4032   else
4033     {
4034       t = DECL_INITIAL (t);
4035
4036       if (TEMPLATE_PARM_PARAMETER_PACK (t))
4037         {
4038           /* Turn this argument into a NONTYPE_ARGUMENT_PACK
4039              with a single element, which expands T.  */
4040           tree vec = make_tree_vec (1);
4041           tree type = TREE_TYPE (TEMPLATE_PARM_DECL (t));
4042 #ifdef ENABLE_CHECKING
4043           SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT
4044             (vec, TREE_VEC_LENGTH (vec));
4045 #endif
4046           TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
4047
4048           t  = make_node (NONTYPE_ARGUMENT_PACK);
4049           SET_ARGUMENT_PACK_ARGS (t, vec);
4050           TREE_TYPE (t) = type;
4051         }
4052     }
4053   return t;
4054 }
4055
4056 /* This function returns TRUE if PARM_PACK is a template parameter
4057    pack and if ARG_PACK is what template_parm_to_arg returned when
4058    passed PARM_PACK.  */
4059
4060 static bool
4061 arg_from_parm_pack_p (tree arg_pack, tree parm_pack)
4062 {
4063   /* For clarity in the comments below let's use the representation
4064      argument_pack<elements>' to denote an argument pack and its
4065      elements.
4066
4067      In the 'if' block below, we want to detect cases where
4068      ARG_PACK is argument_pack<PARM_PACK...>.  I.e, we want to
4069      check if ARG_PACK is an argument pack which sole element is
4070      the expansion of PARM_PACK.  That argument pack is typically
4071      created by template_parm_to_arg when passed a parameter
4072      pack.  */
4073
4074   if (arg_pack
4075       && TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack)) == 1
4076       && PACK_EXPANSION_P (TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0)))
4077     {
4078       tree expansion = TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0);
4079       tree pattern = PACK_EXPANSION_PATTERN (expansion);
4080       /* So we have an argument_pack<P...>.  We want to test if P
4081          is actually PARM_PACK.  We will not use cp_tree_equal to
4082          test P and PARM_PACK because during type fixup (by
4083          fixup_template_parm) P can be a pre-fixup version of a
4084          type and PARM_PACK be its post-fixup version.
4085          cp_tree_equal would consider them as different even
4086          though we would want to consider them compatible for our
4087          precise purpose here.
4088
4089          Thus we are going to consider that P and PARM_PACK are
4090          compatible if they have the same DECL.  */
4091       if ((/* If ARG_PACK is a type parameter pack named by the
4092               same DECL as parm_pack ...  */
4093            (TYPE_P (pattern)
4094             && TYPE_P (parm_pack)
4095             && TYPE_NAME (pattern) == TYPE_NAME (parm_pack))
4096            /* ... or if PARM_PACK is a non-type parameter named by the
4097               same DECL as ARG_PACK.  Note that PARM_PACK being a
4098               non-type parameter means it's either a PARM_DECL or a
4099               TEMPLATE_PARM_INDEX.  */
4100            || (TREE_CODE (pattern) == TEMPLATE_PARM_INDEX
4101                && ((TREE_CODE (parm_pack) == PARM_DECL
4102                     && (TEMPLATE_PARM_DECL (pattern)
4103                         == TEMPLATE_PARM_DECL (DECL_INITIAL (parm_pack))))
4104                    || (TREE_CODE (parm_pack) == TEMPLATE_PARM_INDEX
4105                        && (TEMPLATE_PARM_DECL (pattern)
4106                            == TEMPLATE_PARM_DECL (parm_pack))))))
4107           && template_parameter_pack_p (pattern))
4108         return true;
4109     }
4110   return false;
4111 }
4112
4113 /* Within the declaration of a template, return all levels of template
4114    parameters that apply.  The template parameters are represented as
4115    a TREE_VEC, in the form documented in cp-tree.h for template
4116    arguments.  */
4117
4118 static tree
4119 current_template_args (void)
4120 {
4121   tree header;
4122   tree args = NULL_TREE;
4123   int length = TMPL_PARMS_DEPTH (current_template_parms);
4124   int l = length;
4125
4126   /* If there is only one level of template parameters, we do not
4127      create a TREE_VEC of TREE_VECs.  Instead, we return a single
4128      TREE_VEC containing the arguments.  */
4129   if (length > 1)
4130     args = make_tree_vec (length);
4131
4132   for (header = current_template_parms; header; header = TREE_CHAIN (header))
4133     {
4134       tree a = copy_node (TREE_VALUE (header));
4135       int i;
4136
4137       TREE_TYPE (a) = NULL_TREE;
4138       for (i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
4139         TREE_VEC_ELT (a, i) = template_parm_to_arg (TREE_VEC_ELT (a, i));
4140
4141 #ifdef ENABLE_CHECKING
4142       SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (a, TREE_VEC_LENGTH (a));
4143 #endif
4144
4145       if (length > 1)
4146         TREE_VEC_ELT (args, --l) = a;
4147       else
4148         args = a;
4149     }
4150
4151     if (length > 1 && TREE_VEC_ELT (args, 0) == NULL_TREE)
4152       /* This can happen for template parms of a template template
4153          parameter, e.g:
4154
4155          template<template<class T, class U> class TT> struct S;
4156
4157          Consider the level of the parms of TT; T and U both have
4158          level 2; TT has no template parm of level 1. So in this case
4159          the first element of full_template_args is NULL_TREE. If we
4160          leave it like this TMPL_ARG_DEPTH on args returns 1 instead
4161          of 2. This will make tsubst wrongly consider that T and U
4162          have level 1. Instead, let's create a dummy vector as the
4163          first element of full_template_args so that TMPL_ARG_DEPTH
4164          returns the correct depth for args.  */
4165       TREE_VEC_ELT (args, 0) = make_tree_vec (1);
4166   return args;
4167 }
4168
4169 /* Update the declared TYPE by doing any lookups which were thought to be
4170    dependent, but are not now that we know the SCOPE of the declarator.  */
4171
4172 tree
4173 maybe_update_decl_type (tree orig_type, tree scope)
4174 {
4175   tree type = orig_type;
4176
4177   if (type == NULL_TREE)
4178     return type;
4179
4180   if (TREE_CODE (orig_type) == TYPE_DECL)
4181     type = TREE_TYPE (type);
4182
4183   if (scope && TYPE_P (scope) && dependent_type_p (scope)
4184       && dependent_type_p (type)
4185       /* Don't bother building up the args in this case.  */
4186       && TREE_CODE (type) != TEMPLATE_TYPE_PARM)
4187     {
4188       /* tsubst in the args corresponding to the template parameters,
4189          including auto if present.  Most things will be unchanged, but
4190          make_typename_type and tsubst_qualified_id will resolve
4191          TYPENAME_TYPEs and SCOPE_REFs that were previously dependent.  */
4192       tree args = current_template_args ();
4193       tree auto_node = type_uses_auto (type);
4194       tree pushed;
4195       if (auto_node)
4196         {
4197           tree auto_vec = make_tree_vec (1);
4198           TREE_VEC_ELT (auto_vec, 0) = auto_node;
4199           args = add_to_template_args (args, auto_vec);
4200         }
4201       pushed = push_scope (scope);
4202       type = tsubst (type, args, tf_warning_or_error, NULL_TREE);
4203       if (pushed)
4204         pop_scope (scope);
4205     }
4206
4207   if (type == error_mark_node)
4208     return orig_type;
4209
4210   if (TREE_CODE (orig_type) == TYPE_DECL)
4211     {
4212       if (same_type_p (type, TREE_TYPE (orig_type)))
4213         type = orig_type;
4214       else
4215         type = TYPE_NAME (type);
4216     }
4217   return type;
4218 }
4219
4220 /* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
4221    template PARMS.  If MEMBER_TEMPLATE_P is true, the new template is
4222    a member template.  Used by push_template_decl below.  */
4223
4224 static tree
4225 build_template_decl (tree decl, tree parms, bool member_template_p)
4226 {
4227   tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
4228   DECL_TEMPLATE_PARMS (tmpl) = parms;
4229   DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
4230   DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
4231   DECL_MEMBER_TEMPLATE_P (tmpl) = member_template_p;
4232
4233   return tmpl;
4234 }
4235
4236 struct template_parm_data
4237 {
4238   /* The level of the template parameters we are currently
4239      processing.  */
4240   int level;
4241
4242   /* The index of the specialization argument we are currently
4243      processing.  */
4244   int current_arg;
4245
4246   /* An array whose size is the number of template parameters.  The
4247      elements are nonzero if the parameter has been used in any one
4248      of the arguments processed so far.  */
4249   int* parms;
4250
4251   /* An array whose size is the number of template arguments.  The
4252      elements are nonzero if the argument makes use of template
4253      parameters of this level.  */
4254   int* arg_uses_template_parms;
4255 };
4256
4257 /* Subroutine of push_template_decl used to see if each template
4258    parameter in a partial specialization is used in the explicit
4259    argument list.  If T is of the LEVEL given in DATA (which is
4260    treated as a template_parm_data*), then DATA->PARMS is marked
4261    appropriately.  */
4262
4263 static int
4264 mark_template_parm (tree t, void* data)
4265 {
4266   int level;
4267   int idx;
4268   struct template_parm_data* tpd = (struct template_parm_data*) data;
4269
4270   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
4271     {
4272       level = TEMPLATE_PARM_LEVEL (t);
4273       idx = TEMPLATE_PARM_IDX (t);
4274     }
4275   else
4276     {
4277       level = TEMPLATE_TYPE_LEVEL (t);
4278       idx = TEMPLATE_TYPE_IDX (t);
4279     }
4280
4281   if (level == tpd->level)
4282     {
4283       tpd->parms[idx] = 1;
4284       tpd->arg_uses_template_parms[tpd->current_arg] = 1;
4285     }
4286
4287   /* Return zero so that for_each_template_parm will continue the
4288      traversal of the tree; we want to mark *every* template parm.  */
4289   return 0;
4290 }
4291
4292 /* Process the partial specialization DECL.  */
4293
4294 static tree
4295 process_partial_specialization (tree decl)
4296 {
4297   tree type = TREE_TYPE (decl);
4298   tree maintmpl = CLASSTYPE_TI_TEMPLATE (type);
4299   tree specargs = CLASSTYPE_TI_ARGS (type);
4300   tree inner_args = INNERMOST_TEMPLATE_ARGS (specargs);
4301   tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
4302   tree inner_parms;
4303   tree inst;
4304   int nargs = TREE_VEC_LENGTH (inner_args);
4305   int ntparms;
4306   int  i;
4307   bool did_error_intro = false;
4308   struct template_parm_data tpd;
4309   struct template_parm_data tpd2;
4310
4311   gcc_assert (current_template_parms);
4312
4313   inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
4314   ntparms = TREE_VEC_LENGTH (inner_parms);
4315
4316   /* We check that each of the template parameters given in the
4317      partial specialization is used in the argument list to the
4318      specialization.  For example:
4319
4320        template <class T> struct S;
4321        template <class T> struct S<T*>;
4322
4323      The second declaration is OK because `T*' uses the template
4324      parameter T, whereas
4325
4326        template <class T> struct S<int>;
4327
4328      is no good.  Even trickier is:
4329
4330        template <class T>
4331        struct S1
4332        {
4333           template <class U>
4334           struct S2;
4335           template <class U>
4336           struct S2<T>;
4337        };
4338
4339      The S2<T> declaration is actually invalid; it is a
4340      full-specialization.  Of course,
4341
4342           template <class U>
4343           struct S2<T (*)(U)>;
4344
4345      or some such would have been OK.  */
4346   tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
4347   tpd.parms = XALLOCAVEC (int, ntparms);
4348   memset (tpd.parms, 0, sizeof (int) * ntparms);
4349
4350   tpd.arg_uses_template_parms = XALLOCAVEC (int, nargs);
4351   memset (tpd.arg_uses_template_parms, 0, sizeof (int) * nargs);
4352   for (i = 0; i < nargs; ++i)
4353     {
4354       tpd.current_arg = i;
4355       for_each_template_parm (TREE_VEC_ELT (inner_args, i),
4356                               &mark_template_parm,
4357                               &tpd,
4358                               NULL,
4359                               /*include_nondeduced_p=*/false);
4360     }
4361   for (i = 0; i < ntparms; ++i)
4362     if (tpd.parms[i] == 0)
4363       {
4364         /* One of the template parms was not used in the
4365            specialization.  */
4366         if (!did_error_intro)
4367           {
4368             error ("template parameters not used in partial specialization:");
4369             did_error_intro = true;
4370           }
4371
4372         error ("        %qD", TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
4373       }
4374
4375   if (did_error_intro)
4376     return error_mark_node;
4377
4378   /* [temp.class.spec]
4379
4380      The argument list of the specialization shall not be identical to
4381      the implicit argument list of the primary template.  */
4382   if (comp_template_args
4383       (inner_args,
4384        INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE
4385                                                    (maintmpl)))))
4386     error ("partial specialization %qT does not specialize any template arguments", type);
4387
4388   /* [temp.class.spec]
4389
4390      A partially specialized non-type argument expression shall not
4391      involve template parameters of the partial specialization except
4392      when the argument expression is a simple identifier.
4393
4394      The type of a template parameter corresponding to a specialized
4395      non-type argument shall not be dependent on a parameter of the
4396      specialization. 
4397
4398      Also, we verify that pack expansions only occur at the
4399      end of the argument list.  */
4400   gcc_assert (nargs == DECL_NTPARMS (maintmpl));
4401   tpd2.parms = 0;
4402   for (i = 0; i < nargs; ++i)
4403     {
4404       tree parm = TREE_VALUE (TREE_VEC_ELT (main_inner_parms, i));
4405       tree arg = TREE_VEC_ELT (inner_args, i);
4406       tree packed_args = NULL_TREE;
4407       int j, len = 1;
4408
4409       if (ARGUMENT_PACK_P (arg))
4410         {
4411           /* Extract the arguments from the argument pack. We'll be
4412              iterating over these in the following loop.  */
4413           packed_args = ARGUMENT_PACK_ARGS (arg);
4414           len = TREE_VEC_LENGTH (packed_args);
4415         }
4416
4417       for (j = 0; j < len; j++)
4418         {
4419           if (packed_args)
4420             /* Get the Jth argument in the parameter pack.  */
4421             arg = TREE_VEC_ELT (packed_args, j);
4422
4423           if (PACK_EXPANSION_P (arg))
4424             {
4425               /* Pack expansions must come at the end of the
4426                  argument list.  */
4427               if ((packed_args && j < len - 1)
4428                   || (!packed_args && i < nargs - 1))
4429                 {
4430                   if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
4431                     error ("parameter pack argument %qE must be at the "
4432                            "end of the template argument list", arg);
4433                   else
4434                     error ("parameter pack argument %qT must be at the "
4435                            "end of the template argument list", arg);
4436                 }
4437             }
4438
4439           if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
4440             /* We only care about the pattern.  */
4441             arg = PACK_EXPANSION_PATTERN (arg);
4442
4443           if (/* These first two lines are the `non-type' bit.  */
4444               !TYPE_P (arg)
4445               && TREE_CODE (arg) != TEMPLATE_DECL
4446               /* This next line is the `argument expression is not just a
4447                  simple identifier' condition and also the `specialized
4448                  non-type argument' bit.  */
4449               && TREE_CODE (arg) != TEMPLATE_PARM_INDEX)
4450             {
4451               if ((!packed_args && tpd.arg_uses_template_parms[i])
4452                   || (packed_args && uses_template_parms (arg)))
4453                 error ("template argument %qE involves template parameter(s)",
4454                        arg);
4455               else 
4456                 {
4457                   /* Look at the corresponding template parameter,
4458                      marking which template parameters its type depends
4459                      upon.  */
4460                   tree type = TREE_TYPE (parm);
4461
4462                   if (!tpd2.parms)
4463                     {
4464                       /* We haven't yet initialized TPD2.  Do so now.  */
4465                       tpd2.arg_uses_template_parms = XALLOCAVEC (int, nargs);
4466                       /* The number of parameters here is the number in the
4467                          main template, which, as checked in the assertion
4468                          above, is NARGS.  */
4469                       tpd2.parms = XALLOCAVEC (int, nargs);
4470                       tpd2.level = 
4471                         TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
4472                     }
4473
4474                   /* Mark the template parameters.  But this time, we're
4475                      looking for the template parameters of the main
4476                      template, not in the specialization.  */
4477                   tpd2.current_arg = i;
4478                   tpd2.arg_uses_template_parms[i] = 0;
4479                   memset (tpd2.parms, 0, sizeof (int) * nargs);
4480                   for_each_template_parm (type,
4481                                           &mark_template_parm,
4482                                           &tpd2,
4483                                           NULL,
4484                                           /*include_nondeduced_p=*/false);
4485
4486                   if (tpd2.arg_uses_template_parms [i])
4487                     {
4488                       /* The type depended on some template parameters.
4489                          If they are fully specialized in the
4490                          specialization, that's OK.  */
4491                       int j;
4492                       int count = 0;
4493                       for (j = 0; j < nargs; ++j)
4494                         if (tpd2.parms[j] != 0
4495                             && tpd.arg_uses_template_parms [j])
4496                           ++count;
4497                       if (count != 0)
4498                         error_n (input_location, count,
4499                                  "type %qT of template argument %qE depends "
4500                                  "on a template parameter",
4501                                  "type %qT of template argument %qE depends "
4502                                  "on template parameters",
4503                                  type,
4504                                  arg);
4505                     }
4506                 }
4507             }
4508         }
4509     }
4510
4511   /* We should only get here once.  */
4512   gcc_assert (!COMPLETE_TYPE_P (type));
4513
4514   DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
4515     = tree_cons (specargs, inner_parms,
4516                  DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
4517   TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
4518
4519   for (inst = DECL_TEMPLATE_INSTANTIATIONS (maintmpl); inst;
4520        inst = TREE_CHAIN (inst))
4521     {
4522       tree inst_type = TREE_VALUE (inst);
4523       if (COMPLETE_TYPE_P (inst_type)
4524           && CLASSTYPE_IMPLICIT_INSTANTIATION (inst_type))
4525         {
4526           tree spec = most_specialized_class (inst_type, maintmpl, tf_none);
4527           if (spec && TREE_TYPE (spec) == type)
4528             permerror (input_location,
4529                        "partial specialization of %qT after instantiation "
4530                        "of %qT", type, inst_type);
4531         }
4532     }
4533
4534   return decl;
4535 }
4536
4537 /* Check that a template declaration's use of default arguments and
4538    parameter packs is not invalid.  Here, PARMS are the template
4539    parameters.  IS_PRIMARY is nonzero if DECL is the thing declared by
4540    a primary template.  IS_PARTIAL is nonzero if DECL is a partial
4541    specialization.
4542    
4543
4544    IS_FRIEND_DECL is nonzero if DECL is a friend function template
4545    declaration (but not a definition); 1 indicates a declaration, 2
4546    indicates a redeclaration. When IS_FRIEND_DECL=2, no errors are
4547    emitted for extraneous default arguments.
4548
4549    Returns TRUE if there were no errors found, FALSE otherwise. */
4550
4551 bool
4552 check_default_tmpl_args (tree decl, tree parms, int is_primary, 
4553                          int is_partial, int is_friend_decl)
4554 {
4555   const char *msg;
4556   int last_level_to_check;
4557   tree parm_level;
4558   bool no_errors = true;
4559
4560   /* [temp.param]
4561
4562      A default template-argument shall not be specified in a
4563      function template declaration or a function template definition, nor
4564      in the template-parameter-list of the definition of a member of a
4565      class template.  */
4566
4567   if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
4568     /* You can't have a function template declaration in a local
4569        scope, nor you can you define a member of a class template in a
4570        local scope.  */
4571     return true;
4572
4573   if (current_class_type
4574       && !TYPE_BEING_DEFINED (current_class_type)
4575       && DECL_LANG_SPECIFIC (decl)
4576       && DECL_DECLARES_FUNCTION_P (decl)
4577       /* If this is either a friend defined in the scope of the class
4578          or a member function.  */
4579       && (DECL_FUNCTION_MEMBER_P (decl)
4580           ? same_type_p (DECL_CONTEXT (decl), current_class_type)
4581           : DECL_FRIEND_CONTEXT (decl)
4582           ? same_type_p (DECL_FRIEND_CONTEXT (decl), current_class_type)
4583           : false)
4584       /* And, if it was a member function, it really was defined in
4585          the scope of the class.  */
4586       && (!DECL_FUNCTION_MEMBER_P (decl)
4587           || DECL_INITIALIZED_IN_CLASS_P (decl)))
4588     /* We already checked these parameters when the template was
4589        declared, so there's no need to do it again now.  This function
4590        was defined in class scope, but we're processing it's body now
4591        that the class is complete.  */
4592     return true;
4593
4594   /* Core issue 226 (C++0x only): the following only applies to class
4595      templates.  */
4596   if ((cxx_dialect == cxx98) || TREE_CODE (decl) != FUNCTION_DECL)
4597     {
4598       /* [temp.param]
4599
4600          If a template-parameter has a default template-argument, all
4601          subsequent template-parameters shall have a default
4602          template-argument supplied.  */
4603       for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
4604         {
4605           tree inner_parms = TREE_VALUE (parm_level);
4606           int ntparms = TREE_VEC_LENGTH (inner_parms);
4607           int seen_def_arg_p = 0;
4608           int i;
4609
4610           for (i = 0; i < ntparms; ++i)
4611             {
4612               tree parm = TREE_VEC_ELT (inner_parms, i);
4613
4614               if (parm == error_mark_node)
4615                 continue;
4616
4617               if (TREE_PURPOSE (parm))
4618                 seen_def_arg_p = 1;
4619               else if (seen_def_arg_p
4620                        && !template_parameter_pack_p (TREE_VALUE (parm)))
4621                 {
4622                   error ("no default argument for %qD", TREE_VALUE (parm));
4623                   /* For better subsequent error-recovery, we indicate that
4624                      there should have been a default argument.  */
4625                   TREE_PURPOSE (parm) = error_mark_node;
4626                   no_errors = false;
4627                 }
4628               else if (is_primary
4629                        && !is_partial
4630                        && !is_friend_decl
4631                        /* Don't complain about an enclosing partial
4632                           specialization.  */
4633                        && parm_level == parms
4634                        && TREE_CODE (decl) == TYPE_DECL
4635                        && i < ntparms - 1
4636                        && template_parameter_pack_p (TREE_VALUE (parm)))
4637                 {
4638                   /* A primary class template can only have one
4639                      parameter pack, at the end of the template
4640                      parameter list.  */
4641
4642                   if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL)
4643                     error ("parameter pack %qE must be at the end of the"
4644                            " template parameter list", TREE_VALUE (parm));
4645                   else
4646                     error ("parameter pack %qT must be at the end of the"
4647                            " template parameter list", 
4648                            TREE_TYPE (TREE_VALUE (parm)));
4649
4650                   TREE_VALUE (TREE_VEC_ELT (inner_parms, i)) 
4651                     = error_mark_node;
4652                   no_errors = false;
4653                 }
4654             }
4655         }
4656     }
4657
4658   if (((cxx_dialect == cxx98) && TREE_CODE (decl) != TYPE_DECL)
4659       || is_partial 
4660       || !is_primary
4661       || is_friend_decl)
4662     /* For an ordinary class template, default template arguments are
4663        allowed at the innermost level, e.g.:
4664          template <class T = int>
4665          struct S {};
4666        but, in a partial specialization, they're not allowed even
4667        there, as we have in [temp.class.spec]:
4668
4669          The template parameter list of a specialization shall not
4670          contain default template argument values.
4671
4672        So, for a partial specialization, or for a function template
4673        (in C++98/C++03), we look at all of them.  */
4674     ;
4675   else
4676     /* But, for a primary class template that is not a partial
4677        specialization we look at all template parameters except the
4678        innermost ones.  */
4679     parms = TREE_CHAIN (parms);
4680
4681   /* Figure out what error message to issue.  */
4682   if (is_friend_decl == 2)
4683     msg = G_("default template arguments may not be used in function template "
4684              "friend re-declaration");
4685   else if (is_friend_decl)
4686     msg = G_("default template arguments may not be used in function template "
4687              "friend declarations");
4688   else if (TREE_CODE (decl) == FUNCTION_DECL && (cxx_dialect == cxx98))
4689     msg = G_("default template arguments may not be used in function templates "
4690              "without -std=c++11 or -std=gnu++11");
4691   else if (is_partial)
4692     msg = G_("default template arguments may not be used in "
4693              "partial specializations");
4694   else
4695     msg = G_("default argument for template parameter for class enclosing %qD");
4696
4697   if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
4698     /* If we're inside a class definition, there's no need to
4699        examine the parameters to the class itself.  On the one
4700        hand, they will be checked when the class is defined, and,
4701        on the other, default arguments are valid in things like:
4702          template <class T = double>
4703          struct S { template <class U> void f(U); };
4704        Here the default argument for `S' has no bearing on the
4705        declaration of `f'.  */
4706     last_level_to_check = template_class_depth (current_class_type) + 1;
4707   else
4708     /* Check everything.  */
4709     last_level_to_check = 0;
4710
4711   for (parm_level = parms;
4712        parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check;
4713        parm_level = TREE_CHAIN (parm_level))
4714     {
4715       tree inner_parms = TREE_VALUE (parm_level);
4716       int i;
4717       int ntparms;
4718
4719       ntparms = TREE_VEC_LENGTH (inner_parms);
4720       for (i = 0; i < ntparms; ++i)
4721         {
4722           if (TREE_VEC_ELT (inner_parms, i) == error_mark_node)
4723             continue;
4724
4725           if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
4726             {
4727               if (msg)
4728                 {
4729                   no_errors = false;
4730                   if (is_friend_decl == 2)
4731                     return no_errors;
4732
4733                   error (msg, decl);
4734                   msg = 0;
4735                 }
4736
4737               /* Clear out the default argument so that we are not
4738                  confused later.  */
4739               TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
4740             }
4741         }
4742
4743       /* At this point, if we're still interested in issuing messages,
4744          they must apply to classes surrounding the object declared.  */
4745       if (msg)
4746         msg = G_("default argument for template parameter for class "
4747                  "enclosing %qD");
4748     }
4749
4750   return no_errors;
4751 }
4752
4753 /* Worker for push_template_decl_real, called via
4754    for_each_template_parm.  DATA is really an int, indicating the
4755    level of the parameters we are interested in.  If T is a template
4756    parameter of that level, return nonzero.  */
4757
4758 static int
4759 template_parm_this_level_p (tree t, void* data)
4760 {
4761   int this_level = *(int *)data;
4762   int level;
4763
4764   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
4765     level = TEMPLATE_PARM_LEVEL (t);
4766   else
4767     level = TEMPLATE_TYPE_LEVEL (t);
4768   return level == this_level;
4769 }
4770
4771 /* Creates a TEMPLATE_DECL for the indicated DECL using the template
4772    parameters given by current_template_args, or reuses a
4773    previously existing one, if appropriate.  Returns the DECL, or an
4774    equivalent one, if it is replaced via a call to duplicate_decls.
4775
4776    If IS_FRIEND is true, DECL is a friend declaration.  */
4777
4778 tree
4779 push_template_decl_real (tree decl, bool is_friend)
4780 {
4781   tree tmpl;
4782   tree args;
4783   tree info;
4784   tree ctx;
4785   int primary;
4786   int is_partial;
4787   int new_template_p = 0;
4788   /* True if the template is a member template, in the sense of
4789      [temp.mem].  */
4790   bool member_template_p = false;
4791
4792   if (decl == error_mark_node || !current_template_parms)
4793     return error_mark_node;
4794
4795   /* See if this is a partial specialization.  */
4796   is_partial = (DECL_IMPLICIT_TYPEDEF_P (decl)
4797                 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
4798                 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)));
4799
4800   if (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl))
4801     is_friend = true;
4802
4803   if (is_friend)
4804     /* For a friend, we want the context of the friend function, not
4805        the type of which it is a friend.  */
4806     ctx = CP_DECL_CONTEXT (decl);
4807   else if (CP_DECL_CONTEXT (decl)
4808            && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
4809     /* In the case of a virtual function, we want the class in which
4810        it is defined.  */
4811     ctx = CP_DECL_CONTEXT (decl);
4812   else
4813     /* Otherwise, if we're currently defining some class, the DECL
4814        is assumed to be a member of the class.  */
4815     ctx = current_scope ();
4816
4817   if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
4818     ctx = NULL_TREE;
4819
4820   if (!DECL_CONTEXT (decl))
4821     DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
4822
4823   /* See if this is a primary template.  */
4824   if (is_friend && ctx)
4825     /* A friend template that specifies a class context, i.e.
4826          template <typename T> friend void A<T>::f();
4827        is not primary.  */
4828     primary = 0;
4829   else
4830     primary = template_parm_scope_p ();
4831
4832   if (primary)
4833     {
4834       if (DECL_CLASS_SCOPE_P (decl))
4835         member_template_p = true;
4836       if (TREE_CODE (decl) == TYPE_DECL
4837           && ANON_AGGRNAME_P (DECL_NAME (decl)))
4838         {
4839           error ("template class without a name");
4840           return error_mark_node;
4841         }
4842       else if (TREE_CODE (decl) == FUNCTION_DECL)
4843         {
4844           if (DECL_DESTRUCTOR_P (decl))
4845             {
4846               /* [temp.mem]
4847
4848                  A destructor shall not be a member template.  */
4849               error ("destructor %qD declared as member template", decl);
4850               return error_mark_node;
4851             }
4852           if (NEW_DELETE_OPNAME_P (DECL_NAME (decl))
4853               && (!prototype_p (TREE_TYPE (decl))
4854                   || TYPE_ARG_TYPES (TREE_TYPE (decl)) == void_list_node
4855                   || !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
4856                   || (TREE_CHAIN (TYPE_ARG_TYPES ((TREE_TYPE (decl))))
4857                       == void_list_node)))
4858             {
4859               /* [basic.stc.dynamic.allocation]
4860
4861                  An allocation function can be a function
4862                  template. ... Template allocation functions shall
4863                  have two or more parameters.  */
4864               error ("invalid template declaration of %qD", decl);
4865               return error_mark_node;
4866             }
4867         }
4868       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
4869                && CLASS_TYPE_P (TREE_TYPE (decl)))
4870         /* OK */;
4871       else if (TREE_CODE (decl) == TYPE_DECL
4872                && TYPE_DECL_ALIAS_P (decl))
4873         /* alias-declaration */
4874         gcc_assert (!DECL_ARTIFICIAL (decl));
4875       else
4876         {
4877           error ("template declaration of %q#D", decl);
4878           return error_mark_node;
4879         }
4880     }
4881
4882   /* Check to see that the rules regarding the use of default
4883      arguments are not being violated.  */
4884   check_default_tmpl_args (decl, current_template_parms,
4885                            primary, is_partial, /*is_friend_decl=*/0);
4886
4887   /* Ensure that there are no parameter packs in the type of this
4888      declaration that have not been expanded.  */
4889   if (TREE_CODE (decl) == FUNCTION_DECL)
4890     {
4891       /* Check each of the arguments individually to see if there are
4892          any bare parameter packs.  */
4893       tree type = TREE_TYPE (decl);
4894       tree arg = DECL_ARGUMENTS (decl);
4895       tree argtype = TYPE_ARG_TYPES (type);
4896
4897       while (arg && argtype)
4898         {
4899           if (!FUNCTION_PARAMETER_PACK_P (arg)
4900               && check_for_bare_parameter_packs (TREE_TYPE (arg)))
4901             {
4902             /* This is a PARM_DECL that contains unexpanded parameter
4903                packs. We have already complained about this in the
4904                check_for_bare_parameter_packs call, so just replace
4905                these types with ERROR_MARK_NODE.  */
4906               TREE_TYPE (arg) = error_mark_node;
4907               TREE_VALUE (argtype) = error_mark_node;
4908             }
4909
4910           arg = DECL_CHAIN (arg);
4911           argtype = TREE_CHAIN (argtype);
4912         }
4913
4914       /* Check for bare parameter packs in the return type and the
4915          exception specifiers.  */
4916       if (check_for_bare_parameter_packs (TREE_TYPE (type)))
4917         /* Errors were already issued, set return type to int
4918            as the frontend doesn't expect error_mark_node as
4919            the return type.  */
4920         TREE_TYPE (type) = integer_type_node;
4921       if (check_for_bare_parameter_packs (TYPE_RAISES_EXCEPTIONS (type)))
4922         TYPE_RAISES_EXCEPTIONS (type) = NULL_TREE;
4923     }
4924   else if (check_for_bare_parameter_packs ((TREE_CODE (decl) == TYPE_DECL
4925                                             && TYPE_DECL_ALIAS_P (decl))
4926                                            ? DECL_ORIGINAL_TYPE (decl)
4927                                            : TREE_TYPE (decl)))
4928     {
4929       TREE_TYPE (decl) = error_mark_node;
4930       return error_mark_node;
4931     }
4932
4933   if (is_partial)
4934     return process_partial_specialization (decl);
4935
4936   args = current_template_args ();
4937
4938   if (!ctx
4939       || TREE_CODE (ctx) == FUNCTION_DECL
4940       || (CLASS_TYPE_P (ctx) && TYPE_BEING_DEFINED (ctx))
4941       || (is_friend && !DECL_TEMPLATE_INFO (decl)))
4942     {
4943       if (DECL_LANG_SPECIFIC (decl)
4944           && DECL_TEMPLATE_INFO (decl)
4945           && DECL_TI_TEMPLATE (decl))
4946         tmpl = DECL_TI_TEMPLATE (decl);
4947       /* If DECL is a TYPE_DECL for a class-template, then there won't
4948          be DECL_LANG_SPECIFIC.  The information equivalent to
4949          DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead.  */
4950       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
4951                && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
4952                && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
4953         {
4954           /* Since a template declaration already existed for this
4955              class-type, we must be redeclaring it here.  Make sure
4956              that the redeclaration is valid.  */
4957           redeclare_class_template (TREE_TYPE (decl),
4958                                     current_template_parms);
4959           /* We don't need to create a new TEMPLATE_DECL; just use the
4960              one we already had.  */
4961           tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
4962         }
4963       else
4964         {
4965           tmpl = build_template_decl (decl, current_template_parms,
4966                                       member_template_p);
4967           new_template_p = 1;
4968
4969           if (DECL_LANG_SPECIFIC (decl)
4970               && DECL_TEMPLATE_SPECIALIZATION (decl))
4971             {
4972               /* A specialization of a member template of a template
4973                  class.  */
4974               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
4975               DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
4976               DECL_TEMPLATE_INFO (decl) = NULL_TREE;
4977             }
4978         }
4979     }
4980   else
4981     {
4982       tree a, t, current, parms;
4983       int i;
4984       tree tinfo = get_template_info (decl);
4985
4986       if (!tinfo)
4987         {
4988           error ("template definition of non-template %q#D", decl);
4989           return error_mark_node;
4990         }
4991
4992       tmpl = TI_TEMPLATE (tinfo);
4993
4994       if (DECL_FUNCTION_TEMPLATE_P (tmpl)
4995           && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
4996           && DECL_TEMPLATE_SPECIALIZATION (decl)
4997           && DECL_MEMBER_TEMPLATE_P (tmpl))
4998         {
4999           tree new_tmpl;
5000
5001           /* The declaration is a specialization of a member
5002              template, declared outside the class.  Therefore, the
5003              innermost template arguments will be NULL, so we
5004              replace them with the arguments determined by the
5005              earlier call to check_explicit_specialization.  */
5006           args = DECL_TI_ARGS (decl);
5007
5008           new_tmpl
5009             = build_template_decl (decl, current_template_parms,
5010                                    member_template_p);
5011           DECL_TEMPLATE_RESULT (new_tmpl) = decl;
5012           TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
5013           DECL_TI_TEMPLATE (decl) = new_tmpl;
5014           SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
5015           DECL_TEMPLATE_INFO (new_tmpl)
5016             = build_template_info (tmpl, args);
5017
5018           register_specialization (new_tmpl,
5019                                    most_general_template (tmpl),
5020                                    args,
5021                                    is_friend, 0);
5022           return decl;
5023         }
5024
5025       /* Make sure the template headers we got make sense.  */
5026
5027       parms = DECL_TEMPLATE_PARMS (tmpl);
5028       i = TMPL_PARMS_DEPTH (parms);
5029       if (TMPL_ARGS_DEPTH (args) != i)
5030         {
5031           error ("expected %d levels of template parms for %q#D, got %d",
5032                  i, decl, TMPL_ARGS_DEPTH (args));
5033         }
5034       else
5035         for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
5036           {
5037             a = TMPL_ARGS_LEVEL (args, i);
5038             t = INNERMOST_TEMPLATE_PARMS (parms);
5039
5040             if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
5041               {
5042                 if (current == decl)
5043                   error ("got %d template parameters for %q#D",
5044                          TREE_VEC_LENGTH (a), decl);
5045                 else
5046                   error ("got %d template parameters for %q#T",
5047                          TREE_VEC_LENGTH (a), current);
5048                 error ("  but %d required", TREE_VEC_LENGTH (t));
5049                 return error_mark_node;
5050               }
5051
5052             if (current == decl)
5053               current = ctx;
5054             else if (current == NULL_TREE)
5055               /* Can happen in erroneous input.  */
5056               break;
5057             else
5058               current = (TYPE_P (current)
5059                          ? TYPE_CONTEXT (current)
5060                          : DECL_CONTEXT (current));
5061           }
5062
5063       /* Check that the parms are used in the appropriate qualifying scopes
5064          in the declarator.  */
5065       if (!comp_template_args
5066           (TI_ARGS (tinfo),
5067            TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (tmpl)))))
5068         {
5069           error ("\
5070 template arguments to %qD do not match original template %qD",
5071                  decl, DECL_TEMPLATE_RESULT (tmpl));
5072           if (!uses_template_parms (TI_ARGS (tinfo)))
5073             inform (input_location, "use template<> for an explicit specialization");
5074           /* Avoid crash in import_export_decl.  */
5075           DECL_INTERFACE_KNOWN (decl) = 1;
5076           return error_mark_node;
5077         }
5078     }
5079
5080   DECL_TEMPLATE_RESULT (tmpl) = decl;
5081   TREE_TYPE (tmpl) = TREE_TYPE (decl);
5082
5083   /* Push template declarations for global functions and types.  Note
5084      that we do not try to push a global template friend declared in a
5085      template class; such a thing may well depend on the template
5086      parameters of the class.  */
5087   if (new_template_p && !ctx
5088       && !(is_friend && template_class_depth (current_class_type) > 0))
5089     {
5090       tmpl = pushdecl_namespace_level (tmpl, is_friend);
5091       if (tmpl == error_mark_node)
5092         return error_mark_node;
5093
5094       /* Hide template friend classes that haven't been declared yet.  */
5095       if (is_friend && TREE_CODE (decl) == TYPE_DECL)
5096         {
5097           DECL_ANTICIPATED (tmpl) = 1;
5098           DECL_FRIEND_P (tmpl) = 1;
5099         }
5100     }
5101
5102   if (primary)
5103     {
5104       tree parms = DECL_TEMPLATE_PARMS (tmpl);
5105       int i;
5106
5107       DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
5108       if (DECL_CONV_FN_P (tmpl))
5109         {
5110           int depth = TMPL_PARMS_DEPTH (parms);
5111
5112           /* It is a conversion operator. See if the type converted to
5113              depends on innermost template operands.  */
5114
5115           if (uses_template_parms_level (TREE_TYPE (TREE_TYPE (tmpl)),
5116                                          depth))
5117             DECL_TEMPLATE_CONV_FN_P (tmpl) = 1;
5118         }
5119
5120       /* Give template template parms a DECL_CONTEXT of the template
5121          for which they are a parameter.  */
5122       parms = INNERMOST_TEMPLATE_PARMS (parms);
5123       for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
5124         {
5125           tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
5126           if (TREE_CODE (parm) == TEMPLATE_DECL)
5127             DECL_CONTEXT (parm) = tmpl;
5128         }
5129     }
5130
5131   /* The DECL_TI_ARGS of DECL contains full set of arguments referring
5132      back to its most general template.  If TMPL is a specialization,
5133      ARGS may only have the innermost set of arguments.  Add the missing
5134      argument levels if necessary.  */
5135   if (DECL_TEMPLATE_INFO (tmpl))
5136     args = add_outermost_template_args (DECL_TI_ARGS (tmpl), args);
5137
5138   info = build_template_info (tmpl, args);
5139
5140   if (DECL_IMPLICIT_TYPEDEF_P (decl))
5141     SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
5142   else
5143     {
5144       if (primary && !DECL_LANG_SPECIFIC (decl))
5145         retrofit_lang_decl (decl);
5146       if (DECL_LANG_SPECIFIC (decl))
5147         DECL_TEMPLATE_INFO (decl) = info;
5148     }
5149
5150   return DECL_TEMPLATE_RESULT (tmpl);
5151 }
5152
5153 tree
5154 push_template_decl (tree decl)
5155 {
5156   return push_template_decl_real (decl, false);
5157 }
5158
5159 /* Called when a class template TYPE is redeclared with the indicated
5160    template PARMS, e.g.:
5161
5162      template <class T> struct S;
5163      template <class T> struct S {};  */
5164
5165 bool
5166 redeclare_class_template (tree type, tree parms)
5167 {
5168   tree tmpl;
5169   tree tmpl_parms;
5170   int i;
5171
5172   if (!TYPE_TEMPLATE_INFO (type))
5173     {
5174       error ("%qT is not a template type", type);
5175       return false;
5176     }
5177
5178   tmpl = TYPE_TI_TEMPLATE (type);
5179   if (!PRIMARY_TEMPLATE_P (tmpl))
5180     /* The type is nested in some template class.  Nothing to worry
5181        about here; there are no new template parameters for the nested
5182        type.  */
5183     return true;
5184
5185   if (!parms)
5186     {
5187       error ("template specifiers not specified in declaration of %qD",
5188              tmpl);
5189       return false;
5190     }
5191
5192   parms = INNERMOST_TEMPLATE_PARMS (parms);
5193   tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
5194
5195   if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
5196     {
5197       error_n (input_location, TREE_VEC_LENGTH (parms),
5198                "redeclared with %d template parameter",
5199                "redeclared with %d template parameters",
5200                TREE_VEC_LENGTH (parms));
5201       inform_n (input_location, TREE_VEC_LENGTH (tmpl_parms),
5202                 "previous declaration %q+D used %d template parameter",
5203                 "previous declaration %q+D used %d template parameters",
5204                 tmpl, TREE_VEC_LENGTH (tmpl_parms));
5205       return false;
5206     }
5207
5208   for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
5209     {
5210       tree tmpl_parm;
5211       tree parm;
5212       tree tmpl_default;
5213       tree parm_default;
5214
5215       if (TREE_VEC_ELT (tmpl_parms, i) == error_mark_node
5216           || TREE_VEC_ELT (parms, i) == error_mark_node)
5217         continue;
5218
5219       tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
5220       if (tmpl_parm == error_mark_node)
5221         return false;
5222
5223       parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
5224       tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
5225       parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
5226
5227       /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
5228          TEMPLATE_DECL.  */
5229       if (TREE_CODE (tmpl_parm) != TREE_CODE (parm)
5230           || (TREE_CODE (tmpl_parm) != TYPE_DECL
5231               && !same_type_p (TREE_TYPE (tmpl_parm), TREE_TYPE (parm)))
5232           || (TREE_CODE (tmpl_parm) != PARM_DECL
5233               && (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (tmpl_parm))
5234                   != TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm))))
5235           || (TREE_CODE (tmpl_parm) == PARM_DECL
5236               && (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (tmpl_parm))
5237                   != TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))))
5238         {
5239           error ("template parameter %q+#D", tmpl_parm);
5240           error ("redeclared here as %q#D", parm);
5241           return false;
5242         }
5243
5244       if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
5245         {
5246           /* We have in [temp.param]:
5247
5248              A template-parameter may not be given default arguments
5249              by two different declarations in the same scope.  */
5250           error_at (input_location, "redefinition of default argument for %q#D", parm);
5251           inform (DECL_SOURCE_LOCATION (tmpl_parm),
5252                   "original definition appeared here");
5253           return false;
5254         }
5255
5256       if (parm_default != NULL_TREE)
5257         /* Update the previous template parameters (which are the ones
5258            that will really count) with the new default value.  */
5259         TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
5260       else if (tmpl_default != NULL_TREE)
5261         /* Update the new parameters, too; they'll be used as the
5262            parameters for any members.  */
5263         TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
5264     }
5265
5266     return true;
5267 }
5268
5269 /* Simplify EXPR if it is a non-dependent expression.  Returns the
5270    (possibly simplified) expression.  */
5271
5272 static tree
5273 fold_non_dependent_expr_sfinae (tree expr, tsubst_flags_t complain)
5274 {
5275   if (expr == NULL_TREE)
5276     return NULL_TREE;
5277
5278   /* If we're in a template, but EXPR isn't value dependent, simplify
5279      it.  We're supposed to treat:
5280
5281        template <typename T> void f(T[1 + 1]);
5282        template <typename T> void f(T[2]);
5283
5284      as two declarations of the same function, for example.  */
5285   if (processing_template_decl
5286       && !type_dependent_expression_p (expr)
5287       && potential_constant_expression (expr)
5288       && !value_dependent_expression_p (expr))
5289     {
5290       HOST_WIDE_INT saved_processing_template_decl;
5291
5292       saved_processing_template_decl = processing_template_decl;
5293       processing_template_decl = 0;
5294       expr = tsubst_copy_and_build (expr,
5295                                     /*args=*/NULL_TREE,
5296                                     complain,
5297                                     /*in_decl=*/NULL_TREE,
5298                                     /*function_p=*/false,
5299                                     /*integral_constant_expression_p=*/true);
5300       processing_template_decl = saved_processing_template_decl;
5301     }
5302   return expr;
5303 }
5304
5305 tree
5306 fold_non_dependent_expr (tree expr)
5307 {
5308   return fold_non_dependent_expr_sfinae (expr, tf_error);
5309 }
5310
5311 /* Return TRUE iff T is a type alias, a TEMPLATE_DECL for an alias
5312    template declaration, or a TYPE_DECL for an alias declaration.  */
5313
5314 bool
5315 alias_type_or_template_p (tree t)
5316 {
5317   if (t == NULL_TREE)
5318     return false;
5319   return ((TREE_CODE (t) == TYPE_DECL && TYPE_DECL_ALIAS_P (t))
5320           || (TYPE_P (t)
5321               && TYPE_NAME (t)
5322               && TYPE_DECL_ALIAS_P (TYPE_NAME (t)))
5323           || DECL_ALIAS_TEMPLATE_P (t));
5324 }
5325
5326 /* Return TRUE iff is a specialization of an alias template.  */
5327
5328 bool
5329 alias_template_specialization_p (tree t)
5330 {
5331   if (t == NULL_TREE)
5332     return false;
5333   return (primary_template_instantiation_p (t)
5334           && DECL_ALIAS_TEMPLATE_P (TYPE_TI_TEMPLATE (t)));
5335 }
5336
5337 /* Subroutine of convert_nontype_argument. Converts EXPR to TYPE, which
5338    must be a function or a pointer-to-function type, as specified
5339    in [temp.arg.nontype]: disambiguate EXPR if it is an overload set,
5340    and check that the resulting function has external linkage.  */
5341
5342 static tree
5343 convert_nontype_argument_function (tree type, tree expr)
5344 {
5345   tree fns = expr;
5346   tree fn, fn_no_ptr;
5347   linkage_kind linkage;
5348
5349   fn = instantiate_type (type, fns, tf_none);
5350   if (fn == error_mark_node)
5351     return error_mark_node;
5352
5353   fn_no_ptr = fn;
5354   if (TREE_CODE (fn_no_ptr) == ADDR_EXPR)
5355     fn_no_ptr = TREE_OPERAND (fn_no_ptr, 0);
5356   if (BASELINK_P (fn_no_ptr))
5357     fn_no_ptr = BASELINK_FUNCTIONS (fn_no_ptr);
5358  
5359   /* [temp.arg.nontype]/1
5360
5361      A template-argument for a non-type, non-template template-parameter
5362      shall be one of:
5363      [...]
5364      -- the address of an object or function with external [C++11: or
5365         internal] linkage.  */
5366   linkage = decl_linkage (fn_no_ptr);
5367   if (cxx_dialect >= cxx0x ? linkage == lk_none : linkage != lk_external)
5368     {
5369       if (cxx_dialect >= cxx0x)
5370         error ("%qE is not a valid template argument for type %qT "
5371                "because %qD has no linkage",
5372                expr, type, fn_no_ptr);
5373       else
5374         error ("%qE is not a valid template argument for type %qT "
5375                "because %qD does not have external linkage",
5376                expr, type, fn_no_ptr);
5377       return NULL_TREE;
5378     }
5379
5380   return fn;
5381 }
5382
5383 /* Subroutine of convert_nontype_argument.
5384    Check if EXPR of type TYPE is a valid pointer-to-member constant.
5385    Emit an error otherwise.  */
5386
5387 static bool
5388 check_valid_ptrmem_cst_expr (tree type, tree expr,
5389                              tsubst_flags_t complain)
5390 {
5391   STRIP_NOPS (expr);
5392   if (expr && (null_ptr_cst_p (expr) || TREE_CODE (expr) == PTRMEM_CST))
5393     return true;
5394   if (cxx_dialect >= cxx0x && null_member_pointer_value_p (expr))
5395     return true;
5396   if (complain & tf_error)
5397     {
5398       error ("%qE is not a valid template argument for type %qT",
5399              expr, type);
5400       error ("it must be a pointer-to-member of the form %<&X::Y%>");
5401     }
5402   return false;
5403 }
5404
5405 /* Returns TRUE iff the address of OP is value-dependent.
5406
5407    14.6.2.4 [temp.dep.temp]:
5408    A non-integral non-type template-argument is dependent if its type is
5409    dependent or it has either of the following forms
5410      qualified-id
5411      & qualified-id
5412    and contains a nested-name-specifier which specifies a class-name that
5413    names a dependent type.
5414
5415    We generalize this to just say that the address of a member of a
5416    dependent class is value-dependent; the above doesn't cover the
5417    address of a static data member named with an unqualified-id.  */
5418
5419 static bool
5420 has_value_dependent_address (tree op)
5421 {
5422   /* We could use get_inner_reference here, but there's no need;
5423      this is only relevant for template non-type arguments, which
5424      can only be expressed as &id-expression.  */
5425   if (DECL_P (op))
5426     {
5427       tree ctx = CP_DECL_CONTEXT (op);
5428       if (TYPE_P (ctx) && dependent_type_p (ctx))
5429         return true;
5430     }
5431
5432   return false;
5433 }
5434
5435 /* The next set of functions are used for providing helpful explanatory
5436    diagnostics for failed overload resolution.  Their messages should be
5437    indented by two spaces for consistency with the messages in
5438    call.c  */
5439
5440 static int
5441 unify_success (bool explain_p ATTRIBUTE_UNUSED)
5442 {
5443   return 0;
5444 }
5445
5446 static int
5447 unify_parameter_deduction_failure (bool explain_p, tree parm)
5448 {
5449   if (explain_p)
5450     inform (input_location,
5451             "  couldn't deduce template parameter %qD", parm);
5452   return 1;
5453 }
5454
5455 static int
5456 unify_invalid (bool explain_p ATTRIBUTE_UNUSED)
5457 {
5458   return 1;
5459 }
5460
5461 static int
5462 unify_cv_qual_mismatch (bool explain_p, tree parm, tree arg)
5463 {
5464   if (explain_p)
5465     inform (input_location,
5466             "  types %qT and %qT have incompatible cv-qualifiers",
5467             parm, arg);
5468   return 1;
5469 }
5470
5471 static int
5472 unify_type_mismatch (bool explain_p, tree parm, tree arg)
5473 {
5474   if (explain_p)
5475     inform (input_location, "  mismatched types %qT and %qT", parm, arg);
5476   return 1;
5477 }
5478
5479 static int
5480 unify_parameter_pack_mismatch (bool explain_p, tree parm, tree arg)
5481 {
5482   if (explain_p)
5483     inform (input_location,
5484             "  template parameter %qD is not a parameter pack, but "
5485             "argument %qD is",
5486             parm, arg);
5487   return 1;
5488 }
5489
5490 static int
5491 unify_ptrmem_cst_mismatch (bool explain_p, tree parm, tree arg)
5492 {
5493   if (explain_p)
5494     inform (input_location,
5495             "  template argument %qE does not match "
5496             "pointer-to-member constant %qE",
5497             arg, parm);
5498   return 1;
5499 }
5500
5501 static int
5502 unify_expression_unequal (bool explain_p, tree parm, tree arg)
5503 {
5504   if (explain_p)
5505     inform (input_location, "  %qE is not equivalent to %qE", parm, arg);
5506   return 1;
5507 }
5508
5509 static int
5510 unify_parameter_pack_inconsistent (bool explain_p, tree old_arg, tree new_arg)
5511 {
5512   if (explain_p)
5513     inform (input_location,
5514             "  inconsistent parameter pack deduction with %qT and %qT",
5515             old_arg, new_arg);
5516   return 1;
5517 }
5518
5519 static int
5520 unify_inconsistency (bool explain_p, tree parm, tree first, tree second)
5521 {
5522   if (explain_p)
5523     {
5524       if (TYPE_P (parm))
5525         inform (input_location,
5526                 "  deduced conflicting types for parameter %qT (%qT and %qT)",
5527                 parm, first, second);
5528       else
5529         inform (input_location,
5530                 "  deduced conflicting values for non-type parameter "
5531                 "%qE (%qE and %qE)", parm, first, second);
5532     }
5533   return 1;
5534 }
5535
5536 static int
5537 unify_vla_arg (bool explain_p, tree arg)
5538 {
5539   if (explain_p)
5540     inform (input_location,
5541             "  variable-sized array type %qT is not "
5542             "a valid template argument",
5543             arg);
5544   return 1;
5545 }
5546
5547 static int
5548 unify_method_type_error (bool explain_p, tree arg)
5549 {
5550   if (explain_p)
5551     inform (input_location,
5552             "  member function type %qT is not a valid template argument",
5553             arg);
5554   return 1;
5555 }
5556
5557 static int
5558 unify_arity (bool explain_p, int have, int wanted)
5559 {
5560   if (explain_p)
5561     inform_n (input_location, wanted,
5562               "  candidate expects %d argument, %d provided",
5563               "  candidate expects %d arguments, %d provided",
5564               wanted, have);
5565   return 1;
5566 }
5567
5568 static int
5569 unify_too_many_arguments (bool explain_p, int have, int wanted)
5570 {
5571   return unify_arity (explain_p, have, wanted);
5572 }
5573
5574 static int
5575 unify_too_few_arguments (bool explain_p, int have, int wanted)
5576 {
5577   return unify_arity (explain_p, have, wanted);
5578 }
5579
5580 static int
5581 unify_arg_conversion (bool explain_p, tree to_type,
5582                       tree from_type, tree arg)
5583 {
5584   if (explain_p)
5585     inform (input_location, "  cannot convert %qE (type %qT) to type %qT",
5586             arg, from_type, to_type);
5587   return 1;
5588 }
5589
5590 static int
5591 unify_no_common_base (bool explain_p, enum template_base_result r,
5592                       tree parm, tree arg)
5593 {
5594   if (explain_p)
5595     switch (r)
5596       {
5597       case tbr_ambiguous_baseclass:
5598         inform (input_location, "  %qT is an ambiguous base class of %qT",
5599                 arg, parm);
5600         break;
5601       default:
5602         inform (input_location, "  %qT is not derived from %qT", arg, parm);
5603         break;
5604       }
5605   return 1;
5606 }
5607
5608 static int
5609 unify_inconsistent_template_template_parameters (bool explain_p)
5610 {
5611   if (explain_p)
5612     inform (input_location,
5613             "  template parameters of a template template argument are "
5614             "inconsistent with other deduced template arguments");
5615   return 1;
5616 }
5617
5618 static int
5619 unify_template_deduction_failure (bool explain_p, tree parm, tree arg)
5620 {
5621   if (explain_p)
5622     inform (input_location,
5623             "  can't deduce a template for %qT from non-template type %qT",
5624             parm, arg);
5625   return 1;
5626 }
5627
5628 static int
5629 unify_template_argument_mismatch (bool explain_p, tree parm, tree arg)
5630 {
5631   if (explain_p)
5632     inform (input_location,
5633             "  template argument %qE does not match %qD", arg, parm);
5634   return 1;
5635 }
5636
5637 static int
5638 unify_overload_resolution_failure (bool explain_p, tree arg)
5639 {
5640   if (explain_p)
5641     inform (input_location,
5642             "  could not resolve address from overloaded function %qE",
5643             arg);
5644   return 1;
5645 }
5646
5647 /* Attempt to convert the non-type template parameter EXPR to the
5648    indicated TYPE.  If the conversion is successful, return the
5649    converted value.  If the conversion is unsuccessful, return
5650    NULL_TREE if we issued an error message, or error_mark_node if we
5651    did not.  We issue error messages for out-and-out bad template
5652    parameters, but not simply because the conversion failed, since we
5653    might be just trying to do argument deduction.  Both TYPE and EXPR
5654    must be non-dependent.
5655
5656    The conversion follows the special rules described in
5657    [temp.arg.nontype], and it is much more strict than an implicit
5658    conversion.
5659
5660    This function is called twice for each template argument (see
5661    lookup_template_class for a more accurate description of this
5662    problem). This means that we need to handle expressions which
5663    are not valid in a C++ source, but can be created from the
5664    first call (for instance, casts to perform conversions). These
5665    hacks can go away after we fix the double coercion problem.  */
5666
5667 static tree
5668 convert_nontype_argument (tree type, tree expr, tsubst_flags_t complain)
5669 {
5670   tree expr_type;
5671
5672   /* Detect immediately string literals as invalid non-type argument.
5673      This special-case is not needed for correctness (we would easily
5674      catch this later), but only to provide better diagnostic for this
5675      common user mistake. As suggested by DR 100, we do not mention
5676      linkage issues in the diagnostic as this is not the point.  */
5677   /* FIXME we're making this OK.  */
5678   if (TREE_CODE (expr) == STRING_CST)
5679     {
5680       if (complain & tf_error)
5681         error ("%qE is not a valid template argument for type %qT "
5682                "because string literals can never be used in this context",
5683                expr, type);
5684       return NULL_TREE;
5685     }
5686
5687   /* Add the ADDR_EXPR now for the benefit of
5688      value_dependent_expression_p.  */
5689   if (TYPE_PTROBV_P (type)
5690       && TREE_CODE (TREE_TYPE (expr)) == ARRAY_TYPE)
5691     expr = decay_conversion (expr);
5692
5693   /* If we are in a template, EXPR may be non-dependent, but still
5694      have a syntactic, rather than semantic, form.  For example, EXPR
5695      might be a SCOPE_REF, rather than the VAR_DECL to which the
5696      SCOPE_REF refers.  Preserving the qualifying scope is necessary
5697      so that access checking can be performed when the template is
5698      instantiated -- but here we need the resolved form so that we can
5699      convert the argument.  */
5700   if (TYPE_REF_OBJ_P (type)
5701       && has_value_dependent_address (expr))
5702     /* If we want the address and it's value-dependent, don't fold.  */;
5703   else if (!type_unknown_p (expr))
5704     expr = fold_non_dependent_expr_sfinae (expr, complain);
5705   if (error_operand_p (expr))
5706     return error_mark_node;
5707   expr_type = TREE_TYPE (expr);
5708   if (TREE_CODE (type) == REFERENCE_TYPE)
5709     expr = mark_lvalue_use (expr);
5710   else
5711     expr = mark_rvalue_use (expr);
5712
5713   /* 14.3.2/5: The null pointer{,-to-member} conversion is applied
5714      to a non-type argument of "nullptr".  */
5715   if (expr == nullptr_node
5716       && (TYPE_PTR_P (type) || TYPE_PTR_TO_MEMBER_P (type)))
5717     expr = convert (type, expr);
5718
5719   /* In C++11, integral or enumeration non-type template arguments can be
5720      arbitrary constant expressions.  Pointer and pointer to
5721      member arguments can be general constant expressions that evaluate
5722      to a null value, but otherwise still need to be of a specific form.  */
5723   if (cxx_dialect >= cxx0x)
5724     {
5725       if (TREE_CODE (expr) == PTRMEM_CST)
5726         /* A PTRMEM_CST is already constant, and a valid template
5727            argument for a parameter of pointer to member type, we just want
5728            to leave it in that form rather than lower it to a
5729            CONSTRUCTOR.  */;
5730       else if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
5731         expr = maybe_constant_value (expr);
5732       else if (TYPE_PTR_P (type)
5733                || TYPE_PTR_TO_MEMBER_P (type))
5734         {
5735           tree folded = maybe_constant_value (expr);
5736           if (TYPE_PTR_P (type) ? integer_zerop (folded)
5737               : null_member_pointer_value_p (folded))
5738             expr = folded;
5739         }
5740     }
5741
5742   /* HACK: Due to double coercion, we can get a
5743      NOP_EXPR<REFERENCE_TYPE>(ADDR_EXPR<POINTER_TYPE> (arg)) here,
5744      which is the tree that we built on the first call (see
5745      below when coercing to reference to object or to reference to
5746      function). We just strip everything and get to the arg.
5747      See g++.old-deja/g++.oliva/template4.C and g++.dg/template/nontype9.C
5748      for examples.  */
5749   if (TYPE_REF_OBJ_P (type) || TYPE_REFFN_P (type))
5750     {
5751       tree probe_type, probe = expr;
5752       if (REFERENCE_REF_P (probe))
5753         probe = TREE_OPERAND (probe, 0);
5754       probe_type = TREE_TYPE (probe);
5755       if (TREE_CODE (probe) == NOP_EXPR)
5756         {
5757           /* ??? Maybe we could use convert_from_reference here, but we
5758              would need to relax its constraints because the NOP_EXPR
5759              could actually change the type to something more cv-qualified,
5760              and this is not folded by convert_from_reference.  */
5761           tree addr = TREE_OPERAND (probe, 0);
5762           gcc_assert (TREE_CODE (probe_type) == REFERENCE_TYPE);
5763           gcc_assert (TREE_CODE (addr) == ADDR_EXPR);
5764           gcc_assert (TREE_CODE (TREE_TYPE (addr)) == POINTER_TYPE);
5765           gcc_assert (same_type_ignoring_top_level_qualifiers_p
5766                       (TREE_TYPE (probe_type),
5767                        TREE_TYPE (TREE_TYPE (addr))));
5768
5769           expr = TREE_OPERAND (addr, 0);
5770           expr_type = TREE_TYPE (expr);
5771         }
5772     }
5773
5774   /* We could also generate a NOP_EXPR(ADDR_EXPR()) when the
5775      parameter is a pointer to object, through decay and
5776      qualification conversion. Let's strip everything.  */
5777   else if (TREE_CODE (expr) == NOP_EXPR && TYPE_PTROBV_P (type))
5778     {
5779       STRIP_NOPS (expr);
5780       gcc_assert (TREE_CODE (expr) == ADDR_EXPR);
5781       gcc_assert (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE);
5782       /* Skip the ADDR_EXPR only if it is part of the decay for
5783          an array. Otherwise, it is part of the original argument
5784          in the source code.  */
5785       if (TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == ARRAY_TYPE)
5786         expr = TREE_OPERAND (expr, 0);
5787       expr_type = TREE_TYPE (expr);
5788     }
5789
5790   /* [temp.arg.nontype]/5, bullet 1
5791
5792      For a non-type template-parameter of integral or enumeration type,
5793      integral promotions (_conv.prom_) and integral conversions
5794      (_conv.integral_) are applied.  */
5795   if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
5796     {
5797       tree t = build_integral_nontype_arg_conv (type, expr, complain);
5798       t = maybe_constant_value (t);
5799       if (t != error_mark_node)
5800         expr = t;
5801
5802       if (!same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (expr)))
5803         return error_mark_node;
5804
5805       /* Notice that there are constant expressions like '4 % 0' which
5806          do not fold into integer constants.  */
5807       if (TREE_CODE (expr) != INTEGER_CST)
5808         {
5809           if (complain & tf_error)
5810             {
5811               int errs = errorcount, warns = warningcount;
5812               if (processing_template_decl
5813                   && !require_potential_constant_expression (expr))
5814                 return NULL_TREE;
5815               expr = cxx_constant_value (expr);
5816               if (errorcount > errs || warningcount > warns)
5817                 inform (EXPR_LOC_OR_HERE (expr),
5818                         "in template argument for type %qT ", type);
5819               if (expr == error_mark_node)
5820                 return NULL_TREE;
5821               /* else cxx_constant_value complained but gave us
5822                  a real constant, so go ahead.  */
5823               gcc_assert (TREE_CODE (expr) == INTEGER_CST);
5824             }
5825           else
5826             return NULL_TREE;
5827         }
5828     }
5829   /* [temp.arg.nontype]/5, bullet 2
5830
5831      For a non-type template-parameter of type pointer to object,
5832      qualification conversions (_conv.qual_) and the array-to-pointer
5833      conversion (_conv.array_) are applied.  */
5834   else if (TYPE_PTROBV_P (type))
5835     {
5836       /* [temp.arg.nontype]/1  (TC1 version, DR 49):
5837
5838          A template-argument for a non-type, non-template template-parameter
5839          shall be one of: [...]
5840
5841          -- the name of a non-type template-parameter;
5842          -- the address of an object or function with external linkage, [...]
5843             expressed as "& id-expression" where the & is optional if the name
5844             refers to a function or array, or if the corresponding
5845             template-parameter is a reference.
5846
5847         Here, we do not care about functions, as they are invalid anyway
5848         for a parameter of type pointer-to-object.  */
5849
5850       if (DECL_P (expr) && DECL_TEMPLATE_PARM_P (expr))
5851         /* Non-type template parameters are OK.  */
5852         ;
5853       else if (cxx_dialect >= cxx0x && integer_zerop (expr))
5854         /* Null pointer values are OK in C++11.  */;
5855       else if (TREE_CODE (expr) != ADDR_EXPR
5856                && TREE_CODE (expr_type) != ARRAY_TYPE)
5857         {
5858           if (TREE_CODE (expr) == VAR_DECL)
5859             {
5860               error ("%qD is not a valid template argument "
5861                      "because %qD is a variable, not the address of "
5862                      "a variable",
5863                      expr, expr);
5864               return NULL_TREE;
5865             }
5866           /* Other values, like integer constants, might be valid
5867              non-type arguments of some other type.  */
5868           return error_mark_node;
5869         }
5870       else
5871         {
5872           tree decl;
5873
5874           decl = ((TREE_CODE (expr) == ADDR_EXPR)
5875                   ? TREE_OPERAND (expr, 0) : expr);
5876           if (TREE_CODE (decl) != VAR_DECL)
5877             {
5878               error ("%qE is not a valid template argument of type %qT "
5879                      "because %qE is not a variable",
5880                      expr, type, decl);
5881               return NULL_TREE;
5882             }
5883           else if (cxx_dialect < cxx0x && !DECL_EXTERNAL_LINKAGE_P (decl))
5884             {
5885               error ("%qE is not a valid template argument of type %qT "
5886                      "because %qD does not have external linkage",
5887                      expr, type, decl);
5888               return NULL_TREE;
5889             }
5890           else if (cxx_dialect >= cxx0x && decl_linkage (decl) == lk_none)
5891             {
5892               error ("%qE is not a valid template argument of type %qT "
5893                      "because %qD has no linkage",
5894                      expr, type, decl);
5895               return NULL_TREE;
5896             }
5897         }
5898
5899       expr = decay_conversion (expr);
5900       if (expr == error_mark_node)
5901         return error_mark_node;
5902
5903       expr = perform_qualification_conversions (type, expr);
5904       if (expr == error_mark_node)
5905         return error_mark_node;
5906     }
5907   /* [temp.arg.nontype]/5, bullet 3
5908
5909      For a non-type template-parameter of type reference to object, no
5910      conversions apply. The type referred to by the reference may be more
5911      cv-qualified than the (otherwise identical) type of the
5912      template-argument. The template-parameter is bound directly to the
5913      template-argument, which must be an lvalue.  */
5914   else if (TYPE_REF_OBJ_P (type))
5915     {
5916       if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type),
5917                                                       expr_type))
5918         return error_mark_node;
5919
5920       if (!at_least_as_qualified_p (TREE_TYPE (type), expr_type))
5921         {
5922           error ("%qE is not a valid template argument for type %qT "
5923                  "because of conflicts in cv-qualification", expr, type);
5924           return NULL_TREE;
5925         }
5926
5927       if (!real_lvalue_p (expr))
5928         {
5929           error ("%qE is not a valid template argument for type %qT "
5930                  "because it is not an lvalue", expr, type);
5931           return NULL_TREE;
5932         }
5933
5934       /* [temp.arg.nontype]/1
5935
5936          A template-argument for a non-type, non-template template-parameter
5937          shall be one of: [...]
5938
5939          -- the address of an object or function with external linkage.  */
5940       if (TREE_CODE (expr) == INDIRECT_REF
5941           && TYPE_REF_OBJ_P (TREE_TYPE (TREE_OPERAND (expr, 0))))
5942         {
5943           expr = TREE_OPERAND (expr, 0);
5944           if (DECL_P (expr))
5945             {
5946               error ("%q#D is not a valid template argument for type %qT "
5947                      "because a reference variable does not have a constant "
5948                      "address", expr, type);
5949               return NULL_TREE;
5950             }
5951         }
5952
5953       if (!DECL_P (expr))
5954         {
5955           error ("%qE is not a valid template argument for type %qT "
5956                  "because it is not an object with external linkage",
5957                  expr, type);
5958           return NULL_TREE;
5959         }
5960
5961       if (!DECL_EXTERNAL_LINKAGE_P (expr))
5962         {
5963           error ("%qE is not a valid template argument for type %qT "
5964                  "because object %qD has not external linkage",
5965                  expr, type, expr);
5966           return NULL_TREE;
5967         }
5968
5969       expr = build_nop (type, build_address (expr));
5970     }
5971   /* [temp.arg.nontype]/5, bullet 4
5972
5973      For a non-type template-parameter of type pointer to function, only
5974      the function-to-pointer conversion (_conv.func_) is applied. If the
5975      template-argument represents a set of overloaded functions (or a
5976      pointer to such), the matching function is selected from the set
5977      (_over.over_).  */
5978   else if (TYPE_PTRFN_P (type))
5979     {
5980       /* If the argument is a template-id, we might not have enough
5981          context information to decay the pointer.  */
5982       if (!type_unknown_p (expr_type))
5983         {
5984           expr = decay_conversion (expr);
5985           if (expr == error_mark_node)
5986             return error_mark_node;
5987         }
5988
5989       if (cxx_dialect >= cxx0x && integer_zerop (expr))
5990         /* Null pointer values are OK in C++11.  */
5991         return perform_qualification_conversions (type, expr);
5992
5993       expr = convert_nontype_argument_function (type, expr);
5994       if (!expr || expr == error_mark_node)
5995         return expr;
5996
5997       if (TREE_CODE (expr) != ADDR_EXPR)
5998         {
5999           error ("%qE is not a valid template argument for type %qT", expr, type);
6000           error ("it must be the address of a function with external linkage");
6001           return NULL_TREE;
6002         }
6003     }
6004   /* [temp.arg.nontype]/5, bullet 5
6005
6006      For a non-type template-parameter of type reference to function, no
6007      conversions apply. If the template-argument represents a set of
6008      overloaded functions, the matching function is selected from the set
6009      (_over.over_).  */
6010   else if (TYPE_REFFN_P (type))
6011     {
6012       if (TREE_CODE (expr) == ADDR_EXPR)
6013         {
6014           error ("%qE is not a valid template argument for type %qT "
6015                  "because it is a pointer", expr, type);
6016           inform (input_location, "try using %qE instead", TREE_OPERAND (expr, 0));
6017           return NULL_TREE;
6018         }
6019
6020       expr = convert_nontype_argument_function (TREE_TYPE (type), expr);
6021       if (!expr || expr == error_mark_node)
6022         return expr;
6023
6024       expr = build_nop (type, build_address (expr));
6025     }
6026   /* [temp.arg.nontype]/5, bullet 6
6027
6028      For a non-type template-parameter of type pointer to member function,
6029      no conversions apply. If the template-argument represents a set of
6030      overloaded member functions, the matching member function is selected
6031      from the set (_over.over_).  */
6032   else if (TYPE_PTRMEMFUNC_P (type))
6033     {
6034       expr = instantiate_type (type, expr, tf_none);
6035       if (expr == error_mark_node)
6036         return error_mark_node;
6037
6038       /* [temp.arg.nontype] bullet 1 says the pointer to member
6039          expression must be a pointer-to-member constant.  */
6040       if (!check_valid_ptrmem_cst_expr (type, expr, complain))
6041         return error_mark_node;
6042
6043       /* There is no way to disable standard conversions in
6044          resolve_address_of_overloaded_function (called by
6045          instantiate_type). It is possible that the call succeeded by
6046          converting &B::I to &D::I (where B is a base of D), so we need
6047          to reject this conversion here.
6048
6049          Actually, even if there was a way to disable standard conversions,
6050          it would still be better to reject them here so that we can
6051          provide a superior diagnostic.  */
6052       if (!same_type_p (TREE_TYPE (expr), type))
6053         {
6054           error ("%qE is not a valid template argument for type %qT "
6055                  "because it is of type %qT", expr, type,
6056                  TREE_TYPE (expr));
6057           /* If we are just one standard conversion off, explain.  */
6058           if (can_convert (type, TREE_TYPE (expr)))
6059             inform (input_location,
6060                     "standard conversions are not allowed in this context");
6061           return NULL_TREE;
6062         }
6063     }
6064   /* [temp.arg.nontype]/5, bullet 7
6065
6066      For a non-type template-parameter of type pointer to data member,
6067      qualification conversions (_conv.qual_) are applied.  */
6068   else if (TYPE_PTRMEM_P (type))
6069     {
6070       /* [temp.arg.nontype] bullet 1 says the pointer to member
6071          expression must be a pointer-to-member constant.  */
6072       if (!check_valid_ptrmem_cst_expr (type, expr, complain))
6073         return error_mark_node;
6074
6075       expr = perform_qualification_conversions (type, expr);
6076       if (expr == error_mark_node)
6077         return expr;
6078     }
6079   else if (NULLPTR_TYPE_P (type))
6080     {
6081       if (expr != nullptr_node)
6082         {
6083           error ("%qE is not a valid template argument for type %qT "
6084                  "because it is of type %qT", expr, type, TREE_TYPE (expr));
6085           return NULL_TREE;
6086         }
6087       return expr;
6088     }
6089   /* A template non-type parameter must be one of the above.  */
6090   else
6091     gcc_unreachable ();
6092
6093   /* Sanity check: did we actually convert the argument to the
6094      right type?  */
6095   gcc_assert (same_type_ignoring_top_level_qualifiers_p
6096               (type, TREE_TYPE (expr)));
6097   return expr;
6098 }
6099
6100 /* Subroutine of coerce_template_template_parms, which returns 1 if
6101    PARM_PARM and ARG_PARM match using the rule for the template
6102    parameters of template template parameters. Both PARM and ARG are
6103    template parameters; the rest of the arguments are the same as for
6104    coerce_template_template_parms.
6105  */
6106 static int
6107 coerce_template_template_parm (tree parm,
6108                               tree arg,
6109                               tsubst_flags_t complain,
6110                               tree in_decl,
6111                               tree outer_args)
6112 {
6113   if (arg == NULL_TREE || arg == error_mark_node
6114       || parm == NULL_TREE || parm == error_mark_node)
6115     return 0;
6116   
6117   if (TREE_CODE (arg) != TREE_CODE (parm))
6118     return 0;
6119   
6120   switch (TREE_CODE (parm))
6121     {
6122     case TEMPLATE_DECL:
6123       /* We encounter instantiations of templates like
6124          template <template <template <class> class> class TT>
6125          class C;  */
6126       {
6127         tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
6128         tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
6129         
6130         if (!coerce_template_template_parms
6131             (parmparm, argparm, complain, in_decl, outer_args))
6132           return 0;
6133       }
6134       /* Fall through.  */
6135       
6136     case TYPE_DECL:
6137       if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (arg))
6138           && !TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
6139         /* Argument is a parameter pack but parameter is not.  */
6140         return 0;
6141       break;
6142       
6143     case PARM_DECL:
6144       /* The tsubst call is used to handle cases such as
6145          
6146            template <int> class C {};
6147            template <class T, template <T> class TT> class D {};
6148            D<int, C> d;
6149
6150          i.e. the parameter list of TT depends on earlier parameters.  */
6151       if (!uses_template_parms (TREE_TYPE (arg))
6152           && !same_type_p
6153                 (tsubst (TREE_TYPE (parm), outer_args, complain, in_decl),
6154                  TREE_TYPE (arg)))
6155         return 0;
6156       
6157       if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (arg))
6158           && !TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
6159         /* Argument is a parameter pack but parameter is not.  */
6160         return 0;
6161       
6162       break;
6163
6164     default:
6165       gcc_unreachable ();
6166     }
6167
6168   return 1;
6169 }
6170
6171
6172 /* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
6173    template template parameters.  Both PARM_PARMS and ARG_PARMS are
6174    vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
6175    or PARM_DECL.
6176
6177    Consider the example:
6178      template <class T> class A;
6179      template<template <class U> class TT> class B;
6180
6181    For B<A>, PARM_PARMS are the parameters to TT, while ARG_PARMS are
6182    the parameters to A, and OUTER_ARGS contains A.  */
6183
6184 static int
6185 coerce_template_template_parms (tree parm_parms,
6186                                 tree arg_parms,
6187                                 tsubst_flags_t complain,
6188                                 tree in_decl,
6189                                 tree outer_args)
6190 {
6191   int nparms, nargs, i;
6192   tree parm, arg;
6193   int variadic_p = 0;
6194
6195   gcc_assert (TREE_CODE (parm_parms) == TREE_VEC);
6196   gcc_assert (TREE_CODE (arg_parms) == TREE_VEC);
6197
6198   nparms = TREE_VEC_LENGTH (parm_parms);
6199   nargs = TREE_VEC_LENGTH (arg_parms);
6200
6201   /* Determine whether we have a parameter pack at the end of the
6202      template template parameter's template parameter list.  */
6203   if (TREE_VEC_ELT (parm_parms, nparms - 1) != error_mark_node)
6204     {
6205       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, nparms - 1));
6206       
6207       if (parm == error_mark_node)
6208         return 0;
6209
6210       switch (TREE_CODE (parm))
6211         {
6212         case TEMPLATE_DECL:
6213         case TYPE_DECL:
6214           if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
6215             variadic_p = 1;
6216           break;
6217           
6218         case PARM_DECL:
6219           if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
6220             variadic_p = 1;
6221           break;
6222           
6223         default:
6224           gcc_unreachable ();
6225         }
6226     }
6227  
6228   if (nargs != nparms
6229       && !(variadic_p && nargs >= nparms - 1))
6230     return 0;
6231
6232   /* Check all of the template parameters except the parameter pack at
6233      the end (if any).  */
6234   for (i = 0; i < nparms - variadic_p; ++i)
6235     {
6236       if (TREE_VEC_ELT (parm_parms, i) == error_mark_node
6237           || TREE_VEC_ELT (arg_parms, i) == error_mark_node)
6238         continue;
6239
6240       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
6241       arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
6242
6243       if (!coerce_template_template_parm (parm, arg, complain, in_decl,
6244                                           outer_args))
6245         return 0;
6246
6247     }
6248
6249   if (variadic_p)
6250     {
6251       /* Check each of the template parameters in the template
6252          argument against the template parameter pack at the end of
6253          the template template parameter.  */
6254       if (TREE_VEC_ELT (parm_parms, i) == error_mark_node)
6255         return 0;
6256
6257       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
6258
6259       for (; i < nargs; ++i)
6260         {
6261           if (TREE_VEC_ELT (arg_parms, i) == error_mark_node)
6262             continue;
6263  
6264           arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
6265  
6266           if (!coerce_template_template_parm (parm, arg, complain, in_decl,
6267                                               outer_args))
6268             return 0;
6269         }
6270     }
6271
6272   return 1;
6273 }
6274
6275 /* Verifies that the deduced template arguments (in TARGS) for the
6276    template template parameters (in TPARMS) represent valid bindings,
6277    by comparing the template parameter list of each template argument
6278    to the template parameter list of its corresponding template
6279    template parameter, in accordance with DR150. This
6280    routine can only be called after all template arguments have been
6281    deduced. It will return TRUE if all of the template template
6282    parameter bindings are okay, FALSE otherwise.  */
6283 bool 
6284 template_template_parm_bindings_ok_p (tree tparms, tree targs)
6285 {
6286   int i, ntparms = TREE_VEC_LENGTH (tparms);
6287   bool ret = true;
6288
6289   /* We're dealing with template parms in this process.  */
6290   ++processing_template_decl;
6291
6292   targs = INNERMOST_TEMPLATE_ARGS (targs);
6293
6294   for (i = 0; i < ntparms; ++i)
6295     {
6296       tree tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
6297       tree targ = TREE_VEC_ELT (targs, i);
6298
6299       if (TREE_CODE (tparm) == TEMPLATE_DECL && targ)
6300         {
6301           tree packed_args = NULL_TREE;
6302           int idx, len = 1;
6303
6304           if (ARGUMENT_PACK_P (targ))
6305             {
6306               /* Look inside the argument pack.  */
6307               packed_args = ARGUMENT_PACK_ARGS (targ);
6308               len = TREE_VEC_LENGTH (packed_args);
6309             }
6310
6311           for (idx = 0; idx < len; ++idx)
6312             {
6313               tree targ_parms = NULL_TREE;
6314
6315               if (packed_args)
6316                 /* Extract the next argument from the argument
6317                    pack.  */
6318                 targ = TREE_VEC_ELT (packed_args, idx);
6319
6320               if (PACK_EXPANSION_P (targ))
6321                 /* Look at the pattern of the pack expansion.  */
6322                 targ = PACK_EXPANSION_PATTERN (targ);
6323
6324               /* Extract the template parameters from the template
6325                  argument.  */
6326               if (TREE_CODE (targ) == TEMPLATE_DECL)
6327                 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (targ);
6328               else if (TREE_CODE (targ) == TEMPLATE_TEMPLATE_PARM)
6329                 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_NAME (targ));
6330
6331               /* Verify that we can coerce the template template
6332                  parameters from the template argument to the template
6333                  parameter.  This requires an exact match.  */
6334               if (targ_parms
6335                   && !coerce_template_template_parms
6336                        (DECL_INNERMOST_TEMPLATE_PARMS (tparm),
6337                         targ_parms,
6338                         tf_none,
6339                         tparm,
6340                         targs))
6341                 {
6342                   ret = false;
6343                   goto out;
6344                 }
6345             }
6346         }
6347     }
6348
6349  out:
6350
6351   --processing_template_decl;
6352   return ret;
6353 }
6354
6355 /* Since type attributes aren't mangled, we need to strip them from
6356    template type arguments.  */
6357
6358 static tree
6359 canonicalize_type_argument (tree arg, tsubst_flags_t complain)
6360 {
6361   tree mv;
6362   if (!arg || arg == error_mark_node || arg == TYPE_CANONICAL (arg))
6363     return arg;
6364   mv = TYPE_MAIN_VARIANT (arg);
6365   arg = strip_typedefs (arg);
6366   if (TYPE_ALIGN (arg) != TYPE_ALIGN (mv)
6367       || TYPE_ATTRIBUTES (arg) != TYPE_ATTRIBUTES (mv))
6368     {
6369       if (complain & tf_warning)
6370         warning (0, "ignoring attributes on template argument %qT", arg);
6371       arg = build_aligned_type (arg, TYPE_ALIGN (mv));
6372       arg = cp_build_type_attribute_variant (arg, TYPE_ATTRIBUTES (mv));
6373     }
6374   return arg;
6375 }
6376
6377 /* Convert the indicated template ARG as necessary to match the
6378    indicated template PARM.  Returns the converted ARG, or
6379    error_mark_node if the conversion was unsuccessful.  Error and
6380    warning messages are issued under control of COMPLAIN.  This
6381    conversion is for the Ith parameter in the parameter list.  ARGS is
6382    the full set of template arguments deduced so far.  */
6383
6384 static tree
6385 convert_template_argument (tree parm,
6386                            tree arg,
6387                            tree args,
6388                            tsubst_flags_t complain,
6389                            int i,
6390                            tree in_decl)
6391 {
6392   tree orig_arg;
6393   tree val;
6394   int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
6395
6396   if (TREE_CODE (arg) == TREE_LIST
6397       && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
6398     {
6399       /* The template argument was the name of some
6400          member function.  That's usually
6401          invalid, but static members are OK.  In any
6402          case, grab the underlying fields/functions
6403          and issue an error later if required.  */
6404       orig_arg = TREE_VALUE (arg);
6405       TREE_TYPE (arg) = unknown_type_node;
6406     }
6407
6408   orig_arg = arg;
6409
6410   requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
6411   requires_type = (TREE_CODE (parm) == TYPE_DECL
6412                    || requires_tmpl_type);
6413
6414   /* When determining whether an argument pack expansion is a template,
6415      look at the pattern.  */
6416   if (TREE_CODE (arg) == TYPE_PACK_EXPANSION)
6417     arg = PACK_EXPANSION_PATTERN (arg);
6418
6419   /* Deal with an injected-class-name used as a template template arg.  */
6420   if (requires_tmpl_type && CLASS_TYPE_P (arg))
6421     {
6422       tree t = maybe_get_template_decl_from_type_decl (TYPE_NAME (arg));
6423       if (TREE_CODE (t) == TEMPLATE_DECL)
6424         {
6425           if (cxx_dialect >= cxx0x)
6426             /* OK under DR 1004.  */;
6427           else if (complain & tf_warning_or_error)
6428             pedwarn (input_location, OPT_pedantic, "injected-class-name %qD"
6429                      " used as template template argument", TYPE_NAME (arg));
6430           else if (flag_pedantic_errors)
6431             t = arg;
6432
6433           arg = t;
6434         }
6435     }
6436
6437   is_tmpl_type = 
6438     ((TREE_CODE (arg) == TEMPLATE_DECL
6439       && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
6440      || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
6441      || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
6442
6443   if (is_tmpl_type
6444       && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
6445           || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
6446     arg = TYPE_STUB_DECL (arg);
6447
6448   is_type = TYPE_P (arg) || is_tmpl_type;
6449
6450   if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
6451       && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
6452     {
6453       if (TREE_CODE (TREE_OPERAND (arg, 1)) == BIT_NOT_EXPR)
6454         {
6455           if (complain & tf_error)
6456             error ("invalid use of destructor %qE as a type", orig_arg);
6457           return error_mark_node;
6458         }
6459
6460       permerror (input_location,
6461                  "to refer to a type member of a template parameter, "
6462                  "use %<typename %E%>", orig_arg);
6463
6464       orig_arg = make_typename_type (TREE_OPERAND (arg, 0),
6465                                      TREE_OPERAND (arg, 1),
6466                                      typename_type,
6467                                      complain & tf_error);
6468       arg = orig_arg;
6469       is_type = 1;
6470     }
6471   if (is_type != requires_type)
6472     {
6473       if (in_decl)
6474         {
6475           if (complain & tf_error)
6476             {
6477               error ("type/value mismatch at argument %d in template "
6478                      "parameter list for %qD",
6479                      i + 1, in_decl);
6480               if (is_type)
6481                 error ("  expected a constant of type %qT, got %qT",
6482                        TREE_TYPE (parm),
6483                        (DECL_P (arg) ? DECL_NAME (arg) : orig_arg));
6484               else if (requires_tmpl_type)
6485                 error ("  expected a class template, got %qE", orig_arg);
6486               else
6487                 error ("  expected a type, got %qE", orig_arg);
6488             }
6489         }
6490       return error_mark_node;
6491     }
6492   if (is_tmpl_type ^ requires_tmpl_type)
6493     {
6494       if (in_decl && (complain & tf_error))
6495         {
6496           error ("type/value mismatch at argument %d in template "
6497                  "parameter list for %qD",
6498                  i + 1, in_decl);
6499           if (is_tmpl_type)
6500             error ("  expected a type, got %qT", DECL_NAME (arg));
6501           else
6502             error ("  expected a class template, got %qT", orig_arg);
6503         }
6504       return error_mark_node;
6505     }
6506
6507   if (is_type)
6508     {
6509       if (requires_tmpl_type)
6510         {
6511           if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
6512             /* The number of argument required is not known yet.
6513                Just accept it for now.  */
6514             val = TREE_TYPE (arg);
6515           else
6516             {
6517               tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
6518               tree argparm;
6519
6520               argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
6521
6522               if (coerce_template_template_parms (parmparm, argparm,
6523                                                   complain, in_decl,
6524                                                   args))
6525                 {
6526                   val = arg;
6527
6528                   /* TEMPLATE_TEMPLATE_PARM node is preferred over
6529                      TEMPLATE_DECL.  */
6530                   if (val != error_mark_node)
6531                     {
6532                       if (DECL_TEMPLATE_TEMPLATE_PARM_P (val))
6533                         val = TREE_TYPE (val);
6534                       if (TREE_CODE (orig_arg) == TYPE_PACK_EXPANSION)
6535                         val = make_pack_expansion (val);
6536                     }
6537                 }
6538               else
6539                 {
6540                   if (in_decl && (complain & tf_error))
6541                     {
6542                       error ("type/value mismatch at argument %d in "
6543                              "template parameter list for %qD",
6544                              i + 1, in_decl);
6545                       error ("  expected a template of type %qD, got %qT",
6546                              parm, orig_arg);
6547                     }
6548
6549                   val = error_mark_node;
6550                 }
6551             }
6552         }
6553       else
6554         val = orig_arg;
6555       /* We only form one instance of each template specialization.
6556          Therefore, if we use a non-canonical variant (i.e., a
6557          typedef), any future messages referring to the type will use
6558          the typedef, which is confusing if those future uses do not
6559          themselves also use the typedef.  */
6560       if (TYPE_P (val))
6561         val = canonicalize_type_argument (val, complain);
6562     }
6563   else
6564     {
6565       tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
6566
6567       if (invalid_nontype_parm_type_p (t, complain))
6568         return error_mark_node;
6569
6570       if (template_parameter_pack_p (parm) && ARGUMENT_PACK_P (orig_arg))
6571         {
6572           if (same_type_p (t, TREE_TYPE (orig_arg)))
6573             val = orig_arg;
6574           else
6575             {
6576               /* Not sure if this is reachable, but it doesn't hurt
6577                  to be robust.  */
6578               error ("type mismatch in nontype parameter pack");
6579               val = error_mark_node;
6580             }
6581         }
6582       else if (!uses_template_parms (orig_arg) && !uses_template_parms (t))
6583         /* We used to call digest_init here.  However, digest_init
6584            will report errors, which we don't want when complain
6585            is zero.  More importantly, digest_init will try too
6586            hard to convert things: for example, `0' should not be
6587            converted to pointer type at this point according to
6588            the standard.  Accepting this is not merely an
6589            extension, since deciding whether or not these
6590            conversions can occur is part of determining which
6591            function template to call, or whether a given explicit
6592            argument specification is valid.  */
6593         val = convert_nontype_argument (t, orig_arg, complain);
6594       else
6595         val = orig_arg;
6596
6597       if (val == NULL_TREE)
6598         val = error_mark_node;
6599       else if (val == error_mark_node && (complain & tf_error))
6600         error ("could not convert template argument %qE to %qT",  orig_arg, t);
6601
6602       if (TREE_CODE (val) == SCOPE_REF)
6603         {
6604           /* Strip typedefs from the SCOPE_REF.  */
6605           tree type = canonicalize_type_argument (TREE_TYPE (val), complain);
6606           tree scope = canonicalize_type_argument (TREE_OPERAND (val, 0),
6607                                                    complain);
6608           val = build_qualified_name (type, scope, TREE_OPERAND (val, 1),
6609                                       QUALIFIED_NAME_IS_TEMPLATE (val));
6610         }
6611     }
6612
6613   return val;
6614 }
6615
6616 /* Coerces the remaining template arguments in INNER_ARGS (from
6617    ARG_IDX to the end) into the parameter pack at PARM_IDX in PARMS.
6618    Returns the coerced argument pack. PARM_IDX is the position of this
6619    parameter in the template parameter list. ARGS is the original
6620    template argument list.  */
6621 static tree
6622 coerce_template_parameter_pack (tree parms,
6623                                 int parm_idx,
6624                                 tree args,
6625                                 tree inner_args,
6626                                 int arg_idx,
6627                                 tree new_args,
6628                                 int* lost,
6629                                 tree in_decl,
6630                                 tsubst_flags_t complain)
6631 {
6632   tree parm = TREE_VEC_ELT (parms, parm_idx);
6633   int nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
6634   tree packed_args;
6635   tree argument_pack;
6636   tree packed_types = NULL_TREE;
6637
6638   if (arg_idx > nargs)
6639     arg_idx = nargs;
6640
6641   packed_args = make_tree_vec (nargs - arg_idx);
6642
6643   if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL
6644       && uses_parameter_packs (TREE_TYPE (TREE_VALUE (parm))))
6645     {
6646       /* When the template parameter is a non-type template
6647          parameter pack whose type uses parameter packs, we need
6648          to look at each of the template arguments
6649          separately. Build a vector of the types for these
6650          non-type template parameters in PACKED_TYPES.  */
6651       tree expansion 
6652         = make_pack_expansion (TREE_TYPE (TREE_VALUE (parm)));
6653       packed_types = tsubst_pack_expansion (expansion, args,
6654                                             complain, in_decl);
6655
6656       if (packed_types == error_mark_node)
6657         return error_mark_node;
6658
6659       /* Check that we have the right number of arguments.  */
6660       if (arg_idx < nargs
6661           && !PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx))
6662           && nargs - arg_idx != TREE_VEC_LENGTH (packed_types))
6663         {
6664           int needed_parms 
6665             = TREE_VEC_LENGTH (parms) - 1 + TREE_VEC_LENGTH (packed_types);
6666           error ("wrong number of template arguments (%d, should be %d)",
6667                  nargs, needed_parms);
6668           return error_mark_node;
6669         }
6670
6671       /* If we aren't able to check the actual arguments now
6672          (because they haven't been expanded yet), we can at least
6673          verify that all of the types used for the non-type
6674          template parameter pack are, in fact, valid for non-type
6675          template parameters.  */
6676       if (arg_idx < nargs 
6677           && PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx)))
6678         {
6679           int j, len = TREE_VEC_LENGTH (packed_types);
6680           for (j = 0; j < len; ++j)
6681             {
6682               tree t = TREE_VEC_ELT (packed_types, j);
6683               if (invalid_nontype_parm_type_p (t, complain))
6684                 return error_mark_node;
6685             }
6686         }
6687     }
6688
6689   /* Convert the remaining arguments, which will be a part of the
6690      parameter pack "parm".  */
6691   for (; arg_idx < nargs; ++arg_idx)
6692     {
6693       tree arg = TREE_VEC_ELT (inner_args, arg_idx);
6694       tree actual_parm = TREE_VALUE (parm);
6695
6696       if (packed_types && !PACK_EXPANSION_P (arg))
6697         {
6698           /* When we have a vector of types (corresponding to the
6699              non-type template parameter pack that uses parameter
6700              packs in its type, as mention above), and the
6701              argument is not an expansion (which expands to a
6702              currently unknown number of arguments), clone the
6703              parm and give it the next type in PACKED_TYPES.  */
6704           actual_parm = copy_node (actual_parm);
6705           TREE_TYPE (actual_parm) = 
6706             TREE_VEC_ELT (packed_types, arg_idx - parm_idx);
6707         }
6708
6709       if (arg != error_mark_node)
6710         arg = convert_template_argument (actual_parm, 
6711                                          arg, new_args, complain, parm_idx,
6712                                          in_decl);
6713       if (arg == error_mark_node)
6714         (*lost)++;
6715       TREE_VEC_ELT (packed_args, arg_idx - parm_idx) = arg; 
6716     }
6717
6718   if (TREE_CODE (TREE_VALUE (parm)) == TYPE_DECL
6719       || TREE_CODE (TREE_VALUE (parm)) == TEMPLATE_DECL)
6720     argument_pack = cxx_make_type (TYPE_ARGUMENT_PACK);
6721   else
6722     {
6723       argument_pack = make_node (NONTYPE_ARGUMENT_PACK);
6724       TREE_TYPE (argument_pack) 
6725         = tsubst (TREE_TYPE (TREE_VALUE (parm)), new_args, complain, in_decl);
6726       TREE_CONSTANT (argument_pack) = 1;
6727     }
6728
6729   SET_ARGUMENT_PACK_ARGS (argument_pack, packed_args);
6730 #ifdef ENABLE_CHECKING
6731   SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (packed_args,
6732                                        TREE_VEC_LENGTH (packed_args));
6733 #endif
6734   return argument_pack;
6735 }
6736
6737 /* Returns true if the template argument vector ARGS contains
6738    any pack expansions, false otherwise.  */
6739
6740 static bool
6741 any_pack_expanson_args_p (tree args)
6742 {
6743   int i;
6744   if (args)
6745     for (i = 0; i < TREE_VEC_LENGTH (args); ++i)
6746       if (PACK_EXPANSION_P (TREE_VEC_ELT (args, i)))
6747         return true;
6748   return false;
6749 }
6750
6751 /* Convert all template arguments to their appropriate types, and
6752    return a vector containing the innermost resulting template
6753    arguments.  If any error occurs, return error_mark_node. Error and
6754    warning messages are issued under control of COMPLAIN.
6755
6756    If REQUIRE_ALL_ARGS is false, argument deduction will be performed
6757    for arguments not specified in ARGS.  Otherwise, if
6758    USE_DEFAULT_ARGS is true, default arguments will be used to fill in
6759    unspecified arguments.  If REQUIRE_ALL_ARGS is true, but
6760    USE_DEFAULT_ARGS is false, then all arguments must be specified in
6761    ARGS.  */
6762
6763 static tree
6764 coerce_template_parms (tree parms,
6765                        tree args,
6766                        tree in_decl,
6767                        tsubst_flags_t complain,
6768                        bool require_all_args,
6769                        bool use_default_args)
6770 {
6771   int nparms, nargs, parm_idx, arg_idx, lost = 0;
6772   tree inner_args;
6773   tree new_args;
6774   tree new_inner_args;
6775   int saved_unevaluated_operand;
6776   int saved_inhibit_evaluation_warnings;
6777
6778   /* When used as a boolean value, indicates whether this is a
6779      variadic template parameter list. Since it's an int, we can also
6780      subtract it from nparms to get the number of non-variadic
6781      parameters.  */
6782   int variadic_p = 0;
6783   int post_variadic_parms = 0;
6784
6785   if (args == error_mark_node)
6786     return error_mark_node;
6787
6788   nparms = TREE_VEC_LENGTH (parms);
6789
6790   /* Determine if there are any parameter packs.  */
6791   for (parm_idx = 0; parm_idx < nparms; ++parm_idx)
6792     {
6793       tree tparm = TREE_VALUE (TREE_VEC_ELT (parms, parm_idx));
6794       if (variadic_p)
6795         ++post_variadic_parms;
6796       if (template_parameter_pack_p (tparm))
6797         ++variadic_p;
6798     }
6799
6800   inner_args = INNERMOST_TEMPLATE_ARGS (args);
6801   /* If there are no parameters that follow a parameter pack, we need to
6802      expand any argument packs so that we can deduce a parameter pack from
6803      some non-packed args followed by an argument pack, as in variadic85.C.
6804      If there are such parameters, we need to leave argument packs intact
6805      so the arguments are assigned properly.  This can happen when dealing
6806      with a nested class inside a partial specialization of a class
6807      template, as in variadic92.C, or when deducing a template parameter pack
6808      from a sub-declarator, as in variadic114.C.  */
6809   if (!post_variadic_parms)
6810     inner_args = expand_template_argument_pack (inner_args);
6811
6812   nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
6813   if ((nargs > nparms && !variadic_p)
6814       || (nargs < nparms - variadic_p
6815           && require_all_args
6816           && !any_pack_expanson_args_p (inner_args)
6817           && (!use_default_args
6818               || (TREE_VEC_ELT (parms, nargs) != error_mark_node
6819                   && !TREE_PURPOSE (TREE_VEC_ELT (parms, nargs))))))
6820     {
6821       if (complain & tf_error)
6822         {
6823           if (variadic_p)
6824             {
6825               nparms -= variadic_p;
6826               error ("wrong number of template arguments "
6827                      "(%d, should be %d or more)", nargs, nparms);
6828             }
6829           else
6830              error ("wrong number of template arguments "
6831                     "(%d, should be %d)", nargs, nparms);
6832
6833           if (in_decl)
6834             error ("provided for %q+D", in_decl);
6835         }
6836
6837       return error_mark_node;
6838     }
6839
6840   /* We need to evaluate the template arguments, even though this
6841      template-id may be nested within a "sizeof".  */
6842   saved_unevaluated_operand = cp_unevaluated_operand;
6843   cp_unevaluated_operand = 0;
6844   saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
6845   c_inhibit_evaluation_warnings = 0;
6846   new_inner_args = make_tree_vec (nparms);
6847   new_args = add_outermost_template_args (args, new_inner_args);
6848   for (parm_idx = 0, arg_idx = 0; parm_idx < nparms; parm_idx++, arg_idx++)
6849     {
6850       tree arg;
6851       tree parm;
6852
6853       /* Get the Ith template parameter.  */
6854       parm = TREE_VEC_ELT (parms, parm_idx);
6855  
6856       if (parm == error_mark_node)
6857       {
6858         TREE_VEC_ELT (new_inner_args, arg_idx) = error_mark_node;
6859         continue;
6860       }
6861
6862       /* Calculate the next argument.  */
6863       if (arg_idx < nargs)
6864         arg = TREE_VEC_ELT (inner_args, arg_idx);
6865       else
6866         arg = NULL_TREE;
6867
6868       if (template_parameter_pack_p (TREE_VALUE (parm))
6869           && !(arg && ARGUMENT_PACK_P (arg)))
6870         {
6871           /* All remaining arguments will be placed in the
6872              template parameter pack PARM.  */
6873           arg = coerce_template_parameter_pack (parms, parm_idx, args, 
6874                                                 inner_args, arg_idx,
6875                                                 new_args, &lost,
6876                                                 in_decl, complain);
6877
6878           /* Store this argument.  */
6879           if (arg == error_mark_node)
6880             lost++;
6881           TREE_VEC_ELT (new_inner_args, parm_idx) = arg;
6882
6883           /* We are done with all of the arguments.  */
6884           arg_idx = nargs;
6885           
6886           continue;
6887         }
6888       else if (arg)
6889         {
6890           if (PACK_EXPANSION_P (arg))
6891             {
6892               /* We don't know how many args we have yet, just
6893                  use the unconverted ones for now.  */
6894               new_inner_args = inner_args;
6895               break;
6896             }
6897         }
6898       else if (require_all_args)
6899         {
6900           /* There must be a default arg in this case.  */
6901           arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
6902                                      complain, in_decl);
6903           /* The position of the first default template argument,
6904              is also the number of non-defaulted arguments in NEW_INNER_ARGS.
6905              Record that.  */
6906           if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args))
6907             SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args, arg_idx);
6908         }
6909       else
6910         break;
6911
6912       if (arg == error_mark_node)
6913         {
6914           if (complain & tf_error)
6915             error ("template argument %d is invalid", arg_idx + 1);
6916         }
6917       else if (!arg)
6918         /* This only occurs if there was an error in the template
6919            parameter list itself (which we would already have
6920            reported) that we are trying to recover from, e.g., a class
6921            template with a parameter list such as
6922            template<typename..., typename>.  */
6923         ++lost;
6924       else
6925         arg = convert_template_argument (TREE_VALUE (parm),
6926                                          arg, new_args, complain, 
6927                                          parm_idx, in_decl);
6928
6929       if (arg == error_mark_node)
6930         lost++;
6931       TREE_VEC_ELT (new_inner_args, arg_idx) = arg;
6932     }
6933   cp_unevaluated_operand = saved_unevaluated_operand;
6934   c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
6935
6936   if (lost)
6937     return error_mark_node;
6938
6939 #ifdef ENABLE_CHECKING
6940   if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args))
6941     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args,
6942                                          TREE_VEC_LENGTH (new_inner_args));
6943 #endif
6944
6945   return new_inner_args;
6946 }
6947
6948 /* Returns 1 if template args OT and NT are equivalent.  */
6949
6950 static int
6951 template_args_equal (tree ot, tree nt)
6952 {
6953   if (nt == ot)
6954     return 1;
6955   if (nt == NULL_TREE || ot == NULL_TREE)
6956     return false;
6957
6958   if (TREE_CODE (nt) == TREE_VEC)
6959     /* For member templates */
6960     return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
6961   else if (PACK_EXPANSION_P (ot))
6962     return (PACK_EXPANSION_P (nt)
6963             && template_args_equal (PACK_EXPANSION_PATTERN (ot),
6964                                     PACK_EXPANSION_PATTERN (nt))
6965             && template_args_equal (PACK_EXPANSION_EXTRA_ARGS (ot),
6966                                     PACK_EXPANSION_EXTRA_ARGS (nt)));
6967   else if (ARGUMENT_PACK_P (ot))
6968     {
6969       int i, len;
6970       tree opack, npack;
6971
6972       if (!ARGUMENT_PACK_P (nt))
6973         return 0;
6974
6975       opack = ARGUMENT_PACK_ARGS (ot);
6976       npack = ARGUMENT_PACK_ARGS (nt);
6977       len = TREE_VEC_LENGTH (opack);
6978       if (TREE_VEC_LENGTH (npack) != len)
6979         return 0;
6980       for (i = 0; i < len; ++i)
6981         if (!template_args_equal (TREE_VEC_ELT (opack, i),
6982                                   TREE_VEC_ELT (npack, i)))
6983           return 0;
6984       return 1;
6985     }
6986   else if (ot && TREE_CODE (ot) == ARGUMENT_PACK_SELECT)
6987     {
6988       /* We get here probably because we are in the middle of substituting
6989          into the pattern of a pack expansion. In that case the
6990          ARGUMENT_PACK_SELECT temporarily replaces the pack argument we are
6991          interested in. So we want to use the initial pack argument for
6992          the comparison.  */
6993       ot = ARGUMENT_PACK_SELECT_FROM_PACK (ot);
6994       if (nt && TREE_CODE (nt) == ARGUMENT_PACK_SELECT)
6995         nt = ARGUMENT_PACK_SELECT_FROM_PACK (nt);
6996       return template_args_equal (ot, nt);
6997     }
6998   else if (TYPE_P (nt))
6999     return TYPE_P (ot) && same_type_p (ot, nt);
7000   else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
7001     return 0;
7002   else
7003     return cp_tree_equal (ot, nt);
7004 }
7005
7006 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets of
7007    template arguments.  Returns 0 otherwise, and updates OLDARG_PTR and
7008    NEWARG_PTR with the offending arguments if they are non-NULL.  */
7009
7010 static int
7011 comp_template_args_with_info (tree oldargs, tree newargs,
7012                               tree *oldarg_ptr, tree *newarg_ptr)
7013 {
7014   int i;
7015
7016   if (oldargs == newargs)
7017     return 1;
7018
7019   if (!oldargs || !newargs)
7020     return 0;
7021
7022   if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
7023     return 0;
7024
7025   for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
7026     {
7027       tree nt = TREE_VEC_ELT (newargs, i);
7028       tree ot = TREE_VEC_ELT (oldargs, i);
7029
7030       if (! template_args_equal (ot, nt))
7031         {
7032           if (oldarg_ptr != NULL)
7033             *oldarg_ptr = ot;
7034           if (newarg_ptr != NULL)
7035             *newarg_ptr = nt;
7036           return 0;
7037         }
7038     }
7039   return 1;
7040 }
7041
7042 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
7043    of template arguments.  Returns 0 otherwise.  */
7044
7045 int
7046 comp_template_args (tree oldargs, tree newargs)
7047 {
7048   return comp_template_args_with_info (oldargs, newargs, NULL, NULL);
7049 }
7050
7051 static void
7052 add_pending_template (tree d)
7053 {
7054   tree ti = (TYPE_P (d)
7055              ? CLASSTYPE_TEMPLATE_INFO (d)
7056              : DECL_TEMPLATE_INFO (d));
7057   struct pending_template *pt;
7058   int level;
7059
7060   if (TI_PENDING_TEMPLATE_FLAG (ti))
7061     return;
7062
7063   /* We are called both from instantiate_decl, where we've already had a
7064      tinst_level pushed, and instantiate_template, where we haven't.
7065      Compensate.  */
7066   level = !current_tinst_level || current_tinst_level->decl != d;
7067
7068   if (level)
7069     push_tinst_level (d);
7070
7071   pt = ggc_alloc_pending_template ();
7072   pt->next = NULL;
7073   pt->tinst = current_tinst_level;
7074   if (last_pending_template)
7075     last_pending_template->next = pt;
7076   else
7077     pending_templates = pt;
7078
7079   last_pending_template = pt;
7080
7081   TI_PENDING_TEMPLATE_FLAG (ti) = 1;
7082
7083   if (level)
7084     pop_tinst_level ();
7085 }
7086
7087
7088 /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
7089    ARGLIST.  Valid choices for FNS are given in the cp-tree.def
7090    documentation for TEMPLATE_ID_EXPR.  */
7091
7092 tree
7093 lookup_template_function (tree fns, tree arglist)
7094 {
7095   tree type;
7096
7097   if (fns == error_mark_node || arglist == error_mark_node)
7098     return error_mark_node;
7099
7100   gcc_assert (!arglist || TREE_CODE (arglist) == TREE_VEC);
7101
7102   if (!is_overloaded_fn (fns) && TREE_CODE (fns) != IDENTIFIER_NODE)
7103     {
7104       error ("%q#D is not a function template", fns);
7105       return error_mark_node;
7106     }
7107
7108   if (BASELINK_P (fns))
7109     {
7110       BASELINK_FUNCTIONS (fns) = build2 (TEMPLATE_ID_EXPR,
7111                                          unknown_type_node,
7112                                          BASELINK_FUNCTIONS (fns),
7113                                          arglist);
7114       return fns;
7115     }
7116
7117   type = TREE_TYPE (fns);
7118   if (TREE_CODE (fns) == OVERLOAD || !type)
7119     type = unknown_type_node;
7120
7121   return build2 (TEMPLATE_ID_EXPR, type, fns, arglist);
7122 }
7123
7124 /* Within the scope of a template class S<T>, the name S gets bound
7125    (in build_self_reference) to a TYPE_DECL for the class, not a
7126    TEMPLATE_DECL.  If DECL is a TYPE_DECL for current_class_type,
7127    or one of its enclosing classes, and that type is a template,
7128    return the associated TEMPLATE_DECL.  Otherwise, the original
7129    DECL is returned.
7130
7131    Also handle the case when DECL is a TREE_LIST of ambiguous
7132    injected-class-names from different bases.  */
7133
7134 tree
7135 maybe_get_template_decl_from_type_decl (tree decl)
7136 {
7137   if (decl == NULL_TREE)
7138     return decl;
7139
7140   /* DR 176: A lookup that finds an injected-class-name (10.2
7141      [class.member.lookup]) can result in an ambiguity in certain cases
7142      (for example, if it is found in more than one base class). If all of
7143      the injected-class-names that are found refer to specializations of
7144      the same class template, and if the name is followed by a
7145      template-argument-list, the reference refers to the class template
7146      itself and not a specialization thereof, and is not ambiguous.  */
7147   if (TREE_CODE (decl) == TREE_LIST)
7148     {
7149       tree t, tmpl = NULL_TREE;
7150       for (t = decl; t; t = TREE_CHAIN (t))
7151         {
7152           tree elt = maybe_get_template_decl_from_type_decl (TREE_VALUE (t));
7153           if (!tmpl)
7154             tmpl = elt;
7155           else if (tmpl != elt)
7156             break;
7157         }
7158       if (tmpl && t == NULL_TREE)
7159         return tmpl;
7160       else
7161         return decl;
7162     }
7163
7164   return (decl != NULL_TREE
7165           && DECL_SELF_REFERENCE_P (decl)
7166           && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
7167     ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
7168 }
7169
7170 /* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of
7171    parameters, find the desired type.
7172
7173    D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
7174
7175    IN_DECL, if non-NULL, is the template declaration we are trying to
7176    instantiate.
7177
7178    If ENTERING_SCOPE is nonzero, we are about to enter the scope of
7179    the class we are looking up.
7180
7181    Issue error and warning messages under control of COMPLAIN.
7182
7183    If the template class is really a local class in a template
7184    function, then the FUNCTION_CONTEXT is the function in which it is
7185    being instantiated.
7186
7187    ??? Note that this function is currently called *twice* for each
7188    template-id: the first time from the parser, while creating the
7189    incomplete type (finish_template_type), and the second type during the
7190    real instantiation (instantiate_template_class). This is surely something
7191    that we want to avoid. It also causes some problems with argument
7192    coercion (see convert_nontype_argument for more information on this).  */
7193
7194 static tree
7195 lookup_template_class_1 (tree d1, tree arglist, tree in_decl, tree context,
7196                          int entering_scope, tsubst_flags_t complain)
7197 {
7198   tree templ = NULL_TREE, parmlist;
7199   tree t;
7200   void **slot;
7201   spec_entry *entry;
7202   spec_entry elt;
7203   hashval_t hash;
7204
7205   if (TREE_CODE (d1) == IDENTIFIER_NODE)
7206     {
7207       tree value = innermost_non_namespace_value (d1);
7208       if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
7209         templ = value;
7210       else
7211         {
7212           if (context)
7213             push_decl_namespace (context);
7214           templ = lookup_name (d1);
7215           templ = maybe_get_template_decl_from_type_decl (templ);
7216           if (context)
7217             pop_decl_namespace ();
7218         }
7219       if (templ)
7220         context = DECL_CONTEXT (templ);
7221     }
7222   else if (TREE_CODE (d1) == TYPE_DECL && MAYBE_CLASS_TYPE_P (TREE_TYPE (d1)))
7223     {
7224       tree type = TREE_TYPE (d1);
7225
7226       /* If we are declaring a constructor, say A<T>::A<T>, we will get
7227          an implicit typename for the second A.  Deal with it.  */
7228       if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
7229         type = TREE_TYPE (type);
7230
7231       if (CLASSTYPE_TEMPLATE_INFO (type))
7232         {
7233           templ = CLASSTYPE_TI_TEMPLATE (type);
7234           d1 = DECL_NAME (templ);
7235         }
7236     }
7237   else if (TREE_CODE (d1) == ENUMERAL_TYPE
7238            || (TYPE_P (d1) && MAYBE_CLASS_TYPE_P (d1)))
7239     {
7240       templ = TYPE_TI_TEMPLATE (d1);
7241       d1 = DECL_NAME (templ);
7242     }
7243   else if (TREE_CODE (d1) == TEMPLATE_DECL
7244            && DECL_TEMPLATE_RESULT (d1)
7245            && TREE_CODE (DECL_TEMPLATE_RESULT (d1)) == TYPE_DECL)
7246     {
7247       templ = d1;
7248       d1 = DECL_NAME (templ);
7249       context = DECL_CONTEXT (templ);
7250     }
7251
7252   /* Issue an error message if we didn't find a template.  */
7253   if (! templ)
7254     {
7255       if (complain & tf_error)
7256         error ("%qT is not a template", d1);
7257       return error_mark_node;
7258     }
7259
7260   if (TREE_CODE (templ) != TEMPLATE_DECL
7261          /* Make sure it's a user visible template, if it was named by
7262             the user.  */
7263       || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (templ)
7264           && !PRIMARY_TEMPLATE_P (templ)))
7265     {
7266       if (complain & tf_error)
7267         {
7268           error ("non-template type %qT used as a template", d1);
7269           if (in_decl)
7270             error ("for template declaration %q+D", in_decl);
7271         }
7272       return error_mark_node;
7273     }
7274
7275   complain &= ~tf_user;
7276
7277   if (DECL_TEMPLATE_TEMPLATE_PARM_P (templ))
7278     {
7279       /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
7280          template arguments */
7281
7282       tree parm;
7283       tree arglist2;
7284       tree outer;
7285
7286       parmlist = DECL_INNERMOST_TEMPLATE_PARMS (templ);
7287
7288       /* Consider an example where a template template parameter declared as
7289
7290            template <class T, class U = std::allocator<T> > class TT
7291
7292          The template parameter level of T and U are one level larger than
7293          of TT.  To proper process the default argument of U, say when an
7294          instantiation `TT<int>' is seen, we need to build the full
7295          arguments containing {int} as the innermost level.  Outer levels,
7296          available when not appearing as default template argument, can be
7297          obtained from the arguments of the enclosing template.
7298
7299          Suppose that TT is later substituted with std::vector.  The above
7300          instantiation is `TT<int, std::allocator<T> >' with TT at
7301          level 1, and T at level 2, while the template arguments at level 1
7302          becomes {std::vector} and the inner level 2 is {int}.  */
7303
7304       outer = DECL_CONTEXT (templ);
7305       if (outer)
7306         outer = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (outer)));
7307       else if (current_template_parms)
7308         /* This is an argument of the current template, so we haven't set
7309            DECL_CONTEXT yet.  */
7310         outer = current_template_args ();
7311
7312       if (outer)
7313         arglist = add_to_template_args (outer, arglist);
7314
7315       arglist2 = coerce_template_parms (parmlist, arglist, templ,
7316                                         complain,
7317                                         /*require_all_args=*/true,
7318                                         /*use_default_args=*/true);
7319       if (arglist2 == error_mark_node
7320           || (!uses_template_parms (arglist2)
7321               && check_instantiated_args (templ, arglist2, complain)))
7322         return error_mark_node;
7323
7324       parm = bind_template_template_parm (TREE_TYPE (templ), arglist2);
7325       return parm;
7326     }
7327   else
7328     {
7329       tree template_type = TREE_TYPE (templ);
7330       tree gen_tmpl;
7331       tree type_decl;
7332       tree found = NULL_TREE;
7333       int arg_depth;
7334       int parm_depth;
7335       int is_dependent_type;
7336       int use_partial_inst_tmpl = false;
7337
7338       if (template_type == error_mark_node)
7339         /* An error occured while building the template TEMPL, and a
7340            diagnostic has most certainly been emitted for that
7341            already.  Let's propagate that error.  */
7342         return error_mark_node;
7343
7344       gen_tmpl = most_general_template (templ);
7345       parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
7346       parm_depth = TMPL_PARMS_DEPTH (parmlist);
7347       arg_depth = TMPL_ARGS_DEPTH (arglist);
7348
7349       if (arg_depth == 1 && parm_depth > 1)
7350         {
7351           /* We've been given an incomplete set of template arguments.
7352              For example, given:
7353
7354                template <class T> struct S1 {
7355                  template <class U> struct S2 {};
7356                  template <class U> struct S2<U*> {};
7357                 };
7358
7359              we will be called with an ARGLIST of `U*', but the
7360              TEMPLATE will be `template <class T> template
7361              <class U> struct S1<T>::S2'.  We must fill in the missing
7362              arguments.  */
7363           arglist
7364             = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (templ)),
7365                                            arglist);
7366           arg_depth = TMPL_ARGS_DEPTH (arglist);
7367         }
7368
7369       /* Now we should have enough arguments.  */
7370       gcc_assert (parm_depth == arg_depth);
7371
7372       /* From here on, we're only interested in the most general
7373          template.  */
7374
7375       /* Calculate the BOUND_ARGS.  These will be the args that are
7376          actually tsubst'd into the definition to create the
7377          instantiation.  */
7378       if (parm_depth > 1)
7379         {
7380           /* We have multiple levels of arguments to coerce, at once.  */
7381           int i;
7382           int saved_depth = TMPL_ARGS_DEPTH (arglist);
7383
7384           tree bound_args = make_tree_vec (parm_depth);
7385
7386           for (i = saved_depth,
7387                  t = DECL_TEMPLATE_PARMS (gen_tmpl);
7388                i > 0 && t != NULL_TREE;
7389                --i, t = TREE_CHAIN (t))
7390             {
7391               tree a;
7392               if (i == saved_depth)
7393                 a = coerce_template_parms (TREE_VALUE (t),
7394                                            arglist, gen_tmpl,
7395                                            complain,
7396                                            /*require_all_args=*/true,
7397                                            /*use_default_args=*/true);
7398               else
7399                 /* Outer levels should have already been coerced.  */
7400                 a = TMPL_ARGS_LEVEL (arglist, i);
7401
7402               /* Don't process further if one of the levels fails.  */
7403               if (a == error_mark_node)
7404                 {
7405                   /* Restore the ARGLIST to its full size.  */
7406                   TREE_VEC_LENGTH (arglist) = saved_depth;
7407                   return error_mark_node;
7408                 }
7409
7410               SET_TMPL_ARGS_LEVEL (bound_args, i, a);
7411
7412               /* We temporarily reduce the length of the ARGLIST so
7413                  that coerce_template_parms will see only the arguments
7414                  corresponding to the template parameters it is
7415                  examining.  */
7416               TREE_VEC_LENGTH (arglist)--;
7417             }
7418
7419           /* Restore the ARGLIST to its full size.  */
7420           TREE_VEC_LENGTH (arglist) = saved_depth;
7421
7422           arglist = bound_args;
7423         }
7424       else
7425         arglist
7426           = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
7427                                    INNERMOST_TEMPLATE_ARGS (arglist),
7428                                    gen_tmpl,
7429                                    complain,
7430                                    /*require_all_args=*/true,
7431                                    /*use_default_args=*/true);
7432
7433       if (arglist == error_mark_node)
7434         /* We were unable to bind the arguments.  */
7435         return error_mark_node;
7436
7437       /* In the scope of a template class, explicit references to the
7438          template class refer to the type of the template, not any
7439          instantiation of it.  For example, in:
7440
7441            template <class T> class C { void f(C<T>); }
7442
7443          the `C<T>' is just the same as `C'.  Outside of the
7444          class, however, such a reference is an instantiation.  */
7445       if ((entering_scope
7446            || !PRIMARY_TEMPLATE_P (gen_tmpl)
7447            || currently_open_class (template_type))
7448           /* comp_template_args is expensive, check it last.  */
7449           && comp_template_args (TYPE_TI_ARGS (template_type),
7450                                  arglist))
7451         return template_type;
7452
7453       /* If we already have this specialization, return it.  */
7454       elt.tmpl = gen_tmpl;
7455       elt.args = arglist;
7456       hash = hash_specialization (&elt);
7457       entry = (spec_entry *) htab_find_with_hash (type_specializations,
7458                                                   &elt, hash);
7459
7460       if (entry)
7461         return entry->spec;
7462
7463       is_dependent_type = uses_template_parms (arglist);
7464
7465       /* If the deduced arguments are invalid, then the binding
7466          failed.  */
7467       if (!is_dependent_type
7468           && check_instantiated_args (gen_tmpl,
7469                                       INNERMOST_TEMPLATE_ARGS (arglist),
7470                                       complain))
7471         return error_mark_node;
7472
7473       if (!is_dependent_type
7474           && !PRIMARY_TEMPLATE_P (gen_tmpl)
7475           && !LAMBDA_TYPE_P (TREE_TYPE (gen_tmpl))
7476           && TREE_CODE (CP_DECL_CONTEXT (gen_tmpl)) == NAMESPACE_DECL)
7477         {
7478           found = xref_tag_from_type (TREE_TYPE (gen_tmpl),
7479                                       DECL_NAME (gen_tmpl),
7480                                       /*tag_scope=*/ts_global);
7481           return found;
7482         }
7483
7484       context = tsubst (DECL_CONTEXT (gen_tmpl), arglist,
7485                         complain, in_decl);
7486       if (context == error_mark_node)
7487         return error_mark_node;
7488
7489       if (!context)
7490         context = global_namespace;
7491
7492       /* Create the type.  */
7493       if (TREE_CODE (template_type) == ENUMERAL_TYPE)
7494         {
7495           if (!is_dependent_type)
7496             {
7497               set_current_access_from_decl (TYPE_NAME (template_type));
7498               t = start_enum (TYPE_IDENTIFIER (template_type), NULL_TREE,
7499                               tsubst (ENUM_UNDERLYING_TYPE (template_type),
7500                                       arglist, complain, in_decl),
7501                               SCOPED_ENUM_P (template_type), NULL);
7502             }
7503           else
7504             {
7505               /* We don't want to call start_enum for this type, since
7506                  the values for the enumeration constants may involve
7507                  template parameters.  And, no one should be interested
7508                  in the enumeration constants for such a type.  */
7509               t = cxx_make_type (ENUMERAL_TYPE);
7510               SET_SCOPED_ENUM_P (t, SCOPED_ENUM_P (template_type));
7511             }
7512           SET_OPAQUE_ENUM_P (t, OPAQUE_ENUM_P (template_type));
7513           ENUM_FIXED_UNDERLYING_TYPE_P (t)
7514             = ENUM_FIXED_UNDERLYING_TYPE_P (template_type);
7515         }
7516       else if (DECL_ALIAS_TEMPLATE_P (gen_tmpl))
7517         {
7518           /* The user referred to a specialization of an alias
7519             template represented by GEN_TMPL.
7520
7521             [temp.alias]/2 says:
7522
7523                 When a template-id refers to the specialization of an
7524                 alias template, it is equivalent to the associated
7525                 type obtained by substitution of its
7526                 template-arguments for the template-parameters in the
7527                 type-id of the alias template.  */
7528
7529           t = tsubst (TREE_TYPE (gen_tmpl), arglist, complain, in_decl);
7530           /* Note that the call above (by indirectly calling
7531              register_specialization in tsubst_decl) registers the
7532              TYPE_DECL representing the specialization of the alias
7533              template.  So next time someone substitutes ARGLIST for
7534              the template parms into the alias template (GEN_TMPL),
7535              she'll get that TYPE_DECL back.  */
7536
7537           if (t == error_mark_node)
7538             return t;
7539         }
7540       else if (CLASS_TYPE_P (template_type))
7541         {
7542           t = make_class_type (TREE_CODE (template_type));
7543           CLASSTYPE_DECLARED_CLASS (t)
7544             = CLASSTYPE_DECLARED_CLASS (template_type);
7545           SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
7546           TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
7547
7548           /* A local class.  Make sure the decl gets registered properly.  */
7549           if (context == current_function_decl)
7550             pushtag (DECL_NAME (gen_tmpl), t, /*tag_scope=*/ts_current);
7551
7552           if (comp_template_args (CLASSTYPE_TI_ARGS (template_type), arglist))
7553             /* This instantiation is another name for the primary
7554                template type. Set the TYPE_CANONICAL field
7555                appropriately. */
7556             TYPE_CANONICAL (t) = template_type;
7557           else if (any_template_arguments_need_structural_equality_p (arglist))
7558             /* Some of the template arguments require structural
7559                equality testing, so this template class requires
7560                structural equality testing. */
7561             SET_TYPE_STRUCTURAL_EQUALITY (t);
7562         }
7563       else
7564         gcc_unreachable ();
7565
7566       /* If we called start_enum or pushtag above, this information
7567          will already be set up.  */
7568       if (!TYPE_NAME (t))
7569         {
7570           TYPE_CONTEXT (t) = FROB_CONTEXT (context);
7571
7572           type_decl = create_implicit_typedef (DECL_NAME (gen_tmpl), t);
7573           DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
7574           DECL_SOURCE_LOCATION (type_decl)
7575             = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
7576         }
7577       else
7578         type_decl = TYPE_NAME (t);
7579
7580       if (CLASS_TYPE_P (template_type))
7581         {
7582           TREE_PRIVATE (type_decl)
7583             = TREE_PRIVATE (TYPE_STUB_DECL (template_type));
7584           TREE_PROTECTED (type_decl)
7585             = TREE_PROTECTED (TYPE_STUB_DECL (template_type));
7586           if (CLASSTYPE_VISIBILITY_SPECIFIED (template_type))
7587             {
7588               DECL_VISIBILITY_SPECIFIED (type_decl) = 1;
7589               DECL_VISIBILITY (type_decl) = CLASSTYPE_VISIBILITY (template_type);
7590             }
7591         }
7592
7593       /* Let's consider the explicit specialization of a member
7594          of a class template specialization that is implicitely instantiated,
7595          e.g.:
7596              template<class T>
7597              struct S
7598              {
7599                template<class U> struct M {}; //#0
7600              };
7601
7602              template<>
7603              template<>
7604              struct S<int>::M<char> //#1
7605              {
7606                int i;
7607              };
7608         [temp.expl.spec]/4 says this is valid.
7609
7610         In this case, when we write:
7611         S<int>::M<char> m;
7612
7613         M is instantiated from the CLASSTYPE_TI_TEMPLATE of #1, not from
7614         the one of #0.
7615
7616         When we encounter #1, we want to store the partial instantiation
7617         of M (template<class T> S<int>::M<T>) in it's CLASSTYPE_TI_TEMPLATE.
7618
7619         For all cases other than this "explicit specialization of member of a
7620         class template", we just want to store the most general template into
7621         the CLASSTYPE_TI_TEMPLATE of M.
7622
7623         This case of "explicit specialization of member of a class template"
7624         only happens when:
7625         1/ the enclosing class is an instantiation of, and therefore not
7626         the same as, the context of the most general template, and
7627         2/ we aren't looking at the partial instantiation itself, i.e.
7628         the innermost arguments are not the same as the innermost parms of
7629         the most general template.
7630
7631         So it's only when 1/ and 2/ happens that we want to use the partial
7632         instantiation of the member template in lieu of its most general
7633         template.  */
7634
7635       if (PRIMARY_TEMPLATE_P (gen_tmpl)
7636           && TMPL_ARGS_HAVE_MULTIPLE_LEVELS (arglist)
7637           /* the enclosing class must be an instantiation...  */
7638           && CLASS_TYPE_P (context)
7639           && !same_type_p (context, DECL_CONTEXT (gen_tmpl)))
7640         {
7641           tree partial_inst_args;
7642           TREE_VEC_LENGTH (arglist)--;
7643           ++processing_template_decl;
7644           partial_inst_args =
7645             tsubst (INNERMOST_TEMPLATE_ARGS
7646                         (TYPE_TI_ARGS (TREE_TYPE (gen_tmpl))),
7647                     arglist, complain, NULL_TREE);
7648           --processing_template_decl;
7649           TREE_VEC_LENGTH (arglist)++;
7650           use_partial_inst_tmpl =
7651             /*...and we must not be looking at the partial instantiation
7652              itself. */
7653             !comp_template_args (INNERMOST_TEMPLATE_ARGS (arglist),
7654                                  partial_inst_args);
7655         }
7656
7657       if (!use_partial_inst_tmpl)
7658         /* This case is easy; there are no member templates involved.  */
7659         found = gen_tmpl;
7660       else
7661         {
7662           /* This is a full instantiation of a member template.  Find
7663              the partial instantiation of which this is an instance.  */
7664
7665           /* Temporarily reduce by one the number of levels in the ARGLIST
7666              so as to avoid comparing the last set of arguments.  */
7667           TREE_VEC_LENGTH (arglist)--;
7668           found = tsubst (gen_tmpl, arglist, complain, NULL_TREE);
7669           TREE_VEC_LENGTH (arglist)++;
7670           /* FOUND is either a proper class type, or an alias
7671              template specialization.  In the later case, it's a
7672              TYPE_DECL, resulting from the substituting of arguments
7673              for parameters in the TYPE_DECL of the alias template
7674              done earlier.  So be careful while getting the template
7675              of FOUND.  */
7676           found = TREE_CODE (found) == TYPE_DECL
7677             ? TYPE_TI_TEMPLATE (TREE_TYPE (found))
7678             : CLASSTYPE_TI_TEMPLATE (found);
7679         }
7680
7681       SET_TYPE_TEMPLATE_INFO (t, build_template_info (found, arglist));
7682
7683       elt.spec = t;
7684       slot = htab_find_slot_with_hash (type_specializations,
7685                                        &elt, hash, INSERT);
7686       entry = ggc_alloc_spec_entry ();
7687       *entry = elt;
7688       *slot = entry;
7689
7690       /* Note this use of the partial instantiation so we can check it
7691          later in maybe_process_partial_specialization.  */
7692       DECL_TEMPLATE_INSTANTIATIONS (templ)
7693         = tree_cons (arglist, t,
7694                      DECL_TEMPLATE_INSTANTIATIONS (templ));
7695
7696       if (TREE_CODE (t) == ENUMERAL_TYPE && !is_dependent_type)
7697         /* Now that the type has been registered on the instantiations
7698            list, we set up the enumerators.  Because the enumeration
7699            constants may involve the enumeration type itself, we make
7700            sure to register the type first, and then create the
7701            constants.  That way, doing tsubst_expr for the enumeration
7702            constants won't result in recursive calls here; we'll find
7703            the instantiation and exit above.  */
7704         tsubst_enum (template_type, t, arglist);
7705
7706       if (CLASS_TYPE_P (template_type) && is_dependent_type)
7707         /* If the type makes use of template parameters, the
7708            code that generates debugging information will crash.  */
7709         DECL_IGNORED_P (TYPE_STUB_DECL (t)) = 1;
7710
7711       /* Possibly limit visibility based on template args.  */
7712       TREE_PUBLIC (type_decl) = 1;
7713       determine_visibility (type_decl);
7714
7715       return t;
7716     }
7717 }
7718
7719 /* Wrapper for lookup_template_class_1.  */
7720
7721 tree
7722 lookup_template_class (tree d1, tree arglist, tree in_decl, tree context,
7723                        int entering_scope, tsubst_flags_t complain)
7724 {
7725   tree ret;
7726   timevar_push (TV_TEMPLATE_INST);
7727   ret = lookup_template_class_1 (d1, arglist, in_decl, context,
7728                                  entering_scope, complain);
7729   timevar_pop (TV_TEMPLATE_INST);
7730   return ret;
7731 }
7732 \f
7733 struct pair_fn_data
7734 {
7735   tree_fn_t fn;
7736   void *data;
7737   /* True when we should also visit template parameters that occur in
7738      non-deduced contexts.  */
7739   bool include_nondeduced_p;
7740   struct pointer_set_t *visited;
7741 };
7742
7743 /* Called from for_each_template_parm via walk_tree.  */
7744
7745 static tree
7746 for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
7747 {
7748   tree t = *tp;
7749   struct pair_fn_data *pfd = (struct pair_fn_data *) d;
7750   tree_fn_t fn = pfd->fn;
7751   void *data = pfd->data;
7752
7753   if (TYPE_P (t)
7754       && (pfd->include_nondeduced_p || TREE_CODE (t) != TYPENAME_TYPE)
7755       && for_each_template_parm (TYPE_CONTEXT (t), fn, data, pfd->visited,
7756                                  pfd->include_nondeduced_p))
7757     return error_mark_node;
7758
7759   switch (TREE_CODE (t))
7760     {
7761     case RECORD_TYPE:
7762       if (TYPE_PTRMEMFUNC_P (t))
7763         break;
7764       /* Fall through.  */
7765
7766     case UNION_TYPE:
7767     case ENUMERAL_TYPE:
7768       if (!TYPE_TEMPLATE_INFO (t))
7769         *walk_subtrees = 0;
7770       else if (for_each_template_parm (TI_ARGS (TYPE_TEMPLATE_INFO (t)),
7771                                        fn, data, pfd->visited, 
7772                                        pfd->include_nondeduced_p))
7773         return error_mark_node;
7774       break;
7775
7776     case INTEGER_TYPE:
7777       if (for_each_template_parm (TYPE_MIN_VALUE (t),
7778                                   fn, data, pfd->visited, 
7779                                   pfd->include_nondeduced_p)
7780           || for_each_template_parm (TYPE_MAX_VALUE (t),
7781                                      fn, data, pfd->visited,
7782                                      pfd->include_nondeduced_p))
7783         return error_mark_node;
7784       break;
7785
7786     case METHOD_TYPE:
7787       /* Since we're not going to walk subtrees, we have to do this
7788          explicitly here.  */
7789       if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data,
7790                                   pfd->visited, pfd->include_nondeduced_p))
7791         return error_mark_node;
7792       /* Fall through.  */
7793
7794     case FUNCTION_TYPE:
7795       /* Check the return type.  */
7796       if (for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
7797                                   pfd->include_nondeduced_p))
7798         return error_mark_node;
7799
7800       /* Check the parameter types.  Since default arguments are not
7801          instantiated until they are needed, the TYPE_ARG_TYPES may
7802          contain expressions that involve template parameters.  But,
7803          no-one should be looking at them yet.  And, once they're
7804          instantiated, they don't contain template parameters, so
7805          there's no point in looking at them then, either.  */
7806       {
7807         tree parm;
7808
7809         for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
7810           if (for_each_template_parm (TREE_VALUE (parm), fn, data,
7811                                       pfd->visited, pfd->include_nondeduced_p))
7812             return error_mark_node;
7813
7814         /* Since we've already handled the TYPE_ARG_TYPES, we don't
7815            want walk_tree walking into them itself.  */
7816         *walk_subtrees = 0;
7817       }
7818       break;
7819
7820     case TYPEOF_TYPE:
7821     case UNDERLYING_TYPE:
7822       if (pfd->include_nondeduced_p
7823           && for_each_template_parm (TYPE_FIELDS (t), fn, data,
7824                                      pfd->visited, 
7825                                      pfd->include_nondeduced_p))
7826         return error_mark_node;
7827       break;
7828
7829     case FUNCTION_DECL:
7830     case VAR_DECL:
7831       if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
7832           && for_each_template_parm (DECL_TI_ARGS (t), fn, data,
7833                                      pfd->visited, pfd->include_nondeduced_p))
7834         return error_mark_node;
7835       /* Fall through.  */
7836
7837     case PARM_DECL:
7838     case CONST_DECL:
7839       if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t)
7840           && for_each_template_parm (DECL_INITIAL (t), fn, data,
7841                                      pfd->visited, pfd->include_nondeduced_p))
7842         return error_mark_node;
7843       if (DECL_CONTEXT (t)
7844           && pfd->include_nondeduced_p
7845           && for_each_template_parm (DECL_CONTEXT (t), fn, data,
7846                                      pfd->visited, pfd->include_nondeduced_p))
7847         return error_mark_node;
7848       break;
7849
7850     case BOUND_TEMPLATE_TEMPLATE_PARM:
7851       /* Record template parameters such as `T' inside `TT<T>'.  */
7852       if (for_each_template_parm (TYPE_TI_ARGS (t), fn, data, pfd->visited,
7853                                   pfd->include_nondeduced_p))
7854         return error_mark_node;
7855       /* Fall through.  */
7856
7857     case TEMPLATE_TEMPLATE_PARM:
7858     case TEMPLATE_TYPE_PARM:
7859     case TEMPLATE_PARM_INDEX:
7860       if (fn && (*fn)(t, data))
7861         return error_mark_node;
7862       else if (!fn)
7863         return error_mark_node;
7864       break;
7865
7866     case TEMPLATE_DECL:
7867       /* A template template parameter is encountered.  */
7868       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
7869           && for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
7870                                      pfd->include_nondeduced_p))
7871         return error_mark_node;
7872
7873       /* Already substituted template template parameter */
7874       *walk_subtrees = 0;
7875       break;
7876
7877     case TYPENAME_TYPE:
7878       if (!fn
7879           || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn,
7880                                      data, pfd->visited, 
7881                                      pfd->include_nondeduced_p))
7882         return error_mark_node;
7883       break;
7884
7885     case CONSTRUCTOR:
7886       if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
7887           && pfd->include_nondeduced_p
7888           && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
7889                                      (TREE_TYPE (t)), fn, data,
7890                                      pfd->visited, pfd->include_nondeduced_p))
7891         return error_mark_node;
7892       break;
7893
7894     case INDIRECT_REF:
7895     case COMPONENT_REF:
7896       /* If there's no type, then this thing must be some expression
7897          involving template parameters.  */
7898       if (!fn && !TREE_TYPE (t))
7899         return error_mark_node;
7900       break;
7901
7902     case MODOP_EXPR:
7903     case CAST_EXPR:
7904     case IMPLICIT_CONV_EXPR:
7905     case REINTERPRET_CAST_EXPR:
7906     case CONST_CAST_EXPR:
7907     case STATIC_CAST_EXPR:
7908     case DYNAMIC_CAST_EXPR:
7909     case ARROW_EXPR:
7910     case DOTSTAR_EXPR:
7911     case TYPEID_EXPR:
7912     case PSEUDO_DTOR_EXPR:
7913       if (!fn)
7914         return error_mark_node;
7915       break;
7916
7917     default:
7918       break;
7919     }
7920
7921   /* We didn't find any template parameters we liked.  */
7922   return NULL_TREE;
7923 }
7924
7925 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
7926    BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
7927    call FN with the parameter and the DATA.
7928    If FN returns nonzero, the iteration is terminated, and
7929    for_each_template_parm returns 1.  Otherwise, the iteration
7930    continues.  If FN never returns a nonzero value, the value
7931    returned by for_each_template_parm is 0.  If FN is NULL, it is
7932    considered to be the function which always returns 1.
7933
7934    If INCLUDE_NONDEDUCED_P, then this routine will also visit template
7935    parameters that occur in non-deduced contexts.  When false, only
7936    visits those template parameters that can be deduced.  */
7937
7938 static int
7939 for_each_template_parm (tree t, tree_fn_t fn, void* data,
7940                         struct pointer_set_t *visited,
7941                         bool include_nondeduced_p)
7942 {
7943   struct pair_fn_data pfd;
7944   int result;
7945
7946   /* Set up.  */
7947   pfd.fn = fn;
7948   pfd.data = data;
7949   pfd.include_nondeduced_p = include_nondeduced_p;
7950
7951   /* Walk the tree.  (Conceptually, we would like to walk without
7952      duplicates, but for_each_template_parm_r recursively calls
7953      for_each_template_parm, so we would need to reorganize a fair
7954      bit to use walk_tree_without_duplicates, so we keep our own
7955      visited list.)  */
7956   if (visited)
7957     pfd.visited = visited;
7958   else
7959     pfd.visited = pointer_set_create ();
7960   result = cp_walk_tree (&t,
7961                          for_each_template_parm_r,
7962                          &pfd,
7963                          pfd.visited) != NULL_TREE;
7964
7965   /* Clean up.  */
7966   if (!visited)
7967     {
7968       pointer_set_destroy (pfd.visited);
7969       pfd.visited = 0;
7970     }
7971
7972   return result;
7973 }
7974
7975 /* Returns true if T depends on any template parameter.  */
7976
7977 int
7978 uses_template_parms (tree t)
7979 {
7980   bool dependent_p;
7981   int saved_processing_template_decl;
7982
7983   saved_processing_template_decl = processing_template_decl;
7984   if (!saved_processing_template_decl)
7985     processing_template_decl = 1;
7986   if (TYPE_P (t))
7987     dependent_p = dependent_type_p (t);
7988   else if (TREE_CODE (t) == TREE_VEC)
7989     dependent_p = any_dependent_template_arguments_p (t);
7990   else if (TREE_CODE (t) == TREE_LIST)
7991     dependent_p = (uses_template_parms (TREE_VALUE (t))
7992                    || uses_template_parms (TREE_CHAIN (t)));
7993   else if (TREE_CODE (t) == TYPE_DECL)
7994     dependent_p = dependent_type_p (TREE_TYPE (t));
7995   else if (DECL_P (t)
7996            || EXPR_P (t)
7997            || TREE_CODE (t) == TEMPLATE_PARM_INDEX
7998            || TREE_CODE (t) == OVERLOAD
7999            || BASELINK_P (t)
8000            || TREE_CODE (t) == IDENTIFIER_NODE
8001            || TREE_CODE (t) == TRAIT_EXPR
8002            || TREE_CODE (t) == CONSTRUCTOR
8003            || CONSTANT_CLASS_P (t))
8004     dependent_p = (type_dependent_expression_p (t)
8005                    || value_dependent_expression_p (t));
8006   else
8007     {
8008       gcc_assert (t == error_mark_node);
8009       dependent_p = false;
8010     }
8011
8012   processing_template_decl = saved_processing_template_decl;
8013
8014   return dependent_p;
8015 }
8016
8017 /* Returns true if T depends on any template parameter with level LEVEL.  */
8018
8019 int
8020 uses_template_parms_level (tree t, int level)
8021 {
8022   return for_each_template_parm (t, template_parm_this_level_p, &level, NULL,
8023                                  /*include_nondeduced_p=*/true);
8024 }
8025
8026 /* Returns TRUE iff INST is an instantiation we don't need to do in an
8027    ill-formed translation unit, i.e. a variable or function that isn't
8028    usable in a constant expression.  */
8029
8030 static inline bool
8031 neglectable_inst_p (tree d)
8032 {
8033   return (DECL_P (d)
8034           && !(TREE_CODE (d) == FUNCTION_DECL ? DECL_DECLARED_CONSTEXPR_P (d)
8035                : decl_maybe_constant_var_p (d)));
8036 }
8037
8038 /* Returns TRUE iff we should refuse to instantiate DECL because it's
8039    neglectable and instantiated from within an erroneous instantiation.  */
8040
8041 static bool
8042 limit_bad_template_recursion (tree decl)
8043 {
8044   struct tinst_level *lev = current_tinst_level;
8045   int errs = errorcount + sorrycount;
8046   if (lev == NULL || errs == 0 || !neglectable_inst_p (decl))
8047     return false;
8048
8049   for (; lev; lev = lev->next)
8050     if (neglectable_inst_p (lev->decl))
8051       break;
8052
8053   return (lev && errs > lev->errors);
8054 }
8055
8056 static int tinst_depth;
8057 extern int max_tinst_depth;
8058 #ifdef GATHER_STATISTICS
8059 int depth_reached;
8060 #endif
8061 static GTY(()) struct tinst_level *last_error_tinst_level;
8062
8063 /* We're starting to instantiate D; record the template instantiation context
8064    for diagnostics and to restore it later.  */
8065
8066 int
8067 push_tinst_level (tree d)
8068 {
8069   struct tinst_level *new_level;
8070
8071   if (tinst_depth >= max_tinst_depth)
8072     {
8073       last_error_tinst_level = current_tinst_level;
8074       if (TREE_CODE (d) == TREE_LIST)
8075         error ("template instantiation depth exceeds maximum of %d (use "
8076                "-ftemplate-depth= to increase the maximum) substituting %qS",
8077                max_tinst_depth, d);
8078       else
8079         error ("template instantiation depth exceeds maximum of %d (use "
8080                "-ftemplate-depth= to increase the maximum) instantiating %qD",
8081                max_tinst_depth, d);
8082
8083       print_instantiation_context ();
8084
8085       return 0;
8086     }
8087
8088   /* If the current instantiation caused problems, don't let it instantiate
8089      anything else.  Do allow deduction substitution and decls usable in
8090      constant expressions.  */
8091   if (limit_bad_template_recursion (d))
8092     return 0;
8093
8094   new_level = ggc_alloc_tinst_level ();
8095   new_level->decl = d;
8096   new_level->locus = input_location;
8097   new_level->errors = errorcount+sorrycount;
8098   new_level->in_system_header_p = in_system_header;
8099   new_level->next = current_tinst_level;
8100   current_tinst_level = new_level;
8101
8102   ++tinst_depth;
8103 #ifdef GATHER_STATISTICS
8104   if (tinst_depth > depth_reached)
8105     depth_reached = tinst_depth;
8106 #endif
8107
8108   return 1;
8109 }
8110
8111 /* We're done instantiating this template; return to the instantiation
8112    context.  */
8113
8114 void
8115 pop_tinst_level (void)
8116 {
8117   /* Restore the filename and line number stashed away when we started
8118      this instantiation.  */
8119   input_location = current_tinst_level->locus;
8120   current_tinst_level = current_tinst_level->next;
8121   --tinst_depth;
8122 }
8123
8124 /* We're instantiating a deferred template; restore the template
8125    instantiation context in which the instantiation was requested, which
8126    is one step out from LEVEL.  Return the corresponding DECL or TYPE.  */
8127
8128 static tree
8129 reopen_tinst_level (struct tinst_level *level)
8130 {
8131   struct tinst_level *t;
8132
8133   tinst_depth = 0;
8134   for (t = level; t; t = t->next)
8135     ++tinst_depth;
8136
8137   current_tinst_level = level;
8138   pop_tinst_level ();
8139   if (current_tinst_level)
8140     current_tinst_level->errors = errorcount+sorrycount;
8141   return level->decl;
8142 }
8143
8144 /* Returns the TINST_LEVEL which gives the original instantiation
8145    context.  */
8146
8147 struct tinst_level *
8148 outermost_tinst_level (void)
8149 {
8150   struct tinst_level *level = current_tinst_level;
8151   if (level)
8152     while (level->next)
8153       level = level->next;
8154   return level;
8155 }
8156
8157 /* Returns TRUE if PARM is a parameter of the template TEMPL.  */
8158
8159 bool
8160 parameter_of_template_p (tree parm, tree templ)
8161 {
8162   tree parms;
8163   int i;
8164
8165   if (!parm || !templ)
8166     return false;
8167
8168   gcc_assert (DECL_TEMPLATE_PARM_P (parm));
8169   gcc_assert (TREE_CODE (templ) == TEMPLATE_DECL);
8170
8171   parms = DECL_TEMPLATE_PARMS (templ);
8172   parms = INNERMOST_TEMPLATE_PARMS (parms);
8173
8174   for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
8175     {
8176       tree p = TREE_VALUE (TREE_VEC_ELT (parms, i));
8177       if (p == error_mark_node)
8178         continue;
8179
8180       if (parm == p
8181           || (DECL_INITIAL (parm)
8182               && DECL_INITIAL (parm) == DECL_INITIAL (p)))
8183         return true;
8184     }
8185
8186   return false;
8187 }
8188
8189 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL.  ARGS is the
8190    vector of template arguments, as for tsubst.
8191
8192    Returns an appropriate tsubst'd friend declaration.  */
8193
8194 static tree
8195 tsubst_friend_function (tree decl, tree args)
8196 {
8197   tree new_friend;
8198
8199   if (TREE_CODE (decl) == FUNCTION_DECL
8200       && DECL_TEMPLATE_INSTANTIATION (decl)
8201       && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
8202     /* This was a friend declared with an explicit template
8203        argument list, e.g.:
8204
8205        friend void f<>(T);
8206
8207        to indicate that f was a template instantiation, not a new
8208        function declaration.  Now, we have to figure out what
8209        instantiation of what template.  */
8210     {
8211       tree template_id, arglist, fns;
8212       tree new_args;
8213       tree tmpl;
8214       tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
8215
8216       /* Friend functions are looked up in the containing namespace scope.
8217          We must enter that scope, to avoid finding member functions of the
8218          current class with same name.  */
8219       push_nested_namespace (ns);
8220       fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
8221                          tf_warning_or_error, NULL_TREE,
8222                          /*integral_constant_expression_p=*/false);
8223       pop_nested_namespace (ns);
8224       arglist = tsubst (DECL_TI_ARGS (decl), args,
8225                         tf_warning_or_error, NULL_TREE);
8226       template_id = lookup_template_function (fns, arglist);
8227
8228       new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
8229       tmpl = determine_specialization (template_id, new_friend,
8230                                        &new_args,
8231                                        /*need_member_template=*/0,
8232                                        TREE_VEC_LENGTH (args),
8233                                        tsk_none);
8234       return instantiate_template (tmpl, new_args, tf_error);
8235     }
8236
8237   new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
8238
8239   /* The NEW_FRIEND will look like an instantiation, to the
8240      compiler, but is not an instantiation from the point of view of
8241      the language.  For example, we might have had:
8242
8243      template <class T> struct S {
8244        template <class U> friend void f(T, U);
8245      };
8246
8247      Then, in S<int>, template <class U> void f(int, U) is not an
8248      instantiation of anything.  */
8249   if (new_friend == error_mark_node)
8250     return error_mark_node;
8251
8252   DECL_USE_TEMPLATE (new_friend) = 0;
8253   if (TREE_CODE (decl) == TEMPLATE_DECL)
8254     {
8255       DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
8256       DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
8257         = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
8258     }
8259
8260   /* The mangled name for the NEW_FRIEND is incorrect.  The function
8261      is not a template instantiation and should not be mangled like
8262      one.  Therefore, we forget the mangling here; we'll recompute it
8263      later if we need it.  */
8264   if (TREE_CODE (new_friend) != TEMPLATE_DECL)
8265     {
8266       SET_DECL_RTL (new_friend, NULL);
8267       SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
8268     }
8269
8270   if (DECL_NAMESPACE_SCOPE_P (new_friend))
8271     {
8272       tree old_decl;
8273       tree new_friend_template_info;
8274       tree new_friend_result_template_info;
8275       tree ns;
8276       int  new_friend_is_defn;
8277
8278       /* We must save some information from NEW_FRIEND before calling
8279          duplicate decls since that function will free NEW_FRIEND if
8280          possible.  */
8281       new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
8282       new_friend_is_defn =
8283             (DECL_INITIAL (DECL_TEMPLATE_RESULT
8284                            (template_for_substitution (new_friend)))
8285              != NULL_TREE);
8286       if (TREE_CODE (new_friend) == TEMPLATE_DECL)
8287         {
8288           /* This declaration is a `primary' template.  */
8289           DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
8290
8291           new_friend_result_template_info
8292             = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
8293         }
8294       else
8295         new_friend_result_template_info = NULL_TREE;
8296
8297       /* Make the init_value nonzero so pushdecl knows this is a defn.  */
8298       if (new_friend_is_defn)
8299         DECL_INITIAL (new_friend) = error_mark_node;
8300
8301       /* Inside pushdecl_namespace_level, we will push into the
8302          current namespace. However, the friend function should go
8303          into the namespace of the template.  */
8304       ns = decl_namespace_context (new_friend);
8305       push_nested_namespace (ns);
8306       old_decl = pushdecl_namespace_level (new_friend, /*is_friend=*/true);
8307       pop_nested_namespace (ns);
8308
8309       if (old_decl == error_mark_node)
8310         return error_mark_node;
8311
8312       if (old_decl != new_friend)
8313         {
8314           /* This new friend declaration matched an existing
8315              declaration.  For example, given:
8316
8317                template <class T> void f(T);
8318                template <class U> class C {
8319                  template <class T> friend void f(T) {}
8320                };
8321
8322              the friend declaration actually provides the definition
8323              of `f', once C has been instantiated for some type.  So,
8324              old_decl will be the out-of-class template declaration,
8325              while new_friend is the in-class definition.
8326
8327              But, if `f' was called before this point, the
8328              instantiation of `f' will have DECL_TI_ARGS corresponding
8329              to `T' but not to `U', references to which might appear
8330              in the definition of `f'.  Previously, the most general
8331              template for an instantiation of `f' was the out-of-class
8332              version; now it is the in-class version.  Therefore, we
8333              run through all specialization of `f', adding to their
8334              DECL_TI_ARGS appropriately.  In particular, they need a
8335              new set of outer arguments, corresponding to the
8336              arguments for this class instantiation.
8337
8338              The same situation can arise with something like this:
8339
8340                friend void f(int);
8341                template <class T> class C {
8342                  friend void f(T) {}
8343                };
8344
8345              when `C<int>' is instantiated.  Now, `f(int)' is defined
8346              in the class.  */
8347
8348           if (!new_friend_is_defn)
8349             /* On the other hand, if the in-class declaration does
8350                *not* provide a definition, then we don't want to alter
8351                existing definitions.  We can just leave everything
8352                alone.  */
8353             ;
8354           else
8355             {
8356               tree new_template = TI_TEMPLATE (new_friend_template_info);
8357               tree new_args = TI_ARGS (new_friend_template_info);
8358
8359               /* Overwrite whatever template info was there before, if
8360                  any, with the new template information pertaining to
8361                  the declaration.  */
8362               DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
8363
8364               if (TREE_CODE (old_decl) != TEMPLATE_DECL)
8365                 {
8366                   /* We should have called reregister_specialization in
8367                      duplicate_decls.  */
8368                   gcc_assert (retrieve_specialization (new_template,
8369                                                        new_args, 0)
8370                               == old_decl);
8371
8372                   /* Instantiate it if the global has already been used.  */
8373                   if (DECL_ODR_USED (old_decl))
8374                     instantiate_decl (old_decl, /*defer_ok=*/true,
8375                                       /*expl_inst_class_mem_p=*/false);
8376                 }
8377               else
8378                 {
8379                   tree t;
8380
8381                   /* Indicate that the old function template is a partial
8382                      instantiation.  */
8383                   DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
8384                     = new_friend_result_template_info;
8385
8386                   gcc_assert (new_template
8387                               == most_general_template (new_template));
8388                   gcc_assert (new_template != old_decl);
8389
8390                   /* Reassign any specializations already in the hash table
8391                      to the new more general template, and add the
8392                      additional template args.  */
8393                   for (t = DECL_TEMPLATE_INSTANTIATIONS (old_decl);
8394                        t != NULL_TREE;
8395                        t = TREE_CHAIN (t))
8396                     {
8397                       tree spec = TREE_VALUE (t);
8398                       spec_entry elt;
8399
8400                       elt.tmpl = old_decl;
8401                       elt.args = DECL_TI_ARGS (spec);
8402                       elt.spec = NULL_TREE;
8403
8404                       htab_remove_elt (decl_specializations, &elt);
8405
8406                       DECL_TI_ARGS (spec)
8407                         = add_outermost_template_args (new_args,
8408                                                        DECL_TI_ARGS (spec));
8409
8410                       register_specialization
8411                         (spec, new_template, DECL_TI_ARGS (spec), true, 0);
8412
8413                     }
8414                   DECL_TEMPLATE_INSTANTIATIONS (old_decl) = NULL_TREE;
8415                 }
8416             }
8417
8418           /* The information from NEW_FRIEND has been merged into OLD_DECL
8419              by duplicate_decls.  */
8420           new_friend = old_decl;
8421         }
8422     }
8423   else
8424     {
8425       tree context = DECL_CONTEXT (new_friend);
8426       bool dependent_p;
8427
8428       /* In the code
8429            template <class T> class C {
8430              template <class U> friend void C1<U>::f (); // case 1
8431              friend void C2<T>::f ();                    // case 2
8432            };
8433          we only need to make sure CONTEXT is a complete type for
8434          case 2.  To distinguish between the two cases, we note that
8435          CONTEXT of case 1 remains dependent type after tsubst while
8436          this isn't true for case 2.  */
8437       ++processing_template_decl;
8438       dependent_p = dependent_type_p (context);
8439       --processing_template_decl;
8440
8441       if (!dependent_p
8442           && !complete_type_or_else (context, NULL_TREE))
8443         return error_mark_node;
8444
8445       if (COMPLETE_TYPE_P (context))
8446         {
8447           /* Check to see that the declaration is really present, and,
8448              possibly obtain an improved declaration.  */
8449           tree fn = check_classfn (context,
8450                                    new_friend, NULL_TREE);
8451
8452           if (fn)
8453             new_friend = fn;
8454         }
8455     }
8456
8457   return new_friend;
8458 }
8459
8460 /* FRIEND_TMPL is a friend TEMPLATE_DECL.  ARGS is the vector of
8461    template arguments, as for tsubst.
8462
8463    Returns an appropriate tsubst'd friend type or error_mark_node on
8464    failure.  */
8465
8466 static tree
8467 tsubst_friend_class (tree friend_tmpl, tree args)
8468 {
8469   tree friend_type;
8470   tree tmpl;
8471   tree context;
8472
8473   context = CP_DECL_CONTEXT (friend_tmpl);
8474
8475   if (context != global_namespace)
8476     {
8477       if (TREE_CODE (context) == NAMESPACE_DECL)
8478         push_nested_namespace (context);
8479       else
8480         push_nested_class (tsubst (context, args, tf_none, NULL_TREE));
8481     }
8482
8483   /* Look for a class template declaration.  We look for hidden names
8484      because two friend declarations of the same template are the
8485      same.  For example, in:
8486
8487        struct A { 
8488          template <typename> friend class F;
8489        };
8490        template <typename> struct B { 
8491          template <typename> friend class F;
8492        };
8493
8494      both F templates are the same.  */
8495   tmpl = lookup_name_real (DECL_NAME (friend_tmpl), 0, 0,
8496                            /*block_p=*/true, 0, 
8497                            LOOKUP_COMPLAIN | LOOKUP_HIDDEN);
8498
8499   /* But, if we don't find one, it might be because we're in a
8500      situation like this:
8501
8502        template <class T>
8503        struct S {
8504          template <class U>
8505          friend struct S;
8506        };
8507
8508      Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
8509      for `S<int>', not the TEMPLATE_DECL.  */
8510   if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
8511     {
8512       tmpl = lookup_name_prefer_type (DECL_NAME (friend_tmpl), 1);
8513       tmpl = maybe_get_template_decl_from_type_decl (tmpl);
8514     }
8515
8516   if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
8517     {
8518       /* The friend template has already been declared.  Just
8519          check to see that the declarations match, and install any new
8520          default parameters.  We must tsubst the default parameters,
8521          of course.  We only need the innermost template parameters
8522          because that is all that redeclare_class_template will look
8523          at.  */
8524       if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
8525           > TMPL_ARGS_DEPTH (args))
8526         {
8527           tree parms;
8528           location_t saved_input_location;
8529           parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
8530                                          args, tf_warning_or_error);
8531
8532           saved_input_location = input_location;
8533           input_location = DECL_SOURCE_LOCATION (friend_tmpl);
8534           redeclare_class_template (TREE_TYPE (tmpl), parms);
8535           input_location = saved_input_location;
8536           
8537         }
8538
8539       friend_type = TREE_TYPE (tmpl);
8540     }
8541   else
8542     {
8543       /* The friend template has not already been declared.  In this
8544          case, the instantiation of the template class will cause the
8545          injection of this template into the global scope.  */
8546       tmpl = tsubst (friend_tmpl, args, tf_warning_or_error, NULL_TREE);
8547       if (tmpl == error_mark_node)
8548         return error_mark_node;
8549
8550       /* The new TMPL is not an instantiation of anything, so we
8551          forget its origins.  We don't reset CLASSTYPE_TI_TEMPLATE for
8552          the new type because that is supposed to be the corresponding
8553          template decl, i.e., TMPL.  */
8554       DECL_USE_TEMPLATE (tmpl) = 0;
8555       DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
8556       CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
8557       CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
8558         = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
8559
8560       /* Inject this template into the global scope.  */
8561       friend_type = TREE_TYPE (pushdecl_top_level_maybe_friend (tmpl, true));
8562     }
8563
8564   if (context != global_namespace)
8565     {
8566       if (TREE_CODE (context) == NAMESPACE_DECL)
8567         pop_nested_namespace (context);
8568       else
8569         pop_nested_class ();
8570     }
8571
8572   return friend_type;
8573 }
8574
8575 /* Returns zero if TYPE cannot be completed later due to circularity.
8576    Otherwise returns one.  */
8577
8578 static int
8579 can_complete_type_without_circularity (tree type)
8580 {
8581   if (type == NULL_TREE || type == error_mark_node)
8582     return 0;
8583   else if (COMPLETE_TYPE_P (type))
8584     return 1;
8585   else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
8586     return can_complete_type_without_circularity (TREE_TYPE (type));
8587   else if (CLASS_TYPE_P (type)
8588            && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
8589     return 0;
8590   else
8591     return 1;
8592 }
8593
8594 /* Apply any attributes which had to be deferred until instantiation
8595    time.  DECL_P, ATTRIBUTES and ATTR_FLAGS are as cplus_decl_attributes;
8596    ARGS, COMPLAIN, IN_DECL are as tsubst.  */
8597
8598 static void
8599 apply_late_template_attributes (tree *decl_p, tree attributes, int attr_flags,
8600                                 tree args, tsubst_flags_t complain, tree in_decl)
8601 {
8602   tree last_dep = NULL_TREE;
8603   tree t;
8604   tree *p;
8605
8606   for (t = attributes; t; t = TREE_CHAIN (t))
8607     if (ATTR_IS_DEPENDENT (t))
8608       {
8609         last_dep = t;
8610         attributes = copy_list (attributes);
8611         break;
8612       }
8613
8614   if (DECL_P (*decl_p))
8615     {
8616       if (TREE_TYPE (*decl_p) == error_mark_node)
8617         return;
8618       p = &DECL_ATTRIBUTES (*decl_p);
8619     }
8620   else
8621     p = &TYPE_ATTRIBUTES (*decl_p);
8622
8623   if (last_dep)
8624     {
8625       tree late_attrs = NULL_TREE;
8626       tree *q = &late_attrs;
8627
8628       for (*p = attributes; *p; )
8629         {
8630           t = *p;
8631           if (ATTR_IS_DEPENDENT (t))
8632             {
8633               *p = TREE_CHAIN (t);
8634               TREE_CHAIN (t) = NULL_TREE;
8635               /* If the first attribute argument is an identifier, don't
8636                  pass it through tsubst.  Attributes like mode, format,
8637                  cleanup and several target specific attributes expect it
8638                  unmodified.  */
8639               if (TREE_VALUE (t)
8640                   && TREE_CODE (TREE_VALUE (t)) == TREE_LIST
8641                   && TREE_VALUE (TREE_VALUE (t))
8642                   && (TREE_CODE (TREE_VALUE (TREE_VALUE (t)))
8643                       == IDENTIFIER_NODE))
8644                 {
8645                   tree chain
8646                     = tsubst_expr (TREE_CHAIN (TREE_VALUE (t)), args, complain,
8647                                    in_decl,
8648                                    /*integral_constant_expression_p=*/false);
8649                   if (chain != TREE_CHAIN (TREE_VALUE (t)))
8650                     TREE_VALUE (t)
8651                       = tree_cons (NULL_TREE, TREE_VALUE (TREE_VALUE (t)),
8652                                    chain);
8653                 }
8654               else
8655                 TREE_VALUE (t)
8656                   = tsubst_expr (TREE_VALUE (t), args, complain, in_decl,
8657                                  /*integral_constant_expression_p=*/false);
8658               *q = t;
8659               q = &TREE_CHAIN (t);
8660             }
8661           else
8662             p = &TREE_CHAIN (t);
8663         }
8664
8665       cplus_decl_attributes (decl_p, late_attrs, attr_flags);
8666     }
8667 }
8668
8669 /* Perform (or defer) access check for typedefs that were referenced
8670    from within the template TMPL code.
8671    This is a subroutine of instantiate_template and instantiate_class_template.
8672    TMPL is the template to consider and TARGS is the list of arguments of
8673    that template.  */
8674
8675 static void
8676 perform_typedefs_access_check (tree tmpl, tree targs)
8677 {
8678   location_t saved_location;
8679   int i;
8680   qualified_typedef_usage_t *iter;
8681
8682   if (!tmpl
8683       || (!CLASS_TYPE_P (tmpl)
8684           && TREE_CODE (tmpl) != FUNCTION_DECL))
8685     return;
8686
8687   saved_location = input_location;
8688   FOR_EACH_VEC_ELT (qualified_typedef_usage_t,
8689                     get_types_needing_access_check (tmpl),
8690                     i, iter)
8691     {
8692       tree type_decl = iter->typedef_decl;
8693       tree type_scope = iter->context;
8694
8695       if (!type_decl || !type_scope || !CLASS_TYPE_P (type_scope))
8696         continue;
8697
8698       if (uses_template_parms (type_decl))
8699         type_decl = tsubst (type_decl, targs, tf_error, NULL_TREE);
8700       if (uses_template_parms (type_scope))
8701         type_scope = tsubst (type_scope, targs, tf_error, NULL_TREE);
8702
8703       /* Make access check error messages point to the location
8704          of the use of the typedef.  */
8705       input_location = iter->locus;
8706       perform_or_defer_access_check (TYPE_BINFO (type_scope),
8707                                      type_decl, type_decl);
8708     }
8709     input_location = saved_location;
8710 }
8711
8712 static tree
8713 instantiate_class_template_1 (tree type)
8714 {
8715   tree templ, args, pattern, t, member;
8716   tree typedecl;
8717   tree pbinfo;
8718   tree base_list;
8719   unsigned int saved_maximum_field_alignment;
8720
8721   if (type == error_mark_node)
8722     return error_mark_node;
8723
8724   if (COMPLETE_OR_OPEN_TYPE_P (type)
8725       || uses_template_parms (type))
8726     return type;
8727
8728   /* Figure out which template is being instantiated.  */
8729   templ = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
8730   gcc_assert (TREE_CODE (templ) == TEMPLATE_DECL);
8731
8732   /* Determine what specialization of the original template to
8733      instantiate.  */
8734   t = most_specialized_class (type, templ, tf_warning_or_error);
8735   if (t == error_mark_node)
8736     {
8737       TYPE_BEING_DEFINED (type) = 1;
8738       return error_mark_node;
8739     }
8740   else if (t)
8741     {
8742       /* This TYPE is actually an instantiation of a partial
8743          specialization.  We replace the innermost set of ARGS with
8744          the arguments appropriate for substitution.  For example,
8745          given:
8746
8747            template <class T> struct S {};
8748            template <class T> struct S<T*> {};
8749
8750          and supposing that we are instantiating S<int*>, ARGS will
8751          presently be {int*} -- but we need {int}.  */
8752       pattern = TREE_TYPE (t);
8753       args = TREE_PURPOSE (t);
8754     }
8755   else
8756     {
8757       pattern = TREE_TYPE (templ);
8758       args = CLASSTYPE_TI_ARGS (type);
8759     }
8760
8761   /* If the template we're instantiating is incomplete, then clearly
8762      there's nothing we can do.  */
8763   if (!COMPLETE_TYPE_P (pattern))
8764     return type;
8765
8766   /* If we've recursively instantiated too many templates, stop.  */
8767   if (! push_tinst_level (type))
8768     return type;
8769
8770   /* Now we're really doing the instantiation.  Mark the type as in
8771      the process of being defined.  */
8772   TYPE_BEING_DEFINED (type) = 1;
8773
8774   /* We may be in the middle of deferred access check.  Disable
8775      it now.  */
8776   push_deferring_access_checks (dk_no_deferred);
8777
8778   push_to_top_level ();
8779   /* Use #pragma pack from the template context.  */
8780   saved_maximum_field_alignment = maximum_field_alignment;
8781   maximum_field_alignment = TYPE_PRECISION (pattern);
8782
8783   SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
8784
8785   /* Set the input location to the most specialized template definition.
8786      This is needed if tsubsting causes an error.  */
8787   typedecl = TYPE_MAIN_DECL (pattern);
8788   input_location = DECL_SOURCE_LOCATION (TYPE_NAME (type)) =
8789     DECL_SOURCE_LOCATION (typedecl);
8790
8791   TYPE_PACKED (type) = TYPE_PACKED (pattern);
8792   TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
8793   TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
8794   TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
8795   if (ANON_AGGR_TYPE_P (pattern))
8796     SET_ANON_AGGR_TYPE_P (type);
8797   if (CLASSTYPE_VISIBILITY_SPECIFIED (pattern))
8798     {
8799       CLASSTYPE_VISIBILITY_SPECIFIED (type) = 1;
8800       CLASSTYPE_VISIBILITY (type) = CLASSTYPE_VISIBILITY (pattern);
8801       /* Adjust visibility for template arguments.  */
8802       determine_visibility (TYPE_MAIN_DECL (type));
8803     }
8804   CLASSTYPE_FINAL (type) = CLASSTYPE_FINAL (pattern);
8805
8806   pbinfo = TYPE_BINFO (pattern);
8807
8808   /* We should never instantiate a nested class before its enclosing
8809      class; we need to look up the nested class by name before we can
8810      instantiate it, and that lookup should instantiate the enclosing
8811      class.  */
8812   gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
8813               || COMPLETE_OR_OPEN_TYPE_P (TYPE_CONTEXT (type)));
8814
8815   base_list = NULL_TREE;
8816   if (BINFO_N_BASE_BINFOS (pbinfo))
8817     {
8818       tree pbase_binfo;
8819       tree pushed_scope;
8820       int i;
8821
8822       /* We must enter the scope containing the type, as that is where
8823          the accessibility of types named in dependent bases are
8824          looked up from.  */
8825       pushed_scope = push_scope (CP_TYPE_CONTEXT (type));
8826
8827       /* Substitute into each of the bases to determine the actual
8828          basetypes.  */
8829       for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
8830         {
8831           tree base;
8832           tree access = BINFO_BASE_ACCESS (pbinfo, i);
8833           tree expanded_bases = NULL_TREE;
8834           int idx, len = 1;
8835
8836           if (PACK_EXPANSION_P (BINFO_TYPE (pbase_binfo)))
8837             {
8838               expanded_bases = 
8839                 tsubst_pack_expansion (BINFO_TYPE (pbase_binfo),
8840                                        args, tf_error, NULL_TREE);
8841               if (expanded_bases == error_mark_node)
8842                 continue;
8843
8844               len = TREE_VEC_LENGTH (expanded_bases);
8845             }
8846
8847           for (idx = 0; idx < len; idx++)
8848             {
8849               if (expanded_bases)
8850                 /* Extract the already-expanded base class.  */
8851                 base = TREE_VEC_ELT (expanded_bases, idx);
8852               else
8853                 /* Substitute to figure out the base class.  */
8854                 base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error, 
8855                                NULL_TREE);
8856
8857               if (base == error_mark_node)
8858                 continue;
8859
8860               base_list = tree_cons (access, base, base_list);
8861               if (BINFO_VIRTUAL_P (pbase_binfo))
8862                 TREE_TYPE (base_list) = integer_type_node;
8863             }
8864         }
8865
8866       /* The list is now in reverse order; correct that.  */
8867       base_list = nreverse (base_list);
8868
8869       if (pushed_scope)
8870         pop_scope (pushed_scope);
8871     }
8872   /* Now call xref_basetypes to set up all the base-class
8873      information.  */
8874   xref_basetypes (type, base_list);
8875
8876   apply_late_template_attributes (&type, TYPE_ATTRIBUTES (pattern),
8877                                   (int) ATTR_FLAG_TYPE_IN_PLACE,
8878                                   args, tf_error, NULL_TREE);
8879   fixup_attribute_variants (type);
8880
8881   /* Now that our base classes are set up, enter the scope of the
8882      class, so that name lookups into base classes, etc. will work
8883      correctly.  This is precisely analogous to what we do in
8884      begin_class_definition when defining an ordinary non-template
8885      class, except we also need to push the enclosing classes.  */
8886   push_nested_class (type);
8887
8888   /* Now members are processed in the order of declaration.  */
8889   for (member = CLASSTYPE_DECL_LIST (pattern);
8890        member; member = TREE_CHAIN (member))
8891     {
8892       tree t = TREE_VALUE (member);
8893
8894       if (TREE_PURPOSE (member))
8895         {
8896           if (TYPE_P (t))
8897             {
8898               /* Build new CLASSTYPE_NESTED_UTDS.  */
8899
8900               tree newtag;
8901               bool class_template_p;
8902
8903               class_template_p = (TREE_CODE (t) != ENUMERAL_TYPE
8904                                   && TYPE_LANG_SPECIFIC (t)
8905                                   && CLASSTYPE_IS_TEMPLATE (t));
8906               /* If the member is a class template, then -- even after
8907                  substitution -- there may be dependent types in the
8908                  template argument list for the class.  We increment
8909                  PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
8910                  that function will assume that no types are dependent
8911                  when outside of a template.  */
8912               if (class_template_p)
8913                 ++processing_template_decl;
8914               newtag = tsubst (t, args, tf_error, NULL_TREE);
8915               if (class_template_p)
8916                 --processing_template_decl;
8917               if (newtag == error_mark_node)
8918                 continue;
8919
8920               if (TREE_CODE (newtag) != ENUMERAL_TYPE)
8921                 {
8922                   tree name = TYPE_IDENTIFIER (t);
8923
8924                   if (class_template_p)
8925                     /* Unfortunately, lookup_template_class sets
8926                        CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
8927                        instantiation (i.e., for the type of a member
8928                        template class nested within a template class.)
8929                        This behavior is required for
8930                        maybe_process_partial_specialization to work
8931                        correctly, but is not accurate in this case;
8932                        the TAG is not an instantiation of anything.
8933                        (The corresponding TEMPLATE_DECL is an
8934                        instantiation, but the TYPE is not.) */
8935                     CLASSTYPE_USE_TEMPLATE (newtag) = 0;
8936
8937                   /* Now, we call pushtag to put this NEWTAG into the scope of
8938                      TYPE.  We first set up the IDENTIFIER_TYPE_VALUE to avoid
8939                      pushtag calling push_template_decl.  We don't have to do
8940                      this for enums because it will already have been done in
8941                      tsubst_enum.  */
8942                   if (name)
8943                     SET_IDENTIFIER_TYPE_VALUE (name, newtag);
8944                   pushtag (name, newtag, /*tag_scope=*/ts_current);
8945                 }
8946             }
8947           else if (TREE_CODE (t) == FUNCTION_DECL
8948                    || DECL_FUNCTION_TEMPLATE_P (t))
8949             {
8950               /* Build new TYPE_METHODS.  */
8951               tree r;
8952
8953               if (TREE_CODE (t) == TEMPLATE_DECL)
8954                 ++processing_template_decl;
8955               r = tsubst (t, args, tf_error, NULL_TREE);
8956               if (TREE_CODE (t) == TEMPLATE_DECL)
8957                 --processing_template_decl;
8958               set_current_access_from_decl (r);
8959               finish_member_declaration (r);
8960               /* Instantiate members marked with attribute used.  */
8961               if (r != error_mark_node && DECL_PRESERVE_P (r))
8962                 mark_used (r);
8963             }
8964           else
8965             {
8966               /* Build new TYPE_FIELDS.  */
8967               if (TREE_CODE (t) == STATIC_ASSERT)
8968                 {
8969                   tree condition = 
8970                     tsubst_expr (STATIC_ASSERT_CONDITION (t), args, 
8971                                  tf_warning_or_error, NULL_TREE,
8972                                  /*integral_constant_expression_p=*/true);
8973                   finish_static_assert (condition,
8974                                         STATIC_ASSERT_MESSAGE (t), 
8975                                         STATIC_ASSERT_SOURCE_LOCATION (t),
8976                                         /*member_p=*/true);
8977                 }
8978               else if (TREE_CODE (t) != CONST_DECL)
8979                 {
8980                   tree r;
8981
8982                   /* The file and line for this declaration, to
8983                      assist in error message reporting.  Since we
8984                      called push_tinst_level above, we don't need to
8985                      restore these.  */
8986                   input_location = DECL_SOURCE_LOCATION (t);
8987
8988                   if (TREE_CODE (t) == TEMPLATE_DECL)
8989                     ++processing_template_decl;
8990                   r = tsubst (t, args, tf_warning_or_error, NULL_TREE);
8991                   if (TREE_CODE (t) == TEMPLATE_DECL)
8992                     --processing_template_decl;
8993                   if (TREE_CODE (r) == VAR_DECL)
8994                     {
8995                       /* In [temp.inst]:
8996
8997                            [t]he initialization (and any associated
8998                            side-effects) of a static data member does
8999                            not occur unless the static data member is
9000                            itself used in a way that requires the
9001                            definition of the static data member to
9002                            exist.
9003
9004                          Therefore, we do not substitute into the
9005                          initialized for the static data member here.  */
9006                       finish_static_data_member_decl
9007                         (r,
9008                          /*init=*/NULL_TREE,
9009                          /*init_const_expr_p=*/false,
9010                          /*asmspec_tree=*/NULL_TREE,
9011                          /*flags=*/0);
9012                       /* Instantiate members marked with attribute used.  */
9013                       if (r != error_mark_node && DECL_PRESERVE_P (r))
9014                         mark_used (r);
9015                     }
9016                   else if (TREE_CODE (r) == FIELD_DECL)
9017                     {
9018                       /* Determine whether R has a valid type and can be
9019                          completed later.  If R is invalid, then it is
9020                          replaced by error_mark_node so that it will not be
9021                          added to TYPE_FIELDS.  */
9022                       tree rtype = TREE_TYPE (r);
9023                       if (can_complete_type_without_circularity (rtype))
9024                         complete_type (rtype);
9025
9026                       if (!COMPLETE_TYPE_P (rtype))
9027                         {
9028                           cxx_incomplete_type_error (r, rtype);
9029                           r = error_mark_node;
9030                         }
9031                     }
9032
9033                   /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
9034                      such a thing will already have been added to the field
9035                      list by tsubst_enum in finish_member_declaration in the
9036                      CLASSTYPE_NESTED_UTDS case above.  */
9037                   if (!(TREE_CODE (r) == TYPE_DECL
9038                         && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
9039                         && DECL_ARTIFICIAL (r)))
9040                     {
9041                       set_current_access_from_decl (r);
9042                       finish_member_declaration (r);
9043                     }
9044                 }
9045             }
9046         }
9047       else
9048         {
9049           if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t))
9050             {
9051               /* Build new CLASSTYPE_FRIEND_CLASSES.  */
9052
9053               tree friend_type = t;
9054               bool adjust_processing_template_decl = false;
9055
9056               if (TREE_CODE (friend_type) == TEMPLATE_DECL)
9057                 {
9058                   /* template <class T> friend class C;  */
9059                   friend_type = tsubst_friend_class (friend_type, args);
9060                   adjust_processing_template_decl = true;
9061                 }
9062               else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
9063                 {
9064                   /* template <class T> friend class C::D;  */
9065                   friend_type = tsubst (friend_type, args,
9066                                         tf_warning_or_error, NULL_TREE);
9067                   if (TREE_CODE (friend_type) == TEMPLATE_DECL)
9068                     friend_type = TREE_TYPE (friend_type);
9069                   adjust_processing_template_decl = true;
9070                 }
9071               else if (TREE_CODE (friend_type) == TYPENAME_TYPE
9072                        || TREE_CODE (friend_type) == TEMPLATE_TYPE_PARM)
9073                 {
9074                   /* This could be either
9075
9076                        friend class T::C;
9077
9078                      when dependent_type_p is false or
9079
9080                        template <class U> friend class T::C;
9081
9082                      otherwise.  */
9083                   friend_type = tsubst (friend_type, args,
9084                                         tf_warning_or_error, NULL_TREE);
9085                   /* Bump processing_template_decl for correct
9086                      dependent_type_p calculation.  */
9087                   ++processing_template_decl;
9088                   if (dependent_type_p (friend_type))
9089                     adjust_processing_template_decl = true;
9090                   --processing_template_decl;
9091                 }
9092               else if (!CLASSTYPE_USE_TEMPLATE (friend_type)
9093                        && hidden_name_p (TYPE_NAME (friend_type)))
9094                 {
9095                   /* friend class C;
9096
9097                      where C hasn't been declared yet.  Let's lookup name
9098                      from namespace scope directly, bypassing any name that
9099                      come from dependent base class.  */
9100                   tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
9101
9102                   /* The call to xref_tag_from_type does injection for friend
9103                      classes.  */
9104                   push_nested_namespace (ns);
9105                   friend_type =
9106                     xref_tag_from_type (friend_type, NULL_TREE,
9107                                         /*tag_scope=*/ts_current);
9108                   pop_nested_namespace (ns);
9109                 }
9110               else if (uses_template_parms (friend_type))
9111                 /* friend class C<T>;  */
9112                 friend_type = tsubst (friend_type, args,
9113                                       tf_warning_or_error, NULL_TREE);
9114               /* Otherwise it's
9115
9116                    friend class C;
9117
9118                  where C is already declared or
9119
9120                    friend class C<int>;
9121
9122                  We don't have to do anything in these cases.  */
9123
9124               if (adjust_processing_template_decl)
9125                 /* Trick make_friend_class into realizing that the friend
9126                    we're adding is a template, not an ordinary class.  It's
9127                    important that we use make_friend_class since it will
9128                    perform some error-checking and output cross-reference
9129                    information.  */
9130                 ++processing_template_decl;
9131
9132               if (friend_type != error_mark_node)
9133                 make_friend_class (type, friend_type, /*complain=*/false);
9134
9135               if (adjust_processing_template_decl)
9136                 --processing_template_decl;
9137             }
9138           else
9139             {
9140               /* Build new DECL_FRIENDLIST.  */
9141               tree r;
9142
9143               /* The file and line for this declaration, to
9144                  assist in error message reporting.  Since we
9145                  called push_tinst_level above, we don't need to
9146                  restore these.  */
9147               input_location = DECL_SOURCE_LOCATION (t);
9148
9149               if (TREE_CODE (t) == TEMPLATE_DECL)
9150                 {
9151                   ++processing_template_decl;
9152                   push_deferring_access_checks (dk_no_check);
9153                 }
9154
9155               r = tsubst_friend_function (t, args);
9156               add_friend (type, r, /*complain=*/false);
9157               if (TREE_CODE (t) == TEMPLATE_DECL)
9158                 {
9159                   pop_deferring_access_checks ();
9160                   --processing_template_decl;
9161                 }
9162             }
9163         }
9164     }
9165
9166   if (CLASSTYPE_LAMBDA_EXPR (type))
9167     {
9168       tree decl = lambda_function (type);
9169       if (decl)
9170         {
9171           tree lambda = CLASSTYPE_LAMBDA_EXPR (type);
9172           if (LAMBDA_EXPR_DEDUCE_RETURN_TYPE_P (lambda))
9173             {
9174               apply_lambda_return_type (lambda, void_type_node);
9175               LAMBDA_EXPR_RETURN_TYPE (lambda) = NULL_TREE;
9176             }
9177           instantiate_decl (decl, false, false);
9178           maybe_add_lambda_conv_op (type);
9179         }
9180       else
9181         gcc_assert (errorcount);
9182     }
9183
9184   /* Set the file and line number information to whatever is given for
9185      the class itself.  This puts error messages involving generated
9186      implicit functions at a predictable point, and the same point
9187      that would be used for non-template classes.  */
9188   input_location = DECL_SOURCE_LOCATION (typedecl);
9189
9190   unreverse_member_declarations (type);
9191   finish_struct_1 (type);
9192   TYPE_BEING_DEFINED (type) = 0;
9193
9194   /* We don't instantiate default arguments for member functions.  14.7.1:
9195
9196      The implicit instantiation of a class template specialization causes
9197      the implicit instantiation of the declarations, but not of the
9198      definitions or default arguments, of the class member functions,
9199      member classes, static data members and member templates....  */
9200
9201   /* Some typedefs referenced from within the template code need to be access
9202      checked at template instantiation time, i.e now. These types were
9203      added to the template at parsing time. Let's get those and perform
9204      the access checks then.  */
9205   perform_typedefs_access_check (pattern, args);
9206   perform_deferred_access_checks ();
9207   pop_nested_class ();
9208   maximum_field_alignment = saved_maximum_field_alignment;
9209   pop_from_top_level ();
9210   pop_deferring_access_checks ();
9211   pop_tinst_level ();
9212
9213   /* The vtable for a template class can be emitted in any translation
9214      unit in which the class is instantiated.  When there is no key
9215      method, however, finish_struct_1 will already have added TYPE to
9216      the keyed_classes list.  */
9217   if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
9218     keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
9219
9220   return type;
9221 }
9222
9223 /* Wrapper for instantiate_class_template_1.  */
9224
9225 tree
9226 instantiate_class_template (tree type)
9227 {
9228   tree ret;
9229   timevar_push (TV_TEMPLATE_INST);
9230   ret = instantiate_class_template_1 (type);
9231   timevar_pop (TV_TEMPLATE_INST);
9232   return ret;
9233 }
9234
9235 static tree
9236 tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
9237 {
9238   tree r;
9239
9240   if (!t)
9241     r = t;
9242   else if (TYPE_P (t))
9243     r = tsubst (t, args, complain, in_decl);
9244   else
9245     {
9246       if (!(complain & tf_warning))
9247         ++c_inhibit_evaluation_warnings;
9248       r = tsubst_expr (t, args, complain, in_decl,
9249                        /*integral_constant_expression_p=*/true);
9250       if (!(complain & tf_warning))
9251         --c_inhibit_evaluation_warnings;
9252       /* Preserve the raw-reference nature of T.  */
9253       if (TREE_TYPE (t) && TREE_CODE (TREE_TYPE (t)) == REFERENCE_TYPE
9254           && REFERENCE_REF_P (r))
9255         r = TREE_OPERAND (r, 0);
9256     }
9257   return r;
9258 }
9259
9260 /* Given a function parameter pack TMPL_PARM and some function parameters
9261    instantiated from it at *SPEC_P, return a NONTYPE_ARGUMENT_PACK of them
9262    and set *SPEC_P to point at the next point in the list.  */
9263
9264 static tree
9265 extract_fnparm_pack (tree tmpl_parm, tree *spec_p)
9266 {
9267   /* Collect all of the extra "packed" parameters into an
9268      argument pack.  */
9269   tree parmvec;
9270   tree parmtypevec;
9271   tree argpack = make_node (NONTYPE_ARGUMENT_PACK);
9272   tree argtypepack = cxx_make_type (TYPE_ARGUMENT_PACK);
9273   tree spec_parm = *spec_p;
9274   int i, len;
9275
9276   for (len = 0; spec_parm; ++len, spec_parm = TREE_CHAIN (spec_parm))
9277     if (tmpl_parm
9278         && !function_parameter_expanded_from_pack_p (spec_parm, tmpl_parm))
9279       break;
9280
9281   /* Fill in PARMVEC and PARMTYPEVEC with all of the parameters.  */
9282   parmvec = make_tree_vec (len);
9283   parmtypevec = make_tree_vec (len);
9284   spec_parm = *spec_p;
9285   for (i = 0; i < len; i++, spec_parm = DECL_CHAIN (spec_parm))
9286     {
9287       TREE_VEC_ELT (parmvec, i) = spec_parm;
9288       TREE_VEC_ELT (parmtypevec, i) = TREE_TYPE (spec_parm);
9289     }
9290
9291   /* Build the argument packs.  */
9292   SET_ARGUMENT_PACK_ARGS (argpack, parmvec);
9293   SET_ARGUMENT_PACK_ARGS (argtypepack, parmtypevec);
9294   TREE_TYPE (argpack) = argtypepack;
9295   *spec_p = spec_parm;
9296
9297   return argpack;
9298 }
9299
9300 /* Give a chain SPEC_PARM of PARM_DECLs, pack them into a
9301    NONTYPE_ARGUMENT_PACK.  */
9302
9303 static tree
9304 make_fnparm_pack (tree spec_parm)
9305 {
9306   return extract_fnparm_pack (NULL_TREE, &spec_parm);
9307 }
9308
9309 /* Substitute ARGS into T, which is an pack expansion
9310    (i.e. TYPE_PACK_EXPANSION or EXPR_PACK_EXPANSION). Returns a
9311    TREE_VEC with the substituted arguments, a PACK_EXPANSION_* node
9312    (if only a partial substitution could be performed) or
9313    ERROR_MARK_NODE if there was an error.  */
9314 tree
9315 tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
9316                        tree in_decl)
9317 {
9318   tree pattern;
9319   tree pack, packs = NULL_TREE;
9320   bool unsubstituted_packs = false;
9321   bool real_packs = false;
9322   int missing_level = 0;
9323   int i, len = -1;
9324   tree result;
9325   htab_t saved_local_specializations = NULL;
9326   bool need_local_specializations = false;
9327   int levels;
9328
9329   gcc_assert (PACK_EXPANSION_P (t));
9330   pattern = PACK_EXPANSION_PATTERN (t);
9331
9332   /* Add in any args remembered from an earlier partial instantiation.  */
9333   args = add_to_template_args (PACK_EXPANSION_EXTRA_ARGS (t), args);
9334
9335   levels = TMPL_ARGS_DEPTH (args);
9336
9337   /* Determine the argument packs that will instantiate the parameter
9338      packs used in the expansion expression. While we're at it,
9339      compute the number of arguments to be expanded and make sure it
9340      is consistent.  */
9341   for (pack = PACK_EXPANSION_PARAMETER_PACKS (t); pack; 
9342        pack = TREE_CHAIN (pack))
9343     {
9344       tree parm_pack = TREE_VALUE (pack);
9345       tree arg_pack = NULL_TREE;
9346       tree orig_arg = NULL_TREE;
9347       int level = 0;
9348
9349       if (TREE_CODE (parm_pack) == BASES)
9350        {
9351          if (BASES_DIRECT (parm_pack))
9352            return calculate_direct_bases (tsubst_expr (BASES_TYPE (parm_pack),
9353                                                         args, complain, in_decl, false));
9354          else
9355            return calculate_bases (tsubst_expr (BASES_TYPE (parm_pack),
9356                                                  args, complain, in_decl, false));
9357        }
9358       if (TREE_CODE (parm_pack) == PARM_DECL)
9359         {
9360           if (PACK_EXPANSION_LOCAL_P (t))
9361             arg_pack = retrieve_local_specialization (parm_pack);
9362           else
9363             {
9364               /* We can't rely on local_specializations for a parameter
9365                  name used later in a function declaration (such as in a
9366                  late-specified return type).  Even if it exists, it might
9367                  have the wrong value for a recursive call.  Just make a
9368                  dummy decl, since it's only used for its type.  */
9369               arg_pack = tsubst_decl (parm_pack, args, complain);
9370               if (arg_pack && FUNCTION_PARAMETER_PACK_P (arg_pack))
9371                 /* Partial instantiation of the parm_pack, we can't build
9372                    up an argument pack yet.  */
9373                 arg_pack = NULL_TREE;
9374               else
9375                 arg_pack = make_fnparm_pack (arg_pack);
9376               need_local_specializations = true;
9377             }
9378         }
9379       else
9380         {
9381           int idx;
9382           template_parm_level_and_index (parm_pack, &level, &idx);
9383
9384           if (level <= levels)
9385             arg_pack = TMPL_ARG (args, level, idx);
9386         }
9387
9388       orig_arg = arg_pack;
9389       if (arg_pack && TREE_CODE (arg_pack) == ARGUMENT_PACK_SELECT)
9390         arg_pack = ARGUMENT_PACK_SELECT_FROM_PACK (arg_pack);
9391       
9392       if (arg_pack && !ARGUMENT_PACK_P (arg_pack))
9393         /* This can only happen if we forget to expand an argument
9394            pack somewhere else. Just return an error, silently.  */
9395         {
9396           result = make_tree_vec (1);
9397           TREE_VEC_ELT (result, 0) = error_mark_node;
9398           return result;
9399         }
9400
9401       if (arg_from_parm_pack_p (arg_pack, parm_pack))
9402         /* The argument pack that the parameter maps to is just an
9403            expansion of the parameter itself, such as one would find
9404            in the implicit typedef of a class inside the class itself.
9405            Consider this parameter "unsubstituted", so that we will
9406            maintain the outer pack expansion.  */
9407         arg_pack = NULL_TREE;
9408           
9409       if (arg_pack)
9410         {
9411           int my_len = 
9412             TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack));
9413
9414           /* Don't bother trying to do a partial substitution with
9415              incomplete packs; we'll try again after deduction.  */
9416           if (ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
9417             return t;
9418
9419           if (len < 0)
9420             len = my_len;
9421           else if (len != my_len)
9422             {
9423               if (!(complain & tf_error))
9424                 /* Fail quietly.  */;
9425               else if (TREE_CODE (t) == TYPE_PACK_EXPANSION)
9426                 error ("mismatched argument pack lengths while expanding "
9427                        "%<%T%>",
9428                        pattern);
9429               else
9430                 error ("mismatched argument pack lengths while expanding "
9431                        "%<%E%>",
9432                        pattern);
9433               return error_mark_node;
9434             }
9435
9436           if (TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack)) == 1
9437               && PACK_EXPANSION_P (TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack),
9438                                                  0)))
9439             /* This isn't a real argument pack yet.  */;
9440           else
9441             real_packs = true;
9442
9443           /* Keep track of the parameter packs and their corresponding
9444              argument packs.  */
9445           packs = tree_cons (parm_pack, arg_pack, packs);
9446           TREE_TYPE (packs) = orig_arg;
9447         }
9448       else
9449         {
9450           /* We can't substitute for this parameter pack.  We use a flag as
9451              well as the missing_level counter because function parameter
9452              packs don't have a level.  */
9453           unsubstituted_packs = true;
9454           if (!missing_level || missing_level > level)
9455             missing_level = level;
9456         }
9457     }
9458
9459   /* We cannot expand this expansion expression, because we don't have
9460      all of the argument packs we need.  */
9461   if (unsubstituted_packs)
9462     {
9463       if (real_packs)
9464         {
9465           /* We got some full packs, but we can't substitute them in until we
9466              have values for all the packs.  So remember these until then.  */
9467           tree save_args;
9468
9469           t = make_pack_expansion (pattern);
9470
9471           /* The call to add_to_template_args above assumes no overlap
9472              between saved args and new args, so prune away any fake
9473              args, i.e. those that satisfied arg_from_parm_pack_p above.  */
9474           if (missing_level && levels >= missing_level)
9475             {
9476               gcc_assert (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args)
9477                           && missing_level > 1);
9478               TREE_VEC_LENGTH (args) = missing_level - 1;
9479               save_args = copy_node (args);
9480               TREE_VEC_LENGTH (args) = levels;
9481             }
9482           else
9483             save_args = args;
9484
9485           PACK_EXPANSION_EXTRA_ARGS (t) = save_args;
9486         }
9487       else
9488         {
9489           /* There were no real arguments, we're just replacing a parameter
9490              pack with another version of itself. Substitute into the
9491              pattern and return a PACK_EXPANSION_*. The caller will need to
9492              deal with that.  */
9493           if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
9494             t = tsubst_expr (pattern, args, complain, in_decl,
9495                              /*integral_constant_expression_p=*/false);
9496           else
9497             t = tsubst (pattern, args, complain, in_decl);
9498           t = make_pack_expansion (t);
9499         }
9500       return t;
9501     }
9502
9503   /* We could not find any argument packs that work.  */
9504   if (len < 0)
9505     return error_mark_node;
9506
9507   if (need_local_specializations)
9508     {
9509       /* We're in a late-specified return type, so create our own local
9510          specializations table; the current table is either NULL or (in the
9511          case of recursive unification) might have bindings that we don't
9512          want to use or alter.  */
9513       saved_local_specializations = local_specializations;
9514       local_specializations = htab_create (37,
9515                                            hash_local_specialization,
9516                                            eq_local_specializations,
9517                                            NULL);
9518     }
9519
9520   /* For each argument in each argument pack, substitute into the
9521      pattern.  */
9522   result = make_tree_vec (len);
9523   for (i = 0; i < len; ++i)
9524     {
9525       /* For parameter pack, change the substitution of the parameter
9526          pack to the ith argument in its argument pack, then expand
9527          the pattern.  */
9528       for (pack = packs; pack; pack = TREE_CHAIN (pack))
9529         {
9530           tree parm = TREE_PURPOSE (pack);
9531           tree arg;
9532
9533           /* Select the Ith argument from the pack.  */
9534           if (TREE_CODE (parm) == PARM_DECL)
9535             {
9536               if (i == 0)
9537                 {
9538                   arg = make_node (ARGUMENT_PACK_SELECT);
9539                   ARGUMENT_PACK_SELECT_FROM_PACK (arg) = TREE_VALUE (pack);
9540                   mark_used (parm);
9541                   register_local_specialization (arg, parm);
9542                 }
9543               else
9544                 arg = retrieve_local_specialization (parm);
9545             }
9546           else
9547             {
9548               int idx, level;
9549               template_parm_level_and_index (parm, &level, &idx);
9550
9551               if (i == 0)
9552                 {
9553                   arg = make_node (ARGUMENT_PACK_SELECT);
9554                   ARGUMENT_PACK_SELECT_FROM_PACK (arg) = TREE_VALUE (pack);
9555                   /* Update the corresponding argument.  */
9556                   TMPL_ARG (args, level, idx) = arg;
9557                 }
9558               else
9559                 /* Re-use the ARGUMENT_PACK_SELECT.  */
9560                 arg = TMPL_ARG (args, level, idx);
9561             }
9562           ARGUMENT_PACK_SELECT_INDEX (arg) = i;
9563         }
9564
9565       /* Substitute into the PATTERN with the altered arguments.  */
9566       if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
9567         TREE_VEC_ELT (result, i) = 
9568           tsubst_expr (pattern, args, complain, in_decl,
9569                        /*integral_constant_expression_p=*/false);
9570       else
9571         TREE_VEC_ELT (result, i) = tsubst (pattern, args, complain, in_decl);
9572
9573       if (TREE_VEC_ELT (result, i) == error_mark_node)
9574         {
9575           result = error_mark_node;
9576           break;
9577         }
9578     }
9579
9580   /* Update ARGS to restore the substitution from parameter packs to
9581      their argument packs.  */
9582   for (pack = packs; pack; pack = TREE_CHAIN (pack))
9583     {
9584       tree parm = TREE_PURPOSE (pack);
9585
9586       if (TREE_CODE (parm) == PARM_DECL)
9587         register_local_specialization (TREE_TYPE (pack), parm);
9588       else
9589         {
9590           int idx, level;
9591           template_parm_level_and_index (parm, &level, &idx);
9592           
9593           /* Update the corresponding argument.  */
9594           if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
9595             TREE_VEC_ELT (TREE_VEC_ELT (args, level -1 ), idx) =
9596               TREE_TYPE (pack);
9597           else
9598             TREE_VEC_ELT (args, idx) = TREE_TYPE (pack);
9599         }
9600     }
9601
9602   if (need_local_specializations)
9603     {
9604       htab_delete (local_specializations);
9605       local_specializations = saved_local_specializations;
9606     }
9607   
9608   return result;
9609 }
9610
9611 /* Given PARM_DECL PARM, find the corresponding PARM_DECL in the template
9612    TMPL.  We do this using DECL_PARM_INDEX, which should work even with
9613    parameter packs; all parms generated from a function parameter pack will
9614    have the same DECL_PARM_INDEX.  */
9615
9616 tree
9617 get_pattern_parm (tree parm, tree tmpl)
9618 {
9619   tree pattern = DECL_TEMPLATE_RESULT (tmpl);
9620   tree patparm;
9621
9622   if (DECL_ARTIFICIAL (parm))
9623     {
9624       for (patparm = DECL_ARGUMENTS (pattern);
9625            patparm; patparm = DECL_CHAIN (patparm))
9626         if (DECL_ARTIFICIAL (patparm)
9627             && DECL_NAME (parm) == DECL_NAME (patparm))
9628           break;
9629     }
9630   else
9631     {
9632       patparm = FUNCTION_FIRST_USER_PARM (DECL_TEMPLATE_RESULT (tmpl));
9633       patparm = chain_index (DECL_PARM_INDEX (parm)-1, patparm);
9634       gcc_assert (DECL_PARM_INDEX (patparm)
9635                   == DECL_PARM_INDEX (parm));
9636     }
9637
9638   return patparm;
9639 }
9640
9641 /* Substitute ARGS into the vector or list of template arguments T.  */
9642
9643 static tree
9644 tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
9645 {
9646   tree orig_t = t;
9647   int len, need_new = 0, i, expanded_len_adjust = 0, out;
9648   tree *elts;
9649
9650   if (t == error_mark_node)
9651     return error_mark_node;
9652
9653   len = TREE_VEC_LENGTH (t);
9654   elts = XALLOCAVEC (tree, len);
9655
9656   for (i = 0; i < len; i++)
9657     {
9658       tree orig_arg = TREE_VEC_ELT (t, i);
9659       tree new_arg;
9660
9661       if (TREE_CODE (orig_arg) == TREE_VEC)
9662         new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
9663       else if (PACK_EXPANSION_P (orig_arg))
9664         {
9665           /* Substitute into an expansion expression.  */
9666           new_arg = tsubst_pack_expansion (orig_arg, args, complain, in_decl);
9667
9668           if (TREE_CODE (new_arg) == TREE_VEC)
9669             /* Add to the expanded length adjustment the number of
9670                expanded arguments. We subtract one from this
9671                measurement, because the argument pack expression
9672                itself is already counted as 1 in
9673                LEN. EXPANDED_LEN_ADJUST can actually be negative, if
9674                the argument pack is empty.  */
9675             expanded_len_adjust += TREE_VEC_LENGTH (new_arg) - 1;
9676         }
9677       else if (ARGUMENT_PACK_P (orig_arg))
9678         {
9679           /* Substitute into each of the arguments.  */
9680           new_arg = TYPE_P (orig_arg)
9681             ? cxx_make_type (TREE_CODE (orig_arg))
9682             : make_node (TREE_CODE (orig_arg));
9683           
9684           SET_ARGUMENT_PACK_ARGS (
9685             new_arg,
9686             tsubst_template_args (ARGUMENT_PACK_ARGS (orig_arg),
9687                                   args, complain, in_decl));
9688
9689           if (ARGUMENT_PACK_ARGS (new_arg) == error_mark_node)
9690             new_arg = error_mark_node;
9691
9692           if (TREE_CODE (new_arg) == NONTYPE_ARGUMENT_PACK) {
9693             TREE_TYPE (new_arg) = tsubst (TREE_TYPE (orig_arg), args,
9694                                           complain, in_decl);
9695             TREE_CONSTANT (new_arg) = TREE_CONSTANT (orig_arg);
9696
9697             if (TREE_TYPE (new_arg) == error_mark_node)
9698               new_arg = error_mark_node;
9699           }
9700         }
9701       else
9702         new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
9703
9704       if (new_arg == error_mark_node)
9705         return error_mark_node;
9706
9707       elts[i] = new_arg;
9708       if (new_arg != orig_arg)
9709         need_new = 1;
9710     }
9711
9712   if (!need_new)
9713     return t;
9714
9715   /* Make space for the expanded arguments coming from template
9716      argument packs.  */
9717   t = make_tree_vec (len + expanded_len_adjust);
9718   /* ORIG_T can contain TREE_VECs. That happens if ORIG_T contains the
9719      arguments for a member template.
9720      In that case each TREE_VEC in ORIG_T represents a level of template
9721      arguments, and ORIG_T won't carry any non defaulted argument count.
9722      It will rather be the nested TREE_VECs that will carry one.
9723      In other words, ORIG_T carries a non defaulted argument count only
9724      if it doesn't contain any nested TREE_VEC.  */
9725   if (NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t))
9726     {
9727       int count = GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t);
9728       count += expanded_len_adjust;
9729       SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (t, count);
9730     }
9731   for (i = 0, out = 0; i < len; i++)
9732     {
9733       if ((PACK_EXPANSION_P (TREE_VEC_ELT (orig_t, i))
9734            || ARGUMENT_PACK_P (TREE_VEC_ELT (orig_t, i)))
9735           && TREE_CODE (elts[i]) == TREE_VEC)
9736         {
9737           int idx;
9738
9739           /* Now expand the template argument pack "in place".  */
9740           for (idx = 0; idx < TREE_VEC_LENGTH (elts[i]); idx++, out++)
9741             TREE_VEC_ELT (t, out) = TREE_VEC_ELT (elts[i], idx);
9742         }
9743       else
9744         {
9745           TREE_VEC_ELT (t, out) = elts[i];
9746           out++;
9747         }
9748     }
9749
9750   return t;
9751 }
9752
9753 /* Return the result of substituting ARGS into the template parameters
9754    given by PARMS.  If there are m levels of ARGS and m + n levels of
9755    PARMS, then the result will contain n levels of PARMS.  For
9756    example, if PARMS is `template <class T> template <class U>
9757    template <T*, U, class V>' and ARGS is {{int}, {double}} then the
9758    result will be `template <int*, double, class V>'.  */
9759
9760 static tree
9761 tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
9762 {
9763   tree r = NULL_TREE;
9764   tree* new_parms;
9765
9766   /* When substituting into a template, we must set
9767      PROCESSING_TEMPLATE_DECL as the template parameters may be
9768      dependent if they are based on one-another, and the dependency
9769      predicates are short-circuit outside of templates.  */
9770   ++processing_template_decl;
9771
9772   for (new_parms = &r;
9773        TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
9774        new_parms = &(TREE_CHAIN (*new_parms)),
9775          parms = TREE_CHAIN (parms))
9776     {
9777       tree new_vec =
9778         make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
9779       int i;
9780
9781       for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
9782         {
9783           tree tuple;
9784
9785           if (parms == error_mark_node)
9786             continue;
9787
9788           tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
9789
9790           if (tuple == error_mark_node)
9791             continue;
9792
9793           TREE_VEC_ELT (new_vec, i) =
9794             tsubst_template_parm (tuple, args, complain);
9795         }
9796
9797       *new_parms =
9798         tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
9799                              - TMPL_ARGS_DEPTH (args)),
9800                    new_vec, NULL_TREE);
9801     }
9802
9803   --processing_template_decl;
9804
9805   return r;
9806 }
9807
9808 /* Return the result of substituting ARGS into one template parameter
9809    given by T. T Must be a TREE_LIST which TREE_VALUE is the template
9810    parameter and which TREE_PURPOSE is the default argument of the
9811    template parameter.  */
9812
9813 static tree
9814 tsubst_template_parm (tree t, tree args, tsubst_flags_t complain)
9815 {
9816   tree default_value, parm_decl;
9817
9818   if (args == NULL_TREE
9819       || t == NULL_TREE
9820       || t == error_mark_node)
9821     return t;
9822
9823   gcc_assert (TREE_CODE (t) == TREE_LIST);
9824
9825   default_value = TREE_PURPOSE (t);
9826   parm_decl = TREE_VALUE (t);
9827
9828   parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
9829   if (TREE_CODE (parm_decl) == PARM_DECL
9830       && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl), complain))
9831     parm_decl = error_mark_node;
9832   default_value = tsubst_template_arg (default_value, args,
9833                                        complain, NULL_TREE);
9834
9835   return build_tree_list (default_value, parm_decl);
9836 }
9837
9838 /* Substitute the ARGS into the indicated aggregate (or enumeration)
9839    type T.  If T is not an aggregate or enumeration type, it is
9840    handled as if by tsubst.  IN_DECL is as for tsubst.  If
9841    ENTERING_SCOPE is nonzero, T is the context for a template which
9842    we are presently tsubst'ing.  Return the substituted value.  */
9843
9844 static tree
9845 tsubst_aggr_type (tree t,
9846                   tree args,
9847                   tsubst_flags_t complain,
9848                   tree in_decl,
9849                   int entering_scope)
9850 {
9851   if (t == NULL_TREE)
9852     return NULL_TREE;
9853
9854   switch (TREE_CODE (t))
9855     {
9856     case RECORD_TYPE:
9857       if (TYPE_PTRMEMFUNC_P (t))
9858         return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
9859
9860       /* Else fall through.  */
9861     case ENUMERAL_TYPE:
9862     case UNION_TYPE:
9863       if (TYPE_TEMPLATE_INFO (t) && uses_template_parms (t))
9864         {
9865           tree argvec;
9866           tree context;
9867           tree r;
9868           int saved_unevaluated_operand;
9869           int saved_inhibit_evaluation_warnings;
9870
9871           /* In "sizeof(X<I>)" we need to evaluate "I".  */
9872           saved_unevaluated_operand = cp_unevaluated_operand;
9873           cp_unevaluated_operand = 0;
9874           saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
9875           c_inhibit_evaluation_warnings = 0;
9876
9877           /* First, determine the context for the type we are looking
9878              up.  */
9879           context = TYPE_CONTEXT (t);
9880           if (context && TYPE_P (context))
9881             {
9882               context = tsubst_aggr_type (context, args, complain,
9883                                           in_decl, /*entering_scope=*/1);
9884               /* If context is a nested class inside a class template,
9885                  it may still need to be instantiated (c++/33959).  */
9886               context = complete_type (context);
9887             }
9888
9889           /* Then, figure out what arguments are appropriate for the
9890              type we are trying to find.  For example, given:
9891
9892                template <class T> struct S;
9893                template <class T, class U> void f(T, U) { S<U> su; }
9894
9895              and supposing that we are instantiating f<int, double>,
9896              then our ARGS will be {int, double}, but, when looking up
9897              S we only want {double}.  */
9898           argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
9899                                          complain, in_decl);
9900           if (argvec == error_mark_node)
9901             r = error_mark_node;
9902           else
9903             {
9904               r = lookup_template_class (t, argvec, in_decl, context,
9905                                          entering_scope, complain);
9906               r = cp_build_qualified_type_real (r, cp_type_quals (t), complain);
9907             }
9908
9909           cp_unevaluated_operand = saved_unevaluated_operand;
9910           c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
9911
9912           return r;
9913         }
9914       else
9915         /* This is not a template type, so there's nothing to do.  */
9916         return t;
9917
9918     default:
9919       return tsubst (t, args, complain, in_decl);
9920     }
9921 }
9922
9923 /* Substitute into the default argument ARG (a default argument for
9924    FN), which has the indicated TYPE.  */
9925
9926 tree
9927 tsubst_default_argument (tree fn, tree type, tree arg)
9928 {
9929   tree saved_class_ptr = NULL_TREE;
9930   tree saved_class_ref = NULL_TREE;
9931
9932   /* This can happen in invalid code.  */
9933   if (TREE_CODE (arg) == DEFAULT_ARG)
9934     return arg;
9935
9936   /* This default argument came from a template.  Instantiate the
9937      default argument here, not in tsubst.  In the case of
9938      something like:
9939
9940        template <class T>
9941        struct S {
9942          static T t();
9943          void f(T = t());
9944        };
9945
9946      we must be careful to do name lookup in the scope of S<T>,
9947      rather than in the current class.  */
9948   push_access_scope (fn);
9949   /* The "this" pointer is not valid in a default argument.  */
9950   if (cfun)
9951     {
9952       saved_class_ptr = current_class_ptr;
9953       cp_function_chain->x_current_class_ptr = NULL_TREE;
9954       saved_class_ref = current_class_ref;
9955       cp_function_chain->x_current_class_ref = NULL_TREE;
9956     }
9957
9958   push_deferring_access_checks(dk_no_deferred);
9959   /* The default argument expression may cause implicitly defined
9960      member functions to be synthesized, which will result in garbage
9961      collection.  We must treat this situation as if we were within
9962      the body of function so as to avoid collecting live data on the
9963      stack.  */
9964   ++function_depth;
9965   arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
9966                      tf_warning_or_error, NULL_TREE,
9967                      /*integral_constant_expression_p=*/false);
9968   --function_depth;
9969   pop_deferring_access_checks();
9970
9971   /* Restore the "this" pointer.  */
9972   if (cfun)
9973     {
9974       cp_function_chain->x_current_class_ptr = saved_class_ptr;
9975       cp_function_chain->x_current_class_ref = saved_class_ref;
9976     }
9977
9978   /* Make sure the default argument is reasonable.  */
9979   arg = check_default_argument (type, arg);
9980
9981   pop_access_scope (fn);
9982
9983   return arg;
9984 }
9985
9986 /* Substitute into all the default arguments for FN.  */
9987
9988 static void
9989 tsubst_default_arguments (tree fn)
9990 {
9991   tree arg;
9992   tree tmpl_args;
9993
9994   tmpl_args = DECL_TI_ARGS (fn);
9995
9996   /* If this function is not yet instantiated, we certainly don't need
9997      its default arguments.  */
9998   if (uses_template_parms (tmpl_args))
9999     return;
10000   /* Don't do this again for clones.  */
10001   if (DECL_CLONED_FUNCTION_P (fn))
10002     return;
10003
10004   for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
10005        arg;
10006        arg = TREE_CHAIN (arg))
10007     if (TREE_PURPOSE (arg))
10008       TREE_PURPOSE (arg) = tsubst_default_argument (fn,
10009                                                     TREE_VALUE (arg),
10010                                                     TREE_PURPOSE (arg));
10011 }
10012
10013 /* Substitute the ARGS into the T, which is a _DECL.  Return the
10014    result of the substitution.  Issue error and warning messages under
10015    control of COMPLAIN.  */
10016
10017 static tree
10018 tsubst_decl (tree t, tree args, tsubst_flags_t complain)
10019 {
10020 #define RETURN(EXP) do { r = (EXP); goto out; } while(0)
10021   location_t saved_loc;
10022   tree r = NULL_TREE;
10023   tree in_decl = t;
10024   hashval_t hash = 0;
10025
10026   /* Set the filename and linenumber to improve error-reporting.  */
10027   saved_loc = input_location;
10028   input_location = DECL_SOURCE_LOCATION (t);
10029
10030   switch (TREE_CODE (t))
10031     {
10032     case TEMPLATE_DECL:
10033       {
10034         /* We can get here when processing a member function template,
10035            member class template, or template template parameter.  */
10036         tree decl = DECL_TEMPLATE_RESULT (t);
10037         tree spec;
10038         tree tmpl_args;
10039         tree full_args;
10040
10041         if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
10042           {
10043             /* Template template parameter is treated here.  */
10044             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10045             if (new_type == error_mark_node)
10046               RETURN (error_mark_node);
10047
10048             r = copy_decl (t);
10049             DECL_CHAIN (r) = NULL_TREE;
10050             TREE_TYPE (r) = new_type;
10051             DECL_TEMPLATE_RESULT (r)
10052               = build_decl (DECL_SOURCE_LOCATION (decl),
10053                             TYPE_DECL, DECL_NAME (decl), new_type);
10054             DECL_TEMPLATE_PARMS (r)
10055               = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
10056                                        complain);
10057             TYPE_NAME (new_type) = r;
10058             break;
10059           }
10060
10061         /* We might already have an instance of this template.
10062            The ARGS are for the surrounding class type, so the
10063            full args contain the tsubst'd args for the context,
10064            plus the innermost args from the template decl.  */
10065         tmpl_args = DECL_CLASS_TEMPLATE_P (t)
10066           ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
10067           : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
10068         /* Because this is a template, the arguments will still be
10069            dependent, even after substitution.  If
10070            PROCESSING_TEMPLATE_DECL is not set, the dependency
10071            predicates will short-circuit.  */
10072         ++processing_template_decl;
10073         full_args = tsubst_template_args (tmpl_args, args,
10074                                           complain, in_decl);
10075         --processing_template_decl;
10076         if (full_args == error_mark_node)
10077           RETURN (error_mark_node);
10078
10079         /* If this is a default template template argument,
10080            tsubst might not have changed anything.  */
10081         if (full_args == tmpl_args)
10082           RETURN (t);
10083
10084         hash = hash_tmpl_and_args (t, full_args);
10085         spec = retrieve_specialization (t, full_args, hash);
10086         if (spec != NULL_TREE)
10087           {
10088             r = spec;
10089             break;
10090           }
10091
10092         /* Make a new template decl.  It will be similar to the
10093            original, but will record the current template arguments.
10094            We also create a new function declaration, which is just
10095            like the old one, but points to this new template, rather
10096            than the old one.  */
10097         r = copy_decl (t);
10098         gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
10099         DECL_CHAIN (r) = NULL_TREE;
10100
10101         DECL_TEMPLATE_INFO (r) = build_template_info (t, args);
10102
10103         if (TREE_CODE (decl) == TYPE_DECL
10104             && !TYPE_DECL_ALIAS_P (decl))
10105           {
10106             tree new_type;
10107             ++processing_template_decl;
10108             new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10109             --processing_template_decl;
10110             if (new_type == error_mark_node)
10111               RETURN (error_mark_node);
10112
10113             TREE_TYPE (r) = new_type;
10114             CLASSTYPE_TI_TEMPLATE (new_type) = r;
10115             DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
10116             DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
10117             DECL_CONTEXT (r) = TYPE_CONTEXT (new_type);
10118           }
10119         else
10120           {
10121             tree new_decl;
10122             ++processing_template_decl;
10123             new_decl = tsubst (decl, args, complain, in_decl);
10124             --processing_template_decl;
10125             if (new_decl == error_mark_node)
10126               RETURN (error_mark_node);
10127
10128             DECL_TEMPLATE_RESULT (r) = new_decl;
10129             DECL_TI_TEMPLATE (new_decl) = r;
10130             TREE_TYPE (r) = TREE_TYPE (new_decl);
10131             DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
10132             DECL_CONTEXT (r) = DECL_CONTEXT (new_decl);
10133           }
10134
10135         SET_DECL_IMPLICIT_INSTANTIATION (r);
10136         DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
10137         DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
10138
10139         /* The template parameters for this new template are all the
10140            template parameters for the old template, except the
10141            outermost level of parameters.  */
10142         DECL_TEMPLATE_PARMS (r)
10143           = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
10144                                    complain);
10145
10146         if (PRIMARY_TEMPLATE_P (t))
10147           DECL_PRIMARY_TEMPLATE (r) = r;
10148
10149         if (TREE_CODE (decl) != TYPE_DECL)
10150           /* Record this non-type partial instantiation.  */
10151           register_specialization (r, t,
10152                                    DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)),
10153                                    false, hash);
10154       }
10155       break;
10156
10157     case FUNCTION_DECL:
10158       {
10159         tree ctx;
10160         tree argvec = NULL_TREE;
10161         tree *friends;
10162         tree gen_tmpl;
10163         tree type;
10164         int member;
10165         int args_depth;
10166         int parms_depth;
10167
10168         /* Nobody should be tsubst'ing into non-template functions.  */
10169         gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
10170
10171         if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
10172           {
10173             tree spec;
10174             bool dependent_p;
10175
10176             /* If T is not dependent, just return it.  We have to
10177                increment PROCESSING_TEMPLATE_DECL because
10178                value_dependent_expression_p assumes that nothing is
10179                dependent when PROCESSING_TEMPLATE_DECL is zero.  */
10180             ++processing_template_decl;
10181             dependent_p = value_dependent_expression_p (t);
10182             --processing_template_decl;
10183             if (!dependent_p)
10184               RETURN (t);
10185
10186             /* Calculate the most general template of which R is a
10187                specialization, and the complete set of arguments used to
10188                specialize R.  */
10189             gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
10190             argvec = tsubst_template_args (DECL_TI_ARGS
10191                                           (DECL_TEMPLATE_RESULT
10192                                                  (DECL_TI_TEMPLATE (t))),
10193                                            args, complain, in_decl);
10194             if (argvec == error_mark_node)
10195               RETURN (error_mark_node);
10196
10197             /* Check to see if we already have this specialization.  */
10198             hash = hash_tmpl_and_args (gen_tmpl, argvec);
10199             spec = retrieve_specialization (gen_tmpl, argvec, hash);
10200
10201             if (spec)
10202               {
10203                 r = spec;
10204                 break;
10205               }
10206
10207             /* We can see more levels of arguments than parameters if
10208                there was a specialization of a member template, like
10209                this:
10210
10211                  template <class T> struct S { template <class U> void f(); }
10212                  template <> template <class U> void S<int>::f(U);
10213
10214                Here, we'll be substituting into the specialization,
10215                because that's where we can find the code we actually
10216                want to generate, but we'll have enough arguments for
10217                the most general template.
10218
10219                We also deal with the peculiar case:
10220
10221                  template <class T> struct S {
10222                    template <class U> friend void f();
10223                  };
10224                  template <class U> void f() {}
10225                  template S<int>;
10226                  template void f<double>();
10227
10228                Here, the ARGS for the instantiation of will be {int,
10229                double}.  But, we only need as many ARGS as there are
10230                levels of template parameters in CODE_PATTERN.  We are
10231                careful not to get fooled into reducing the ARGS in
10232                situations like:
10233
10234                  template <class T> struct S { template <class U> void f(U); }
10235                  template <class T> template <> void S<T>::f(int) {}
10236
10237                which we can spot because the pattern will be a
10238                specialization in this case.  */
10239             args_depth = TMPL_ARGS_DEPTH (args);
10240             parms_depth =
10241               TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
10242             if (args_depth > parms_depth
10243                 && !DECL_TEMPLATE_SPECIALIZATION (t))
10244               args = get_innermost_template_args (args, parms_depth);
10245           }
10246         else
10247           {
10248             /* This special case arises when we have something like this:
10249
10250                  template <class T> struct S {
10251                    friend void f<int>(int, double);
10252                  };
10253
10254                Here, the DECL_TI_TEMPLATE for the friend declaration
10255                will be an IDENTIFIER_NODE.  We are being called from
10256                tsubst_friend_function, and we want only to create a
10257                new decl (R) with appropriate types so that we can call
10258                determine_specialization.  */
10259             gen_tmpl = NULL_TREE;
10260           }
10261
10262         if (DECL_CLASS_SCOPE_P (t))
10263           {
10264             if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
10265               member = 2;
10266             else
10267               member = 1;
10268             ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
10269                                     complain, t, /*entering_scope=*/1);
10270           }
10271         else
10272           {
10273             member = 0;
10274             ctx = DECL_CONTEXT (t);
10275           }
10276         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10277         if (type == error_mark_node)
10278           RETURN (error_mark_node);
10279
10280         /* We do NOT check for matching decls pushed separately at this
10281            point, as they may not represent instantiations of this
10282            template, and in any case are considered separate under the
10283            discrete model.  */
10284         r = copy_decl (t);
10285         DECL_USE_TEMPLATE (r) = 0;
10286         TREE_TYPE (r) = type;
10287         /* Clear out the mangled name and RTL for the instantiation.  */
10288         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
10289         SET_DECL_RTL (r, NULL);
10290         /* Leave DECL_INITIAL set on deleted instantiations.  */
10291         if (!DECL_DELETED_FN (r))
10292           DECL_INITIAL (r) = NULL_TREE;
10293         DECL_CONTEXT (r) = ctx;
10294
10295         if (member && DECL_CONV_FN_P (r))
10296           /* Type-conversion operator.  Reconstruct the name, in
10297              case it's the name of one of the template's parameters.  */
10298           DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
10299
10300         DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
10301                                      complain, t);
10302         DECL_RESULT (r) = NULL_TREE;
10303
10304         TREE_STATIC (r) = 0;
10305         TREE_PUBLIC (r) = TREE_PUBLIC (t);
10306         DECL_EXTERNAL (r) = 1;
10307         /* If this is an instantiation of a function with internal
10308            linkage, we already know what object file linkage will be
10309            assigned to the instantiation.  */
10310         DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
10311         DECL_DEFER_OUTPUT (r) = 0;
10312         DECL_CHAIN (r) = NULL_TREE;
10313         DECL_PENDING_INLINE_INFO (r) = 0;
10314         DECL_PENDING_INLINE_P (r) = 0;
10315         DECL_SAVED_TREE (r) = NULL_TREE;
10316         DECL_STRUCT_FUNCTION (r) = NULL;
10317         TREE_USED (r) = 0;
10318         /* We'll re-clone as appropriate in instantiate_template.  */
10319         DECL_CLONED_FUNCTION (r) = NULL_TREE;
10320
10321         /* If we aren't complaining now, return on error before we register
10322            the specialization so that we'll complain eventually.  */
10323         if ((complain & tf_error) == 0
10324             && IDENTIFIER_OPNAME_P (DECL_NAME (r))
10325             && !grok_op_properties (r, /*complain=*/false))
10326           RETURN (error_mark_node);
10327
10328         /* Set up the DECL_TEMPLATE_INFO for R.  There's no need to do
10329            this in the special friend case mentioned above where
10330            GEN_TMPL is NULL.  */
10331         if (gen_tmpl)
10332           {
10333             DECL_TEMPLATE_INFO (r)
10334               = build_template_info (gen_tmpl, argvec);
10335             SET_DECL_IMPLICIT_INSTANTIATION (r);
10336             register_specialization (r, gen_tmpl, argvec, false, hash);
10337
10338             /* We're not supposed to instantiate default arguments
10339                until they are called, for a template.  But, for a
10340                declaration like:
10341
10342                  template <class T> void f ()
10343                  { extern void g(int i = T()); }
10344
10345                we should do the substitution when the template is
10346                instantiated.  We handle the member function case in
10347                instantiate_class_template since the default arguments
10348                might refer to other members of the class.  */
10349             if (!member
10350                 && !PRIMARY_TEMPLATE_P (gen_tmpl)
10351                 && !uses_template_parms (argvec))
10352               tsubst_default_arguments (r);
10353           }
10354         else
10355           DECL_TEMPLATE_INFO (r) = NULL_TREE;
10356
10357         /* Copy the list of befriending classes.  */
10358         for (friends = &DECL_BEFRIENDING_CLASSES (r);
10359              *friends;
10360              friends = &TREE_CHAIN (*friends))
10361           {
10362             *friends = copy_node (*friends);
10363             TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
10364                                             args, complain,
10365                                             in_decl);
10366           }
10367
10368         if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
10369           {
10370             maybe_retrofit_in_chrg (r);
10371             if (DECL_CONSTRUCTOR_P (r))
10372               grok_ctor_properties (ctx, r);
10373             /* If this is an instantiation of a member template, clone it.
10374                If it isn't, that'll be handled by
10375                clone_constructors_and_destructors.  */
10376             if (PRIMARY_TEMPLATE_P (gen_tmpl))
10377               clone_function_decl (r, /*update_method_vec_p=*/0);
10378           }
10379         else if ((complain & tf_error) != 0
10380                  && IDENTIFIER_OPNAME_P (DECL_NAME (r))
10381                  && !grok_op_properties (r, /*complain=*/true))
10382           RETURN (error_mark_node);
10383
10384         if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
10385           SET_DECL_FRIEND_CONTEXT (r,
10386                                    tsubst (DECL_FRIEND_CONTEXT (t),
10387                                             args, complain, in_decl));
10388
10389         /* Possibly limit visibility based on template args.  */
10390         DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
10391         if (DECL_VISIBILITY_SPECIFIED (t))
10392           {
10393             DECL_VISIBILITY_SPECIFIED (r) = 0;
10394             DECL_ATTRIBUTES (r)
10395               = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
10396           }
10397         determine_visibility (r);
10398         if (DECL_DEFAULTED_OUTSIDE_CLASS_P (r)
10399             && !processing_template_decl)
10400           defaulted_late_check (r);
10401
10402         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
10403                                         args, complain, in_decl);
10404       }
10405       break;
10406
10407     case PARM_DECL:
10408       {
10409         tree type = NULL_TREE;
10410         int i, len = 1;
10411         tree expanded_types = NULL_TREE;
10412         tree prev_r = NULL_TREE;
10413         tree first_r = NULL_TREE;
10414
10415         if (FUNCTION_PARAMETER_PACK_P (t))
10416           {
10417             /* If there is a local specialization that isn't a
10418                parameter pack, it means that we're doing a "simple"
10419                substitution from inside tsubst_pack_expansion. Just
10420                return the local specialization (which will be a single
10421                parm).  */
10422             tree spec = retrieve_local_specialization (t);
10423             if (spec 
10424                 && TREE_CODE (spec) == PARM_DECL
10425                 && TREE_CODE (TREE_TYPE (spec)) != TYPE_PACK_EXPANSION)
10426               RETURN (spec);
10427
10428             /* Expand the TYPE_PACK_EXPANSION that provides the types for
10429                the parameters in this function parameter pack.  */
10430             expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
10431                                                     complain, in_decl);
10432             if (TREE_CODE (expanded_types) == TREE_VEC)
10433               {
10434                 len = TREE_VEC_LENGTH (expanded_types);
10435
10436                 /* Zero-length parameter packs are boring. Just substitute
10437                    into the chain.  */
10438                 if (len == 0)
10439                   RETURN (tsubst (TREE_CHAIN (t), args, complain,
10440                                   TREE_CHAIN (t)));
10441               }
10442             else
10443               {
10444                 /* All we did was update the type. Make a note of that.  */
10445                 type = expanded_types;
10446                 expanded_types = NULL_TREE;
10447               }
10448           }
10449
10450         /* Loop through all of the parameter's we'll build. When T is
10451            a function parameter pack, LEN is the number of expanded
10452            types in EXPANDED_TYPES; otherwise, LEN is 1.  */
10453         r = NULL_TREE;
10454         for (i = 0; i < len; ++i)
10455           {
10456             prev_r = r;
10457             r = copy_node (t);
10458             if (DECL_TEMPLATE_PARM_P (t))
10459               SET_DECL_TEMPLATE_PARM_P (r);
10460
10461             if (expanded_types)
10462               /* We're on the Ith parameter of the function parameter
10463                  pack.  */
10464               {
10465                 /* An argument of a function parameter pack is not a parameter
10466                    pack.  */
10467                 FUNCTION_PARAMETER_PACK_P (r) = false;
10468
10469                 /* Get the Ith type.  */
10470                 type = TREE_VEC_ELT (expanded_types, i);
10471
10472                 if (DECL_NAME (r))
10473                   /* Rename the parameter to include the index.  */
10474                   DECL_NAME (r) =
10475                     make_ith_pack_parameter_name (DECL_NAME (r), i);
10476               }
10477             else if (!type)
10478               /* We're dealing with a normal parameter.  */
10479               type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10480
10481             type = type_decays_to (type);
10482             TREE_TYPE (r) = type;
10483             cp_apply_type_quals_to_decl (cp_type_quals (type), r);
10484
10485             if (DECL_INITIAL (r))
10486               {
10487                 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
10488                   DECL_INITIAL (r) = TREE_TYPE (r);
10489                 else
10490                   DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
10491                                              complain, in_decl);
10492               }
10493
10494             DECL_CONTEXT (r) = NULL_TREE;
10495
10496             if (!DECL_TEMPLATE_PARM_P (r))
10497               DECL_ARG_TYPE (r) = type_passed_as (type);
10498
10499             apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
10500                                             args, complain, in_decl);
10501
10502             /* Keep track of the first new parameter we
10503                generate. That's what will be returned to the
10504                caller.  */
10505             if (!first_r)
10506               first_r = r;
10507
10508             /* Build a proper chain of parameters when substituting
10509                into a function parameter pack.  */
10510             if (prev_r)
10511               DECL_CHAIN (prev_r) = r;
10512           }
10513
10514         if (DECL_CHAIN (t))
10515           DECL_CHAIN (r) = tsubst (DECL_CHAIN (t), args,
10516                                    complain, DECL_CHAIN (t));
10517
10518         /* FIRST_R contains the start of the chain we've built.  */
10519         r = first_r;
10520       }
10521       break;
10522
10523     case FIELD_DECL:
10524       {
10525         tree type;
10526
10527         r = copy_decl (t);
10528         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10529         if (type == error_mark_node)
10530           RETURN (error_mark_node);
10531         TREE_TYPE (r) = type;
10532         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
10533
10534         if (DECL_C_BIT_FIELD (r))
10535           /* For bit-fields, DECL_INITIAL gives the number of bits.  For
10536              non-bit-fields DECL_INITIAL is a non-static data member
10537              initializer, which gets deferred instantiation.  */
10538           DECL_INITIAL (r)
10539             = tsubst_expr (DECL_INITIAL (t), args,
10540                            complain, in_decl,
10541                            /*integral_constant_expression_p=*/true);
10542         else if (DECL_INITIAL (t))
10543           {
10544             /* Set up DECL_TEMPLATE_INFO so that we can get at the
10545                NSDMI in perform_member_init.  Still set DECL_INITIAL
10546                so that we know there is one.  */
10547             DECL_INITIAL (r) = void_zero_node;
10548             gcc_assert (DECL_LANG_SPECIFIC (r) == NULL);
10549             retrofit_lang_decl (r);
10550             DECL_TEMPLATE_INFO (r) = build_template_info (t, args);
10551           }
10552         /* We don't have to set DECL_CONTEXT here; it is set by
10553            finish_member_declaration.  */
10554         DECL_CHAIN (r) = NULL_TREE;
10555         if (VOID_TYPE_P (type))
10556           error ("instantiation of %q+D as type %qT", r, type);
10557
10558         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
10559                                         args, complain, in_decl);
10560       }
10561       break;
10562
10563     case USING_DECL:
10564       /* We reach here only for member using decls.  */
10565       if (DECL_DEPENDENT_P (t))
10566         {
10567           r = do_class_using_decl
10568             (tsubst_copy (USING_DECL_SCOPE (t), args, complain, in_decl),
10569              tsubst_copy (DECL_NAME (t), args, complain, in_decl));
10570           if (!r)
10571             r = error_mark_node;
10572           else
10573             {
10574               TREE_PROTECTED (r) = TREE_PROTECTED (t);
10575               TREE_PRIVATE (r) = TREE_PRIVATE (t);
10576             }
10577         }
10578       else
10579         {
10580           r = copy_node (t);
10581           DECL_CHAIN (r) = NULL_TREE;
10582         }
10583       break;
10584
10585     case TYPE_DECL:
10586     case VAR_DECL:
10587       {
10588         tree argvec = NULL_TREE;
10589         tree gen_tmpl = NULL_TREE;
10590         tree spec;
10591         tree tmpl = NULL_TREE;
10592         tree ctx;
10593         tree type = NULL_TREE;
10594         bool local_p;
10595
10596         if (TREE_CODE (t) == TYPE_DECL
10597             && t == TYPE_MAIN_DECL (TREE_TYPE (t)))
10598           {
10599             /* If this is the canonical decl, we don't have to
10600                mess with instantiations, and often we can't (for
10601                typename, template type parms and such).  Note that
10602                TYPE_NAME is not correct for the above test if
10603                we've copied the type for a typedef.  */
10604             type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10605             if (type == error_mark_node)
10606               RETURN (error_mark_node);
10607             r = TYPE_NAME (type);
10608             break;
10609           }
10610
10611         /* Check to see if we already have the specialization we
10612            need.  */
10613         spec = NULL_TREE;
10614         if (DECL_CLASS_SCOPE_P (t) || DECL_NAMESPACE_SCOPE_P (t))
10615           {
10616             /* T is a static data member or namespace-scope entity.
10617                We have to substitute into namespace-scope variables
10618                (even though such entities are never templates) because
10619                of cases like:
10620                
10621                  template <class T> void f() { extern T t; }
10622
10623                where the entity referenced is not known until
10624                instantiation time.  */
10625             local_p = false;
10626             ctx = DECL_CONTEXT (t);
10627             if (DECL_CLASS_SCOPE_P (t))
10628               {
10629                 ctx = tsubst_aggr_type (ctx, args,
10630                                         complain,
10631                                         in_decl, /*entering_scope=*/1);
10632                 /* If CTX is unchanged, then T is in fact the
10633                    specialization we want.  That situation occurs when
10634                    referencing a static data member within in its own
10635                    class.  We can use pointer equality, rather than
10636                    same_type_p, because DECL_CONTEXT is always
10637                    canonical...  */
10638                 if (ctx == DECL_CONTEXT (t)
10639                     && (TREE_CODE (t) != TYPE_DECL
10640                         /* ... unless T is a member template; in which
10641                            case our caller can be willing to create a
10642                            specialization of that template represented
10643                            by T.  */
10644                         || !(DECL_TI_TEMPLATE (t)
10645                              && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (t)))))
10646                   spec = t;
10647               }
10648
10649             if (!spec)
10650               {
10651                 tmpl = DECL_TI_TEMPLATE (t);
10652                 gen_tmpl = most_general_template (tmpl);
10653                 argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
10654                 hash = hash_tmpl_and_args (gen_tmpl, argvec);
10655                 spec = retrieve_specialization (gen_tmpl, argvec, hash);
10656               }
10657           }
10658         else
10659           {
10660             /* A local variable.  */
10661             local_p = true;
10662             /* Subsequent calls to pushdecl will fill this in.  */
10663             ctx = NULL_TREE;
10664             spec = retrieve_local_specialization (t);
10665           }
10666         /* If we already have the specialization we need, there is
10667            nothing more to do.  */ 
10668         if (spec)
10669           {
10670             r = spec;
10671             break;
10672           }
10673
10674         /* Create a new node for the specialization we need.  */
10675         r = copy_decl (t);
10676         if (type == NULL_TREE)
10677           {
10678             if (is_typedef_decl (t))
10679               type = DECL_ORIGINAL_TYPE (t);
10680             else
10681               type = TREE_TYPE (t);
10682             if (TREE_CODE (t) == VAR_DECL
10683                 && VAR_HAD_UNKNOWN_BOUND (t)
10684                 && type != error_mark_node)
10685               type = strip_array_domain (type);
10686             type = tsubst (type, args, complain, in_decl);
10687           }
10688         if (TREE_CODE (r) == VAR_DECL)
10689           {
10690             /* Even if the original location is out of scope, the
10691                newly substituted one is not.  */
10692             DECL_DEAD_FOR_LOCAL (r) = 0;
10693             DECL_INITIALIZED_P (r) = 0;
10694             DECL_TEMPLATE_INSTANTIATED (r) = 0;
10695             if (type == error_mark_node)
10696               RETURN (error_mark_node);
10697             if (TREE_CODE (type) == FUNCTION_TYPE)
10698               {
10699                 /* It may seem that this case cannot occur, since:
10700
10701                      typedef void f();
10702                      void g() { f x; }
10703
10704                    declares a function, not a variable.  However:
10705       
10706                      typedef void f();
10707                      template <typename T> void g() { T t; }
10708                      template void g<f>();
10709
10710                    is an attempt to declare a variable with function
10711                    type.  */
10712                 error ("variable %qD has function type",
10713                        /* R is not yet sufficiently initialized, so we
10714                           just use its name.  */
10715                        DECL_NAME (r));
10716                 RETURN (error_mark_node);
10717               }
10718             type = complete_type (type);
10719             /* Wait until cp_finish_decl to set this again, to handle
10720                circular dependency (template/instantiate6.C). */
10721             DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r) = 0;
10722             type = check_var_type (DECL_NAME (r), type);
10723
10724             if (DECL_HAS_VALUE_EXPR_P (t))
10725               {
10726                 tree ve = DECL_VALUE_EXPR (t);
10727                 ve = tsubst_expr (ve, args, complain, in_decl,
10728                                   /*constant_expression_p=*/false);
10729                 if (REFERENCE_REF_P (ve))
10730                   {
10731                     gcc_assert (TREE_CODE (type) == REFERENCE_TYPE);
10732                     ve = TREE_OPERAND (ve, 0);
10733                   }
10734                 SET_DECL_VALUE_EXPR (r, ve);
10735               }
10736           }
10737         else if (DECL_SELF_REFERENCE_P (t))
10738           SET_DECL_SELF_REFERENCE_P (r);
10739         TREE_TYPE (r) = type;
10740         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
10741         DECL_CONTEXT (r) = ctx;
10742         /* Clear out the mangled name and RTL for the instantiation.  */
10743         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
10744         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
10745           SET_DECL_RTL (r, NULL);
10746         /* The initializer must not be expanded until it is required;
10747            see [temp.inst].  */
10748         DECL_INITIAL (r) = NULL_TREE;
10749         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
10750           SET_DECL_RTL (r, NULL);
10751         DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
10752         if (TREE_CODE (r) == VAR_DECL)
10753           {
10754             /* Possibly limit visibility based on template args.  */
10755             DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
10756             if (DECL_VISIBILITY_SPECIFIED (t))
10757               {
10758                 DECL_VISIBILITY_SPECIFIED (r) = 0;
10759                 DECL_ATTRIBUTES (r)
10760                   = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
10761               }
10762             determine_visibility (r);
10763           }
10764
10765         if (!local_p)
10766           {
10767             /* A static data member declaration is always marked
10768                external when it is declared in-class, even if an
10769                initializer is present.  We mimic the non-template
10770                processing here.  */
10771             DECL_EXTERNAL (r) = 1;
10772
10773             register_specialization (r, gen_tmpl, argvec, false, hash);
10774             DECL_TEMPLATE_INFO (r) = build_template_info (tmpl, argvec);
10775             SET_DECL_IMPLICIT_INSTANTIATION (r);
10776           }
10777         else if (cp_unevaluated_operand)
10778           {
10779             /* We're substituting this var in a decltype outside of its
10780                scope, such as for a lambda return type.  Don't add it to
10781                local_specializations, do perform auto deduction.  */
10782             tree auto_node = type_uses_auto (type);
10783             if (auto_node)
10784               {
10785                 tree init
10786                   = tsubst_expr (DECL_INITIAL (t), args, complain, in_decl,
10787                                  /*constant_expression_p=*/false);
10788                 init = resolve_nondeduced_context (init);
10789                 TREE_TYPE (r) = type
10790                   = do_auto_deduction (type, init, auto_node);
10791               }
10792           }
10793         else
10794           register_local_specialization (r, t);
10795
10796         DECL_CHAIN (r) = NULL_TREE;
10797
10798         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r),
10799                                         /*flags=*/0,
10800                                         args, complain, in_decl);
10801
10802         /* Preserve a typedef that names a type.  */
10803         if (is_typedef_decl (r))
10804           {
10805             DECL_ORIGINAL_TYPE (r) = NULL_TREE;
10806             set_underlying_type (r);
10807           }
10808
10809         layout_decl (r, 0);
10810       }
10811       break;
10812
10813     default:
10814       gcc_unreachable ();
10815     }
10816 #undef RETURN
10817
10818  out:
10819   /* Restore the file and line information.  */
10820   input_location = saved_loc;
10821
10822   return r;
10823 }
10824
10825 /* Substitute into the ARG_TYPES of a function type.  */
10826
10827 static tree
10828 tsubst_arg_types (tree arg_types,
10829                   tree args,
10830                   tsubst_flags_t complain,
10831                   tree in_decl)
10832 {
10833   tree remaining_arg_types;
10834   tree type = NULL_TREE;
10835   int i = 1;
10836   tree expanded_args = NULL_TREE;
10837   tree default_arg;
10838
10839   if (!arg_types || arg_types == void_list_node)
10840     return arg_types;
10841
10842   remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
10843                                           args, complain, in_decl);
10844   if (remaining_arg_types == error_mark_node)
10845     return error_mark_node;
10846
10847   if (PACK_EXPANSION_P (TREE_VALUE (arg_types)))
10848     {
10849       /* For a pack expansion, perform substitution on the
10850          entire expression. Later on, we'll handle the arguments
10851          one-by-one.  */
10852       expanded_args = tsubst_pack_expansion (TREE_VALUE (arg_types),
10853                                             args, complain, in_decl);
10854
10855       if (TREE_CODE (expanded_args) == TREE_VEC)
10856         /* So that we'll spin through the parameters, one by one.  */
10857         i = TREE_VEC_LENGTH (expanded_args);
10858       else
10859         {
10860           /* We only partially substituted into the parameter
10861              pack. Our type is TYPE_PACK_EXPANSION.  */
10862           type = expanded_args;
10863           expanded_args = NULL_TREE;
10864         }
10865     }
10866
10867   while (i > 0) {
10868     --i;
10869     
10870     if (expanded_args)
10871       type = TREE_VEC_ELT (expanded_args, i);
10872     else if (!type)
10873       type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
10874
10875     if (type == error_mark_node)
10876       return error_mark_node;
10877     if (VOID_TYPE_P (type))
10878       {
10879         if (complain & tf_error)
10880           {
10881             error ("invalid parameter type %qT", type);
10882             if (in_decl)
10883               error ("in declaration %q+D", in_decl);
10884           }
10885         return error_mark_node;
10886     }
10887     
10888     /* Do array-to-pointer, function-to-pointer conversion, and ignore
10889        top-level qualifiers as required.  */
10890     type = cv_unqualified (type_decays_to (type));
10891
10892     /* We do not substitute into default arguments here.  The standard
10893        mandates that they be instantiated only when needed, which is
10894        done in build_over_call.  */
10895     default_arg = TREE_PURPOSE (arg_types);
10896
10897     if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
10898       {
10899         /* We've instantiated a template before its default arguments
10900            have been parsed.  This can happen for a nested template
10901            class, and is not an error unless we require the default
10902            argument in a call of this function.  */
10903         remaining_arg_types = 
10904           tree_cons (default_arg, type, remaining_arg_types);
10905         VEC_safe_push (tree, gc, DEFARG_INSTANTIATIONS (default_arg), 
10906                        remaining_arg_types);
10907       }
10908     else
10909       remaining_arg_types = 
10910         hash_tree_cons (default_arg, type, remaining_arg_types);
10911   }
10912         
10913   return remaining_arg_types;
10914 }
10915
10916 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE.  This routine does
10917    *not* handle the exception-specification for FNTYPE, because the
10918    initial substitution of explicitly provided template parameters
10919    during argument deduction forbids substitution into the
10920    exception-specification:
10921
10922      [temp.deduct]
10923
10924      All references in the function type of the function template to  the
10925      corresponding template parameters are replaced by the specified tem-
10926      plate argument values.  If a substitution in a template parameter or
10927      in  the function type of the function template results in an invalid
10928      type, type deduction fails.  [Note: The equivalent  substitution  in
10929      exception specifications is done only when the function is instanti-
10930      ated, at which point a program is  ill-formed  if  the  substitution
10931      results in an invalid type.]  */
10932
10933 static tree
10934 tsubst_function_type (tree t,
10935                       tree args,
10936                       tsubst_flags_t complain,
10937                       tree in_decl)
10938 {
10939   tree return_type;
10940   tree arg_types;
10941   tree fntype;
10942
10943   /* The TYPE_CONTEXT is not used for function/method types.  */
10944   gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
10945
10946   /* Substitute the return type.  */
10947   return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10948   if (return_type == error_mark_node)
10949     return error_mark_node;
10950   /* The standard does not presently indicate that creation of a
10951      function type with an invalid return type is a deduction failure.
10952      However, that is clearly analogous to creating an array of "void"
10953      or a reference to a reference.  This is core issue #486.  */
10954   if (TREE_CODE (return_type) == ARRAY_TYPE
10955       || TREE_CODE (return_type) == FUNCTION_TYPE)
10956     {
10957       if (complain & tf_error)
10958         {
10959           if (TREE_CODE (return_type) == ARRAY_TYPE)
10960             error ("function returning an array");
10961           else
10962             error ("function returning a function");
10963         }
10964       return error_mark_node;
10965     }
10966
10967   /* Substitute the argument types.  */
10968   arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
10969                                 complain, in_decl);
10970   if (arg_types == error_mark_node)
10971     return error_mark_node;
10972
10973   /* Construct a new type node and return it.  */
10974   if (TREE_CODE (t) == FUNCTION_TYPE)
10975     {
10976       fntype = build_function_type (return_type, arg_types);
10977       fntype = apply_memfn_quals (fntype, type_memfn_quals (t));
10978     }
10979   else
10980     {
10981       tree r = TREE_TYPE (TREE_VALUE (arg_types));
10982       if (! MAYBE_CLASS_TYPE_P (r))
10983         {
10984           /* [temp.deduct]
10985
10986              Type deduction may fail for any of the following
10987              reasons:
10988
10989              -- Attempting to create "pointer to member of T" when T
10990              is not a class type.  */
10991           if (complain & tf_error)
10992             error ("creating pointer to member function of non-class type %qT",
10993                       r);
10994           return error_mark_node;
10995         }
10996
10997       fntype = build_method_type_directly (r, return_type,
10998                                            TREE_CHAIN (arg_types));
10999     }
11000   fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
11001
11002   return fntype;
11003 }
11004
11005 /* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE.  Substitute the template
11006    ARGS into that specification, and return the substituted
11007    specification.  If there is no specification, return NULL_TREE.  */
11008
11009 static tree
11010 tsubst_exception_specification (tree fntype,
11011                                 tree args,
11012                                 tsubst_flags_t complain,
11013                                 tree in_decl,
11014                                 bool defer_ok)
11015 {
11016   tree specs;
11017   tree new_specs;
11018
11019   specs = TYPE_RAISES_EXCEPTIONS (fntype);
11020   new_specs = NULL_TREE;
11021   if (specs && TREE_PURPOSE (specs))
11022     {
11023       /* A noexcept-specifier.  */
11024       tree expr = TREE_PURPOSE (specs);
11025       if (expr == boolean_true_node || expr == boolean_false_node)
11026         new_specs = expr;
11027       else if (defer_ok)
11028         {
11029           /* Defer instantiation of noexcept-specifiers to avoid
11030              excessive instantiations (c++/49107).  */
11031           new_specs = make_node (DEFERRED_NOEXCEPT);
11032           if (DEFERRED_NOEXCEPT_SPEC_P (specs))
11033             {
11034               /* We already partially instantiated this member template,
11035                  so combine the new args with the old.  */
11036               DEFERRED_NOEXCEPT_PATTERN (new_specs)
11037                 = DEFERRED_NOEXCEPT_PATTERN (expr);
11038               DEFERRED_NOEXCEPT_ARGS (new_specs)
11039                 = add_to_template_args (DEFERRED_NOEXCEPT_ARGS (expr), args);
11040             }
11041           else
11042             {
11043               DEFERRED_NOEXCEPT_PATTERN (new_specs) = expr;
11044               DEFERRED_NOEXCEPT_ARGS (new_specs) = args;
11045             }
11046         }
11047       else
11048         new_specs = tsubst_copy_and_build
11049           (expr, args, complain, in_decl, /*function_p=*/false,
11050            /*integral_constant_expression_p=*/true);
11051       new_specs = build_noexcept_spec (new_specs, complain);
11052     }
11053   else if (specs)
11054     {
11055       if (! TREE_VALUE (specs))
11056         new_specs = specs;
11057       else
11058         while (specs)
11059           {
11060             tree spec;
11061             int i, len = 1;
11062             tree expanded_specs = NULL_TREE;
11063
11064             if (PACK_EXPANSION_P (TREE_VALUE (specs)))
11065               {
11066                 /* Expand the pack expansion type.  */
11067                 expanded_specs = tsubst_pack_expansion (TREE_VALUE (specs),
11068                                                        args, complain,
11069                                                        in_decl);
11070
11071                 if (expanded_specs == error_mark_node)
11072                   return error_mark_node;
11073                 else if (TREE_CODE (expanded_specs) == TREE_VEC)
11074                   len = TREE_VEC_LENGTH (expanded_specs);
11075                 else
11076                   {
11077                     /* We're substituting into a member template, so
11078                        we got a TYPE_PACK_EXPANSION back.  Add that
11079                        expansion and move on.  */
11080                     gcc_assert (TREE_CODE (expanded_specs) 
11081                                 == TYPE_PACK_EXPANSION);
11082                     new_specs = add_exception_specifier (new_specs,
11083                                                          expanded_specs,
11084                                                          complain);
11085                     specs = TREE_CHAIN (specs);
11086                     continue;
11087                   }
11088               }
11089
11090             for (i = 0; i < len; ++i)
11091               {
11092                 if (expanded_specs)
11093                   spec = TREE_VEC_ELT (expanded_specs, i);
11094                 else
11095                   spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
11096                 if (spec == error_mark_node)
11097                   return spec;
11098                 new_specs = add_exception_specifier (new_specs, spec, 
11099                                                      complain);
11100               }
11101
11102             specs = TREE_CHAIN (specs);
11103           }
11104     }
11105   return new_specs;
11106 }
11107
11108 /* Take the tree structure T and replace template parameters used
11109    therein with the argument vector ARGS.  IN_DECL is an associated
11110    decl for diagnostics.  If an error occurs, returns ERROR_MARK_NODE.
11111    Issue error and warning messages under control of COMPLAIN.  Note
11112    that we must be relatively non-tolerant of extensions here, in
11113    order to preserve conformance; if we allow substitutions that
11114    should not be allowed, we may allow argument deductions that should
11115    not succeed, and therefore report ambiguous overload situations
11116    where there are none.  In theory, we could allow the substitution,
11117    but indicate that it should have failed, and allow our caller to
11118    make sure that the right thing happens, but we don't try to do this
11119    yet.
11120
11121    This function is used for dealing with types, decls and the like;
11122    for expressions, use tsubst_expr or tsubst_copy.  */
11123
11124 tree
11125 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
11126 {
11127   enum tree_code code;
11128   tree type, r = NULL_TREE;
11129
11130   if (t == NULL_TREE || t == error_mark_node
11131       || t == integer_type_node
11132       || t == void_type_node
11133       || t == char_type_node
11134       || t == unknown_type_node
11135       || TREE_CODE (t) == NAMESPACE_DECL
11136       || TREE_CODE (t) == TRANSLATION_UNIT_DECL)
11137     return t;
11138
11139   if (DECL_P (t))
11140     return tsubst_decl (t, args, complain);
11141
11142   if (args == NULL_TREE)
11143     return t;
11144
11145   code = TREE_CODE (t);
11146
11147   if (code == IDENTIFIER_NODE)
11148     type = IDENTIFIER_TYPE_VALUE (t);
11149   else
11150     type = TREE_TYPE (t);
11151
11152   gcc_assert (type != unknown_type_node);
11153
11154   /* Reuse typedefs.  We need to do this to handle dependent attributes,
11155      such as attribute aligned.  */
11156   if (TYPE_P (t)
11157       && typedef_variant_p (t))
11158     {
11159       tree decl = TYPE_NAME (t);
11160
11161       if (TYPE_DECL_ALIAS_P (decl)
11162           && DECL_LANG_SPECIFIC (decl)
11163           && DECL_TEMPLATE_INFO (decl)
11164           && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl)))
11165         {
11166           /* DECL represents an alias template and we want to
11167              instantiate it.  Let's substitute our arguments for the
11168              template parameters into the declaration and get the
11169              resulting type.  */
11170           r = tsubst (decl, args, complain, decl);
11171         }
11172       else if (DECL_CLASS_SCOPE_P (decl)
11173                && CLASSTYPE_TEMPLATE_INFO (DECL_CONTEXT (decl))
11174                && uses_template_parms (DECL_CONTEXT (decl)))
11175         {
11176           tree tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
11177           tree gen_args = tsubst (DECL_TI_ARGS (decl), args, complain, in_decl);
11178           r = retrieve_specialization (tmpl, gen_args, 0);
11179         }
11180       else if (DECL_FUNCTION_SCOPE_P (decl)
11181                && DECL_TEMPLATE_INFO (DECL_CONTEXT (decl))
11182                && uses_template_parms (DECL_TI_ARGS (DECL_CONTEXT (decl))))
11183         r = retrieve_local_specialization (decl);
11184       else
11185         /* The typedef is from a non-template context.  */
11186         return t;
11187
11188       if (r)
11189         {
11190           r = TREE_TYPE (r);
11191           r = cp_build_qualified_type_real
11192             (r, cp_type_quals (t) | cp_type_quals (r),
11193              complain | tf_ignore_bad_quals);
11194           return r;
11195         }
11196       else
11197         /* We don't have an instantiation yet, so drop the typedef.  */
11198         t = DECL_ORIGINAL_TYPE (decl);
11199     }
11200
11201   if (type
11202       && code != TYPENAME_TYPE
11203       && code != TEMPLATE_TYPE_PARM
11204       && code != IDENTIFIER_NODE
11205       && code != FUNCTION_TYPE
11206       && code != METHOD_TYPE)
11207     type = tsubst (type, args, complain, in_decl);
11208   if (type == error_mark_node)
11209     return error_mark_node;
11210
11211   switch (code)
11212     {
11213     case RECORD_TYPE:
11214     case UNION_TYPE:
11215     case ENUMERAL_TYPE:
11216       return tsubst_aggr_type (t, args, complain, in_decl,
11217                                /*entering_scope=*/0);
11218
11219     case ERROR_MARK:
11220     case IDENTIFIER_NODE:
11221     case VOID_TYPE:
11222     case REAL_TYPE:
11223     case COMPLEX_TYPE:
11224     case VECTOR_TYPE:
11225     case BOOLEAN_TYPE:
11226     case NULLPTR_TYPE:
11227     case LANG_TYPE:
11228       return t;
11229
11230     case INTEGER_TYPE:
11231       if (t == integer_type_node)
11232         return t;
11233
11234       if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
11235           && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
11236         return t;
11237
11238       {
11239         tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
11240
11241         max = tsubst_expr (omax, args, complain, in_decl,
11242                            /*integral_constant_expression_p=*/false);
11243
11244         /* Fix up type of the magic NOP_EXPR with TREE_SIDE_EFFECTS if
11245            needed.  */
11246         if (TREE_CODE (max) == NOP_EXPR
11247             && TREE_SIDE_EFFECTS (omax)
11248             && !TREE_TYPE (max))
11249           TREE_TYPE (max) = TREE_TYPE (TREE_OPERAND (max, 0));
11250
11251         /* If we're in a partial instantiation, preserve the magic NOP_EXPR
11252            with TREE_SIDE_EFFECTS that indicates this is not an integral
11253            constant expression.  */
11254         if (processing_template_decl
11255             && TREE_SIDE_EFFECTS (omax) && TREE_CODE (omax) == NOP_EXPR)
11256           {
11257             gcc_assert (TREE_CODE (max) == NOP_EXPR);
11258             TREE_SIDE_EFFECTS (max) = 1;
11259           }
11260
11261         return compute_array_index_type (NULL_TREE, max, complain);
11262       }
11263
11264     case TEMPLATE_TYPE_PARM:
11265     case TEMPLATE_TEMPLATE_PARM:
11266     case BOUND_TEMPLATE_TEMPLATE_PARM:
11267     case TEMPLATE_PARM_INDEX:
11268       {
11269         int idx;
11270         int level;
11271         int levels;
11272         tree arg = NULL_TREE;
11273
11274         r = NULL_TREE;
11275
11276         gcc_assert (TREE_VEC_LENGTH (args) > 0);
11277         template_parm_level_and_index (t, &level, &idx); 
11278
11279         levels = TMPL_ARGS_DEPTH (args);
11280         if (level <= levels)
11281           {
11282             arg = TMPL_ARG (args, level, idx);
11283
11284             if (arg && TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
11285               /* See through ARGUMENT_PACK_SELECT arguments. */
11286               arg = ARGUMENT_PACK_SELECT_ARG (arg);
11287           }
11288
11289         if (arg == error_mark_node)
11290           return error_mark_node;
11291         else if (arg != NULL_TREE)
11292           {
11293             if (ARGUMENT_PACK_P (arg))
11294               /* If ARG is an argument pack, we don't actually want to
11295                  perform a substitution here, because substitutions
11296                  for argument packs are only done
11297                  element-by-element. We can get to this point when
11298                  substituting the type of a non-type template
11299                  parameter pack, when that type actually contains
11300                  template parameter packs from an outer template, e.g.,
11301
11302                  template<typename... Types> struct A {
11303                    template<Types... Values> struct B { };
11304                  };  */
11305               return t;
11306
11307             if (code == TEMPLATE_TYPE_PARM)
11308               {
11309                 int quals;
11310                 gcc_assert (TYPE_P (arg));
11311
11312                 quals = cp_type_quals (arg) | cp_type_quals (t);
11313                   
11314                 return cp_build_qualified_type_real
11315                   (arg, quals, complain | tf_ignore_bad_quals);
11316               }
11317             else if (code == BOUND_TEMPLATE_TEMPLATE_PARM)
11318               {
11319                 /* We are processing a type constructed from a
11320                    template template parameter.  */
11321                 tree argvec = tsubst (TYPE_TI_ARGS (t),
11322                                       args, complain, in_decl);
11323                 if (argvec == error_mark_node)
11324                   return error_mark_node;
11325
11326                 gcc_assert (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
11327                             || TREE_CODE (arg) == TEMPLATE_DECL
11328                             || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
11329
11330                 if (TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE)
11331                   /* Consider this code:
11332
11333                         template <template <class> class Template>
11334                         struct Internal {
11335                         template <class Arg> using Bind = Template<Arg>;
11336                         };
11337
11338                         template <template <class> class Template, class Arg>
11339                         using Instantiate = Template<Arg>; //#0
11340
11341                         template <template <class> class Template,
11342                                   class Argument>
11343                         using Bind =
11344                           Instantiate<Internal<Template>::template Bind,
11345                                       Argument>; //#1
11346
11347                      When #1 is parsed, the
11348                      BOUND_TEMPLATE_TEMPLATE_PARM representing the
11349                      parameter `Template' in #0 matches the
11350                      UNBOUND_CLASS_TEMPLATE representing the argument
11351                      `Internal<Template>::template Bind'; We then want
11352                      to assemble the type `Bind<Argument>' that can't
11353                      be fully created right now, because
11354                      `Internal<Template>' not being complete, the Bind
11355                      template cannot be looked up in that context.  So
11356                      we need to "store" `Bind<Argument>' for later
11357                      when the context of Bind becomes complete.  Let's
11358                      store that in a TYPENAME_TYPE.  */
11359                   return make_typename_type (TYPE_CONTEXT (arg),
11360                                              build_nt (TEMPLATE_ID_EXPR,
11361                                                        TYPE_IDENTIFIER (arg),
11362                                                        argvec),
11363                                              typename_type,
11364                                              complain);
11365
11366                 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
11367                    are resolving nested-types in the signature of a
11368                    member function templates.  Otherwise ARG is a
11369                    TEMPLATE_DECL and is the real template to be
11370                    instantiated.  */
11371                 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
11372                   arg = TYPE_NAME (arg);
11373
11374                 r = lookup_template_class (arg,
11375                                            argvec, in_decl,
11376                                            DECL_CONTEXT (arg),
11377                                             /*entering_scope=*/0,
11378                                            complain);
11379                 return cp_build_qualified_type_real
11380                   (r, cp_type_quals (t), complain);
11381               }
11382             else
11383               /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX.  */
11384               return convert_from_reference (unshare_expr (arg));
11385           }
11386
11387         if (level == 1)
11388           /* This can happen during the attempted tsubst'ing in
11389              unify.  This means that we don't yet have any information
11390              about the template parameter in question.  */
11391           return t;
11392
11393         /* If we get here, we must have been looking at a parm for a
11394            more deeply nested template.  Make a new version of this
11395            template parameter, but with a lower level.  */
11396         switch (code)
11397           {
11398           case TEMPLATE_TYPE_PARM:
11399           case TEMPLATE_TEMPLATE_PARM:
11400           case BOUND_TEMPLATE_TEMPLATE_PARM:
11401             if (cp_type_quals (t))
11402               {
11403                 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
11404                 r = cp_build_qualified_type_real
11405                   (r, cp_type_quals (t),
11406                    complain | (code == TEMPLATE_TYPE_PARM
11407                                ? tf_ignore_bad_quals : 0));
11408               }
11409             else
11410               {
11411                 r = copy_type (t);
11412                 TEMPLATE_TYPE_PARM_INDEX (r)
11413                   = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
11414                                                 r, levels, args, complain);
11415                 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
11416                 TYPE_MAIN_VARIANT (r) = r;
11417                 TYPE_POINTER_TO (r) = NULL_TREE;
11418                 TYPE_REFERENCE_TO (r) = NULL_TREE;
11419
11420                 if (TREE_CODE (r) == TEMPLATE_TEMPLATE_PARM)
11421                   /* We have reduced the level of the template
11422                      template parameter, but not the levels of its
11423                      template parameters, so canonical_type_parameter
11424                      will not be able to find the canonical template
11425                      template parameter for this level. Thus, we
11426                      require structural equality checking to compare
11427                      TEMPLATE_TEMPLATE_PARMs. */
11428                   SET_TYPE_STRUCTURAL_EQUALITY (r);
11429                 else if (TYPE_STRUCTURAL_EQUALITY_P (t))
11430                   SET_TYPE_STRUCTURAL_EQUALITY (r);
11431                 else
11432                   TYPE_CANONICAL (r) = canonical_type_parameter (r);
11433
11434                 if (code == BOUND_TEMPLATE_TEMPLATE_PARM)
11435                   {
11436                     tree argvec = tsubst (TYPE_TI_ARGS (t), args,
11437                                           complain, in_decl);
11438                     if (argvec == error_mark_node)
11439                       return error_mark_node;
11440
11441                     TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
11442                       = build_template_info (TYPE_TI_TEMPLATE (t), argvec);
11443                   }
11444               }
11445             break;
11446
11447           case TEMPLATE_PARM_INDEX:
11448             r = reduce_template_parm_level (t, type, levels, args, complain);
11449             break;
11450
11451           default:
11452             gcc_unreachable ();
11453           }
11454
11455         return r;
11456       }
11457
11458     case TREE_LIST:
11459       {
11460         tree purpose, value, chain;
11461
11462         if (t == void_list_node)
11463           return t;
11464
11465         purpose = TREE_PURPOSE (t);
11466         if (purpose)
11467           {
11468             purpose = tsubst (purpose, args, complain, in_decl);
11469             if (purpose == error_mark_node)
11470               return error_mark_node;
11471           }
11472         value = TREE_VALUE (t);
11473         if (value)
11474           {
11475             value = tsubst (value, args, complain, in_decl);
11476             if (value == error_mark_node)
11477               return error_mark_node;
11478           }
11479         chain = TREE_CHAIN (t);
11480         if (chain && chain != void_type_node)
11481           {
11482             chain = tsubst (chain, args, complain, in_decl);
11483             if (chain == error_mark_node)
11484               return error_mark_node;
11485           }
11486         if (purpose == TREE_PURPOSE (t)
11487             && value == TREE_VALUE (t)
11488             && chain == TREE_CHAIN (t))
11489           return t;
11490         return hash_tree_cons (purpose, value, chain);
11491       }
11492
11493     case TREE_BINFO:
11494       /* We should never be tsubsting a binfo.  */
11495       gcc_unreachable ();
11496
11497     case TREE_VEC:
11498       /* A vector of template arguments.  */
11499       gcc_assert (!type);
11500       return tsubst_template_args (t, args, complain, in_decl);
11501
11502     case POINTER_TYPE:
11503     case REFERENCE_TYPE:
11504       {
11505         if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
11506           return t;
11507
11508         /* [temp.deduct]
11509
11510            Type deduction may fail for any of the following
11511            reasons:
11512
11513            -- Attempting to create a pointer to reference type.
11514            -- Attempting to create a reference to a reference type or
11515               a reference to void.
11516
11517           Core issue 106 says that creating a reference to a reference
11518           during instantiation is no longer a cause for failure. We
11519           only enforce this check in strict C++98 mode.  */
11520         if ((TREE_CODE (type) == REFERENCE_TYPE
11521              && (((cxx_dialect == cxx98) && flag_iso) || code != REFERENCE_TYPE))
11522             || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
11523           {
11524             static location_t last_loc;
11525
11526             /* We keep track of the last time we issued this error
11527                message to avoid spewing a ton of messages during a
11528                single bad template instantiation.  */
11529             if (complain & tf_error
11530                 && last_loc != input_location)
11531               {
11532                 if (TREE_CODE (type) == VOID_TYPE)
11533                   error ("forming reference to void");
11534                else if (code == POINTER_TYPE)
11535                  error ("forming pointer to reference type %qT", type);
11536                else
11537                   error ("forming reference to reference type %qT", type);
11538                 last_loc = input_location;
11539               }
11540
11541             return error_mark_node;
11542           }
11543         else if (code == POINTER_TYPE)
11544           {
11545             r = build_pointer_type (type);
11546             if (TREE_CODE (type) == METHOD_TYPE)
11547               r = build_ptrmemfunc_type (r);
11548           }
11549         else if (TREE_CODE (type) == REFERENCE_TYPE)
11550           /* In C++0x, during template argument substitution, when there is an
11551              attempt to create a reference to a reference type, reference
11552              collapsing is applied as described in [14.3.1/4 temp.arg.type]:
11553
11554              "If a template-argument for a template-parameter T names a type
11555              that is a reference to a type A, an attempt to create the type
11556              'lvalue reference to cv T' creates the type 'lvalue reference to
11557              A,' while an attempt to create the type type rvalue reference to
11558              cv T' creates the type T"
11559           */
11560           r = cp_build_reference_type
11561               (TREE_TYPE (type),
11562                TYPE_REF_IS_RVALUE (t) && TYPE_REF_IS_RVALUE (type));
11563         else
11564           r = cp_build_reference_type (type, TYPE_REF_IS_RVALUE (t));
11565         r = cp_build_qualified_type_real (r, cp_type_quals (t), complain);
11566
11567         if (r != error_mark_node)
11568           /* Will this ever be needed for TYPE_..._TO values?  */
11569           layout_type (r);
11570
11571         return r;
11572       }
11573     case OFFSET_TYPE:
11574       {
11575         r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
11576         if (r == error_mark_node || !MAYBE_CLASS_TYPE_P (r))
11577           {
11578             /* [temp.deduct]
11579
11580                Type deduction may fail for any of the following
11581                reasons:
11582
11583                -- Attempting to create "pointer to member of T" when T
11584                   is not a class type.  */
11585             if (complain & tf_error)
11586               error ("creating pointer to member of non-class type %qT", r);
11587             return error_mark_node;
11588           }
11589         if (TREE_CODE (type) == REFERENCE_TYPE)
11590           {
11591             if (complain & tf_error)
11592               error ("creating pointer to member reference type %qT", type);
11593             return error_mark_node;
11594           }
11595         if (TREE_CODE (type) == VOID_TYPE)
11596           {
11597             if (complain & tf_error)
11598               error ("creating pointer to member of type void");
11599             return error_mark_node;
11600           }
11601         gcc_assert (TREE_CODE (type) != METHOD_TYPE);
11602         if (TREE_CODE (type) == FUNCTION_TYPE)
11603           {
11604             /* The type of the implicit object parameter gets its
11605                cv-qualifiers from the FUNCTION_TYPE. */
11606             tree memptr;
11607             tree method_type = build_memfn_type (type, r, type_memfn_quals (type));
11608             memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
11609             return cp_build_qualified_type_real (memptr, cp_type_quals (t),
11610                                                  complain);
11611           }
11612         else
11613           return cp_build_qualified_type_real (build_ptrmem_type (r, type),
11614                                                cp_type_quals (t),
11615                                                complain);
11616       }
11617     case FUNCTION_TYPE:
11618     case METHOD_TYPE:
11619       {
11620         tree fntype;
11621         tree specs;
11622         fntype = tsubst_function_type (t, args, complain, in_decl);
11623         if (fntype == error_mark_node)
11624           return error_mark_node;
11625
11626         /* Substitute the exception specification.  */
11627         specs = tsubst_exception_specification (t, args, complain,
11628                                                 in_decl, /*defer_ok*/true);
11629         if (specs == error_mark_node)
11630           return error_mark_node;
11631         if (specs)
11632           fntype = build_exception_variant (fntype, specs);
11633         return fntype;
11634       }
11635     case ARRAY_TYPE:
11636       {
11637         tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
11638         if (domain == error_mark_node)
11639           return error_mark_node;
11640
11641         /* As an optimization, we avoid regenerating the array type if
11642            it will obviously be the same as T.  */
11643         if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
11644           return t;
11645
11646         /* These checks should match the ones in grokdeclarator.
11647
11648            [temp.deduct]
11649
11650            The deduction may fail for any of the following reasons:
11651
11652            -- Attempting to create an array with an element type that
11653               is void, a function type, or a reference type, or [DR337]
11654               an abstract class type.  */
11655         if (TREE_CODE (type) == VOID_TYPE
11656             || TREE_CODE (type) == FUNCTION_TYPE
11657             || TREE_CODE (type) == REFERENCE_TYPE)
11658           {
11659             if (complain & tf_error)
11660               error ("creating array of %qT", type);
11661             return error_mark_node;
11662           }
11663         if (CLASS_TYPE_P (type) && CLASSTYPE_PURE_VIRTUALS (type))
11664           {
11665             if (complain & tf_error)
11666               error ("creating array of %qT, which is an abstract class type",
11667                      type);
11668             return error_mark_node;
11669           }
11670
11671         r = build_cplus_array_type (type, domain);
11672
11673         if (TYPE_USER_ALIGN (t))
11674           {
11675             TYPE_ALIGN (r) = TYPE_ALIGN (t);
11676             TYPE_USER_ALIGN (r) = 1;
11677           }
11678
11679         return r;
11680       }
11681
11682     case TYPENAME_TYPE:
11683       {
11684         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
11685                                      in_decl, /*entering_scope=*/1);
11686         tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
11687                               complain, in_decl);
11688
11689         if (ctx == error_mark_node || f == error_mark_node)
11690           return error_mark_node;
11691
11692         if (!MAYBE_CLASS_TYPE_P (ctx))
11693           {
11694             if (complain & tf_error)
11695               error ("%qT is not a class, struct, or union type", ctx);
11696             return error_mark_node;
11697           }
11698         else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
11699           {
11700             /* Normally, make_typename_type does not require that the CTX
11701                have complete type in order to allow things like:
11702
11703                  template <class T> struct S { typename S<T>::X Y; };
11704
11705                But, such constructs have already been resolved by this
11706                point, so here CTX really should have complete type, unless
11707                it's a partial instantiation.  */
11708             ctx = complete_type (ctx);
11709             if (!COMPLETE_TYPE_P (ctx))
11710               {
11711                 if (complain & tf_error)
11712                   cxx_incomplete_type_error (NULL_TREE, ctx);
11713                 return error_mark_node;
11714               }
11715           }
11716
11717         f = make_typename_type (ctx, f, typename_type,
11718                                 (complain & tf_error) | tf_keep_type_decl);
11719         if (f == error_mark_node)
11720           return f;
11721         if (TREE_CODE (f) == TYPE_DECL)
11722           {
11723             complain |= tf_ignore_bad_quals;
11724             f = TREE_TYPE (f);
11725           }
11726
11727         if (TREE_CODE (f) != TYPENAME_TYPE)
11728           {
11729             if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
11730               {
11731                 if (complain & tf_error)
11732                   error ("%qT resolves to %qT, which is not an enumeration type",
11733                          t, f);
11734                 else
11735                   return error_mark_node;
11736               }
11737             else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
11738               {
11739                 if (complain & tf_error)
11740                   error ("%qT resolves to %qT, which is is not a class type",
11741                          t, f);
11742                 else
11743                   return error_mark_node;
11744               }
11745           }
11746
11747         return cp_build_qualified_type_real
11748           (f, cp_type_quals (f) | cp_type_quals (t), complain);
11749       }
11750
11751     case UNBOUND_CLASS_TEMPLATE:
11752       {
11753         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
11754                                      in_decl, /*entering_scope=*/1);
11755         tree name = TYPE_IDENTIFIER (t);
11756         tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
11757
11758         if (ctx == error_mark_node || name == error_mark_node)
11759           return error_mark_node;
11760
11761         if (parm_list)
11762           parm_list = tsubst_template_parms (parm_list, args, complain);
11763         return make_unbound_class_template (ctx, name, parm_list, complain);
11764       }
11765
11766     case TYPEOF_TYPE:
11767       {
11768         tree type;
11769
11770         ++cp_unevaluated_operand;
11771         ++c_inhibit_evaluation_warnings;
11772
11773         type = tsubst_expr (TYPEOF_TYPE_EXPR (t), args,
11774                             complain, in_decl,
11775                             /*integral_constant_expression_p=*/false);
11776
11777         --cp_unevaluated_operand;
11778         --c_inhibit_evaluation_warnings;
11779
11780         type = finish_typeof (type);
11781         return cp_build_qualified_type_real (type,
11782                                              cp_type_quals (t)
11783                                              | cp_type_quals (type),
11784                                              complain);
11785       }
11786
11787     case DECLTYPE_TYPE:
11788       {
11789         tree type;
11790
11791         ++cp_unevaluated_operand;
11792         ++c_inhibit_evaluation_warnings;
11793
11794         type = tsubst_expr (DECLTYPE_TYPE_EXPR (t), args,
11795                             complain, in_decl,
11796                             /*integral_constant_expression_p=*/false);
11797
11798         --cp_unevaluated_operand;
11799         --c_inhibit_evaluation_warnings;
11800
11801         if (DECLTYPE_FOR_LAMBDA_CAPTURE (t))
11802           type = lambda_capture_field_type (type);
11803         else if (DECLTYPE_FOR_LAMBDA_PROXY (t))
11804           type = lambda_proxy_type (type);
11805         else
11806           type = finish_decltype_type
11807             (type, DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t), complain);
11808         return cp_build_qualified_type_real (type,
11809                                              cp_type_quals (t)
11810                                              | cp_type_quals (type),
11811                                              complain);
11812       }
11813
11814     case UNDERLYING_TYPE:
11815       {
11816         tree type = tsubst (UNDERLYING_TYPE_TYPE (t), args,
11817                             complain, in_decl);
11818         return finish_underlying_type (type);
11819       }
11820
11821     case TYPE_ARGUMENT_PACK:
11822     case NONTYPE_ARGUMENT_PACK:
11823       {
11824         tree r = TYPE_P (t) ? cxx_make_type (code) : make_node (code);
11825         tree packed_out = 
11826           tsubst_template_args (ARGUMENT_PACK_ARGS (t), 
11827                                 args,
11828                                 complain,
11829                                 in_decl);
11830         SET_ARGUMENT_PACK_ARGS (r, packed_out);
11831
11832         /* For template nontype argument packs, also substitute into
11833            the type.  */
11834         if (code == NONTYPE_ARGUMENT_PACK)
11835           TREE_TYPE (r) = tsubst (TREE_TYPE (t), args, complain, in_decl);
11836
11837         return r;
11838       }
11839       break;
11840
11841     case INTEGER_CST:
11842     case REAL_CST:
11843     case STRING_CST:
11844     case PLUS_EXPR:
11845     case MINUS_EXPR:
11846     case NEGATE_EXPR:
11847     case NOP_EXPR:
11848     case INDIRECT_REF:
11849     case ADDR_EXPR:
11850     case CALL_EXPR:
11851     case ARRAY_REF:
11852     case SCOPE_REF:
11853       /* We should use one of the expression tsubsts for these codes.  */
11854       gcc_unreachable ();
11855
11856     default:
11857       sorry ("use of %qs in template", tree_code_name [(int) code]);
11858       return error_mark_node;
11859     }
11860 }
11861
11862 /* Like tsubst_expr for a BASELINK.  OBJECT_TYPE, if non-NULL, is the
11863    type of the expression on the left-hand side of the "." or "->"
11864    operator.  */
11865
11866 static tree
11867 tsubst_baselink (tree baselink, tree object_type,
11868                  tree args, tsubst_flags_t complain, tree in_decl)
11869 {
11870     tree name;
11871     tree qualifying_scope;
11872     tree fns;
11873     tree optype;
11874     tree template_args = 0;
11875     bool template_id_p = false;
11876     bool qualified = BASELINK_QUALIFIED_P (baselink);
11877
11878     /* A baselink indicates a function from a base class.  Both the
11879        BASELINK_ACCESS_BINFO and the base class referenced may
11880        indicate bases of the template class, rather than the
11881        instantiated class.  In addition, lookups that were not
11882        ambiguous before may be ambiguous now.  Therefore, we perform
11883        the lookup again.  */
11884     qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
11885     qualifying_scope = tsubst (qualifying_scope, args,
11886                                complain, in_decl);
11887     fns = BASELINK_FUNCTIONS (baselink);
11888     optype = tsubst (BASELINK_OPTYPE (baselink), args, complain, in_decl);
11889     if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
11890       {
11891         template_id_p = true;
11892         template_args = TREE_OPERAND (fns, 1);
11893         fns = TREE_OPERAND (fns, 0);
11894         if (template_args)
11895           template_args = tsubst_template_args (template_args, args,
11896                                                 complain, in_decl);
11897       }
11898     name = DECL_NAME (get_first_fn (fns));
11899     if (IDENTIFIER_TYPENAME_P (name))
11900       name = mangle_conv_op_name_for_type (optype);
11901     baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
11902     if (!baselink)
11903       return error_mark_node;
11904
11905     /* If lookup found a single function, mark it as used at this
11906        point.  (If it lookup found multiple functions the one selected
11907        later by overload resolution will be marked as used at that
11908        point.)  */
11909     if (BASELINK_P (baselink))
11910       fns = BASELINK_FUNCTIONS (baselink);
11911     if (!template_id_p && !really_overloaded_fn (fns))
11912       mark_used (OVL_CURRENT (fns));
11913
11914     /* Add back the template arguments, if present.  */
11915     if (BASELINK_P (baselink) && template_id_p)
11916       BASELINK_FUNCTIONS (baselink)
11917         = build_nt (TEMPLATE_ID_EXPR,
11918                     BASELINK_FUNCTIONS (baselink),
11919                     template_args);
11920     /* Update the conversion operator type.  */
11921     BASELINK_OPTYPE (baselink) = optype;
11922
11923     if (!object_type)
11924       object_type = current_class_type;
11925
11926     if (qualified)
11927       baselink = adjust_result_of_qualified_name_lookup (baselink,
11928                                                          qualifying_scope,
11929                                                          object_type);
11930     return baselink;
11931 }
11932
11933 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID.  DONE is
11934    true if the qualified-id will be a postfix-expression in-and-of
11935    itself; false if more of the postfix-expression follows the
11936    QUALIFIED_ID.  ADDRESS_P is true if the qualified-id is the operand
11937    of "&".  */
11938
11939 static tree
11940 tsubst_qualified_id (tree qualified_id, tree args,
11941                      tsubst_flags_t complain, tree in_decl,
11942                      bool done, bool address_p)
11943 {
11944   tree expr;
11945   tree scope;
11946   tree name;
11947   bool is_template;
11948   tree template_args;
11949
11950   gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
11951
11952   /* Figure out what name to look up.  */
11953   name = TREE_OPERAND (qualified_id, 1);
11954   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
11955     {
11956       is_template = true;
11957       template_args = TREE_OPERAND (name, 1);
11958       if (template_args)
11959         template_args = tsubst_template_args (template_args, args,
11960                                               complain, in_decl);
11961       name = TREE_OPERAND (name, 0);
11962     }
11963   else
11964     {
11965       is_template = false;
11966       template_args = NULL_TREE;
11967     }
11968
11969   /* Substitute into the qualifying scope.  When there are no ARGS, we
11970      are just trying to simplify a non-dependent expression.  In that
11971      case the qualifying scope may be dependent, and, in any case,
11972      substituting will not help.  */
11973   scope = TREE_OPERAND (qualified_id, 0);
11974   if (args)
11975     {
11976       scope = tsubst (scope, args, complain, in_decl);
11977       expr = tsubst_copy (name, args, complain, in_decl);
11978     }
11979   else
11980     expr = name;
11981
11982   if (dependent_scope_p (scope))
11983     {
11984       if (is_template)
11985         expr = build_min_nt (TEMPLATE_ID_EXPR, expr, template_args);
11986       return build_qualified_name (NULL_TREE, scope, expr,
11987                                    QUALIFIED_NAME_IS_TEMPLATE (qualified_id));
11988     }
11989
11990   if (!BASELINK_P (name) && !DECL_P (expr))
11991     {
11992       if (TREE_CODE (expr) == BIT_NOT_EXPR)
11993         {
11994           /* A BIT_NOT_EXPR is used to represent a destructor.  */
11995           if (!check_dtor_name (scope, TREE_OPERAND (expr, 0)))
11996             {
11997               error ("qualifying type %qT does not match destructor name ~%qT",
11998                      scope, TREE_OPERAND (expr, 0));
11999               expr = error_mark_node;
12000             }
12001           else
12002             expr = lookup_qualified_name (scope, complete_dtor_identifier,
12003                                           /*is_type_p=*/0, false);
12004         }
12005       else
12006         expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
12007       if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
12008                      ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
12009         {
12010           if (complain & tf_error)
12011             {
12012               error ("dependent-name %qE is parsed as a non-type, but "
12013                      "instantiation yields a type", qualified_id);
12014               inform (input_location, "say %<typename %E%> if a type is meant", qualified_id);
12015             }
12016           return error_mark_node;
12017         }
12018     }
12019
12020   if (DECL_P (expr))
12021     {
12022       check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
12023                                            scope);
12024       /* Remember that there was a reference to this entity.  */
12025       mark_used (expr);
12026     }
12027
12028   if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
12029     {
12030       if (complain & tf_error)
12031         qualified_name_lookup_error (scope,
12032                                      TREE_OPERAND (qualified_id, 1),
12033                                      expr, input_location);
12034       return error_mark_node;
12035     }
12036
12037   if (is_template)
12038     expr = lookup_template_function (expr, template_args);
12039
12040   if (expr == error_mark_node && complain & tf_error)
12041     qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
12042                                  expr, input_location);
12043   else if (TYPE_P (scope))
12044     {
12045       expr = (adjust_result_of_qualified_name_lookup
12046               (expr, scope, current_class_type));
12047       expr = (finish_qualified_id_expr
12048               (scope, expr, done, address_p && PTRMEM_OK_P (qualified_id),
12049                QUALIFIED_NAME_IS_TEMPLATE (qualified_id),
12050                /*template_arg_p=*/false));
12051     }
12052
12053   /* Expressions do not generally have reference type.  */
12054   if (TREE_CODE (expr) != SCOPE_REF
12055       /* However, if we're about to form a pointer-to-member, we just
12056          want the referenced member referenced.  */
12057       && TREE_CODE (expr) != OFFSET_REF)
12058     expr = convert_from_reference (expr);
12059
12060   return expr;
12061 }
12062
12063 /* Like tsubst, but deals with expressions.  This function just replaces
12064    template parms; to finish processing the resultant expression, use
12065    tsubst_copy_and_build or tsubst_expr.  */
12066
12067 static tree
12068 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
12069 {
12070   enum tree_code code;
12071   tree r;
12072
12073   if (t == NULL_TREE || t == error_mark_node || args == NULL_TREE)
12074     return t;
12075
12076   code = TREE_CODE (t);
12077
12078   switch (code)
12079     {
12080     case PARM_DECL:
12081       r = retrieve_local_specialization (t);
12082
12083       if (r == NULL)
12084         {
12085           tree c;
12086
12087           /* We get here for a use of 'this' in an NSDMI.  */
12088           if (DECL_NAME (t) == this_identifier
12089               && at_function_scope_p ()
12090               && DECL_CONSTRUCTOR_P (current_function_decl))
12091             return current_class_ptr;
12092
12093           /* This can happen for a parameter name used later in a function
12094              declaration (such as in a late-specified return type).  Just
12095              make a dummy decl, since it's only used for its type.  */
12096           gcc_assert (cp_unevaluated_operand != 0);
12097           /* We copy T because want to tsubst the PARM_DECL only,
12098              not the following PARM_DECLs that are chained to T.  */
12099           c = copy_node (t);
12100           r = tsubst_decl (c, args, complain);
12101           /* Give it the template pattern as its context; its true context
12102              hasn't been instantiated yet and this is good enough for
12103              mangling.  */
12104           DECL_CONTEXT (r) = DECL_CONTEXT (t);
12105         }
12106       
12107       if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
12108         r = ARGUMENT_PACK_SELECT_ARG (r);
12109       mark_used (r);
12110       return r;
12111
12112     case CONST_DECL:
12113       {
12114         tree enum_type;
12115         tree v;
12116
12117         if (DECL_TEMPLATE_PARM_P (t))
12118           return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
12119         /* There is no need to substitute into namespace-scope
12120            enumerators.  */
12121         if (DECL_NAMESPACE_SCOPE_P (t))
12122           return t;
12123         /* If ARGS is NULL, then T is known to be non-dependent.  */
12124         if (args == NULL_TREE)
12125           return integral_constant_value (t);
12126
12127         /* Unfortunately, we cannot just call lookup_name here.
12128            Consider:
12129
12130              template <int I> int f() {
12131              enum E { a = I };
12132              struct S { void g() { E e = a; } };
12133              };
12134
12135            When we instantiate f<7>::S::g(), say, lookup_name is not
12136            clever enough to find f<7>::a.  */
12137         enum_type
12138           = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl,
12139                               /*entering_scope=*/0);
12140
12141         for (v = TYPE_VALUES (enum_type);
12142              v != NULL_TREE;
12143              v = TREE_CHAIN (v))
12144           if (TREE_PURPOSE (v) == DECL_NAME (t))
12145             return TREE_VALUE (v);
12146
12147           /* We didn't find the name.  That should never happen; if
12148              name-lookup found it during preliminary parsing, we
12149              should find it again here during instantiation.  */
12150         gcc_unreachable ();
12151       }
12152       return t;
12153
12154     case FIELD_DECL:
12155       if (DECL_CONTEXT (t))
12156         {
12157           tree ctx;
12158
12159           ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
12160                                   /*entering_scope=*/1);
12161           if (ctx != DECL_CONTEXT (t))
12162             {
12163               tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
12164               if (!r)
12165                 {
12166                   if (complain & tf_error)
12167                     error ("using invalid field %qD", t);
12168                   return error_mark_node;
12169                 }
12170               return r;
12171             }
12172         }
12173
12174       return t;
12175
12176     case VAR_DECL:
12177     case FUNCTION_DECL:
12178       if ((DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
12179           || local_variable_p (t))
12180         t = tsubst (t, args, complain, in_decl);
12181       mark_used (t);
12182       return t;
12183
12184     case NAMESPACE_DECL:
12185       return t;
12186
12187     case OVERLOAD:
12188       /* An OVERLOAD will always be a non-dependent overload set; an
12189          overload set from function scope will just be represented with an
12190          IDENTIFIER_NODE, and from class scope with a BASELINK.  */
12191       gcc_assert (!uses_template_parms (t));
12192       return t;
12193
12194     case BASELINK:
12195       return tsubst_baselink (t, current_class_type, args, complain, in_decl);
12196
12197     case TEMPLATE_DECL:
12198       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
12199         return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
12200                        args, complain, in_decl);
12201       else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
12202         return tsubst (t, args, complain, in_decl);
12203       else if (DECL_CLASS_SCOPE_P (t)
12204                && uses_template_parms (DECL_CONTEXT (t)))
12205         {
12206           /* Template template argument like the following example need
12207              special treatment:
12208
12209                template <template <class> class TT> struct C {};
12210                template <class T> struct D {
12211                  template <class U> struct E {};
12212                  C<E> c;                                // #1
12213                };
12214                D<int> d;                                // #2
12215
12216              We are processing the template argument `E' in #1 for
12217              the template instantiation #2.  Originally, `E' is a
12218              TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT.  Now we
12219              have to substitute this with one having context `D<int>'.  */
12220
12221           tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
12222           return lookup_field (context, DECL_NAME(t), 0, false);
12223         }
12224       else
12225         /* Ordinary template template argument.  */
12226         return t;
12227
12228     case CAST_EXPR:
12229     case REINTERPRET_CAST_EXPR:
12230     case CONST_CAST_EXPR:
12231     case STATIC_CAST_EXPR:
12232     case DYNAMIC_CAST_EXPR:
12233     case IMPLICIT_CONV_EXPR:
12234     case CONVERT_EXPR:
12235     case NOP_EXPR:
12236       return build1
12237         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
12238          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
12239
12240     case SIZEOF_EXPR:
12241       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
12242         {
12243
12244           tree expanded;
12245           int len = 0;
12246
12247           ++cp_unevaluated_operand;
12248           ++c_inhibit_evaluation_warnings;
12249           /* We only want to compute the number of arguments.  */
12250           expanded = tsubst_pack_expansion (TREE_OPERAND (t, 0), args,
12251                                             complain, in_decl);
12252           --cp_unevaluated_operand;
12253           --c_inhibit_evaluation_warnings;
12254
12255           if (TREE_CODE (expanded) == TREE_VEC)
12256             len = TREE_VEC_LENGTH (expanded);
12257
12258           if (expanded == error_mark_node)
12259             return error_mark_node;
12260           else if (PACK_EXPANSION_P (expanded)
12261                    || (TREE_CODE (expanded) == TREE_VEC
12262                        && len > 0
12263                        && PACK_EXPANSION_P (TREE_VEC_ELT (expanded, len-1))))
12264             {
12265               if (TREE_CODE (expanded) == TREE_VEC)
12266                 expanded = TREE_VEC_ELT (expanded, len - 1);
12267
12268               if (TYPE_P (expanded))
12269                 return cxx_sizeof_or_alignof_type (expanded, SIZEOF_EXPR, 
12270                                                    complain & tf_error);
12271               else
12272                 return cxx_sizeof_or_alignof_expr (expanded, SIZEOF_EXPR,
12273                                                    complain & tf_error);
12274             }
12275           else
12276             return build_int_cst (size_type_node, len);
12277         }
12278       /* Fall through */
12279
12280     case INDIRECT_REF:
12281     case NEGATE_EXPR:
12282     case TRUTH_NOT_EXPR:
12283     case BIT_NOT_EXPR:
12284     case ADDR_EXPR:
12285     case UNARY_PLUS_EXPR:      /* Unary + */
12286     case ALIGNOF_EXPR:
12287     case AT_ENCODE_EXPR:
12288     case ARROW_EXPR:
12289     case THROW_EXPR:
12290     case TYPEID_EXPR:
12291     case REALPART_EXPR:
12292     case IMAGPART_EXPR:
12293       return build1
12294         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
12295          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
12296
12297     case COMPONENT_REF:
12298       {
12299         tree object;
12300         tree name;
12301
12302         object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
12303         name = TREE_OPERAND (t, 1);
12304         if (TREE_CODE (name) == BIT_NOT_EXPR)
12305           {
12306             name = tsubst_copy (TREE_OPERAND (name, 0), args,
12307                                 complain, in_decl);
12308             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
12309           }
12310         else if (TREE_CODE (name) == SCOPE_REF
12311                  && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
12312           {
12313             tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
12314                                      complain, in_decl);
12315             name = TREE_OPERAND (name, 1);
12316             name = tsubst_copy (TREE_OPERAND (name, 0), args,
12317                                 complain, in_decl);
12318             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
12319             name = build_qualified_name (/*type=*/NULL_TREE,
12320                                          base, name,
12321                                          /*template_p=*/false);
12322           }
12323         else if (BASELINK_P (name))
12324           name = tsubst_baselink (name,
12325                                   non_reference (TREE_TYPE (object)),
12326                                   args, complain,
12327                                   in_decl);
12328         else
12329           name = tsubst_copy (name, args, complain, in_decl);
12330         return build_nt (COMPONENT_REF, object, name, NULL_TREE);
12331       }
12332
12333     case PLUS_EXPR:
12334     case MINUS_EXPR:
12335     case MULT_EXPR:
12336     case TRUNC_DIV_EXPR:
12337     case CEIL_DIV_EXPR:
12338     case FLOOR_DIV_EXPR:
12339     case ROUND_DIV_EXPR:
12340     case EXACT_DIV_EXPR:
12341     case BIT_AND_EXPR:
12342     case BIT_IOR_EXPR:
12343     case BIT_XOR_EXPR:
12344     case TRUNC_MOD_EXPR:
12345     case FLOOR_MOD_EXPR:
12346     case TRUTH_ANDIF_EXPR:
12347     case TRUTH_ORIF_EXPR:
12348     case TRUTH_AND_EXPR:
12349     case TRUTH_OR_EXPR:
12350     case RSHIFT_EXPR:
12351     case LSHIFT_EXPR:
12352     case RROTATE_EXPR:
12353     case LROTATE_EXPR:
12354     case EQ_EXPR:
12355     case NE_EXPR:
12356     case MAX_EXPR:
12357     case MIN_EXPR:
12358     case LE_EXPR:
12359     case GE_EXPR:
12360     case LT_EXPR:
12361     case GT_EXPR:
12362     case COMPOUND_EXPR:
12363     case DOTSTAR_EXPR:
12364     case MEMBER_REF:
12365     case PREDECREMENT_EXPR:
12366     case PREINCREMENT_EXPR:
12367     case POSTDECREMENT_EXPR:
12368     case POSTINCREMENT_EXPR:
12369       return build_nt
12370         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12371          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
12372
12373     case SCOPE_REF:
12374       return build_qualified_name (/*type=*/NULL_TREE,
12375                                    tsubst_copy (TREE_OPERAND (t, 0),
12376                                                 args, complain, in_decl),
12377                                    tsubst_copy (TREE_OPERAND (t, 1),
12378                                                 args, complain, in_decl),
12379                                    QUALIFIED_NAME_IS_TEMPLATE (t));
12380
12381     case ARRAY_REF:
12382       return build_nt
12383         (ARRAY_REF,
12384          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12385          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
12386          NULL_TREE, NULL_TREE);
12387
12388     case CALL_EXPR:
12389       {
12390         int n = VL_EXP_OPERAND_LENGTH (t);
12391         tree result = build_vl_exp (CALL_EXPR, n);
12392         int i;
12393         for (i = 0; i < n; i++)
12394           TREE_OPERAND (t, i) = tsubst_copy (TREE_OPERAND (t, i), args,
12395                                              complain, in_decl);
12396         return result;
12397       }
12398
12399     case COND_EXPR:
12400     case MODOP_EXPR:
12401     case PSEUDO_DTOR_EXPR:
12402       {
12403         r = build_nt
12404           (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12405            tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
12406            tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
12407         TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
12408         return r;
12409       }
12410
12411     case NEW_EXPR:
12412       {
12413         r = build_nt
12414         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12415          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
12416          tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
12417         NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
12418         return r;
12419       }
12420
12421     case DELETE_EXPR:
12422       {
12423         r = build_nt
12424         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12425          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
12426         DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
12427         DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
12428         return r;
12429       }
12430
12431     case TEMPLATE_ID_EXPR:
12432       {
12433         /* Substituted template arguments */
12434         tree fn = TREE_OPERAND (t, 0);
12435         tree targs = TREE_OPERAND (t, 1);
12436
12437         fn = tsubst_copy (fn, args, complain, in_decl);
12438         if (targs)
12439           targs = tsubst_template_args (targs, args, complain, in_decl);
12440
12441         return lookup_template_function (fn, targs);
12442       }
12443
12444     case TREE_LIST:
12445       {
12446         tree purpose, value, chain;
12447
12448         if (t == void_list_node)
12449           return t;
12450
12451         purpose = TREE_PURPOSE (t);
12452         if (purpose)
12453           purpose = tsubst_copy (purpose, args, complain, in_decl);
12454         value = TREE_VALUE (t);
12455         if (value)
12456           value = tsubst_copy (value, args, complain, in_decl);
12457         chain = TREE_CHAIN (t);
12458         if (chain && chain != void_type_node)
12459           chain = tsubst_copy (chain, args, complain, in_decl);
12460         if (purpose == TREE_PURPOSE (t)
12461             && value == TREE_VALUE (t)
12462             && chain == TREE_CHAIN (t))
12463           return t;
12464         return tree_cons (purpose, value, chain);
12465       }
12466
12467     case RECORD_TYPE:
12468     case UNION_TYPE:
12469     case ENUMERAL_TYPE:
12470     case INTEGER_TYPE:
12471     case TEMPLATE_TYPE_PARM:
12472     case TEMPLATE_TEMPLATE_PARM:
12473     case BOUND_TEMPLATE_TEMPLATE_PARM:
12474     case TEMPLATE_PARM_INDEX:
12475     case POINTER_TYPE:
12476     case REFERENCE_TYPE:
12477     case OFFSET_TYPE:
12478     case FUNCTION_TYPE:
12479     case METHOD_TYPE:
12480     case ARRAY_TYPE:
12481     case TYPENAME_TYPE:
12482     case UNBOUND_CLASS_TEMPLATE:
12483     case TYPEOF_TYPE:
12484     case DECLTYPE_TYPE:
12485     case TYPE_DECL:
12486       return tsubst (t, args, complain, in_decl);
12487
12488     case IDENTIFIER_NODE:
12489       if (IDENTIFIER_TYPENAME_P (t))
12490         {
12491           tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
12492           return mangle_conv_op_name_for_type (new_type);
12493         }
12494       else
12495         return t;
12496
12497     case CONSTRUCTOR:
12498       /* This is handled by tsubst_copy_and_build.  */
12499       gcc_unreachable ();
12500
12501     case VA_ARG_EXPR:
12502       return build_x_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
12503                                           in_decl),
12504                              tsubst (TREE_TYPE (t), args, complain, in_decl));
12505
12506     case CLEANUP_POINT_EXPR:
12507       /* We shouldn't have built any of these during initial template
12508          generation.  Instead, they should be built during instantiation
12509          in response to the saved STMT_IS_FULL_EXPR_P setting.  */
12510       gcc_unreachable ();
12511
12512     case OFFSET_REF:
12513       r = build2
12514         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
12515          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12516          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
12517       PTRMEM_OK_P (r) = PTRMEM_OK_P (t);
12518       mark_used (TREE_OPERAND (r, 1));
12519       return r;
12520
12521     case EXPR_PACK_EXPANSION:
12522       error ("invalid use of pack expansion expression");
12523       return error_mark_node;
12524
12525     case NONTYPE_ARGUMENT_PACK:
12526       error ("use %<...%> to expand argument pack");
12527       return error_mark_node;
12528
12529     case INTEGER_CST:
12530     case REAL_CST:
12531     case STRING_CST:
12532     case COMPLEX_CST:
12533       {
12534         /* Instantiate any typedefs in the type.  */
12535         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
12536         r = fold_convert (type, t);
12537         gcc_assert (TREE_CODE (r) == code);
12538         return r;
12539       }
12540
12541     case PTRMEM_CST:
12542       /* These can sometimes show up in a partial instantiation, but never
12543          involve template parms.  */
12544       gcc_assert (!uses_template_parms (t));
12545       return t;
12546
12547     default:
12548       /* We shouldn't get here, but keep going if !ENABLE_CHECKING.  */
12549       gcc_checking_assert (false);
12550       return t;
12551     }
12552 }
12553
12554 /* Like tsubst_copy, but specifically for OpenMP clauses.  */
12555
12556 static tree
12557 tsubst_omp_clauses (tree clauses, tree args, tsubst_flags_t complain,
12558                     tree in_decl)
12559 {
12560   tree new_clauses = NULL, nc, oc;
12561
12562   for (oc = clauses; oc ; oc = OMP_CLAUSE_CHAIN (oc))
12563     {
12564       nc = copy_node (oc);
12565       OMP_CLAUSE_CHAIN (nc) = new_clauses;
12566       new_clauses = nc;
12567
12568       switch (OMP_CLAUSE_CODE (nc))
12569         {
12570         case OMP_CLAUSE_LASTPRIVATE:
12571           if (OMP_CLAUSE_LASTPRIVATE_STMT (oc))
12572             {
12573               OMP_CLAUSE_LASTPRIVATE_STMT (nc) = push_stmt_list ();
12574               tsubst_expr (OMP_CLAUSE_LASTPRIVATE_STMT (oc), args, complain,
12575                            in_decl, /*integral_constant_expression_p=*/false);
12576               OMP_CLAUSE_LASTPRIVATE_STMT (nc)
12577                 = pop_stmt_list (OMP_CLAUSE_LASTPRIVATE_STMT (nc));
12578             }
12579           /* FALLTHRU */
12580         case OMP_CLAUSE_PRIVATE:
12581         case OMP_CLAUSE_SHARED:
12582         case OMP_CLAUSE_FIRSTPRIVATE:
12583         case OMP_CLAUSE_REDUCTION:
12584         case OMP_CLAUSE_COPYIN:
12585         case OMP_CLAUSE_COPYPRIVATE:
12586         case OMP_CLAUSE_IF:
12587         case OMP_CLAUSE_NUM_THREADS:
12588         case OMP_CLAUSE_SCHEDULE:
12589         case OMP_CLAUSE_COLLAPSE:
12590         case OMP_CLAUSE_FINAL:
12591           OMP_CLAUSE_OPERAND (nc, 0)
12592             = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain, 
12593                            in_decl, /*integral_constant_expression_p=*/false);
12594           break;
12595         case OMP_CLAUSE_NOWAIT:
12596         case OMP_CLAUSE_ORDERED:
12597         case OMP_CLAUSE_DEFAULT:
12598         case OMP_CLAUSE_UNTIED:
12599         case OMP_CLAUSE_MERGEABLE:
12600           break;
12601         default:
12602           gcc_unreachable ();
12603         }
12604     }
12605
12606   return finish_omp_clauses (nreverse (new_clauses));
12607 }
12608
12609 /* Like tsubst_copy_and_build, but unshare TREE_LIST nodes.  */
12610
12611 static tree
12612 tsubst_copy_asm_operands (tree t, tree args, tsubst_flags_t complain,
12613                           tree in_decl)
12614 {
12615 #define RECUR(t) tsubst_copy_asm_operands (t, args, complain, in_decl)
12616
12617   tree purpose, value, chain;
12618
12619   if (t == NULL)
12620     return t;
12621
12622   if (TREE_CODE (t) != TREE_LIST)
12623     return tsubst_copy_and_build (t, args, complain, in_decl,
12624                                   /*function_p=*/false,
12625                                   /*integral_constant_expression_p=*/false);
12626
12627   if (t == void_list_node)
12628     return t;
12629
12630   purpose = TREE_PURPOSE (t);
12631   if (purpose)
12632     purpose = RECUR (purpose);
12633   value = TREE_VALUE (t);
12634   if (value)
12635     {
12636       if (TREE_CODE (value) != LABEL_DECL)
12637         value = RECUR (value);
12638       else
12639         {
12640           value = lookup_label (DECL_NAME (value));
12641           gcc_assert (TREE_CODE (value) == LABEL_DECL);
12642           TREE_USED (value) = 1;
12643         }
12644     }
12645   chain = TREE_CHAIN (t);
12646   if (chain && chain != void_type_node)
12647     chain = RECUR (chain);
12648   return tree_cons (purpose, value, chain);
12649 #undef RECUR
12650 }
12651
12652 /* Substitute one OMP_FOR iterator.  */
12653
12654 static void
12655 tsubst_omp_for_iterator (tree t, int i, tree declv, tree initv,
12656                          tree condv, tree incrv, tree *clauses,
12657                          tree args, tsubst_flags_t complain, tree in_decl,
12658                          bool integral_constant_expression_p)
12659 {
12660 #define RECUR(NODE)                             \
12661   tsubst_expr ((NODE), args, complain, in_decl, \
12662                integral_constant_expression_p)
12663   tree decl, init, cond, incr, auto_node;
12664
12665   init = TREE_VEC_ELT (OMP_FOR_INIT (t), i);
12666   gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
12667   decl = RECUR (TREE_OPERAND (init, 0));
12668   init = TREE_OPERAND (init, 1);
12669   auto_node = type_uses_auto (TREE_TYPE (decl));
12670   if (auto_node && init)
12671     {
12672       tree init_expr = init;
12673       if (TREE_CODE (init_expr) == DECL_EXPR)
12674         init_expr = DECL_INITIAL (DECL_EXPR_DECL (init_expr));
12675       init_expr = RECUR (init_expr);
12676       TREE_TYPE (decl)
12677         = do_auto_deduction (TREE_TYPE (decl), init_expr, auto_node);
12678     }
12679   gcc_assert (!type_dependent_expression_p (decl));
12680
12681   if (!CLASS_TYPE_P (TREE_TYPE (decl)))
12682     {
12683       cond = RECUR (TREE_VEC_ELT (OMP_FOR_COND (t), i));
12684       incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
12685       if (TREE_CODE (incr) == MODIFY_EXPR)
12686         incr = build_x_modify_expr (RECUR (TREE_OPERAND (incr, 0)), NOP_EXPR,
12687                                     RECUR (TREE_OPERAND (incr, 1)),
12688                                     complain);
12689       else
12690         incr = RECUR (incr);
12691       TREE_VEC_ELT (declv, i) = decl;
12692       TREE_VEC_ELT (initv, i) = init;
12693       TREE_VEC_ELT (condv, i) = cond;
12694       TREE_VEC_ELT (incrv, i) = incr;
12695       return;
12696     }
12697
12698   if (init && TREE_CODE (init) != DECL_EXPR)
12699     {
12700       tree c;
12701       for (c = *clauses; c ; c = OMP_CLAUSE_CHAIN (c))
12702         {
12703           if ((OMP_CLAUSE_CODE (c) == OMP_CLAUSE_PRIVATE
12704                || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE)
12705               && OMP_CLAUSE_DECL (c) == decl)
12706             break;
12707           else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FIRSTPRIVATE
12708                    && OMP_CLAUSE_DECL (c) == decl)
12709             error ("iteration variable %qD should not be firstprivate", decl);
12710           else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION
12711                    && OMP_CLAUSE_DECL (c) == decl)
12712             error ("iteration variable %qD should not be reduction", decl);
12713         }
12714       if (c == NULL)
12715         {
12716           c = build_omp_clause (input_location, OMP_CLAUSE_PRIVATE);
12717           OMP_CLAUSE_DECL (c) = decl;
12718           c = finish_omp_clauses (c);
12719           if (c)
12720             {
12721               OMP_CLAUSE_CHAIN (c) = *clauses;
12722               *clauses = c;
12723             }
12724         }
12725     }
12726   cond = TREE_VEC_ELT (OMP_FOR_COND (t), i);
12727   if (COMPARISON_CLASS_P (cond))
12728     cond = build2 (TREE_CODE (cond), boolean_type_node,
12729                    RECUR (TREE_OPERAND (cond, 0)),
12730                    RECUR (TREE_OPERAND (cond, 1)));
12731   else
12732     cond = RECUR (cond);
12733   incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
12734   switch (TREE_CODE (incr))
12735     {
12736     case PREINCREMENT_EXPR:
12737     case PREDECREMENT_EXPR:
12738     case POSTINCREMENT_EXPR:
12739     case POSTDECREMENT_EXPR:
12740       incr = build2 (TREE_CODE (incr), TREE_TYPE (decl),
12741                      RECUR (TREE_OPERAND (incr, 0)), NULL_TREE);
12742       break;
12743     case MODIFY_EXPR:
12744       if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
12745           || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
12746         {
12747           tree rhs = TREE_OPERAND (incr, 1);
12748           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl),
12749                          RECUR (TREE_OPERAND (incr, 0)),
12750                          build2 (TREE_CODE (rhs), TREE_TYPE (decl),
12751                                  RECUR (TREE_OPERAND (rhs, 0)),
12752                                  RECUR (TREE_OPERAND (rhs, 1))));
12753         }
12754       else
12755         incr = RECUR (incr);
12756       break;
12757     case MODOP_EXPR:
12758       if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
12759           || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
12760         {
12761           tree lhs = RECUR (TREE_OPERAND (incr, 0));
12762           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl), lhs,
12763                          build2 (TREE_CODE (TREE_OPERAND (incr, 1)),
12764                                  TREE_TYPE (decl), lhs,
12765                                  RECUR (TREE_OPERAND (incr, 2))));
12766         }
12767       else if (TREE_CODE (TREE_OPERAND (incr, 1)) == NOP_EXPR
12768                && (TREE_CODE (TREE_OPERAND (incr, 2)) == PLUS_EXPR
12769                    || (TREE_CODE (TREE_OPERAND (incr, 2)) == MINUS_EXPR)))
12770         {
12771           tree rhs = TREE_OPERAND (incr, 2);
12772           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl),
12773                          RECUR (TREE_OPERAND (incr, 0)),
12774                          build2 (TREE_CODE (rhs), TREE_TYPE (decl),
12775                                  RECUR (TREE_OPERAND (rhs, 0)),
12776                                  RECUR (TREE_OPERAND (rhs, 1))));
12777         }
12778       else
12779         incr = RECUR (incr);
12780       break;
12781     default:
12782       incr = RECUR (incr);
12783       break;
12784     }
12785
12786   TREE_VEC_ELT (declv, i) = decl;
12787   TREE_VEC_ELT (initv, i) = init;
12788   TREE_VEC_ELT (condv, i) = cond;
12789   TREE_VEC_ELT (incrv, i) = incr;
12790 #undef RECUR
12791 }
12792
12793 /* Like tsubst_copy for expressions, etc. but also does semantic
12794    processing.  */
12795
12796 static tree
12797 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
12798              bool integral_constant_expression_p)
12799 {
12800 #define RECUR(NODE)                             \
12801   tsubst_expr ((NODE), args, complain, in_decl, \
12802                integral_constant_expression_p)
12803
12804   tree stmt, tmp;
12805
12806   if (t == NULL_TREE || t == error_mark_node)
12807     return t;
12808
12809   if (EXPR_HAS_LOCATION (t))
12810     input_location = EXPR_LOCATION (t);
12811   if (STATEMENT_CODE_P (TREE_CODE (t)))
12812     current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
12813
12814   switch (TREE_CODE (t))
12815     {
12816     case STATEMENT_LIST:
12817       {
12818         tree_stmt_iterator i;
12819         for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
12820           RECUR (tsi_stmt (i));
12821         break;
12822       }
12823
12824     case CTOR_INITIALIZER:
12825       finish_mem_initializers (tsubst_initializer_list
12826                                (TREE_OPERAND (t, 0), args));
12827       break;
12828
12829     case RETURN_EXPR:
12830       finish_return_stmt (RECUR (TREE_OPERAND (t, 0)));
12831       break;
12832
12833     case EXPR_STMT:
12834       tmp = RECUR (EXPR_STMT_EXPR (t));
12835       if (EXPR_STMT_STMT_EXPR_RESULT (t))
12836         finish_stmt_expr_expr (tmp, cur_stmt_expr);
12837       else
12838         finish_expr_stmt (tmp);
12839       break;
12840
12841     case USING_STMT:
12842       do_using_directive (USING_STMT_NAMESPACE (t));
12843       break;
12844
12845     case DECL_EXPR:
12846       {
12847         tree decl, pattern_decl;
12848         tree init;
12849
12850         pattern_decl = decl = DECL_EXPR_DECL (t);
12851         if (TREE_CODE (decl) == LABEL_DECL)
12852           finish_label_decl (DECL_NAME (decl));
12853         else if (TREE_CODE (decl) == USING_DECL)
12854           {
12855             tree scope = USING_DECL_SCOPE (decl);
12856             tree name = DECL_NAME (decl);
12857             tree decl;
12858
12859             scope = tsubst (scope, args, complain, in_decl);
12860             decl = lookup_qualified_name (scope, name,
12861                                           /*is_type_p=*/false,
12862                                           /*complain=*/false);
12863             if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
12864               qualified_name_lookup_error (scope, name, decl, input_location);
12865             else
12866               do_local_using_decl (decl, scope, name);
12867           }
12868         else
12869           {
12870             init = DECL_INITIAL (decl);
12871             decl = tsubst (decl, args, complain, in_decl);
12872             if (decl != error_mark_node)
12873               {
12874                 /* By marking the declaration as instantiated, we avoid
12875                    trying to instantiate it.  Since instantiate_decl can't
12876                    handle local variables, and since we've already done
12877                    all that needs to be done, that's the right thing to
12878                    do.  */
12879                 if (TREE_CODE (decl) == VAR_DECL)
12880                   DECL_TEMPLATE_INSTANTIATED (decl) = 1;
12881                 if (TREE_CODE (decl) == VAR_DECL
12882                     && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
12883                   /* Anonymous aggregates are a special case.  */
12884                   finish_anon_union (decl);
12885                 else if (is_capture_proxy (DECL_EXPR_DECL (t)))
12886                   {
12887                     DECL_CONTEXT (decl) = current_function_decl;
12888                     insert_capture_proxy (decl);
12889                   }
12890                 else
12891                   {
12892                     int const_init = false;
12893                     maybe_push_decl (decl);
12894                     if (TREE_CODE (decl) == VAR_DECL
12895                         && DECL_PRETTY_FUNCTION_P (decl))
12896                       {
12897                         /* For __PRETTY_FUNCTION__ we have to adjust the
12898                            initializer.  */
12899                         const char *const name
12900                           = cxx_printable_name (current_function_decl, 2);
12901                         init = cp_fname_init (name, &TREE_TYPE (decl));
12902                       }
12903                     else
12904                       {
12905                         tree t = RECUR (init);
12906
12907                         if (init && !t)
12908                           {
12909                             /* If we had an initializer but it
12910                                instantiated to nothing,
12911                                value-initialize the object.  This will
12912                                only occur when the initializer was a
12913                                pack expansion where the parameter packs
12914                                used in that expansion were of length
12915                                zero.  */
12916                             init = build_value_init (TREE_TYPE (decl),
12917                                                      complain);
12918                             if (TREE_CODE (init) == AGGR_INIT_EXPR)
12919                               init = get_target_expr_sfinae (init, complain);
12920                           }
12921                         else
12922                           init = t;
12923                       }
12924
12925                     if (TREE_CODE (decl) == VAR_DECL)
12926                       const_init = (DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P
12927                                     (pattern_decl));
12928                     cp_finish_decl (decl, init, const_init, NULL_TREE, 0);
12929                   }
12930               }
12931           }
12932
12933         /* A DECL_EXPR can also be used as an expression, in the condition
12934            clause of an if/for/while construct.  */
12935         return decl;
12936       }
12937
12938     case FOR_STMT:
12939       stmt = begin_for_stmt (NULL_TREE, NULL_TREE);
12940       RECUR (FOR_INIT_STMT (t));
12941       finish_for_init_stmt (stmt);
12942       tmp = RECUR (FOR_COND (t));
12943       finish_for_cond (tmp, stmt);
12944       tmp = RECUR (FOR_EXPR (t));
12945       finish_for_expr (tmp, stmt);
12946       RECUR (FOR_BODY (t));
12947       finish_for_stmt (stmt);
12948       break;
12949
12950     case RANGE_FOR_STMT:
12951       {
12952         tree decl, expr;
12953         stmt = begin_for_stmt (NULL_TREE, NULL_TREE);
12954         decl = RANGE_FOR_DECL (t);
12955         decl = tsubst (decl, args, complain, in_decl);
12956         maybe_push_decl (decl);
12957         expr = RECUR (RANGE_FOR_EXPR (t));
12958         stmt = cp_convert_range_for (stmt, decl, expr);
12959         RECUR (RANGE_FOR_BODY (t));
12960         finish_for_stmt (stmt);
12961       }
12962       break;
12963
12964     case WHILE_STMT:
12965       stmt = begin_while_stmt ();
12966       tmp = RECUR (WHILE_COND (t));
12967       finish_while_stmt_cond (tmp, stmt);
12968       RECUR (WHILE_BODY (t));
12969       finish_while_stmt (stmt);
12970       break;
12971
12972     case DO_STMT:
12973       stmt = begin_do_stmt ();
12974       RECUR (DO_BODY (t));
12975       finish_do_body (stmt);
12976       tmp = RECUR (DO_COND (t));
12977       finish_do_stmt (tmp, stmt);
12978       break;
12979
12980     case IF_STMT:
12981       stmt = begin_if_stmt ();
12982       tmp = RECUR (IF_COND (t));
12983       finish_if_stmt_cond (tmp, stmt);
12984       RECUR (THEN_CLAUSE (t));
12985       finish_then_clause (stmt);
12986
12987       if (ELSE_CLAUSE (t))
12988         {
12989           begin_else_clause (stmt);
12990           RECUR (ELSE_CLAUSE (t));
12991           finish_else_clause (stmt);
12992         }
12993
12994       finish_if_stmt (stmt);
12995       break;
12996
12997     case BIND_EXPR:
12998       if (BIND_EXPR_BODY_BLOCK (t))
12999         stmt = begin_function_body ();
13000       else
13001         stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
13002                                     ? BCS_TRY_BLOCK : 0);
13003
13004       RECUR (BIND_EXPR_BODY (t));
13005
13006       if (BIND_EXPR_BODY_BLOCK (t))
13007         finish_function_body (stmt);
13008       else
13009         finish_compound_stmt (stmt);
13010       break;
13011
13012     case BREAK_STMT:
13013       finish_break_stmt ();
13014       break;
13015
13016     case CONTINUE_STMT:
13017       finish_continue_stmt ();
13018       break;
13019
13020     case SWITCH_STMT:
13021       stmt = begin_switch_stmt ();
13022       tmp = RECUR (SWITCH_STMT_COND (t));
13023       finish_switch_cond (tmp, stmt);
13024       RECUR (SWITCH_STMT_BODY (t));
13025       finish_switch_stmt (stmt);
13026       break;
13027
13028     case CASE_LABEL_EXPR:
13029       finish_case_label (EXPR_LOCATION (t),
13030                          RECUR (CASE_LOW (t)),
13031                          RECUR (CASE_HIGH (t)));
13032       break;
13033
13034     case LABEL_EXPR:
13035       {
13036         tree decl = LABEL_EXPR_LABEL (t);
13037         tree label;
13038
13039         label = finish_label_stmt (DECL_NAME (decl));
13040         if (DECL_ATTRIBUTES (decl) != NULL_TREE)
13041           cplus_decl_attributes (&label, DECL_ATTRIBUTES (decl), 0);
13042       }
13043       break;
13044
13045     case GOTO_EXPR:
13046       tmp = GOTO_DESTINATION (t);
13047       if (TREE_CODE (tmp) != LABEL_DECL)
13048         /* Computed goto's must be tsubst'd into.  On the other hand,
13049            non-computed gotos must not be; the identifier in question
13050            will have no binding.  */
13051         tmp = RECUR (tmp);
13052       else
13053         tmp = DECL_NAME (tmp);
13054       finish_goto_stmt (tmp);
13055       break;
13056
13057     case ASM_EXPR:
13058       tmp = finish_asm_stmt
13059         (ASM_VOLATILE_P (t),
13060          RECUR (ASM_STRING (t)),
13061          tsubst_copy_asm_operands (ASM_OUTPUTS (t), args, complain, in_decl),
13062          tsubst_copy_asm_operands (ASM_INPUTS (t), args, complain, in_decl),
13063          tsubst_copy_asm_operands (ASM_CLOBBERS (t), args, complain, in_decl),
13064          tsubst_copy_asm_operands (ASM_LABELS (t), args, complain, in_decl));
13065       {
13066         tree asm_expr = tmp;
13067         if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
13068           asm_expr = TREE_OPERAND (asm_expr, 0);
13069         ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
13070       }
13071       break;
13072
13073     case TRY_BLOCK:
13074       if (CLEANUP_P (t))
13075         {
13076           stmt = begin_try_block ();
13077           RECUR (TRY_STMTS (t));
13078           finish_cleanup_try_block (stmt);
13079           finish_cleanup (RECUR (TRY_HANDLERS (t)), stmt);
13080         }
13081       else
13082         {
13083           tree compound_stmt = NULL_TREE;
13084
13085           if (FN_TRY_BLOCK_P (t))
13086             stmt = begin_function_try_block (&compound_stmt);
13087           else
13088             stmt = begin_try_block ();
13089
13090           RECUR (TRY_STMTS (t));
13091
13092           if (FN_TRY_BLOCK_P (t))
13093             finish_function_try_block (stmt);
13094           else
13095             finish_try_block (stmt);
13096
13097           RECUR (TRY_HANDLERS (t));
13098           if (FN_TRY_BLOCK_P (t))
13099             finish_function_handler_sequence (stmt, compound_stmt);
13100           else
13101             finish_handler_sequence (stmt);
13102         }
13103       break;
13104
13105     case HANDLER:
13106       {
13107         tree decl = HANDLER_PARMS (t);
13108
13109         if (decl)
13110           {
13111             decl = tsubst (decl, args, complain, in_decl);
13112             /* Prevent instantiate_decl from trying to instantiate
13113                this variable.  We've already done all that needs to be
13114                done.  */
13115             if (decl != error_mark_node)
13116               DECL_TEMPLATE_INSTANTIATED (decl) = 1;
13117           }
13118         stmt = begin_handler ();
13119         finish_handler_parms (decl, stmt);
13120         RECUR (HANDLER_BODY (t));
13121         finish_handler (stmt);
13122       }
13123       break;
13124
13125     case TAG_DEFN:
13126       tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
13127       break;
13128
13129     case STATIC_ASSERT:
13130       {
13131         tree condition = 
13132           tsubst_expr (STATIC_ASSERT_CONDITION (t), 
13133                        args,
13134                        complain, in_decl,
13135                        /*integral_constant_expression_p=*/true);
13136         finish_static_assert (condition,
13137                               STATIC_ASSERT_MESSAGE (t),
13138                               STATIC_ASSERT_SOURCE_LOCATION (t),
13139                               /*member_p=*/false);
13140       }
13141       break;
13142
13143     case OMP_PARALLEL:
13144       tmp = tsubst_omp_clauses (OMP_PARALLEL_CLAUSES (t),
13145                                 args, complain, in_decl);
13146       stmt = begin_omp_parallel ();
13147       RECUR (OMP_PARALLEL_BODY (t));
13148       OMP_PARALLEL_COMBINED (finish_omp_parallel (tmp, stmt))
13149         = OMP_PARALLEL_COMBINED (t);
13150       break;
13151
13152     case OMP_TASK:
13153       tmp = tsubst_omp_clauses (OMP_TASK_CLAUSES (t),
13154                                 args, complain, in_decl);
13155       stmt = begin_omp_task ();
13156       RECUR (OMP_TASK_BODY (t));
13157       finish_omp_task (tmp, stmt);
13158       break;
13159
13160     case OMP_FOR:
13161       {
13162         tree clauses, body, pre_body;
13163         tree declv, initv, condv, incrv;
13164         int i;
13165
13166         clauses = tsubst_omp_clauses (OMP_FOR_CLAUSES (t),
13167                                       args, complain, in_decl);
13168         declv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
13169         initv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
13170         condv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
13171         incrv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
13172
13173         for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INIT (t)); i++)
13174           tsubst_omp_for_iterator (t, i, declv, initv, condv, incrv,
13175                                    &clauses, args, complain, in_decl,
13176                                    integral_constant_expression_p);
13177
13178         stmt = begin_omp_structured_block ();
13179
13180         for (i = 0; i < TREE_VEC_LENGTH (initv); i++)
13181           if (TREE_VEC_ELT (initv, i) == NULL
13182               || TREE_CODE (TREE_VEC_ELT (initv, i)) != DECL_EXPR)
13183             TREE_VEC_ELT (initv, i) = RECUR (TREE_VEC_ELT (initv, i));
13184           else if (CLASS_TYPE_P (TREE_TYPE (TREE_VEC_ELT (initv, i))))
13185             {
13186               tree init = RECUR (TREE_VEC_ELT (initv, i));
13187               gcc_assert (init == TREE_VEC_ELT (declv, i));
13188               TREE_VEC_ELT (initv, i) = NULL_TREE;
13189             }
13190           else
13191             {
13192               tree decl_expr = TREE_VEC_ELT (initv, i);
13193               tree init = DECL_INITIAL (DECL_EXPR_DECL (decl_expr));
13194               gcc_assert (init != NULL);
13195               TREE_VEC_ELT (initv, i) = RECUR (init);
13196               DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = NULL;
13197               RECUR (decl_expr);
13198               DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = init;
13199             }
13200
13201         pre_body = push_stmt_list ();
13202         RECUR (OMP_FOR_PRE_BODY (t));
13203         pre_body = pop_stmt_list (pre_body);
13204
13205         body = push_stmt_list ();
13206         RECUR (OMP_FOR_BODY (t));
13207         body = pop_stmt_list (body);
13208
13209         t = finish_omp_for (EXPR_LOCATION (t), declv, initv, condv, incrv,
13210                             body, pre_body, clauses);
13211
13212         add_stmt (finish_omp_structured_block (stmt));
13213       }
13214       break;
13215
13216     case OMP_SECTIONS:
13217     case OMP_SINGLE:
13218       tmp = tsubst_omp_clauses (OMP_CLAUSES (t), args, complain, in_decl);
13219       stmt = push_stmt_list ();
13220       RECUR (OMP_BODY (t));
13221       stmt = pop_stmt_list (stmt);
13222
13223       t = copy_node (t);
13224       OMP_BODY (t) = stmt;
13225       OMP_CLAUSES (t) = tmp;
13226       add_stmt (t);
13227       break;
13228
13229     case OMP_SECTION:
13230     case OMP_CRITICAL:
13231     case OMP_MASTER:
13232     case OMP_ORDERED:
13233       stmt = push_stmt_list ();
13234       RECUR (OMP_BODY (t));
13235       stmt = pop_stmt_list (stmt);
13236
13237       t = copy_node (t);
13238       OMP_BODY (t) = stmt;
13239       add_stmt (t);
13240       break;
13241
13242     case OMP_ATOMIC:
13243       gcc_assert (OMP_ATOMIC_DEPENDENT_P (t));
13244       if (TREE_CODE (TREE_OPERAND (t, 1)) != MODIFY_EXPR)
13245         {
13246           tree op1 = TREE_OPERAND (t, 1);
13247           tree rhs1 = NULL_TREE;
13248           tree lhs, rhs;
13249           if (TREE_CODE (op1) == COMPOUND_EXPR)
13250             {
13251               rhs1 = RECUR (TREE_OPERAND (op1, 0));
13252               op1 = TREE_OPERAND (op1, 1);
13253             }
13254           lhs = RECUR (TREE_OPERAND (op1, 0));
13255           rhs = RECUR (TREE_OPERAND (op1, 1));
13256           finish_omp_atomic (OMP_ATOMIC, TREE_CODE (op1), lhs, rhs,
13257                              NULL_TREE, NULL_TREE, rhs1);
13258         }
13259       else
13260         {
13261           tree op1 = TREE_OPERAND (t, 1);
13262           tree v = NULL_TREE, lhs, rhs = NULL_TREE, lhs1 = NULL_TREE;
13263           tree rhs1 = NULL_TREE;
13264           enum tree_code code = TREE_CODE (TREE_OPERAND (op1, 1));
13265           enum tree_code opcode = NOP_EXPR;
13266           if (code == OMP_ATOMIC_READ)
13267             {
13268               v = RECUR (TREE_OPERAND (op1, 0));
13269               lhs = RECUR (TREE_OPERAND (TREE_OPERAND (op1, 1), 0));
13270             }
13271           else if (code == OMP_ATOMIC_CAPTURE_OLD
13272                    || code == OMP_ATOMIC_CAPTURE_NEW)
13273             {
13274               tree op11 = TREE_OPERAND (TREE_OPERAND (op1, 1), 1);
13275               v = RECUR (TREE_OPERAND (op1, 0));
13276               lhs1 = RECUR (TREE_OPERAND (TREE_OPERAND (op1, 1), 0));
13277               if (TREE_CODE (op11) == COMPOUND_EXPR)
13278                 {
13279                   rhs1 = RECUR (TREE_OPERAND (op11, 0));
13280                   op11 = TREE_OPERAND (op11, 1);
13281                 }
13282               lhs = RECUR (TREE_OPERAND (op11, 0));
13283               rhs = RECUR (TREE_OPERAND (op11, 1));
13284               opcode = TREE_CODE (op11);
13285             }
13286           else
13287             {
13288               code = OMP_ATOMIC;
13289               lhs = RECUR (TREE_OPERAND (op1, 0));
13290               rhs = RECUR (TREE_OPERAND (op1, 1));
13291             }
13292           finish_omp_atomic (code, opcode, lhs, rhs, v, lhs1, rhs1);
13293         }
13294       break;
13295
13296     case TRANSACTION_EXPR:
13297       {
13298         int flags = 0;
13299         flags |= (TRANSACTION_EXPR_OUTER (t) ? TM_STMT_ATTR_OUTER : 0);
13300         flags |= (TRANSACTION_EXPR_RELAXED (t) ? TM_STMT_ATTR_RELAXED : 0);
13301
13302         if (TRANSACTION_EXPR_IS_STMT (t))
13303           {
13304             tree body = TRANSACTION_EXPR_BODY (t);
13305             tree noex = NULL_TREE;
13306             if (TREE_CODE (body) == MUST_NOT_THROW_EXPR)
13307               {
13308                 noex = MUST_NOT_THROW_COND (body);
13309                 if (noex == NULL_TREE)
13310                   noex = boolean_true_node;
13311                 body = TREE_OPERAND (body, 0);
13312               }
13313             stmt = begin_transaction_stmt (input_location, NULL, flags);
13314             RECUR (body);
13315             finish_transaction_stmt (stmt, NULL, flags, RECUR (noex));
13316           }
13317         else
13318           {
13319             stmt = build_transaction_expr (EXPR_LOCATION (t),
13320                                            RECUR (TRANSACTION_EXPR_BODY (t)),
13321                                            flags, NULL_TREE);
13322             return stmt;
13323           }
13324       }
13325       break;
13326
13327     case MUST_NOT_THROW_EXPR:
13328       return build_must_not_throw_expr (RECUR (TREE_OPERAND (t, 0)),
13329                                         RECUR (MUST_NOT_THROW_COND (t)));
13330
13331     case EXPR_PACK_EXPANSION:
13332       error ("invalid use of pack expansion expression");
13333       return error_mark_node;
13334
13335     case NONTYPE_ARGUMENT_PACK:
13336       error ("use %<...%> to expand argument pack");
13337       return error_mark_node;
13338
13339     default:
13340       gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
13341
13342       return tsubst_copy_and_build (t, args, complain, in_decl,
13343                                     /*function_p=*/false,
13344                                     integral_constant_expression_p);
13345     }
13346
13347   return NULL_TREE;
13348 #undef RECUR
13349 }
13350
13351 /* T is a postfix-expression that is not being used in a function
13352    call.  Return the substituted version of T.  */
13353
13354 static tree
13355 tsubst_non_call_postfix_expression (tree t, tree args,
13356                                     tsubst_flags_t complain,
13357                                     tree in_decl)
13358 {
13359   if (TREE_CODE (t) == SCOPE_REF)
13360     t = tsubst_qualified_id (t, args, complain, in_decl,
13361                              /*done=*/false, /*address_p=*/false);
13362   else
13363     t = tsubst_copy_and_build (t, args, complain, in_decl,
13364                                /*function_p=*/false,
13365                                /*integral_constant_expression_p=*/false);
13366
13367   return t;
13368 }
13369
13370 /* Like tsubst but deals with expressions and performs semantic
13371    analysis.  FUNCTION_P is true if T is the "F" in "F (ARGS)".  */
13372
13373 tree
13374 tsubst_copy_and_build (tree t,
13375                        tree args,
13376                        tsubst_flags_t complain,
13377                        tree in_decl,
13378                        bool function_p,
13379                        bool integral_constant_expression_p)
13380 {
13381 #define RECUR(NODE)                                             \
13382   tsubst_copy_and_build (NODE, args, complain, in_decl,         \
13383                          /*function_p=*/false,                  \
13384                          integral_constant_expression_p)
13385
13386   tree op1;
13387
13388   if (t == NULL_TREE || t == error_mark_node)
13389     return t;
13390
13391   switch (TREE_CODE (t))
13392     {
13393     case USING_DECL:
13394       t = DECL_NAME (t);
13395       /* Fall through.  */
13396     case IDENTIFIER_NODE:
13397       {
13398         tree decl;
13399         cp_id_kind idk;
13400         bool non_integral_constant_expression_p;
13401         const char *error_msg;
13402
13403         if (IDENTIFIER_TYPENAME_P (t))
13404           {
13405             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13406             t = mangle_conv_op_name_for_type (new_type);
13407           }
13408
13409         /* Look up the name.  */
13410         decl = lookup_name (t);
13411
13412         /* By convention, expressions use ERROR_MARK_NODE to indicate
13413            failure, not NULL_TREE.  */
13414         if (decl == NULL_TREE)
13415           decl = error_mark_node;
13416
13417         decl = finish_id_expression (t, decl, NULL_TREE,
13418                                      &idk,
13419                                      integral_constant_expression_p,
13420           /*allow_non_integral_constant_expression_p=*/(cxx_dialect >= cxx0x),
13421                                      &non_integral_constant_expression_p,
13422                                      /*template_p=*/false,
13423                                      /*done=*/true,
13424                                      /*address_p=*/false,
13425                                      /*template_arg_p=*/false,
13426                                      &error_msg,
13427                                      input_location);
13428         if (error_msg)
13429           error (error_msg);
13430         if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
13431           {
13432             if (complain & tf_error)
13433               unqualified_name_lookup_error (decl);
13434             decl = error_mark_node;
13435           }
13436         return decl;
13437       }
13438
13439     case TEMPLATE_ID_EXPR:
13440       {
13441         tree object;
13442         tree templ = RECUR (TREE_OPERAND (t, 0));
13443         tree targs = TREE_OPERAND (t, 1);
13444
13445         if (targs)
13446           targs = tsubst_template_args (targs, args, complain, in_decl);
13447
13448         if (TREE_CODE (templ) == COMPONENT_REF)
13449           {
13450             object = TREE_OPERAND (templ, 0);
13451             templ = TREE_OPERAND (templ, 1);
13452           }
13453         else
13454           object = NULL_TREE;
13455         templ = lookup_template_function (templ, targs);
13456
13457         if (object)
13458           return build3 (COMPONENT_REF, TREE_TYPE (templ),
13459                          object, templ, NULL_TREE);
13460         else
13461           return baselink_for_fns (templ);
13462       }
13463
13464     case INDIRECT_REF:
13465       {
13466         tree r = RECUR (TREE_OPERAND (t, 0));
13467
13468         if (REFERENCE_REF_P (t))
13469           {
13470             /* A type conversion to reference type will be enclosed in
13471                such an indirect ref, but the substitution of the cast
13472                will have also added such an indirect ref.  */
13473             if (TREE_CODE (TREE_TYPE (r)) == REFERENCE_TYPE)
13474               r = convert_from_reference (r);
13475           }
13476         else
13477           r = build_x_indirect_ref (r, RO_UNARY_STAR, complain);
13478         return r;
13479       }
13480
13481     case NOP_EXPR:
13482       return build_nop
13483         (tsubst (TREE_TYPE (t), args, complain, in_decl),
13484          RECUR (TREE_OPERAND (t, 0)));
13485
13486     case IMPLICIT_CONV_EXPR:
13487       {
13488         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13489         tree expr = RECUR (TREE_OPERAND (t, 0));
13490         int flags = LOOKUP_IMPLICIT;
13491         if (IMPLICIT_CONV_EXPR_DIRECT_INIT (t))
13492           flags = LOOKUP_NORMAL;
13493         return perform_implicit_conversion_flags (type, expr, complain,
13494                                                   flags);
13495       }
13496
13497     case CONVERT_EXPR:
13498       return build1
13499         (CONVERT_EXPR,
13500          tsubst (TREE_TYPE (t), args, complain, in_decl),
13501          RECUR (TREE_OPERAND (t, 0)));
13502
13503     case CAST_EXPR:
13504     case REINTERPRET_CAST_EXPR:
13505     case CONST_CAST_EXPR:
13506     case DYNAMIC_CAST_EXPR:
13507     case STATIC_CAST_EXPR:
13508       {
13509         tree type;
13510         tree op;
13511
13512         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13513         if (integral_constant_expression_p
13514             && !cast_valid_in_integral_constant_expression_p (type))
13515           {
13516             if (complain & tf_error)
13517               error ("a cast to a type other than an integral or "
13518                      "enumeration type cannot appear in a constant-expression");
13519             return error_mark_node; 
13520           }
13521
13522         op = RECUR (TREE_OPERAND (t, 0));
13523
13524         switch (TREE_CODE (t))
13525           {
13526           case CAST_EXPR:
13527             return build_functional_cast (type, op, complain);
13528           case REINTERPRET_CAST_EXPR:
13529             return build_reinterpret_cast (type, op, complain);
13530           case CONST_CAST_EXPR:
13531             return build_const_cast (type, op, complain);
13532           case DYNAMIC_CAST_EXPR:
13533             return build_dynamic_cast (type, op, complain);
13534           case STATIC_CAST_EXPR:
13535             return build_static_cast (type, op, complain);
13536           default:
13537             gcc_unreachable ();
13538           }
13539       }
13540
13541     case POSTDECREMENT_EXPR:
13542     case POSTINCREMENT_EXPR:
13543       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
13544                                                 args, complain, in_decl);
13545       return build_x_unary_op (TREE_CODE (t), op1, complain);
13546
13547     case PREDECREMENT_EXPR:
13548     case PREINCREMENT_EXPR:
13549     case NEGATE_EXPR:
13550     case BIT_NOT_EXPR:
13551     case ABS_EXPR:
13552     case TRUTH_NOT_EXPR:
13553     case UNARY_PLUS_EXPR:  /* Unary + */
13554     case REALPART_EXPR:
13555     case IMAGPART_EXPR:
13556       return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)),
13557                                complain);
13558
13559     case FIX_TRUNC_EXPR:
13560       return cp_build_unary_op (FIX_TRUNC_EXPR, RECUR (TREE_OPERAND (t, 0)),
13561                                 0, complain);
13562
13563     case ADDR_EXPR:
13564       op1 = TREE_OPERAND (t, 0);
13565       if (TREE_CODE (op1) == LABEL_DECL)
13566         return finish_label_address_expr (DECL_NAME (op1),
13567                                           EXPR_LOCATION (op1));
13568       if (TREE_CODE (op1) == SCOPE_REF)
13569         op1 = tsubst_qualified_id (op1, args, complain, in_decl,
13570                                    /*done=*/true, /*address_p=*/true);
13571       else
13572         op1 = tsubst_non_call_postfix_expression (op1, args, complain,
13573                                                   in_decl);
13574       return build_x_unary_op (ADDR_EXPR, op1, complain);
13575
13576     case PLUS_EXPR:
13577     case MINUS_EXPR:
13578     case MULT_EXPR:
13579     case TRUNC_DIV_EXPR:
13580     case CEIL_DIV_EXPR:
13581     case FLOOR_DIV_EXPR:
13582     case ROUND_DIV_EXPR:
13583     case EXACT_DIV_EXPR:
13584     case BIT_AND_EXPR:
13585     case BIT_IOR_EXPR:
13586     case BIT_XOR_EXPR:
13587     case TRUNC_MOD_EXPR:
13588     case FLOOR_MOD_EXPR:
13589     case TRUTH_ANDIF_EXPR:
13590     case TRUTH_ORIF_EXPR:
13591     case TRUTH_AND_EXPR:
13592     case TRUTH_OR_EXPR:
13593     case RSHIFT_EXPR:
13594     case LSHIFT_EXPR:
13595     case RROTATE_EXPR:
13596     case LROTATE_EXPR:
13597     case EQ_EXPR:
13598     case NE_EXPR:
13599     case MAX_EXPR:
13600     case MIN_EXPR:
13601     case LE_EXPR:
13602     case GE_EXPR:
13603     case LT_EXPR:
13604     case GT_EXPR:
13605     case MEMBER_REF:
13606     case DOTSTAR_EXPR:
13607       {
13608         tree r = build_x_binary_op
13609           (TREE_CODE (t),
13610            RECUR (TREE_OPERAND (t, 0)),
13611            (TREE_NO_WARNING (TREE_OPERAND (t, 0))
13612             ? ERROR_MARK
13613             : TREE_CODE (TREE_OPERAND (t, 0))),
13614            RECUR (TREE_OPERAND (t, 1)),
13615            (TREE_NO_WARNING (TREE_OPERAND (t, 1))
13616             ? ERROR_MARK
13617             : TREE_CODE (TREE_OPERAND (t, 1))),
13618            /*overload=*/NULL,
13619            complain);
13620         if (EXPR_P (r) && TREE_NO_WARNING (t))
13621           TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
13622         return r;
13623       }
13624
13625     case SCOPE_REF:
13626       return tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
13627                                   /*address_p=*/false);
13628     case ARRAY_REF:
13629       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
13630                                                 args, complain, in_decl);
13631       return build_x_array_ref (op1, RECUR (TREE_OPERAND (t, 1)), complain);
13632
13633     case SIZEOF_EXPR:
13634       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
13635         return tsubst_copy (t, args, complain, in_decl);
13636       /* Fall through */
13637       
13638     case ALIGNOF_EXPR:
13639       op1 = TREE_OPERAND (t, 0);
13640       if (!args)
13641         {
13642           /* When there are no ARGS, we are trying to evaluate a
13643              non-dependent expression from the parser.  Trying to do
13644              the substitutions may not work.  */
13645           if (!TYPE_P (op1))
13646             op1 = TREE_TYPE (op1);
13647         }
13648       else
13649         {
13650           ++cp_unevaluated_operand;
13651           ++c_inhibit_evaluation_warnings;
13652           op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
13653                                        /*function_p=*/false,
13654                                        /*integral_constant_expression_p=*/false);
13655           --cp_unevaluated_operand;
13656           --c_inhibit_evaluation_warnings;
13657         }
13658       if (TYPE_P (op1))
13659         return cxx_sizeof_or_alignof_type (op1, TREE_CODE (t), 
13660                                            complain & tf_error);
13661       else
13662         return cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t), 
13663                                            complain & tf_error);
13664
13665     case AT_ENCODE_EXPR:
13666       {
13667         op1 = TREE_OPERAND (t, 0);
13668         ++cp_unevaluated_operand;
13669         ++c_inhibit_evaluation_warnings;
13670         op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
13671                                      /*function_p=*/false,
13672                                      /*integral_constant_expression_p=*/false);
13673         --cp_unevaluated_operand;
13674         --c_inhibit_evaluation_warnings;
13675         return objc_build_encode_expr (op1);
13676       }
13677
13678     case NOEXCEPT_EXPR:
13679       op1 = TREE_OPERAND (t, 0);
13680       ++cp_unevaluated_operand;
13681       ++c_inhibit_evaluation_warnings;
13682       op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
13683                                    /*function_p=*/false,
13684                                    /*integral_constant_expression_p=*/false);
13685       --cp_unevaluated_operand;
13686       --c_inhibit_evaluation_warnings;
13687       return finish_noexcept_expr (op1, complain);
13688
13689     case MODOP_EXPR:
13690       {
13691         tree r = build_x_modify_expr
13692           (RECUR (TREE_OPERAND (t, 0)),
13693            TREE_CODE (TREE_OPERAND (t, 1)),
13694            RECUR (TREE_OPERAND (t, 2)),
13695            complain);
13696         /* TREE_NO_WARNING must be set if either the expression was
13697            parenthesized or it uses an operator such as >>= rather
13698            than plain assignment.  In the former case, it was already
13699            set and must be copied.  In the latter case,
13700            build_x_modify_expr sets it and it must not be reset
13701            here.  */
13702         if (TREE_NO_WARNING (t))
13703           TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
13704         return r;
13705       }
13706
13707     case ARROW_EXPR:
13708       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
13709                                                 args, complain, in_decl);
13710       /* Remember that there was a reference to this entity.  */
13711       if (DECL_P (op1))
13712         mark_used (op1);
13713       return build_x_arrow (op1);
13714
13715     case NEW_EXPR:
13716       {
13717         tree placement = RECUR (TREE_OPERAND (t, 0));
13718         tree init = RECUR (TREE_OPERAND (t, 3));
13719         VEC(tree,gc) *placement_vec;
13720         VEC(tree,gc) *init_vec;
13721         tree ret;
13722
13723         if (placement == NULL_TREE)
13724           placement_vec = NULL;
13725         else
13726           {
13727             placement_vec = make_tree_vector ();
13728             for (; placement != NULL_TREE; placement = TREE_CHAIN (placement))
13729               VEC_safe_push (tree, gc, placement_vec, TREE_VALUE (placement));
13730           }
13731
13732         /* If there was an initializer in the original tree, but it
13733            instantiated to an empty list, then we should pass a
13734            non-NULL empty vector to tell build_new that it was an
13735            empty initializer() rather than no initializer.  This can
13736            only happen when the initializer is a pack expansion whose
13737            parameter packs are of length zero.  */
13738         if (init == NULL_TREE && TREE_OPERAND (t, 3) == NULL_TREE)
13739           init_vec = NULL;
13740         else
13741           {
13742             init_vec = make_tree_vector ();
13743             if (init == void_zero_node)
13744               gcc_assert (init_vec != NULL);
13745             else
13746               {
13747                 for (; init != NULL_TREE; init = TREE_CHAIN (init))
13748                   VEC_safe_push (tree, gc, init_vec, TREE_VALUE (init));
13749               }
13750           }
13751
13752         ret = build_new (&placement_vec,
13753                          tsubst (TREE_OPERAND (t, 1), args, complain, in_decl),
13754                          RECUR (TREE_OPERAND (t, 2)),
13755                          &init_vec,
13756                          NEW_EXPR_USE_GLOBAL (t),
13757                          complain);
13758
13759         if (placement_vec != NULL)
13760           release_tree_vector (placement_vec);
13761         if (init_vec != NULL)
13762           release_tree_vector (init_vec);
13763
13764         return ret;
13765       }
13766
13767     case DELETE_EXPR:
13768      return delete_sanity
13769        (RECUR (TREE_OPERAND (t, 0)),
13770         RECUR (TREE_OPERAND (t, 1)),
13771         DELETE_EXPR_USE_VEC (t),
13772         DELETE_EXPR_USE_GLOBAL (t),
13773         complain);
13774
13775     case COMPOUND_EXPR:
13776       return build_x_compound_expr (RECUR (TREE_OPERAND (t, 0)),
13777                                     RECUR (TREE_OPERAND (t, 1)),
13778                                     complain);
13779
13780     case CALL_EXPR:
13781       {
13782         tree function;
13783         VEC(tree,gc) *call_args;
13784         unsigned int nargs, i;
13785         bool qualified_p;
13786         bool koenig_p;
13787         tree ret;
13788
13789         function = CALL_EXPR_FN (t);
13790         /* When we parsed the expression,  we determined whether or
13791            not Koenig lookup should be performed.  */
13792         koenig_p = KOENIG_LOOKUP_P (t);
13793         if (TREE_CODE (function) == SCOPE_REF)
13794           {
13795             qualified_p = true;
13796             function = tsubst_qualified_id (function, args, complain, in_decl,
13797                                             /*done=*/false,
13798                                             /*address_p=*/false);
13799           }
13800         else if (koenig_p && TREE_CODE (function) == IDENTIFIER_NODE)
13801           {
13802             /* Do nothing; calling tsubst_copy_and_build on an identifier
13803                would incorrectly perform unqualified lookup again.
13804
13805                Note that we can also have an IDENTIFIER_NODE if the earlier
13806                unqualified lookup found a member function; in that case
13807                koenig_p will be false and we do want to do the lookup
13808                again to find the instantiated member function.
13809
13810                FIXME but doing that causes c++/15272, so we need to stop
13811                using IDENTIFIER_NODE in that situation.  */
13812             qualified_p = false;
13813           }
13814         else
13815           {
13816             if (TREE_CODE (function) == COMPONENT_REF)
13817               {
13818                 tree op = TREE_OPERAND (function, 1);
13819
13820                 qualified_p = (TREE_CODE (op) == SCOPE_REF
13821                                || (BASELINK_P (op)
13822                                    && BASELINK_QUALIFIED_P (op)));
13823               }
13824             else
13825               qualified_p = false;
13826
13827             function = tsubst_copy_and_build (function, args, complain,
13828                                               in_decl,
13829                                               !qualified_p,
13830                                               integral_constant_expression_p);
13831
13832             if (BASELINK_P (function))
13833               qualified_p = true;
13834           }
13835
13836         nargs = call_expr_nargs (t);
13837         call_args = make_tree_vector ();
13838         for (i = 0; i < nargs; ++i)
13839           {
13840             tree arg = CALL_EXPR_ARG (t, i);
13841
13842             if (!PACK_EXPANSION_P (arg))
13843               VEC_safe_push (tree, gc, call_args,
13844                              RECUR (CALL_EXPR_ARG (t, i)));
13845             else
13846               {
13847                 /* Expand the pack expansion and push each entry onto
13848                    CALL_ARGS.  */
13849                 arg = tsubst_pack_expansion (arg, args, complain, in_decl);
13850                 if (TREE_CODE (arg) == TREE_VEC)
13851                   {
13852                     unsigned int len, j;
13853
13854                     len = TREE_VEC_LENGTH (arg);
13855                     for (j = 0; j < len; ++j)
13856                       {
13857                         tree value = TREE_VEC_ELT (arg, j);
13858                         if (value != NULL_TREE)
13859                           value = convert_from_reference (value);
13860                         VEC_safe_push (tree, gc, call_args, value);
13861                       }
13862                   }
13863                 else
13864                   {
13865                     /* A partial substitution.  Add one entry.  */
13866                     VEC_safe_push (tree, gc, call_args, arg);
13867                   }
13868               }
13869           }
13870
13871         /* We do not perform argument-dependent lookup if normal
13872            lookup finds a non-function, in accordance with the
13873            expected resolution of DR 218.  */
13874         if (koenig_p
13875             && ((is_overloaded_fn (function)
13876                  /* If lookup found a member function, the Koenig lookup is
13877                     not appropriate, even if an unqualified-name was used
13878                     to denote the function.  */
13879                  && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
13880                 || TREE_CODE (function) == IDENTIFIER_NODE)
13881             /* Only do this when substitution turns a dependent call
13882                into a non-dependent call.  */
13883             && type_dependent_expression_p_push (t)
13884             && !any_type_dependent_arguments_p (call_args))
13885           function = perform_koenig_lookup (function, call_args, false,
13886                                             tf_none);
13887
13888         if (TREE_CODE (function) == IDENTIFIER_NODE
13889             && !any_type_dependent_arguments_p (call_args))
13890           {
13891             if (koenig_p && (complain & tf_warning_or_error))
13892               {
13893                 /* For backwards compatibility and good diagnostics, try
13894                    the unqualified lookup again if we aren't in SFINAE
13895                    context.  */
13896                 tree unq = (tsubst_copy_and_build
13897                             (function, args, complain, in_decl, true,
13898                              integral_constant_expression_p));
13899                 if (unq == error_mark_node)
13900                   return error_mark_node;
13901
13902                 if (unq != function)
13903                   {
13904                     tree fn = unq;
13905                     if (TREE_CODE (fn) == INDIRECT_REF)
13906                       fn = TREE_OPERAND (fn, 0);
13907                     if (TREE_CODE (fn) == COMPONENT_REF)
13908                       fn = TREE_OPERAND (fn, 1);
13909                     if (is_overloaded_fn (fn))
13910                       fn = get_first_fn (fn);
13911                     permerror (EXPR_LOC_OR_HERE (t),
13912                                "%qD was not declared in this scope, "
13913                                "and no declarations were found by "
13914                                "argument-dependent lookup at the point "
13915                                "of instantiation", function);
13916                     if (!DECL_P (fn))
13917                       /* Can't say anything more.  */;
13918                     else if (DECL_CLASS_SCOPE_P (fn))
13919                       {
13920                         inform (EXPR_LOC_OR_HERE (t),
13921                                 "declarations in dependent base %qT are "
13922                                 "not found by unqualified lookup",
13923                                 DECL_CLASS_CONTEXT (fn));
13924                         if (current_class_ptr)
13925                           inform (EXPR_LOC_OR_HERE (t),
13926                                   "use %<this->%D%> instead", function);
13927                         else
13928                           inform (EXPR_LOC_OR_HERE (t),
13929                                   "use %<%T::%D%> instead",
13930                                   current_class_name, function);
13931                       }
13932                     else
13933                       inform (0, "%q+D declared here, later in the "
13934                                 "translation unit", fn);
13935                     function = unq;
13936                   }
13937               }
13938             if (TREE_CODE (function) == IDENTIFIER_NODE)
13939               {
13940                 unqualified_name_lookup_error (function);
13941                 release_tree_vector (call_args);
13942                 return error_mark_node;
13943               }
13944           }
13945
13946         /* Remember that there was a reference to this entity.  */
13947         if (DECL_P (function))
13948           mark_used (function);
13949
13950         if (TREE_CODE (function) == OFFSET_REF)
13951           ret = build_offset_ref_call_from_tree (function, &call_args);
13952         else if (TREE_CODE (function) == COMPONENT_REF)
13953           {
13954             tree instance = TREE_OPERAND (function, 0);
13955             tree fn = TREE_OPERAND (function, 1);
13956
13957             if (processing_template_decl
13958                 && (type_dependent_expression_p (instance)
13959                     || (!BASELINK_P (fn)
13960                         && TREE_CODE (fn) != FIELD_DECL)
13961                     || type_dependent_expression_p (fn)
13962                     || any_type_dependent_arguments_p (call_args)))
13963               ret = build_nt_call_vec (function, call_args);
13964             else if (!BASELINK_P (fn))
13965               ret = finish_call_expr (function, &call_args,
13966                                        /*disallow_virtual=*/false,
13967                                        /*koenig_p=*/false,
13968                                        complain);
13969             else
13970               ret = (build_new_method_call
13971                       (instance, fn,
13972                        &call_args, NULL_TREE,
13973                        qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL,
13974                        /*fn_p=*/NULL,
13975                        complain));
13976           }
13977         else
13978           ret = finish_call_expr (function, &call_args,
13979                                   /*disallow_virtual=*/qualified_p,
13980                                   koenig_p,
13981                                   complain);
13982
13983         release_tree_vector (call_args);
13984
13985         return ret;
13986       }
13987
13988     case COND_EXPR:
13989       return build_x_conditional_expr
13990         (RECUR (TREE_OPERAND (t, 0)),
13991          RECUR (TREE_OPERAND (t, 1)),
13992          RECUR (TREE_OPERAND (t, 2)),
13993          complain);
13994
13995     case PSEUDO_DTOR_EXPR:
13996       return finish_pseudo_destructor_expr
13997         (RECUR (TREE_OPERAND (t, 0)),
13998          RECUR (TREE_OPERAND (t, 1)),
13999          tsubst (TREE_OPERAND (t, 2), args, complain, in_decl));
14000
14001     case TREE_LIST:
14002       {
14003         tree purpose, value, chain;
14004
14005         if (t == void_list_node)
14006           return t;
14007
14008         if ((TREE_PURPOSE (t) && PACK_EXPANSION_P (TREE_PURPOSE (t)))
14009             || (TREE_VALUE (t) && PACK_EXPANSION_P (TREE_VALUE (t))))
14010           {
14011             /* We have pack expansions, so expand those and
14012                create a new list out of it.  */
14013             tree purposevec = NULL_TREE;
14014             tree valuevec = NULL_TREE;
14015             tree chain;
14016             int i, len = -1;
14017
14018             /* Expand the argument expressions.  */
14019             if (TREE_PURPOSE (t))
14020               purposevec = tsubst_pack_expansion (TREE_PURPOSE (t), args,
14021                                                  complain, in_decl);
14022             if (TREE_VALUE (t))
14023               valuevec = tsubst_pack_expansion (TREE_VALUE (t), args,
14024                                                complain, in_decl);
14025
14026             /* Build the rest of the list.  */
14027             chain = TREE_CHAIN (t);
14028             if (chain && chain != void_type_node)
14029               chain = RECUR (chain);
14030
14031             /* Determine the number of arguments.  */
14032             if (purposevec && TREE_CODE (purposevec) == TREE_VEC)
14033               {
14034                 len = TREE_VEC_LENGTH (purposevec);
14035                 gcc_assert (!valuevec || len == TREE_VEC_LENGTH (valuevec));
14036               }
14037             else if (TREE_CODE (valuevec) == TREE_VEC)
14038               len = TREE_VEC_LENGTH (valuevec);
14039             else
14040               {
14041                 /* Since we only performed a partial substitution into
14042                    the argument pack, we only return a single list
14043                    node.  */
14044                 if (purposevec == TREE_PURPOSE (t)
14045                     && valuevec == TREE_VALUE (t)
14046                     && chain == TREE_CHAIN (t))
14047                   return t;
14048
14049                 return tree_cons (purposevec, valuevec, chain);
14050               }
14051             
14052             /* Convert the argument vectors into a TREE_LIST */
14053             i = len;
14054             while (i > 0)
14055               {
14056                 /* Grab the Ith values.  */
14057                 i--;
14058                 purpose = purposevec ? TREE_VEC_ELT (purposevec, i) 
14059                                      : NULL_TREE;
14060                 value 
14061                   = valuevec ? convert_from_reference (TREE_VEC_ELT (valuevec, i)) 
14062                              : NULL_TREE;
14063
14064                 /* Build the list (backwards).  */
14065                 chain = tree_cons (purpose, value, chain);
14066               }
14067
14068             return chain;
14069           }
14070
14071         purpose = TREE_PURPOSE (t);
14072         if (purpose)
14073           purpose = RECUR (purpose);
14074         value = TREE_VALUE (t);
14075         if (value)
14076           value = RECUR (value);
14077         chain = TREE_CHAIN (t);
14078         if (chain && chain != void_type_node)
14079           chain = RECUR (chain);
14080         if (purpose == TREE_PURPOSE (t)
14081             && value == TREE_VALUE (t)
14082             && chain == TREE_CHAIN (t))
14083           return t;
14084         return tree_cons (purpose, value, chain);
14085       }
14086
14087     case COMPONENT_REF:
14088       {
14089         tree object;
14090         tree object_type;
14091         tree member;
14092
14093         object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
14094                                                      args, complain, in_decl);
14095         /* Remember that there was a reference to this entity.  */
14096         if (DECL_P (object))
14097           mark_used (object);
14098         object_type = TREE_TYPE (object);
14099
14100         member = TREE_OPERAND (t, 1);
14101         if (BASELINK_P (member))
14102           member = tsubst_baselink (member,
14103                                     non_reference (TREE_TYPE (object)),
14104                                     args, complain, in_decl);
14105         else
14106           member = tsubst_copy (member, args, complain, in_decl);
14107         if (member == error_mark_node)
14108           return error_mark_node;
14109
14110         if (type_dependent_expression_p (object))
14111           /* We can't do much here.  */;
14112         else if (!CLASS_TYPE_P (object_type))
14113           {
14114             if (SCALAR_TYPE_P (object_type))
14115               {
14116                 tree s = NULL_TREE;
14117                 tree dtor = member;
14118
14119                 if (TREE_CODE (dtor) == SCOPE_REF)
14120                   {
14121                     s = TREE_OPERAND (dtor, 0);
14122                     dtor = TREE_OPERAND (dtor, 1);
14123                   }
14124                 if (TREE_CODE (dtor) == BIT_NOT_EXPR)
14125                   {
14126                     dtor = TREE_OPERAND (dtor, 0);
14127                     if (TYPE_P (dtor))
14128                       return finish_pseudo_destructor_expr (object, s, dtor);
14129                   }
14130               }
14131           }
14132         else if (TREE_CODE (member) == SCOPE_REF
14133                  && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
14134           {
14135             /* Lookup the template functions now that we know what the
14136                scope is.  */
14137             tree scope = TREE_OPERAND (member, 0);
14138             tree tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
14139             tree args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
14140             member = lookup_qualified_name (scope, tmpl,
14141                                             /*is_type_p=*/false,
14142                                             /*complain=*/false);
14143             if (BASELINK_P (member))
14144               {
14145                 BASELINK_FUNCTIONS (member)
14146                   = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
14147                               args);
14148                 member = (adjust_result_of_qualified_name_lookup
14149                           (member, BINFO_TYPE (BASELINK_BINFO (member)),
14150                            object_type));
14151               }
14152             else
14153               {
14154                 qualified_name_lookup_error (scope, tmpl, member,
14155                                              input_location);
14156                 return error_mark_node;
14157               }
14158           }
14159         else if (TREE_CODE (member) == SCOPE_REF
14160                  && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
14161                  && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
14162           {
14163             if (complain & tf_error)
14164               {
14165                 if (TYPE_P (TREE_OPERAND (member, 0)))
14166                   error ("%qT is not a class or namespace",
14167                          TREE_OPERAND (member, 0));
14168                 else
14169                   error ("%qD is not a class or namespace",
14170                          TREE_OPERAND (member, 0));
14171               }
14172             return error_mark_node;
14173           }
14174         else if (TREE_CODE (member) == FIELD_DECL)
14175           return finish_non_static_data_member (member, object, NULL_TREE);
14176
14177         return finish_class_member_access_expr (object, member,
14178                                                 /*template_p=*/false,
14179                                                 complain);
14180       }
14181
14182     case THROW_EXPR:
14183       return build_throw
14184         (RECUR (TREE_OPERAND (t, 0)));
14185
14186     case CONSTRUCTOR:
14187       {
14188         VEC(constructor_elt,gc) *n;
14189         constructor_elt *ce;
14190         unsigned HOST_WIDE_INT idx;
14191         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
14192         bool process_index_p;
14193         int newlen;
14194         bool need_copy_p = false;
14195         tree r;
14196
14197         if (type == error_mark_node)
14198           return error_mark_node;
14199
14200         /* digest_init will do the wrong thing if we let it.  */
14201         if (type && TYPE_PTRMEMFUNC_P (type))
14202           return t;
14203
14204         /* We do not want to process the index of aggregate
14205            initializers as they are identifier nodes which will be
14206            looked up by digest_init.  */
14207         process_index_p = !(type && MAYBE_CLASS_TYPE_P (type));
14208
14209         n = VEC_copy (constructor_elt, gc, CONSTRUCTOR_ELTS (t));
14210         newlen = VEC_length (constructor_elt, n);
14211         FOR_EACH_VEC_ELT (constructor_elt, n, idx, ce)
14212           {
14213             if (ce->index && process_index_p)
14214               ce->index = RECUR (ce->index);
14215
14216             if (PACK_EXPANSION_P (ce->value))
14217               {
14218                 /* Substitute into the pack expansion.  */
14219                 ce->value = tsubst_pack_expansion (ce->value, args, complain,
14220                                                   in_decl);
14221
14222                 if (ce->value == error_mark_node
14223                     || PACK_EXPANSION_P (ce->value))
14224                   ;
14225                 else if (TREE_VEC_LENGTH (ce->value) == 1)
14226                   /* Just move the argument into place.  */
14227                   ce->value = TREE_VEC_ELT (ce->value, 0);
14228                 else
14229                   {
14230                     /* Update the length of the final CONSTRUCTOR
14231                        arguments vector, and note that we will need to
14232                        copy.*/
14233                     newlen = newlen + TREE_VEC_LENGTH (ce->value) - 1;
14234                     need_copy_p = true;
14235                   }
14236               }
14237             else
14238               ce->value = RECUR (ce->value);
14239           }
14240
14241         if (need_copy_p)
14242           {
14243             VEC(constructor_elt,gc) *old_n = n;
14244
14245             n = VEC_alloc (constructor_elt, gc, newlen);
14246             FOR_EACH_VEC_ELT (constructor_elt, old_n, idx, ce)
14247               {
14248                 if (TREE_CODE (ce->value) == TREE_VEC)
14249                   {
14250                     int i, len = TREE_VEC_LENGTH (ce->value);
14251                     for (i = 0; i < len; ++i)
14252                       CONSTRUCTOR_APPEND_ELT (n, 0,
14253                                               TREE_VEC_ELT (ce->value, i));
14254                   }
14255                 else
14256                   CONSTRUCTOR_APPEND_ELT (n, 0, ce->value);
14257               }
14258           }
14259
14260         r = build_constructor (init_list_type_node, n);
14261         CONSTRUCTOR_IS_DIRECT_INIT (r) = CONSTRUCTOR_IS_DIRECT_INIT (t);
14262
14263         if (TREE_HAS_CONSTRUCTOR (t))
14264           return finish_compound_literal (type, r, complain);
14265
14266         TREE_TYPE (r) = type;
14267         return r;
14268       }
14269
14270     case TYPEID_EXPR:
14271       {
14272         tree operand_0 = TREE_OPERAND (t, 0);
14273         if (TYPE_P (operand_0))
14274           {
14275             operand_0 = tsubst (operand_0, args, complain, in_decl);
14276             return get_typeid (operand_0);
14277           }
14278         else
14279           {
14280             operand_0 = RECUR (operand_0);
14281             return build_typeid (operand_0);
14282           }
14283       }
14284
14285     case VAR_DECL:
14286       if (!args)
14287         return t;
14288       /* Fall through */
14289
14290     case PARM_DECL:
14291       {
14292         tree r = tsubst_copy (t, args, complain, in_decl);
14293
14294         if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
14295           /* If the original type was a reference, we'll be wrapped in
14296              the appropriate INDIRECT_REF.  */
14297           r = convert_from_reference (r);
14298         return r;
14299       }
14300
14301     case VA_ARG_EXPR:
14302       return build_x_va_arg (RECUR (TREE_OPERAND (t, 0)),
14303                              tsubst (TREE_TYPE (t), args, complain, in_decl));
14304
14305     case OFFSETOF_EXPR:
14306       return finish_offsetof (RECUR (TREE_OPERAND (t, 0)));
14307
14308     case TRAIT_EXPR:
14309       {
14310         tree type1 = tsubst_copy (TRAIT_EXPR_TYPE1 (t), args,
14311                                   complain, in_decl);
14312
14313         tree type2 = TRAIT_EXPR_TYPE2 (t);
14314         if (type2)
14315           type2 = tsubst_copy (type2, args, complain, in_decl);
14316         
14317         return finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2);
14318       }
14319
14320     case STMT_EXPR:
14321       {
14322         tree old_stmt_expr = cur_stmt_expr;
14323         tree stmt_expr = begin_stmt_expr ();
14324
14325         cur_stmt_expr = stmt_expr;
14326         tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl,
14327                      integral_constant_expression_p);
14328         stmt_expr = finish_stmt_expr (stmt_expr, false);
14329         cur_stmt_expr = old_stmt_expr;
14330
14331         /* If the resulting list of expression statement is empty,
14332            fold it further into void_zero_node.  */
14333         if (empty_expr_stmt_p (stmt_expr))
14334           stmt_expr = void_zero_node;
14335
14336         return stmt_expr;
14337       }
14338
14339     case CONST_DECL:
14340       t = tsubst_copy (t, args, complain, in_decl);
14341       /* As in finish_id_expression, we resolve enumeration constants
14342          to their underlying values.  */
14343       if (TREE_CODE (t) == CONST_DECL && !processing_template_decl)
14344         {
14345           used_types_insert (TREE_TYPE (t));
14346           return DECL_INITIAL (t);
14347         }
14348       return t;
14349
14350     case LAMBDA_EXPR:
14351       {
14352         tree r = build_lambda_expr ();
14353
14354         tree type = tsubst (LAMBDA_EXPR_CLOSURE (t), args, complain, NULL_TREE);
14355         LAMBDA_EXPR_CLOSURE (r) = type;
14356         CLASSTYPE_LAMBDA_EXPR (type) = r;
14357
14358         LAMBDA_EXPR_LOCATION (r)
14359           = LAMBDA_EXPR_LOCATION (t);
14360         LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (r)
14361           = LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (t);
14362         LAMBDA_EXPR_MUTABLE_P (r) = LAMBDA_EXPR_MUTABLE_P (t);
14363         LAMBDA_EXPR_DISCRIMINATOR (r)
14364           = (LAMBDA_EXPR_DISCRIMINATOR (t));
14365         LAMBDA_EXPR_EXTRA_SCOPE (r)
14366           = RECUR (LAMBDA_EXPR_EXTRA_SCOPE (t));
14367         if (LAMBDA_EXPR_RETURN_TYPE (t) == dependent_lambda_return_type_node)
14368           {
14369             LAMBDA_EXPR_RETURN_TYPE (r) = dependent_lambda_return_type_node;
14370             LAMBDA_EXPR_DEDUCE_RETURN_TYPE_P (r) = true;
14371           }
14372         else
14373           LAMBDA_EXPR_RETURN_TYPE (r)
14374             = tsubst (LAMBDA_EXPR_RETURN_TYPE (t), args, complain, in_decl);
14375
14376         gcc_assert (LAMBDA_EXPR_THIS_CAPTURE (t) == NULL_TREE
14377                     && LAMBDA_EXPR_PENDING_PROXIES (t) == NULL);
14378
14379         /* Do this again now that LAMBDA_EXPR_EXTRA_SCOPE is set.  */
14380         determine_visibility (TYPE_NAME (type));
14381         /* Now that we know visibility, instantiate the type so we have a
14382            declaration of the op() for later calls to lambda_function.  */
14383         complete_type (type);
14384
14385         /* The capture list refers to closure members, so this needs to
14386            wait until after we finish instantiating the type.  */
14387         LAMBDA_EXPR_CAPTURE_LIST (r)
14388           = RECUR (LAMBDA_EXPR_CAPTURE_LIST (t));
14389
14390         return build_lambda_object (r);
14391       }
14392
14393     case TARGET_EXPR:
14394       /* We can get here for a constant initializer of non-dependent type.
14395          FIXME stop folding in cp_parser_initializer_clause.  */
14396       gcc_assert (TREE_CONSTANT (t));
14397       {
14398         tree r = get_target_expr (RECUR (TARGET_EXPR_INITIAL (t)));
14399         TREE_CONSTANT (r) = true;
14400         return r;
14401       }
14402
14403     case TRANSACTION_EXPR:
14404       return tsubst_expr(t, args, complain, in_decl,
14405              integral_constant_expression_p);
14406
14407     default:
14408       /* Handle Objective-C++ constructs, if appropriate.  */
14409       {
14410         tree subst
14411           = objcp_tsubst_copy_and_build (t, args, complain,
14412                                          in_decl, /*function_p=*/false);
14413         if (subst)
14414           return subst;
14415       }
14416       return tsubst_copy (t, args, complain, in_decl);
14417     }
14418
14419 #undef RECUR
14420 }
14421
14422 /* Verify that the instantiated ARGS are valid. For type arguments,
14423    make sure that the type's linkage is ok. For non-type arguments,
14424    make sure they are constants if they are integral or enumerations.
14425    Emit an error under control of COMPLAIN, and return TRUE on error.  */
14426
14427 static bool
14428 check_instantiated_arg (tree tmpl, tree t, tsubst_flags_t complain)
14429 {
14430   if (ARGUMENT_PACK_P (t))
14431     {
14432       tree vec = ARGUMENT_PACK_ARGS (t);
14433       int len = TREE_VEC_LENGTH (vec);
14434       bool result = false;
14435       int i;
14436
14437       for (i = 0; i < len; ++i)
14438         if (check_instantiated_arg (tmpl, TREE_VEC_ELT (vec, i), complain))
14439           result = true;
14440       return result;
14441     }
14442   else if (TYPE_P (t))
14443     {
14444       /* [basic.link]: A name with no linkage (notably, the name
14445          of a class or enumeration declared in a local scope)
14446          shall not be used to declare an entity with linkage.
14447          This implies that names with no linkage cannot be used as
14448          template arguments
14449
14450          DR 757 relaxes this restriction for C++0x.  */
14451       tree nt = (cxx_dialect > cxx98 ? NULL_TREE
14452                  : no_linkage_check (t, /*relaxed_p=*/false));
14453
14454       if (nt)
14455         {
14456           /* DR 488 makes use of a type with no linkage cause
14457              type deduction to fail.  */
14458           if (complain & tf_error)
14459             {
14460               if (TYPE_ANONYMOUS_P (nt))
14461                 error ("%qT is/uses anonymous type", t);
14462               else
14463                 error ("template argument for %qD uses local type %qT",
14464                        tmpl, t);
14465             }
14466           return true;
14467         }
14468       /* In order to avoid all sorts of complications, we do not
14469          allow variably-modified types as template arguments.  */
14470       else if (variably_modified_type_p (t, NULL_TREE))
14471         {
14472           if (complain & tf_error)
14473             error ("%qT is a variably modified type", t);
14474           return true;
14475         }
14476     }
14477   /* A non-type argument of integral or enumerated type must be a
14478      constant.  */
14479   else if (TREE_TYPE (t)
14480            && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
14481            && !TREE_CONSTANT (t))
14482     {
14483       if (complain & tf_error)
14484         error ("integral expression %qE is not constant", t);
14485       return true;
14486     }
14487   return false;
14488 }
14489
14490 static bool
14491 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
14492 {
14493   int ix, len = DECL_NTPARMS (tmpl);
14494   bool result = false;
14495
14496   for (ix = 0; ix != len; ix++)
14497     {
14498       if (check_instantiated_arg (tmpl, TREE_VEC_ELT (args, ix), complain))
14499         result = true;
14500     }
14501   if (result && (complain & tf_error))
14502     error ("  trying to instantiate %qD", tmpl);
14503   return result;
14504 }
14505
14506 /* In C++0x, it's possible to have a function template whose type depends
14507    on itself recursively.  This is most obvious with decltype, but can also
14508    occur with enumeration scope (c++/48969).  So we need to catch infinite
14509    recursion and reject the substitution at deduction time; this function
14510    will return error_mark_node for any repeated substitution.
14511
14512    This also catches excessive recursion such as when f<N> depends on
14513    f<N-1> across all integers, and returns error_mark_node for all the
14514    substitutions back up to the initial one.
14515
14516    This is, of course, not reentrant.  */
14517
14518 static tree
14519 deduction_tsubst_fntype (tree fn, tree targs, tsubst_flags_t complain)
14520 {
14521   static bool excessive_deduction_depth;
14522   static int deduction_depth;
14523   struct pending_template *old_last_pend = last_pending_template;
14524   struct tinst_level *old_error_tinst = last_error_tinst_level;
14525
14526   tree fntype = TREE_TYPE (fn);
14527   tree tinst;
14528   tree r;
14529
14530   if (excessive_deduction_depth)
14531     return error_mark_node;
14532
14533   tinst = build_tree_list (fn, targs);
14534   if (!push_tinst_level (tinst))
14535     {
14536       excessive_deduction_depth = true;
14537       ggc_free (tinst);
14538       return error_mark_node;
14539     }
14540
14541   input_location = DECL_SOURCE_LOCATION (fn);
14542   ++deduction_depth;
14543   push_deduction_access_scope (fn);
14544   r = tsubst (fntype, targs, complain, NULL_TREE);
14545   pop_deduction_access_scope (fn);
14546   --deduction_depth;
14547
14548   if (excessive_deduction_depth)
14549     {
14550       r = error_mark_node;
14551       if (deduction_depth == 0)
14552         /* Reset once we're all the way out.  */
14553         excessive_deduction_depth = false;
14554     }
14555
14556   pop_tinst_level ();
14557   /* We can't free this if a pending_template entry or last_error_tinst_level
14558      is pointing at it.  */
14559   if (last_pending_template == old_last_pend
14560       && last_error_tinst_level == old_error_tinst)
14561     ggc_free (tinst);
14562   return r;
14563 }
14564
14565 /* Instantiate the indicated variable or function template TMPL with
14566    the template arguments in TARG_PTR.  */
14567
14568 static tree
14569 instantiate_template_1 (tree tmpl, tree orig_args, tsubst_flags_t complain)
14570 {
14571   tree targ_ptr = orig_args;
14572   tree fndecl;
14573   tree gen_tmpl;
14574   tree spec;
14575
14576   if (tmpl == error_mark_node)
14577     return error_mark_node;
14578
14579   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
14580
14581   /* If this function is a clone, handle it specially.  */
14582   if (DECL_CLONED_FUNCTION_P (tmpl))
14583     {
14584       tree spec;
14585       tree clone;
14586
14587       /* Use DECL_ABSTRACT_ORIGIN because only FUNCTION_DECLs have
14588          DECL_CLONED_FUNCTION.  */
14589       spec = instantiate_template (DECL_ABSTRACT_ORIGIN (tmpl),
14590                                    targ_ptr, complain);
14591       if (spec == error_mark_node)
14592         return error_mark_node;
14593
14594       /* Look for the clone.  */
14595       FOR_EACH_CLONE (clone, spec)
14596         if (DECL_NAME (clone) == DECL_NAME (tmpl))
14597           return clone;
14598       /* We should always have found the clone by now.  */
14599       gcc_unreachable ();
14600       return NULL_TREE;
14601     }
14602
14603   /* Check to see if we already have this specialization.  */
14604   gen_tmpl = most_general_template (tmpl);
14605   if (tmpl != gen_tmpl)
14606     /* The TMPL is a partial instantiation.  To get a full set of
14607        arguments we must add the arguments used to perform the
14608        partial instantiation.  */
14609     targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
14610                                             targ_ptr);
14611
14612   /* It would be nice to avoid hashing here and then again in tsubst_decl,
14613      but it doesn't seem to be on the hot path.  */
14614   spec = retrieve_specialization (gen_tmpl, targ_ptr, 0);
14615
14616   gcc_assert (tmpl == gen_tmpl
14617               || ((fndecl = retrieve_specialization (tmpl, orig_args, 0))
14618                   == spec)
14619               || fndecl == NULL_TREE);
14620
14621   if (spec != NULL_TREE)
14622     return spec;
14623
14624   if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
14625                                complain))
14626     return error_mark_node;
14627
14628   /* We are building a FUNCTION_DECL, during which the access of its
14629      parameters and return types have to be checked.  However this
14630      FUNCTION_DECL which is the desired context for access checking
14631      is not built yet.  We solve this chicken-and-egg problem by
14632      deferring all checks until we have the FUNCTION_DECL.  */
14633   push_deferring_access_checks (dk_deferred);
14634
14635   /* Instantiation of the function happens in the context of the function
14636      template, not the context of the overload resolution we're doing.  */
14637   push_to_top_level ();
14638   if (DECL_CLASS_SCOPE_P (gen_tmpl))
14639     {
14640       tree ctx = tsubst (DECL_CONTEXT (gen_tmpl), targ_ptr,
14641                          complain, gen_tmpl);
14642       push_nested_class (ctx);
14643     }
14644   /* Substitute template parameters to obtain the specialization.  */
14645   fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
14646                    targ_ptr, complain, gen_tmpl);
14647   if (DECL_CLASS_SCOPE_P (gen_tmpl))
14648     pop_nested_class ();
14649   pop_from_top_level ();
14650
14651   if (fndecl == error_mark_node)
14652     return error_mark_node;
14653
14654   /* Now we know the specialization, compute access previously
14655      deferred.  */
14656   push_access_scope (fndecl);
14657
14658   /* Some typedefs referenced from within the template code need to be access
14659      checked at template instantiation time, i.e now. These types were
14660      added to the template at parsing time. Let's get those and perfom
14661      the acces checks then.  */
14662   perform_typedefs_access_check (DECL_TEMPLATE_RESULT (tmpl), targ_ptr);
14663   perform_deferred_access_checks ();
14664   pop_access_scope (fndecl);
14665   pop_deferring_access_checks ();
14666
14667   /* The DECL_TI_TEMPLATE should always be the immediate parent
14668      template, not the most general template.  */
14669   DECL_TI_TEMPLATE (fndecl) = tmpl;
14670
14671   /* If we've just instantiated the main entry point for a function,
14672      instantiate all the alternate entry points as well.  We do this
14673      by cloning the instantiation of the main entry point, not by
14674      instantiating the template clones.  */
14675   if (DECL_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (DECL_CHAIN (gen_tmpl)))
14676     clone_function_decl (fndecl, /*update_method_vec_p=*/0);
14677
14678   return fndecl;
14679 }
14680
14681 /* Wrapper for instantiate_template_1.  */
14682
14683 tree
14684 instantiate_template (tree tmpl, tree orig_args, tsubst_flags_t complain)
14685 {
14686   tree ret;
14687   timevar_push (TV_TEMPLATE_INST);
14688   ret = instantiate_template_1 (tmpl, orig_args,  complain);
14689   timevar_pop (TV_TEMPLATE_INST);
14690   return ret;
14691 }
14692
14693 /* We're going to do deduction substitution on the type of TMPL, a function
14694    template.  In C++11 mode, push into that access scope.  In C++03 mode,
14695    disable access checking.  */
14696
14697 static void
14698 push_deduction_access_scope (tree tmpl)
14699 {
14700   if (cxx_dialect >= cxx0x)
14701     {
14702       int ptd = processing_template_decl;
14703       push_access_scope (DECL_TEMPLATE_RESULT (tmpl));
14704       /* Preserve processing_template_decl across push_to_top_level.  */
14705       if (ptd && !processing_template_decl)
14706         ++processing_template_decl;
14707     }
14708   else
14709     push_deferring_access_checks (dk_no_check);
14710 }
14711
14712 /* And pop back out.  */
14713
14714 static void
14715 pop_deduction_access_scope (tree tmpl)
14716 {
14717   if (cxx_dialect >= cxx0x)
14718     pop_access_scope (DECL_TEMPLATE_RESULT (tmpl));
14719   else
14720     pop_deferring_access_checks ();
14721 }
14722
14723 /* PARM is a template parameter pack for FN.  Returns true iff
14724    PARM is used in a deducible way in the argument list of FN.  */
14725
14726 static bool
14727 pack_deducible_p (tree parm, tree fn)
14728 {
14729   tree t = FUNCTION_FIRST_USER_PARMTYPE (fn);
14730   for (; t; t = TREE_CHAIN (t))
14731     {
14732       tree type = TREE_VALUE (t);
14733       tree packs;
14734       if (!PACK_EXPANSION_P (type))
14735         continue;
14736       for (packs = PACK_EXPANSION_PARAMETER_PACKS (type);
14737            packs; packs = TREE_CHAIN (packs))
14738         if (TREE_VALUE (packs) == parm)
14739           {
14740             /* The template parameter pack is used in a function parameter
14741                pack.  If this is the end of the parameter list, the
14742                template parameter pack is deducible.  */
14743             if (TREE_CHAIN (t) == void_list_node)
14744               return true;
14745             else
14746               /* Otherwise, not.  Well, it could be deduced from
14747                  a non-pack parameter, but doing so would end up with
14748                  a deduction mismatch, so don't bother.  */
14749               return false;
14750           }
14751     }
14752   /* The template parameter pack isn't used in any function parameter
14753      packs, but it might be used deeper, e.g. tuple<Args...>.  */
14754   return true;
14755 }
14756
14757 /* The FN is a TEMPLATE_DECL for a function.  ARGS is an array with
14758    NARGS elements of the arguments that are being used when calling
14759    it.  TARGS is a vector into which the deduced template arguments
14760    are placed.
14761
14762    Return zero for success, 2 for an incomplete match that doesn't resolve
14763    all the types, and 1 for complete failure.  An error message will be
14764    printed only for an incomplete match.
14765
14766    If FN is a conversion operator, or we are trying to produce a specific
14767    specialization, RETURN_TYPE is the return type desired.
14768
14769    The EXPLICIT_TARGS are explicit template arguments provided via a
14770    template-id.
14771
14772    The parameter STRICT is one of:
14773
14774    DEDUCE_CALL:
14775      We are deducing arguments for a function call, as in
14776      [temp.deduct.call].
14777
14778    DEDUCE_CONV:
14779      We are deducing arguments for a conversion function, as in
14780      [temp.deduct.conv].
14781
14782    DEDUCE_EXACT:
14783      We are deducing arguments when doing an explicit instantiation
14784      as in [temp.explicit], when determining an explicit specialization
14785      as in [temp.expl.spec], or when taking the address of a function
14786      template, as in [temp.deduct.funcaddr].  */
14787
14788 int
14789 fn_type_unification (tree fn,
14790                      tree explicit_targs,
14791                      tree targs,
14792                      const tree *args,
14793                      unsigned int nargs,
14794                      tree return_type,
14795                      unification_kind_t strict,
14796                      int flags,
14797                      bool explain_p)
14798 {
14799   tree parms;
14800   tree fntype;
14801   int result;
14802
14803   gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
14804
14805   fntype = TREE_TYPE (fn);
14806   if (explicit_targs)
14807     {
14808       /* [temp.deduct]
14809
14810          The specified template arguments must match the template
14811          parameters in kind (i.e., type, nontype, template), and there
14812          must not be more arguments than there are parameters;
14813          otherwise type deduction fails.
14814
14815          Nontype arguments must match the types of the corresponding
14816          nontype template parameters, or must be convertible to the
14817          types of the corresponding nontype parameters as specified in
14818          _temp.arg.nontype_, otherwise type deduction fails.
14819
14820          All references in the function type of the function template
14821          to the corresponding template parameters are replaced by the
14822          specified template argument values.  If a substitution in a
14823          template parameter or in the function type of the function
14824          template results in an invalid type, type deduction fails.  */
14825       tree tparms = DECL_INNERMOST_TEMPLATE_PARMS (fn);
14826       int i, len = TREE_VEC_LENGTH (tparms);
14827       tree converted_args;
14828       bool incomplete = false;
14829
14830       if (explicit_targs == error_mark_node)
14831         return unify_invalid (explain_p);
14832
14833       converted_args
14834         = (coerce_template_parms (tparms, explicit_targs, NULL_TREE,
14835                                   (explain_p
14836                                    ? tf_warning_or_error
14837                                    : tf_none),
14838                                    /*require_all_args=*/false,
14839                                    /*use_default_args=*/false));
14840       if (converted_args == error_mark_node)
14841         return 1;
14842
14843       /* Substitute the explicit args into the function type.  This is
14844          necessary so that, for instance, explicitly declared function
14845          arguments can match null pointed constants.  If we were given
14846          an incomplete set of explicit args, we must not do semantic
14847          processing during substitution as we could create partial
14848          instantiations.  */
14849       for (i = 0; i < len; i++)
14850         {
14851           tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
14852           bool parameter_pack = false;
14853           tree targ = TREE_VEC_ELT (converted_args, i);
14854
14855           /* Dig out the actual parm.  */
14856           if (TREE_CODE (parm) == TYPE_DECL
14857               || TREE_CODE (parm) == TEMPLATE_DECL)
14858             {
14859               parm = TREE_TYPE (parm);
14860               parameter_pack = TEMPLATE_TYPE_PARAMETER_PACK (parm);
14861             }
14862           else if (TREE_CODE (parm) == PARM_DECL)
14863             {
14864               parm = DECL_INITIAL (parm);
14865               parameter_pack = TEMPLATE_PARM_PARAMETER_PACK (parm);
14866             }
14867
14868           if (!parameter_pack && targ == NULL_TREE)
14869             /* No explicit argument for this template parameter.  */
14870             incomplete = true;
14871
14872           if (parameter_pack && pack_deducible_p (parm, fn))
14873             {
14874               /* Mark the argument pack as "incomplete". We could
14875                  still deduce more arguments during unification.
14876                  We remove this mark in type_unification_real.  */
14877               if (targ)
14878                 {
14879                   ARGUMENT_PACK_INCOMPLETE_P(targ) = 1;
14880                   ARGUMENT_PACK_EXPLICIT_ARGS (targ) 
14881                     = ARGUMENT_PACK_ARGS (targ);
14882                 }
14883
14884               /* We have some incomplete argument packs.  */
14885               incomplete = true;
14886             }
14887         }
14888
14889       processing_template_decl += incomplete;
14890       fntype = deduction_tsubst_fntype (fn, converted_args,
14891                                         (explain_p
14892                                          ? tf_warning_or_error
14893                                          : tf_none));
14894       processing_template_decl -= incomplete;
14895
14896       if (fntype == error_mark_node)
14897         return 1;
14898
14899       /* Place the explicitly specified arguments in TARGS.  */
14900       for (i = NUM_TMPL_ARGS (converted_args); i--;)
14901         TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
14902     }
14903
14904   /* Never do unification on the 'this' parameter.  */
14905   parms = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (fntype));
14906
14907   if (return_type)
14908     {
14909       tree *new_args;
14910
14911       parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
14912       new_args = XALLOCAVEC (tree, nargs + 1);
14913       new_args[0] = return_type;
14914       memcpy (new_args + 1, args, nargs * sizeof (tree));
14915       args = new_args;
14916       ++nargs;
14917     }
14918
14919   /* We allow incomplete unification without an error message here
14920      because the standard doesn't seem to explicitly prohibit it.  Our
14921      callers must be ready to deal with unification failures in any
14922      event.  */
14923   result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
14924                                   targs, parms, args, nargs, /*subr=*/0,
14925                                   strict, flags, explain_p);
14926
14927   /* Now that we have bindings for all of the template arguments,
14928      ensure that the arguments deduced for the template template
14929      parameters have compatible template parameter lists.  We cannot
14930      check this property before we have deduced all template
14931      arguments, because the template parameter types of a template
14932      template parameter might depend on prior template parameters
14933      deduced after the template template parameter.  The following
14934      ill-formed example illustrates this issue:
14935
14936        template<typename T, template<T> class C> void f(C<5>, T);
14937
14938        template<int N> struct X {};
14939
14940        void g() {
14941          f(X<5>(), 5l); // error: template argument deduction fails
14942        }
14943
14944      The template parameter list of 'C' depends on the template type
14945      parameter 'T', but 'C' is deduced to 'X' before 'T' is deduced to
14946      'long'.  Thus, we can't check that 'C' cannot bind to 'X' at the
14947      time that we deduce 'C'.  */
14948   if (result == 0
14949       && !template_template_parm_bindings_ok_p 
14950            (DECL_INNERMOST_TEMPLATE_PARMS (fn), targs))
14951     return unify_inconsistent_template_template_parameters (explain_p);
14952
14953   if (result == 0)
14954     /* All is well so far.  Now, check:
14955
14956        [temp.deduct]
14957
14958        When all template arguments have been deduced, all uses of
14959        template parameters in nondeduced contexts are replaced with
14960        the corresponding deduced argument values.  If the
14961        substitution results in an invalid type, as described above,
14962        type deduction fails.  */
14963     {
14964       tree substed = deduction_tsubst_fntype (fn, targs,
14965                                               (explain_p
14966                                                ? tf_warning_or_error
14967                                                : tf_none));
14968       if (substed == error_mark_node)
14969         return 1;
14970
14971       /* If we're looking for an exact match, check that what we got
14972          is indeed an exact match.  It might not be if some template
14973          parameters are used in non-deduced contexts.  */
14974       if (strict == DEDUCE_EXACT)
14975         {
14976           unsigned int i;
14977
14978           tree sarg
14979             = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (substed));
14980           if (return_type)
14981             sarg = tree_cons (NULL_TREE, TREE_TYPE (substed), sarg);
14982           for (i = 0; i < nargs && sarg; ++i, sarg = TREE_CHAIN (sarg))
14983             if (!same_type_p (args[i], TREE_VALUE (sarg)))
14984               return unify_type_mismatch (explain_p, args[i],
14985                                           TREE_VALUE (sarg));
14986         }
14987     }
14988
14989   return result;
14990 }
14991
14992 /* Adjust types before performing type deduction, as described in
14993    [temp.deduct.call] and [temp.deduct.conv].  The rules in these two
14994    sections are symmetric.  PARM is the type of a function parameter
14995    or the return type of the conversion function.  ARG is the type of
14996    the argument passed to the call, or the type of the value
14997    initialized with the result of the conversion function.
14998    ARG_EXPR is the original argument expression, which may be null.  */
14999
15000 static int
15001 maybe_adjust_types_for_deduction (unification_kind_t strict,
15002                                   tree* parm,
15003                                   tree* arg,
15004                                   tree arg_expr)
15005 {
15006   int result = 0;
15007
15008   switch (strict)
15009     {
15010     case DEDUCE_CALL:
15011       break;
15012
15013     case DEDUCE_CONV:
15014       {
15015         /* Swap PARM and ARG throughout the remainder of this
15016            function; the handling is precisely symmetric since PARM
15017            will initialize ARG rather than vice versa.  */
15018         tree* temp = parm;
15019         parm = arg;
15020         arg = temp;
15021         break;
15022       }
15023
15024     case DEDUCE_EXACT:
15025       /* Core issue #873: Do the DR606 thing (see below) for these cases,
15026          too, but here handle it by stripping the reference from PARM
15027          rather than by adding it to ARG.  */
15028       if (TREE_CODE (*parm) == REFERENCE_TYPE
15029           && TYPE_REF_IS_RVALUE (*parm)
15030           && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
15031           && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
15032           && TREE_CODE (*arg) == REFERENCE_TYPE
15033           && !TYPE_REF_IS_RVALUE (*arg))
15034         *parm = TREE_TYPE (*parm);
15035       /* Nothing else to do in this case.  */
15036       return 0;
15037
15038     default:
15039       gcc_unreachable ();
15040     }
15041
15042   if (TREE_CODE (*parm) != REFERENCE_TYPE)
15043     {
15044       /* [temp.deduct.call]
15045
15046          If P is not a reference type:
15047
15048          --If A is an array type, the pointer type produced by the
15049          array-to-pointer standard conversion (_conv.array_) is
15050          used in place of A for type deduction; otherwise,
15051
15052          --If A is a function type, the pointer type produced by
15053          the function-to-pointer standard conversion
15054          (_conv.func_) is used in place of A for type deduction;
15055          otherwise,
15056
15057          --If A is a cv-qualified type, the top level
15058          cv-qualifiers of A's type are ignored for type
15059          deduction.  */
15060       if (TREE_CODE (*arg) == ARRAY_TYPE)
15061         *arg = build_pointer_type (TREE_TYPE (*arg));
15062       else if (TREE_CODE (*arg) == FUNCTION_TYPE)
15063         *arg = build_pointer_type (*arg);
15064       else
15065         *arg = TYPE_MAIN_VARIANT (*arg);
15066     }
15067
15068   /* From C++0x [14.8.2.1/3 temp.deduct.call] (after DR606), "If P is
15069      of the form T&&, where T is a template parameter, and the argument
15070      is an lvalue, T is deduced as A& */
15071   if (TREE_CODE (*parm) == REFERENCE_TYPE
15072       && TYPE_REF_IS_RVALUE (*parm)
15073       && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
15074       && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
15075       && (arg_expr ? real_lvalue_p (arg_expr)
15076           /* try_one_overload doesn't provide an arg_expr, but
15077              functions are always lvalues.  */
15078           : TREE_CODE (*arg) == FUNCTION_TYPE))
15079     *arg = build_reference_type (*arg);
15080
15081   /* [temp.deduct.call]
15082
15083      If P is a cv-qualified type, the top level cv-qualifiers
15084      of P's type are ignored for type deduction.  If P is a
15085      reference type, the type referred to by P is used for
15086      type deduction.  */
15087   *parm = TYPE_MAIN_VARIANT (*parm);
15088   if (TREE_CODE (*parm) == REFERENCE_TYPE)
15089     {
15090       *parm = TREE_TYPE (*parm);
15091       result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
15092     }
15093
15094   /* DR 322. For conversion deduction, remove a reference type on parm
15095      too (which has been swapped into ARG).  */
15096   if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
15097     *arg = TREE_TYPE (*arg);
15098
15099   return result;
15100 }
15101
15102 /* Subroutine of unify_one_argument.  PARM is a function parameter of a
15103    template which does contain any deducible template parameters; check if
15104    ARG is a suitable match for it.  STRICT, FLAGS and EXPLAIN_P are as in
15105    unify_one_argument.  */
15106
15107 static int
15108 check_non_deducible_conversion (tree parm, tree arg, int strict,
15109                                 int flags, bool explain_p)
15110 {
15111   tree type;
15112
15113   if (!TYPE_P (arg))
15114     type = TREE_TYPE (arg);
15115   else
15116     type = arg;
15117
15118   if (same_type_p (parm, type))
15119     return unify_success (explain_p);
15120
15121   if (strict == DEDUCE_CONV)
15122     {
15123       if (can_convert_arg (type, parm, NULL_TREE, flags))
15124         return unify_success (explain_p);
15125     }
15126   else if (strict != DEDUCE_EXACT)
15127     {
15128       if (can_convert_arg (parm, type,
15129                            TYPE_P (arg) ? NULL_TREE : arg,
15130                            flags))
15131         return unify_success (explain_p);
15132     }
15133
15134   if (strict == DEDUCE_EXACT)
15135     return unify_type_mismatch (explain_p, parm, arg);
15136   else
15137     return unify_arg_conversion (explain_p, parm, type, arg);
15138 }
15139
15140 /* Subroutine of type_unification_real and unify_pack_expansion to
15141    handle unification of a single P/A pair.  Parameters are as
15142    for those functions.  */
15143
15144 static int
15145 unify_one_argument (tree tparms, tree targs, tree parm, tree arg,
15146                     int subr, unification_kind_t strict, int flags,
15147                     bool explain_p)
15148 {
15149   tree arg_expr = NULL_TREE;
15150   int arg_strict;
15151
15152   if (arg == error_mark_node || parm == error_mark_node)
15153     return unify_invalid (explain_p);
15154   if (arg == unknown_type_node)
15155     /* We can't deduce anything from this, but we might get all the
15156        template args from other function args.  */
15157     return unify_success (explain_p);
15158
15159   /* FIXME uses_deducible_template_parms */
15160   if (TYPE_P (parm) && !uses_template_parms (parm))
15161     return check_non_deducible_conversion (parm, arg, strict, flags,
15162                                            explain_p);
15163
15164   switch (strict)
15165     {
15166     case DEDUCE_CALL:
15167       arg_strict = (UNIFY_ALLOW_OUTER_LEVEL
15168                     | UNIFY_ALLOW_MORE_CV_QUAL
15169                     | UNIFY_ALLOW_DERIVED);
15170       break;
15171
15172     case DEDUCE_CONV:
15173       arg_strict = UNIFY_ALLOW_LESS_CV_QUAL;
15174       break;
15175
15176     case DEDUCE_EXACT:
15177       arg_strict = UNIFY_ALLOW_NONE;
15178       break;
15179
15180     default:
15181       gcc_unreachable ();
15182     }
15183
15184   /* We only do these transformations if this is the top-level
15185      parameter_type_list in a call or declaration matching; in other
15186      situations (nested function declarators, template argument lists) we
15187      won't be comparing a type to an expression, and we don't do any type
15188      adjustments.  */
15189   if (!subr)
15190     {
15191       if (!TYPE_P (arg))
15192         {
15193           gcc_assert (TREE_TYPE (arg) != NULL_TREE);
15194           if (type_unknown_p (arg))
15195             {
15196               /* [temp.deduct.type] A template-argument can be
15197                  deduced from a pointer to function or pointer
15198                  to member function argument if the set of
15199                  overloaded functions does not contain function
15200                  templates and at most one of a set of
15201                  overloaded functions provides a unique
15202                  match.  */
15203
15204               if (resolve_overloaded_unification
15205                   (tparms, targs, parm, arg, strict,
15206                    arg_strict, explain_p))
15207                 return unify_success (explain_p);
15208               return unify_overload_resolution_failure (explain_p, arg);
15209             }
15210
15211           arg_expr = arg;
15212           arg = unlowered_expr_type (arg);
15213           if (arg == error_mark_node)
15214             return unify_invalid (explain_p);
15215         }
15216
15217       arg_strict |=
15218         maybe_adjust_types_for_deduction (strict, &parm, &arg, arg_expr);
15219     }
15220   else
15221     gcc_assert ((TYPE_P (parm) || TREE_CODE (parm) == TEMPLATE_DECL)
15222                 == (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL));
15223
15224   /* For deduction from an init-list we need the actual list.  */
15225   if (arg_expr && BRACE_ENCLOSED_INITIALIZER_P (arg_expr))
15226     arg = arg_expr;
15227   return unify (tparms, targs, parm, arg, arg_strict, explain_p);
15228 }
15229
15230 /* Most parms like fn_type_unification.
15231
15232    If SUBR is 1, we're being called recursively (to unify the
15233    arguments of a function or method parameter of a function
15234    template). */
15235
15236 static int
15237 type_unification_real (tree tparms,
15238                        tree targs,
15239                        tree xparms,
15240                        const tree *xargs,
15241                        unsigned int xnargs,
15242                        int subr,
15243                        unification_kind_t strict,
15244                        int flags,
15245                        bool explain_p)
15246 {
15247   tree parm, arg;
15248   int i;
15249   int ntparms = TREE_VEC_LENGTH (tparms);
15250   int saw_undeduced = 0;
15251   tree parms;
15252   const tree *args;
15253   unsigned int nargs;
15254   unsigned int ia;
15255
15256   gcc_assert (TREE_CODE (tparms) == TREE_VEC);
15257   gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
15258   gcc_assert (ntparms > 0);
15259
15260   /* Reset the number of non-defaulted template arguments contained
15261      in TARGS.  */
15262   NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs) = NULL_TREE;
15263
15264  again:
15265   parms = xparms;
15266   args = xargs;
15267   nargs = xnargs;
15268
15269   ia = 0;
15270   while (parms && parms != void_list_node
15271          && ia < nargs)
15272     {
15273       parm = TREE_VALUE (parms);
15274
15275       if (TREE_CODE (parm) == TYPE_PACK_EXPANSION
15276           && (!TREE_CHAIN (parms) || TREE_CHAIN (parms) == void_list_node))
15277         /* For a function parameter pack that occurs at the end of the
15278            parameter-declaration-list, the type A of each remaining
15279            argument of the call is compared with the type P of the
15280            declarator-id of the function parameter pack.  */
15281         break;
15282
15283       parms = TREE_CHAIN (parms);
15284
15285       if (TREE_CODE (parm) == TYPE_PACK_EXPANSION)
15286         /* For a function parameter pack that does not occur at the
15287            end of the parameter-declaration-list, the type of the
15288            parameter pack is a non-deduced context.  */
15289         continue;
15290
15291       arg = args[ia];
15292       ++ia;
15293
15294       if (unify_one_argument (tparms, targs, parm, arg, subr, strict,
15295                               flags, explain_p))
15296         return 1;
15297     }
15298
15299   if (parms 
15300       && parms != void_list_node
15301       && TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
15302     {
15303       /* Unify the remaining arguments with the pack expansion type.  */
15304       tree argvec;
15305       tree parmvec = make_tree_vec (1);
15306
15307       /* Allocate a TREE_VEC and copy in all of the arguments */ 
15308       argvec = make_tree_vec (nargs - ia);
15309       for (i = 0; ia < nargs; ++ia, ++i)
15310         TREE_VEC_ELT (argvec, i) = args[ia];
15311
15312       /* Copy the parameter into parmvec.  */
15313       TREE_VEC_ELT (parmvec, 0) = TREE_VALUE (parms);
15314       if (unify_pack_expansion (tparms, targs, parmvec, argvec, strict,
15315                                 /*subr=*/subr, explain_p))
15316         return 1;
15317
15318       /* Advance to the end of the list of parameters.  */
15319       parms = TREE_CHAIN (parms);
15320     }
15321
15322   /* Fail if we've reached the end of the parm list, and more args
15323      are present, and the parm list isn't variadic.  */
15324   if (ia < nargs && parms == void_list_node)
15325     return unify_too_many_arguments (explain_p, nargs, ia);
15326   /* Fail if parms are left and they don't have default values.  */
15327   if (parms && parms != void_list_node
15328       && TREE_PURPOSE (parms) == NULL_TREE)
15329     {
15330       unsigned int count = nargs;
15331       tree p = parms;
15332       while (p && p != void_list_node)
15333         {
15334           count++;
15335           p = TREE_CHAIN (p);
15336         }
15337       return unify_too_few_arguments (explain_p, ia, count);
15338     }
15339
15340   if (!subr)
15341     {
15342       tsubst_flags_t complain = (explain_p
15343                                  ? tf_warning_or_error
15344                                  : tf_none);
15345
15346       /* Check to see if we need another pass before we start clearing
15347          ARGUMENT_PACK_INCOMPLETE_P.  */
15348       for (i = 0; i < ntparms; i++)
15349         {
15350           tree targ = TREE_VEC_ELT (targs, i);
15351           tree tparm = TREE_VEC_ELT (tparms, i);
15352
15353           if (targ || tparm == error_mark_node)
15354             continue;
15355           tparm = TREE_VALUE (tparm);
15356
15357           /* If this is an undeduced nontype parameter that depends on
15358              a type parameter, try another pass; its type may have been
15359              deduced from a later argument than the one from which
15360              this parameter can be deduced.  */
15361           if (TREE_CODE (tparm) == PARM_DECL
15362               && uses_template_parms (TREE_TYPE (tparm))
15363               && !saw_undeduced++)
15364             goto again;
15365         }
15366
15367       for (i = 0; i < ntparms; i++)
15368         {
15369           tree targ = TREE_VEC_ELT (targs, i);
15370           tree tparm = TREE_VEC_ELT (tparms, i);
15371
15372           /* Clear the "incomplete" flags on all argument packs now so that
15373              substituting them into later default arguments works.  */
15374           if (targ && ARGUMENT_PACK_P (targ))
15375             {
15376               ARGUMENT_PACK_INCOMPLETE_P (targ) = 0;
15377               ARGUMENT_PACK_EXPLICIT_ARGS (targ) = NULL_TREE;
15378             }
15379
15380           if (targ || tparm == error_mark_node)
15381             continue;
15382           tparm = TREE_VALUE (tparm);
15383
15384           /* Core issue #226 (C++0x) [temp.deduct]:
15385
15386              If a template argument has not been deduced, its
15387              default template argument, if any, is used. 
15388
15389              When we are in C++98 mode, TREE_PURPOSE will either
15390              be NULL_TREE or ERROR_MARK_NODE, so we do not need
15391              to explicitly check cxx_dialect here.  */
15392           if (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)))
15393             {
15394               tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
15395               tree arg = TREE_PURPOSE (TREE_VEC_ELT (tparms, i));
15396               location_t save_loc = input_location;
15397               if (DECL_P (parm))
15398                 input_location = DECL_SOURCE_LOCATION (parm);
15399               arg = tsubst_template_arg (arg, targs, complain, NULL_TREE);
15400               arg = convert_template_argument (parm, arg, targs, complain,
15401                                                i, NULL_TREE);
15402               input_location = save_loc;
15403               if (arg == error_mark_node)
15404                 return 1;
15405               else
15406                 {
15407                   TREE_VEC_ELT (targs, i) = arg;
15408                   /* The position of the first default template argument,
15409                      is also the number of non-defaulted arguments in TARGS.
15410                      Record that.  */
15411                   if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
15412                     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, i);
15413                   continue;
15414                 }
15415             }
15416
15417           /* If the type parameter is a parameter pack, then it will
15418              be deduced to an empty parameter pack.  */
15419           if (template_parameter_pack_p (tparm))
15420             {
15421               tree arg;
15422
15423               if (TREE_CODE (tparm) == TEMPLATE_PARM_INDEX)
15424                 {
15425                   arg = make_node (NONTYPE_ARGUMENT_PACK);
15426                   TREE_TYPE (arg)  = TREE_TYPE (TEMPLATE_PARM_DECL (tparm));
15427                   TREE_CONSTANT (arg) = 1;
15428                 }
15429               else
15430                 arg = cxx_make_type (TYPE_ARGUMENT_PACK);
15431
15432               SET_ARGUMENT_PACK_ARGS (arg, make_tree_vec (0));
15433
15434               TREE_VEC_ELT (targs, i) = arg;
15435               continue;
15436             }
15437
15438           return unify_parameter_deduction_failure (explain_p, tparm);
15439         }
15440     }
15441 #ifdef ENABLE_CHECKING
15442   if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
15443     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, TREE_VEC_LENGTH (targs));
15444 #endif
15445
15446   return unify_success (explain_p);
15447 }
15448
15449 /* Subroutine of type_unification_real.  Args are like the variables
15450    at the call site.  ARG is an overloaded function (or template-id);
15451    we try deducing template args from each of the overloads, and if
15452    only one succeeds, we go with that.  Modifies TARGS and returns
15453    true on success.  */
15454
15455 static bool
15456 resolve_overloaded_unification (tree tparms,
15457                                 tree targs,
15458                                 tree parm,
15459                                 tree arg,
15460                                 unification_kind_t strict,
15461                                 int sub_strict,
15462                                 bool explain_p)
15463 {
15464   tree tempargs = copy_node (targs);
15465   int good = 0;
15466   tree goodfn = NULL_TREE;
15467   bool addr_p;
15468
15469   if (TREE_CODE (arg) == ADDR_EXPR)
15470     {
15471       arg = TREE_OPERAND (arg, 0);
15472       addr_p = true;
15473     }
15474   else
15475     addr_p = false;
15476
15477   if (TREE_CODE (arg) == COMPONENT_REF)
15478     /* Handle `&x' where `x' is some static or non-static member
15479        function name.  */
15480     arg = TREE_OPERAND (arg, 1);
15481
15482   if (TREE_CODE (arg) == OFFSET_REF)
15483     arg = TREE_OPERAND (arg, 1);
15484
15485   /* Strip baselink information.  */
15486   if (BASELINK_P (arg))
15487     arg = BASELINK_FUNCTIONS (arg);
15488
15489   if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
15490     {
15491       /* If we got some explicit template args, we need to plug them into
15492          the affected templates before we try to unify, in case the
15493          explicit args will completely resolve the templates in question.  */
15494
15495       int ok = 0;
15496       tree expl_subargs = TREE_OPERAND (arg, 1);
15497       arg = TREE_OPERAND (arg, 0);
15498
15499       for (; arg; arg = OVL_NEXT (arg))
15500         {
15501           tree fn = OVL_CURRENT (arg);
15502           tree subargs, elem;
15503
15504           if (TREE_CODE (fn) != TEMPLATE_DECL)
15505             continue;
15506
15507           ++processing_template_decl;
15508           subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
15509                                   expl_subargs, /*check_ret=*/false);
15510           if (subargs && !any_dependent_template_arguments_p (subargs))
15511             {
15512               elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
15513               if (try_one_overload (tparms, targs, tempargs, parm,
15514                                     elem, strict, sub_strict, addr_p, explain_p)
15515                   && (!goodfn || !same_type_p (goodfn, elem)))
15516                 {
15517                   goodfn = elem;
15518                   ++good;
15519                 }
15520             }
15521           else if (subargs)
15522             ++ok;
15523           --processing_template_decl;
15524         }
15525       /* If no templates (or more than one) are fully resolved by the
15526          explicit arguments, this template-id is a non-deduced context; it
15527          could still be OK if we deduce all template arguments for the
15528          enclosing call through other arguments.  */
15529       if (good != 1)
15530         good = ok;
15531     }
15532   else if (TREE_CODE (arg) != OVERLOAD
15533            && TREE_CODE (arg) != FUNCTION_DECL)
15534     /* If ARG is, for example, "(0, &f)" then its type will be unknown
15535        -- but the deduction does not succeed because the expression is
15536        not just the function on its own.  */
15537     return false;
15538   else
15539     for (; arg; arg = OVL_NEXT (arg))
15540       if (try_one_overload (tparms, targs, tempargs, parm,
15541                             TREE_TYPE (OVL_CURRENT (arg)),
15542                             strict, sub_strict, addr_p, explain_p)
15543           && (!goodfn || !decls_match (goodfn, OVL_CURRENT (arg))))
15544         {
15545           goodfn = OVL_CURRENT (arg);
15546           ++good;
15547         }
15548
15549   /* [temp.deduct.type] A template-argument can be deduced from a pointer
15550      to function or pointer to member function argument if the set of
15551      overloaded functions does not contain function templates and at most
15552      one of a set of overloaded functions provides a unique match.
15553
15554      So if we found multiple possibilities, we return success but don't
15555      deduce anything.  */
15556
15557   if (good == 1)
15558     {
15559       int i = TREE_VEC_LENGTH (targs);
15560       for (; i--; )
15561         if (TREE_VEC_ELT (tempargs, i))
15562           TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
15563     }
15564   if (good)
15565     return true;
15566
15567   return false;
15568 }
15569
15570 /* Core DR 115: In contexts where deduction is done and fails, or in
15571    contexts where deduction is not done, if a template argument list is
15572    specified and it, along with any default template arguments, identifies
15573    a single function template specialization, then the template-id is an
15574    lvalue for the function template specialization.  */
15575
15576 tree
15577 resolve_nondeduced_context (tree orig_expr)
15578 {
15579   tree expr, offset, baselink;
15580   bool addr;
15581
15582   if (!type_unknown_p (orig_expr))
15583     return orig_expr;
15584
15585   expr = orig_expr;
15586   addr = false;
15587   offset = NULL_TREE;
15588   baselink = NULL_TREE;
15589
15590   if (TREE_CODE (expr) == ADDR_EXPR)
15591     {
15592       expr = TREE_OPERAND (expr, 0);
15593       addr = true;
15594     }
15595   if (TREE_CODE (expr) == OFFSET_REF)
15596     {
15597       offset = expr;
15598       expr = TREE_OPERAND (expr, 1);
15599     }
15600   if (BASELINK_P (expr))
15601     {
15602       baselink = expr;
15603       expr = BASELINK_FUNCTIONS (expr);
15604     }
15605
15606   if (TREE_CODE (expr) == TEMPLATE_ID_EXPR)
15607     {
15608       int good = 0;
15609       tree goodfn = NULL_TREE;
15610
15611       /* If we got some explicit template args, we need to plug them into
15612          the affected templates before we try to unify, in case the
15613          explicit args will completely resolve the templates in question.  */
15614
15615       tree expl_subargs = TREE_OPERAND (expr, 1);
15616       tree arg = TREE_OPERAND (expr, 0);
15617       tree badfn = NULL_TREE;
15618       tree badargs = NULL_TREE;
15619
15620       for (; arg; arg = OVL_NEXT (arg))
15621         {
15622           tree fn = OVL_CURRENT (arg);
15623           tree subargs, elem;
15624
15625           if (TREE_CODE (fn) != TEMPLATE_DECL)
15626             continue;
15627
15628           ++processing_template_decl;
15629           subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
15630                                   expl_subargs, /*check_ret=*/false);
15631           if (subargs && !any_dependent_template_arguments_p (subargs))
15632             {
15633               elem = instantiate_template (fn, subargs, tf_none);
15634               if (elem == error_mark_node)
15635                 {
15636                   badfn = fn;
15637                   badargs = subargs;
15638                 }
15639               else if (elem && (!goodfn || !decls_match (goodfn, elem)))
15640                 {
15641                   goodfn = elem;
15642                   ++good;
15643                 }
15644             }
15645           --processing_template_decl;
15646         }
15647       if (good == 1)
15648         {
15649           mark_used (goodfn);
15650           expr = goodfn;
15651           if (baselink)
15652             expr = build_baselink (BASELINK_BINFO (baselink),
15653                                    BASELINK_ACCESS_BINFO (baselink),
15654                                    expr, BASELINK_OPTYPE (baselink));
15655           if (offset)
15656             {
15657               tree base
15658                 = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (offset, 0)));
15659               expr = build_offset_ref (base, expr, addr);
15660             }
15661           if (addr)
15662             expr = cp_build_addr_expr (expr, tf_warning_or_error);
15663           return expr;
15664         }
15665       else if (good == 0 && badargs)
15666         /* There were no good options and at least one bad one, so let the
15667            user know what the problem is.  */
15668         instantiate_template (badfn, badargs, tf_warning_or_error);
15669     }
15670   return orig_expr;
15671 }
15672
15673 /* Subroutine of resolve_overloaded_unification; does deduction for a single
15674    overload.  Fills TARGS with any deduced arguments, or error_mark_node if
15675    different overloads deduce different arguments for a given parm.
15676    ADDR_P is true if the expression for which deduction is being
15677    performed was of the form "& fn" rather than simply "fn".
15678
15679    Returns 1 on success.  */
15680
15681 static int
15682 try_one_overload (tree tparms,
15683                   tree orig_targs,
15684                   tree targs,
15685                   tree parm,
15686                   tree arg,
15687                   unification_kind_t strict,
15688                   int sub_strict,
15689                   bool addr_p,
15690                   bool explain_p)
15691 {
15692   int nargs;
15693   tree tempargs;
15694   int i;
15695
15696   /* [temp.deduct.type] A template-argument can be deduced from a pointer
15697      to function or pointer to member function argument if the set of
15698      overloaded functions does not contain function templates and at most
15699      one of a set of overloaded functions provides a unique match.
15700
15701      So if this is a template, just return success.  */
15702
15703   if (uses_template_parms (arg))
15704     return 1;
15705
15706   if (TREE_CODE (arg) == METHOD_TYPE)
15707     arg = build_ptrmemfunc_type (build_pointer_type (arg));
15708   else if (addr_p)
15709     arg = build_pointer_type (arg);
15710
15711   sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
15712
15713   /* We don't copy orig_targs for this because if we have already deduced
15714      some template args from previous args, unify would complain when we
15715      try to deduce a template parameter for the same argument, even though
15716      there isn't really a conflict.  */
15717   nargs = TREE_VEC_LENGTH (targs);
15718   tempargs = make_tree_vec (nargs);
15719
15720   if (unify (tparms, tempargs, parm, arg, sub_strict, explain_p))
15721     return 0;
15722
15723   /* First make sure we didn't deduce anything that conflicts with
15724      explicitly specified args.  */
15725   for (i = nargs; i--; )
15726     {
15727       tree elt = TREE_VEC_ELT (tempargs, i);
15728       tree oldelt = TREE_VEC_ELT (orig_targs, i);
15729
15730       if (!elt)
15731         /*NOP*/;
15732       else if (uses_template_parms (elt))
15733         /* Since we're unifying against ourselves, we will fill in
15734            template args used in the function parm list with our own
15735            template parms.  Discard them.  */
15736         TREE_VEC_ELT (tempargs, i) = NULL_TREE;
15737       else if (oldelt && !template_args_equal (oldelt, elt))
15738         return 0;
15739     }
15740
15741   for (i = nargs; i--; )
15742     {
15743       tree elt = TREE_VEC_ELT (tempargs, i);
15744
15745       if (elt)
15746         TREE_VEC_ELT (targs, i) = elt;
15747     }
15748
15749   return 1;
15750 }
15751
15752 /* PARM is a template class (perhaps with unbound template
15753    parameters).  ARG is a fully instantiated type.  If ARG can be
15754    bound to PARM, return ARG, otherwise return NULL_TREE.  TPARMS and
15755    TARGS are as for unify.  */
15756
15757 static tree
15758 try_class_unification (tree tparms, tree targs, tree parm, tree arg,
15759                        bool explain_p)
15760 {
15761   tree copy_of_targs;
15762
15763   if (!CLASSTYPE_TEMPLATE_INFO (arg)
15764       || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
15765           != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
15766     return NULL_TREE;
15767
15768   /* We need to make a new template argument vector for the call to
15769      unify.  If we used TARGS, we'd clutter it up with the result of
15770      the attempted unification, even if this class didn't work out.
15771      We also don't want to commit ourselves to all the unifications
15772      we've already done, since unification is supposed to be done on
15773      an argument-by-argument basis.  In other words, consider the
15774      following pathological case:
15775
15776        template <int I, int J, int K>
15777        struct S {};
15778
15779        template <int I, int J>
15780        struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
15781
15782        template <int I, int J, int K>
15783        void f(S<I, J, K>, S<I, I, I>);
15784
15785        void g() {
15786          S<0, 0, 0> s0;
15787          S<0, 1, 2> s2;
15788
15789          f(s0, s2);
15790        }
15791
15792      Now, by the time we consider the unification involving `s2', we
15793      already know that we must have `f<0, 0, 0>'.  But, even though
15794      `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
15795      because there are two ways to unify base classes of S<0, 1, 2>
15796      with S<I, I, I>.  If we kept the already deduced knowledge, we
15797      would reject the possibility I=1.  */
15798   copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
15799
15800   /* If unification failed, we're done.  */
15801   if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
15802              CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE, explain_p))
15803     return NULL_TREE;
15804
15805   return arg;
15806 }
15807
15808 /* Given a template type PARM and a class type ARG, find the unique
15809    base type in ARG that is an instance of PARM.  We do not examine
15810    ARG itself; only its base-classes.  If there is not exactly one
15811    appropriate base class, return NULL_TREE.  PARM may be the type of
15812    a partial specialization, as well as a plain template type.  Used
15813    by unify.  */
15814
15815 static enum template_base_result
15816 get_template_base (tree tparms, tree targs, tree parm, tree arg,
15817                    bool explain_p, tree *result)
15818 {
15819   tree rval = NULL_TREE;
15820   tree binfo;
15821
15822   gcc_assert (RECORD_OR_UNION_CODE_P (TREE_CODE (arg)));
15823
15824   binfo = TYPE_BINFO (complete_type (arg));
15825   if (!binfo)
15826     {
15827       /* The type could not be completed.  */
15828       *result = NULL_TREE;
15829       return tbr_incomplete_type;
15830     }
15831
15832   /* Walk in inheritance graph order.  The search order is not
15833      important, and this avoids multiple walks of virtual bases.  */
15834   for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
15835     {
15836       tree r = try_class_unification (tparms, targs, parm,
15837                                       BINFO_TYPE (binfo), explain_p);
15838
15839       if (r)
15840         {
15841           /* If there is more than one satisfactory baseclass, then:
15842
15843                [temp.deduct.call]
15844
15845               If they yield more than one possible deduced A, the type
15846               deduction fails.
15847
15848              applies.  */
15849           if (rval && !same_type_p (r, rval))
15850             {
15851               *result = NULL_TREE;
15852               return tbr_ambiguous_baseclass;
15853             }
15854
15855           rval = r;
15856         }
15857     }
15858
15859   *result = rval;
15860   return tbr_success;
15861 }
15862
15863 /* Returns the level of DECL, which declares a template parameter.  */
15864
15865 static int
15866 template_decl_level (tree decl)
15867 {
15868   switch (TREE_CODE (decl))
15869     {
15870     case TYPE_DECL:
15871     case TEMPLATE_DECL:
15872       return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
15873
15874     case PARM_DECL:
15875       return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
15876
15877     default:
15878       gcc_unreachable ();
15879     }
15880   return 0;
15881 }
15882
15883 /* Decide whether ARG can be unified with PARM, considering only the
15884    cv-qualifiers of each type, given STRICT as documented for unify.
15885    Returns nonzero iff the unification is OK on that basis.  */
15886
15887 static int
15888 check_cv_quals_for_unify (int strict, tree arg, tree parm)
15889 {
15890   int arg_quals = cp_type_quals (arg);
15891   int parm_quals = cp_type_quals (parm);
15892
15893   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
15894       && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
15895     {
15896       /*  Although a CVR qualifier is ignored when being applied to a
15897           substituted template parameter ([8.3.2]/1 for example), that
15898           does not allow us to unify "const T" with "int&" because both
15899           types are not of the form "cv-list T" [14.8.2.5 temp.deduct.type].
15900           It is ok when we're allowing additional CV qualifiers
15901           at the outer level [14.8.2.1]/3,1st bullet.  */
15902       if ((TREE_CODE (arg) == REFERENCE_TYPE
15903            || TREE_CODE (arg) == FUNCTION_TYPE
15904            || TREE_CODE (arg) == METHOD_TYPE)
15905           && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
15906         return 0;
15907
15908       if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
15909           && (parm_quals & TYPE_QUAL_RESTRICT))
15910         return 0;
15911     }
15912
15913   if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
15914       && (arg_quals & parm_quals) != parm_quals)
15915     return 0;
15916
15917   if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
15918       && (parm_quals & arg_quals) != arg_quals)
15919     return 0;
15920
15921   return 1;
15922 }
15923
15924 /* Determines the LEVEL and INDEX for the template parameter PARM.  */
15925 void 
15926 template_parm_level_and_index (tree parm, int* level, int* index)
15927 {
15928   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
15929       || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
15930       || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
15931     {
15932       *index = TEMPLATE_TYPE_IDX (parm);
15933       *level = TEMPLATE_TYPE_LEVEL (parm);
15934     }
15935   else
15936     {
15937       *index = TEMPLATE_PARM_IDX (parm);
15938       *level = TEMPLATE_PARM_LEVEL (parm);
15939     }
15940 }
15941
15942 #define RECUR_AND_CHECK_FAILURE(TP, TA, P, A, S, EP)                    \
15943   do {                                                                  \
15944     if (unify (TP, TA, P, A, S, EP))                                    \
15945       return 1;                                                         \
15946   } while (0);
15947
15948 /* Unifies the remaining arguments in PACKED_ARGS with the pack
15949    expansion at the end of PACKED_PARMS. Returns 0 if the type
15950    deduction succeeds, 1 otherwise. STRICT is the same as in
15951    unify. CALL_ARGS_P is true iff PACKED_ARGS is actually a function
15952    call argument list. We'll need to adjust the arguments to make them
15953    types. SUBR tells us if this is from a recursive call to
15954    type_unification_real, or for comparing two template argument
15955    lists. */
15956
15957 static int
15958 unify_pack_expansion (tree tparms, tree targs, tree packed_parms, 
15959                       tree packed_args, unification_kind_t strict,
15960                       bool subr, bool explain_p)
15961 {
15962   tree parm 
15963     = TREE_VEC_ELT (packed_parms, TREE_VEC_LENGTH (packed_parms) - 1);
15964   tree pattern = PACK_EXPANSION_PATTERN (parm);
15965   tree pack, packs = NULL_TREE;
15966   int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
15967   int len = TREE_VEC_LENGTH (packed_args);
15968
15969   /* Determine the parameter packs we will be deducing from the
15970      pattern, and record their current deductions.  */
15971   for (pack = PACK_EXPANSION_PARAMETER_PACKS (parm); 
15972        pack; pack = TREE_CHAIN (pack))
15973     {
15974       tree parm_pack = TREE_VALUE (pack);
15975       int idx, level;
15976
15977       /* Determine the index and level of this parameter pack.  */
15978       template_parm_level_and_index (parm_pack, &level, &idx);
15979
15980       /* Keep track of the parameter packs and their corresponding
15981          argument packs.  */
15982       packs = tree_cons (parm_pack, TMPL_ARG (targs, level, idx), packs);
15983       TREE_TYPE (packs) = make_tree_vec (len - start);
15984     }
15985   
15986   /* Loop through all of the arguments that have not yet been
15987      unified and unify each with the pattern.  */
15988   for (i = start; i < len; i++)
15989     {
15990       tree parm;
15991       bool any_explicit = false;
15992       tree arg = TREE_VEC_ELT (packed_args, i);
15993
15994       /* For each parameter pack, set its TMPL_ARG to either NULL_TREE
15995          or the element of its argument pack at the current index if
15996          this argument was explicitly specified.  */
15997       for (pack = packs; pack; pack = TREE_CHAIN (pack))
15998         {
15999           int idx, level;
16000           tree arg, pargs;
16001           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
16002
16003           arg = NULL_TREE;
16004           if (TREE_VALUE (pack)
16005               && (pargs = ARGUMENT_PACK_EXPLICIT_ARGS (TREE_VALUE (pack)))
16006               && (i < TREE_VEC_LENGTH (pargs)))
16007             {
16008               any_explicit = true;
16009               arg = TREE_VEC_ELT (pargs, i);
16010             }
16011           TMPL_ARG (targs, level, idx) = arg;
16012         }
16013
16014       /* If we had explicit template arguments, substitute them into the
16015          pattern before deduction.  */
16016       if (any_explicit)
16017         {
16018           /* Some arguments might still be unspecified or dependent.  */
16019           bool dependent;
16020           ++processing_template_decl;
16021           dependent = any_dependent_template_arguments_p (targs);
16022           if (!dependent)
16023             --processing_template_decl;
16024           parm = tsubst (pattern, targs,
16025                          explain_p ? tf_warning_or_error : tf_none,
16026                          NULL_TREE);
16027           if (dependent)
16028             --processing_template_decl;
16029           if (parm == error_mark_node)
16030             return 1;
16031         }
16032       else
16033         parm = pattern;
16034
16035       /* Unify the pattern with the current argument.  */
16036       if (unify_one_argument (tparms, targs, parm, arg, subr, strict,
16037                               LOOKUP_IMPLICIT, explain_p))
16038         return 1;
16039
16040       /* For each parameter pack, collect the deduced value.  */
16041       for (pack = packs; pack; pack = TREE_CHAIN (pack))
16042         {
16043           int idx, level;
16044           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
16045
16046           TREE_VEC_ELT (TREE_TYPE (pack), i - start) = 
16047             TMPL_ARG (targs, level, idx);
16048         }
16049     }
16050
16051   /* Verify that the results of unification with the parameter packs
16052      produce results consistent with what we've seen before, and make
16053      the deduced argument packs available.  */
16054   for (pack = packs; pack; pack = TREE_CHAIN (pack))
16055     {
16056       tree old_pack = TREE_VALUE (pack);
16057       tree new_args = TREE_TYPE (pack);
16058       int i, len = TREE_VEC_LENGTH (new_args);
16059       int idx, level;
16060       bool nondeduced_p = false;
16061
16062       /* By default keep the original deduced argument pack.
16063          If necessary, more specific code is going to update the
16064          resulting deduced argument later down in this function.  */
16065       template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
16066       TMPL_ARG (targs, level, idx) = old_pack;
16067
16068       /* If NEW_ARGS contains any NULL_TREE entries, we didn't
16069          actually deduce anything.  */
16070       for (i = 0; i < len && !nondeduced_p; ++i)
16071         if (TREE_VEC_ELT (new_args, i) == NULL_TREE)
16072           nondeduced_p = true;
16073       if (nondeduced_p)
16074         continue;
16075
16076       if (old_pack && ARGUMENT_PACK_INCOMPLETE_P (old_pack))
16077         {
16078           /* If we had fewer function args than explicit template args,
16079              just use the explicits.  */
16080           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
16081           int explicit_len = TREE_VEC_LENGTH (explicit_args);
16082           if (len < explicit_len)
16083             new_args = explicit_args;
16084         }
16085
16086       if (!old_pack)
16087         {
16088           tree result;
16089           /* Build the deduced *_ARGUMENT_PACK.  */
16090           if (TREE_CODE (TREE_PURPOSE (pack)) == TEMPLATE_PARM_INDEX)
16091             {
16092               result = make_node (NONTYPE_ARGUMENT_PACK);
16093               TREE_TYPE (result) = 
16094                 TREE_TYPE (TEMPLATE_PARM_DECL (TREE_PURPOSE (pack)));
16095               TREE_CONSTANT (result) = 1;
16096             }
16097           else
16098             result = cxx_make_type (TYPE_ARGUMENT_PACK);
16099
16100           SET_ARGUMENT_PACK_ARGS (result, new_args);
16101
16102           /* Note the deduced argument packs for this parameter
16103              pack.  */
16104           TMPL_ARG (targs, level, idx) = result;
16105         }
16106       else if (ARGUMENT_PACK_INCOMPLETE_P (old_pack)
16107                && (ARGUMENT_PACK_ARGS (old_pack) 
16108                    == ARGUMENT_PACK_EXPLICIT_ARGS (old_pack)))
16109         {
16110           /* We only had the explicitly-provided arguments before, but
16111              now we have a complete set of arguments.  */
16112           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
16113
16114           SET_ARGUMENT_PACK_ARGS (old_pack, new_args);
16115           ARGUMENT_PACK_INCOMPLETE_P (old_pack) = 1;
16116           ARGUMENT_PACK_EXPLICIT_ARGS (old_pack) = explicit_args;
16117         }
16118       else
16119         {
16120           tree bad_old_arg = NULL_TREE, bad_new_arg = NULL_TREE;
16121           tree old_args = ARGUMENT_PACK_ARGS (old_pack);
16122
16123           if (!comp_template_args_with_info (old_args, new_args,
16124                                              &bad_old_arg, &bad_new_arg))
16125             /* Inconsistent unification of this parameter pack.  */
16126             return unify_parameter_pack_inconsistent (explain_p,
16127                                                       bad_old_arg,
16128                                                       bad_new_arg);
16129         }
16130     }
16131
16132   return unify_success (explain_p);
16133 }
16134
16135 /* Deduce the value of template parameters.  TPARMS is the (innermost)
16136    set of template parameters to a template.  TARGS is the bindings
16137    for those template parameters, as determined thus far; TARGS may
16138    include template arguments for outer levels of template parameters
16139    as well.  PARM is a parameter to a template function, or a
16140    subcomponent of that parameter; ARG is the corresponding argument.
16141    This function attempts to match PARM with ARG in a manner
16142    consistent with the existing assignments in TARGS.  If more values
16143    are deduced, then TARGS is updated.
16144
16145    Returns 0 if the type deduction succeeds, 1 otherwise.  The
16146    parameter STRICT is a bitwise or of the following flags:
16147
16148      UNIFY_ALLOW_NONE:
16149        Require an exact match between PARM and ARG.
16150      UNIFY_ALLOW_MORE_CV_QUAL:
16151        Allow the deduced ARG to be more cv-qualified (by qualification
16152        conversion) than ARG.
16153      UNIFY_ALLOW_LESS_CV_QUAL:
16154        Allow the deduced ARG to be less cv-qualified than ARG.
16155      UNIFY_ALLOW_DERIVED:
16156        Allow the deduced ARG to be a template base class of ARG,
16157        or a pointer to a template base class of the type pointed to by
16158        ARG.
16159      UNIFY_ALLOW_INTEGER:
16160        Allow any integral type to be deduced.  See the TEMPLATE_PARM_INDEX
16161        case for more information.
16162      UNIFY_ALLOW_OUTER_LEVEL:
16163        This is the outermost level of a deduction. Used to determine validity
16164        of qualification conversions. A valid qualification conversion must
16165        have const qualified pointers leading up to the inner type which
16166        requires additional CV quals, except at the outer level, where const
16167        is not required [conv.qual]. It would be normal to set this flag in
16168        addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
16169      UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
16170        This is the outermost level of a deduction, and PARM can be more CV
16171        qualified at this point.
16172      UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
16173        This is the outermost level of a deduction, and PARM can be less CV
16174        qualified at this point.  */
16175
16176 static int
16177 unify (tree tparms, tree targs, tree parm, tree arg, int strict,
16178        bool explain_p)
16179 {
16180   int idx;
16181   tree targ;
16182   tree tparm;
16183   int strict_in = strict;
16184
16185   /* I don't think this will do the right thing with respect to types.
16186      But the only case I've seen it in so far has been array bounds, where
16187      signedness is the only information lost, and I think that will be
16188      okay.  */
16189   while (TREE_CODE (parm) == NOP_EXPR)
16190     parm = TREE_OPERAND (parm, 0);
16191
16192   if (arg == error_mark_node)
16193     return unify_invalid (explain_p);
16194   if (arg == unknown_type_node
16195       || arg == init_list_type_node)
16196     /* We can't deduce anything from this, but we might get all the
16197        template args from other function args.  */
16198     return unify_success (explain_p);
16199
16200   /* If PARM uses template parameters, then we can't bail out here,
16201      even if ARG == PARM, since we won't record unifications for the
16202      template parameters.  We might need them if we're trying to
16203      figure out which of two things is more specialized.  */
16204   if (arg == parm && !uses_template_parms (parm))
16205     return unify_success (explain_p);
16206
16207   /* Handle init lists early, so the rest of the function can assume
16208      we're dealing with a type. */
16209   if (BRACE_ENCLOSED_INITIALIZER_P (arg))
16210     {
16211       tree elt, elttype;
16212       unsigned i;
16213       tree orig_parm = parm;
16214
16215       /* Replace T with std::initializer_list<T> for deduction.  */
16216       if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
16217           && flag_deduce_init_list)
16218         parm = listify (parm);
16219
16220       if (!is_std_init_list (parm))
16221         /* We can only deduce from an initializer list argument if the
16222            parameter is std::initializer_list; otherwise this is a
16223            non-deduced context. */
16224         return unify_success (explain_p);
16225
16226       elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (parm), 0);
16227
16228       FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (arg), i, elt)
16229         {
16230           int elt_strict = strict;
16231
16232           if (elt == error_mark_node)
16233             return unify_invalid (explain_p);
16234
16235           if (!BRACE_ENCLOSED_INITIALIZER_P (elt))
16236             {
16237               tree type = TREE_TYPE (elt);
16238               /* It should only be possible to get here for a call.  */
16239               gcc_assert (elt_strict & UNIFY_ALLOW_OUTER_LEVEL);
16240               elt_strict |= maybe_adjust_types_for_deduction
16241                 (DEDUCE_CALL, &elttype, &type, elt);
16242               elt = type;
16243             }
16244
16245           RECUR_AND_CHECK_FAILURE (tparms, targs, elttype, elt, elt_strict,
16246                                    explain_p);
16247         }
16248
16249       /* If the std::initializer_list<T> deduction worked, replace the
16250          deduced A with std::initializer_list<A>.  */
16251       if (orig_parm != parm)
16252         {
16253           idx = TEMPLATE_TYPE_IDX (orig_parm);
16254           targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
16255           targ = listify (targ);
16256           TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = targ;
16257         }
16258       return unify_success (explain_p);
16259     }
16260
16261   /* Immediately reject some pairs that won't unify because of
16262      cv-qualification mismatches.  */
16263   if (TREE_CODE (arg) == TREE_CODE (parm)
16264       && TYPE_P (arg)
16265       /* It is the elements of the array which hold the cv quals of an array
16266          type, and the elements might be template type parms. We'll check
16267          when we recurse.  */
16268       && TREE_CODE (arg) != ARRAY_TYPE
16269       /* We check the cv-qualifiers when unifying with template type
16270          parameters below.  We want to allow ARG `const T' to unify with
16271          PARM `T' for example, when computing which of two templates
16272          is more specialized, for example.  */
16273       && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
16274       && !check_cv_quals_for_unify (strict_in, arg, parm))
16275     return unify_cv_qual_mismatch (explain_p, parm, arg);
16276
16277   if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
16278       && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
16279     strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
16280   strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
16281   strict &= ~UNIFY_ALLOW_DERIVED;
16282   strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
16283   strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
16284
16285   switch (TREE_CODE (parm))
16286     {
16287     case TYPENAME_TYPE:
16288     case SCOPE_REF:
16289     case UNBOUND_CLASS_TEMPLATE:
16290       /* In a type which contains a nested-name-specifier, template
16291          argument values cannot be deduced for template parameters used
16292          within the nested-name-specifier.  */
16293       return unify_success (explain_p);
16294
16295     case TEMPLATE_TYPE_PARM:
16296     case TEMPLATE_TEMPLATE_PARM:
16297     case BOUND_TEMPLATE_TEMPLATE_PARM:
16298       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
16299       if (tparm == error_mark_node)
16300         return unify_invalid (explain_p);
16301
16302       if (TEMPLATE_TYPE_LEVEL (parm)
16303           != template_decl_level (tparm))
16304         /* The PARM is not one we're trying to unify.  Just check
16305            to see if it matches ARG.  */
16306         {
16307           if (TREE_CODE (arg) == TREE_CODE (parm)
16308               && same_type_p (parm, arg))
16309             return unify_success (explain_p);
16310           else
16311             return unify_type_mismatch (explain_p, parm, arg);
16312         }
16313       idx = TEMPLATE_TYPE_IDX (parm);
16314       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
16315       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
16316       if (tparm == error_mark_node)
16317         return unify_invalid (explain_p);
16318
16319       /* Check for mixed types and values.  */
16320       if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
16321            && TREE_CODE (tparm) != TYPE_DECL)
16322           || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
16323               && TREE_CODE (tparm) != TEMPLATE_DECL))
16324         gcc_unreachable ();
16325
16326       if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
16327         {
16328           /* ARG must be constructed from a template class or a template
16329              template parameter.  */
16330           if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
16331               && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
16332             return unify_template_deduction_failure (explain_p, parm, arg);
16333
16334           {
16335             tree parmvec = TYPE_TI_ARGS (parm);
16336             tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
16337             tree full_argvec = add_to_template_args (targs, argvec);
16338             tree parm_parms 
16339               = DECL_INNERMOST_TEMPLATE_PARMS
16340                   (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (parm));
16341             int i, len;
16342             int parm_variadic_p = 0;
16343
16344             /* The resolution to DR150 makes clear that default
16345                arguments for an N-argument may not be used to bind T
16346                to a template template parameter with fewer than N
16347                parameters.  It is not safe to permit the binding of
16348                default arguments as an extension, as that may change
16349                the meaning of a conforming program.  Consider:
16350
16351                   struct Dense { static const unsigned int dim = 1; };
16352
16353                   template <template <typename> class View,
16354                             typename Block>
16355                   void operator+(float, View<Block> const&);
16356
16357                   template <typename Block,
16358                             unsigned int Dim = Block::dim>
16359                   struct Lvalue_proxy { operator float() const; };
16360
16361                   void
16362                   test_1d (void) {
16363                     Lvalue_proxy<Dense> p;
16364                     float b;
16365                     b + p;
16366                   }
16367
16368               Here, if Lvalue_proxy is permitted to bind to View, then
16369               the global operator+ will be used; if they are not, the
16370               Lvalue_proxy will be converted to float.  */
16371             if (coerce_template_parms (parm_parms,
16372                                        full_argvec,
16373                                        TYPE_TI_TEMPLATE (parm),
16374                                        (explain_p
16375                                         ? tf_warning_or_error
16376                                         : tf_none),
16377                                        /*require_all_args=*/true,
16378                                        /*use_default_args=*/false)
16379                 == error_mark_node)
16380               return 1;
16381
16382             /* Deduce arguments T, i from TT<T> or TT<i>.
16383                We check each element of PARMVEC and ARGVEC individually
16384                rather than the whole TREE_VEC since they can have
16385                different number of elements.  */
16386
16387             parmvec = expand_template_argument_pack (parmvec);
16388             argvec = expand_template_argument_pack (argvec);
16389
16390             len = TREE_VEC_LENGTH (parmvec);
16391
16392             /* Check if the parameters end in a pack, making them
16393                variadic.  */
16394             if (len > 0
16395                 && PACK_EXPANSION_P (TREE_VEC_ELT (parmvec, len - 1)))
16396               parm_variadic_p = 1;
16397             
16398             if (TREE_VEC_LENGTH (argvec) < len - parm_variadic_p)
16399               return unify_too_few_arguments (explain_p,
16400                                               TREE_VEC_LENGTH (argvec), len);
16401
16402              for (i = 0; i < len - parm_variadic_p; ++i)
16403               {
16404                 RECUR_AND_CHECK_FAILURE (tparms, targs,
16405                                          TREE_VEC_ELT (parmvec, i),
16406                                          TREE_VEC_ELT (argvec, i),
16407                                          UNIFY_ALLOW_NONE, explain_p);
16408               }
16409
16410             if (parm_variadic_p
16411                 && unify_pack_expansion (tparms, targs,
16412                                          parmvec, argvec,
16413                                          DEDUCE_EXACT,
16414                                          /*subr=*/true, explain_p))
16415               return 1;
16416           }
16417           arg = TYPE_TI_TEMPLATE (arg);
16418
16419           /* Fall through to deduce template name.  */
16420         }
16421
16422       if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
16423           || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
16424         {
16425           /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>.  */
16426
16427           /* Simple cases: Value already set, does match or doesn't.  */
16428           if (targ != NULL_TREE && template_args_equal (targ, arg))
16429             return unify_success (explain_p);
16430           else if (targ)
16431             return unify_inconsistency (explain_p, parm, targ, arg);
16432         }
16433       else
16434         {
16435           /* If PARM is `const T' and ARG is only `int', we don't have
16436              a match unless we are allowing additional qualification.
16437              If ARG is `const int' and PARM is just `T' that's OK;
16438              that binds `const int' to `T'.  */
16439           if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
16440                                          arg, parm))
16441             return unify_cv_qual_mismatch (explain_p, parm, arg);
16442
16443           /* Consider the case where ARG is `const volatile int' and
16444              PARM is `const T'.  Then, T should be `volatile int'.  */
16445           arg = cp_build_qualified_type_real
16446             (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
16447           if (arg == error_mark_node)
16448             return unify_invalid (explain_p);
16449
16450           /* Simple cases: Value already set, does match or doesn't.  */
16451           if (targ != NULL_TREE && same_type_p (targ, arg))
16452             return unify_success (explain_p);
16453           else if (targ)
16454             return unify_inconsistency (explain_p, parm, targ, arg);
16455
16456           /* Make sure that ARG is not a variable-sized array.  (Note
16457              that were talking about variable-sized arrays (like
16458              `int[n]'), rather than arrays of unknown size (like
16459              `int[]').)  We'll get very confused by such a type since
16460              the bound of the array is not constant, and therefore
16461              not mangleable.  Besides, such types are not allowed in
16462              ISO C++, so we can do as we please here.  We do allow
16463              them for 'auto' deduction, since that isn't ABI-exposed.  */
16464           if (!is_auto (parm) && variably_modified_type_p (arg, NULL_TREE))
16465             return unify_vla_arg (explain_p, arg);
16466
16467           /* Strip typedefs as in convert_template_argument.  */
16468           arg = canonicalize_type_argument (arg, tf_none);
16469         }
16470
16471       /* If ARG is a parameter pack or an expansion, we cannot unify
16472          against it unless PARM is also a parameter pack.  */
16473       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
16474           && !template_parameter_pack_p (parm))
16475         return unify_parameter_pack_mismatch (explain_p, parm, arg);
16476
16477       /* If the argument deduction results is a METHOD_TYPE,
16478          then there is a problem.
16479          METHOD_TYPE doesn't map to any real C++ type the result of
16480          the deduction can not be of that type.  */
16481       if (TREE_CODE (arg) == METHOD_TYPE)
16482         return unify_method_type_error (explain_p, arg);
16483
16484       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
16485       return unify_success (explain_p);
16486
16487     case TEMPLATE_PARM_INDEX:
16488       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
16489       if (tparm == error_mark_node)
16490         return unify_invalid (explain_p);
16491
16492       if (TEMPLATE_PARM_LEVEL (parm)
16493           != template_decl_level (tparm))
16494         {
16495           /* The PARM is not one we're trying to unify.  Just check
16496              to see if it matches ARG.  */
16497           int result = !(TREE_CODE (arg) == TREE_CODE (parm)
16498                          && cp_tree_equal (parm, arg));
16499           if (result)
16500             unify_expression_unequal (explain_p, parm, arg);
16501           return result;
16502         }
16503
16504       idx = TEMPLATE_PARM_IDX (parm);
16505       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
16506
16507       if (targ)
16508         {
16509           int x = !cp_tree_equal (targ, arg);
16510           if (x)
16511             unify_inconsistency (explain_p, parm, targ, arg);
16512           return x;
16513         }
16514
16515       /* [temp.deduct.type] If, in the declaration of a function template
16516          with a non-type template-parameter, the non-type
16517          template-parameter is used in an expression in the function
16518          parameter-list and, if the corresponding template-argument is
16519          deduced, the template-argument type shall match the type of the
16520          template-parameter exactly, except that a template-argument
16521          deduced from an array bound may be of any integral type.
16522          The non-type parameter might use already deduced type parameters.  */
16523       tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
16524       if (!TREE_TYPE (arg))
16525         /* Template-parameter dependent expression.  Just accept it for now.
16526            It will later be processed in convert_template_argument.  */
16527         ;
16528       else if (same_type_p (TREE_TYPE (arg), tparm))
16529         /* OK */;
16530       else if ((strict & UNIFY_ALLOW_INTEGER)
16531                && (TREE_CODE (tparm) == INTEGER_TYPE
16532                    || TREE_CODE (tparm) == BOOLEAN_TYPE))
16533         /* Convert the ARG to the type of PARM; the deduced non-type
16534            template argument must exactly match the types of the
16535            corresponding parameter.  */
16536         arg = fold (build_nop (tparm, arg));
16537       else if (uses_template_parms (tparm))
16538         /* We haven't deduced the type of this parameter yet.  Try again
16539            later.  */
16540         return unify_success (explain_p);
16541       else
16542         return unify_type_mismatch (explain_p, tparm, arg);
16543
16544       /* If ARG is a parameter pack or an expansion, we cannot unify
16545          against it unless PARM is also a parameter pack.  */
16546       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
16547           && !TEMPLATE_PARM_PARAMETER_PACK (parm))
16548         return unify_parameter_pack_mismatch (explain_p, parm, arg);
16549
16550       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
16551       return unify_success (explain_p);
16552
16553     case PTRMEM_CST:
16554      {
16555         /* A pointer-to-member constant can be unified only with
16556          another constant.  */
16557       if (TREE_CODE (arg) != PTRMEM_CST)
16558         return unify_ptrmem_cst_mismatch (explain_p, parm, arg);
16559
16560       /* Just unify the class member. It would be useless (and possibly
16561          wrong, depending on the strict flags) to unify also
16562          PTRMEM_CST_CLASS, because we want to be sure that both parm and
16563          arg refer to the same variable, even if through different
16564          classes. For instance:
16565
16566          struct A { int x; };
16567          struct B : A { };
16568
16569          Unification of &A::x and &B::x must succeed.  */
16570       return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
16571                     PTRMEM_CST_MEMBER (arg), strict, explain_p);
16572      }
16573
16574     case POINTER_TYPE:
16575       {
16576         if (TREE_CODE (arg) != POINTER_TYPE)
16577           return unify_type_mismatch (explain_p, parm, arg);
16578
16579         /* [temp.deduct.call]
16580
16581            A can be another pointer or pointer to member type that can
16582            be converted to the deduced A via a qualification
16583            conversion (_conv.qual_).
16584
16585            We pass down STRICT here rather than UNIFY_ALLOW_NONE.
16586            This will allow for additional cv-qualification of the
16587            pointed-to types if appropriate.  */
16588
16589         if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
16590           /* The derived-to-base conversion only persists through one
16591              level of pointers.  */
16592           strict |= (strict_in & UNIFY_ALLOW_DERIVED);
16593
16594         return unify (tparms, targs, TREE_TYPE (parm),
16595                       TREE_TYPE (arg), strict, explain_p);
16596       }
16597
16598     case REFERENCE_TYPE:
16599       if (TREE_CODE (arg) != REFERENCE_TYPE)
16600         return unify_type_mismatch (explain_p, parm, arg);
16601       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
16602                     strict & UNIFY_ALLOW_MORE_CV_QUAL, explain_p);
16603
16604     case ARRAY_TYPE:
16605       if (TREE_CODE (arg) != ARRAY_TYPE)
16606         return unify_type_mismatch (explain_p, parm, arg);
16607       if ((TYPE_DOMAIN (parm) == NULL_TREE)
16608           != (TYPE_DOMAIN (arg) == NULL_TREE))
16609         return unify_type_mismatch (explain_p, parm, arg);
16610       if (TYPE_DOMAIN (parm) != NULL_TREE)
16611         {
16612           tree parm_max;
16613           tree arg_max;
16614           bool parm_cst;
16615           bool arg_cst;
16616
16617           /* Our representation of array types uses "N - 1" as the
16618              TYPE_MAX_VALUE for an array with "N" elements, if "N" is
16619              not an integer constant.  We cannot unify arbitrarily
16620              complex expressions, so we eliminate the MINUS_EXPRs
16621              here.  */
16622           parm_max = TYPE_MAX_VALUE (TYPE_DOMAIN (parm));
16623           parm_cst = TREE_CODE (parm_max) == INTEGER_CST;
16624           if (!parm_cst)
16625             {
16626               gcc_assert (TREE_CODE (parm_max) == MINUS_EXPR);
16627               parm_max = TREE_OPERAND (parm_max, 0);
16628             }
16629           arg_max = TYPE_MAX_VALUE (TYPE_DOMAIN (arg));
16630           arg_cst = TREE_CODE (arg_max) == INTEGER_CST;
16631           if (!arg_cst)
16632             {
16633               /* The ARG_MAX may not be a simple MINUS_EXPR, if we are
16634                  trying to unify the type of a variable with the type
16635                  of a template parameter.  For example:
16636
16637                    template <unsigned int N>
16638                    void f (char (&) [N]);
16639                    int g(); 
16640                    void h(int i) {
16641                      char a[g(i)];
16642                      f(a); 
16643                    }
16644
16645                 Here, the type of the ARG will be "int [g(i)]", and
16646                 may be a SAVE_EXPR, etc.  */
16647               if (TREE_CODE (arg_max) != MINUS_EXPR)
16648                 return unify_vla_arg (explain_p, arg);
16649               arg_max = TREE_OPERAND (arg_max, 0);
16650             }
16651
16652           /* If only one of the bounds used a MINUS_EXPR, compensate
16653              by adding one to the other bound.  */
16654           if (parm_cst && !arg_cst)
16655             parm_max = fold_build2_loc (input_location, PLUS_EXPR,
16656                                     integer_type_node,
16657                                     parm_max,
16658                                     integer_one_node);
16659           else if (arg_cst && !parm_cst)
16660             arg_max = fold_build2_loc (input_location, PLUS_EXPR,
16661                                    integer_type_node,
16662                                    arg_max,
16663                                    integer_one_node);
16664
16665           RECUR_AND_CHECK_FAILURE (tparms, targs, parm_max, arg_max,
16666                                    UNIFY_ALLOW_INTEGER, explain_p);
16667         }
16668       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
16669                     strict & UNIFY_ALLOW_MORE_CV_QUAL, explain_p);
16670
16671     case REAL_TYPE:
16672     case COMPLEX_TYPE:
16673     case VECTOR_TYPE:
16674     case INTEGER_TYPE:
16675     case BOOLEAN_TYPE:
16676     case ENUMERAL_TYPE:
16677     case VOID_TYPE:
16678     case NULLPTR_TYPE:
16679       if (TREE_CODE (arg) != TREE_CODE (parm))
16680         return unify_type_mismatch (explain_p, parm, arg);
16681
16682       /* We have already checked cv-qualification at the top of the
16683          function.  */
16684       if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
16685         return unify_type_mismatch (explain_p, parm, arg);
16686
16687       /* As far as unification is concerned, this wins.  Later checks
16688          will invalidate it if necessary.  */
16689       return unify_success (explain_p);
16690
16691       /* Types INTEGER_CST and MINUS_EXPR can come from array bounds.  */
16692       /* Type INTEGER_CST can come from ordinary constant template args.  */
16693     case INTEGER_CST:
16694       while (TREE_CODE (arg) == NOP_EXPR)
16695         arg = TREE_OPERAND (arg, 0);
16696
16697       if (TREE_CODE (arg) != INTEGER_CST)
16698         return unify_template_argument_mismatch (explain_p, parm, arg);
16699       return (tree_int_cst_equal (parm, arg)
16700               ? unify_success (explain_p)
16701               : unify_template_argument_mismatch (explain_p, parm, arg));
16702
16703     case TREE_VEC:
16704       {
16705         int i, len, argslen;
16706         int parm_variadic_p = 0;
16707
16708         if (TREE_CODE (arg) != TREE_VEC)
16709           return unify_template_argument_mismatch (explain_p, parm, arg);
16710
16711         len = TREE_VEC_LENGTH (parm);
16712         argslen = TREE_VEC_LENGTH (arg);
16713
16714         /* Check for pack expansions in the parameters.  */
16715         for (i = 0; i < len; ++i)
16716           {
16717             if (PACK_EXPANSION_P (TREE_VEC_ELT (parm, i)))
16718               {
16719                 if (i == len - 1)
16720                   /* We can unify against something with a trailing
16721                      parameter pack.  */
16722                   parm_variadic_p = 1;
16723                 else
16724                   /* [temp.deduct.type]/9: If the template argument list of
16725                      P contains a pack expansion that is not the last
16726                      template argument, the entire template argument list
16727                      is a non-deduced context.  */
16728                   return unify_success (explain_p);
16729               }
16730           }
16731
16732         /* If we don't have enough arguments to satisfy the parameters
16733            (not counting the pack expression at the end), or we have
16734            too many arguments for a parameter list that doesn't end in
16735            a pack expression, we can't unify.  */
16736         if (parm_variadic_p
16737             ? argslen < len - parm_variadic_p
16738             : argslen != len)
16739           return unify_arity (explain_p, TREE_VEC_LENGTH (arg), len);
16740
16741         /* Unify all of the parameters that precede the (optional)
16742            pack expression.  */
16743         for (i = 0; i < len - parm_variadic_p; ++i)
16744           {
16745             RECUR_AND_CHECK_FAILURE (tparms, targs,
16746                                      TREE_VEC_ELT (parm, i),
16747                                      TREE_VEC_ELT (arg, i),
16748                                      UNIFY_ALLOW_NONE, explain_p);
16749           }
16750         if (parm_variadic_p)
16751           return unify_pack_expansion (tparms, targs, parm, arg,
16752                                        DEDUCE_EXACT,
16753                                        /*subr=*/true, explain_p);
16754         return unify_success (explain_p);
16755       }
16756
16757     case RECORD_TYPE:
16758     case UNION_TYPE:
16759       if (TREE_CODE (arg) != TREE_CODE (parm))
16760         return unify_type_mismatch (explain_p, parm, arg);
16761
16762       if (TYPE_PTRMEMFUNC_P (parm))
16763         {
16764           if (!TYPE_PTRMEMFUNC_P (arg))
16765             return unify_type_mismatch (explain_p, parm, arg);
16766
16767           return unify (tparms, targs,
16768                         TYPE_PTRMEMFUNC_FN_TYPE (parm),
16769                         TYPE_PTRMEMFUNC_FN_TYPE (arg),
16770                         strict, explain_p);
16771         }
16772
16773       if (CLASSTYPE_TEMPLATE_INFO (parm))
16774         {
16775           tree t = NULL_TREE;
16776
16777           if (strict_in & UNIFY_ALLOW_DERIVED)
16778             {
16779               /* First, we try to unify the PARM and ARG directly.  */
16780               t = try_class_unification (tparms, targs,
16781                                          parm, arg, explain_p);
16782
16783               if (!t)
16784                 {
16785                   /* Fallback to the special case allowed in
16786                      [temp.deduct.call]:
16787
16788                        If P is a class, and P has the form
16789                        template-id, then A can be a derived class of
16790                        the deduced A.  Likewise, if P is a pointer to
16791                        a class of the form template-id, A can be a
16792                        pointer to a derived class pointed to by the
16793                        deduced A.  */
16794                   enum template_base_result r;
16795                   r = get_template_base (tparms, targs, parm, arg,
16796                                          explain_p, &t);
16797
16798                   if (!t)
16799                     return unify_no_common_base (explain_p, r, parm, arg);
16800                 }
16801             }
16802           else if (CLASSTYPE_TEMPLATE_INFO (arg)
16803                    && (CLASSTYPE_TI_TEMPLATE (parm)
16804                        == CLASSTYPE_TI_TEMPLATE (arg)))
16805             /* Perhaps PARM is something like S<U> and ARG is S<int>.
16806                Then, we should unify `int' and `U'.  */
16807             t = arg;
16808           else
16809             /* There's no chance of unification succeeding.  */
16810             return unify_type_mismatch (explain_p, parm, arg);
16811
16812           return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
16813                         CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE, explain_p);
16814         }
16815       else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
16816         return unify_type_mismatch (explain_p, parm, arg);
16817       return unify_success (explain_p);
16818
16819     case METHOD_TYPE:
16820     case FUNCTION_TYPE:
16821       {
16822         unsigned int nargs;
16823         tree *args;
16824         tree a;
16825         unsigned int i;
16826
16827         if (TREE_CODE (arg) != TREE_CODE (parm))
16828           return unify_type_mismatch (explain_p, parm, arg);
16829
16830         /* CV qualifications for methods can never be deduced, they must
16831            match exactly.  We need to check them explicitly here,
16832            because type_unification_real treats them as any other
16833            cv-qualified parameter.  */
16834         if (TREE_CODE (parm) == METHOD_TYPE
16835             && (!check_cv_quals_for_unify
16836                 (UNIFY_ALLOW_NONE,
16837                  class_of_this_parm (arg),
16838                  class_of_this_parm (parm))))
16839           return unify_cv_qual_mismatch (explain_p, parm, arg);
16840
16841         RECUR_AND_CHECK_FAILURE (tparms, targs, TREE_TYPE (parm),
16842                                  TREE_TYPE (arg), UNIFY_ALLOW_NONE, explain_p);
16843
16844         nargs = list_length (TYPE_ARG_TYPES (arg));
16845         args = XALLOCAVEC (tree, nargs);
16846         for (a = TYPE_ARG_TYPES (arg), i = 0;
16847              a != NULL_TREE && a != void_list_node;
16848              a = TREE_CHAIN (a), ++i)
16849           args[i] = TREE_VALUE (a);
16850         nargs = i;
16851
16852         return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
16853                                       args, nargs, 1, DEDUCE_EXACT,
16854                                       LOOKUP_NORMAL, explain_p);
16855       }
16856
16857     case OFFSET_TYPE:
16858       /* Unify a pointer to member with a pointer to member function, which
16859          deduces the type of the member as a function type. */
16860       if (TYPE_PTRMEMFUNC_P (arg))
16861         {
16862           tree method_type;
16863           tree fntype;
16864
16865           /* Check top-level cv qualifiers */
16866           if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
16867             return unify_cv_qual_mismatch (explain_p, parm, arg);
16868
16869           RECUR_AND_CHECK_FAILURE (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
16870                                    TYPE_PTRMEMFUNC_OBJECT_TYPE (arg),
16871                                    UNIFY_ALLOW_NONE, explain_p);
16872
16873           /* Determine the type of the function we are unifying against. */
16874           method_type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (arg));
16875           fntype =
16876             build_function_type (TREE_TYPE (method_type),
16877                                  TREE_CHAIN (TYPE_ARG_TYPES (method_type)));
16878
16879           /* Extract the cv-qualifiers of the member function from the
16880              implicit object parameter and place them on the function
16881              type to be restored later. */
16882           fntype = apply_memfn_quals (fntype, type_memfn_quals (method_type));
16883           return unify (tparms, targs, TREE_TYPE (parm), fntype, strict, explain_p);
16884         }
16885
16886       if (TREE_CODE (arg) != OFFSET_TYPE)
16887         return unify_type_mismatch (explain_p, parm, arg);
16888       RECUR_AND_CHECK_FAILURE (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
16889                                TYPE_OFFSET_BASETYPE (arg),
16890                                UNIFY_ALLOW_NONE, explain_p);
16891       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
16892                     strict, explain_p);
16893
16894     case CONST_DECL:
16895       if (DECL_TEMPLATE_PARM_P (parm))
16896         return unify (tparms, targs, DECL_INITIAL (parm), arg, strict, explain_p);
16897       if (arg != integral_constant_value (parm))
16898         return unify_template_argument_mismatch (explain_p, parm, arg);
16899       return unify_success (explain_p);
16900
16901     case FIELD_DECL:
16902     case TEMPLATE_DECL:
16903       /* Matched cases are handled by the ARG == PARM test above.  */
16904       return unify_template_argument_mismatch (explain_p, parm, arg);
16905
16906     case VAR_DECL:
16907       /* A non-type template parameter that is a variable should be a
16908          an integral constant, in which case, it whould have been
16909          folded into its (constant) value. So we should not be getting
16910          a variable here.  */
16911       gcc_unreachable ();
16912
16913     case TYPE_ARGUMENT_PACK:
16914     case NONTYPE_ARGUMENT_PACK:
16915       return unify (tparms, targs, ARGUMENT_PACK_ARGS (parm),
16916                     ARGUMENT_PACK_ARGS (arg), strict, explain_p);
16917
16918     case TYPEOF_TYPE:
16919     case DECLTYPE_TYPE:
16920     case UNDERLYING_TYPE:
16921       /* Cannot deduce anything from TYPEOF_TYPE, DECLTYPE_TYPE,
16922          or UNDERLYING_TYPE nodes.  */
16923       return unify_success (explain_p);
16924
16925     case ERROR_MARK:
16926       /* Unification fails if we hit an error node.  */
16927       return unify_invalid (explain_p);
16928
16929     default:
16930       /* An unresolved overload is a nondeduced context.  */
16931       if (is_overloaded_fn (parm) || type_unknown_p (parm))
16932         return unify_success (explain_p);
16933       gcc_assert (EXPR_P (parm));
16934
16935       /* We must be looking at an expression.  This can happen with
16936          something like:
16937
16938            template <int I>
16939            void foo(S<I>, S<I + 2>);
16940
16941          This is a "nondeduced context":
16942
16943            [deduct.type]
16944
16945            The nondeduced contexts are:
16946
16947            --A type that is a template-id in which one or more of
16948              the template-arguments is an expression that references
16949              a template-parameter.
16950
16951          In these cases, we assume deduction succeeded, but don't
16952          actually infer any unifications.  */
16953
16954       if (!uses_template_parms (parm)
16955           && !template_args_equal (parm, arg))
16956         return unify_expression_unequal (explain_p, parm, arg);
16957       else
16958         return unify_success (explain_p);
16959     }
16960 }
16961 #undef RECUR_AND_CHECK_FAILURE
16962 \f
16963 /* Note that DECL can be defined in this translation unit, if
16964    required.  */
16965
16966 static void
16967 mark_definable (tree decl)
16968 {
16969   tree clone;
16970   DECL_NOT_REALLY_EXTERN (decl) = 1;
16971   FOR_EACH_CLONE (clone, decl)
16972     DECL_NOT_REALLY_EXTERN (clone) = 1;
16973 }
16974
16975 /* Called if RESULT is explicitly instantiated, or is a member of an
16976    explicitly instantiated class.  */
16977
16978 void
16979 mark_decl_instantiated (tree result, int extern_p)
16980 {
16981   SET_DECL_EXPLICIT_INSTANTIATION (result);
16982
16983   /* If this entity has already been written out, it's too late to
16984      make any modifications.  */
16985   if (TREE_ASM_WRITTEN (result))
16986     return;
16987
16988   if (TREE_CODE (result) != FUNCTION_DECL)
16989     /* The TREE_PUBLIC flag for function declarations will have been
16990        set correctly by tsubst.  */
16991     TREE_PUBLIC (result) = 1;
16992
16993   /* This might have been set by an earlier implicit instantiation.  */
16994   DECL_COMDAT (result) = 0;
16995
16996   if (extern_p)
16997     DECL_NOT_REALLY_EXTERN (result) = 0;
16998   else
16999     {
17000       mark_definable (result);
17001       /* Always make artificials weak.  */
17002       if (DECL_ARTIFICIAL (result) && flag_weak)
17003         comdat_linkage (result);
17004       /* For WIN32 we also want to put explicit instantiations in
17005          linkonce sections.  */
17006       else if (TREE_PUBLIC (result))
17007         maybe_make_one_only (result);
17008     }
17009
17010   /* If EXTERN_P, then this function will not be emitted -- unless
17011      followed by an explicit instantiation, at which point its linkage
17012      will be adjusted.  If !EXTERN_P, then this function will be
17013      emitted here.  In neither circumstance do we want
17014      import_export_decl to adjust the linkage.  */
17015   DECL_INTERFACE_KNOWN (result) = 1;
17016 }
17017
17018 /* Subroutine of more_specialized_fn: check whether TARGS is missing any
17019    important template arguments.  If any are missing, we check whether
17020    they're important by using error_mark_node for substituting into any
17021    args that were used for partial ordering (the ones between ARGS and END)
17022    and seeing if it bubbles up.  */
17023
17024 static bool
17025 check_undeduced_parms (tree targs, tree args, tree end)
17026 {
17027   bool found = false;
17028   int i;
17029   for (i = TREE_VEC_LENGTH (targs) - 1; i >= 0; --i)
17030     if (TREE_VEC_ELT (targs, i) == NULL_TREE)
17031       {
17032         found = true;
17033         TREE_VEC_ELT (targs, i) = error_mark_node;
17034       }
17035   if (found)
17036     {
17037       for (; args != end; args = TREE_CHAIN (args))
17038         {
17039           tree substed = tsubst (TREE_VALUE (args), targs, tf_none, NULL_TREE);
17040           if (substed == error_mark_node)
17041             return true;
17042         }
17043     }
17044   return false;
17045 }
17046
17047 /* Given two function templates PAT1 and PAT2, return:
17048
17049    1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
17050    -1 if PAT2 is more specialized than PAT1.
17051    0 if neither is more specialized.
17052
17053    LEN indicates the number of parameters we should consider
17054    (defaulted parameters should not be considered).
17055
17056    The 1998 std underspecified function template partial ordering, and
17057    DR214 addresses the issue.  We take pairs of arguments, one from
17058    each of the templates, and deduce them against each other.  One of
17059    the templates will be more specialized if all the *other*
17060    template's arguments deduce against its arguments and at least one
17061    of its arguments *does* *not* deduce against the other template's
17062    corresponding argument.  Deduction is done as for class templates.
17063    The arguments used in deduction have reference and top level cv
17064    qualifiers removed.  Iff both arguments were originally reference
17065    types *and* deduction succeeds in both directions, the template
17066    with the more cv-qualified argument wins for that pairing (if
17067    neither is more cv-qualified, they both are equal).  Unlike regular
17068    deduction, after all the arguments have been deduced in this way,
17069    we do *not* verify the deduced template argument values can be
17070    substituted into non-deduced contexts.
17071
17072    The logic can be a bit confusing here, because we look at deduce1 and
17073    targs1 to see if pat2 is at least as specialized, and vice versa; if we
17074    can find template arguments for pat1 to make arg1 look like arg2, that
17075    means that arg2 is at least as specialized as arg1.  */
17076
17077 int
17078 more_specialized_fn (tree pat1, tree pat2, int len)
17079 {
17080   tree decl1 = DECL_TEMPLATE_RESULT (pat1);
17081   tree decl2 = DECL_TEMPLATE_RESULT (pat2);
17082   tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
17083   tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
17084   tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
17085   tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
17086   tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
17087   tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
17088   tree origs1, origs2;
17089   bool lose1 = false;
17090   bool lose2 = false;
17091
17092   /* Remove the this parameter from non-static member functions.  If
17093      one is a non-static member function and the other is not a static
17094      member function, remove the first parameter from that function
17095      also.  This situation occurs for operator functions where we
17096      locate both a member function (with this pointer) and non-member
17097      operator (with explicit first operand).  */
17098   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
17099     {
17100       len--; /* LEN is the number of significant arguments for DECL1 */
17101       args1 = TREE_CHAIN (args1);
17102       if (!DECL_STATIC_FUNCTION_P (decl2))
17103         args2 = TREE_CHAIN (args2);
17104     }
17105   else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
17106     {
17107       args2 = TREE_CHAIN (args2);
17108       if (!DECL_STATIC_FUNCTION_P (decl1))
17109         {
17110           len--;
17111           args1 = TREE_CHAIN (args1);
17112         }
17113     }
17114
17115   /* If only one is a conversion operator, they are unordered.  */
17116   if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
17117     return 0;
17118
17119   /* Consider the return type for a conversion function */
17120   if (DECL_CONV_FN_P (decl1))
17121     {
17122       args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
17123       args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
17124       len++;
17125     }
17126
17127   processing_template_decl++;
17128
17129   origs1 = args1;
17130   origs2 = args2;
17131
17132   while (len--
17133          /* Stop when an ellipsis is seen.  */
17134          && args1 != NULL_TREE && args2 != NULL_TREE)
17135     {
17136       tree arg1 = TREE_VALUE (args1);
17137       tree arg2 = TREE_VALUE (args2);
17138       int deduce1, deduce2;
17139       int quals1 = -1;
17140       int quals2 = -1;
17141
17142       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
17143           && TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
17144         {
17145           /* When both arguments are pack expansions, we need only
17146              unify the patterns themselves.  */
17147           arg1 = PACK_EXPANSION_PATTERN (arg1);
17148           arg2 = PACK_EXPANSION_PATTERN (arg2);
17149
17150           /* This is the last comparison we need to do.  */
17151           len = 0;
17152         }
17153
17154       if (TREE_CODE (arg1) == REFERENCE_TYPE)
17155         {
17156           arg1 = TREE_TYPE (arg1);
17157           quals1 = cp_type_quals (arg1);
17158         }
17159
17160       if (TREE_CODE (arg2) == REFERENCE_TYPE)
17161         {
17162           arg2 = TREE_TYPE (arg2);
17163           quals2 = cp_type_quals (arg2);
17164         }
17165
17166       if ((quals1 < 0) != (quals2 < 0))
17167         {
17168           /* Only of the args is a reference, see if we should apply
17169              array/function pointer decay to it.  This is not part of
17170              DR214, but is, IMHO, consistent with the deduction rules
17171              for the function call itself, and with our earlier
17172              implementation of the underspecified partial ordering
17173              rules.  (nathan).  */
17174           if (quals1 >= 0)
17175             {
17176               switch (TREE_CODE (arg1))
17177                 {
17178                 case ARRAY_TYPE:
17179                   arg1 = TREE_TYPE (arg1);
17180                   /* FALLTHROUGH. */
17181                 case FUNCTION_TYPE:
17182                   arg1 = build_pointer_type (arg1);
17183                   break;
17184
17185                 default:
17186                   break;
17187                 }
17188             }
17189           else
17190             {
17191               switch (TREE_CODE (arg2))
17192                 {
17193                 case ARRAY_TYPE:
17194                   arg2 = TREE_TYPE (arg2);
17195                   /* FALLTHROUGH. */
17196                 case FUNCTION_TYPE:
17197                   arg2 = build_pointer_type (arg2);
17198                   break;
17199
17200                 default:
17201                   break;
17202                 }
17203             }
17204         }
17205
17206       arg1 = TYPE_MAIN_VARIANT (arg1);
17207       arg2 = TYPE_MAIN_VARIANT (arg2);
17208
17209       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION)
17210         {
17211           int i, len2 = list_length (args2);
17212           tree parmvec = make_tree_vec (1);
17213           tree argvec = make_tree_vec (len2);
17214           tree ta = args2;
17215
17216           /* Setup the parameter vector, which contains only ARG1.  */
17217           TREE_VEC_ELT (parmvec, 0) = arg1;
17218
17219           /* Setup the argument vector, which contains the remaining
17220              arguments.  */
17221           for (i = 0; i < len2; i++, ta = TREE_CHAIN (ta))
17222             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
17223
17224           deduce1 = (unify_pack_expansion (tparms1, targs1, parmvec,
17225                                            argvec, DEDUCE_EXACT,
17226                                            /*subr=*/true, /*explain_p=*/false)
17227                      == 0);
17228
17229           /* We cannot deduce in the other direction, because ARG1 is
17230              a pack expansion but ARG2 is not.  */
17231           deduce2 = 0;
17232         }
17233       else if (TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
17234         {
17235           int i, len1 = list_length (args1);
17236           tree parmvec = make_tree_vec (1);
17237           tree argvec = make_tree_vec (len1);
17238           tree ta = args1;
17239
17240           /* Setup the parameter vector, which contains only ARG1.  */
17241           TREE_VEC_ELT (parmvec, 0) = arg2;
17242
17243           /* Setup the argument vector, which contains the remaining
17244              arguments.  */
17245           for (i = 0; i < len1; i++, ta = TREE_CHAIN (ta))
17246             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
17247
17248           deduce2 = (unify_pack_expansion (tparms2, targs2, parmvec,
17249                                            argvec, DEDUCE_EXACT,
17250                                            /*subr=*/true, /*explain_p=*/false)
17251                      == 0);
17252
17253           /* We cannot deduce in the other direction, because ARG2 is
17254              a pack expansion but ARG1 is not.*/
17255           deduce1 = 0;
17256         }
17257
17258       else
17259         {
17260           /* The normal case, where neither argument is a pack
17261              expansion.  */
17262           deduce1 = (unify (tparms1, targs1, arg1, arg2,
17263                             UNIFY_ALLOW_NONE, /*explain_p=*/false)
17264                      == 0);
17265           deduce2 = (unify (tparms2, targs2, arg2, arg1,
17266                             UNIFY_ALLOW_NONE, /*explain_p=*/false)
17267                      == 0);
17268         }
17269
17270       /* If we couldn't deduce arguments for tparms1 to make arg1 match
17271          arg2, then arg2 is not as specialized as arg1.  */
17272       if (!deduce1)
17273         lose2 = true;
17274       if (!deduce2)
17275         lose1 = true;
17276
17277       /* "If, for a given type, deduction succeeds in both directions
17278          (i.e., the types are identical after the transformations above)
17279          and if the type from the argument template is more cv-qualified
17280          than the type from the parameter template (as described above)
17281          that type is considered to be more specialized than the other. If
17282          neither type is more cv-qualified than the other then neither type
17283          is more specialized than the other."  */
17284
17285       if (deduce1 && deduce2
17286           && quals1 != quals2 && quals1 >= 0 && quals2 >= 0)
17287         {
17288           if ((quals1 & quals2) == quals2)
17289             lose2 = true;
17290           if ((quals1 & quals2) == quals1)
17291             lose1 = true;
17292         }
17293
17294       if (lose1 && lose2)
17295         /* We've failed to deduce something in either direction.
17296            These must be unordered.  */
17297         break;
17298
17299       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
17300           || TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
17301         /* We have already processed all of the arguments in our
17302            handing of the pack expansion type.  */
17303         len = 0;
17304
17305       args1 = TREE_CHAIN (args1);
17306       args2 = TREE_CHAIN (args2);
17307     }
17308
17309   /* "In most cases, all template parameters must have values in order for
17310      deduction to succeed, but for partial ordering purposes a template
17311      parameter may remain without a value provided it is not used in the
17312      types being used for partial ordering."
17313
17314      Thus, if we are missing any of the targs1 we need to substitute into
17315      origs1, then pat2 is not as specialized as pat1.  This can happen when
17316      there is a nondeduced context.  */
17317   if (!lose2 && check_undeduced_parms (targs1, origs1, args1))
17318     lose2 = true;
17319   if (!lose1 && check_undeduced_parms (targs2, origs2, args2))
17320     lose1 = true;
17321
17322   processing_template_decl--;
17323
17324   /* All things being equal, if the next argument is a pack expansion
17325      for one function but not for the other, prefer the
17326      non-variadic function.  FIXME this is bogus; see c++/41958.  */
17327   if (lose1 == lose2
17328       && args1 && TREE_VALUE (args1)
17329       && args2 && TREE_VALUE (args2))
17330     {
17331       lose1 = TREE_CODE (TREE_VALUE (args1)) == TYPE_PACK_EXPANSION;
17332       lose2 = TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION;
17333     }
17334
17335   if (lose1 == lose2)
17336     return 0;
17337   else if (!lose1)
17338     return 1;
17339   else
17340     return -1;
17341 }
17342
17343 /* Determine which of two partial specializations is more specialized.
17344
17345    PAT1 is a TREE_LIST whose TREE_TYPE is the _TYPE node corresponding
17346    to the first partial specialization.  The TREE_VALUE is the
17347    innermost set of template parameters for the partial
17348    specialization.  PAT2 is similar, but for the second template.
17349
17350    Return 1 if the first partial specialization is more specialized;
17351    -1 if the second is more specialized; 0 if neither is more
17352    specialized.
17353
17354    See [temp.class.order] for information about determining which of
17355    two templates is more specialized.  */
17356
17357 static int
17358 more_specialized_class (tree pat1, tree pat2)
17359 {
17360   tree targs;
17361   tree tmpl1, tmpl2;
17362   int winner = 0;
17363   bool any_deductions = false;
17364
17365   tmpl1 = TREE_TYPE (pat1);
17366   tmpl2 = TREE_TYPE (pat2);
17367
17368   /* Just like what happens for functions, if we are ordering between
17369      different class template specializations, we may encounter dependent
17370      types in the arguments, and we need our dependency check functions
17371      to behave correctly.  */
17372   ++processing_template_decl;
17373   targs = get_class_bindings (TREE_VALUE (pat1),
17374                               CLASSTYPE_TI_ARGS (tmpl1),
17375                               CLASSTYPE_TI_ARGS (tmpl2));
17376   if (targs)
17377     {
17378       --winner;
17379       any_deductions = true;
17380     }
17381
17382   targs = get_class_bindings (TREE_VALUE (pat2),
17383                               CLASSTYPE_TI_ARGS (tmpl2),
17384                               CLASSTYPE_TI_ARGS (tmpl1));
17385   if (targs)
17386     {
17387       ++winner;
17388       any_deductions = true;
17389     }
17390   --processing_template_decl;
17391
17392   /* In the case of a tie where at least one of the class templates
17393      has a parameter pack at the end, the template with the most
17394      non-packed parameters wins.  */
17395   if (winner == 0
17396       && any_deductions
17397       && (template_args_variadic_p (TREE_PURPOSE (pat1))
17398           || template_args_variadic_p (TREE_PURPOSE (pat2))))
17399     {
17400       tree args1 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat1));
17401       tree args2 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat2));
17402       int len1 = TREE_VEC_LENGTH (args1);
17403       int len2 = TREE_VEC_LENGTH (args2);
17404
17405       /* We don't count the pack expansion at the end.  */
17406       if (template_args_variadic_p (TREE_PURPOSE (pat1)))
17407         --len1;
17408       if (template_args_variadic_p (TREE_PURPOSE (pat2)))
17409         --len2;
17410
17411       if (len1 > len2)
17412         return 1;
17413       else if (len1 < len2)
17414         return -1;
17415     }
17416
17417   return winner;
17418 }
17419
17420 /* Return the template arguments that will produce the function signature
17421    DECL from the function template FN, with the explicit template
17422    arguments EXPLICIT_ARGS.  If CHECK_RETTYPE is true, the return type must
17423    also match.  Return NULL_TREE if no satisfactory arguments could be
17424    found.  */
17425
17426 static tree
17427 get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
17428 {
17429   int ntparms = DECL_NTPARMS (fn);
17430   tree targs = make_tree_vec (ntparms);
17431   tree decl_type;
17432   tree decl_arg_types;
17433   tree *args;
17434   unsigned int nargs, ix;
17435   tree arg;
17436
17437   /* Substitute the explicit template arguments into the type of DECL.
17438      The call to fn_type_unification will handle substitution into the
17439      FN.  */
17440   decl_type = TREE_TYPE (decl);
17441   if (explicit_args && uses_template_parms (decl_type))
17442     {
17443       tree tmpl;
17444       tree converted_args;
17445
17446       if (DECL_TEMPLATE_INFO (decl))
17447         tmpl = DECL_TI_TEMPLATE (decl);
17448       else
17449         /* We can get here for some invalid specializations.  */
17450         return NULL_TREE;
17451
17452       converted_args
17453         = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
17454                                  explicit_args, NULL_TREE,
17455                                  tf_none,
17456                                  /*require_all_args=*/false,
17457                                  /*use_default_args=*/false);
17458       if (converted_args == error_mark_node)
17459         return NULL_TREE;
17460
17461       decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE);
17462       if (decl_type == error_mark_node)
17463         return NULL_TREE;
17464     }
17465
17466   /* Never do unification on the 'this' parameter.  */
17467   decl_arg_types = skip_artificial_parms_for (decl, 
17468                                               TYPE_ARG_TYPES (decl_type));
17469
17470   nargs = list_length (decl_arg_types);
17471   args = XALLOCAVEC (tree, nargs);
17472   for (arg = decl_arg_types, ix = 0;
17473        arg != NULL_TREE && arg != void_list_node;
17474        arg = TREE_CHAIN (arg), ++ix)
17475     args[ix] = TREE_VALUE (arg);
17476
17477   if (fn_type_unification (fn, explicit_args, targs,
17478                            args, ix,
17479                            (check_rettype || DECL_CONV_FN_P (fn)
17480                             ? TREE_TYPE (decl_type) : NULL_TREE),
17481                            DEDUCE_EXACT, LOOKUP_NORMAL, /*explain_p=*/false))
17482     return NULL_TREE;
17483
17484   return targs;
17485 }
17486
17487 /* Return the innermost template arguments that, when applied to a
17488    template specialization whose innermost template parameters are
17489    TPARMS, and whose specialization arguments are SPEC_ARGS, yield the
17490    ARGS.
17491
17492    For example, suppose we have:
17493
17494      template <class T, class U> struct S {};
17495      template <class T> struct S<T*, int> {};
17496
17497    Then, suppose we want to get `S<double*, int>'.  The TPARMS will be
17498    {T}, the SPEC_ARGS will be {T*, int} and the ARGS will be {double*,
17499    int}.  The resulting vector will be {double}, indicating that `T'
17500    is bound to `double'.  */
17501
17502 static tree
17503 get_class_bindings (tree tparms, tree spec_args, tree args)
17504 {
17505   int i, ntparms = TREE_VEC_LENGTH (tparms);
17506   tree deduced_args;
17507   tree innermost_deduced_args;
17508
17509   innermost_deduced_args = make_tree_vec (ntparms);
17510   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
17511     {
17512       deduced_args = copy_node (args);
17513       SET_TMPL_ARGS_LEVEL (deduced_args,
17514                            TMPL_ARGS_DEPTH (deduced_args),
17515                            innermost_deduced_args);
17516     }
17517   else
17518     deduced_args = innermost_deduced_args;
17519
17520   if (unify (tparms, deduced_args,
17521              INNERMOST_TEMPLATE_ARGS (spec_args),
17522              INNERMOST_TEMPLATE_ARGS (args),
17523              UNIFY_ALLOW_NONE, /*explain_p=*/false))
17524     return NULL_TREE;
17525
17526   for (i =  0; i < ntparms; ++i)
17527     if (! TREE_VEC_ELT (innermost_deduced_args, i))
17528       return NULL_TREE;
17529
17530   /* Verify that nondeduced template arguments agree with the type
17531      obtained from argument deduction.
17532
17533      For example:
17534
17535        struct A { typedef int X; };
17536        template <class T, class U> struct C {};
17537        template <class T> struct C<T, typename T::X> {};
17538
17539      Then with the instantiation `C<A, int>', we can deduce that
17540      `T' is `A' but unify () does not check whether `typename T::X'
17541      is `int'.  */
17542   spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
17543   if (spec_args == error_mark_node
17544       /* We only need to check the innermost arguments; the other
17545          arguments will always agree.  */
17546       || !comp_template_args (INNERMOST_TEMPLATE_ARGS (spec_args),
17547                               INNERMOST_TEMPLATE_ARGS (args)))
17548     return NULL_TREE;
17549
17550   /* Now that we have bindings for all of the template arguments,
17551      ensure that the arguments deduced for the template template
17552      parameters have compatible template parameter lists.  See the use
17553      of template_template_parm_bindings_ok_p in fn_type_unification
17554      for more information.  */
17555   if (!template_template_parm_bindings_ok_p (tparms, deduced_args))
17556     return NULL_TREE;
17557
17558   return deduced_args;
17559 }
17560
17561 /* TEMPLATES is a TREE_LIST.  Each TREE_VALUE is a TEMPLATE_DECL.
17562    Return the TREE_LIST node with the most specialized template, if
17563    any.  If there is no most specialized template, the error_mark_node
17564    is returned.
17565
17566    Note that this function does not look at, or modify, the
17567    TREE_PURPOSE or TREE_TYPE of any of the nodes.  Since the node
17568    returned is one of the elements of INSTANTIATIONS, callers may
17569    store information in the TREE_PURPOSE or TREE_TYPE of the nodes,
17570    and retrieve it from the value returned.  */
17571
17572 tree
17573 most_specialized_instantiation (tree templates)
17574 {
17575   tree fn, champ;
17576
17577   ++processing_template_decl;
17578
17579   champ = templates;
17580   for (fn = TREE_CHAIN (templates); fn; fn = TREE_CHAIN (fn))
17581     {
17582       int fate = 0;
17583
17584       if (get_bindings (TREE_VALUE (champ),
17585                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
17586                         NULL_TREE, /*check_ret=*/true))
17587         fate--;
17588
17589       if (get_bindings (TREE_VALUE (fn),
17590                         DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
17591                         NULL_TREE, /*check_ret=*/true))
17592         fate++;
17593
17594       if (fate == -1)
17595         champ = fn;
17596       else if (!fate)
17597         {
17598           /* Equally specialized, move to next function.  If there
17599              is no next function, nothing's most specialized.  */
17600           fn = TREE_CHAIN (fn);
17601           champ = fn;
17602           if (!fn)
17603             break;
17604         }
17605     }
17606
17607   if (champ)
17608     /* Now verify that champ is better than everything earlier in the
17609        instantiation list.  */
17610     for (fn = templates; fn != champ; fn = TREE_CHAIN (fn))
17611       if (get_bindings (TREE_VALUE (champ),
17612                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
17613                         NULL_TREE, /*check_ret=*/true)
17614           || !get_bindings (TREE_VALUE (fn),
17615                             DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
17616                             NULL_TREE, /*check_ret=*/true))
17617         {
17618           champ = NULL_TREE;
17619           break;
17620         }
17621
17622   processing_template_decl--;
17623
17624   if (!champ)
17625     return error_mark_node;
17626
17627   return champ;
17628 }
17629
17630 /* If DECL is a specialization of some template, return the most
17631    general such template.  Otherwise, returns NULL_TREE.
17632
17633    For example, given:
17634
17635      template <class T> struct S { template <class U> void f(U); };
17636
17637    if TMPL is `template <class U> void S<int>::f(U)' this will return
17638    the full template.  This function will not trace past partial
17639    specializations, however.  For example, given in addition:
17640
17641      template <class T> struct S<T*> { template <class U> void f(U); };
17642
17643    if TMPL is `template <class U> void S<int*>::f(U)' this will return
17644    `template <class T> template <class U> S<T*>::f(U)'.  */
17645
17646 tree
17647 most_general_template (tree decl)
17648 {
17649   /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
17650      an immediate specialization.  */
17651   if (TREE_CODE (decl) == FUNCTION_DECL)
17652     {
17653       if (DECL_TEMPLATE_INFO (decl)) {
17654         decl = DECL_TI_TEMPLATE (decl);
17655
17656         /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
17657            template friend.  */
17658         if (TREE_CODE (decl) != TEMPLATE_DECL)
17659           return NULL_TREE;
17660       } else
17661         return NULL_TREE;
17662     }
17663
17664   /* Look for more and more general templates.  */
17665   while (DECL_TEMPLATE_INFO (decl))
17666     {
17667       /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
17668          (See cp-tree.h for details.)  */
17669       if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
17670         break;
17671
17672       if (CLASS_TYPE_P (TREE_TYPE (decl))
17673           && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
17674         break;
17675
17676       /* Stop if we run into an explicitly specialized class template.  */
17677       if (!DECL_NAMESPACE_SCOPE_P (decl)
17678           && DECL_CONTEXT (decl)
17679           && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
17680         break;
17681
17682       decl = DECL_TI_TEMPLATE (decl);
17683     }
17684
17685   return decl;
17686 }
17687
17688 /* Return the most specialized of the class template partial
17689    specializations of TMPL which can produce TYPE, a specialization of
17690    TMPL.  The value returned is actually a TREE_LIST; the TREE_TYPE is
17691    a _TYPE node corresponding to the partial specialization, while the
17692    TREE_PURPOSE is the set of template arguments that must be
17693    substituted into the TREE_TYPE in order to generate TYPE.
17694
17695    If the choice of partial specialization is ambiguous, a diagnostic
17696    is issued, and the error_mark_node is returned.  If there are no
17697    partial specializations of TMPL matching TYPE, then NULL_TREE is
17698    returned.  */
17699
17700 static tree
17701 most_specialized_class (tree type, tree tmpl, tsubst_flags_t complain)
17702 {
17703   tree list = NULL_TREE;
17704   tree t;
17705   tree champ;
17706   int fate;
17707   bool ambiguous_p;
17708   tree args;
17709   tree outer_args = NULL_TREE;
17710
17711   tmpl = most_general_template (tmpl);
17712   args = CLASSTYPE_TI_ARGS (type);
17713
17714   /* For determining which partial specialization to use, only the
17715      innermost args are interesting.  */
17716   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
17717     {
17718       outer_args = strip_innermost_template_args (args, 1);
17719       args = INNERMOST_TEMPLATE_ARGS (args);
17720     }
17721
17722   for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
17723     {
17724       tree partial_spec_args;
17725       tree spec_args;
17726       tree parms = TREE_VALUE (t);
17727
17728       partial_spec_args = CLASSTYPE_TI_ARGS (TREE_TYPE (t));
17729
17730       ++processing_template_decl;
17731
17732       if (outer_args)
17733         {
17734           int i;
17735
17736           /* Discard the outer levels of args, and then substitute in the
17737              template args from the enclosing class.  */
17738           partial_spec_args = INNERMOST_TEMPLATE_ARGS (partial_spec_args);
17739           partial_spec_args = tsubst_template_args
17740             (partial_spec_args, outer_args, tf_none, NULL_TREE);
17741
17742           /* PARMS already refers to just the innermost parms, but the
17743              template parms in partial_spec_args had their levels lowered
17744              by tsubst, so we need to do the same for the parm list.  We
17745              can't just tsubst the TREE_VEC itself, as tsubst wants to
17746              treat a TREE_VEC as an argument vector.  */
17747           parms = copy_node (parms);
17748           for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
17749             TREE_VEC_ELT (parms, i) =
17750               tsubst (TREE_VEC_ELT (parms, i), outer_args, tf_none, NULL_TREE);
17751
17752         }
17753
17754       partial_spec_args =
17755           coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
17756                                  add_to_template_args (outer_args,
17757                                                        partial_spec_args),
17758                                  tmpl, tf_none,
17759                                  /*require_all_args=*/true,
17760                                  /*use_default_args=*/true);
17761
17762       --processing_template_decl;
17763
17764       if (partial_spec_args == error_mark_node)
17765         return error_mark_node;
17766
17767       spec_args = get_class_bindings (parms,
17768                                       partial_spec_args,
17769                                       args);
17770       if (spec_args)
17771         {
17772           if (outer_args)
17773             spec_args = add_to_template_args (outer_args, spec_args);
17774           list = tree_cons (spec_args, TREE_VALUE (t), list);
17775           TREE_TYPE (list) = TREE_TYPE (t);
17776         }
17777     }
17778
17779   if (! list)
17780     return NULL_TREE;
17781
17782   ambiguous_p = false;
17783   t = list;
17784   champ = t;
17785   t = TREE_CHAIN (t);
17786   for (; t; t = TREE_CHAIN (t))
17787     {
17788       fate = more_specialized_class (champ, t);
17789       if (fate == 1)
17790         ;
17791       else
17792         {
17793           if (fate == 0)
17794             {
17795               t = TREE_CHAIN (t);
17796               if (! t)
17797                 {
17798                   ambiguous_p = true;
17799                   break;
17800                 }
17801             }
17802           champ = t;
17803         }
17804     }
17805
17806   if (!ambiguous_p)
17807     for (t = list; t && t != champ; t = TREE_CHAIN (t))
17808       {
17809         fate = more_specialized_class (champ, t);
17810         if (fate != 1)
17811           {
17812             ambiguous_p = true;
17813             break;
17814           }
17815       }
17816
17817   if (ambiguous_p)
17818     {
17819       const char *str;
17820       char *spaces = NULL;
17821       if (!(complain & tf_error))
17822         return error_mark_node;
17823       error ("ambiguous class template instantiation for %q#T", type);
17824       str = ngettext ("candidate is:", "candidates are:", list_length (list));
17825       for (t = list; t; t = TREE_CHAIN (t))
17826         {
17827           error ("%s %+#T", spaces ? spaces : str, TREE_TYPE (t));
17828           spaces = spaces ? spaces : get_spaces (str);
17829         }
17830       free (spaces);
17831       return error_mark_node;
17832     }
17833
17834   return champ;
17835 }
17836
17837 /* Explicitly instantiate DECL.  */
17838
17839 void
17840 do_decl_instantiation (tree decl, tree storage)
17841 {
17842   tree result = NULL_TREE;
17843   int extern_p = 0;
17844
17845   if (!decl || decl == error_mark_node)
17846     /* An error occurred, for which grokdeclarator has already issued
17847        an appropriate message.  */
17848     return;
17849   else if (! DECL_LANG_SPECIFIC (decl))
17850     {
17851       error ("explicit instantiation of non-template %q#D", decl);
17852       return;
17853     }
17854   else if (TREE_CODE (decl) == VAR_DECL)
17855     {
17856       /* There is an asymmetry here in the way VAR_DECLs and
17857          FUNCTION_DECLs are handled by grokdeclarator.  In the case of
17858          the latter, the DECL we get back will be marked as a
17859          template instantiation, and the appropriate
17860          DECL_TEMPLATE_INFO will be set up.  This does not happen for
17861          VAR_DECLs so we do the lookup here.  Probably, grokdeclarator
17862          should handle VAR_DECLs as it currently handles
17863          FUNCTION_DECLs.  */
17864       if (!DECL_CLASS_SCOPE_P (decl))
17865         {
17866           error ("%qD is not a static data member of a class template", decl);
17867           return;
17868         }
17869       result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
17870       if (!result || TREE_CODE (result) != VAR_DECL)
17871         {
17872           error ("no matching template for %qD found", decl);
17873           return;
17874         }
17875       if (!same_type_p (TREE_TYPE (result), TREE_TYPE (decl)))
17876         {
17877           error ("type %qT for explicit instantiation %qD does not match "
17878                  "declared type %qT", TREE_TYPE (result), decl,
17879                  TREE_TYPE (decl));
17880           return;
17881         }
17882     }
17883   else if (TREE_CODE (decl) != FUNCTION_DECL)
17884     {
17885       error ("explicit instantiation of %q#D", decl);
17886       return;
17887     }
17888   else
17889     result = decl;
17890
17891   /* Check for various error cases.  Note that if the explicit
17892      instantiation is valid the RESULT will currently be marked as an
17893      *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
17894      until we get here.  */
17895
17896   if (DECL_TEMPLATE_SPECIALIZATION (result))
17897     {
17898       /* DR 259 [temp.spec].
17899
17900          Both an explicit instantiation and a declaration of an explicit
17901          specialization shall not appear in a program unless the explicit
17902          instantiation follows a declaration of the explicit specialization.
17903
17904          For a given set of template parameters, if an explicit
17905          instantiation of a template appears after a declaration of an
17906          explicit specialization for that template, the explicit
17907          instantiation has no effect.  */
17908       return;
17909     }
17910   else if (DECL_EXPLICIT_INSTANTIATION (result))
17911     {
17912       /* [temp.spec]
17913
17914          No program shall explicitly instantiate any template more
17915          than once.
17916
17917          We check DECL_NOT_REALLY_EXTERN so as not to complain when
17918          the first instantiation was `extern' and the second is not,
17919          and EXTERN_P for the opposite case.  */
17920       if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
17921         permerror (input_location, "duplicate explicit instantiation of %q#D", result);
17922       /* If an "extern" explicit instantiation follows an ordinary
17923          explicit instantiation, the template is instantiated.  */
17924       if (extern_p)
17925         return;
17926     }
17927   else if (!DECL_IMPLICIT_INSTANTIATION (result))
17928     {
17929       error ("no matching template for %qD found", result);
17930       return;
17931     }
17932   else if (!DECL_TEMPLATE_INFO (result))
17933     {
17934       permerror (input_location, "explicit instantiation of non-template %q#D", result);
17935       return;
17936     }
17937
17938   if (storage == NULL_TREE)
17939     ;
17940   else if (storage == ridpointers[(int) RID_EXTERN])
17941     {
17942       if (!in_system_header && (cxx_dialect == cxx98))
17943         pedwarn (input_location, OPT_pedantic, 
17944                  "ISO C++ 1998 forbids the use of %<extern%> on explicit "
17945                  "instantiations");
17946       extern_p = 1;
17947     }
17948   else
17949     error ("storage class %qD applied to template instantiation", storage);
17950
17951   check_explicit_instantiation_namespace (result);
17952   mark_decl_instantiated (result, extern_p);
17953   if (! extern_p)
17954     instantiate_decl (result, /*defer_ok=*/1,
17955                       /*expl_inst_class_mem_p=*/false);
17956 }
17957
17958 static void
17959 mark_class_instantiated (tree t, int extern_p)
17960 {
17961   SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
17962   SET_CLASSTYPE_INTERFACE_KNOWN (t);
17963   CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
17964   TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
17965   if (! extern_p)
17966     {
17967       CLASSTYPE_DEBUG_REQUESTED (t) = 1;
17968       rest_of_type_compilation (t, 1);
17969     }
17970 }
17971
17972 /* Called from do_type_instantiation through binding_table_foreach to
17973    do recursive instantiation for the type bound in ENTRY.  */
17974 static void
17975 bt_instantiate_type_proc (binding_entry entry, void *data)
17976 {
17977   tree storage = *(tree *) data;
17978
17979   if (MAYBE_CLASS_TYPE_P (entry->type)
17980       && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
17981     do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
17982 }
17983
17984 /* Called from do_type_instantiation to instantiate a member
17985    (a member function or a static member variable) of an
17986    explicitly instantiated class template.  */
17987 static void
17988 instantiate_class_member (tree decl, int extern_p)
17989 {
17990   mark_decl_instantiated (decl, extern_p);
17991   if (! extern_p)
17992     instantiate_decl (decl, /*defer_ok=*/1,
17993                       /*expl_inst_class_mem_p=*/true);
17994 }
17995
17996 /* Perform an explicit instantiation of template class T.  STORAGE, if
17997    non-null, is the RID for extern, inline or static.  COMPLAIN is
17998    nonzero if this is called from the parser, zero if called recursively,
17999    since the standard is unclear (as detailed below).  */
18000
18001 void
18002 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
18003 {
18004   int extern_p = 0;
18005   int nomem_p = 0;
18006   int static_p = 0;
18007   int previous_instantiation_extern_p = 0;
18008
18009   if (TREE_CODE (t) == TYPE_DECL)
18010     t = TREE_TYPE (t);
18011
18012   if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
18013     {
18014       tree tmpl =
18015         (TYPE_TEMPLATE_INFO (t)) ? TYPE_TI_TEMPLATE (t) : NULL;
18016       if (tmpl)
18017         error ("explicit instantiation of non-class template %qD", tmpl);
18018       else
18019         error ("explicit instantiation of non-template type %qT", t);
18020       return;
18021     }
18022
18023   complete_type (t);
18024
18025   if (!COMPLETE_TYPE_P (t))
18026     {
18027       if (complain & tf_error)
18028         error ("explicit instantiation of %q#T before definition of template",
18029                t);
18030       return;
18031     }
18032
18033   if (storage != NULL_TREE)
18034     {
18035       if (!in_system_header)
18036         {
18037           if (storage == ridpointers[(int) RID_EXTERN])
18038             {
18039               if (cxx_dialect == cxx98)
18040                 pedwarn (input_location, OPT_pedantic, 
18041                          "ISO C++ 1998 forbids the use of %<extern%> on "
18042                          "explicit instantiations");
18043             }
18044           else
18045             pedwarn (input_location, OPT_pedantic, 
18046                      "ISO C++ forbids the use of %qE"
18047                      " on explicit instantiations", storage);
18048         }
18049
18050       if (storage == ridpointers[(int) RID_INLINE])
18051         nomem_p = 1;
18052       else if (storage == ridpointers[(int) RID_EXTERN])
18053         extern_p = 1;
18054       else if (storage == ridpointers[(int) RID_STATIC])
18055         static_p = 1;
18056       else
18057         {
18058           error ("storage class %qD applied to template instantiation",
18059                  storage);
18060           extern_p = 0;
18061         }
18062     }
18063
18064   if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
18065     {
18066       /* DR 259 [temp.spec].
18067
18068          Both an explicit instantiation and a declaration of an explicit
18069          specialization shall not appear in a program unless the explicit
18070          instantiation follows a declaration of the explicit specialization.
18071
18072          For a given set of template parameters, if an explicit
18073          instantiation of a template appears after a declaration of an
18074          explicit specialization for that template, the explicit
18075          instantiation has no effect.  */
18076       return;
18077     }
18078   else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
18079     {
18080       /* [temp.spec]
18081
18082          No program shall explicitly instantiate any template more
18083          than once.
18084
18085          If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
18086          instantiation was `extern'.  If EXTERN_P then the second is.
18087          These cases are OK.  */
18088       previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
18089
18090       if (!previous_instantiation_extern_p && !extern_p
18091           && (complain & tf_error))
18092         permerror (input_location, "duplicate explicit instantiation of %q#T", t);
18093
18094       /* If we've already instantiated the template, just return now.  */
18095       if (!CLASSTYPE_INTERFACE_ONLY (t))
18096         return;
18097     }
18098
18099   check_explicit_instantiation_namespace (TYPE_NAME (t));
18100   mark_class_instantiated (t, extern_p);
18101
18102   if (nomem_p)
18103     return;
18104
18105   {
18106     tree tmp;
18107
18108     /* In contrast to implicit instantiation, where only the
18109        declarations, and not the definitions, of members are
18110        instantiated, we have here:
18111
18112          [temp.explicit]
18113
18114          The explicit instantiation of a class template specialization
18115          implies the instantiation of all of its members not
18116          previously explicitly specialized in the translation unit
18117          containing the explicit instantiation.
18118
18119        Of course, we can't instantiate member template classes, since
18120        we don't have any arguments for them.  Note that the standard
18121        is unclear on whether the instantiation of the members are
18122        *explicit* instantiations or not.  However, the most natural
18123        interpretation is that it should be an explicit instantiation.  */
18124
18125     if (! static_p)
18126       for (tmp = TYPE_METHODS (t); tmp; tmp = DECL_CHAIN (tmp))
18127         if (TREE_CODE (tmp) == FUNCTION_DECL
18128             && DECL_TEMPLATE_INSTANTIATION (tmp))
18129           instantiate_class_member (tmp, extern_p);
18130
18131     for (tmp = TYPE_FIELDS (t); tmp; tmp = DECL_CHAIN (tmp))
18132       if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
18133         instantiate_class_member (tmp, extern_p);
18134
18135     if (CLASSTYPE_NESTED_UTDS (t))
18136       binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
18137                              bt_instantiate_type_proc, &storage);
18138   }
18139 }
18140
18141 /* Given a function DECL, which is a specialization of TMPL, modify
18142    DECL to be a re-instantiation of TMPL with the same template
18143    arguments.  TMPL should be the template into which tsubst'ing
18144    should occur for DECL, not the most general template.
18145
18146    One reason for doing this is a scenario like this:
18147
18148      template <class T>
18149      void f(const T&, int i);
18150
18151      void g() { f(3, 7); }
18152
18153      template <class T>
18154      void f(const T& t, const int i) { }
18155
18156    Note that when the template is first instantiated, with
18157    instantiate_template, the resulting DECL will have no name for the
18158    first parameter, and the wrong type for the second.  So, when we go
18159    to instantiate the DECL, we regenerate it.  */
18160
18161 static void
18162 regenerate_decl_from_template (tree decl, tree tmpl)
18163 {
18164   /* The arguments used to instantiate DECL, from the most general
18165      template.  */
18166   tree args;
18167   tree code_pattern;
18168
18169   args = DECL_TI_ARGS (decl);
18170   code_pattern = DECL_TEMPLATE_RESULT (tmpl);
18171
18172   /* Make sure that we can see identifiers, and compute access
18173      correctly.  */
18174   push_access_scope (decl);
18175
18176   if (TREE_CODE (decl) == FUNCTION_DECL)
18177     {
18178       tree decl_parm;
18179       tree pattern_parm;
18180       tree specs;
18181       int args_depth;
18182       int parms_depth;
18183
18184       args_depth = TMPL_ARGS_DEPTH (args);
18185       parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
18186       if (args_depth > parms_depth)
18187         args = get_innermost_template_args (args, parms_depth);
18188
18189       specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
18190                                               args, tf_error, NULL_TREE,
18191                                               /*defer_ok*/false);
18192       if (specs && specs != error_mark_node)
18193         TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
18194                                                     specs);
18195
18196       /* Merge parameter declarations.  */
18197       decl_parm = skip_artificial_parms_for (decl,
18198                                              DECL_ARGUMENTS (decl));
18199       pattern_parm
18200         = skip_artificial_parms_for (code_pattern,
18201                                      DECL_ARGUMENTS (code_pattern));
18202       while (decl_parm && !FUNCTION_PARAMETER_PACK_P (pattern_parm))
18203         {
18204           tree parm_type;
18205           tree attributes;
18206           
18207           if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
18208             DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
18209           parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
18210                               NULL_TREE);
18211           parm_type = type_decays_to (parm_type);
18212           if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
18213             TREE_TYPE (decl_parm) = parm_type;
18214           attributes = DECL_ATTRIBUTES (pattern_parm);
18215           if (DECL_ATTRIBUTES (decl_parm) != attributes)
18216             {
18217               DECL_ATTRIBUTES (decl_parm) = attributes;
18218               cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
18219             }
18220           decl_parm = DECL_CHAIN (decl_parm);
18221           pattern_parm = DECL_CHAIN (pattern_parm);
18222         }
18223       /* Merge any parameters that match with the function parameter
18224          pack.  */
18225       if (pattern_parm && FUNCTION_PARAMETER_PACK_P (pattern_parm))
18226         {
18227           int i, len;
18228           tree expanded_types;
18229           /* Expand the TYPE_PACK_EXPANSION that provides the types for
18230              the parameters in this function parameter pack.  */
18231           expanded_types = tsubst_pack_expansion (TREE_TYPE (pattern_parm), 
18232                                                  args, tf_error, NULL_TREE);
18233           len = TREE_VEC_LENGTH (expanded_types);
18234           for (i = 0; i < len; i++)
18235             {
18236               tree parm_type;
18237               tree attributes;
18238           
18239               if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
18240                 /* Rename the parameter to include the index.  */
18241                 DECL_NAME (decl_parm) = 
18242                   make_ith_pack_parameter_name (DECL_NAME (pattern_parm), i);
18243               parm_type = TREE_VEC_ELT (expanded_types, i);
18244               parm_type = type_decays_to (parm_type);
18245               if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
18246                 TREE_TYPE (decl_parm) = parm_type;
18247               attributes = DECL_ATTRIBUTES (pattern_parm);
18248               if (DECL_ATTRIBUTES (decl_parm) != attributes)
18249                 {
18250                   DECL_ATTRIBUTES (decl_parm) = attributes;
18251                   cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
18252                 }
18253               decl_parm = DECL_CHAIN (decl_parm);
18254             }
18255         }
18256       /* Merge additional specifiers from the CODE_PATTERN.  */
18257       if (DECL_DECLARED_INLINE_P (code_pattern)
18258           && !DECL_DECLARED_INLINE_P (decl))
18259         DECL_DECLARED_INLINE_P (decl) = 1;
18260     }
18261   else if (TREE_CODE (decl) == VAR_DECL)
18262     {
18263       DECL_INITIAL (decl) =
18264         tsubst_expr (DECL_INITIAL (code_pattern), args,
18265                      tf_error, DECL_TI_TEMPLATE (decl),
18266                      /*integral_constant_expression_p=*/false);
18267       if (VAR_HAD_UNKNOWN_BOUND (decl))
18268         TREE_TYPE (decl) = tsubst (TREE_TYPE (code_pattern), args,
18269                                    tf_error, DECL_TI_TEMPLATE (decl));
18270     }
18271   else
18272     gcc_unreachable ();
18273
18274   pop_access_scope (decl);
18275 }
18276
18277 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
18278    substituted to get DECL.  */
18279
18280 tree
18281 template_for_substitution (tree decl)
18282 {
18283   tree tmpl = DECL_TI_TEMPLATE (decl);
18284
18285   /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
18286      for the instantiation.  This is not always the most general
18287      template.  Consider, for example:
18288
18289         template <class T>
18290         struct S { template <class U> void f();
18291                    template <> void f<int>(); };
18292
18293      and an instantiation of S<double>::f<int>.  We want TD to be the
18294      specialization S<T>::f<int>, not the more general S<T>::f<U>.  */
18295   while (/* An instantiation cannot have a definition, so we need a
18296             more general template.  */
18297          DECL_TEMPLATE_INSTANTIATION (tmpl)
18298            /* We must also deal with friend templates.  Given:
18299
18300                 template <class T> struct S {
18301                   template <class U> friend void f() {};
18302                 };
18303
18304               S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
18305               so far as the language is concerned, but that's still
18306               where we get the pattern for the instantiation from.  On
18307               other hand, if the definition comes outside the class, say:
18308
18309                 template <class T> struct S {
18310                   template <class U> friend void f();
18311                 };
18312                 template <class U> friend void f() {}
18313
18314               we don't need to look any further.  That's what the check for
18315               DECL_INITIAL is for.  */
18316           || (TREE_CODE (decl) == FUNCTION_DECL
18317               && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
18318               && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
18319     {
18320       /* The present template, TD, should not be a definition.  If it
18321          were a definition, we should be using it!  Note that we
18322          cannot restructure the loop to just keep going until we find
18323          a template with a definition, since that might go too far if
18324          a specialization was declared, but not defined.  */
18325       gcc_assert (TREE_CODE (decl) != VAR_DECL
18326                   || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl)));
18327
18328       /* Fetch the more general template.  */
18329       tmpl = DECL_TI_TEMPLATE (tmpl);
18330     }
18331
18332   return tmpl;
18333 }
18334
18335 /* Returns true if we need to instantiate this template instance even if we
18336    know we aren't going to emit it..  */
18337
18338 bool
18339 always_instantiate_p (tree decl)
18340 {
18341   /* We always instantiate inline functions so that we can inline them.  An
18342      explicit instantiation declaration prohibits implicit instantiation of
18343      non-inline functions.  With high levels of optimization, we would
18344      normally inline non-inline functions -- but we're not allowed to do
18345      that for "extern template" functions.  Therefore, we check
18346      DECL_DECLARED_INLINE_P, rather than possibly_inlined_p.  */
18347   return ((TREE_CODE (decl) == FUNCTION_DECL
18348            && DECL_DECLARED_INLINE_P (decl))
18349           /* And we need to instantiate static data members so that
18350              their initializers are available in integral constant
18351              expressions.  */
18352           || (TREE_CODE (decl) == VAR_DECL
18353               && decl_maybe_constant_var_p (decl)));
18354 }
18355
18356 /* If FN has a noexcept-specifier that hasn't been instantiated yet,
18357    instantiate it now, modifying TREE_TYPE (fn).  */
18358
18359 void
18360 maybe_instantiate_noexcept (tree fn)
18361 {
18362   tree fntype, spec, noex, clone;
18363
18364   if (DECL_CLONED_FUNCTION_P (fn))
18365     fn = DECL_CLONED_FUNCTION (fn);
18366   fntype = TREE_TYPE (fn);
18367   spec = TYPE_RAISES_EXCEPTIONS (fntype);
18368
18369   if (!DEFERRED_NOEXCEPT_SPEC_P (spec))
18370     return;
18371
18372   noex = TREE_PURPOSE (spec);
18373
18374   if (TREE_CODE (noex) == DEFERRED_NOEXCEPT)
18375     {
18376       if (push_tinst_level (fn))
18377         {
18378           push_access_scope (fn);
18379           input_location = DECL_SOURCE_LOCATION (fn);
18380           noex = tsubst_copy_and_build (DEFERRED_NOEXCEPT_PATTERN (noex),
18381                                         DEFERRED_NOEXCEPT_ARGS (noex),
18382                                         tf_warning_or_error, fn,
18383                                         /*function_p=*/false,
18384                                         /*integral_constant_expression_p=*/true);
18385           pop_access_scope (fn);
18386           pop_tinst_level ();
18387           spec = build_noexcept_spec (noex, tf_warning_or_error);
18388           if (spec == error_mark_node)
18389             spec = noexcept_false_spec;
18390         }
18391       else
18392         spec = noexcept_false_spec;
18393     }
18394   else
18395     {
18396       /* This is an implicitly declared function, so NOEX is a list of
18397          other functions to evaluate and merge.  */
18398       tree elt;
18399       spec = noexcept_true_spec;
18400       for (elt = noex; elt; elt = OVL_NEXT (elt))
18401         {
18402           tree fn = OVL_CURRENT (elt);
18403           tree subspec;
18404           maybe_instantiate_noexcept (fn);
18405           subspec = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn));
18406           spec = merge_exception_specifiers (spec, subspec, NULL_TREE);
18407         }
18408     }
18409
18410   TREE_TYPE (fn) = build_exception_variant (fntype, spec);
18411
18412   FOR_EACH_CLONE (clone, fn)
18413     {
18414       if (TREE_TYPE (clone) == fntype)
18415         TREE_TYPE (clone) = TREE_TYPE (fn);
18416       else
18417         TREE_TYPE (clone) = build_exception_variant (TREE_TYPE (clone), spec);
18418     }
18419 }
18420
18421 /* Produce the definition of D, a _DECL generated from a template.  If
18422    DEFER_OK is nonzero, then we don't have to actually do the
18423    instantiation now; we just have to do it sometime.  Normally it is
18424    an error if this is an explicit instantiation but D is undefined.
18425    EXPL_INST_CLASS_MEM_P is true iff D is a member of an
18426    explicitly instantiated class template.  */
18427
18428 tree
18429 instantiate_decl (tree d, int defer_ok,
18430                   bool expl_inst_class_mem_p)
18431 {
18432   tree tmpl = DECL_TI_TEMPLATE (d);
18433   tree gen_args;
18434   tree args;
18435   tree td;
18436   tree code_pattern;
18437   tree spec;
18438   tree gen_tmpl;
18439   bool pattern_defined;
18440   int need_push;
18441   location_t saved_loc = input_location;
18442   bool external_p;
18443
18444   /* This function should only be used to instantiate templates for
18445      functions and static member variables.  */
18446   gcc_assert (TREE_CODE (d) == FUNCTION_DECL
18447               || TREE_CODE (d) == VAR_DECL);
18448
18449   /* Variables are never deferred; if instantiation is required, they
18450      are instantiated right away.  That allows for better code in the
18451      case that an expression refers to the value of the variable --
18452      if the variable has a constant value the referring expression can
18453      take advantage of that fact.  */
18454   if (TREE_CODE (d) == VAR_DECL
18455       || DECL_DECLARED_CONSTEXPR_P (d))
18456     defer_ok = 0;
18457
18458   /* Don't instantiate cloned functions.  Instead, instantiate the
18459      functions they cloned.  */
18460   if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
18461     d = DECL_CLONED_FUNCTION (d);
18462
18463   if (DECL_TEMPLATE_INSTANTIATED (d)
18464       || (TREE_CODE (d) == FUNCTION_DECL
18465           && DECL_DEFAULTED_FN (d) && DECL_INITIAL (d))
18466       || DECL_TEMPLATE_SPECIALIZATION (d))
18467     /* D has already been instantiated or explicitly specialized, so
18468        there's nothing for us to do here.
18469
18470        It might seem reasonable to check whether or not D is an explicit
18471        instantiation, and, if so, stop here.  But when an explicit
18472        instantiation is deferred until the end of the compilation,
18473        DECL_EXPLICIT_INSTANTIATION is set, even though we still need to do
18474        the instantiation.  */
18475     return d;
18476
18477   /* Check to see whether we know that this template will be
18478      instantiated in some other file, as with "extern template"
18479      extension.  */
18480   external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
18481
18482   /* In general, we do not instantiate such templates.  */
18483   if (external_p && !always_instantiate_p (d))
18484     return d;
18485
18486   gen_tmpl = most_general_template (tmpl);
18487   gen_args = DECL_TI_ARGS (d);
18488
18489   if (tmpl != gen_tmpl)
18490     /* We should already have the extra args.  */
18491     gcc_assert (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (gen_tmpl))
18492                 == TMPL_ARGS_DEPTH (gen_args));
18493   /* And what's in the hash table should match D.  */
18494   gcc_assert ((spec = retrieve_specialization (gen_tmpl, gen_args, 0)) == d
18495               || spec == NULL_TREE);
18496
18497   /* This needs to happen before any tsubsting.  */
18498   if (! push_tinst_level (d))
18499     return d;
18500
18501   timevar_push (TV_TEMPLATE_INST);
18502
18503   /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
18504      for the instantiation.  */
18505   td = template_for_substitution (d);
18506   code_pattern = DECL_TEMPLATE_RESULT (td);
18507
18508   /* We should never be trying to instantiate a member of a class
18509      template or partial specialization.  */
18510   gcc_assert (d != code_pattern);
18511
18512   if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
18513       || DECL_TEMPLATE_SPECIALIZATION (td))
18514     /* In the case of a friend template whose definition is provided
18515        outside the class, we may have too many arguments.  Drop the
18516        ones we don't need.  The same is true for specializations.  */
18517     args = get_innermost_template_args
18518       (gen_args, TMPL_PARMS_DEPTH  (DECL_TEMPLATE_PARMS (td)));
18519   else
18520     args = gen_args;
18521
18522   if (TREE_CODE (d) == FUNCTION_DECL)
18523     pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE
18524                        || DECL_DEFAULTED_OUTSIDE_CLASS_P (code_pattern));
18525   else
18526     pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
18527
18528   /* We may be in the middle of deferred access check.  Disable it now.  */
18529   push_deferring_access_checks (dk_no_deferred);
18530
18531   /* Unless an explicit instantiation directive has already determined
18532      the linkage of D, remember that a definition is available for
18533      this entity.  */
18534   if (pattern_defined
18535       && !DECL_INTERFACE_KNOWN (d)
18536       && !DECL_NOT_REALLY_EXTERN (d))
18537     mark_definable (d);
18538
18539   DECL_SOURCE_LOCATION (td) = DECL_SOURCE_LOCATION (code_pattern);
18540   DECL_SOURCE_LOCATION (d) = DECL_SOURCE_LOCATION (code_pattern);
18541   input_location = DECL_SOURCE_LOCATION (d);
18542
18543   /* If D is a member of an explicitly instantiated class template,
18544      and no definition is available, treat it like an implicit
18545      instantiation.  */
18546   if (!pattern_defined && expl_inst_class_mem_p
18547       && DECL_EXPLICIT_INSTANTIATION (d))
18548     {
18549       /* Leave linkage flags alone on instantiations with anonymous
18550          visibility.  */
18551       if (TREE_PUBLIC (d))
18552         {
18553           DECL_NOT_REALLY_EXTERN (d) = 0;
18554           DECL_INTERFACE_KNOWN (d) = 0;
18555         }
18556       SET_DECL_IMPLICIT_INSTANTIATION (d);
18557     }
18558
18559   if (TREE_CODE (d) == FUNCTION_DECL)
18560     maybe_instantiate_noexcept (d);
18561
18562   /* Recheck the substitutions to obtain any warning messages
18563      about ignoring cv qualifiers.  Don't do this for artificial decls,
18564      as it breaks the context-sensitive substitution for lambda op(). */
18565   if (!defer_ok && !DECL_ARTIFICIAL (d))
18566     {
18567       tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
18568       tree type = TREE_TYPE (gen);
18569
18570       /* Make sure that we can see identifiers, and compute access
18571          correctly.  D is already the target FUNCTION_DECL with the
18572          right context.  */
18573       push_access_scope (d);
18574
18575       if (TREE_CODE (gen) == FUNCTION_DECL)
18576         {
18577           tsubst (DECL_ARGUMENTS (gen), gen_args, tf_warning_or_error, d);
18578           tsubst_exception_specification (type, gen_args, tf_warning_or_error,
18579                                           d, /*defer_ok*/true);
18580           /* Don't simply tsubst the function type, as that will give
18581              duplicate warnings about poor parameter qualifications.
18582              The function arguments are the same as the decl_arguments
18583              without the top level cv qualifiers.  */
18584           type = TREE_TYPE (type);
18585         }
18586       tsubst (type, gen_args, tf_warning_or_error, d);
18587
18588       pop_access_scope (d);
18589     }
18590
18591   /* Defer all other templates, unless we have been explicitly
18592      forbidden from doing so.  */
18593   if (/* If there is no definition, we cannot instantiate the
18594          template.  */
18595       ! pattern_defined
18596       /* If it's OK to postpone instantiation, do so.  */
18597       || defer_ok
18598       /* If this is a static data member that will be defined
18599          elsewhere, we don't want to instantiate the entire data
18600          member, but we do want to instantiate the initializer so that
18601          we can substitute that elsewhere.  */
18602       || (external_p && TREE_CODE (d) == VAR_DECL))
18603     {
18604       /* The definition of the static data member is now required so
18605          we must substitute the initializer.  */
18606       if (TREE_CODE (d) == VAR_DECL
18607           && !DECL_INITIAL (d)
18608           && DECL_INITIAL (code_pattern))
18609         {
18610           tree ns;
18611           tree init;
18612           bool const_init = false;
18613
18614           ns = decl_namespace_context (d);
18615           push_nested_namespace (ns);
18616           push_nested_class (DECL_CONTEXT (d));
18617           init = tsubst_expr (DECL_INITIAL (code_pattern),
18618                               args,
18619                               tf_warning_or_error, NULL_TREE,
18620                               /*integral_constant_expression_p=*/false);
18621           /* Make sure the initializer is still constant, in case of
18622              circular dependency (template/instantiate6.C). */
18623           const_init
18624             = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (code_pattern);
18625           cp_finish_decl (d, init, /*init_const_expr_p=*/const_init,
18626                           /*asmspec_tree=*/NULL_TREE,
18627                           LOOKUP_ONLYCONVERTING);
18628           pop_nested_class ();
18629           pop_nested_namespace (ns);
18630         }
18631
18632       /* We restore the source position here because it's used by
18633          add_pending_template.  */
18634       input_location = saved_loc;
18635
18636       if (at_eof && !pattern_defined
18637           && DECL_EXPLICIT_INSTANTIATION (d)
18638           && DECL_NOT_REALLY_EXTERN (d))
18639         /* [temp.explicit]
18640
18641            The definition of a non-exported function template, a
18642            non-exported member function template, or a non-exported
18643            member function or static data member of a class template
18644            shall be present in every translation unit in which it is
18645            explicitly instantiated.  */
18646         permerror (input_location,  "explicit instantiation of %qD "
18647                    "but no definition available", d);
18648
18649       /* If we're in unevaluated context, we just wanted to get the
18650          constant value; this isn't an odr use, so don't queue
18651          a full instantiation.  */
18652       if (cp_unevaluated_operand != 0)
18653         goto out;
18654       /* ??? Historically, we have instantiated inline functions, even
18655          when marked as "extern template".  */
18656       if (!(external_p && TREE_CODE (d) == VAR_DECL))
18657         add_pending_template (d);
18658       goto out;
18659     }
18660   /* Tell the repository that D is available in this translation unit
18661      -- and see if it is supposed to be instantiated here.  */
18662   if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
18663     {
18664       /* In a PCH file, despite the fact that the repository hasn't
18665          requested instantiation in the PCH it is still possible that
18666          an instantiation will be required in a file that includes the
18667          PCH.  */
18668       if (pch_file)
18669         add_pending_template (d);
18670       /* Instantiate inline functions so that the inliner can do its
18671          job, even though we'll not be emitting a copy of this
18672          function.  */
18673       if (!(TREE_CODE (d) == FUNCTION_DECL && possibly_inlined_p (d)))
18674         goto out;
18675     }
18676
18677   need_push = !cfun || !global_bindings_p ();
18678   if (need_push)
18679     push_to_top_level ();
18680
18681   /* Mark D as instantiated so that recursive calls to
18682      instantiate_decl do not try to instantiate it again.  */
18683   DECL_TEMPLATE_INSTANTIATED (d) = 1;
18684
18685   /* Regenerate the declaration in case the template has been modified
18686      by a subsequent redeclaration.  */
18687   regenerate_decl_from_template (d, td);
18688
18689   /* We already set the file and line above.  Reset them now in case
18690      they changed as a result of calling regenerate_decl_from_template.  */
18691   input_location = DECL_SOURCE_LOCATION (d);
18692
18693   if (TREE_CODE (d) == VAR_DECL)
18694     {
18695       tree init;
18696       bool const_init = false;
18697
18698       /* Clear out DECL_RTL; whatever was there before may not be right
18699          since we've reset the type of the declaration.  */
18700       SET_DECL_RTL (d, NULL);
18701       DECL_IN_AGGR_P (d) = 0;
18702
18703       /* The initializer is placed in DECL_INITIAL by
18704          regenerate_decl_from_template so we don't need to
18705          push/pop_access_scope again here.  Pull it out so that
18706          cp_finish_decl can process it.  */
18707       init = DECL_INITIAL (d);
18708       DECL_INITIAL (d) = NULL_TREE;
18709       DECL_INITIALIZED_P (d) = 0;
18710
18711       /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
18712          initializer.  That function will defer actual emission until
18713          we have a chance to determine linkage.  */
18714       DECL_EXTERNAL (d) = 0;
18715
18716       /* Enter the scope of D so that access-checking works correctly.  */
18717       push_nested_class (DECL_CONTEXT (d));
18718       const_init = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (code_pattern);
18719       cp_finish_decl (d, init, const_init, NULL_TREE, 0);
18720       pop_nested_class ();
18721     }
18722   else if (TREE_CODE (d) == FUNCTION_DECL && DECL_DEFAULTED_FN (code_pattern))
18723     synthesize_method (d);
18724   else if (TREE_CODE (d) == FUNCTION_DECL)
18725     {
18726       htab_t saved_local_specializations;
18727       tree subst_decl;
18728       tree tmpl_parm;
18729       tree spec_parm;
18730
18731       /* Save away the current list, in case we are instantiating one
18732          template from within the body of another.  */
18733       saved_local_specializations = local_specializations;
18734
18735       /* Set up the list of local specializations.  */
18736       local_specializations = htab_create (37,
18737                                            hash_local_specialization,
18738                                            eq_local_specializations,
18739                                            NULL);
18740
18741       /* Set up context.  */
18742       start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
18743
18744       /* Create substitution entries for the parameters.  */
18745       subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
18746       tmpl_parm = DECL_ARGUMENTS (subst_decl);
18747       spec_parm = DECL_ARGUMENTS (d);
18748       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
18749         {
18750           register_local_specialization (spec_parm, tmpl_parm);
18751           spec_parm = skip_artificial_parms_for (d, spec_parm);
18752           tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
18753         }
18754       for (; tmpl_parm; tmpl_parm = DECL_CHAIN (tmpl_parm))
18755         {
18756           if (!FUNCTION_PARAMETER_PACK_P (tmpl_parm))
18757             {
18758               register_local_specialization (spec_parm, tmpl_parm);
18759               spec_parm = DECL_CHAIN (spec_parm);
18760             }
18761           else
18762             {
18763               /* Register the (value) argument pack as a specialization of
18764                  TMPL_PARM, then move on.  */
18765               tree argpack = extract_fnparm_pack (tmpl_parm, &spec_parm);
18766               register_local_specialization (argpack, tmpl_parm);
18767             }
18768         }
18769       gcc_assert (!spec_parm);
18770
18771       /* Substitute into the body of the function.  */
18772       tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
18773                    tf_warning_or_error, tmpl,
18774                    /*integral_constant_expression_p=*/false);
18775
18776       /* Set the current input_location to the end of the function
18777          so that finish_function knows where we are.  */
18778       input_location = DECL_STRUCT_FUNCTION (code_pattern)->function_end_locus;
18779
18780       /* We don't need the local specializations any more.  */
18781       htab_delete (local_specializations);
18782       local_specializations = saved_local_specializations;
18783
18784       /* Finish the function.  */
18785       d = finish_function (0);
18786       expand_or_defer_fn (d);
18787     }
18788
18789   /* We're not deferring instantiation any more.  */
18790   TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
18791
18792   if (need_push)
18793     pop_from_top_level ();
18794
18795 out:
18796   input_location = saved_loc;
18797   pop_deferring_access_checks ();
18798   pop_tinst_level ();
18799
18800   timevar_pop (TV_TEMPLATE_INST);
18801
18802   return d;
18803 }
18804
18805 /* Run through the list of templates that we wish we could
18806    instantiate, and instantiate any we can.  RETRIES is the
18807    number of times we retry pending template instantiation.  */
18808
18809 void
18810 instantiate_pending_templates (int retries)
18811 {
18812   int reconsider;
18813   location_t saved_loc = input_location;
18814
18815   /* Instantiating templates may trigger vtable generation.  This in turn
18816      may require further template instantiations.  We place a limit here
18817      to avoid infinite loop.  */
18818   if (pending_templates && retries >= max_tinst_depth)
18819     {
18820       tree decl = pending_templates->tinst->decl;
18821
18822       error ("template instantiation depth exceeds maximum of %d"
18823              " instantiating %q+D, possibly from virtual table generation"
18824              " (use -ftemplate-depth= to increase the maximum)",
18825              max_tinst_depth, decl);
18826       if (TREE_CODE (decl) == FUNCTION_DECL)
18827         /* Pretend that we defined it.  */
18828         DECL_INITIAL (decl) = error_mark_node;
18829       return;
18830     }
18831
18832   do
18833     {
18834       struct pending_template **t = &pending_templates;
18835       struct pending_template *last = NULL;
18836       reconsider = 0;
18837       while (*t)
18838         {
18839           tree instantiation = reopen_tinst_level ((*t)->tinst);
18840           bool complete = false;
18841
18842           if (TYPE_P (instantiation))
18843             {
18844               tree fn;
18845
18846               if (!COMPLETE_TYPE_P (instantiation))
18847                 {
18848                   instantiate_class_template (instantiation);
18849                   if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
18850                     for (fn = TYPE_METHODS (instantiation);
18851                          fn;
18852                          fn = TREE_CHAIN (fn))
18853                       if (! DECL_ARTIFICIAL (fn))
18854                         instantiate_decl (fn,
18855                                           /*defer_ok=*/0,
18856                                           /*expl_inst_class_mem_p=*/false);
18857                   if (COMPLETE_TYPE_P (instantiation))
18858                     reconsider = 1;
18859                 }
18860
18861               complete = COMPLETE_TYPE_P (instantiation);
18862             }
18863           else
18864             {
18865               if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
18866                   && !DECL_TEMPLATE_INSTANTIATED (instantiation))
18867                 {
18868                   instantiation
18869                     = instantiate_decl (instantiation,
18870                                         /*defer_ok=*/0,
18871                                         /*expl_inst_class_mem_p=*/false);
18872                   if (DECL_TEMPLATE_INSTANTIATED (instantiation))
18873                     reconsider = 1;
18874                 }
18875
18876               complete = (DECL_TEMPLATE_SPECIALIZATION (instantiation)
18877                           || DECL_TEMPLATE_INSTANTIATED (instantiation));
18878             }
18879
18880           if (complete)
18881             /* If INSTANTIATION has been instantiated, then we don't
18882                need to consider it again in the future.  */
18883             *t = (*t)->next;
18884           else
18885             {
18886               last = *t;
18887               t = &(*t)->next;
18888             }
18889           tinst_depth = 0;
18890           current_tinst_level = NULL;
18891         }
18892       last_pending_template = last;
18893     }
18894   while (reconsider);
18895
18896   input_location = saved_loc;
18897 }
18898
18899 /* Substitute ARGVEC into T, which is a list of initializers for
18900    either base class or a non-static data member.  The TREE_PURPOSEs
18901    are DECLs, and the TREE_VALUEs are the initializer values.  Used by
18902    instantiate_decl.  */
18903
18904 static tree
18905 tsubst_initializer_list (tree t, tree argvec)
18906 {
18907   tree inits = NULL_TREE;
18908
18909   for (; t; t = TREE_CHAIN (t))
18910     {
18911       tree decl;
18912       tree init;
18913       tree expanded_bases = NULL_TREE;
18914       tree expanded_arguments = NULL_TREE;
18915       int i, len = 1;
18916
18917       if (TREE_CODE (TREE_PURPOSE (t)) == TYPE_PACK_EXPANSION)
18918         {
18919           tree expr;
18920           tree arg;
18921
18922           /* Expand the base class expansion type into separate base
18923              classes.  */
18924           expanded_bases = tsubst_pack_expansion (TREE_PURPOSE (t), argvec,
18925                                                  tf_warning_or_error,
18926                                                  NULL_TREE);
18927           if (expanded_bases == error_mark_node)
18928             continue;
18929           
18930           /* We'll be building separate TREE_LISTs of arguments for
18931              each base.  */
18932           len = TREE_VEC_LENGTH (expanded_bases);
18933           expanded_arguments = make_tree_vec (len);
18934           for (i = 0; i < len; i++)
18935             TREE_VEC_ELT (expanded_arguments, i) = NULL_TREE;
18936
18937           /* Build a dummy EXPR_PACK_EXPANSION that will be used to
18938              expand each argument in the TREE_VALUE of t.  */
18939           expr = make_node (EXPR_PACK_EXPANSION);
18940           PACK_EXPANSION_LOCAL_P (expr) = true;
18941           PACK_EXPANSION_PARAMETER_PACKS (expr) =
18942             PACK_EXPANSION_PARAMETER_PACKS (TREE_PURPOSE (t));
18943
18944           if (TREE_VALUE (t) == void_type_node)
18945             /* VOID_TYPE_NODE is used to indicate
18946                value-initialization.  */
18947             {
18948               for (i = 0; i < len; i++)
18949                 TREE_VEC_ELT (expanded_arguments, i) = void_type_node;
18950             }
18951           else
18952             {
18953               /* Substitute parameter packs into each argument in the
18954                  TREE_LIST.  */
18955               in_base_initializer = 1;
18956               for (arg = TREE_VALUE (t); arg; arg = TREE_CHAIN (arg))
18957                 {
18958                   tree expanded_exprs;
18959
18960                   /* Expand the argument.  */
18961                   SET_PACK_EXPANSION_PATTERN (expr, TREE_VALUE (arg));
18962                   expanded_exprs 
18963                     = tsubst_pack_expansion (expr, argvec,
18964                                              tf_warning_or_error,
18965                                              NULL_TREE);
18966                   if (expanded_exprs == error_mark_node)
18967                     continue;
18968
18969                   /* Prepend each of the expanded expressions to the
18970                      corresponding TREE_LIST in EXPANDED_ARGUMENTS.  */
18971                   for (i = 0; i < len; i++)
18972                     {
18973                       TREE_VEC_ELT (expanded_arguments, i) = 
18974                         tree_cons (NULL_TREE, 
18975                                    TREE_VEC_ELT (expanded_exprs, i),
18976                                    TREE_VEC_ELT (expanded_arguments, i));
18977                     }
18978                 }
18979               in_base_initializer = 0;
18980
18981               /* Reverse all of the TREE_LISTs in EXPANDED_ARGUMENTS,
18982                  since we built them backwards.  */
18983               for (i = 0; i < len; i++)
18984                 {
18985                   TREE_VEC_ELT (expanded_arguments, i) = 
18986                     nreverse (TREE_VEC_ELT (expanded_arguments, i));
18987                 }
18988             }
18989         }
18990
18991       for (i = 0; i < len; ++i)
18992         {
18993           if (expanded_bases)
18994             {
18995               decl = TREE_VEC_ELT (expanded_bases, i);
18996               decl = expand_member_init (decl);
18997               init = TREE_VEC_ELT (expanded_arguments, i);
18998             }
18999           else
19000             {
19001               tree tmp;
19002               decl = tsubst_copy (TREE_PURPOSE (t), argvec, 
19003                                   tf_warning_or_error, NULL_TREE);
19004
19005               decl = expand_member_init (decl);
19006               if (decl && !DECL_P (decl))
19007                 in_base_initializer = 1;
19008
19009               init = TREE_VALUE (t);
19010               tmp = init;
19011               if (init != void_type_node)
19012                 init = tsubst_expr (init, argvec,
19013                                     tf_warning_or_error, NULL_TREE,
19014                                     /*integral_constant_expression_p=*/false);
19015               if (init == NULL_TREE && tmp != NULL_TREE)
19016                 /* If we had an initializer but it instantiated to nothing,
19017                    value-initialize the object.  This will only occur when
19018                    the initializer was a pack expansion where the parameter
19019                    packs used in that expansion were of length zero.  */
19020                 init = void_type_node;
19021               in_base_initializer = 0;
19022             }
19023
19024           if (decl)
19025             {
19026               init = build_tree_list (decl, init);
19027               TREE_CHAIN (init) = inits;
19028               inits = init;
19029             }
19030         }
19031     }
19032   return inits;
19033 }
19034
19035 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL.  */
19036
19037 static void
19038 set_current_access_from_decl (tree decl)
19039 {
19040   if (TREE_PRIVATE (decl))
19041     current_access_specifier = access_private_node;
19042   else if (TREE_PROTECTED (decl))
19043     current_access_specifier = access_protected_node;
19044   else
19045     current_access_specifier = access_public_node;
19046 }
19047
19048 /* Instantiate an enumerated type.  TAG is the template type, NEWTAG
19049    is the instantiation (which should have been created with
19050    start_enum) and ARGS are the template arguments to use.  */
19051
19052 static void
19053 tsubst_enum (tree tag, tree newtag, tree args)
19054 {
19055   tree e;
19056
19057   if (SCOPED_ENUM_P (newtag))
19058     begin_scope (sk_scoped_enum, newtag);
19059
19060   for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
19061     {
19062       tree value;
19063       tree decl;
19064
19065       decl = TREE_VALUE (e);
19066       /* Note that in a template enum, the TREE_VALUE is the
19067          CONST_DECL, not the corresponding INTEGER_CST.  */
19068       value = tsubst_expr (DECL_INITIAL (decl),
19069                            args, tf_warning_or_error, NULL_TREE,
19070                            /*integral_constant_expression_p=*/true);
19071
19072       /* Give this enumeration constant the correct access.  */
19073       set_current_access_from_decl (decl);
19074
19075       /* Actually build the enumerator itself.  */
19076       build_enumerator
19077         (DECL_NAME (decl), value, newtag, DECL_SOURCE_LOCATION (decl));
19078     }
19079
19080   if (SCOPED_ENUM_P (newtag))
19081     finish_scope ();
19082
19083   finish_enum_value_list (newtag);
19084   finish_enum (newtag);
19085
19086   DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
19087     = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
19088 }
19089
19090 /* DECL is a FUNCTION_DECL that is a template specialization.  Return
19091    its type -- but without substituting the innermost set of template
19092    arguments.  So, innermost set of template parameters will appear in
19093    the type.  */
19094
19095 tree
19096 get_mostly_instantiated_function_type (tree decl)
19097 {
19098   tree fn_type;
19099   tree tmpl;
19100   tree targs;
19101   tree tparms;
19102   int parm_depth;
19103
19104   tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
19105   targs = DECL_TI_ARGS (decl);
19106   tparms = DECL_TEMPLATE_PARMS (tmpl);
19107   parm_depth = TMPL_PARMS_DEPTH (tparms);
19108
19109   /* There should be as many levels of arguments as there are levels
19110      of parameters.  */
19111   gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
19112
19113   fn_type = TREE_TYPE (tmpl);
19114
19115   if (parm_depth == 1)
19116     /* No substitution is necessary.  */
19117     ;
19118   else
19119     {
19120       int i;
19121       tree partial_args;
19122
19123       /* Replace the innermost level of the TARGS with NULL_TREEs to
19124          let tsubst know not to substitute for those parameters.  */
19125       partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
19126       for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
19127         SET_TMPL_ARGS_LEVEL (partial_args, i,
19128                              TMPL_ARGS_LEVEL (targs, i));
19129       SET_TMPL_ARGS_LEVEL (partial_args,
19130                            TMPL_ARGS_DEPTH (targs),
19131                            make_tree_vec (DECL_NTPARMS (tmpl)));
19132
19133       /* Make sure that we can see identifiers, and compute access
19134          correctly.  */
19135       push_access_scope (decl);
19136
19137       ++processing_template_decl;
19138       /* Now, do the (partial) substitution to figure out the
19139          appropriate function type.  */
19140       fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
19141       --processing_template_decl;
19142
19143       /* Substitute into the template parameters to obtain the real
19144          innermost set of parameters.  This step is important if the
19145          innermost set of template parameters contains value
19146          parameters whose types depend on outer template parameters.  */
19147       TREE_VEC_LENGTH (partial_args)--;
19148       tparms = tsubst_template_parms (tparms, partial_args, tf_error);
19149
19150       pop_access_scope (decl);
19151     }
19152
19153   return fn_type;
19154 }
19155
19156 /* Return truthvalue if we're processing a template different from
19157    the last one involved in diagnostics.  */
19158 int
19159 problematic_instantiation_changed (void)
19160 {
19161   return current_tinst_level != last_error_tinst_level;
19162 }
19163
19164 /* Remember current template involved in diagnostics.  */
19165 void
19166 record_last_problematic_instantiation (void)
19167 {
19168   last_error_tinst_level = current_tinst_level;
19169 }
19170
19171 struct tinst_level *
19172 current_instantiation (void)
19173 {
19174   return current_tinst_level;
19175 }
19176
19177 /* [temp.param] Check that template non-type parm TYPE is of an allowable
19178    type. Return zero for ok, nonzero for disallowed. Issue error and
19179    warning messages under control of COMPLAIN.  */
19180
19181 static int
19182 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
19183 {
19184   if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
19185     return 0;
19186   else if (POINTER_TYPE_P (type))
19187     return 0;
19188   else if (TYPE_PTR_TO_MEMBER_P (type))
19189     return 0;
19190   else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
19191     return 0;
19192   else if (TREE_CODE (type) == TYPENAME_TYPE)
19193     return 0;
19194   else if (TREE_CODE (type) == DECLTYPE_TYPE)
19195     return 0;
19196   else if (TREE_CODE (type) == NULLPTR_TYPE)
19197     return 0;
19198
19199   if (complain & tf_error)
19200     {
19201       if (type == error_mark_node)
19202         inform (input_location, "invalid template non-type parameter");
19203       else
19204         error ("%q#T is not a valid type for a template non-type parameter",
19205                type);
19206     }
19207   return 1;
19208 }
19209
19210 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
19211    Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
19212
19213 static bool
19214 dependent_type_p_r (tree type)
19215 {
19216   tree scope;
19217
19218   /* [temp.dep.type]
19219
19220      A type is dependent if it is:
19221
19222      -- a template parameter. Template template parameters are types
19223         for us (since TYPE_P holds true for them) so we handle
19224         them here.  */
19225   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
19226       || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
19227     return true;
19228   /* -- a qualified-id with a nested-name-specifier which contains a
19229         class-name that names a dependent type or whose unqualified-id
19230         names a dependent type.  */
19231   if (TREE_CODE (type) == TYPENAME_TYPE)
19232     return true;
19233   /* -- a cv-qualified type where the cv-unqualified type is
19234         dependent.  */
19235   type = TYPE_MAIN_VARIANT (type);
19236   /* -- a compound type constructed from any dependent type.  */
19237   if (TYPE_PTR_TO_MEMBER_P (type))
19238     return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
19239             || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
19240                                            (type)));
19241   else if (TREE_CODE (type) == POINTER_TYPE
19242            || TREE_CODE (type) == REFERENCE_TYPE)
19243     return dependent_type_p (TREE_TYPE (type));
19244   else if (TREE_CODE (type) == FUNCTION_TYPE
19245            || TREE_CODE (type) == METHOD_TYPE)
19246     {
19247       tree arg_type;
19248
19249       if (dependent_type_p (TREE_TYPE (type)))
19250         return true;
19251       for (arg_type = TYPE_ARG_TYPES (type);
19252            arg_type;
19253            arg_type = TREE_CHAIN (arg_type))
19254         if (dependent_type_p (TREE_VALUE (arg_type)))
19255           return true;
19256       return false;
19257     }
19258   /* -- an array type constructed from any dependent type or whose
19259         size is specified by a constant expression that is
19260         value-dependent.
19261
19262         We checked for type- and value-dependence of the bounds in
19263         compute_array_index_type, so TYPE_DEPENDENT_P is already set.  */
19264   if (TREE_CODE (type) == ARRAY_TYPE)
19265     {
19266       if (TYPE_DOMAIN (type)
19267           && dependent_type_p (TYPE_DOMAIN (type)))
19268         return true;
19269       return dependent_type_p (TREE_TYPE (type));
19270     }
19271
19272   /* -- a template-id in which either the template name is a template
19273      parameter ...  */
19274   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
19275     return true;
19276   /* ... or any of the template arguments is a dependent type or
19277         an expression that is type-dependent or value-dependent.  */
19278   else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
19279            && (any_dependent_template_arguments_p
19280                (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
19281     return true;
19282
19283   /* All TYPEOF_TYPEs, DECLTYPE_TYPEs, and UNDERLYING_TYPEs are
19284      dependent; if the argument of the `typeof' expression is not
19285      type-dependent, then it should already been have resolved.  */
19286   if (TREE_CODE (type) == TYPEOF_TYPE
19287       || TREE_CODE (type) == DECLTYPE_TYPE
19288       || TREE_CODE (type) == UNDERLYING_TYPE)
19289     return true;
19290
19291   /* A template argument pack is dependent if any of its packed
19292      arguments are.  */
19293   if (TREE_CODE (type) == TYPE_ARGUMENT_PACK)
19294     {
19295       tree args = ARGUMENT_PACK_ARGS (type);
19296       int i, len = TREE_VEC_LENGTH (args);
19297       for (i = 0; i < len; ++i)
19298         if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
19299           return true;
19300     }
19301
19302   /* All TYPE_PACK_EXPANSIONs are dependent, because parameter packs must
19303      be template parameters.  */
19304   if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
19305     return true;
19306
19307   /* The standard does not specifically mention types that are local
19308      to template functions or local classes, but they should be
19309      considered dependent too.  For example:
19310
19311        template <int I> void f() {
19312          enum E { a = I };
19313          S<sizeof (E)> s;
19314        }
19315
19316      The size of `E' cannot be known until the value of `I' has been
19317      determined.  Therefore, `E' must be considered dependent.  */
19318   scope = TYPE_CONTEXT (type);
19319   if (scope && TYPE_P (scope))
19320     return dependent_type_p (scope);
19321   /* Don't use type_dependent_expression_p here, as it can lead
19322      to infinite recursion trying to determine whether a lambda
19323      nested in a lambda is dependent (c++/47687).  */
19324   else if (scope && TREE_CODE (scope) == FUNCTION_DECL
19325            && DECL_LANG_SPECIFIC (scope)
19326            && DECL_TEMPLATE_INFO (scope)
19327            && (any_dependent_template_arguments_p
19328                (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (scope)))))
19329     return true;
19330
19331   /* Other types are non-dependent.  */
19332   return false;
19333 }
19334
19335 /* Returns TRUE if TYPE is dependent, in the sense of
19336    [temp.dep.type].  Note that a NULL type is considered dependent.  */
19337
19338 bool
19339 dependent_type_p (tree type)
19340 {
19341   /* If there are no template parameters in scope, then there can't be
19342      any dependent types.  */
19343   if (!processing_template_decl)
19344     {
19345       /* If we are not processing a template, then nobody should be
19346          providing us with a dependent type.  */
19347       gcc_assert (type);
19348       gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM || is_auto (type));
19349       return false;
19350     }
19351
19352   /* If the type is NULL, we have not computed a type for the entity
19353      in question; in that case, the type is dependent.  */
19354   if (!type)
19355     return true;
19356
19357   /* Erroneous types can be considered non-dependent.  */
19358   if (type == error_mark_node)
19359     return false;
19360
19361   /* If we have not already computed the appropriate value for TYPE,
19362      do so now.  */
19363   if (!TYPE_DEPENDENT_P_VALID (type))
19364     {
19365       TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
19366       TYPE_DEPENDENT_P_VALID (type) = 1;
19367     }
19368
19369   return TYPE_DEPENDENT_P (type);
19370 }
19371
19372 /* Returns TRUE if SCOPE is a dependent scope, in which we can't do any
19373    lookup.  In other words, a dependent type that is not the current
19374    instantiation.  */
19375
19376 bool
19377 dependent_scope_p (tree scope)
19378 {
19379   return (scope && TYPE_P (scope) && dependent_type_p (scope)
19380           && !currently_open_class (scope));
19381 }
19382
19383 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
19384    [temp.dep.constexpr].  EXPRESSION is already known to be a constant
19385    expression.  */
19386
19387 /* Note that this predicate is not appropriate for general expressions;
19388    only constant expressions (that satisfy potential_constant_expression)
19389    can be tested for value dependence.
19390
19391    We should really also have a predicate for "instantiation-dependent".
19392
19393    fold_non_dependent_expr: fold if constant and not type-dependent and not value-dependent.
19394      (what about instantiation-dependent constant-expressions?)
19395    is_late_template_attribute: defer if instantiation-dependent.
19396    compute_array_index_type: proceed if constant and not t- or v-dependent
19397      if instantiation-dependent, need to remember full expression
19398    uses_template_parms: FIXME - need to audit callers
19399    tsubst_decl [function_decl]: Why is this using value_dependent_expression_p?
19400    dependent_type_p [array_type]: dependent if index type is dependent
19401      (or non-constant?)
19402    static_assert - instantiation-dependent */
19403
19404 bool
19405 value_dependent_expression_p (tree expression)
19406 {
19407   if (!processing_template_decl)
19408     return false;
19409
19410   /* A name declared with a dependent type.  */
19411   if (DECL_P (expression) && type_dependent_expression_p (expression))
19412     return true;
19413
19414   switch (TREE_CODE (expression))
19415     {
19416     case IDENTIFIER_NODE:
19417       /* A name that has not been looked up -- must be dependent.  */
19418       return true;
19419
19420     case TEMPLATE_PARM_INDEX:
19421       /* A non-type template parm.  */
19422       return true;
19423
19424     case CONST_DECL:
19425       /* A non-type template parm.  */
19426       if (DECL_TEMPLATE_PARM_P (expression))
19427         return true;
19428       return value_dependent_expression_p (DECL_INITIAL (expression));
19429
19430     case VAR_DECL:
19431        /* A constant with literal type and is initialized
19432           with an expression that is value-dependent.  */
19433       if (DECL_INITIAL (expression)
19434           && decl_constant_var_p (expression)
19435           && value_dependent_expression_p (DECL_INITIAL (expression)))
19436         return true;
19437       return false;
19438
19439     case DYNAMIC_CAST_EXPR:
19440     case STATIC_CAST_EXPR:
19441     case CONST_CAST_EXPR:
19442     case REINTERPRET_CAST_EXPR:
19443     case CAST_EXPR:
19444       /* These expressions are value-dependent if the type to which
19445          the cast occurs is dependent or the expression being casted
19446          is value-dependent.  */
19447       {
19448         tree type = TREE_TYPE (expression);
19449
19450         if (dependent_type_p (type))
19451           return true;
19452
19453         /* A functional cast has a list of operands.  */
19454         expression = TREE_OPERAND (expression, 0);
19455         if (!expression)
19456           {
19457             /* If there are no operands, it must be an expression such
19458                as "int()". This should not happen for aggregate types
19459                because it would form non-constant expressions.  */
19460             gcc_assert (cxx_dialect >= cxx0x
19461                         || INTEGRAL_OR_ENUMERATION_TYPE_P (type));
19462
19463             return false;
19464           }
19465
19466         if (TREE_CODE (expression) == TREE_LIST)
19467           return any_value_dependent_elements_p (expression);
19468
19469         return value_dependent_expression_p (expression);
19470       }
19471
19472     case SIZEOF_EXPR:
19473     case ALIGNOF_EXPR:
19474     case TYPEID_EXPR:
19475       /* A `sizeof' expression is value-dependent if the operand is
19476          type-dependent or is a pack expansion.  */
19477       expression = TREE_OPERAND (expression, 0);
19478       if (PACK_EXPANSION_P (expression))
19479         return true;
19480       else if (TYPE_P (expression))
19481         return dependent_type_p (expression);
19482       return type_dependent_expression_p (expression);
19483
19484     case AT_ENCODE_EXPR:
19485       /* An 'encode' expression is value-dependent if the operand is
19486          type-dependent.  */
19487       expression = TREE_OPERAND (expression, 0);
19488       return dependent_type_p (expression);
19489
19490     case NOEXCEPT_EXPR:
19491       expression = TREE_OPERAND (expression, 0);
19492       return type_dependent_expression_p (expression);
19493
19494     case SCOPE_REF:
19495       {
19496         tree name = TREE_OPERAND (expression, 1);
19497         return value_dependent_expression_p (name);
19498       }
19499
19500     case COMPONENT_REF:
19501       return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
19502               || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
19503
19504     case NONTYPE_ARGUMENT_PACK:
19505       /* A NONTYPE_ARGUMENT_PACK is value-dependent if any packed argument
19506          is value-dependent.  */
19507       {
19508         tree values = ARGUMENT_PACK_ARGS (expression);
19509         int i, len = TREE_VEC_LENGTH (values);
19510         
19511         for (i = 0; i < len; ++i)
19512           if (value_dependent_expression_p (TREE_VEC_ELT (values, i)))
19513             return true;
19514         
19515         return false;
19516       }
19517
19518     case TRAIT_EXPR:
19519       {
19520         tree type2 = TRAIT_EXPR_TYPE2 (expression);
19521         return (dependent_type_p (TRAIT_EXPR_TYPE1 (expression))
19522                 || (type2 ? dependent_type_p (type2) : false));
19523       }
19524
19525     case MODOP_EXPR:
19526       return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
19527               || (value_dependent_expression_p (TREE_OPERAND (expression, 2))));
19528
19529     case ARRAY_REF:
19530       return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
19531               || (value_dependent_expression_p (TREE_OPERAND (expression, 1))));
19532
19533     case ADDR_EXPR:
19534       {
19535         tree op = TREE_OPERAND (expression, 0);
19536         return (value_dependent_expression_p (op)
19537                 || has_value_dependent_address (op));
19538       }
19539
19540     case CALL_EXPR:
19541       {
19542         tree fn = get_callee_fndecl (expression);
19543         int i, nargs;
19544         if (!fn && value_dependent_expression_p (CALL_EXPR_FN (expression)))
19545           return true;
19546         nargs = call_expr_nargs (expression);
19547         for (i = 0; i < nargs; ++i)
19548           {
19549             tree op = CALL_EXPR_ARG (expression, i);
19550             /* In a call to a constexpr member function, look through the
19551                implicit ADDR_EXPR on the object argument so that it doesn't
19552                cause the call to be considered value-dependent.  We also
19553                look through it in potential_constant_expression.  */
19554             if (i == 0 && fn && DECL_DECLARED_CONSTEXPR_P (fn)
19555                 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
19556                 && TREE_CODE (op) == ADDR_EXPR)
19557               op = TREE_OPERAND (op, 0);
19558             if (value_dependent_expression_p (op))
19559               return true;
19560           }
19561         return false;
19562       }
19563
19564     case TEMPLATE_ID_EXPR:
19565       /* If a TEMPLATE_ID_EXPR involves a dependent name, it will be
19566          type-dependent.  */
19567       return type_dependent_expression_p (expression);
19568
19569     case CONSTRUCTOR:
19570       {
19571         unsigned ix;
19572         tree val;
19573         FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), ix, val)
19574           if (value_dependent_expression_p (val))
19575             return true;
19576         return false;
19577       }
19578
19579     case STMT_EXPR:
19580       /* Treat a GNU statement expression as dependent to avoid crashing
19581          under fold_non_dependent_expr; it can't be constant.  */
19582       return true;
19583
19584     default:
19585       /* A constant expression is value-dependent if any subexpression is
19586          value-dependent.  */
19587       switch (TREE_CODE_CLASS (TREE_CODE (expression)))
19588         {
19589         case tcc_reference:
19590         case tcc_unary:
19591         case tcc_comparison:
19592         case tcc_binary:
19593         case tcc_expression:
19594         case tcc_vl_exp:
19595           {
19596             int i, len = cp_tree_operand_length (expression);
19597
19598             for (i = 0; i < len; i++)
19599               {
19600                 tree t = TREE_OPERAND (expression, i);
19601
19602                 /* In some cases, some of the operands may be missing.l
19603                    (For example, in the case of PREDECREMENT_EXPR, the
19604                    amount to increment by may be missing.)  That doesn't
19605                    make the expression dependent.  */
19606                 if (t && value_dependent_expression_p (t))
19607                   return true;
19608               }
19609           }
19610           break;
19611         default:
19612           break;
19613         }
19614       break;
19615     }
19616
19617   /* The expression is not value-dependent.  */
19618   return false;
19619 }
19620
19621 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
19622    [temp.dep.expr].  Note that an expression with no type is
19623    considered dependent.  Other parts of the compiler arrange for an
19624    expression with type-dependent subexpressions to have no type, so
19625    this function doesn't have to be fully recursive.  */
19626
19627 bool
19628 type_dependent_expression_p (tree expression)
19629 {
19630   if (!processing_template_decl)
19631     return false;
19632
19633   if (expression == error_mark_node)
19634     return false;
19635
19636   /* An unresolved name is always dependent.  */
19637   if (TREE_CODE (expression) == IDENTIFIER_NODE
19638       || TREE_CODE (expression) == USING_DECL)
19639     return true;
19640
19641   /* Some expression forms are never type-dependent.  */
19642   if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
19643       || TREE_CODE (expression) == SIZEOF_EXPR
19644       || TREE_CODE (expression) == ALIGNOF_EXPR
19645       || TREE_CODE (expression) == AT_ENCODE_EXPR
19646       || TREE_CODE (expression) == NOEXCEPT_EXPR
19647       || TREE_CODE (expression) == TRAIT_EXPR
19648       || TREE_CODE (expression) == TYPEID_EXPR
19649       || TREE_CODE (expression) == DELETE_EXPR
19650       || TREE_CODE (expression) == VEC_DELETE_EXPR
19651       || TREE_CODE (expression) == THROW_EXPR)
19652     return false;
19653
19654   /* The types of these expressions depends only on the type to which
19655      the cast occurs.  */
19656   if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
19657       || TREE_CODE (expression) == STATIC_CAST_EXPR
19658       || TREE_CODE (expression) == CONST_CAST_EXPR
19659       || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
19660       || TREE_CODE (expression) == IMPLICIT_CONV_EXPR
19661       || TREE_CODE (expression) == CAST_EXPR)
19662     return dependent_type_p (TREE_TYPE (expression));
19663
19664   /* The types of these expressions depends only on the type created
19665      by the expression.  */
19666   if (TREE_CODE (expression) == NEW_EXPR
19667       || TREE_CODE (expression) == VEC_NEW_EXPR)
19668     {
19669       /* For NEW_EXPR tree nodes created inside a template, either
19670          the object type itself or a TREE_LIST may appear as the
19671          operand 1.  */
19672       tree type = TREE_OPERAND (expression, 1);
19673       if (TREE_CODE (type) == TREE_LIST)
19674         /* This is an array type.  We need to check array dimensions
19675            as well.  */
19676         return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
19677                || value_dependent_expression_p
19678                     (TREE_OPERAND (TREE_VALUE (type), 1));
19679       else
19680         return dependent_type_p (type);
19681     }
19682
19683   if (TREE_CODE (expression) == SCOPE_REF)
19684     {
19685       tree scope = TREE_OPERAND (expression, 0);
19686       tree name = TREE_OPERAND (expression, 1);
19687
19688       /* 14.6.2.2 [temp.dep.expr]: An id-expression is type-dependent if it
19689          contains an identifier associated by name lookup with one or more
19690          declarations declared with a dependent type, or...a
19691          nested-name-specifier or qualified-id that names a member of an
19692          unknown specialization.  */
19693       return (type_dependent_expression_p (name)
19694               || dependent_scope_p (scope));
19695     }
19696
19697   if (TREE_CODE (expression) == FUNCTION_DECL
19698       && DECL_LANG_SPECIFIC (expression)
19699       && DECL_TEMPLATE_INFO (expression)
19700       && (any_dependent_template_arguments_p
19701           (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
19702     return true;
19703
19704   if (TREE_CODE (expression) == TEMPLATE_DECL
19705       && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
19706     return false;
19707
19708   if (TREE_CODE (expression) == STMT_EXPR)
19709     expression = stmt_expr_value_expr (expression);
19710
19711   if (BRACE_ENCLOSED_INITIALIZER_P (expression))
19712     {
19713       tree elt;
19714       unsigned i;
19715
19716       FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), i, elt)
19717         {
19718           if (type_dependent_expression_p (elt))
19719             return true;
19720         }
19721       return false;
19722     }
19723
19724   /* A static data member of the current instantiation with incomplete
19725      array type is type-dependent, as the definition and specializations
19726      can have different bounds.  */
19727   if (TREE_CODE (expression) == VAR_DECL
19728       && DECL_CLASS_SCOPE_P (expression)
19729       && dependent_type_p (DECL_CONTEXT (expression))
19730       && VAR_HAD_UNKNOWN_BOUND (expression))
19731     return true;
19732
19733   if (TREE_TYPE (expression) == unknown_type_node)
19734     {
19735       if (TREE_CODE (expression) == ADDR_EXPR)
19736         return type_dependent_expression_p (TREE_OPERAND (expression, 0));
19737       if (TREE_CODE (expression) == COMPONENT_REF
19738           || TREE_CODE (expression) == OFFSET_REF)
19739         {
19740           if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
19741             return true;
19742           expression = TREE_OPERAND (expression, 1);
19743           if (TREE_CODE (expression) == IDENTIFIER_NODE)
19744             return false;
19745         }
19746       /* SCOPE_REF with non-null TREE_TYPE is always non-dependent.  */
19747       if (TREE_CODE (expression) == SCOPE_REF)
19748         return false;
19749
19750       if (BASELINK_P (expression))
19751         expression = BASELINK_FUNCTIONS (expression);
19752
19753       if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
19754         {
19755           if (any_dependent_template_arguments_p
19756               (TREE_OPERAND (expression, 1)))
19757             return true;
19758           expression = TREE_OPERAND (expression, 0);
19759         }
19760       gcc_assert (TREE_CODE (expression) == OVERLOAD
19761                   || TREE_CODE (expression) == FUNCTION_DECL);
19762
19763       while (expression)
19764         {
19765           if (type_dependent_expression_p (OVL_CURRENT (expression)))
19766             return true;
19767           expression = OVL_NEXT (expression);
19768         }
19769       return false;
19770     }
19771
19772   gcc_assert (TREE_CODE (expression) != TYPE_DECL);
19773
19774   return (dependent_type_p (TREE_TYPE (expression)));
19775 }
19776
19777 /* Like type_dependent_expression_p, but it also works while not processing
19778    a template definition, i.e. during substitution or mangling.  */
19779
19780 bool
19781 type_dependent_expression_p_push (tree expr)
19782 {
19783   bool b;
19784   ++processing_template_decl;
19785   b = type_dependent_expression_p (expr);
19786   --processing_template_decl;
19787   return b;
19788 }
19789
19790 /* Returns TRUE if ARGS contains a type-dependent expression.  */
19791
19792 bool
19793 any_type_dependent_arguments_p (const VEC(tree,gc) *args)
19794 {
19795   unsigned int i;
19796   tree arg;
19797
19798   FOR_EACH_VEC_ELT (tree, args, i, arg)
19799     {
19800       if (type_dependent_expression_p (arg))
19801         return true;
19802     }
19803   return false;
19804 }
19805
19806 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
19807    expressions) contains any type-dependent expressions.  */
19808
19809 bool
19810 any_type_dependent_elements_p (const_tree list)
19811 {
19812   for (; list; list = TREE_CHAIN (list))
19813     if (value_dependent_expression_p (TREE_VALUE (list)))
19814       return true;
19815
19816   return false;
19817 }
19818
19819 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
19820    expressions) contains any value-dependent expressions.  */
19821
19822 bool
19823 any_value_dependent_elements_p (const_tree list)
19824 {
19825   for (; list; list = TREE_CHAIN (list))
19826     if (value_dependent_expression_p (TREE_VALUE (list)))
19827       return true;
19828
19829   return false;
19830 }
19831
19832 /* Returns TRUE if the ARG (a template argument) is dependent.  */
19833
19834 bool
19835 dependent_template_arg_p (tree arg)
19836 {
19837   if (!processing_template_decl)
19838     return false;
19839
19840   /* Assume a template argument that was wrongly written by the user
19841      is dependent. This is consistent with what
19842      any_dependent_template_arguments_p [that calls this function]
19843      does.  */
19844   if (!arg || arg == error_mark_node)
19845     return true;
19846
19847   if (TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
19848     arg = ARGUMENT_PACK_SELECT_ARG (arg);
19849
19850   if (TREE_CODE (arg) == TEMPLATE_DECL
19851       || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
19852     return dependent_template_p (arg);
19853   else if (ARGUMENT_PACK_P (arg))
19854     {
19855       tree args = ARGUMENT_PACK_ARGS (arg);
19856       int i, len = TREE_VEC_LENGTH (args);
19857       for (i = 0; i < len; ++i)
19858         {
19859           if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
19860             return true;
19861         }
19862
19863       return false;
19864     }
19865   else if (TYPE_P (arg))
19866     return dependent_type_p (arg);
19867   else
19868     return (type_dependent_expression_p (arg)
19869             || value_dependent_expression_p (arg));
19870 }
19871
19872 /* Returns true if ARGS (a collection of template arguments) contains
19873    any types that require structural equality testing.  */
19874
19875 bool
19876 any_template_arguments_need_structural_equality_p (tree args)
19877 {
19878   int i;
19879   int j;
19880
19881   if (!args)
19882     return false;
19883   if (args == error_mark_node)
19884     return true;
19885
19886   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
19887     {
19888       tree level = TMPL_ARGS_LEVEL (args, i + 1);
19889       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
19890         {
19891           tree arg = TREE_VEC_ELT (level, j);
19892           tree packed_args = NULL_TREE;
19893           int k, len = 1;
19894
19895           if (ARGUMENT_PACK_P (arg))
19896             {
19897               /* Look inside the argument pack.  */
19898               packed_args = ARGUMENT_PACK_ARGS (arg);
19899               len = TREE_VEC_LENGTH (packed_args);
19900             }
19901
19902           for (k = 0; k < len; ++k)
19903             {
19904               if (packed_args)
19905                 arg = TREE_VEC_ELT (packed_args, k);
19906
19907               if (error_operand_p (arg))
19908                 return true;
19909               else if (TREE_CODE (arg) == TEMPLATE_DECL
19910                        || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
19911                 continue;
19912               else if (TYPE_P (arg) && TYPE_STRUCTURAL_EQUALITY_P (arg))
19913                 return true;
19914               else if (!TYPE_P (arg) && TREE_TYPE (arg)
19915                        && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (arg)))
19916                 return true;
19917             }
19918         }
19919     }
19920
19921   return false;
19922 }
19923
19924 /* Returns true if ARGS (a collection of template arguments) contains
19925    any dependent arguments.  */
19926
19927 bool
19928 any_dependent_template_arguments_p (const_tree args)
19929 {
19930   int i;
19931   int j;
19932
19933   if (!args)
19934     return false;
19935   if (args == error_mark_node)
19936     return true;
19937
19938   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
19939     {
19940       const_tree level = TMPL_ARGS_LEVEL (args, i + 1);
19941       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
19942         if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
19943           return true;
19944     }
19945
19946   return false;
19947 }
19948
19949 /* Returns TRUE if the template TMPL is dependent.  */
19950
19951 bool
19952 dependent_template_p (tree tmpl)
19953 {
19954   if (TREE_CODE (tmpl) == OVERLOAD)
19955     {
19956       while (tmpl)
19957         {
19958           if (dependent_template_p (OVL_CURRENT (tmpl)))
19959             return true;
19960           tmpl = OVL_NEXT (tmpl);
19961         }
19962       return false;
19963     }
19964
19965   /* Template template parameters are dependent.  */
19966   if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
19967       || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
19968     return true;
19969   /* So are names that have not been looked up.  */
19970   if (TREE_CODE (tmpl) == SCOPE_REF
19971       || TREE_CODE (tmpl) == IDENTIFIER_NODE)
19972     return true;
19973   /* So are member templates of dependent classes.  */
19974   if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
19975     return dependent_type_p (DECL_CONTEXT (tmpl));
19976   return false;
19977 }
19978
19979 /* Returns TRUE if the specialization TMPL<ARGS> is dependent.  */
19980
19981 bool
19982 dependent_template_id_p (tree tmpl, tree args)
19983 {
19984   return (dependent_template_p (tmpl)
19985           || any_dependent_template_arguments_p (args));
19986 }
19987
19988 /* Returns TRUE if OMP_FOR with DECLV, INITV, CONDV and INCRV vectors
19989    is dependent.  */
19990
19991 bool
19992 dependent_omp_for_p (tree declv, tree initv, tree condv, tree incrv)
19993 {
19994   int i;
19995
19996   if (!processing_template_decl)
19997     return false;
19998
19999   for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
20000     {
20001       tree decl = TREE_VEC_ELT (declv, i);
20002       tree init = TREE_VEC_ELT (initv, i);
20003       tree cond = TREE_VEC_ELT (condv, i);
20004       tree incr = TREE_VEC_ELT (incrv, i);
20005
20006       if (type_dependent_expression_p (decl))
20007         return true;
20008
20009       if (init && type_dependent_expression_p (init))
20010         return true;
20011
20012       if (type_dependent_expression_p (cond))
20013         return true;
20014
20015       if (COMPARISON_CLASS_P (cond)
20016           && (type_dependent_expression_p (TREE_OPERAND (cond, 0))
20017               || type_dependent_expression_p (TREE_OPERAND (cond, 1))))
20018         return true;
20019
20020       if (TREE_CODE (incr) == MODOP_EXPR)
20021         {
20022           if (type_dependent_expression_p (TREE_OPERAND (incr, 0))
20023               || type_dependent_expression_p (TREE_OPERAND (incr, 2)))
20024             return true;
20025         }
20026       else if (type_dependent_expression_p (incr))
20027         return true;
20028       else if (TREE_CODE (incr) == MODIFY_EXPR)
20029         {
20030           if (type_dependent_expression_p (TREE_OPERAND (incr, 0)))
20031             return true;
20032           else if (BINARY_CLASS_P (TREE_OPERAND (incr, 1)))
20033             {
20034               tree t = TREE_OPERAND (incr, 1);
20035               if (type_dependent_expression_p (TREE_OPERAND (t, 0))
20036                   || type_dependent_expression_p (TREE_OPERAND (t, 1)))
20037                 return true;
20038             }
20039         }
20040     }
20041
20042   return false;
20043 }
20044
20045 /* TYPE is a TYPENAME_TYPE.  Returns the ordinary TYPE to which the
20046    TYPENAME_TYPE corresponds.  Returns the original TYPENAME_TYPE if
20047    no such TYPE can be found.  Note that this function peers inside
20048    uninstantiated templates and therefore should be used only in
20049    extremely limited situations.  ONLY_CURRENT_P restricts this
20050    peering to the currently open classes hierarchy (which is required
20051    when comparing types).  */
20052
20053 tree
20054 resolve_typename_type (tree type, bool only_current_p)
20055 {
20056   tree scope;
20057   tree name;
20058   tree decl;
20059   int quals;
20060   tree pushed_scope;
20061   tree result;
20062
20063   gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
20064
20065   scope = TYPE_CONTEXT (type);
20066   /* Usually the non-qualified identifier of a TYPENAME_TYPE is
20067      TYPE_IDENTIFIER (type). But when 'type' is a typedef variant of
20068      a TYPENAME_TYPE node, then TYPE_NAME (type) is set to the TYPE_DECL representing
20069      the typedef. In that case TYPE_IDENTIFIER (type) is not the non-qualified
20070      identifier  of the TYPENAME_TYPE anymore.
20071      So by getting the TYPE_IDENTIFIER of the _main declaration_ of the
20072      TYPENAME_TYPE instead, we avoid messing up with a possible
20073      typedef variant case.  */
20074   name = TYPE_IDENTIFIER (TYPE_MAIN_VARIANT (type));
20075
20076   /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
20077      it first before we can figure out what NAME refers to.  */
20078   if (TREE_CODE (scope) == TYPENAME_TYPE)
20079     scope = resolve_typename_type (scope, only_current_p);
20080   /* If we don't know what SCOPE refers to, then we cannot resolve the
20081      TYPENAME_TYPE.  */
20082   if (TREE_CODE (scope) == TYPENAME_TYPE)
20083     return type;
20084   /* If the SCOPE is a template type parameter, we have no way of
20085      resolving the name.  */
20086   if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
20087     return type;
20088   /* If the SCOPE is not the current instantiation, there's no reason
20089      to look inside it.  */
20090   if (only_current_p && !currently_open_class (scope))
20091     return type;
20092   /* If this is a typedef, we don't want to look inside (c++/11987).  */
20093   if (typedef_variant_p (type))
20094     return type;
20095   /* If SCOPE isn't the template itself, it will not have a valid
20096      TYPE_FIELDS list.  */
20097   if (same_type_p (scope, CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope)))
20098     /* scope is either the template itself or a compatible instantiation
20099        like X<T>, so look up the name in the original template.  */
20100     scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
20101   else
20102     /* scope is a partial instantiation, so we can't do the lookup or we
20103        will lose the template arguments.  */
20104     return type;
20105   /* Enter the SCOPE so that name lookup will be resolved as if we
20106      were in the class definition.  In particular, SCOPE will no
20107      longer be considered a dependent type.  */
20108   pushed_scope = push_scope (scope);
20109   /* Look up the declaration.  */
20110   decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true,
20111                         tf_warning_or_error);
20112
20113   result = NULL_TREE;
20114   
20115   /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
20116      find a TEMPLATE_DECL.  Otherwise, we want to find a TYPE_DECL.  */
20117   if (!decl)
20118     /*nop*/;
20119   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
20120            && TREE_CODE (decl) == TYPE_DECL)
20121     {
20122       result = TREE_TYPE (decl);
20123       if (result == error_mark_node)
20124         result = NULL_TREE;
20125     }
20126   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
20127            && DECL_CLASS_TEMPLATE_P (decl))
20128     {
20129       tree tmpl;
20130       tree args;
20131       /* Obtain the template and the arguments.  */
20132       tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
20133       args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
20134       /* Instantiate the template.  */
20135       result = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
20136                                       /*entering_scope=*/0,
20137                                       tf_error | tf_user);
20138       if (result == error_mark_node)
20139         result = NULL_TREE;
20140     }
20141   
20142   /* Leave the SCOPE.  */
20143   if (pushed_scope)
20144     pop_scope (pushed_scope);
20145
20146   /* If we failed to resolve it, return the original typename.  */
20147   if (!result)
20148     return type;
20149   
20150   /* If lookup found a typename type, resolve that too.  */
20151   if (TREE_CODE (result) == TYPENAME_TYPE && !TYPENAME_IS_RESOLVING_P (result))
20152     {
20153       /* Ill-formed programs can cause infinite recursion here, so we
20154          must catch that.  */
20155       TYPENAME_IS_RESOLVING_P (type) = 1;
20156       result = resolve_typename_type (result, only_current_p);
20157       TYPENAME_IS_RESOLVING_P (type) = 0;
20158     }
20159   
20160   /* Qualify the resulting type.  */
20161   quals = cp_type_quals (type);
20162   if (quals)
20163     result = cp_build_qualified_type (result, cp_type_quals (result) | quals);
20164
20165   return result;
20166 }
20167
20168 /* EXPR is an expression which is not type-dependent.  Return a proxy
20169    for EXPR that can be used to compute the types of larger
20170    expressions containing EXPR.  */
20171
20172 tree
20173 build_non_dependent_expr (tree expr)
20174 {
20175   tree inner_expr;
20176
20177 #ifdef ENABLE_CHECKING
20178   /* Try to get a constant value for all non-type-dependent expressions in
20179       order to expose bugs in *_dependent_expression_p and constexpr.  */
20180   if (cxx_dialect >= cxx0x)
20181     maybe_constant_value (fold_non_dependent_expr_sfinae (expr, tf_none));
20182 #endif
20183
20184   /* Preserve OVERLOADs; the functions must be available to resolve
20185      types.  */
20186   inner_expr = expr;
20187   if (TREE_CODE (inner_expr) == STMT_EXPR)
20188     inner_expr = stmt_expr_value_expr (inner_expr);
20189   if (TREE_CODE (inner_expr) == ADDR_EXPR)
20190     inner_expr = TREE_OPERAND (inner_expr, 0);
20191   if (TREE_CODE (inner_expr) == COMPONENT_REF)
20192     inner_expr = TREE_OPERAND (inner_expr, 1);
20193   if (is_overloaded_fn (inner_expr)
20194       || TREE_CODE (inner_expr) == OFFSET_REF)
20195     return expr;
20196   /* There is no need to return a proxy for a variable.  */
20197   if (TREE_CODE (expr) == VAR_DECL)
20198     return expr;
20199   /* Preserve string constants; conversions from string constants to
20200      "char *" are allowed, even though normally a "const char *"
20201      cannot be used to initialize a "char *".  */
20202   if (TREE_CODE (expr) == STRING_CST)
20203     return expr;
20204   /* Preserve arithmetic constants, as an optimization -- there is no
20205      reason to create a new node.  */
20206   if (TREE_CODE (expr) == INTEGER_CST || TREE_CODE (expr) == REAL_CST)
20207     return expr;
20208   /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
20209      There is at least one place where we want to know that a
20210      particular expression is a throw-expression: when checking a ?:
20211      expression, there are special rules if the second or third
20212      argument is a throw-expression.  */
20213   if (TREE_CODE (expr) == THROW_EXPR)
20214     return expr;
20215
20216   /* Don't wrap an initializer list, we need to be able to look inside.  */
20217   if (BRACE_ENCLOSED_INITIALIZER_P (expr))
20218     return expr;
20219
20220   if (TREE_CODE (expr) == COND_EXPR)
20221     return build3 (COND_EXPR,
20222                    TREE_TYPE (expr),
20223                    TREE_OPERAND (expr, 0),
20224                    (TREE_OPERAND (expr, 1)
20225                     ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
20226                     : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
20227                    build_non_dependent_expr (TREE_OPERAND (expr, 2)));
20228   if (TREE_CODE (expr) == COMPOUND_EXPR
20229       && !COMPOUND_EXPR_OVERLOADED (expr))
20230     return build2 (COMPOUND_EXPR,
20231                    TREE_TYPE (expr),
20232                    TREE_OPERAND (expr, 0),
20233                    build_non_dependent_expr (TREE_OPERAND (expr, 1)));
20234
20235   /* If the type is unknown, it can't really be non-dependent */
20236   gcc_assert (TREE_TYPE (expr) != unknown_type_node);
20237
20238   /* Otherwise, build a NON_DEPENDENT_EXPR.  */
20239   return build1 (NON_DEPENDENT_EXPR, TREE_TYPE (expr), expr);
20240 }
20241
20242 /* ARGS is a vector of expressions as arguments to a function call.
20243    Replace the arguments with equivalent non-dependent expressions.
20244    This modifies ARGS in place.  */
20245
20246 void
20247 make_args_non_dependent (VEC(tree,gc) *args)
20248 {
20249   unsigned int ix;
20250   tree arg;
20251
20252   FOR_EACH_VEC_ELT (tree, args, ix, arg)
20253     {
20254       tree newarg = build_non_dependent_expr (arg);
20255       if (newarg != arg)
20256         VEC_replace (tree, args, ix, newarg);
20257     }
20258 }
20259
20260 /* Returns a type which represents 'auto'.  We use a TEMPLATE_TYPE_PARM
20261    with a level one deeper than the actual template parms.  */
20262
20263 tree
20264 make_auto (void)
20265 {
20266   tree au = cxx_make_type (TEMPLATE_TYPE_PARM);
20267   TYPE_NAME (au) = build_decl (BUILTINS_LOCATION,
20268                                TYPE_DECL, get_identifier ("auto"), au);
20269   TYPE_STUB_DECL (au) = TYPE_NAME (au);
20270   TEMPLATE_TYPE_PARM_INDEX (au) = build_template_parm_index
20271     (0, processing_template_decl + 1, processing_template_decl + 1,
20272      0, TYPE_NAME (au), NULL_TREE);
20273   TYPE_CANONICAL (au) = canonical_type_parameter (au);
20274   DECL_ARTIFICIAL (TYPE_NAME (au)) = 1;
20275   SET_DECL_TEMPLATE_PARM_P (TYPE_NAME (au));
20276
20277   return au;
20278 }
20279
20280 /* Given type ARG, return std::initializer_list<ARG>.  */
20281
20282 static tree
20283 listify (tree arg)
20284 {
20285   tree std_init_list = namespace_binding
20286     (get_identifier ("initializer_list"), std_node);
20287   tree argvec;
20288   if (!std_init_list || !DECL_CLASS_TEMPLATE_P (std_init_list))
20289     {    
20290       error ("deducing from brace-enclosed initializer list requires "
20291              "#include <initializer_list>");
20292       return error_mark_node;
20293     }
20294   argvec = make_tree_vec (1);
20295   TREE_VEC_ELT (argvec, 0) = arg;
20296   return lookup_template_class (std_init_list, argvec, NULL_TREE,
20297                                 NULL_TREE, 0, tf_warning_or_error);
20298 }
20299
20300 /* Replace auto in TYPE with std::initializer_list<auto>.  */
20301
20302 static tree
20303 listify_autos (tree type, tree auto_node)
20304 {
20305   tree init_auto = listify (auto_node);
20306   tree argvec = make_tree_vec (1);
20307   TREE_VEC_ELT (argvec, 0) = init_auto;
20308   if (processing_template_decl)
20309     argvec = add_to_template_args (current_template_args (), argvec);
20310   return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
20311 }
20312
20313 /* walk_tree helper for do_auto_deduction.  */
20314
20315 static tree
20316 contains_auto_r (tree *tp, int *walk_subtrees ATTRIBUTE_UNUSED,
20317                  void *type)
20318 {
20319   /* Is this a variable with the type we're looking for?  */
20320   if (DECL_P (*tp)
20321       && TREE_TYPE (*tp) == type)
20322     return *tp;
20323   else
20324     return NULL_TREE;
20325 }
20326
20327 /* Replace occurrences of 'auto' in TYPE with the appropriate type deduced
20328    from INIT.  AUTO_NODE is the TEMPLATE_TYPE_PARM used for 'auto' in TYPE.  */
20329
20330 tree
20331 do_auto_deduction (tree type, tree init, tree auto_node)
20332 {
20333   tree parms, tparms, targs;
20334   tree args[1];
20335   tree decl;
20336   int val;
20337
20338   if (processing_template_decl
20339       && (TREE_TYPE (init) == NULL_TREE
20340           || BRACE_ENCLOSED_INITIALIZER_P (init)))
20341     /* Not enough information to try this yet.  */
20342     return type;
20343
20344   /* The name of the object being declared shall not appear in the
20345      initializer expression.  */
20346   decl = cp_walk_tree_without_duplicates (&init, contains_auto_r, type);
20347   if (decl)
20348     {
20349       error ("variable %q#D with %<auto%> type used in its own "
20350              "initializer", decl);
20351       return error_mark_node;
20352     }
20353
20354   /* [dcl.spec.auto]: Obtain P from T by replacing the occurrences of auto
20355      with either a new invented type template parameter U or, if the
20356      initializer is a braced-init-list (8.5.4), with
20357      std::initializer_list<U>.  */
20358   if (BRACE_ENCLOSED_INITIALIZER_P (init))
20359     type = listify_autos (type, auto_node);
20360
20361   init = resolve_nondeduced_context (init);
20362
20363   parms = build_tree_list (NULL_TREE, type);
20364   args[0] = init;
20365   tparms = make_tree_vec (1);
20366   targs = make_tree_vec (1);
20367   TREE_VEC_ELT (tparms, 0)
20368     = build_tree_list (NULL_TREE, TYPE_NAME (auto_node));
20369   val = type_unification_real (tparms, targs, parms, args, 1, 0,
20370                                DEDUCE_CALL, LOOKUP_NORMAL,
20371                                /*explain_p=*/false);
20372   if (val > 0)
20373     {
20374       if (processing_template_decl)
20375         /* Try again at instantiation time.  */
20376         return type;
20377       if (type && type != error_mark_node)
20378         /* If type is error_mark_node a diagnostic must have been
20379            emitted by now.  Also, having a mention to '<type error>'
20380            in the diagnostic is not really useful to the user.  */
20381         error ("unable to deduce %qT from %qE", type, init);
20382       return error_mark_node;
20383     }
20384
20385   /* If the list of declarators contains more than one declarator, the type
20386      of each declared variable is determined as described above. If the
20387      type deduced for the template parameter U is not the same in each
20388      deduction, the program is ill-formed.  */
20389   if (TREE_TYPE (auto_node)
20390       && !same_type_p (TREE_TYPE (auto_node), TREE_VEC_ELT (targs, 0)))
20391     {
20392       error ("inconsistent deduction for %qT: %qT and then %qT",
20393              auto_node, TREE_TYPE (auto_node), TREE_VEC_ELT (targs, 0));
20394       return error_mark_node;
20395     }
20396   TREE_TYPE (auto_node) = TREE_VEC_ELT (targs, 0);
20397
20398   if (processing_template_decl)
20399     targs = add_to_template_args (current_template_args (), targs);
20400   return tsubst (type, targs, tf_warning_or_error, NULL_TREE);
20401 }
20402
20403 /* Substitutes LATE_RETURN_TYPE for 'auto' in TYPE and returns the
20404    result.  */
20405
20406 tree
20407 splice_late_return_type (tree type, tree late_return_type)
20408 {
20409   tree argvec;
20410
20411   if (late_return_type == NULL_TREE)
20412     return type;
20413   argvec = make_tree_vec (1);
20414   TREE_VEC_ELT (argvec, 0) = late_return_type;
20415   if (processing_template_parmlist)
20416     /* For a late-specified return type in a template type-parameter, we
20417        need to add a dummy argument level for its parmlist.  */
20418     argvec = add_to_template_args
20419       (make_tree_vec (processing_template_parmlist), argvec);
20420   if (current_template_parms)
20421     argvec = add_to_template_args (current_template_args (), argvec);
20422   return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
20423 }
20424
20425 /* Returns true iff TYPE is a TEMPLATE_TYPE_PARM representing 'auto'.  */
20426
20427 bool
20428 is_auto (const_tree type)
20429 {
20430   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
20431       && TYPE_IDENTIFIER (type) == get_identifier ("auto"))
20432     return true;
20433   else
20434     return false;
20435 }
20436
20437 /* Returns true iff TYPE contains a use of 'auto'.  Since auto can only
20438    appear as a type-specifier for the declaration in question, we don't
20439    have to look through the whole type.  */
20440
20441 tree
20442 type_uses_auto (tree type)
20443 {
20444   enum tree_code code;
20445   if (is_auto (type))
20446     return type;
20447
20448   code = TREE_CODE (type);
20449
20450   if (code == POINTER_TYPE || code == REFERENCE_TYPE
20451       || code == OFFSET_TYPE || code == FUNCTION_TYPE
20452       || code == METHOD_TYPE || code == ARRAY_TYPE)
20453     return type_uses_auto (TREE_TYPE (type));
20454
20455   if (TYPE_PTRMEMFUNC_P (type))
20456     return type_uses_auto (TREE_TYPE (TREE_TYPE
20457                                    (TYPE_PTRMEMFUNC_FN_TYPE (type))));
20458
20459   return NULL_TREE;
20460 }
20461
20462 /* For a given template T, return the vector of typedefs referenced
20463    in T for which access check is needed at T instantiation time.
20464    T is either  a FUNCTION_DECL or a RECORD_TYPE.
20465    Those typedefs were added to T by the function
20466    append_type_to_template_for_access_check.  */
20467
20468 VEC(qualified_typedef_usage_t,gc)*
20469 get_types_needing_access_check (tree t)
20470 {
20471   tree ti;
20472   VEC(qualified_typedef_usage_t,gc) *result = NULL;
20473
20474   if (!t || t == error_mark_node)
20475     return NULL;
20476
20477   if (!(ti = get_template_info (t)))
20478     return NULL;
20479
20480   if (CLASS_TYPE_P (t)
20481       || TREE_CODE (t) == FUNCTION_DECL)
20482     {
20483       if (!TI_TEMPLATE (ti))
20484         return NULL;
20485
20486       result = TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti);
20487     }
20488
20489   return result;
20490 }
20491
20492 /* Append the typedef TYPE_DECL used in template T to a list of typedefs
20493    tied to T. That list of typedefs will be access checked at
20494    T instantiation time.
20495    T is either a FUNCTION_DECL or a RECORD_TYPE.
20496    TYPE_DECL is a TYPE_DECL node representing a typedef.
20497    SCOPE is the scope through which TYPE_DECL is accessed.
20498    LOCATION is the location of the usage point of TYPE_DECL.
20499
20500    This function is a subroutine of
20501    append_type_to_template_for_access_check.  */
20502
20503 static void
20504 append_type_to_template_for_access_check_1 (tree t,
20505                                             tree type_decl,
20506                                             tree scope,
20507                                             location_t location)
20508 {
20509   qualified_typedef_usage_t typedef_usage;
20510   tree ti;
20511
20512   if (!t || t == error_mark_node)
20513     return;
20514
20515   gcc_assert ((TREE_CODE (t) == FUNCTION_DECL
20516                || CLASS_TYPE_P (t))
20517               && type_decl
20518               && TREE_CODE (type_decl) == TYPE_DECL
20519               && scope);
20520
20521   if (!(ti = get_template_info (t)))
20522     return;
20523
20524   gcc_assert (TI_TEMPLATE (ti));
20525
20526   typedef_usage.typedef_decl = type_decl;
20527   typedef_usage.context = scope;
20528   typedef_usage.locus = location;
20529
20530   VEC_safe_push (qualified_typedef_usage_t, gc,
20531                  TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti),
20532                  &typedef_usage);
20533 }
20534
20535 /* Append TYPE_DECL to the template TEMPL.
20536    TEMPL is either a class type, a FUNCTION_DECL or a a TEMPLATE_DECL.
20537    At TEMPL instanciation time, TYPE_DECL will be checked to see
20538    if it can be accessed through SCOPE.
20539    LOCATION is the location of the usage point of TYPE_DECL.
20540
20541    e.g. consider the following code snippet:
20542
20543      class C
20544      {
20545        typedef int myint;
20546      };
20547
20548      template<class U> struct S
20549      {
20550        C::myint mi; // <-- usage point of the typedef C::myint
20551      };
20552
20553      S<char> s;
20554
20555    At S<char> instantiation time, we need to check the access of C::myint
20556    In other words, we need to check the access of the myint typedef through
20557    the C scope. For that purpose, this function will add the myint typedef
20558    and the scope C through which its being accessed to a list of typedefs
20559    tied to the template S. That list will be walked at template instantiation
20560    time and access check performed on each typedefs it contains.
20561    Note that this particular code snippet should yield an error because
20562    myint is private to C.  */
20563
20564 void
20565 append_type_to_template_for_access_check (tree templ,
20566                                           tree type_decl,
20567                                           tree scope,
20568                                           location_t location)
20569 {
20570   qualified_typedef_usage_t *iter;
20571   int i;
20572
20573   gcc_assert (type_decl && (TREE_CODE (type_decl) == TYPE_DECL));
20574
20575   /* Make sure we don't append the type to the template twice.  */
20576   FOR_EACH_VEC_ELT (qualified_typedef_usage_t,
20577                     get_types_needing_access_check (templ),
20578                     i, iter)
20579     if (iter->typedef_decl == type_decl && scope == iter->context)
20580       return;
20581
20582   append_type_to_template_for_access_check_1 (templ, type_decl,
20583                                               scope, location);
20584 }
20585
20586 /* Set up the hash tables for template instantiations.  */
20587
20588 void
20589 init_template_processing (void)
20590 {
20591   decl_specializations = htab_create_ggc (37,
20592                                           hash_specialization,
20593                                           eq_specializations,
20594                                           ggc_free);
20595   type_specializations = htab_create_ggc (37,
20596                                           hash_specialization,
20597                                           eq_specializations,
20598                                           ggc_free);
20599 }
20600
20601 /* Print stats about the template hash tables for -fstats.  */
20602
20603 void
20604 print_template_statistics (void)
20605 {
20606   fprintf (stderr, "decl_specializations: size %ld, %ld elements, "
20607            "%f collisions\n", (long) htab_size (decl_specializations),
20608            (long) htab_elements (decl_specializations),
20609            htab_collisions (decl_specializations));
20610   fprintf (stderr, "type_specializations: size %ld, %ld elements, "
20611            "%f collisions\n", (long) htab_size (type_specializations),
20612            (long) htab_elements (type_specializations),
20613            htab_collisions (type_specializations));
20614 }
20615
20616 #include "gt-cp-pt.h"