Introduce gimple_phi and use it in various places
[official-gcc.git] / gcc / cp / pt.c
blob390e63ee6d4eeba672c6798a95da67ef26b8c90d
1 /* Handle parameterized types (templates) for GNU -*- C++ -*-.
2 Copyright (C) 1992-2014 Free Software Foundation, Inc.
3 Written by Ken Raeburn (raeburn@cygnus.com) while at Watchmaker Computing.
4 Rewritten by Jason Merrill (jason@cygnus.com).
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3, or (at your option)
11 any later version.
13 GCC is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3. If not see
20 <http://www.gnu.org/licenses/>. */
22 /* Known bugs or deficiencies include:
24 all methods must be provided in header files; can't use a source
25 file that contains only the method templates and "just win". */
27 #include "config.h"
28 #include "system.h"
29 #include "coretypes.h"
30 #include "tm.h"
31 #include "tree.h"
32 #include "stringpool.h"
33 #include "varasm.h"
34 #include "attribs.h"
35 #include "stor-layout.h"
36 #include "intl.h"
37 #include "flags.h"
38 #include "cp-tree.h"
39 #include "c-family/c-common.h"
40 #include "c-family/c-objc.h"
41 #include "cp-objcp-common.h"
42 #include "tree-inline.h"
43 #include "decl.h"
44 #include "toplev.h"
45 #include "timevar.h"
46 #include "tree-iterator.h"
47 #include "type-utils.h"
48 #include "gimplify.h"
50 /* The type of functions taking a tree, and some additional data, and
51 returning an int. */
52 typedef int (*tree_fn_t) (tree, void*);
54 /* The PENDING_TEMPLATES is a TREE_LIST of templates whose
55 instantiations have been deferred, either because their definitions
56 were not yet available, or because we were putting off doing the work. */
57 struct GTY ((chain_next ("%h.next"))) pending_template {
58 struct pending_template *next;
59 struct tinst_level *tinst;
62 static GTY(()) struct pending_template *pending_templates;
63 static GTY(()) struct pending_template *last_pending_template;
65 int processing_template_parmlist;
66 static int template_header_count;
68 static GTY(()) tree saved_trees;
69 static vec<int> inline_parm_levels;
71 static GTY(()) struct tinst_level *current_tinst_level;
73 static GTY(()) tree saved_access_scope;
75 /* Live only within one (recursive) call to tsubst_expr. We use
76 this to pass the statement expression node from the STMT_EXPR
77 to the EXPR_STMT that is its result. */
78 static tree cur_stmt_expr;
80 /* True if we've recursed into fn_type_unification too many times. */
81 static bool excessive_deduction_depth;
83 struct GTY((for_user)) spec_entry
85 tree tmpl;
86 tree args;
87 tree spec;
90 struct spec_hasher : ggc_hasher<spec_entry *>
92 static hashval_t hash (spec_entry *);
93 static bool equal (spec_entry *, spec_entry *);
96 static GTY (()) hash_table<spec_hasher> *decl_specializations;
98 static GTY (()) hash_table<spec_hasher> *type_specializations;
100 /* Contains canonical template parameter types. The vector is indexed by
101 the TEMPLATE_TYPE_IDX of the template parameter. Each element is a
102 TREE_LIST, whose TREE_VALUEs contain the canonical template
103 parameters of various types and levels. */
104 static GTY(()) vec<tree, va_gc> *canonical_template_parms;
106 #define UNIFY_ALLOW_NONE 0
107 #define UNIFY_ALLOW_MORE_CV_QUAL 1
108 #define UNIFY_ALLOW_LESS_CV_QUAL 2
109 #define UNIFY_ALLOW_DERIVED 4
110 #define UNIFY_ALLOW_INTEGER 8
111 #define UNIFY_ALLOW_OUTER_LEVEL 16
112 #define UNIFY_ALLOW_OUTER_MORE_CV_QUAL 32
113 #define UNIFY_ALLOW_OUTER_LESS_CV_QUAL 64
115 enum template_base_result {
116 tbr_incomplete_type,
117 tbr_ambiguous_baseclass,
118 tbr_success
121 static void push_access_scope (tree);
122 static void pop_access_scope (tree);
123 static bool resolve_overloaded_unification (tree, tree, tree, tree,
124 unification_kind_t, int,
125 bool);
126 static int try_one_overload (tree, tree, tree, tree, tree,
127 unification_kind_t, int, bool, bool);
128 static int unify (tree, tree, tree, tree, int, bool);
129 static void add_pending_template (tree);
130 static tree reopen_tinst_level (struct tinst_level *);
131 static tree tsubst_initializer_list (tree, tree);
132 static tree get_class_bindings (tree, tree, tree, tree);
133 static tree coerce_template_parms (tree, tree, tree, tsubst_flags_t,
134 bool, bool);
135 static tree coerce_innermost_template_parms (tree, tree, tree, tsubst_flags_t,
136 bool, bool);
137 static void tsubst_enum (tree, tree, tree);
138 static tree add_to_template_args (tree, tree);
139 static tree add_outermost_template_args (tree, tree);
140 static bool check_instantiated_args (tree, tree, tsubst_flags_t);
141 static int maybe_adjust_types_for_deduction (unification_kind_t, tree*, tree*,
142 tree);
143 static int type_unification_real (tree, tree, tree, const tree *,
144 unsigned int, int, unification_kind_t, int,
145 vec<deferred_access_check, va_gc> **,
146 bool);
147 static void note_template_header (int);
148 static tree convert_nontype_argument_function (tree, tree, tsubst_flags_t);
149 static tree convert_nontype_argument (tree, tree, tsubst_flags_t);
150 static tree convert_template_argument (tree, tree, tree,
151 tsubst_flags_t, int, tree);
152 static int for_each_template_parm (tree, tree_fn_t, void*,
153 hash_set<tree> *, bool);
154 static tree expand_template_argument_pack (tree);
155 static tree build_template_parm_index (int, int, int, tree, tree);
156 static bool inline_needs_template_parms (tree, bool);
157 static void push_inline_template_parms_recursive (tree, int);
158 static tree retrieve_local_specialization (tree);
159 static void register_local_specialization (tree, tree);
160 static tree reduce_template_parm_level (tree, tree, int, tree, tsubst_flags_t);
161 static int mark_template_parm (tree, void *);
162 static int template_parm_this_level_p (tree, void *);
163 static tree tsubst_friend_function (tree, tree);
164 static tree tsubst_friend_class (tree, tree);
165 static int can_complete_type_without_circularity (tree);
166 static tree get_bindings (tree, tree, tree, bool);
167 static int template_decl_level (tree);
168 static int check_cv_quals_for_unify (int, tree, tree);
169 static void template_parm_level_and_index (tree, int*, int*);
170 static int unify_pack_expansion (tree, tree, tree,
171 tree, unification_kind_t, bool, bool);
172 static tree tsubst_template_arg (tree, tree, tsubst_flags_t, tree);
173 static tree tsubst_template_args (tree, tree, tsubst_flags_t, tree);
174 static tree tsubst_template_parms (tree, tree, tsubst_flags_t);
175 static void regenerate_decl_from_template (tree, tree);
176 static tree most_specialized_class (tree, tsubst_flags_t);
177 static tree tsubst_aggr_type (tree, tree, tsubst_flags_t, tree, int);
178 static tree tsubst_arg_types (tree, tree, tree, tsubst_flags_t, tree);
179 static tree tsubst_function_type (tree, tree, tsubst_flags_t, tree);
180 static bool check_specialization_scope (void);
181 static tree process_partial_specialization (tree);
182 static void set_current_access_from_decl (tree);
183 static enum template_base_result get_template_base (tree, tree, tree, tree,
184 bool , tree *);
185 static tree try_class_unification (tree, tree, tree, tree, bool);
186 static int coerce_template_template_parms (tree, tree, tsubst_flags_t,
187 tree, tree);
188 static bool template_template_parm_bindings_ok_p (tree, tree);
189 static int template_args_equal (tree, tree);
190 static void tsubst_default_arguments (tree, tsubst_flags_t);
191 static tree for_each_template_parm_r (tree *, int *, void *);
192 static tree copy_default_args_to_explicit_spec_1 (tree, tree);
193 static void copy_default_args_to_explicit_spec (tree);
194 static int invalid_nontype_parm_type_p (tree, tsubst_flags_t);
195 static bool dependent_template_arg_p (tree);
196 static bool any_template_arguments_need_structural_equality_p (tree);
197 static bool dependent_type_p_r (tree);
198 static tree tsubst_expr (tree, tree, tsubst_flags_t, tree, bool);
199 static tree tsubst_copy (tree, tree, tsubst_flags_t, tree);
200 static tree tsubst_pack_expansion (tree, tree, tsubst_flags_t, tree);
201 static tree tsubst_decl (tree, tree, tsubst_flags_t);
202 static void perform_typedefs_access_check (tree tmpl, tree targs);
203 static void append_type_to_template_for_access_check_1 (tree, tree, tree,
204 location_t);
205 static tree listify (tree);
206 static tree listify_autos (tree, tree);
207 static tree template_parm_to_arg (tree t);
208 static tree current_template_args (void);
209 static tree tsubst_template_parm (tree, tree, tsubst_flags_t);
210 static tree instantiate_alias_template (tree, tree, tsubst_flags_t);
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, VAR_DECL for static member variable, or TYPE_DECL for
215 alias template (needed by instantiate_decl). */
217 static void
218 push_access_scope (tree t)
220 gcc_assert (VAR_OR_FUNCTION_DECL_P (t)
221 || TREE_CODE (t) == TYPE_DECL);
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 ();
230 if (TREE_CODE (t) == FUNCTION_DECL)
232 saved_access_scope = tree_cons
233 (NULL_TREE, current_function_decl, saved_access_scope);
234 current_function_decl = t;
238 /* Restore the scope set up by push_access_scope. T is the node we
239 are processing. */
241 static void
242 pop_access_scope (tree t)
244 if (TREE_CODE (t) == FUNCTION_DECL)
246 current_function_decl = TREE_VALUE (saved_access_scope);
247 saved_access_scope = TREE_CHAIN (saved_access_scope);
250 if (DECL_FRIEND_CONTEXT (t) || DECL_CLASS_SCOPE_P (t))
251 pop_nested_class ();
252 else
253 pop_from_top_level ();
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. */
261 tree
262 finish_member_template_decl (tree decl)
264 if (decl == error_mark_node)
265 return error_mark_node;
267 gcc_assert (DECL_P (decl));
269 if (TREE_CODE (decl) == TYPE_DECL)
271 tree type;
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))
280 tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
281 check_member_template (tmpl);
282 return tmpl;
284 return NULL_TREE;
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))
290 if (!DECL_TEMPLATE_SPECIALIZATION (decl))
292 check_member_template (DECL_TI_TEMPLATE (decl));
293 return DECL_TI_TEMPLATE (decl);
295 else
296 return decl;
298 else
299 error ("invalid member template declaration %qD", decl);
301 return error_mark_node;
304 /* Create a template info node. */
306 tree
307 build_template_info (tree template_decl, tree template_args)
309 tree result = make_node (TEMPLATE_INFO);
310 TI_TEMPLATE (result) = template_decl;
311 TI_ARGS (result) = template_args;
312 return result;
315 /* Return the template info node corresponding to T, whatever T is. */
317 tree
318 get_template_info (const_tree t)
320 tree tinfo = NULL_TREE;
322 if (!t || t == error_mark_node)
323 return NULL;
325 if (TREE_CODE (t) == NAMESPACE_DECL)
326 return NULL;
328 if (DECL_P (t) && DECL_LANG_SPECIFIC (t))
329 tinfo = DECL_TEMPLATE_INFO (t);
331 if (!tinfo && DECL_IMPLICIT_TYPEDEF_P (t))
332 t = TREE_TYPE (t);
334 if (OVERLOAD_TYPE_P (t))
335 tinfo = TYPE_TEMPLATE_INFO (t);
336 else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
337 tinfo = TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t);
339 return tinfo;
342 /* Returns the template nesting level of the indicated class TYPE.
344 For example, in:
345 template <class T>
346 struct A
348 template <class U>
349 struct B {};
352 A<T>::B<U> has depth two, while A<T> has depth one.
353 Both A<T>::B<int> and A<int>::B<U> have depth one, if
354 they are instantiations, not specializations.
356 This function is guaranteed to return 0 if passed NULL_TREE so
357 that, for example, `template_class_depth (current_class_type)' is
358 always safe. */
361 template_class_depth (tree type)
363 int depth;
365 for (depth = 0;
366 type && TREE_CODE (type) != NAMESPACE_DECL;
367 type = (TREE_CODE (type) == FUNCTION_DECL)
368 ? CP_DECL_CONTEXT (type) : CP_TYPE_CONTEXT (type))
370 tree tinfo = get_template_info (type);
372 if (tinfo && PRIMARY_TEMPLATE_P (TI_TEMPLATE (tinfo))
373 && uses_template_parms (INNERMOST_TEMPLATE_ARGS (TI_ARGS (tinfo))))
374 ++depth;
377 return depth;
380 /* Subroutine of maybe_begin_member_template_processing.
381 Returns true if processing DECL needs us to push template parms. */
383 static bool
384 inline_needs_template_parms (tree decl, bool nsdmi)
386 if (!decl || (!nsdmi && ! DECL_TEMPLATE_INFO (decl)))
387 return false;
389 return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (most_general_template (decl)))
390 > (processing_template_decl + DECL_TEMPLATE_SPECIALIZATION (decl)));
393 /* Subroutine of maybe_begin_member_template_processing.
394 Push the template parms in PARMS, starting from LEVELS steps into the
395 chain, and ending at the beginning, since template parms are listed
396 innermost first. */
398 static void
399 push_inline_template_parms_recursive (tree parmlist, int levels)
401 tree parms = TREE_VALUE (parmlist);
402 int i;
404 if (levels > 1)
405 push_inline_template_parms_recursive (TREE_CHAIN (parmlist), levels - 1);
407 ++processing_template_decl;
408 current_template_parms
409 = tree_cons (size_int (processing_template_decl),
410 parms, current_template_parms);
411 TEMPLATE_PARMS_FOR_INLINE (current_template_parms) = 1;
413 begin_scope (TREE_VEC_LENGTH (parms) ? sk_template_parms : sk_template_spec,
414 NULL);
415 for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
417 tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
419 if (error_operand_p (parm))
420 continue;
422 gcc_assert (DECL_P (parm));
424 switch (TREE_CODE (parm))
426 case TYPE_DECL:
427 case TEMPLATE_DECL:
428 pushdecl (parm);
429 break;
431 case PARM_DECL:
433 /* Make a CONST_DECL as is done in process_template_parm.
434 It is ugly that we recreate this here; the original
435 version built in process_template_parm is no longer
436 available. */
437 tree decl = build_decl (DECL_SOURCE_LOCATION (parm),
438 CONST_DECL, DECL_NAME (parm),
439 TREE_TYPE (parm));
440 DECL_ARTIFICIAL (decl) = 1;
441 TREE_CONSTANT (decl) = 1;
442 TREE_READONLY (decl) = 1;
443 DECL_INITIAL (decl) = DECL_INITIAL (parm);
444 SET_DECL_TEMPLATE_PARM_P (decl);
445 pushdecl (decl);
447 break;
449 default:
450 gcc_unreachable ();
455 /* Restore the template parameter context for a member template, a
456 friend template defined in a class definition, or a non-template
457 member of template class. */
459 void
460 maybe_begin_member_template_processing (tree decl)
462 tree parms;
463 int levels = 0;
464 bool nsdmi = TREE_CODE (decl) == FIELD_DECL;
466 if (nsdmi)
468 tree ctx = DECL_CONTEXT (decl);
469 decl = (CLASSTYPE_TEMPLATE_INFO (ctx)
470 /* Disregard full specializations (c++/60999). */
471 && uses_template_parms (ctx)
472 ? CLASSTYPE_TI_TEMPLATE (ctx) : NULL_TREE);
475 if (inline_needs_template_parms (decl, nsdmi))
477 parms = DECL_TEMPLATE_PARMS (most_general_template (decl));
478 levels = TMPL_PARMS_DEPTH (parms) - processing_template_decl;
480 if (DECL_TEMPLATE_SPECIALIZATION (decl))
482 --levels;
483 parms = TREE_CHAIN (parms);
486 push_inline_template_parms_recursive (parms, levels);
489 /* Remember how many levels of template parameters we pushed so that
490 we can pop them later. */
491 inline_parm_levels.safe_push (levels);
494 /* Undo the effects of maybe_begin_member_template_processing. */
496 void
497 maybe_end_member_template_processing (void)
499 int i;
500 int last;
502 if (inline_parm_levels.length () == 0)
503 return;
505 last = inline_parm_levels.pop ();
506 for (i = 0; i < last; ++i)
508 --processing_template_decl;
509 current_template_parms = TREE_CHAIN (current_template_parms);
510 poplevel (0, 0, 0);
514 /* Return a new template argument vector which contains all of ARGS,
515 but has as its innermost set of arguments the EXTRA_ARGS. */
517 static tree
518 add_to_template_args (tree args, tree extra_args)
520 tree new_args;
521 int extra_depth;
522 int i;
523 int j;
525 if (args == NULL_TREE || extra_args == error_mark_node)
526 return extra_args;
528 extra_depth = TMPL_ARGS_DEPTH (extra_args);
529 new_args = make_tree_vec (TMPL_ARGS_DEPTH (args) + extra_depth);
531 for (i = 1; i <= TMPL_ARGS_DEPTH (args); ++i)
532 SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (args, i));
534 for (j = 1; j <= extra_depth; ++j, ++i)
535 SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (extra_args, j));
537 return new_args;
540 /* Like add_to_template_args, but only the outermost ARGS are added to
541 the EXTRA_ARGS. In particular, all but TMPL_ARGS_DEPTH
542 (EXTRA_ARGS) levels are added. This function is used to combine
543 the template arguments from a partial instantiation with the
544 template arguments used to attain the full instantiation from the
545 partial instantiation. */
547 static tree
548 add_outermost_template_args (tree args, tree extra_args)
550 tree new_args;
552 /* If there are more levels of EXTRA_ARGS than there are ARGS,
553 something very fishy is going on. */
554 gcc_assert (TMPL_ARGS_DEPTH (args) >= TMPL_ARGS_DEPTH (extra_args));
556 /* If *all* the new arguments will be the EXTRA_ARGS, just return
557 them. */
558 if (TMPL_ARGS_DEPTH (args) == TMPL_ARGS_DEPTH (extra_args))
559 return extra_args;
561 /* For the moment, we make ARGS look like it contains fewer levels. */
562 TREE_VEC_LENGTH (args) -= TMPL_ARGS_DEPTH (extra_args);
564 new_args = add_to_template_args (args, extra_args);
566 /* Now, we restore ARGS to its full dimensions. */
567 TREE_VEC_LENGTH (args) += TMPL_ARGS_DEPTH (extra_args);
569 return new_args;
572 /* Return the N levels of innermost template arguments from the ARGS. */
574 tree
575 get_innermost_template_args (tree args, int n)
577 tree new_args;
578 int extra_levels;
579 int i;
581 gcc_assert (n >= 0);
583 /* If N is 1, just return the innermost set of template arguments. */
584 if (n == 1)
585 return TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args));
587 /* If we're not removing anything, just return the arguments we were
588 given. */
589 extra_levels = TMPL_ARGS_DEPTH (args) - n;
590 gcc_assert (extra_levels >= 0);
591 if (extra_levels == 0)
592 return args;
594 /* Make a new set of arguments, not containing the outer arguments. */
595 new_args = make_tree_vec (n);
596 for (i = 1; i <= n; ++i)
597 SET_TMPL_ARGS_LEVEL (new_args, i,
598 TMPL_ARGS_LEVEL (args, i + extra_levels));
600 return new_args;
603 /* The inverse of get_innermost_template_args: Return all but the innermost
604 EXTRA_LEVELS levels of template arguments from the ARGS. */
606 static tree
607 strip_innermost_template_args (tree args, int extra_levels)
609 tree new_args;
610 int n = TMPL_ARGS_DEPTH (args) - extra_levels;
611 int i;
613 gcc_assert (n >= 0);
615 /* If N is 1, just return the outermost set of template arguments. */
616 if (n == 1)
617 return TMPL_ARGS_LEVEL (args, 1);
619 /* If we're not removing anything, just return the arguments we were
620 given. */
621 gcc_assert (extra_levels >= 0);
622 if (extra_levels == 0)
623 return args;
625 /* Make a new set of arguments, not containing the inner arguments. */
626 new_args = make_tree_vec (n);
627 for (i = 1; i <= n; ++i)
628 SET_TMPL_ARGS_LEVEL (new_args, i,
629 TMPL_ARGS_LEVEL (args, i));
631 return new_args;
634 /* We've got a template header coming up; push to a new level for storing
635 the parms. */
637 void
638 begin_template_parm_list (void)
640 /* We use a non-tag-transparent scope here, which causes pushtag to
641 put tags in this scope, rather than in the enclosing class or
642 namespace scope. This is the right thing, since we want
643 TEMPLATE_DECLS, and not TYPE_DECLS for template classes. For a
644 global template class, push_template_decl handles putting the
645 TEMPLATE_DECL into top-level scope. For a nested template class,
646 e.g.:
648 template <class T> struct S1 {
649 template <class T> struct S2 {};
652 pushtag contains special code to call pushdecl_with_scope on the
653 TEMPLATE_DECL for S2. */
654 begin_scope (sk_template_parms, NULL);
655 ++processing_template_decl;
656 ++processing_template_parmlist;
657 note_template_header (0);
660 /* This routine is called when a specialization is declared. If it is
661 invalid to declare a specialization here, an error is reported and
662 false is returned, otherwise this routine will return true. */
664 static bool
665 check_specialization_scope (void)
667 tree scope = current_scope ();
669 /* [temp.expl.spec]
671 An explicit specialization shall be declared in the namespace of
672 which the template is a member, or, for member templates, in the
673 namespace of which the enclosing class or enclosing class
674 template is a member. An explicit specialization of a member
675 function, member class or static data member of a class template
676 shall be declared in the namespace of which the class template
677 is a member. */
678 if (scope && TREE_CODE (scope) != NAMESPACE_DECL)
680 error ("explicit specialization in non-namespace scope %qD", scope);
681 return false;
684 /* [temp.expl.spec]
686 In an explicit specialization declaration for a member of a class
687 template or a member template that appears in namespace scope,
688 the member template and some of its enclosing class templates may
689 remain unspecialized, except that the declaration shall not
690 explicitly specialize a class member template if its enclosing
691 class templates are not explicitly specialized as well. */
692 if (current_template_parms)
694 error ("enclosing class templates are not explicitly specialized");
695 return false;
698 return true;
701 /* We've just seen template <>. */
703 bool
704 begin_specialization (void)
706 begin_scope (sk_template_spec, NULL);
707 note_template_header (1);
708 return check_specialization_scope ();
711 /* Called at then end of processing a declaration preceded by
712 template<>. */
714 void
715 end_specialization (void)
717 finish_scope ();
718 reset_specialization ();
721 /* Any template <>'s that we have seen thus far are not referring to a
722 function specialization. */
724 void
725 reset_specialization (void)
727 processing_specialization = 0;
728 template_header_count = 0;
731 /* We've just seen a template header. If SPECIALIZATION is nonzero,
732 it was of the form template <>. */
734 static void
735 note_template_header (int specialization)
737 processing_specialization = specialization;
738 template_header_count++;
741 /* We're beginning an explicit instantiation. */
743 void
744 begin_explicit_instantiation (void)
746 gcc_assert (!processing_explicit_instantiation);
747 processing_explicit_instantiation = true;
751 void
752 end_explicit_instantiation (void)
754 gcc_assert (processing_explicit_instantiation);
755 processing_explicit_instantiation = false;
758 /* An explicit specialization or partial specialization of TMPL is being
759 declared. Check that the namespace in which the specialization is
760 occurring is permissible. Returns false iff it is invalid to
761 specialize TMPL in the current namespace. */
763 static bool
764 check_specialization_namespace (tree tmpl)
766 tree tpl_ns = decl_namespace_context (tmpl);
768 /* [tmpl.expl.spec]
770 An explicit specialization shall be declared in the namespace of
771 which the template is a member, or, for member templates, in the
772 namespace of which the enclosing class or enclosing class
773 template is a member. An explicit specialization of a member
774 function, member class or static data member of a class template
775 shall be declared in the namespace of which the class template is
776 a member. */
777 if (current_scope() != DECL_CONTEXT (tmpl)
778 && !at_namespace_scope_p ())
780 error ("specialization of %qD must appear at namespace scope", tmpl);
781 return false;
783 if (is_associated_namespace (current_namespace, tpl_ns))
784 /* Same or super-using namespace. */
785 return true;
786 else
788 permerror (input_location, "specialization of %qD in different namespace", tmpl);
789 permerror (input_location, " from definition of %q+#D", tmpl);
790 return false;
794 /* SPEC is an explicit instantiation. Check that it is valid to
795 perform this explicit instantiation in the current namespace. */
797 static void
798 check_explicit_instantiation_namespace (tree spec)
800 tree ns;
802 /* DR 275: An explicit instantiation shall appear in an enclosing
803 namespace of its template. */
804 ns = decl_namespace_context (spec);
805 if (!is_ancestor (current_namespace, ns))
806 permerror (input_location, "explicit instantiation of %qD in namespace %qD "
807 "(which does not enclose namespace %qD)",
808 spec, current_namespace, ns);
811 /* The TYPE is being declared. If it is a template type, that means it
812 is a partial specialization. Do appropriate error-checking. */
814 tree
815 maybe_process_partial_specialization (tree type)
817 tree context;
819 if (type == error_mark_node)
820 return error_mark_node;
822 /* A lambda that appears in specialization context is not itself a
823 specialization. */
824 if (CLASS_TYPE_P (type) && CLASSTYPE_LAMBDA_EXPR (type))
825 return type;
827 if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
829 error ("name of class shadows template template parameter %qD",
830 TYPE_NAME (type));
831 return error_mark_node;
834 context = TYPE_CONTEXT (type);
836 if (TYPE_ALIAS_P (type))
838 if (TYPE_TEMPLATE_INFO (type)
839 && DECL_ALIAS_TEMPLATE_P (TYPE_TI_TEMPLATE (type)))
840 error ("specialization of alias template %qD",
841 TYPE_TI_TEMPLATE (type));
842 else
843 error ("explicit specialization of non-template %qT", type);
844 return error_mark_node;
846 else if (CLASS_TYPE_P (type) && CLASSTYPE_USE_TEMPLATE (type))
848 /* This is for ordinary explicit specialization and partial
849 specialization of a template class such as:
851 template <> class C<int>;
855 template <class T> class C<T*>;
857 Make sure that `C<int>' and `C<T*>' are implicit instantiations. */
859 if (CLASSTYPE_IMPLICIT_INSTANTIATION (type)
860 && !COMPLETE_TYPE_P (type))
862 if (!check_specialization_namespace (CLASSTYPE_TI_TEMPLATE (type))
863 && !at_namespace_scope_p ())
864 return error_mark_node;
865 SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
866 DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)) = input_location;
867 if (processing_template_decl)
869 if (push_template_decl (TYPE_MAIN_DECL (type))
870 == error_mark_node)
871 return error_mark_node;
874 else if (CLASSTYPE_TEMPLATE_INSTANTIATION (type))
875 error ("specialization of %qT after instantiation", type);
876 else if (errorcount && !processing_specialization
877 && CLASSTYPE_TEMPLATE_SPECIALIZATION (type)
878 && !uses_template_parms (CLASSTYPE_TI_ARGS (type)))
879 /* Trying to define a specialization either without a template<> header
880 or in an inappropriate place. We've already given an error, so just
881 bail now so we don't actually define the specialization. */
882 return error_mark_node;
884 else if (CLASS_TYPE_P (type)
885 && !CLASSTYPE_USE_TEMPLATE (type)
886 && CLASSTYPE_TEMPLATE_INFO (type)
887 && context && CLASS_TYPE_P (context)
888 && CLASSTYPE_TEMPLATE_INFO (context))
890 /* This is for an explicit specialization of member class
891 template according to [temp.expl.spec/18]:
893 template <> template <class U> class C<int>::D;
895 The context `C<int>' must be an implicit instantiation.
896 Otherwise this is just a member class template declared
897 earlier like:
899 template <> class C<int> { template <class U> class D; };
900 template <> template <class U> class C<int>::D;
902 In the first case, `C<int>::D' is a specialization of `C<T>::D'
903 while in the second case, `C<int>::D' is a primary template
904 and `C<T>::D' may not exist. */
906 if (CLASSTYPE_IMPLICIT_INSTANTIATION (context)
907 && !COMPLETE_TYPE_P (type))
909 tree t;
910 tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
912 if (current_namespace
913 != decl_namespace_context (tmpl))
915 permerror (input_location, "specializing %q#T in different namespace", type);
916 permerror (input_location, " from definition of %q+#D", tmpl);
919 /* Check for invalid specialization after instantiation:
921 template <> template <> class C<int>::D<int>;
922 template <> template <class U> class C<int>::D; */
924 for (t = DECL_TEMPLATE_INSTANTIATIONS (tmpl);
925 t; t = TREE_CHAIN (t))
927 tree inst = TREE_VALUE (t);
928 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (inst)
929 || !COMPLETE_OR_OPEN_TYPE_P (inst))
931 /* We already have a full specialization of this partial
932 instantiation, or a full specialization has been
933 looked up but not instantiated. Reassign it to the
934 new member specialization template. */
935 spec_entry elt;
936 spec_entry *entry;
938 elt.tmpl = most_general_template (tmpl);
939 elt.args = CLASSTYPE_TI_ARGS (inst);
940 elt.spec = inst;
942 type_specializations->remove_elt (&elt);
944 elt.tmpl = tmpl;
945 elt.args = INNERMOST_TEMPLATE_ARGS (elt.args);
947 spec_entry **slot
948 = type_specializations->find_slot (&elt, INSERT);
949 entry = ggc_alloc<spec_entry> ();
950 *entry = elt;
951 *slot = entry;
953 else
954 /* But if we've had an implicit instantiation, that's a
955 problem ([temp.expl.spec]/6). */
956 error ("specialization %qT after instantiation %qT",
957 type, inst);
960 /* Mark TYPE as a specialization. And as a result, we only
961 have one level of template argument for the innermost
962 class template. */
963 SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
964 DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)) = input_location;
965 CLASSTYPE_TI_ARGS (type)
966 = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type));
969 else if (processing_specialization)
971 /* Someday C++0x may allow for enum template specialization. */
972 if (cxx_dialect > cxx98 && TREE_CODE (type) == ENUMERAL_TYPE
973 && CLASS_TYPE_P (context) && CLASSTYPE_USE_TEMPLATE (context))
974 pedwarn (input_location, OPT_Wpedantic, "template specialization "
975 "of %qD not allowed by ISO C++", type);
976 else
978 error ("explicit specialization of non-template %qT", type);
979 return error_mark_node;
983 return type;
986 /* Returns nonzero if we can optimize the retrieval of specializations
987 for TMPL, a TEMPLATE_DECL. In particular, for such a template, we
988 do not use DECL_TEMPLATE_SPECIALIZATIONS at all. */
990 static inline bool
991 optimize_specialization_lookup_p (tree tmpl)
993 return (DECL_FUNCTION_TEMPLATE_P (tmpl)
994 && DECL_CLASS_SCOPE_P (tmpl)
995 /* DECL_CLASS_SCOPE_P holds of T::f even if T is a template
996 parameter. */
997 && CLASS_TYPE_P (DECL_CONTEXT (tmpl))
998 /* The optimized lookup depends on the fact that the
999 template arguments for the member function template apply
1000 purely to the containing class, which is not true if the
1001 containing class is an explicit or partial
1002 specialization. */
1003 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (tmpl))
1004 && !DECL_MEMBER_TEMPLATE_P (tmpl)
1005 && !DECL_CONV_FN_P (tmpl)
1006 /* It is possible to have a template that is not a member
1007 template and is not a member of a template class:
1009 template <typename T>
1010 struct S { friend A::f(); };
1012 Here, the friend function is a template, but the context does
1013 not have template information. The optimized lookup relies
1014 on having ARGS be the template arguments for both the class
1015 and the function template. */
1016 && !DECL_FRIEND_P (DECL_TEMPLATE_RESULT (tmpl)));
1019 /* Retrieve the specialization (in the sense of [temp.spec] - a
1020 specialization is either an instantiation or an explicit
1021 specialization) of TMPL for the given template ARGS. If there is
1022 no such specialization, return NULL_TREE. The ARGS are a vector of
1023 arguments, or a vector of vectors of arguments, in the case of
1024 templates with more than one level of parameters.
1026 If TMPL is a type template and CLASS_SPECIALIZATIONS_P is true,
1027 then we search for a partial specialization matching ARGS. This
1028 parameter is ignored if TMPL is not a class template.
1030 We can also look up a FIELD_DECL, if it is a lambda capture pack; the
1031 result is a NONTYPE_ARGUMENT_PACK. */
1033 static tree
1034 retrieve_specialization (tree tmpl, tree args, hashval_t hash)
1036 if (tmpl == NULL_TREE)
1037 return NULL_TREE;
1039 if (args == error_mark_node)
1040 return NULL_TREE;
1042 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL
1043 || TREE_CODE (tmpl) == FIELD_DECL);
1045 /* There should be as many levels of arguments as there are
1046 levels of parameters. */
1047 gcc_assert (TMPL_ARGS_DEPTH (args)
1048 == (TREE_CODE (tmpl) == TEMPLATE_DECL
1049 ? TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl))
1050 : template_class_depth (DECL_CONTEXT (tmpl))));
1052 if (optimize_specialization_lookup_p (tmpl))
1054 tree class_template;
1055 tree class_specialization;
1056 vec<tree, va_gc> *methods;
1057 tree fns;
1058 int idx;
1060 /* The template arguments actually apply to the containing
1061 class. Find the class specialization with those
1062 arguments. */
1063 class_template = CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (tmpl));
1064 class_specialization
1065 = retrieve_specialization (class_template, args, 0);
1066 if (!class_specialization)
1067 return NULL_TREE;
1068 /* Now, find the appropriate entry in the CLASSTYPE_METHOD_VEC
1069 for the specialization. */
1070 idx = class_method_index_for_fn (class_specialization, tmpl);
1071 if (idx == -1)
1072 return NULL_TREE;
1073 /* Iterate through the methods with the indicated name, looking
1074 for the one that has an instance of TMPL. */
1075 methods = CLASSTYPE_METHOD_VEC (class_specialization);
1076 for (fns = (*methods)[idx]; fns; fns = OVL_NEXT (fns))
1078 tree fn = OVL_CURRENT (fns);
1079 if (DECL_TEMPLATE_INFO (fn) && DECL_TI_TEMPLATE (fn) == tmpl
1080 /* using-declarations can add base methods to the method vec,
1081 and we don't want those here. */
1082 && DECL_CONTEXT (fn) == class_specialization)
1083 return fn;
1085 return NULL_TREE;
1087 else
1089 spec_entry *found;
1090 spec_entry elt;
1091 hash_table<spec_hasher> *specializations;
1093 elt.tmpl = tmpl;
1094 elt.args = args;
1095 elt.spec = NULL_TREE;
1097 if (DECL_CLASS_TEMPLATE_P (tmpl))
1098 specializations = type_specializations;
1099 else
1100 specializations = decl_specializations;
1102 if (hash == 0)
1103 hash = spec_hasher::hash (&elt);
1104 found = specializations->find_with_hash (&elt, hash);
1105 if (found)
1106 return found->spec;
1109 return NULL_TREE;
1112 /* Like retrieve_specialization, but for local declarations. */
1114 static tree
1115 retrieve_local_specialization (tree tmpl)
1117 if (local_specializations == NULL)
1118 return NULL_TREE;
1120 tree *slot = local_specializations->get (tmpl);
1121 return slot ? *slot : NULL_TREE;
1124 /* Returns nonzero iff DECL is a specialization of TMPL. */
1127 is_specialization_of (tree decl, tree tmpl)
1129 tree t;
1131 if (TREE_CODE (decl) == FUNCTION_DECL)
1133 for (t = decl;
1134 t != NULL_TREE;
1135 t = DECL_TEMPLATE_INFO (t) ? DECL_TI_TEMPLATE (t) : NULL_TREE)
1136 if (t == tmpl)
1137 return 1;
1139 else
1141 gcc_assert (TREE_CODE (decl) == TYPE_DECL);
1143 for (t = TREE_TYPE (decl);
1144 t != NULL_TREE;
1145 t = CLASSTYPE_USE_TEMPLATE (t)
1146 ? TREE_TYPE (CLASSTYPE_TI_TEMPLATE (t)) : NULL_TREE)
1147 if (same_type_ignoring_top_level_qualifiers_p (t, TREE_TYPE (tmpl)))
1148 return 1;
1151 return 0;
1154 /* Returns nonzero iff DECL is a specialization of friend declaration
1155 FRIEND_DECL according to [temp.friend]. */
1157 bool
1158 is_specialization_of_friend (tree decl, tree friend_decl)
1160 bool need_template = true;
1161 int template_depth;
1163 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
1164 || TREE_CODE (decl) == TYPE_DECL);
1166 /* For [temp.friend/6] when FRIEND_DECL is an ordinary member function
1167 of a template class, we want to check if DECL is a specialization
1168 if this. */
1169 if (TREE_CODE (friend_decl) == FUNCTION_DECL
1170 && DECL_TEMPLATE_INFO (friend_decl)
1171 && !DECL_USE_TEMPLATE (friend_decl))
1173 /* We want a TEMPLATE_DECL for `is_specialization_of'. */
1174 friend_decl = DECL_TI_TEMPLATE (friend_decl);
1175 need_template = false;
1177 else if (TREE_CODE (friend_decl) == TEMPLATE_DECL
1178 && !PRIMARY_TEMPLATE_P (friend_decl))
1179 need_template = false;
1181 /* There is nothing to do if this is not a template friend. */
1182 if (TREE_CODE (friend_decl) != TEMPLATE_DECL)
1183 return false;
1185 if (is_specialization_of (decl, friend_decl))
1186 return true;
1188 /* [temp.friend/6]
1189 A member of a class template may be declared to be a friend of a
1190 non-template class. In this case, the corresponding member of
1191 every specialization of the class template is a friend of the
1192 class granting friendship.
1194 For example, given a template friend declaration
1196 template <class T> friend void A<T>::f();
1198 the member function below is considered a friend
1200 template <> struct A<int> {
1201 void f();
1204 For this type of template friend, TEMPLATE_DEPTH below will be
1205 nonzero. To determine if DECL is a friend of FRIEND, we first
1206 check if the enclosing class is a specialization of another. */
1208 template_depth = template_class_depth (CP_DECL_CONTEXT (friend_decl));
1209 if (template_depth
1210 && DECL_CLASS_SCOPE_P (decl)
1211 && is_specialization_of (TYPE_NAME (DECL_CONTEXT (decl)),
1212 CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (friend_decl))))
1214 /* Next, we check the members themselves. In order to handle
1215 a few tricky cases, such as when FRIEND_DECL's are
1217 template <class T> friend void A<T>::g(T t);
1218 template <class T> template <T t> friend void A<T>::h();
1220 and DECL's are
1222 void A<int>::g(int);
1223 template <int> void A<int>::h();
1225 we need to figure out ARGS, the template arguments from
1226 the context of DECL. This is required for template substitution
1227 of `T' in the function parameter of `g' and template parameter
1228 of `h' in the above examples. Here ARGS corresponds to `int'. */
1230 tree context = DECL_CONTEXT (decl);
1231 tree args = NULL_TREE;
1232 int current_depth = 0;
1234 while (current_depth < template_depth)
1236 if (CLASSTYPE_TEMPLATE_INFO (context))
1238 if (current_depth == 0)
1239 args = TYPE_TI_ARGS (context);
1240 else
1241 args = add_to_template_args (TYPE_TI_ARGS (context), args);
1242 current_depth++;
1244 context = TYPE_CONTEXT (context);
1247 if (TREE_CODE (decl) == FUNCTION_DECL)
1249 bool is_template;
1250 tree friend_type;
1251 tree decl_type;
1252 tree friend_args_type;
1253 tree decl_args_type;
1255 /* Make sure that both DECL and FRIEND_DECL are templates or
1256 non-templates. */
1257 is_template = DECL_TEMPLATE_INFO (decl)
1258 && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl));
1259 if (need_template ^ is_template)
1260 return false;
1261 else if (is_template)
1263 /* If both are templates, check template parameter list. */
1264 tree friend_parms
1265 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1266 args, tf_none);
1267 if (!comp_template_parms
1268 (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (decl)),
1269 friend_parms))
1270 return false;
1272 decl_type = TREE_TYPE (DECL_TI_TEMPLATE (decl));
1274 else
1275 decl_type = TREE_TYPE (decl);
1277 friend_type = tsubst_function_type (TREE_TYPE (friend_decl), args,
1278 tf_none, NULL_TREE);
1279 if (friend_type == error_mark_node)
1280 return false;
1282 /* Check if return types match. */
1283 if (!same_type_p (TREE_TYPE (decl_type), TREE_TYPE (friend_type)))
1284 return false;
1286 /* Check if function parameter types match, ignoring the
1287 `this' parameter. */
1288 friend_args_type = TYPE_ARG_TYPES (friend_type);
1289 decl_args_type = TYPE_ARG_TYPES (decl_type);
1290 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (friend_decl))
1291 friend_args_type = TREE_CHAIN (friend_args_type);
1292 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1293 decl_args_type = TREE_CHAIN (decl_args_type);
1295 return compparms (decl_args_type, friend_args_type);
1297 else
1299 /* DECL is a TYPE_DECL */
1300 bool is_template;
1301 tree decl_type = TREE_TYPE (decl);
1303 /* Make sure that both DECL and FRIEND_DECL are templates or
1304 non-templates. */
1305 is_template
1306 = CLASSTYPE_TEMPLATE_INFO (decl_type)
1307 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (decl_type));
1309 if (need_template ^ is_template)
1310 return false;
1311 else if (is_template)
1313 tree friend_parms;
1314 /* If both are templates, check the name of the two
1315 TEMPLATE_DECL's first because is_friend didn't. */
1316 if (DECL_NAME (CLASSTYPE_TI_TEMPLATE (decl_type))
1317 != DECL_NAME (friend_decl))
1318 return false;
1320 /* Now check template parameter list. */
1321 friend_parms
1322 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1323 args, tf_none);
1324 return comp_template_parms
1325 (DECL_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (decl_type)),
1326 friend_parms);
1328 else
1329 return (DECL_NAME (decl)
1330 == DECL_NAME (friend_decl));
1333 return false;
1336 /* Register the specialization SPEC as a specialization of TMPL with
1337 the indicated ARGS. IS_FRIEND indicates whether the specialization
1338 is actually just a friend declaration. Returns SPEC, or an
1339 equivalent prior declaration, if available.
1341 We also store instantiations of field packs in the hash table, even
1342 though they are not themselves templates, to make lookup easier. */
1344 static tree
1345 register_specialization (tree spec, tree tmpl, tree args, bool is_friend,
1346 hashval_t hash)
1348 tree fn;
1349 spec_entry **slot = NULL;
1350 spec_entry elt;
1352 gcc_assert ((TREE_CODE (tmpl) == TEMPLATE_DECL && DECL_P (spec))
1353 || (TREE_CODE (tmpl) == FIELD_DECL
1354 && TREE_CODE (spec) == NONTYPE_ARGUMENT_PACK));
1356 if (TREE_CODE (spec) == FUNCTION_DECL
1357 && uses_template_parms (DECL_TI_ARGS (spec)))
1358 /* This is the FUNCTION_DECL for a partial instantiation. Don't
1359 register it; we want the corresponding TEMPLATE_DECL instead.
1360 We use `uses_template_parms (DECL_TI_ARGS (spec))' rather than
1361 the more obvious `uses_template_parms (spec)' to avoid problems
1362 with default function arguments. In particular, given
1363 something like this:
1365 template <class T> void f(T t1, T t = T())
1367 the default argument expression is not substituted for in an
1368 instantiation unless and until it is actually needed. */
1369 return spec;
1371 if (optimize_specialization_lookup_p (tmpl))
1372 /* We don't put these specializations in the hash table, but we might
1373 want to give an error about a mismatch. */
1374 fn = retrieve_specialization (tmpl, args, 0);
1375 else
1377 elt.tmpl = tmpl;
1378 elt.args = args;
1379 elt.spec = spec;
1381 if (hash == 0)
1382 hash = spec_hasher::hash (&elt);
1384 slot =
1385 decl_specializations->find_slot_with_hash (&elt, hash, INSERT);
1386 if (*slot)
1387 fn = ((spec_entry *) *slot)->spec;
1388 else
1389 fn = NULL_TREE;
1392 /* We can sometimes try to re-register a specialization that we've
1393 already got. In particular, regenerate_decl_from_template calls
1394 duplicate_decls which will update the specialization list. But,
1395 we'll still get called again here anyhow. It's more convenient
1396 to simply allow this than to try to prevent it. */
1397 if (fn == spec)
1398 return spec;
1399 else if (fn && DECL_TEMPLATE_SPECIALIZATION (spec))
1401 if (DECL_TEMPLATE_INSTANTIATION (fn))
1403 if (DECL_ODR_USED (fn)
1404 || DECL_EXPLICIT_INSTANTIATION (fn))
1406 error ("specialization of %qD after instantiation",
1407 fn);
1408 return error_mark_node;
1410 else
1412 tree clone;
1413 /* This situation should occur only if the first
1414 specialization is an implicit instantiation, the
1415 second is an explicit specialization, and the
1416 implicit instantiation has not yet been used. That
1417 situation can occur if we have implicitly
1418 instantiated a member function and then specialized
1419 it later.
1421 We can also wind up here if a friend declaration that
1422 looked like an instantiation turns out to be a
1423 specialization:
1425 template <class T> void foo(T);
1426 class S { friend void foo<>(int) };
1427 template <> void foo(int);
1429 We transform the existing DECL in place so that any
1430 pointers to it become pointers to the updated
1431 declaration.
1433 If there was a definition for the template, but not
1434 for the specialization, we want this to look as if
1435 there were no definition, and vice versa. */
1436 DECL_INITIAL (fn) = NULL_TREE;
1437 duplicate_decls (spec, fn, is_friend);
1438 /* The call to duplicate_decls will have applied
1439 [temp.expl.spec]:
1441 An explicit specialization of a function template
1442 is inline only if it is explicitly declared to be,
1443 and independently of whether its function template
1446 to the primary function; now copy the inline bits to
1447 the various clones. */
1448 FOR_EACH_CLONE (clone, fn)
1450 DECL_DECLARED_INLINE_P (clone)
1451 = DECL_DECLARED_INLINE_P (fn);
1452 DECL_SOURCE_LOCATION (clone)
1453 = DECL_SOURCE_LOCATION (fn);
1454 DECL_DELETED_FN (clone)
1455 = DECL_DELETED_FN (fn);
1457 check_specialization_namespace (tmpl);
1459 return fn;
1462 else if (DECL_TEMPLATE_SPECIALIZATION (fn))
1464 if (!duplicate_decls (spec, fn, is_friend) && DECL_INITIAL (spec))
1465 /* Dup decl failed, but this is a new definition. Set the
1466 line number so any errors match this new
1467 definition. */
1468 DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (spec);
1470 return fn;
1473 else if (fn)
1474 return duplicate_decls (spec, fn, is_friend);
1476 /* A specialization must be declared in the same namespace as the
1477 template it is specializing. */
1478 if (DECL_P (spec) && DECL_TEMPLATE_SPECIALIZATION (spec)
1479 && !check_specialization_namespace (tmpl))
1480 DECL_CONTEXT (spec) = DECL_CONTEXT (tmpl);
1482 if (slot != NULL /* !optimize_specialization_lookup_p (tmpl) */)
1484 spec_entry *entry = ggc_alloc<spec_entry> ();
1485 gcc_assert (tmpl && args && spec);
1486 *entry = elt;
1487 *slot = entry;
1488 if (TREE_CODE (spec) == FUNCTION_DECL && DECL_NAMESPACE_SCOPE_P (spec)
1489 && PRIMARY_TEMPLATE_P (tmpl)
1490 && DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (tmpl)) == NULL_TREE)
1491 /* TMPL is a forward declaration of a template function; keep a list
1492 of all specializations in case we need to reassign them to a friend
1493 template later in tsubst_friend_function. */
1494 DECL_TEMPLATE_INSTANTIATIONS (tmpl)
1495 = tree_cons (args, spec, DECL_TEMPLATE_INSTANTIATIONS (tmpl));
1498 return spec;
1501 /* Returns true iff two spec_entry nodes are equivalent. Only compares the
1502 TMPL and ARGS members, ignores SPEC. */
1504 int comparing_specializations;
1506 bool
1507 spec_hasher::equal (spec_entry *e1, spec_entry *e2)
1509 int equal;
1511 ++comparing_specializations;
1512 equal = (e1->tmpl == e2->tmpl
1513 && comp_template_args (e1->args, e2->args));
1514 --comparing_specializations;
1516 return equal;
1519 /* Returns a hash for a template TMPL and template arguments ARGS. */
1521 static hashval_t
1522 hash_tmpl_and_args (tree tmpl, tree args)
1524 hashval_t val = DECL_UID (tmpl);
1525 return iterative_hash_template_arg (args, val);
1528 /* Returns a hash for a spec_entry node based on the TMPL and ARGS members,
1529 ignoring SPEC. */
1531 hashval_t
1532 spec_hasher::hash (spec_entry *e)
1534 return hash_tmpl_and_args (e->tmpl, e->args);
1537 /* Recursively calculate a hash value for a template argument ARG, for use
1538 in the hash tables of template specializations. */
1540 hashval_t
1541 iterative_hash_template_arg (tree arg, hashval_t val)
1543 unsigned HOST_WIDE_INT i;
1544 enum tree_code code;
1545 char tclass;
1547 if (arg == NULL_TREE)
1548 return iterative_hash_object (arg, val);
1550 if (!TYPE_P (arg))
1551 STRIP_NOPS (arg);
1553 if (TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
1554 /* We can get one of these when re-hashing a previous entry in the middle
1555 of substituting into a pack expansion. Just look through it. */
1556 arg = ARGUMENT_PACK_SELECT_FROM_PACK (arg);
1558 code = TREE_CODE (arg);
1559 tclass = TREE_CODE_CLASS (code);
1561 val = iterative_hash_object (code, val);
1563 switch (code)
1565 case ERROR_MARK:
1566 return val;
1568 case IDENTIFIER_NODE:
1569 return iterative_hash_object (IDENTIFIER_HASH_VALUE (arg), val);
1571 case TREE_VEC:
1573 int i, len = TREE_VEC_LENGTH (arg);
1574 for (i = 0; i < len; ++i)
1575 val = iterative_hash_template_arg (TREE_VEC_ELT (arg, i), val);
1576 return val;
1579 case TYPE_PACK_EXPANSION:
1580 case EXPR_PACK_EXPANSION:
1581 val = iterative_hash_template_arg (PACK_EXPANSION_PATTERN (arg), val);
1582 return iterative_hash_template_arg (PACK_EXPANSION_EXTRA_ARGS (arg), val);
1584 case TYPE_ARGUMENT_PACK:
1585 case NONTYPE_ARGUMENT_PACK:
1586 return iterative_hash_template_arg (ARGUMENT_PACK_ARGS (arg), val);
1588 case TREE_LIST:
1589 for (; arg; arg = TREE_CHAIN (arg))
1590 val = iterative_hash_template_arg (TREE_VALUE (arg), val);
1591 return val;
1593 case OVERLOAD:
1594 for (; arg; arg = OVL_NEXT (arg))
1595 val = iterative_hash_template_arg (OVL_CURRENT (arg), val);
1596 return val;
1598 case CONSTRUCTOR:
1600 tree field, value;
1601 iterative_hash_template_arg (TREE_TYPE (arg), val);
1602 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (arg), i, field, value)
1604 val = iterative_hash_template_arg (field, val);
1605 val = iterative_hash_template_arg (value, val);
1607 return val;
1610 case PARM_DECL:
1611 if (!DECL_ARTIFICIAL (arg))
1613 val = iterative_hash_object (DECL_PARM_INDEX (arg), val);
1614 val = iterative_hash_object (DECL_PARM_LEVEL (arg), val);
1616 return iterative_hash_template_arg (TREE_TYPE (arg), val);
1618 case TARGET_EXPR:
1619 return iterative_hash_template_arg (TARGET_EXPR_INITIAL (arg), val);
1621 case PTRMEM_CST:
1622 val = iterative_hash_template_arg (PTRMEM_CST_CLASS (arg), val);
1623 return iterative_hash_template_arg (PTRMEM_CST_MEMBER (arg), val);
1625 case TEMPLATE_PARM_INDEX:
1626 val = iterative_hash_template_arg
1627 (TREE_TYPE (TEMPLATE_PARM_DECL (arg)), val);
1628 val = iterative_hash_object (TEMPLATE_PARM_LEVEL (arg), val);
1629 return iterative_hash_object (TEMPLATE_PARM_IDX (arg), val);
1631 case TRAIT_EXPR:
1632 val = iterative_hash_object (TRAIT_EXPR_KIND (arg), val);
1633 val = iterative_hash_template_arg (TRAIT_EXPR_TYPE1 (arg), val);
1634 return iterative_hash_template_arg (TRAIT_EXPR_TYPE2 (arg), val);
1636 case BASELINK:
1637 val = iterative_hash_template_arg (BINFO_TYPE (BASELINK_BINFO (arg)),
1638 val);
1639 return iterative_hash_template_arg (DECL_NAME (get_first_fn (arg)),
1640 val);
1642 case MODOP_EXPR:
1643 val = iterative_hash_template_arg (TREE_OPERAND (arg, 0), val);
1644 code = TREE_CODE (TREE_OPERAND (arg, 1));
1645 val = iterative_hash_object (code, val);
1646 return iterative_hash_template_arg (TREE_OPERAND (arg, 2), val);
1648 case LAMBDA_EXPR:
1649 /* A lambda can't appear in a template arg, but don't crash on
1650 erroneous input. */
1651 gcc_assert (seen_error ());
1652 return val;
1654 case CAST_EXPR:
1655 case IMPLICIT_CONV_EXPR:
1656 case STATIC_CAST_EXPR:
1657 case REINTERPRET_CAST_EXPR:
1658 case CONST_CAST_EXPR:
1659 case DYNAMIC_CAST_EXPR:
1660 case NEW_EXPR:
1661 val = iterative_hash_template_arg (TREE_TYPE (arg), val);
1662 /* Now hash operands as usual. */
1663 break;
1665 default:
1666 break;
1669 switch (tclass)
1671 case tcc_type:
1672 if (TYPE_CANONICAL (arg))
1673 return iterative_hash_object (TYPE_HASH (TYPE_CANONICAL (arg)),
1674 val);
1675 else if (TREE_CODE (arg) == DECLTYPE_TYPE)
1676 return iterative_hash_template_arg (DECLTYPE_TYPE_EXPR (arg), val);
1677 /* Otherwise just compare the types during lookup. */
1678 return val;
1680 case tcc_declaration:
1681 case tcc_constant:
1682 return iterative_hash_expr (arg, val);
1684 default:
1685 gcc_assert (IS_EXPR_CODE_CLASS (tclass));
1687 unsigned n = cp_tree_operand_length (arg);
1688 for (i = 0; i < n; ++i)
1689 val = iterative_hash_template_arg (TREE_OPERAND (arg, i), val);
1690 return val;
1693 gcc_unreachable ();
1694 return 0;
1697 /* Unregister the specialization SPEC as a specialization of TMPL.
1698 Replace it with NEW_SPEC, if NEW_SPEC is non-NULL. Returns true
1699 if the SPEC was listed as a specialization of TMPL.
1701 Note that SPEC has been ggc_freed, so we can't look inside it. */
1703 bool
1704 reregister_specialization (tree spec, tree tinfo, tree new_spec)
1706 spec_entry *entry;
1707 spec_entry elt;
1709 elt.tmpl = most_general_template (TI_TEMPLATE (tinfo));
1710 elt.args = TI_ARGS (tinfo);
1711 elt.spec = NULL_TREE;
1713 entry = decl_specializations->find (&elt);
1714 if (entry != NULL)
1716 gcc_assert (entry->spec == spec || entry->spec == new_spec);
1717 gcc_assert (new_spec != NULL_TREE);
1718 entry->spec = new_spec;
1719 return 1;
1722 return 0;
1725 /* Like register_specialization, but for local declarations. We are
1726 registering SPEC, an instantiation of TMPL. */
1728 static void
1729 register_local_specialization (tree spec, tree tmpl)
1731 local_specializations->put (tmpl, spec);
1734 /* TYPE is a class type. Returns true if TYPE is an explicitly
1735 specialized class. */
1737 bool
1738 explicit_class_specialization_p (tree type)
1740 if (!CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
1741 return false;
1742 return !uses_template_parms (CLASSTYPE_TI_ARGS (type));
1745 /* Print the list of functions at FNS, going through all the overloads
1746 for each element of the list. Alternatively, FNS can not be a
1747 TREE_LIST, in which case it will be printed together with all the
1748 overloads.
1750 MORE and *STR should respectively be FALSE and NULL when the function
1751 is called from the outside. They are used internally on recursive
1752 calls. print_candidates manages the two parameters and leaves NULL
1753 in *STR when it ends. */
1755 static void
1756 print_candidates_1 (tree fns, bool more, const char **str)
1758 tree fn, fn2;
1759 char *spaces = NULL;
1761 for (fn = fns; fn; fn = OVL_NEXT (fn))
1762 if (TREE_CODE (fn) == TREE_LIST)
1764 for (fn2 = fn; fn2 != NULL_TREE; fn2 = TREE_CHAIN (fn2))
1765 print_candidates_1 (TREE_VALUE (fn2),
1766 TREE_CHAIN (fn2) || more, str);
1768 else
1770 tree cand = OVL_CURRENT (fn);
1771 if (!*str)
1773 /* Pick the prefix string. */
1774 if (!more && !OVL_NEXT (fns))
1776 inform (DECL_SOURCE_LOCATION (cand),
1777 "candidate is: %#D", cand);
1778 continue;
1781 *str = _("candidates are:");
1782 spaces = get_spaces (*str);
1784 inform (DECL_SOURCE_LOCATION (cand), "%s %#D", *str, cand);
1785 *str = spaces ? spaces : *str;
1788 if (!more)
1790 free (spaces);
1791 *str = NULL;
1795 /* Print the list of candidate FNS in an error message. FNS can also
1796 be a TREE_LIST of non-functions in the case of an ambiguous lookup. */
1798 void
1799 print_candidates (tree fns)
1801 const char *str = NULL;
1802 print_candidates_1 (fns, false, &str);
1803 gcc_assert (str == NULL);
1806 /* Returns the template (one of the functions given by TEMPLATE_ID)
1807 which can be specialized to match the indicated DECL with the
1808 explicit template args given in TEMPLATE_ID. The DECL may be
1809 NULL_TREE if none is available. In that case, the functions in
1810 TEMPLATE_ID are non-members.
1812 If NEED_MEMBER_TEMPLATE is nonzero the function is known to be a
1813 specialization of a member template.
1815 The TEMPLATE_COUNT is the number of references to qualifying
1816 template classes that appeared in the name of the function. See
1817 check_explicit_specialization for a more accurate description.
1819 TSK indicates what kind of template declaration (if any) is being
1820 declared. TSK_TEMPLATE indicates that the declaration given by
1821 DECL, though a FUNCTION_DECL, has template parameters, and is
1822 therefore a template function.
1824 The template args (those explicitly specified and those deduced)
1825 are output in a newly created vector *TARGS_OUT.
1827 If it is impossible to determine the result, an error message is
1828 issued. The error_mark_node is returned to indicate failure. */
1830 static tree
1831 determine_specialization (tree template_id,
1832 tree decl,
1833 tree* targs_out,
1834 int need_member_template,
1835 int template_count,
1836 tmpl_spec_kind tsk)
1838 tree fns;
1839 tree targs;
1840 tree explicit_targs;
1841 tree candidates = NULL_TREE;
1842 /* A TREE_LIST of templates of which DECL may be a specialization.
1843 The TREE_VALUE of each node is a TEMPLATE_DECL. The
1844 corresponding TREE_PURPOSE is the set of template arguments that,
1845 when used to instantiate the template, would produce a function
1846 with the signature of DECL. */
1847 tree templates = NULL_TREE;
1848 int header_count;
1849 cp_binding_level *b;
1851 *targs_out = NULL_TREE;
1853 if (template_id == error_mark_node || decl == error_mark_node)
1854 return error_mark_node;
1856 /* We shouldn't be specializing a member template of an
1857 unspecialized class template; we already gave an error in
1858 check_specialization_scope, now avoid crashing. */
1859 if (template_count && DECL_CLASS_SCOPE_P (decl)
1860 && template_class_depth (DECL_CONTEXT (decl)) > 0)
1862 gcc_assert (errorcount);
1863 return error_mark_node;
1866 fns = TREE_OPERAND (template_id, 0);
1867 explicit_targs = TREE_OPERAND (template_id, 1);
1869 if (fns == error_mark_node)
1870 return error_mark_node;
1872 /* Check for baselinks. */
1873 if (BASELINK_P (fns))
1874 fns = BASELINK_FUNCTIONS (fns);
1876 if (TREE_CODE (decl) == FUNCTION_DECL && !is_overloaded_fn (fns))
1878 error ("%qD is not a function template", fns);
1879 return error_mark_node;
1881 else if (VAR_P (decl) && !variable_template_p (fns))
1883 error ("%qD is not a variable template", fns);
1884 return error_mark_node;
1887 /* Count the number of template headers specified for this
1888 specialization. */
1889 header_count = 0;
1890 for (b = current_binding_level;
1891 b->kind == sk_template_parms;
1892 b = b->level_chain)
1893 ++header_count;
1895 if (variable_template_p (fns))
1896 templates = tree_cons (explicit_targs, fns, templates);
1897 else for (; fns; fns = OVL_NEXT (fns))
1899 tree fn = OVL_CURRENT (fns);
1901 if (TREE_CODE (fn) == TEMPLATE_DECL)
1903 tree decl_arg_types;
1904 tree fn_arg_types;
1905 tree insttype;
1907 /* In case of explicit specialization, we need to check if
1908 the number of template headers appearing in the specialization
1909 is correct. This is usually done in check_explicit_specialization,
1910 but the check done there cannot be exhaustive when specializing
1911 member functions. Consider the following code:
1913 template <> void A<int>::f(int);
1914 template <> template <> void A<int>::f(int);
1916 Assuming that A<int> is not itself an explicit specialization
1917 already, the first line specializes "f" which is a non-template
1918 member function, whilst the second line specializes "f" which
1919 is a template member function. So both lines are syntactically
1920 correct, and check_explicit_specialization does not reject
1921 them.
1923 Here, we can do better, as we are matching the specialization
1924 against the declarations. We count the number of template
1925 headers, and we check if they match TEMPLATE_COUNT + 1
1926 (TEMPLATE_COUNT is the number of qualifying template classes,
1927 plus there must be another header for the member template
1928 itself).
1930 Notice that if header_count is zero, this is not a
1931 specialization but rather a template instantiation, so there
1932 is no check we can perform here. */
1933 if (header_count && header_count != template_count + 1)
1934 continue;
1936 /* Check that the number of template arguments at the
1937 innermost level for DECL is the same as for FN. */
1938 if (current_binding_level->kind == sk_template_parms
1939 && !current_binding_level->explicit_spec_p
1940 && (TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (fn))
1941 != TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS
1942 (current_template_parms))))
1943 continue;
1945 /* DECL might be a specialization of FN. */
1946 decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1947 fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
1949 /* For a non-static member function, we need to make sure
1950 that the const qualification is the same. Since
1951 get_bindings does not try to merge the "this" parameter,
1952 we must do the comparison explicitly. */
1953 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1954 && !same_type_p (TREE_VALUE (fn_arg_types),
1955 TREE_VALUE (decl_arg_types)))
1956 continue;
1958 /* Skip the "this" parameter and, for constructors of
1959 classes with virtual bases, the VTT parameter. A
1960 full specialization of a constructor will have a VTT
1961 parameter, but a template never will. */
1962 decl_arg_types
1963 = skip_artificial_parms_for (decl, decl_arg_types);
1964 fn_arg_types
1965 = skip_artificial_parms_for (fn, fn_arg_types);
1967 /* Function templates cannot be specializations; there are
1968 no partial specializations of functions. Therefore, if
1969 the type of DECL does not match FN, there is no
1970 match. */
1971 if (tsk == tsk_template)
1973 if (compparms (fn_arg_types, decl_arg_types))
1974 candidates = tree_cons (NULL_TREE, fn, candidates);
1975 continue;
1978 /* See whether this function might be a specialization of this
1979 template. Suppress access control because we might be trying
1980 to make this specialization a friend, and we have already done
1981 access control for the declaration of the specialization. */
1982 push_deferring_access_checks (dk_no_check);
1983 targs = get_bindings (fn, decl, explicit_targs, /*check_ret=*/true);
1984 pop_deferring_access_checks ();
1986 if (!targs)
1987 /* We cannot deduce template arguments that when used to
1988 specialize TMPL will produce DECL. */
1989 continue;
1991 /* Make sure that the deduced arguments actually work. */
1992 insttype = tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE);
1993 if (insttype == error_mark_node)
1994 continue;
1995 fn_arg_types
1996 = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (insttype));
1997 if (!compparms (fn_arg_types, decl_arg_types))
1998 continue;
2000 /* Save this template, and the arguments deduced. */
2001 templates = tree_cons (targs, fn, templates);
2003 else if (need_member_template)
2004 /* FN is an ordinary member function, and we need a
2005 specialization of a member template. */
2007 else if (TREE_CODE (fn) != FUNCTION_DECL)
2008 /* We can get IDENTIFIER_NODEs here in certain erroneous
2009 cases. */
2011 else if (!DECL_FUNCTION_MEMBER_P (fn))
2012 /* This is just an ordinary non-member function. Nothing can
2013 be a specialization of that. */
2015 else if (DECL_ARTIFICIAL (fn))
2016 /* Cannot specialize functions that are created implicitly. */
2018 else
2020 tree decl_arg_types;
2022 /* This is an ordinary member function. However, since
2023 we're here, we can assume its enclosing class is a
2024 template class. For example,
2026 template <typename T> struct S { void f(); };
2027 template <> void S<int>::f() {}
2029 Here, S<int>::f is a non-template, but S<int> is a
2030 template class. If FN has the same type as DECL, we
2031 might be in business. */
2033 if (!DECL_TEMPLATE_INFO (fn))
2034 /* Its enclosing class is an explicit specialization
2035 of a template class. This is not a candidate. */
2036 continue;
2038 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
2039 TREE_TYPE (TREE_TYPE (fn))))
2040 /* The return types differ. */
2041 continue;
2043 /* Adjust the type of DECL in case FN is a static member. */
2044 decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
2045 if (DECL_STATIC_FUNCTION_P (fn)
2046 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2047 decl_arg_types = TREE_CHAIN (decl_arg_types);
2049 if (compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
2050 decl_arg_types))
2051 /* They match! */
2052 candidates = tree_cons (NULL_TREE, fn, candidates);
2056 if (templates && TREE_CHAIN (templates))
2058 /* We have:
2060 [temp.expl.spec]
2062 It is possible for a specialization with a given function
2063 signature to be instantiated from more than one function
2064 template. In such cases, explicit specification of the
2065 template arguments must be used to uniquely identify the
2066 function template specialization being specialized.
2068 Note that here, there's no suggestion that we're supposed to
2069 determine which of the candidate templates is most
2070 specialized. However, we, also have:
2072 [temp.func.order]
2074 Partial ordering of overloaded function template
2075 declarations is used in the following contexts to select
2076 the function template to which a function template
2077 specialization refers:
2079 -- when an explicit specialization refers to a function
2080 template.
2082 So, we do use the partial ordering rules, at least for now.
2083 This extension can only serve to make invalid programs valid,
2084 so it's safe. And, there is strong anecdotal evidence that
2085 the committee intended the partial ordering rules to apply;
2086 the EDG front end has that behavior, and John Spicer claims
2087 that the committee simply forgot to delete the wording in
2088 [temp.expl.spec]. */
2089 tree tmpl = most_specialized_instantiation (templates);
2090 if (tmpl != error_mark_node)
2092 templates = tmpl;
2093 TREE_CHAIN (templates) = NULL_TREE;
2097 if (templates == NULL_TREE && candidates == NULL_TREE)
2099 error ("template-id %qD for %q+D does not match any template "
2100 "declaration", template_id, decl);
2101 if (header_count && header_count != template_count + 1)
2102 inform (input_location, "saw %d %<template<>%>, need %d for "
2103 "specializing a member function template",
2104 header_count, template_count + 1);
2105 return error_mark_node;
2107 else if ((templates && TREE_CHAIN (templates))
2108 || (candidates && TREE_CHAIN (candidates))
2109 || (templates && candidates))
2111 error ("ambiguous template specialization %qD for %q+D",
2112 template_id, decl);
2113 candidates = chainon (candidates, templates);
2114 print_candidates (candidates);
2115 return error_mark_node;
2118 /* We have one, and exactly one, match. */
2119 if (candidates)
2121 tree fn = TREE_VALUE (candidates);
2122 *targs_out = copy_node (DECL_TI_ARGS (fn));
2123 /* DECL is a re-declaration or partial instantiation of a template
2124 function. */
2125 if (TREE_CODE (fn) == TEMPLATE_DECL)
2126 return fn;
2127 /* It was a specialization of an ordinary member function in a
2128 template class. */
2129 return DECL_TI_TEMPLATE (fn);
2132 /* It was a specialization of a template. */
2133 targs = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (TREE_VALUE (templates)));
2134 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (targs))
2136 *targs_out = copy_node (targs);
2137 SET_TMPL_ARGS_LEVEL (*targs_out,
2138 TMPL_ARGS_DEPTH (*targs_out),
2139 TREE_PURPOSE (templates));
2141 else
2142 *targs_out = TREE_PURPOSE (templates);
2143 return TREE_VALUE (templates);
2146 /* Returns a chain of parameter types, exactly like the SPEC_TYPES,
2147 but with the default argument values filled in from those in the
2148 TMPL_TYPES. */
2150 static tree
2151 copy_default_args_to_explicit_spec_1 (tree spec_types,
2152 tree tmpl_types)
2154 tree new_spec_types;
2156 if (!spec_types)
2157 return NULL_TREE;
2159 if (spec_types == void_list_node)
2160 return void_list_node;
2162 /* Substitute into the rest of the list. */
2163 new_spec_types =
2164 copy_default_args_to_explicit_spec_1 (TREE_CHAIN (spec_types),
2165 TREE_CHAIN (tmpl_types));
2167 /* Add the default argument for this parameter. */
2168 return hash_tree_cons (TREE_PURPOSE (tmpl_types),
2169 TREE_VALUE (spec_types),
2170 new_spec_types);
2173 /* DECL is an explicit specialization. Replicate default arguments
2174 from the template it specializes. (That way, code like:
2176 template <class T> void f(T = 3);
2177 template <> void f(double);
2178 void g () { f (); }
2180 works, as required.) An alternative approach would be to look up
2181 the correct default arguments at the call-site, but this approach
2182 is consistent with how implicit instantiations are handled. */
2184 static void
2185 copy_default_args_to_explicit_spec (tree decl)
2187 tree tmpl;
2188 tree spec_types;
2189 tree tmpl_types;
2190 tree new_spec_types;
2191 tree old_type;
2192 tree new_type;
2193 tree t;
2194 tree object_type = NULL_TREE;
2195 tree in_charge = NULL_TREE;
2196 tree vtt = NULL_TREE;
2198 /* See if there's anything we need to do. */
2199 tmpl = DECL_TI_TEMPLATE (decl);
2200 tmpl_types = TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (tmpl)));
2201 for (t = tmpl_types; t; t = TREE_CHAIN (t))
2202 if (TREE_PURPOSE (t))
2203 break;
2204 if (!t)
2205 return;
2207 old_type = TREE_TYPE (decl);
2208 spec_types = TYPE_ARG_TYPES (old_type);
2210 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2212 /* Remove the this pointer, but remember the object's type for
2213 CV quals. */
2214 object_type = TREE_TYPE (TREE_VALUE (spec_types));
2215 spec_types = TREE_CHAIN (spec_types);
2216 tmpl_types = TREE_CHAIN (tmpl_types);
2218 if (DECL_HAS_IN_CHARGE_PARM_P (decl))
2220 /* DECL may contain more parameters than TMPL due to the extra
2221 in-charge parameter in constructors and destructors. */
2222 in_charge = spec_types;
2223 spec_types = TREE_CHAIN (spec_types);
2225 if (DECL_HAS_VTT_PARM_P (decl))
2227 vtt = spec_types;
2228 spec_types = TREE_CHAIN (spec_types);
2232 /* Compute the merged default arguments. */
2233 new_spec_types =
2234 copy_default_args_to_explicit_spec_1 (spec_types, tmpl_types);
2236 /* Compute the new FUNCTION_TYPE. */
2237 if (object_type)
2239 if (vtt)
2240 new_spec_types = hash_tree_cons (TREE_PURPOSE (vtt),
2241 TREE_VALUE (vtt),
2242 new_spec_types);
2244 if (in_charge)
2245 /* Put the in-charge parameter back. */
2246 new_spec_types = hash_tree_cons (TREE_PURPOSE (in_charge),
2247 TREE_VALUE (in_charge),
2248 new_spec_types);
2250 new_type = build_method_type_directly (object_type,
2251 TREE_TYPE (old_type),
2252 new_spec_types);
2254 else
2255 new_type = build_function_type (TREE_TYPE (old_type),
2256 new_spec_types);
2257 new_type = cp_build_type_attribute_variant (new_type,
2258 TYPE_ATTRIBUTES (old_type));
2259 new_type = build_exception_variant (new_type,
2260 TYPE_RAISES_EXCEPTIONS (old_type));
2262 if (TYPE_HAS_LATE_RETURN_TYPE (old_type))
2263 TYPE_HAS_LATE_RETURN_TYPE (new_type) = 1;
2265 TREE_TYPE (decl) = new_type;
2268 /* Return the number of template headers we expect to see for a definition
2269 or specialization of CTYPE or one of its non-template members. */
2272 num_template_headers_for_class (tree ctype)
2274 int num_templates = 0;
2276 while (ctype && CLASS_TYPE_P (ctype))
2278 /* You're supposed to have one `template <...>' for every
2279 template class, but you don't need one for a full
2280 specialization. For example:
2282 template <class T> struct S{};
2283 template <> struct S<int> { void f(); };
2284 void S<int>::f () {}
2286 is correct; there shouldn't be a `template <>' for the
2287 definition of `S<int>::f'. */
2288 if (!CLASSTYPE_TEMPLATE_INFO (ctype))
2289 /* If CTYPE does not have template information of any
2290 kind, then it is not a template, nor is it nested
2291 within a template. */
2292 break;
2293 if (explicit_class_specialization_p (ctype))
2294 break;
2295 if (PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (ctype)))
2296 ++num_templates;
2298 ctype = TYPE_CONTEXT (ctype);
2301 return num_templates;
2304 /* Do a simple sanity check on the template headers that precede the
2305 variable declaration DECL. */
2307 void
2308 check_template_variable (tree decl)
2310 tree ctx = CP_DECL_CONTEXT (decl);
2311 int wanted = num_template_headers_for_class (ctx);
2312 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl)
2313 && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl)))
2315 if (cxx_dialect < cxx14)
2316 pedwarn (DECL_SOURCE_LOCATION (decl), 0,
2317 "variable templates only available with "
2318 "-std=c++14 or -std=gnu++14");
2320 // Namespace-scope variable templates should have a template header.
2321 ++wanted;
2323 if (template_header_count > wanted)
2325 bool warned = pedwarn (DECL_SOURCE_LOCATION (decl), 0,
2326 "too many template headers for %D (should be %d)",
2327 decl, wanted);
2328 if (warned && CLASS_TYPE_P (ctx)
2329 && CLASSTYPE_TEMPLATE_SPECIALIZATION (ctx))
2330 inform (DECL_SOURCE_LOCATION (decl),
2331 "members of an explicitly specialized class are defined "
2332 "without a template header");
2336 /* Check to see if the function just declared, as indicated in
2337 DECLARATOR, and in DECL, is a specialization of a function
2338 template. We may also discover that the declaration is an explicit
2339 instantiation at this point.
2341 Returns DECL, or an equivalent declaration that should be used
2342 instead if all goes well. Issues an error message if something is
2343 amiss. Returns error_mark_node if the error is not easily
2344 recoverable.
2346 FLAGS is a bitmask consisting of the following flags:
2348 2: The function has a definition.
2349 4: The function is a friend.
2351 The TEMPLATE_COUNT is the number of references to qualifying
2352 template classes that appeared in the name of the function. For
2353 example, in
2355 template <class T> struct S { void f(); };
2356 void S<int>::f();
2358 the TEMPLATE_COUNT would be 1. However, explicitly specialized
2359 classes are not counted in the TEMPLATE_COUNT, so that in
2361 template <class T> struct S {};
2362 template <> struct S<int> { void f(); }
2363 template <> void S<int>::f();
2365 the TEMPLATE_COUNT would be 0. (Note that this declaration is
2366 invalid; there should be no template <>.)
2368 If the function is a specialization, it is marked as such via
2369 DECL_TEMPLATE_SPECIALIZATION. Furthermore, its DECL_TEMPLATE_INFO
2370 is set up correctly, and it is added to the list of specializations
2371 for that template. */
2373 tree
2374 check_explicit_specialization (tree declarator,
2375 tree decl,
2376 int template_count,
2377 int flags)
2379 int have_def = flags & 2;
2380 int is_friend = flags & 4;
2381 int specialization = 0;
2382 int explicit_instantiation = 0;
2383 int member_specialization = 0;
2384 tree ctype = DECL_CLASS_CONTEXT (decl);
2385 tree dname = DECL_NAME (decl);
2386 tmpl_spec_kind tsk;
2388 if (is_friend)
2390 if (!processing_specialization)
2391 tsk = tsk_none;
2392 else
2393 tsk = tsk_excessive_parms;
2395 else
2396 tsk = current_tmpl_spec_kind (template_count);
2398 switch (tsk)
2400 case tsk_none:
2401 if (processing_specialization)
2403 specialization = 1;
2404 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2406 else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
2408 if (is_friend)
2409 /* This could be something like:
2411 template <class T> void f(T);
2412 class S { friend void f<>(int); } */
2413 specialization = 1;
2414 else
2416 /* This case handles bogus declarations like template <>
2417 template <class T> void f<int>(); */
2419 error ("template-id %qD in declaration of primary template",
2420 declarator);
2421 return decl;
2424 break;
2426 case tsk_invalid_member_spec:
2427 /* The error has already been reported in
2428 check_specialization_scope. */
2429 return error_mark_node;
2431 case tsk_invalid_expl_inst:
2432 error ("template parameter list used in explicit instantiation");
2434 /* Fall through. */
2436 case tsk_expl_inst:
2437 if (have_def)
2438 error ("definition provided for explicit instantiation");
2440 explicit_instantiation = 1;
2441 break;
2443 case tsk_excessive_parms:
2444 case tsk_insufficient_parms:
2445 if (tsk == tsk_excessive_parms)
2446 error ("too many template parameter lists in declaration of %qD",
2447 decl);
2448 else if (template_header_count)
2449 error("too few template parameter lists in declaration of %qD", decl);
2450 else
2451 error("explicit specialization of %qD must be introduced by "
2452 "%<template <>%>", decl);
2454 /* Fall through. */
2455 case tsk_expl_spec:
2456 if (VAR_P (decl) && TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
2457 /* In cases like template<> constexpr bool v = true;
2458 We'll give an error in check_template_variable. */
2459 break;
2461 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2462 if (ctype)
2463 member_specialization = 1;
2464 else
2465 specialization = 1;
2466 break;
2468 case tsk_template:
2469 if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
2471 /* This case handles bogus declarations like template <>
2472 template <class T> void f<int>(); */
2474 if (uses_template_parms (declarator))
2475 error ("non-type partial specialization %qD "
2476 "is not allowed", declarator);
2477 else
2478 error ("template-id %qD in declaration of primary template",
2479 declarator);
2480 return decl;
2483 if (ctype && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype))
2484 /* This is a specialization of a member template, without
2485 specialization the containing class. Something like:
2487 template <class T> struct S {
2488 template <class U> void f (U);
2490 template <> template <class U> void S<int>::f(U) {}
2492 That's a specialization -- but of the entire template. */
2493 specialization = 1;
2494 break;
2496 default:
2497 gcc_unreachable ();
2500 if ((specialization || member_specialization)
2501 /* This doesn't apply to variable templates. */
2502 && (TREE_CODE (TREE_TYPE (decl)) == FUNCTION_TYPE
2503 || TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE))
2505 tree t = TYPE_ARG_TYPES (TREE_TYPE (decl));
2506 for (; t; t = TREE_CHAIN (t))
2507 if (TREE_PURPOSE (t))
2509 permerror (input_location,
2510 "default argument specified in explicit specialization");
2511 break;
2515 if (specialization || member_specialization || explicit_instantiation)
2517 tree tmpl = NULL_TREE;
2518 tree targs = NULL_TREE;
2520 /* Make sure that the declarator is a TEMPLATE_ID_EXPR. */
2521 if (TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
2523 tree fns;
2525 gcc_assert (identifier_p (declarator));
2526 if (ctype)
2527 fns = dname;
2528 else
2530 /* If there is no class context, the explicit instantiation
2531 must be at namespace scope. */
2532 gcc_assert (DECL_NAMESPACE_SCOPE_P (decl));
2534 /* Find the namespace binding, using the declaration
2535 context. */
2536 fns = lookup_qualified_name (CP_DECL_CONTEXT (decl), dname,
2537 false, true);
2538 if (fns == error_mark_node || !is_overloaded_fn (fns))
2540 error ("%qD is not a template function", dname);
2541 fns = error_mark_node;
2543 else
2545 tree fn = OVL_CURRENT (fns);
2546 if (!is_associated_namespace (CP_DECL_CONTEXT (decl),
2547 CP_DECL_CONTEXT (fn)))
2548 error ("%qD is not declared in %qD",
2549 decl, current_namespace);
2553 declarator = lookup_template_function (fns, NULL_TREE);
2556 if (declarator == error_mark_node)
2557 return error_mark_node;
2559 if (ctype != NULL_TREE && TYPE_BEING_DEFINED (ctype))
2561 if (!explicit_instantiation)
2562 /* A specialization in class scope. This is invalid,
2563 but the error will already have been flagged by
2564 check_specialization_scope. */
2565 return error_mark_node;
2566 else
2568 /* It's not valid to write an explicit instantiation in
2569 class scope, e.g.:
2571 class C { template void f(); }
2573 This case is caught by the parser. However, on
2574 something like:
2576 template class C { void f(); };
2578 (which is invalid) we can get here. The error will be
2579 issued later. */
2583 return decl;
2585 else if (ctype != NULL_TREE
2586 && (identifier_p (TREE_OPERAND (declarator, 0))))
2588 // Ignore variable templates.
2589 if (VAR_P (decl))
2590 return decl;
2592 /* Find the list of functions in ctype that have the same
2593 name as the declared function. */
2594 tree name = TREE_OPERAND (declarator, 0);
2595 tree fns = NULL_TREE;
2596 int idx;
2598 if (constructor_name_p (name, ctype))
2600 int is_constructor = DECL_CONSTRUCTOR_P (decl);
2602 if (is_constructor ? !TYPE_HAS_USER_CONSTRUCTOR (ctype)
2603 : !CLASSTYPE_DESTRUCTORS (ctype))
2605 /* From [temp.expl.spec]:
2607 If such an explicit specialization for the member
2608 of a class template names an implicitly-declared
2609 special member function (clause _special_), the
2610 program is ill-formed.
2612 Similar language is found in [temp.explicit]. */
2613 error ("specialization of implicitly-declared special member function");
2614 return error_mark_node;
2617 name = is_constructor ? ctor_identifier : dtor_identifier;
2620 if (!DECL_CONV_FN_P (decl))
2622 idx = lookup_fnfields_1 (ctype, name);
2623 if (idx >= 0)
2624 fns = (*CLASSTYPE_METHOD_VEC (ctype))[idx];
2626 else
2628 vec<tree, va_gc> *methods;
2629 tree ovl;
2631 /* For a type-conversion operator, we cannot do a
2632 name-based lookup. We might be looking for `operator
2633 int' which will be a specialization of `operator T'.
2634 So, we find *all* the conversion operators, and then
2635 select from them. */
2636 fns = NULL_TREE;
2638 methods = CLASSTYPE_METHOD_VEC (ctype);
2639 if (methods)
2640 for (idx = CLASSTYPE_FIRST_CONVERSION_SLOT;
2641 methods->iterate (idx, &ovl);
2642 ++idx)
2644 if (!DECL_CONV_FN_P (OVL_CURRENT (ovl)))
2645 /* There are no more conversion functions. */
2646 break;
2648 /* Glue all these conversion functions together
2649 with those we already have. */
2650 for (; ovl; ovl = OVL_NEXT (ovl))
2651 fns = ovl_cons (OVL_CURRENT (ovl), fns);
2655 if (fns == NULL_TREE)
2657 error ("no member function %qD declared in %qT", name, ctype);
2658 return error_mark_node;
2660 else
2661 TREE_OPERAND (declarator, 0) = fns;
2664 /* Figure out what exactly is being specialized at this point.
2665 Note that for an explicit instantiation, even one for a
2666 member function, we cannot tell apriori whether the
2667 instantiation is for a member template, or just a member
2668 function of a template class. Even if a member template is
2669 being instantiated, the member template arguments may be
2670 elided if they can be deduced from the rest of the
2671 declaration. */
2672 tmpl = determine_specialization (declarator, decl,
2673 &targs,
2674 member_specialization,
2675 template_count,
2676 tsk);
2678 if (!tmpl || tmpl == error_mark_node)
2679 /* We couldn't figure out what this declaration was
2680 specializing. */
2681 return error_mark_node;
2682 else
2684 tree gen_tmpl = most_general_template (tmpl);
2686 if (explicit_instantiation)
2688 /* We don't set DECL_EXPLICIT_INSTANTIATION here; that
2689 is done by do_decl_instantiation later. */
2691 int arg_depth = TMPL_ARGS_DEPTH (targs);
2692 int parm_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
2694 if (arg_depth > parm_depth)
2696 /* If TMPL is not the most general template (for
2697 example, if TMPL is a friend template that is
2698 injected into namespace scope), then there will
2699 be too many levels of TARGS. Remove some of them
2700 here. */
2701 int i;
2702 tree new_targs;
2704 new_targs = make_tree_vec (parm_depth);
2705 for (i = arg_depth - parm_depth; i < arg_depth; ++i)
2706 TREE_VEC_ELT (new_targs, i - (arg_depth - parm_depth))
2707 = TREE_VEC_ELT (targs, i);
2708 targs = new_targs;
2711 return instantiate_template (tmpl, targs, tf_error);
2714 /* If we thought that the DECL was a member function, but it
2715 turns out to be specializing a static member function,
2716 make DECL a static member function as well. */
2717 if (DECL_FUNCTION_TEMPLATE_P (tmpl)
2718 && DECL_STATIC_FUNCTION_P (tmpl)
2719 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2720 revert_static_member_fn (decl);
2722 /* If this is a specialization of a member template of a
2723 template class, we want to return the TEMPLATE_DECL, not
2724 the specialization of it. */
2725 if (tsk == tsk_template)
2727 tree result = DECL_TEMPLATE_RESULT (tmpl);
2728 SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
2729 DECL_INITIAL (result) = NULL_TREE;
2730 if (have_def)
2732 tree parm;
2733 DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
2734 DECL_SOURCE_LOCATION (result)
2735 = DECL_SOURCE_LOCATION (decl);
2736 /* We want to use the argument list specified in the
2737 definition, not in the original declaration. */
2738 DECL_ARGUMENTS (result) = DECL_ARGUMENTS (decl);
2739 for (parm = DECL_ARGUMENTS (result); parm;
2740 parm = DECL_CHAIN (parm))
2741 DECL_CONTEXT (parm) = result;
2743 return register_specialization (tmpl, gen_tmpl, targs,
2744 is_friend, 0);
2747 /* Set up the DECL_TEMPLATE_INFO for DECL. */
2748 DECL_TEMPLATE_INFO (decl) = build_template_info (tmpl, targs);
2750 /* Inherit default function arguments from the template
2751 DECL is specializing. */
2752 if (DECL_FUNCTION_TEMPLATE_P (tmpl))
2753 copy_default_args_to_explicit_spec (decl);
2755 /* This specialization has the same protection as the
2756 template it specializes. */
2757 TREE_PRIVATE (decl) = TREE_PRIVATE (gen_tmpl);
2758 TREE_PROTECTED (decl) = TREE_PROTECTED (gen_tmpl);
2760 /* 7.1.1-1 [dcl.stc]
2762 A storage-class-specifier shall not be specified in an
2763 explicit specialization...
2765 The parser rejects these, so unless action is taken here,
2766 explicit function specializations will always appear with
2767 global linkage.
2769 The action recommended by the C++ CWG in response to C++
2770 defect report 605 is to make the storage class and linkage
2771 of the explicit specialization match the templated function:
2773 http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#605
2775 if (tsk == tsk_expl_spec && DECL_FUNCTION_TEMPLATE_P (gen_tmpl))
2777 tree tmpl_func = DECL_TEMPLATE_RESULT (gen_tmpl);
2778 gcc_assert (TREE_CODE (tmpl_func) == FUNCTION_DECL);
2780 /* This specialization has the same linkage and visibility as
2781 the function template it specializes. */
2782 TREE_PUBLIC (decl) = TREE_PUBLIC (tmpl_func);
2783 if (! TREE_PUBLIC (decl))
2785 DECL_INTERFACE_KNOWN (decl) = 1;
2786 DECL_NOT_REALLY_EXTERN (decl) = 1;
2788 DECL_THIS_STATIC (decl) = DECL_THIS_STATIC (tmpl_func);
2789 if (DECL_VISIBILITY_SPECIFIED (tmpl_func))
2791 DECL_VISIBILITY_SPECIFIED (decl) = 1;
2792 DECL_VISIBILITY (decl) = DECL_VISIBILITY (tmpl_func);
2796 /* If DECL is a friend declaration, declared using an
2797 unqualified name, the namespace associated with DECL may
2798 have been set incorrectly. For example, in:
2800 template <typename T> void f(T);
2801 namespace N {
2802 struct S { friend void f<int>(int); }
2805 we will have set the DECL_CONTEXT for the friend
2806 declaration to N, rather than to the global namespace. */
2807 if (DECL_NAMESPACE_SCOPE_P (decl))
2808 DECL_CONTEXT (decl) = DECL_CONTEXT (tmpl);
2810 if (is_friend && !have_def)
2811 /* This is not really a declaration of a specialization.
2812 It's just the name of an instantiation. But, it's not
2813 a request for an instantiation, either. */
2814 SET_DECL_IMPLICIT_INSTANTIATION (decl);
2815 else if (TREE_CODE (decl) == FUNCTION_DECL)
2816 /* A specialization is not necessarily COMDAT. */
2817 DECL_COMDAT (decl) = (TREE_PUBLIC (decl)
2818 && DECL_DECLARED_INLINE_P (decl));
2819 else if (TREE_CODE (decl) == VAR_DECL)
2820 DECL_COMDAT (decl) = false;
2822 /* Register this specialization so that we can find it
2823 again. */
2824 decl = register_specialization (decl, gen_tmpl, targs, is_friend, 0);
2826 /* A 'structor should already have clones. */
2827 gcc_assert (decl == error_mark_node
2828 || variable_template_p (tmpl)
2829 || !(DECL_CONSTRUCTOR_P (decl)
2830 || DECL_DESTRUCTOR_P (decl))
2831 || DECL_CLONED_FUNCTION_P (DECL_CHAIN (decl)));
2835 return decl;
2838 /* Returns 1 iff PARMS1 and PARMS2 are identical sets of template
2839 parameters. These are represented in the same format used for
2840 DECL_TEMPLATE_PARMS. */
2843 comp_template_parms (const_tree parms1, const_tree parms2)
2845 const_tree p1;
2846 const_tree p2;
2848 if (parms1 == parms2)
2849 return 1;
2851 for (p1 = parms1, p2 = parms2;
2852 p1 != NULL_TREE && p2 != NULL_TREE;
2853 p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2))
2855 tree t1 = TREE_VALUE (p1);
2856 tree t2 = TREE_VALUE (p2);
2857 int i;
2859 gcc_assert (TREE_CODE (t1) == TREE_VEC);
2860 gcc_assert (TREE_CODE (t2) == TREE_VEC);
2862 if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
2863 return 0;
2865 for (i = 0; i < TREE_VEC_LENGTH (t2); ++i)
2867 tree parm1 = TREE_VALUE (TREE_VEC_ELT (t1, i));
2868 tree parm2 = TREE_VALUE (TREE_VEC_ELT (t2, i));
2870 /* If either of the template parameters are invalid, assume
2871 they match for the sake of error recovery. */
2872 if (error_operand_p (parm1) || error_operand_p (parm2))
2873 return 1;
2875 if (TREE_CODE (parm1) != TREE_CODE (parm2))
2876 return 0;
2878 if (TREE_CODE (parm1) == TEMPLATE_TYPE_PARM
2879 && (TEMPLATE_TYPE_PARAMETER_PACK (parm1)
2880 == TEMPLATE_TYPE_PARAMETER_PACK (parm2)))
2881 continue;
2882 else if (!same_type_p (TREE_TYPE (parm1), TREE_TYPE (parm2)))
2883 return 0;
2887 if ((p1 != NULL_TREE) != (p2 != NULL_TREE))
2888 /* One set of parameters has more parameters lists than the
2889 other. */
2890 return 0;
2892 return 1;
2895 /* Determine whether PARM is a parameter pack. */
2897 bool
2898 template_parameter_pack_p (const_tree parm)
2900 /* Determine if we have a non-type template parameter pack. */
2901 if (TREE_CODE (parm) == PARM_DECL)
2902 return (DECL_TEMPLATE_PARM_P (parm)
2903 && TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)));
2904 if (TREE_CODE (parm) == TEMPLATE_PARM_INDEX)
2905 return TEMPLATE_PARM_PARAMETER_PACK (parm);
2907 /* If this is a list of template parameters, we could get a
2908 TYPE_DECL or a TEMPLATE_DECL. */
2909 if (TREE_CODE (parm) == TYPE_DECL || TREE_CODE (parm) == TEMPLATE_DECL)
2910 parm = TREE_TYPE (parm);
2912 /* Otherwise it must be a type template parameter. */
2913 return ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
2914 || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM)
2915 && TEMPLATE_TYPE_PARAMETER_PACK (parm));
2918 /* Determine if T is a function parameter pack. */
2920 bool
2921 function_parameter_pack_p (const_tree t)
2923 if (t && TREE_CODE (t) == PARM_DECL)
2924 return DECL_PACK_P (t);
2925 return false;
2928 /* Return the function template declaration of PRIMARY_FUNC_TMPL_INST.
2929 PRIMARY_FUNC_TMPL_INST is a primary function template instantiation. */
2931 tree
2932 get_function_template_decl (const_tree primary_func_tmpl_inst)
2934 if (! primary_func_tmpl_inst
2935 || TREE_CODE (primary_func_tmpl_inst) != FUNCTION_DECL
2936 || ! primary_template_instantiation_p (primary_func_tmpl_inst))
2937 return NULL;
2939 return DECL_TEMPLATE_RESULT (DECL_TI_TEMPLATE (primary_func_tmpl_inst));
2942 /* Return true iff the function parameter PARAM_DECL was expanded
2943 from the function parameter pack PACK. */
2945 bool
2946 function_parameter_expanded_from_pack_p (tree param_decl, tree pack)
2948 if (DECL_ARTIFICIAL (param_decl)
2949 || !function_parameter_pack_p (pack))
2950 return false;
2952 /* The parameter pack and its pack arguments have the same
2953 DECL_PARM_INDEX. */
2954 return DECL_PARM_INDEX (pack) == DECL_PARM_INDEX (param_decl);
2957 /* Determine whether ARGS describes a variadic template args list,
2958 i.e., one that is terminated by a template argument pack. */
2960 static bool
2961 template_args_variadic_p (tree args)
2963 int nargs;
2964 tree last_parm;
2966 if (args == NULL_TREE)
2967 return false;
2969 args = INNERMOST_TEMPLATE_ARGS (args);
2970 nargs = TREE_VEC_LENGTH (args);
2972 if (nargs == 0)
2973 return false;
2975 last_parm = TREE_VEC_ELT (args, nargs - 1);
2977 return ARGUMENT_PACK_P (last_parm);
2980 /* Generate a new name for the parameter pack name NAME (an
2981 IDENTIFIER_NODE) that incorporates its */
2983 static tree
2984 make_ith_pack_parameter_name (tree name, int i)
2986 /* Munge the name to include the parameter index. */
2987 #define NUMBUF_LEN 128
2988 char numbuf[NUMBUF_LEN];
2989 char* newname;
2990 int newname_len;
2992 if (name == NULL_TREE)
2993 return name;
2994 snprintf (numbuf, NUMBUF_LEN, "%i", i);
2995 newname_len = IDENTIFIER_LENGTH (name)
2996 + strlen (numbuf) + 2;
2997 newname = (char*)alloca (newname_len);
2998 snprintf (newname, newname_len,
2999 "%s#%i", IDENTIFIER_POINTER (name), i);
3000 return get_identifier (newname);
3003 /* Return true if T is a primary function, class or alias template
3004 instantiation. */
3006 bool
3007 primary_template_instantiation_p (const_tree t)
3009 if (!t)
3010 return false;
3012 if (TREE_CODE (t) == FUNCTION_DECL)
3013 return DECL_LANG_SPECIFIC (t)
3014 && DECL_TEMPLATE_INSTANTIATION (t)
3015 && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (t));
3016 else if (CLASS_TYPE_P (t) && !TYPE_DECL_ALIAS_P (TYPE_NAME (t)))
3017 return CLASSTYPE_TEMPLATE_INSTANTIATION (t)
3018 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t));
3019 else if (alias_template_specialization_p (t))
3020 return true;
3021 return false;
3024 /* Return true if PARM is a template template parameter. */
3026 bool
3027 template_template_parameter_p (const_tree parm)
3029 return DECL_TEMPLATE_TEMPLATE_PARM_P (parm);
3032 /* Return true iff PARM is a DECL representing a type template
3033 parameter. */
3035 bool
3036 template_type_parameter_p (const_tree parm)
3038 return (parm
3039 && (TREE_CODE (parm) == TYPE_DECL
3040 || TREE_CODE (parm) == TEMPLATE_DECL)
3041 && DECL_TEMPLATE_PARM_P (parm));
3044 /* Return the template parameters of T if T is a
3045 primary template instantiation, NULL otherwise. */
3047 tree
3048 get_primary_template_innermost_parameters (const_tree t)
3050 tree parms = NULL, template_info = NULL;
3052 if ((template_info = get_template_info (t))
3053 && primary_template_instantiation_p (t))
3054 parms = INNERMOST_TEMPLATE_PARMS
3055 (DECL_TEMPLATE_PARMS (TI_TEMPLATE (template_info)));
3057 return parms;
3060 /* Return the template parameters of the LEVELth level from the full list
3061 of template parameters PARMS. */
3063 tree
3064 get_template_parms_at_level (tree parms, int level)
3066 tree p;
3067 if (!parms
3068 || TREE_CODE (parms) != TREE_LIST
3069 || level > TMPL_PARMS_DEPTH (parms))
3070 return NULL_TREE;
3072 for (p = parms; p; p = TREE_CHAIN (p))
3073 if (TMPL_PARMS_DEPTH (p) == level)
3074 return p;
3076 return NULL_TREE;
3079 /* Returns the template arguments of T if T is a template instantiation,
3080 NULL otherwise. */
3082 tree
3083 get_template_innermost_arguments (const_tree t)
3085 tree args = NULL, template_info = NULL;
3087 if ((template_info = get_template_info (t))
3088 && TI_ARGS (template_info))
3089 args = INNERMOST_TEMPLATE_ARGS (TI_ARGS (template_info));
3091 return args;
3094 /* Return the argument pack elements of T if T is a template argument pack,
3095 NULL otherwise. */
3097 tree
3098 get_template_argument_pack_elems (const_tree t)
3100 if (TREE_CODE (t) != TYPE_ARGUMENT_PACK
3101 && TREE_CODE (t) != NONTYPE_ARGUMENT_PACK)
3102 return NULL;
3104 return ARGUMENT_PACK_ARGS (t);
3107 /* Structure used to track the progress of find_parameter_packs_r. */
3108 struct find_parameter_pack_data
3110 /* TREE_LIST that will contain all of the parameter packs found by
3111 the traversal. */
3112 tree* parameter_packs;
3114 /* Set of AST nodes that have been visited by the traversal. */
3115 hash_set<tree> *visited;
3118 /* Identifies all of the argument packs that occur in a template
3119 argument and appends them to the TREE_LIST inside DATA, which is a
3120 find_parameter_pack_data structure. This is a subroutine of
3121 make_pack_expansion and uses_parameter_packs. */
3122 static tree
3123 find_parameter_packs_r (tree *tp, int *walk_subtrees, void* data)
3125 tree t = *tp;
3126 struct find_parameter_pack_data* ppd =
3127 (struct find_parameter_pack_data*)data;
3128 bool parameter_pack_p = false;
3130 /* Handle type aliases/typedefs. */
3131 if (TYPE_ALIAS_P (t))
3133 if (TYPE_TEMPLATE_INFO (t))
3134 cp_walk_tree (&TYPE_TI_ARGS (t),
3135 &find_parameter_packs_r,
3136 ppd, ppd->visited);
3137 *walk_subtrees = 0;
3138 return NULL_TREE;
3141 /* Identify whether this is a parameter pack or not. */
3142 switch (TREE_CODE (t))
3144 case TEMPLATE_PARM_INDEX:
3145 if (TEMPLATE_PARM_PARAMETER_PACK (t))
3146 parameter_pack_p = true;
3147 break;
3149 case TEMPLATE_TYPE_PARM:
3150 t = TYPE_MAIN_VARIANT (t);
3151 case TEMPLATE_TEMPLATE_PARM:
3152 if (TEMPLATE_TYPE_PARAMETER_PACK (t))
3153 parameter_pack_p = true;
3154 break;
3156 case FIELD_DECL:
3157 case PARM_DECL:
3158 if (DECL_PACK_P (t))
3160 /* We don't want to walk into the type of a PARM_DECL,
3161 because we don't want to see the type parameter pack. */
3162 *walk_subtrees = 0;
3163 parameter_pack_p = true;
3165 break;
3167 /* Look through a lambda capture proxy to the field pack. */
3168 case VAR_DECL:
3169 if (DECL_HAS_VALUE_EXPR_P (t))
3171 tree v = DECL_VALUE_EXPR (t);
3172 cp_walk_tree (&v,
3173 &find_parameter_packs_r,
3174 ppd, ppd->visited);
3175 *walk_subtrees = 0;
3177 break;
3179 case BASES:
3180 parameter_pack_p = true;
3181 break;
3182 default:
3183 /* Not a parameter pack. */
3184 break;
3187 if (parameter_pack_p)
3189 /* Add this parameter pack to the list. */
3190 *ppd->parameter_packs = tree_cons (NULL_TREE, t, *ppd->parameter_packs);
3193 if (TYPE_P (t))
3194 cp_walk_tree (&TYPE_CONTEXT (t),
3195 &find_parameter_packs_r, ppd, ppd->visited);
3197 /* This switch statement will return immediately if we don't find a
3198 parameter pack. */
3199 switch (TREE_CODE (t))
3201 case TEMPLATE_PARM_INDEX:
3202 return NULL_TREE;
3204 case BOUND_TEMPLATE_TEMPLATE_PARM:
3205 /* Check the template itself. */
3206 cp_walk_tree (&TREE_TYPE (TYPE_TI_TEMPLATE (t)),
3207 &find_parameter_packs_r, ppd, ppd->visited);
3208 /* Check the template arguments. */
3209 cp_walk_tree (&TYPE_TI_ARGS (t), &find_parameter_packs_r, ppd,
3210 ppd->visited);
3211 *walk_subtrees = 0;
3212 return NULL_TREE;
3214 case TEMPLATE_TYPE_PARM:
3215 case TEMPLATE_TEMPLATE_PARM:
3216 return NULL_TREE;
3218 case PARM_DECL:
3219 return NULL_TREE;
3221 case RECORD_TYPE:
3222 if (TYPE_PTRMEMFUNC_P (t))
3223 return NULL_TREE;
3224 /* Fall through. */
3226 case UNION_TYPE:
3227 case ENUMERAL_TYPE:
3228 if (TYPE_TEMPLATE_INFO (t))
3229 cp_walk_tree (&TYPE_TI_ARGS (t),
3230 &find_parameter_packs_r, ppd, ppd->visited);
3232 *walk_subtrees = 0;
3233 return NULL_TREE;
3235 case CONSTRUCTOR:
3236 case TEMPLATE_DECL:
3237 cp_walk_tree (&TREE_TYPE (t),
3238 &find_parameter_packs_r, ppd, ppd->visited);
3239 return NULL_TREE;
3241 case TYPENAME_TYPE:
3242 cp_walk_tree (&TYPENAME_TYPE_FULLNAME (t), &find_parameter_packs_r,
3243 ppd, ppd->visited);
3244 *walk_subtrees = 0;
3245 return NULL_TREE;
3247 case TYPE_PACK_EXPANSION:
3248 case EXPR_PACK_EXPANSION:
3249 *walk_subtrees = 0;
3250 return NULL_TREE;
3252 case INTEGER_TYPE:
3253 cp_walk_tree (&TYPE_MAX_VALUE (t), &find_parameter_packs_r,
3254 ppd, ppd->visited);
3255 *walk_subtrees = 0;
3256 return NULL_TREE;
3258 case IDENTIFIER_NODE:
3259 cp_walk_tree (&TREE_TYPE (t), &find_parameter_packs_r, ppd,
3260 ppd->visited);
3261 *walk_subtrees = 0;
3262 return NULL_TREE;
3264 default:
3265 return NULL_TREE;
3268 return NULL_TREE;
3271 /* Determines if the expression or type T uses any parameter packs. */
3272 bool
3273 uses_parameter_packs (tree t)
3275 tree parameter_packs = NULL_TREE;
3276 struct find_parameter_pack_data ppd;
3277 ppd.parameter_packs = &parameter_packs;
3278 ppd.visited = new hash_set<tree>;
3279 cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
3280 delete ppd.visited;
3281 return parameter_packs != NULL_TREE;
3284 /* Turn ARG, which may be an expression, type, or a TREE_LIST
3285 representation a base-class initializer into a parameter pack
3286 expansion. If all goes well, the resulting node will be an
3287 EXPR_PACK_EXPANSION, TYPE_PACK_EXPANSION, or TREE_LIST,
3288 respectively. */
3289 tree
3290 make_pack_expansion (tree arg)
3292 tree result;
3293 tree parameter_packs = NULL_TREE;
3294 bool for_types = false;
3295 struct find_parameter_pack_data ppd;
3297 if (!arg || arg == error_mark_node)
3298 return arg;
3300 if (TREE_CODE (arg) == TREE_LIST)
3302 /* The only time we will see a TREE_LIST here is for a base
3303 class initializer. In this case, the TREE_PURPOSE will be a
3304 _TYPE node (representing the base class expansion we're
3305 initializing) and the TREE_VALUE will be a TREE_LIST
3306 containing the initialization arguments.
3308 The resulting expansion looks somewhat different from most
3309 expansions. Rather than returning just one _EXPANSION, we
3310 return a TREE_LIST whose TREE_PURPOSE is a
3311 TYPE_PACK_EXPANSION containing the bases that will be
3312 initialized. The TREE_VALUE will be identical to the
3313 original TREE_VALUE, which is a list of arguments that will
3314 be passed to each base. We do not introduce any new pack
3315 expansion nodes into the TREE_VALUE (although it is possible
3316 that some already exist), because the TREE_PURPOSE and
3317 TREE_VALUE all need to be expanded together with the same
3318 _EXPANSION node. Note that the TYPE_PACK_EXPANSION in the
3319 resulting TREE_PURPOSE will mention the parameter packs in
3320 both the bases and the arguments to the bases. */
3321 tree purpose;
3322 tree value;
3323 tree parameter_packs = NULL_TREE;
3325 /* Determine which parameter packs will be used by the base
3326 class expansion. */
3327 ppd.visited = new hash_set<tree>;
3328 ppd.parameter_packs = &parameter_packs;
3329 cp_walk_tree (&TREE_PURPOSE (arg), &find_parameter_packs_r,
3330 &ppd, ppd.visited);
3332 if (parameter_packs == NULL_TREE)
3334 error ("base initializer expansion %<%T%> contains no parameter packs", arg);
3335 delete ppd.visited;
3336 return error_mark_node;
3339 if (TREE_VALUE (arg) != void_type_node)
3341 /* Collect the sets of parameter packs used in each of the
3342 initialization arguments. */
3343 for (value = TREE_VALUE (arg); value; value = TREE_CHAIN (value))
3345 /* Determine which parameter packs will be expanded in this
3346 argument. */
3347 cp_walk_tree (&TREE_VALUE (value), &find_parameter_packs_r,
3348 &ppd, ppd.visited);
3352 delete ppd.visited;
3354 /* Create the pack expansion type for the base type. */
3355 purpose = cxx_make_type (TYPE_PACK_EXPANSION);
3356 SET_PACK_EXPANSION_PATTERN (purpose, TREE_PURPOSE (arg));
3357 PACK_EXPANSION_PARAMETER_PACKS (purpose) = parameter_packs;
3359 /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
3360 they will rarely be compared to anything. */
3361 SET_TYPE_STRUCTURAL_EQUALITY (purpose);
3363 return tree_cons (purpose, TREE_VALUE (arg), NULL_TREE);
3366 if (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL)
3367 for_types = true;
3369 /* Build the PACK_EXPANSION_* node. */
3370 result = for_types
3371 ? cxx_make_type (TYPE_PACK_EXPANSION)
3372 : make_node (EXPR_PACK_EXPANSION);
3373 SET_PACK_EXPANSION_PATTERN (result, arg);
3374 if (TREE_CODE (result) == EXPR_PACK_EXPANSION)
3376 /* Propagate type and const-expression information. */
3377 TREE_TYPE (result) = TREE_TYPE (arg);
3378 TREE_CONSTANT (result) = TREE_CONSTANT (arg);
3380 else
3381 /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
3382 they will rarely be compared to anything. */
3383 SET_TYPE_STRUCTURAL_EQUALITY (result);
3385 /* Determine which parameter packs will be expanded. */
3386 ppd.parameter_packs = &parameter_packs;
3387 ppd.visited = new hash_set<tree>;
3388 cp_walk_tree (&arg, &find_parameter_packs_r, &ppd, ppd.visited);
3389 delete ppd.visited;
3391 /* Make sure we found some parameter packs. */
3392 if (parameter_packs == NULL_TREE)
3394 if (TYPE_P (arg))
3395 error ("expansion pattern %<%T%> contains no argument packs", arg);
3396 else
3397 error ("expansion pattern %<%E%> contains no argument packs", arg);
3398 return error_mark_node;
3400 PACK_EXPANSION_PARAMETER_PACKS (result) = parameter_packs;
3402 PACK_EXPANSION_LOCAL_P (result) = at_function_scope_p ();
3404 return result;
3407 /* Checks T for any "bare" parameter packs, which have not yet been
3408 expanded, and issues an error if any are found. This operation can
3409 only be done on full expressions or types (e.g., an expression
3410 statement, "if" condition, etc.), because we could have expressions like:
3412 foo(f(g(h(args)))...)
3414 where "args" is a parameter pack. check_for_bare_parameter_packs
3415 should not be called for the subexpressions args, h(args),
3416 g(h(args)), or f(g(h(args))), because we would produce erroneous
3417 error messages.
3419 Returns TRUE and emits an error if there were bare parameter packs,
3420 returns FALSE otherwise. */
3421 bool
3422 check_for_bare_parameter_packs (tree t)
3424 tree parameter_packs = NULL_TREE;
3425 struct find_parameter_pack_data ppd;
3427 if (!processing_template_decl || !t || t == error_mark_node)
3428 return false;
3430 if (TREE_CODE (t) == TYPE_DECL)
3431 t = TREE_TYPE (t);
3433 ppd.parameter_packs = &parameter_packs;
3434 ppd.visited = new hash_set<tree>;
3435 cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
3436 delete ppd.visited;
3438 if (parameter_packs)
3440 error ("parameter packs not expanded with %<...%>:");
3441 while (parameter_packs)
3443 tree pack = TREE_VALUE (parameter_packs);
3444 tree name = NULL_TREE;
3446 if (TREE_CODE (pack) == TEMPLATE_TYPE_PARM
3447 || TREE_CODE (pack) == TEMPLATE_TEMPLATE_PARM)
3448 name = TYPE_NAME (pack);
3449 else if (TREE_CODE (pack) == TEMPLATE_PARM_INDEX)
3450 name = DECL_NAME (TEMPLATE_PARM_DECL (pack));
3451 else
3452 name = DECL_NAME (pack);
3454 if (name)
3455 inform (input_location, " %qD", name);
3456 else
3457 inform (input_location, " <anonymous>");
3459 parameter_packs = TREE_CHAIN (parameter_packs);
3462 return true;
3465 return false;
3468 /* Expand any parameter packs that occur in the template arguments in
3469 ARGS. */
3470 tree
3471 expand_template_argument_pack (tree args)
3473 tree result_args = NULL_TREE;
3474 int in_arg, out_arg = 0, nargs = args ? TREE_VEC_LENGTH (args) : 0;
3475 int num_result_args = -1;
3476 int non_default_args_count = -1;
3478 /* First, determine if we need to expand anything, and the number of
3479 slots we'll need. */
3480 for (in_arg = 0; in_arg < nargs; ++in_arg)
3482 tree arg = TREE_VEC_ELT (args, in_arg);
3483 if (arg == NULL_TREE)
3484 return args;
3485 if (ARGUMENT_PACK_P (arg))
3487 int num_packed = TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg));
3488 if (num_result_args < 0)
3489 num_result_args = in_arg + num_packed;
3490 else
3491 num_result_args += num_packed;
3493 else
3495 if (num_result_args >= 0)
3496 num_result_args++;
3500 /* If no expansion is necessary, we're done. */
3501 if (num_result_args < 0)
3502 return args;
3504 /* Expand arguments. */
3505 result_args = make_tree_vec (num_result_args);
3506 if (NON_DEFAULT_TEMPLATE_ARGS_COUNT (args))
3507 non_default_args_count =
3508 GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (args);
3509 for (in_arg = 0; in_arg < nargs; ++in_arg)
3511 tree arg = TREE_VEC_ELT (args, in_arg);
3512 if (ARGUMENT_PACK_P (arg))
3514 tree packed = ARGUMENT_PACK_ARGS (arg);
3515 int i, num_packed = TREE_VEC_LENGTH (packed);
3516 for (i = 0; i < num_packed; ++i, ++out_arg)
3517 TREE_VEC_ELT (result_args, out_arg) = TREE_VEC_ELT(packed, i);
3518 if (non_default_args_count > 0)
3519 non_default_args_count += num_packed - 1;
3521 else
3523 TREE_VEC_ELT (result_args, out_arg) = arg;
3524 ++out_arg;
3527 if (non_default_args_count >= 0)
3528 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (result_args, non_default_args_count);
3529 return result_args;
3532 /* Checks if DECL shadows a template parameter.
3534 [temp.local]: A template-parameter shall not be redeclared within its
3535 scope (including nested scopes).
3537 Emits an error and returns TRUE if the DECL shadows a parameter,
3538 returns FALSE otherwise. */
3540 bool
3541 check_template_shadow (tree decl)
3543 tree olddecl;
3545 /* If we're not in a template, we can't possibly shadow a template
3546 parameter. */
3547 if (!current_template_parms)
3548 return true;
3550 /* Figure out what we're shadowing. */
3551 if (TREE_CODE (decl) == OVERLOAD)
3552 decl = OVL_CURRENT (decl);
3553 olddecl = innermost_non_namespace_value (DECL_NAME (decl));
3555 /* If there's no previous binding for this name, we're not shadowing
3556 anything, let alone a template parameter. */
3557 if (!olddecl)
3558 return true;
3560 /* If we're not shadowing a template parameter, we're done. Note
3561 that OLDDECL might be an OVERLOAD (or perhaps even an
3562 ERROR_MARK), so we can't just blithely assume it to be a _DECL
3563 node. */
3564 if (!DECL_P (olddecl) || !DECL_TEMPLATE_PARM_P (olddecl))
3565 return true;
3567 /* We check for decl != olddecl to avoid bogus errors for using a
3568 name inside a class. We check TPFI to avoid duplicate errors for
3569 inline member templates. */
3570 if (decl == olddecl
3571 || (DECL_TEMPLATE_PARM_P (decl)
3572 && TEMPLATE_PARMS_FOR_INLINE (current_template_parms)))
3573 return true;
3575 /* Don't complain about the injected class name, as we've already
3576 complained about the class itself. */
3577 if (DECL_SELF_REFERENCE_P (decl))
3578 return false;
3580 error ("declaration of %q+#D", decl);
3581 error (" shadows template parm %q+#D", olddecl);
3582 return false;
3585 /* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
3586 ORIG_LEVEL, DECL, and TYPE. */
3588 static tree
3589 build_template_parm_index (int index,
3590 int level,
3591 int orig_level,
3592 tree decl,
3593 tree type)
3595 tree t = make_node (TEMPLATE_PARM_INDEX);
3596 TEMPLATE_PARM_IDX (t) = index;
3597 TEMPLATE_PARM_LEVEL (t) = level;
3598 TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
3599 TEMPLATE_PARM_DECL (t) = decl;
3600 TREE_TYPE (t) = type;
3601 TREE_CONSTANT (t) = TREE_CONSTANT (decl);
3602 TREE_READONLY (t) = TREE_READONLY (decl);
3604 return t;
3607 /* Find the canonical type parameter for the given template type
3608 parameter. Returns the canonical type parameter, which may be TYPE
3609 if no such parameter existed. */
3611 static tree
3612 canonical_type_parameter (tree type)
3614 tree list;
3615 int idx = TEMPLATE_TYPE_IDX (type);
3616 if (!canonical_template_parms)
3617 vec_alloc (canonical_template_parms, idx+1);
3619 while (canonical_template_parms->length () <= (unsigned)idx)
3620 vec_safe_push (canonical_template_parms, NULL_TREE);
3622 list = (*canonical_template_parms)[idx];
3623 while (list && !comptypes (type, TREE_VALUE (list), COMPARE_STRUCTURAL))
3624 list = TREE_CHAIN (list);
3626 if (list)
3627 return TREE_VALUE (list);
3628 else
3630 (*canonical_template_parms)[idx]
3631 = tree_cons (NULL_TREE, type,
3632 (*canonical_template_parms)[idx]);
3633 return type;
3637 /* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
3638 TEMPLATE_PARM_LEVEL has been decreased by LEVELS. If such a
3639 TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
3640 new one is created. */
3642 static tree
3643 reduce_template_parm_level (tree index, tree type, int levels, tree args,
3644 tsubst_flags_t complain)
3646 if (TEMPLATE_PARM_DESCENDANTS (index) == NULL_TREE
3647 || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
3648 != TEMPLATE_PARM_LEVEL (index) - levels)
3649 || !same_type_p (type, TREE_TYPE (TEMPLATE_PARM_DESCENDANTS (index))))
3651 tree orig_decl = TEMPLATE_PARM_DECL (index);
3652 tree decl, t;
3654 decl = build_decl (DECL_SOURCE_LOCATION (orig_decl),
3655 TREE_CODE (orig_decl), DECL_NAME (orig_decl), type);
3656 TREE_CONSTANT (decl) = TREE_CONSTANT (orig_decl);
3657 TREE_READONLY (decl) = TREE_READONLY (orig_decl);
3658 DECL_ARTIFICIAL (decl) = 1;
3659 SET_DECL_TEMPLATE_PARM_P (decl);
3661 t = build_template_parm_index (TEMPLATE_PARM_IDX (index),
3662 TEMPLATE_PARM_LEVEL (index) - levels,
3663 TEMPLATE_PARM_ORIG_LEVEL (index),
3664 decl, type);
3665 TEMPLATE_PARM_DESCENDANTS (index) = t;
3666 TEMPLATE_PARM_PARAMETER_PACK (t)
3667 = TEMPLATE_PARM_PARAMETER_PACK (index);
3669 /* Template template parameters need this. */
3670 if (TREE_CODE (decl) == TEMPLATE_DECL)
3671 DECL_TEMPLATE_PARMS (decl) = tsubst_template_parms
3672 (DECL_TEMPLATE_PARMS (TEMPLATE_PARM_DECL (index)),
3673 args, complain);
3676 return TEMPLATE_PARM_DESCENDANTS (index);
3679 /* Process information from new template parameter PARM and append it
3680 to the LIST being built. This new parameter is a non-type
3681 parameter iff IS_NON_TYPE is true. This new parameter is a
3682 parameter pack iff IS_PARAMETER_PACK is true. The location of PARM
3683 is in PARM_LOC. */
3685 tree
3686 process_template_parm (tree list, location_t parm_loc, tree parm,
3687 bool is_non_type, bool is_parameter_pack)
3689 tree decl = 0;
3690 tree defval;
3691 int idx = 0;
3693 gcc_assert (TREE_CODE (parm) == TREE_LIST);
3694 defval = TREE_PURPOSE (parm);
3696 if (list)
3698 tree p = tree_last (list);
3700 if (p && TREE_VALUE (p) != error_mark_node)
3702 p = TREE_VALUE (p);
3703 if (TREE_CODE (p) == TYPE_DECL || TREE_CODE (p) == TEMPLATE_DECL)
3704 idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
3705 else
3706 idx = TEMPLATE_PARM_IDX (DECL_INITIAL (p));
3709 ++idx;
3712 if (is_non_type)
3714 parm = TREE_VALUE (parm);
3716 SET_DECL_TEMPLATE_PARM_P (parm);
3718 if (TREE_TYPE (parm) != error_mark_node)
3720 /* [temp.param]
3722 The top-level cv-qualifiers on the template-parameter are
3723 ignored when determining its type. */
3724 TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
3725 if (invalid_nontype_parm_type_p (TREE_TYPE (parm), 1))
3726 TREE_TYPE (parm) = error_mark_node;
3727 else if (uses_parameter_packs (TREE_TYPE (parm))
3728 && !is_parameter_pack
3729 /* If we're in a nested template parameter list, the template
3730 template parameter could be a parameter pack. */
3731 && processing_template_parmlist == 1)
3733 /* This template parameter is not a parameter pack, but it
3734 should be. Complain about "bare" parameter packs. */
3735 check_for_bare_parameter_packs (TREE_TYPE (parm));
3737 /* Recover by calling this a parameter pack. */
3738 is_parameter_pack = true;
3742 /* A template parameter is not modifiable. */
3743 TREE_CONSTANT (parm) = 1;
3744 TREE_READONLY (parm) = 1;
3745 decl = build_decl (parm_loc,
3746 CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
3747 TREE_CONSTANT (decl) = 1;
3748 TREE_READONLY (decl) = 1;
3749 DECL_INITIAL (parm) = DECL_INITIAL (decl)
3750 = build_template_parm_index (idx, processing_template_decl,
3751 processing_template_decl,
3752 decl, TREE_TYPE (parm));
3754 TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm))
3755 = is_parameter_pack;
3757 else
3759 tree t;
3760 parm = TREE_VALUE (TREE_VALUE (parm));
3762 if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
3764 t = cxx_make_type (TEMPLATE_TEMPLATE_PARM);
3765 /* This is for distinguishing between real templates and template
3766 template parameters */
3767 TREE_TYPE (parm) = t;
3768 TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
3769 decl = parm;
3771 else
3773 t = cxx_make_type (TEMPLATE_TYPE_PARM);
3774 /* parm is either IDENTIFIER_NODE or NULL_TREE. */
3775 decl = build_decl (parm_loc,
3776 TYPE_DECL, parm, t);
3779 TYPE_NAME (t) = decl;
3780 TYPE_STUB_DECL (t) = decl;
3781 parm = decl;
3782 TEMPLATE_TYPE_PARM_INDEX (t)
3783 = build_template_parm_index (idx, processing_template_decl,
3784 processing_template_decl,
3785 decl, TREE_TYPE (parm));
3786 TEMPLATE_TYPE_PARAMETER_PACK (t) = is_parameter_pack;
3787 TYPE_CANONICAL (t) = canonical_type_parameter (t);
3789 DECL_ARTIFICIAL (decl) = 1;
3790 SET_DECL_TEMPLATE_PARM_P (decl);
3791 pushdecl (decl);
3792 parm = build_tree_list (defval, parm);
3793 return chainon (list, parm);
3796 /* The end of a template parameter list has been reached. Process the
3797 tree list into a parameter vector, converting each parameter into a more
3798 useful form. Type parameters are saved as IDENTIFIER_NODEs, and others
3799 as PARM_DECLs. */
3801 tree
3802 end_template_parm_list (tree parms)
3804 int nparms;
3805 tree parm, next;
3806 tree saved_parmlist = make_tree_vec (list_length (parms));
3808 current_template_parms
3809 = tree_cons (size_int (processing_template_decl),
3810 saved_parmlist, current_template_parms);
3812 for (parm = parms, nparms = 0; parm; parm = next, nparms++)
3814 next = TREE_CHAIN (parm);
3815 TREE_VEC_ELT (saved_parmlist, nparms) = parm;
3816 TREE_CHAIN (parm) = NULL_TREE;
3819 --processing_template_parmlist;
3821 return saved_parmlist;
3824 /* end_template_decl is called after a template declaration is seen. */
3826 void
3827 end_template_decl (void)
3829 reset_specialization ();
3831 if (! processing_template_decl)
3832 return;
3834 /* This matches the pushlevel in begin_template_parm_list. */
3835 finish_scope ();
3837 --processing_template_decl;
3838 current_template_parms = TREE_CHAIN (current_template_parms);
3841 /* Takes a TREE_LIST representing a template parameter and convert it
3842 into an argument suitable to be passed to the type substitution
3843 functions. Note that If the TREE_LIST contains an error_mark
3844 node, the returned argument is error_mark_node. */
3846 static tree
3847 template_parm_to_arg (tree t)
3850 if (t == NULL_TREE
3851 || TREE_CODE (t) != TREE_LIST)
3852 return t;
3854 if (error_operand_p (TREE_VALUE (t)))
3855 return error_mark_node;
3857 t = TREE_VALUE (t);
3859 if (TREE_CODE (t) == TYPE_DECL
3860 || TREE_CODE (t) == TEMPLATE_DECL)
3862 t = TREE_TYPE (t);
3864 if (TEMPLATE_TYPE_PARAMETER_PACK (t))
3866 /* Turn this argument into a TYPE_ARGUMENT_PACK
3867 with a single element, which expands T. */
3868 tree vec = make_tree_vec (1);
3869 #ifdef ENABLE_CHECKING
3870 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT
3871 (vec, TREE_VEC_LENGTH (vec));
3872 #endif
3873 TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3875 t = cxx_make_type (TYPE_ARGUMENT_PACK);
3876 SET_ARGUMENT_PACK_ARGS (t, vec);
3879 else
3881 t = DECL_INITIAL (t);
3883 if (TEMPLATE_PARM_PARAMETER_PACK (t))
3885 /* Turn this argument into a NONTYPE_ARGUMENT_PACK
3886 with a single element, which expands T. */
3887 tree vec = make_tree_vec (1);
3888 tree type = TREE_TYPE (TEMPLATE_PARM_DECL (t));
3889 #ifdef ENABLE_CHECKING
3890 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT
3891 (vec, TREE_VEC_LENGTH (vec));
3892 #endif
3893 t = convert_from_reference (t);
3894 TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3896 t = make_node (NONTYPE_ARGUMENT_PACK);
3897 SET_ARGUMENT_PACK_ARGS (t, vec);
3898 TREE_TYPE (t) = type;
3900 else
3901 t = convert_from_reference (t);
3903 return t;
3906 /* Given a set of template parameters, return them as a set of template
3907 arguments. The template parameters are represented as a TREE_VEC, in
3908 the form documented in cp-tree.h for template arguments. */
3910 static tree
3911 template_parms_to_args (tree parms)
3913 tree header;
3914 tree args = NULL_TREE;
3915 int length = TMPL_PARMS_DEPTH (parms);
3916 int l = length;
3918 /* If there is only one level of template parameters, we do not
3919 create a TREE_VEC of TREE_VECs. Instead, we return a single
3920 TREE_VEC containing the arguments. */
3921 if (length > 1)
3922 args = make_tree_vec (length);
3924 for (header = parms; header; header = TREE_CHAIN (header))
3926 tree a = copy_node (TREE_VALUE (header));
3927 int i;
3929 TREE_TYPE (a) = NULL_TREE;
3930 for (i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
3931 TREE_VEC_ELT (a, i) = template_parm_to_arg (TREE_VEC_ELT (a, i));
3933 #ifdef ENABLE_CHECKING
3934 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (a, TREE_VEC_LENGTH (a));
3935 #endif
3937 if (length > 1)
3938 TREE_VEC_ELT (args, --l) = a;
3939 else
3940 args = a;
3943 if (length > 1 && TREE_VEC_ELT (args, 0) == NULL_TREE)
3944 /* This can happen for template parms of a template template
3945 parameter, e.g:
3947 template<template<class T, class U> class TT> struct S;
3949 Consider the level of the parms of TT; T and U both have
3950 level 2; TT has no template parm of level 1. So in this case
3951 the first element of full_template_args is NULL_TREE. If we
3952 leave it like this TMPL_ARGS_DEPTH on args returns 1 instead
3953 of 2. This will make tsubst wrongly consider that T and U
3954 have level 1. Instead, let's create a dummy vector as the
3955 first element of full_template_args so that TMPL_ARGS_DEPTH
3956 returns the correct depth for args. */
3957 TREE_VEC_ELT (args, 0) = make_tree_vec (1);
3958 return args;
3961 /* Within the declaration of a template, return the currently active
3962 template parameters as an argument TREE_VEC. */
3964 static tree
3965 current_template_args (void)
3967 return template_parms_to_args (current_template_parms);
3970 /* Update the declared TYPE by doing any lookups which were thought to be
3971 dependent, but are not now that we know the SCOPE of the declarator. */
3973 tree
3974 maybe_update_decl_type (tree orig_type, tree scope)
3976 tree type = orig_type;
3978 if (type == NULL_TREE)
3979 return type;
3981 if (TREE_CODE (orig_type) == TYPE_DECL)
3982 type = TREE_TYPE (type);
3984 if (scope && TYPE_P (scope) && dependent_type_p (scope)
3985 && dependent_type_p (type)
3986 /* Don't bother building up the args in this case. */
3987 && TREE_CODE (type) != TEMPLATE_TYPE_PARM)
3989 /* tsubst in the args corresponding to the template parameters,
3990 including auto if present. Most things will be unchanged, but
3991 make_typename_type and tsubst_qualified_id will resolve
3992 TYPENAME_TYPEs and SCOPE_REFs that were previously dependent. */
3993 tree args = current_template_args ();
3994 tree auto_node = type_uses_auto (type);
3995 tree pushed;
3996 if (auto_node)
3998 tree auto_vec = make_tree_vec (1);
3999 TREE_VEC_ELT (auto_vec, 0) = auto_node;
4000 args = add_to_template_args (args, auto_vec);
4002 pushed = push_scope (scope);
4003 type = tsubst (type, args, tf_warning_or_error, NULL_TREE);
4004 if (pushed)
4005 pop_scope (scope);
4008 if (type == error_mark_node)
4009 return orig_type;
4011 if (TREE_CODE (orig_type) == TYPE_DECL)
4013 if (same_type_p (type, TREE_TYPE (orig_type)))
4014 type = orig_type;
4015 else
4016 type = TYPE_NAME (type);
4018 return type;
4021 /* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
4022 template PARMS. If MEMBER_TEMPLATE_P is true, the new template is
4023 a member template. Used by push_template_decl below. */
4025 static tree
4026 build_template_decl (tree decl, tree parms, bool member_template_p)
4028 tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
4029 DECL_TEMPLATE_PARMS (tmpl) = parms;
4030 DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
4031 DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
4032 DECL_MEMBER_TEMPLATE_P (tmpl) = member_template_p;
4034 return tmpl;
4037 struct template_parm_data
4039 /* The level of the template parameters we are currently
4040 processing. */
4041 int level;
4043 /* The index of the specialization argument we are currently
4044 processing. */
4045 int current_arg;
4047 /* An array whose size is the number of template parameters. The
4048 elements are nonzero if the parameter has been used in any one
4049 of the arguments processed so far. */
4050 int* parms;
4052 /* An array whose size is the number of template arguments. The
4053 elements are nonzero if the argument makes use of template
4054 parameters of this level. */
4055 int* arg_uses_template_parms;
4058 /* Subroutine of push_template_decl used to see if each template
4059 parameter in a partial specialization is used in the explicit
4060 argument list. If T is of the LEVEL given in DATA (which is
4061 treated as a template_parm_data*), then DATA->PARMS is marked
4062 appropriately. */
4064 static int
4065 mark_template_parm (tree t, void* data)
4067 int level;
4068 int idx;
4069 struct template_parm_data* tpd = (struct template_parm_data*) data;
4071 template_parm_level_and_index (t, &level, &idx);
4073 if (level == tpd->level)
4075 tpd->parms[idx] = 1;
4076 tpd->arg_uses_template_parms[tpd->current_arg] = 1;
4079 /* Return zero so that for_each_template_parm will continue the
4080 traversal of the tree; we want to mark *every* template parm. */
4081 return 0;
4084 /* Process the partial specialization DECL. */
4086 static tree
4087 process_partial_specialization (tree decl)
4089 tree type = TREE_TYPE (decl);
4090 tree maintmpl = CLASSTYPE_TI_TEMPLATE (type);
4091 tree specargs = CLASSTYPE_TI_ARGS (type);
4092 tree inner_args = INNERMOST_TEMPLATE_ARGS (specargs);
4093 tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
4094 tree inner_parms;
4095 tree inst;
4096 int nargs = TREE_VEC_LENGTH (inner_args);
4097 int ntparms;
4098 int i;
4099 bool did_error_intro = false;
4100 struct template_parm_data tpd;
4101 struct template_parm_data tpd2;
4103 gcc_assert (current_template_parms);
4105 inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
4106 ntparms = TREE_VEC_LENGTH (inner_parms);
4108 /* We check that each of the template parameters given in the
4109 partial specialization is used in the argument list to the
4110 specialization. For example:
4112 template <class T> struct S;
4113 template <class T> struct S<T*>;
4115 The second declaration is OK because `T*' uses the template
4116 parameter T, whereas
4118 template <class T> struct S<int>;
4120 is no good. Even trickier is:
4122 template <class T>
4123 struct S1
4125 template <class U>
4126 struct S2;
4127 template <class U>
4128 struct S2<T>;
4131 The S2<T> declaration is actually invalid; it is a
4132 full-specialization. Of course,
4134 template <class U>
4135 struct S2<T (*)(U)>;
4137 or some such would have been OK. */
4138 tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
4139 tpd.parms = XALLOCAVEC (int, ntparms);
4140 memset (tpd.parms, 0, sizeof (int) * ntparms);
4142 tpd.arg_uses_template_parms = XALLOCAVEC (int, nargs);
4143 memset (tpd.arg_uses_template_parms, 0, sizeof (int) * nargs);
4144 for (i = 0; i < nargs; ++i)
4146 tpd.current_arg = i;
4147 for_each_template_parm (TREE_VEC_ELT (inner_args, i),
4148 &mark_template_parm,
4149 &tpd,
4150 NULL,
4151 /*include_nondeduced_p=*/false);
4153 for (i = 0; i < ntparms; ++i)
4154 if (tpd.parms[i] == 0)
4156 /* One of the template parms was not used in a deduced context in the
4157 specialization. */
4158 if (!did_error_intro)
4160 error ("template parameters not deducible in "
4161 "partial specialization:");
4162 did_error_intro = true;
4165 inform (input_location, " %qD",
4166 TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
4169 if (did_error_intro)
4170 return error_mark_node;
4172 /* [temp.class.spec]
4174 The argument list of the specialization shall not be identical to
4175 the implicit argument list of the primary template. */
4176 if (comp_template_args
4177 (inner_args,
4178 INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE
4179 (maintmpl)))))
4180 error ("partial specialization %qT does not specialize any template arguments", type);
4182 /* A partial specialization that replaces multiple parameters of the
4183 primary template with a pack expansion is less specialized for those
4184 parameters. */
4185 if (nargs < DECL_NTPARMS (maintmpl))
4187 error ("partial specialization is not more specialized than the "
4188 "primary template because it replaces multiple parameters "
4189 "with a pack expansion");
4190 inform (DECL_SOURCE_LOCATION (maintmpl), "primary template here");
4191 return decl;
4194 /* [temp.class.spec]
4196 A partially specialized non-type argument expression shall not
4197 involve template parameters of the partial specialization except
4198 when the argument expression is a simple identifier.
4200 The type of a template parameter corresponding to a specialized
4201 non-type argument shall not be dependent on a parameter of the
4202 specialization.
4204 Also, we verify that pack expansions only occur at the
4205 end of the argument list. */
4206 gcc_assert (nargs == DECL_NTPARMS (maintmpl));
4207 tpd2.parms = 0;
4208 for (i = 0; i < nargs; ++i)
4210 tree parm = TREE_VALUE (TREE_VEC_ELT (main_inner_parms, i));
4211 tree arg = TREE_VEC_ELT (inner_args, i);
4212 tree packed_args = NULL_TREE;
4213 int j, len = 1;
4215 if (ARGUMENT_PACK_P (arg))
4217 /* Extract the arguments from the argument pack. We'll be
4218 iterating over these in the following loop. */
4219 packed_args = ARGUMENT_PACK_ARGS (arg);
4220 len = TREE_VEC_LENGTH (packed_args);
4223 for (j = 0; j < len; j++)
4225 if (packed_args)
4226 /* Get the Jth argument in the parameter pack. */
4227 arg = TREE_VEC_ELT (packed_args, j);
4229 if (PACK_EXPANSION_P (arg))
4231 /* Pack expansions must come at the end of the
4232 argument list. */
4233 if ((packed_args && j < len - 1)
4234 || (!packed_args && i < nargs - 1))
4236 if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
4237 error ("parameter pack argument %qE must be at the "
4238 "end of the template argument list", arg);
4239 else
4240 error ("parameter pack argument %qT must be at the "
4241 "end of the template argument list", arg);
4245 if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
4246 /* We only care about the pattern. */
4247 arg = PACK_EXPANSION_PATTERN (arg);
4249 if (/* These first two lines are the `non-type' bit. */
4250 !TYPE_P (arg)
4251 && TREE_CODE (arg) != TEMPLATE_DECL
4252 /* This next two lines are the `argument expression is not just a
4253 simple identifier' condition and also the `specialized
4254 non-type argument' bit. */
4255 && TREE_CODE (arg) != TEMPLATE_PARM_INDEX
4256 && !(REFERENCE_REF_P (arg)
4257 && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_PARM_INDEX))
4259 if ((!packed_args && tpd.arg_uses_template_parms[i])
4260 || (packed_args && uses_template_parms (arg)))
4261 error ("template argument %qE involves template parameter(s)",
4262 arg);
4263 else
4265 /* Look at the corresponding template parameter,
4266 marking which template parameters its type depends
4267 upon. */
4268 tree type = TREE_TYPE (parm);
4270 if (!tpd2.parms)
4272 /* We haven't yet initialized TPD2. Do so now. */
4273 tpd2.arg_uses_template_parms = XALLOCAVEC (int, nargs);
4274 /* The number of parameters here is the number in the
4275 main template, which, as checked in the assertion
4276 above, is NARGS. */
4277 tpd2.parms = XALLOCAVEC (int, nargs);
4278 tpd2.level =
4279 TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
4282 /* Mark the template parameters. But this time, we're
4283 looking for the template parameters of the main
4284 template, not in the specialization. */
4285 tpd2.current_arg = i;
4286 tpd2.arg_uses_template_parms[i] = 0;
4287 memset (tpd2.parms, 0, sizeof (int) * nargs);
4288 for_each_template_parm (type,
4289 &mark_template_parm,
4290 &tpd2,
4291 NULL,
4292 /*include_nondeduced_p=*/false);
4294 if (tpd2.arg_uses_template_parms [i])
4296 /* The type depended on some template parameters.
4297 If they are fully specialized in the
4298 specialization, that's OK. */
4299 int j;
4300 int count = 0;
4301 for (j = 0; j < nargs; ++j)
4302 if (tpd2.parms[j] != 0
4303 && tpd.arg_uses_template_parms [j])
4304 ++count;
4305 if (count != 0)
4306 error_n (input_location, count,
4307 "type %qT of template argument %qE depends "
4308 "on a template parameter",
4309 "type %qT of template argument %qE depends "
4310 "on template parameters",
4311 type,
4312 arg);
4319 /* We should only get here once. */
4320 gcc_assert (!COMPLETE_TYPE_P (type));
4322 tree tmpl = build_template_decl (decl, current_template_parms,
4323 DECL_MEMBER_TEMPLATE_P (maintmpl));
4324 TREE_TYPE (tmpl) = type;
4325 DECL_TEMPLATE_RESULT (tmpl) = decl;
4326 SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
4327 DECL_TEMPLATE_INFO (tmpl) = build_template_info (maintmpl, specargs);
4328 DECL_PRIMARY_TEMPLATE (tmpl) = maintmpl;
4330 DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
4331 = tree_cons (specargs, tmpl,
4332 DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
4333 TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
4335 for (inst = DECL_TEMPLATE_INSTANTIATIONS (maintmpl); inst;
4336 inst = TREE_CHAIN (inst))
4338 tree inst_type = TREE_VALUE (inst);
4339 if (COMPLETE_TYPE_P (inst_type)
4340 && CLASSTYPE_IMPLICIT_INSTANTIATION (inst_type))
4342 tree spec = most_specialized_class (inst_type, tf_none);
4343 if (spec && TREE_TYPE (spec) == type)
4344 permerror (input_location,
4345 "partial specialization of %qT after instantiation "
4346 "of %qT", type, inst_type);
4350 return decl;
4353 /* PARM is a template parameter of some form; return the corresponding
4354 TEMPLATE_PARM_INDEX. */
4356 static tree
4357 get_template_parm_index (tree parm)
4359 if (TREE_CODE (parm) == PARM_DECL
4360 || TREE_CODE (parm) == CONST_DECL)
4361 parm = DECL_INITIAL (parm);
4362 else if (TREE_CODE (parm) == TYPE_DECL
4363 || TREE_CODE (parm) == TEMPLATE_DECL)
4364 parm = TREE_TYPE (parm);
4365 if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
4366 || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM)
4367 parm = TEMPLATE_TYPE_PARM_INDEX (parm);
4368 gcc_assert (TREE_CODE (parm) == TEMPLATE_PARM_INDEX);
4369 return parm;
4372 /* Subroutine of fixed_parameter_pack_p below. Look for any template
4373 parameter packs used by the template parameter PARM. */
4375 static void
4376 fixed_parameter_pack_p_1 (tree parm, struct find_parameter_pack_data *ppd)
4378 /* A type parm can't refer to another parm. */
4379 if (TREE_CODE (parm) == TYPE_DECL)
4380 return;
4381 else if (TREE_CODE (parm) == PARM_DECL)
4383 cp_walk_tree (&TREE_TYPE (parm), &find_parameter_packs_r,
4384 ppd, ppd->visited);
4385 return;
4388 gcc_assert (TREE_CODE (parm) == TEMPLATE_DECL);
4390 tree vec = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (parm));
4391 for (int i = 0; i < TREE_VEC_LENGTH (vec); ++i)
4392 fixed_parameter_pack_p_1 (TREE_VALUE (TREE_VEC_ELT (vec, i)), ppd);
4395 /* PARM is a template parameter pack. Return any parameter packs used in
4396 its type or the type of any of its template parameters. If there are
4397 any such packs, it will be instantiated into a fixed template parameter
4398 list by partial instantiation rather than be fully deduced. */
4400 tree
4401 fixed_parameter_pack_p (tree parm)
4403 /* This can only be true in a member template. */
4404 if (TEMPLATE_PARM_ORIG_LEVEL (get_template_parm_index (parm)) < 2)
4405 return NULL_TREE;
4406 /* This can only be true for a parameter pack. */
4407 if (!template_parameter_pack_p (parm))
4408 return NULL_TREE;
4409 /* A type parm can't refer to another parm. */
4410 if (TREE_CODE (parm) == TYPE_DECL)
4411 return NULL_TREE;
4413 tree parameter_packs = NULL_TREE;
4414 struct find_parameter_pack_data ppd;
4415 ppd.parameter_packs = &parameter_packs;
4416 ppd.visited = new hash_set<tree>;
4418 fixed_parameter_pack_p_1 (parm, &ppd);
4420 delete ppd.visited;
4421 return parameter_packs;
4424 /* Check that a template declaration's use of default arguments and
4425 parameter packs is not invalid. Here, PARMS are the template
4426 parameters. IS_PRIMARY is true if DECL is the thing declared by
4427 a primary template. IS_PARTIAL is true if DECL is a partial
4428 specialization.
4430 IS_FRIEND_DECL is nonzero if DECL is a friend function template
4431 declaration (but not a definition); 1 indicates a declaration, 2
4432 indicates a redeclaration. When IS_FRIEND_DECL=2, no errors are
4433 emitted for extraneous default arguments.
4435 Returns TRUE if there were no errors found, FALSE otherwise. */
4437 bool
4438 check_default_tmpl_args (tree decl, tree parms, bool is_primary,
4439 bool is_partial, int is_friend_decl)
4441 const char *msg;
4442 int last_level_to_check;
4443 tree parm_level;
4444 bool no_errors = true;
4446 /* [temp.param]
4448 A default template-argument shall not be specified in a
4449 function template declaration or a function template definition, nor
4450 in the template-parameter-list of the definition of a member of a
4451 class template. */
4453 if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL
4454 || (TREE_CODE (decl) == FUNCTION_DECL && DECL_LOCAL_FUNCTION_P (decl)))
4455 /* You can't have a function template declaration in a local
4456 scope, nor you can you define a member of a class template in a
4457 local scope. */
4458 return true;
4460 if ((TREE_CODE (decl) == TYPE_DECL
4461 && TREE_TYPE (decl)
4462 && LAMBDA_TYPE_P (TREE_TYPE (decl)))
4463 || (TREE_CODE (decl) == FUNCTION_DECL
4464 && LAMBDA_FUNCTION_P (decl)))
4465 /* A lambda doesn't have an explicit declaration; don't complain
4466 about the parms of the enclosing class. */
4467 return true;
4469 if (current_class_type
4470 && !TYPE_BEING_DEFINED (current_class_type)
4471 && DECL_LANG_SPECIFIC (decl)
4472 && DECL_DECLARES_FUNCTION_P (decl)
4473 /* If this is either a friend defined in the scope of the class
4474 or a member function. */
4475 && (DECL_FUNCTION_MEMBER_P (decl)
4476 ? same_type_p (DECL_CONTEXT (decl), current_class_type)
4477 : DECL_FRIEND_CONTEXT (decl)
4478 ? same_type_p (DECL_FRIEND_CONTEXT (decl), current_class_type)
4479 : false)
4480 /* And, if it was a member function, it really was defined in
4481 the scope of the class. */
4482 && (!DECL_FUNCTION_MEMBER_P (decl)
4483 || DECL_INITIALIZED_IN_CLASS_P (decl)))
4484 /* We already checked these parameters when the template was
4485 declared, so there's no need to do it again now. This function
4486 was defined in class scope, but we're processing its body now
4487 that the class is complete. */
4488 return true;
4490 /* Core issue 226 (C++0x only): the following only applies to class
4491 templates. */
4492 if (is_primary
4493 && ((cxx_dialect == cxx98) || TREE_CODE (decl) != FUNCTION_DECL))
4495 /* [temp.param]
4497 If a template-parameter has a default template-argument, all
4498 subsequent template-parameters shall have a default
4499 template-argument supplied. */
4500 for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
4502 tree inner_parms = TREE_VALUE (parm_level);
4503 int ntparms = TREE_VEC_LENGTH (inner_parms);
4504 int seen_def_arg_p = 0;
4505 int i;
4507 for (i = 0; i < ntparms; ++i)
4509 tree parm = TREE_VEC_ELT (inner_parms, i);
4511 if (parm == error_mark_node)
4512 continue;
4514 if (TREE_PURPOSE (parm))
4515 seen_def_arg_p = 1;
4516 else if (seen_def_arg_p
4517 && !template_parameter_pack_p (TREE_VALUE (parm)))
4519 error ("no default argument for %qD", TREE_VALUE (parm));
4520 /* For better subsequent error-recovery, we indicate that
4521 there should have been a default argument. */
4522 TREE_PURPOSE (parm) = error_mark_node;
4523 no_errors = false;
4525 else if (!is_partial
4526 && !is_friend_decl
4527 /* Don't complain about an enclosing partial
4528 specialization. */
4529 && parm_level == parms
4530 && TREE_CODE (decl) == TYPE_DECL
4531 && i < ntparms - 1
4532 && template_parameter_pack_p (TREE_VALUE (parm))
4533 /* A fixed parameter pack will be partially
4534 instantiated into a fixed length list. */
4535 && !fixed_parameter_pack_p (TREE_VALUE (parm)))
4537 /* A primary class template can only have one
4538 parameter pack, at the end of the template
4539 parameter list. */
4541 if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL)
4542 error ("parameter pack %qE must be at the end of the"
4543 " template parameter list", TREE_VALUE (parm));
4544 else
4545 error ("parameter pack %qT must be at the end of the"
4546 " template parameter list",
4547 TREE_TYPE (TREE_VALUE (parm)));
4549 TREE_VALUE (TREE_VEC_ELT (inner_parms, i))
4550 = error_mark_node;
4551 no_errors = false;
4557 if (((cxx_dialect == cxx98) && TREE_CODE (decl) != TYPE_DECL)
4558 || is_partial
4559 || !is_primary
4560 || is_friend_decl)
4561 /* For an ordinary class template, default template arguments are
4562 allowed at the innermost level, e.g.:
4563 template <class T = int>
4564 struct S {};
4565 but, in a partial specialization, they're not allowed even
4566 there, as we have in [temp.class.spec]:
4568 The template parameter list of a specialization shall not
4569 contain default template argument values.
4571 So, for a partial specialization, or for a function template
4572 (in C++98/C++03), we look at all of them. */
4574 else
4575 /* But, for a primary class template that is not a partial
4576 specialization we look at all template parameters except the
4577 innermost ones. */
4578 parms = TREE_CHAIN (parms);
4580 /* Figure out what error message to issue. */
4581 if (is_friend_decl == 2)
4582 msg = G_("default template arguments may not be used in function template "
4583 "friend re-declaration");
4584 else if (is_friend_decl)
4585 msg = G_("default template arguments may not be used in function template "
4586 "friend declarations");
4587 else if (TREE_CODE (decl) == FUNCTION_DECL && (cxx_dialect == cxx98))
4588 msg = G_("default template arguments may not be used in function templates "
4589 "without -std=c++11 or -std=gnu++11");
4590 else if (is_partial)
4591 msg = G_("default template arguments may not be used in "
4592 "partial specializations");
4593 else
4594 msg = G_("default argument for template parameter for class enclosing %qD");
4596 if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
4597 /* If we're inside a class definition, there's no need to
4598 examine the parameters to the class itself. On the one
4599 hand, they will be checked when the class is defined, and,
4600 on the other, default arguments are valid in things like:
4601 template <class T = double>
4602 struct S { template <class U> void f(U); };
4603 Here the default argument for `S' has no bearing on the
4604 declaration of `f'. */
4605 last_level_to_check = template_class_depth (current_class_type) + 1;
4606 else
4607 /* Check everything. */
4608 last_level_to_check = 0;
4610 for (parm_level = parms;
4611 parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check;
4612 parm_level = TREE_CHAIN (parm_level))
4614 tree inner_parms = TREE_VALUE (parm_level);
4615 int i;
4616 int ntparms;
4618 ntparms = TREE_VEC_LENGTH (inner_parms);
4619 for (i = 0; i < ntparms; ++i)
4621 if (TREE_VEC_ELT (inner_parms, i) == error_mark_node)
4622 continue;
4624 if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
4626 if (msg)
4628 no_errors = false;
4629 if (is_friend_decl == 2)
4630 return no_errors;
4632 error (msg, decl);
4633 msg = 0;
4636 /* Clear out the default argument so that we are not
4637 confused later. */
4638 TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
4642 /* At this point, if we're still interested in issuing messages,
4643 they must apply to classes surrounding the object declared. */
4644 if (msg)
4645 msg = G_("default argument for template parameter for class "
4646 "enclosing %qD");
4649 return no_errors;
4652 /* Worker for push_template_decl_real, called via
4653 for_each_template_parm. DATA is really an int, indicating the
4654 level of the parameters we are interested in. If T is a template
4655 parameter of that level, return nonzero. */
4657 static int
4658 template_parm_this_level_p (tree t, void* data)
4660 int this_level = *(int *)data;
4661 int level;
4663 if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
4664 level = TEMPLATE_PARM_LEVEL (t);
4665 else
4666 level = TEMPLATE_TYPE_LEVEL (t);
4667 return level == this_level;
4670 /* Creates a TEMPLATE_DECL for the indicated DECL using the template
4671 parameters given by current_template_args, or reuses a
4672 previously existing one, if appropriate. Returns the DECL, or an
4673 equivalent one, if it is replaced via a call to duplicate_decls.
4675 If IS_FRIEND is true, DECL is a friend declaration. */
4677 tree
4678 push_template_decl_real (tree decl, bool is_friend)
4680 tree tmpl;
4681 tree args;
4682 tree info;
4683 tree ctx;
4684 bool is_primary;
4685 bool is_partial;
4686 int new_template_p = 0;
4687 /* True if the template is a member template, in the sense of
4688 [temp.mem]. */
4689 bool member_template_p = false;
4691 if (decl == error_mark_node || !current_template_parms)
4692 return error_mark_node;
4694 /* See if this is a partial specialization. */
4695 is_partial = (DECL_IMPLICIT_TYPEDEF_P (decl)
4696 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
4697 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)));
4699 if (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl))
4700 is_friend = true;
4702 if (is_friend)
4703 /* For a friend, we want the context of the friend function, not
4704 the type of which it is a friend. */
4705 ctx = CP_DECL_CONTEXT (decl);
4706 else if (CP_DECL_CONTEXT (decl)
4707 && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
4708 /* In the case of a virtual function, we want the class in which
4709 it is defined. */
4710 ctx = CP_DECL_CONTEXT (decl);
4711 else
4712 /* Otherwise, if we're currently defining some class, the DECL
4713 is assumed to be a member of the class. */
4714 ctx = current_scope ();
4716 if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
4717 ctx = NULL_TREE;
4719 if (!DECL_CONTEXT (decl))
4720 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
4722 /* See if this is a primary template. */
4723 if (is_friend && ctx
4724 && uses_template_parms_level (ctx, processing_template_decl))
4725 /* A friend template that specifies a class context, i.e.
4726 template <typename T> friend void A<T>::f();
4727 is not primary. */
4728 is_primary = false;
4729 else if (TREE_CODE (decl) == TYPE_DECL
4730 && LAMBDA_TYPE_P (TREE_TYPE (decl)))
4731 is_primary = false;
4732 else
4733 is_primary = template_parm_scope_p ();
4735 if (is_primary)
4737 if (DECL_CLASS_SCOPE_P (decl))
4738 member_template_p = true;
4739 if (TREE_CODE (decl) == TYPE_DECL
4740 && ANON_AGGRNAME_P (DECL_NAME (decl)))
4742 error ("template class without a name");
4743 return error_mark_node;
4745 else if (TREE_CODE (decl) == FUNCTION_DECL)
4747 if (member_template_p)
4749 if (DECL_OVERRIDE_P (decl) || DECL_FINAL_P (decl))
4750 error ("member template %qD may not have virt-specifiers", decl);
4752 if (DECL_DESTRUCTOR_P (decl))
4754 /* [temp.mem]
4756 A destructor shall not be a member template. */
4757 error ("destructor %qD declared as member template", decl);
4758 return error_mark_node;
4760 if (NEW_DELETE_OPNAME_P (DECL_NAME (decl))
4761 && (!prototype_p (TREE_TYPE (decl))
4762 || TYPE_ARG_TYPES (TREE_TYPE (decl)) == void_list_node
4763 || !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
4764 || (TREE_CHAIN (TYPE_ARG_TYPES ((TREE_TYPE (decl))))
4765 == void_list_node)))
4767 /* [basic.stc.dynamic.allocation]
4769 An allocation function can be a function
4770 template. ... Template allocation functions shall
4771 have two or more parameters. */
4772 error ("invalid template declaration of %qD", decl);
4773 return error_mark_node;
4776 else if (DECL_IMPLICIT_TYPEDEF_P (decl)
4777 && CLASS_TYPE_P (TREE_TYPE (decl)))
4778 /* OK */;
4779 else if (TREE_CODE (decl) == TYPE_DECL
4780 && TYPE_DECL_ALIAS_P (decl))
4781 /* alias-declaration */
4782 gcc_assert (!DECL_ARTIFICIAL (decl));
4783 else if (VAR_P (decl))
4784 /* C++14 variable template. */;
4785 else
4787 error ("template declaration of %q#D", decl);
4788 return error_mark_node;
4792 /* Check to see that the rules regarding the use of default
4793 arguments are not being violated. */
4794 check_default_tmpl_args (decl, current_template_parms,
4795 is_primary, is_partial, /*is_friend_decl=*/0);
4797 /* Ensure that there are no parameter packs in the type of this
4798 declaration that have not been expanded. */
4799 if (TREE_CODE (decl) == FUNCTION_DECL)
4801 /* Check each of the arguments individually to see if there are
4802 any bare parameter packs. */
4803 tree type = TREE_TYPE (decl);
4804 tree arg = DECL_ARGUMENTS (decl);
4805 tree argtype = TYPE_ARG_TYPES (type);
4807 while (arg && argtype)
4809 if (!DECL_PACK_P (arg)
4810 && check_for_bare_parameter_packs (TREE_TYPE (arg)))
4812 /* This is a PARM_DECL that contains unexpanded parameter
4813 packs. We have already complained about this in the
4814 check_for_bare_parameter_packs call, so just replace
4815 these types with ERROR_MARK_NODE. */
4816 TREE_TYPE (arg) = error_mark_node;
4817 TREE_VALUE (argtype) = error_mark_node;
4820 arg = DECL_CHAIN (arg);
4821 argtype = TREE_CHAIN (argtype);
4824 /* Check for bare parameter packs in the return type and the
4825 exception specifiers. */
4826 if (check_for_bare_parameter_packs (TREE_TYPE (type)))
4827 /* Errors were already issued, set return type to int
4828 as the frontend doesn't expect error_mark_node as
4829 the return type. */
4830 TREE_TYPE (type) = integer_type_node;
4831 if (check_for_bare_parameter_packs (TYPE_RAISES_EXCEPTIONS (type)))
4832 TYPE_RAISES_EXCEPTIONS (type) = NULL_TREE;
4834 else if (check_for_bare_parameter_packs ((TREE_CODE (decl) == TYPE_DECL
4835 && TYPE_DECL_ALIAS_P (decl))
4836 ? DECL_ORIGINAL_TYPE (decl)
4837 : TREE_TYPE (decl)))
4839 TREE_TYPE (decl) = error_mark_node;
4840 return error_mark_node;
4843 if (is_partial)
4844 return process_partial_specialization (decl);
4846 args = current_template_args ();
4848 if (!ctx
4849 || TREE_CODE (ctx) == FUNCTION_DECL
4850 || (CLASS_TYPE_P (ctx) && TYPE_BEING_DEFINED (ctx))
4851 || (TREE_CODE (decl) == TYPE_DECL
4852 && LAMBDA_TYPE_P (TREE_TYPE (decl)))
4853 || (is_friend && !DECL_TEMPLATE_INFO (decl)))
4855 if (DECL_LANG_SPECIFIC (decl)
4856 && DECL_TEMPLATE_INFO (decl)
4857 && DECL_TI_TEMPLATE (decl))
4858 tmpl = DECL_TI_TEMPLATE (decl);
4859 /* If DECL is a TYPE_DECL for a class-template, then there won't
4860 be DECL_LANG_SPECIFIC. The information equivalent to
4861 DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead. */
4862 else if (DECL_IMPLICIT_TYPEDEF_P (decl)
4863 && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
4864 && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
4866 /* Since a template declaration already existed for this
4867 class-type, we must be redeclaring it here. Make sure
4868 that the redeclaration is valid. */
4869 redeclare_class_template (TREE_TYPE (decl),
4870 current_template_parms);
4871 /* We don't need to create a new TEMPLATE_DECL; just use the
4872 one we already had. */
4873 tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
4875 else
4877 tmpl = build_template_decl (decl, current_template_parms,
4878 member_template_p);
4879 new_template_p = 1;
4881 if (DECL_LANG_SPECIFIC (decl)
4882 && DECL_TEMPLATE_SPECIALIZATION (decl))
4884 /* A specialization of a member template of a template
4885 class. */
4886 SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
4887 DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
4888 DECL_TEMPLATE_INFO (decl) = NULL_TREE;
4892 else
4894 tree a, t, current, parms;
4895 int i;
4896 tree tinfo = get_template_info (decl);
4898 if (!tinfo)
4900 error ("template definition of non-template %q#D", decl);
4901 return error_mark_node;
4904 tmpl = TI_TEMPLATE (tinfo);
4906 if (DECL_FUNCTION_TEMPLATE_P (tmpl)
4907 && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
4908 && DECL_TEMPLATE_SPECIALIZATION (decl)
4909 && DECL_MEMBER_TEMPLATE_P (tmpl))
4911 tree new_tmpl;
4913 /* The declaration is a specialization of a member
4914 template, declared outside the class. Therefore, the
4915 innermost template arguments will be NULL, so we
4916 replace them with the arguments determined by the
4917 earlier call to check_explicit_specialization. */
4918 args = DECL_TI_ARGS (decl);
4920 new_tmpl
4921 = build_template_decl (decl, current_template_parms,
4922 member_template_p);
4923 DECL_TEMPLATE_RESULT (new_tmpl) = decl;
4924 TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
4925 DECL_TI_TEMPLATE (decl) = new_tmpl;
4926 SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
4927 DECL_TEMPLATE_INFO (new_tmpl)
4928 = build_template_info (tmpl, args);
4930 register_specialization (new_tmpl,
4931 most_general_template (tmpl),
4932 args,
4933 is_friend, 0);
4934 return decl;
4937 /* Make sure the template headers we got make sense. */
4939 parms = DECL_TEMPLATE_PARMS (tmpl);
4940 i = TMPL_PARMS_DEPTH (parms);
4941 if (TMPL_ARGS_DEPTH (args) != i)
4943 error ("expected %d levels of template parms for %q#D, got %d",
4944 i, decl, TMPL_ARGS_DEPTH (args));
4945 DECL_INTERFACE_KNOWN (decl) = 1;
4946 return error_mark_node;
4948 else
4949 for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
4951 a = TMPL_ARGS_LEVEL (args, i);
4952 t = INNERMOST_TEMPLATE_PARMS (parms);
4954 if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
4956 if (current == decl)
4957 error ("got %d template parameters for %q#D",
4958 TREE_VEC_LENGTH (a), decl);
4959 else
4960 error ("got %d template parameters for %q#T",
4961 TREE_VEC_LENGTH (a), current);
4962 error (" but %d required", TREE_VEC_LENGTH (t));
4963 /* Avoid crash in import_export_decl. */
4964 DECL_INTERFACE_KNOWN (decl) = 1;
4965 return error_mark_node;
4968 if (current == decl)
4969 current = ctx;
4970 else if (current == NULL_TREE)
4971 /* Can happen in erroneous input. */
4972 break;
4973 else
4974 current = get_containing_scope (current);
4977 /* Check that the parms are used in the appropriate qualifying scopes
4978 in the declarator. */
4979 if (!comp_template_args
4980 (TI_ARGS (tinfo),
4981 TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (tmpl)))))
4983 error ("\
4984 template arguments to %qD do not match original template %qD",
4985 decl, DECL_TEMPLATE_RESULT (tmpl));
4986 if (!uses_template_parms (TI_ARGS (tinfo)))
4987 inform (input_location, "use template<> for an explicit specialization");
4988 /* Avoid crash in import_export_decl. */
4989 DECL_INTERFACE_KNOWN (decl) = 1;
4990 return error_mark_node;
4994 DECL_TEMPLATE_RESULT (tmpl) = decl;
4995 TREE_TYPE (tmpl) = TREE_TYPE (decl);
4997 /* Push template declarations for global functions and types. Note
4998 that we do not try to push a global template friend declared in a
4999 template class; such a thing may well depend on the template
5000 parameters of the class. */
5001 if (new_template_p && !ctx
5002 && !(is_friend && template_class_depth (current_class_type) > 0))
5004 tmpl = pushdecl_namespace_level (tmpl, is_friend);
5005 if (tmpl == error_mark_node)
5006 return error_mark_node;
5008 /* Hide template friend classes that haven't been declared yet. */
5009 if (is_friend && TREE_CODE (decl) == TYPE_DECL)
5011 DECL_ANTICIPATED (tmpl) = 1;
5012 DECL_FRIEND_P (tmpl) = 1;
5016 if (is_primary)
5018 tree parms = DECL_TEMPLATE_PARMS (tmpl);
5019 int i;
5021 DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
5022 if (DECL_CONV_FN_P (tmpl))
5024 int depth = TMPL_PARMS_DEPTH (parms);
5026 /* It is a conversion operator. See if the type converted to
5027 depends on innermost template operands. */
5029 if (uses_template_parms_level (TREE_TYPE (TREE_TYPE (tmpl)),
5030 depth))
5031 DECL_TEMPLATE_CONV_FN_P (tmpl) = 1;
5034 /* Give template template parms a DECL_CONTEXT of the template
5035 for which they are a parameter. */
5036 parms = INNERMOST_TEMPLATE_PARMS (parms);
5037 for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
5039 tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
5040 if (TREE_CODE (parm) == TEMPLATE_DECL)
5041 DECL_CONTEXT (parm) = tmpl;
5045 /* The DECL_TI_ARGS of DECL contains full set of arguments referring
5046 back to its most general template. If TMPL is a specialization,
5047 ARGS may only have the innermost set of arguments. Add the missing
5048 argument levels if necessary. */
5049 if (DECL_TEMPLATE_INFO (tmpl))
5050 args = add_outermost_template_args (DECL_TI_ARGS (tmpl), args);
5052 info = build_template_info (tmpl, args);
5054 if (DECL_IMPLICIT_TYPEDEF_P (decl))
5055 SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
5056 else
5058 if (is_primary && !DECL_LANG_SPECIFIC (decl))
5059 retrofit_lang_decl (decl);
5060 if (DECL_LANG_SPECIFIC (decl))
5061 DECL_TEMPLATE_INFO (decl) = info;
5064 if (flag_implicit_templates
5065 && !is_friend
5066 && TREE_PUBLIC (decl)
5067 && VAR_OR_FUNCTION_DECL_P (decl))
5068 /* Set DECL_COMDAT on template instantiations; if we force
5069 them to be emitted by explicit instantiation or -frepo,
5070 mark_needed will tell cgraph to do the right thing. */
5071 DECL_COMDAT (decl) = true;
5073 return DECL_TEMPLATE_RESULT (tmpl);
5076 tree
5077 push_template_decl (tree decl)
5079 return push_template_decl_real (decl, false);
5082 /* FN is an inheriting constructor that inherits from the constructor
5083 template INHERITED; turn FN into a constructor template with a matching
5084 template header. */
5086 tree
5087 add_inherited_template_parms (tree fn, tree inherited)
5089 tree inner_parms
5090 = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (inherited));
5091 inner_parms = copy_node (inner_parms);
5092 tree parms
5093 = tree_cons (size_int (processing_template_decl + 1),
5094 inner_parms, current_template_parms);
5095 tree tmpl = build_template_decl (fn, parms, /*member*/true);
5096 tree args = template_parms_to_args (parms);
5097 DECL_TEMPLATE_INFO (fn) = build_template_info (tmpl, args);
5098 TREE_TYPE (tmpl) = TREE_TYPE (fn);
5099 DECL_TEMPLATE_RESULT (tmpl) = fn;
5100 DECL_ARTIFICIAL (tmpl) = true;
5101 DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
5102 return tmpl;
5105 /* Called when a class template TYPE is redeclared with the indicated
5106 template PARMS, e.g.:
5108 template <class T> struct S;
5109 template <class T> struct S {}; */
5111 bool
5112 redeclare_class_template (tree type, tree parms)
5114 tree tmpl;
5115 tree tmpl_parms;
5116 int i;
5118 if (!TYPE_TEMPLATE_INFO (type))
5120 error ("%qT is not a template type", type);
5121 return false;
5124 tmpl = TYPE_TI_TEMPLATE (type);
5125 if (!PRIMARY_TEMPLATE_P (tmpl))
5126 /* The type is nested in some template class. Nothing to worry
5127 about here; there are no new template parameters for the nested
5128 type. */
5129 return true;
5131 if (!parms)
5133 error ("template specifiers not specified in declaration of %qD",
5134 tmpl);
5135 return false;
5138 parms = INNERMOST_TEMPLATE_PARMS (parms);
5139 tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
5141 if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
5143 error_n (input_location, TREE_VEC_LENGTH (parms),
5144 "redeclared with %d template parameter",
5145 "redeclared with %d template parameters",
5146 TREE_VEC_LENGTH (parms));
5147 inform_n (input_location, TREE_VEC_LENGTH (tmpl_parms),
5148 "previous declaration %q+D used %d template parameter",
5149 "previous declaration %q+D used %d template parameters",
5150 tmpl, TREE_VEC_LENGTH (tmpl_parms));
5151 return false;
5154 for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
5156 tree tmpl_parm;
5157 tree parm;
5158 tree tmpl_default;
5159 tree parm_default;
5161 if (TREE_VEC_ELT (tmpl_parms, i) == error_mark_node
5162 || TREE_VEC_ELT (parms, i) == error_mark_node)
5163 continue;
5165 tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
5166 if (error_operand_p (tmpl_parm))
5167 return false;
5169 parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
5170 tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
5171 parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
5173 /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
5174 TEMPLATE_DECL. */
5175 if (TREE_CODE (tmpl_parm) != TREE_CODE (parm)
5176 || (TREE_CODE (tmpl_parm) != TYPE_DECL
5177 && !same_type_p (TREE_TYPE (tmpl_parm), TREE_TYPE (parm)))
5178 || (TREE_CODE (tmpl_parm) != PARM_DECL
5179 && (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (tmpl_parm))
5180 != TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm))))
5181 || (TREE_CODE (tmpl_parm) == PARM_DECL
5182 && (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (tmpl_parm))
5183 != TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))))
5185 error ("template parameter %q+#D", tmpl_parm);
5186 error ("redeclared here as %q#D", parm);
5187 return false;
5190 if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
5192 /* We have in [temp.param]:
5194 A template-parameter may not be given default arguments
5195 by two different declarations in the same scope. */
5196 error_at (input_location, "redefinition of default argument for %q#D", parm);
5197 inform (DECL_SOURCE_LOCATION (tmpl_parm),
5198 "original definition appeared here");
5199 return false;
5202 if (parm_default != NULL_TREE)
5203 /* Update the previous template parameters (which are the ones
5204 that will really count) with the new default value. */
5205 TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
5206 else if (tmpl_default != NULL_TREE)
5207 /* Update the new parameters, too; they'll be used as the
5208 parameters for any members. */
5209 TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
5212 return true;
5215 /* Simplify EXPR if it is a non-dependent expression. Returns the
5216 (possibly simplified) expression. */
5218 tree
5219 fold_non_dependent_expr_sfinae (tree expr, tsubst_flags_t complain)
5221 if (expr == NULL_TREE)
5222 return NULL_TREE;
5224 /* If we're in a template, but EXPR isn't value dependent, simplify
5225 it. We're supposed to treat:
5227 template <typename T> void f(T[1 + 1]);
5228 template <typename T> void f(T[2]);
5230 as two declarations of the same function, for example. */
5231 if (processing_template_decl
5232 && !instantiation_dependent_expression_p (expr)
5233 && potential_constant_expression (expr))
5235 HOST_WIDE_INT saved_processing_template_decl;
5237 saved_processing_template_decl = processing_template_decl;
5238 processing_template_decl = 0;
5239 expr = tsubst_copy_and_build (expr,
5240 /*args=*/NULL_TREE,
5241 complain,
5242 /*in_decl=*/NULL_TREE,
5243 /*function_p=*/false,
5244 /*integral_constant_expression_p=*/true);
5245 processing_template_decl = saved_processing_template_decl;
5247 return expr;
5250 tree
5251 fold_non_dependent_expr (tree expr)
5253 return fold_non_dependent_expr_sfinae (expr, tf_error);
5256 /* Return TRUE iff T is a type alias, a TEMPLATE_DECL for an alias
5257 template declaration, or a TYPE_DECL for an alias declaration. */
5259 bool
5260 alias_type_or_template_p (tree t)
5262 if (t == NULL_TREE)
5263 return false;
5264 return ((TREE_CODE (t) == TYPE_DECL && TYPE_DECL_ALIAS_P (t))
5265 || (TYPE_P (t)
5266 && TYPE_NAME (t)
5267 && TYPE_DECL_ALIAS_P (TYPE_NAME (t)))
5268 || DECL_ALIAS_TEMPLATE_P (t));
5271 /* Return TRUE iff is a specialization of an alias template. */
5273 bool
5274 alias_template_specialization_p (const_tree t)
5276 if (t == NULL_TREE)
5277 return false;
5279 return (TYPE_P (t)
5280 && TYPE_TEMPLATE_INFO (t)
5281 && PRIMARY_TEMPLATE_P (TYPE_TI_TEMPLATE (t))
5282 && DECL_ALIAS_TEMPLATE_P (TYPE_TI_TEMPLATE (t)));
5285 /* Return the number of innermost template parameters in TMPL. */
5287 static int
5288 num_innermost_template_parms (tree tmpl)
5290 tree parms = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (tmpl));
5291 return TREE_VEC_LENGTH (parms);
5294 /* Return either TMPL or another template that it is equivalent to under DR
5295 1286: An alias that just changes the name of a template is equivalent to
5296 the other template. */
5298 static tree
5299 get_underlying_template (tree tmpl)
5301 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
5302 while (DECL_ALIAS_TEMPLATE_P (tmpl))
5304 tree result = DECL_ORIGINAL_TYPE (DECL_TEMPLATE_RESULT (tmpl));
5305 if (TYPE_TEMPLATE_INFO (result))
5307 tree sub = TYPE_TI_TEMPLATE (result);
5308 if (PRIMARY_TEMPLATE_P (sub)
5309 && (num_innermost_template_parms (tmpl)
5310 == num_innermost_template_parms (sub)))
5312 tree alias_args = INNERMOST_TEMPLATE_ARGS
5313 (template_parms_to_args (DECL_TEMPLATE_PARMS (tmpl)));
5314 if (!comp_template_args (TYPE_TI_ARGS (result), alias_args))
5315 break;
5316 /* The alias type is equivalent to the pattern of the
5317 underlying template, so strip the alias. */
5318 tmpl = sub;
5319 continue;
5322 break;
5324 return tmpl;
5327 /* Subroutine of convert_nontype_argument. Converts EXPR to TYPE, which
5328 must be a function or a pointer-to-function type, as specified
5329 in [temp.arg.nontype]: disambiguate EXPR if it is an overload set,
5330 and check that the resulting function has external linkage. */
5332 static tree
5333 convert_nontype_argument_function (tree type, tree expr,
5334 tsubst_flags_t complain)
5336 tree fns = expr;
5337 tree fn, fn_no_ptr;
5338 linkage_kind linkage;
5340 fn = instantiate_type (type, fns, tf_none);
5341 if (fn == error_mark_node)
5342 return error_mark_node;
5344 fn_no_ptr = fn;
5345 if (TREE_CODE (fn_no_ptr) == ADDR_EXPR)
5346 fn_no_ptr = TREE_OPERAND (fn_no_ptr, 0);
5347 if (BASELINK_P (fn_no_ptr))
5348 fn_no_ptr = BASELINK_FUNCTIONS (fn_no_ptr);
5350 /* [temp.arg.nontype]/1
5352 A template-argument for a non-type, non-template template-parameter
5353 shall be one of:
5354 [...]
5355 -- the address of an object or function with external [C++11: or
5356 internal] linkage. */
5358 if (TREE_CODE (fn_no_ptr) != FUNCTION_DECL)
5360 if (complain & tf_error)
5362 error ("%qE is not a valid template argument for type %qT",
5363 expr, type);
5364 if (TYPE_PTR_P (type))
5365 error ("it must be the address of a function with "
5366 "external linkage");
5367 else
5368 error ("it must be the name of a function with "
5369 "external linkage");
5371 return NULL_TREE;
5374 linkage = decl_linkage (fn_no_ptr);
5375 if (cxx_dialect >= cxx11 ? linkage == lk_none : linkage != lk_external)
5377 if (complain & tf_error)
5379 if (cxx_dialect >= cxx11)
5380 error ("%qE is not a valid template argument for type %qT "
5381 "because %qD has no linkage",
5382 expr, type, fn_no_ptr);
5383 else
5384 error ("%qE is not a valid template argument for type %qT "
5385 "because %qD does not have external linkage",
5386 expr, type, fn_no_ptr);
5388 return NULL_TREE;
5391 return fn;
5394 /* Subroutine of convert_nontype_argument.
5395 Check if EXPR of type TYPE is a valid pointer-to-member constant.
5396 Emit an error otherwise. */
5398 static bool
5399 check_valid_ptrmem_cst_expr (tree type, tree expr,
5400 tsubst_flags_t complain)
5402 STRIP_NOPS (expr);
5403 if (expr && (null_ptr_cst_p (expr) || TREE_CODE (expr) == PTRMEM_CST))
5404 return true;
5405 if (cxx_dialect >= cxx11 && null_member_pointer_value_p (expr))
5406 return true;
5407 if (processing_template_decl
5408 && TREE_CODE (expr) == ADDR_EXPR
5409 && TREE_CODE (TREE_OPERAND (expr, 0)) == OFFSET_REF)
5410 return true;
5411 if (complain & tf_error)
5413 error ("%qE is not a valid template argument for type %qT",
5414 expr, type);
5415 error ("it must be a pointer-to-member of the form %<&X::Y%>");
5417 return false;
5420 /* Returns TRUE iff the address of OP is value-dependent.
5422 14.6.2.4 [temp.dep.temp]:
5423 A non-integral non-type template-argument is dependent if its type is
5424 dependent or it has either of the following forms
5425 qualified-id
5426 & qualified-id
5427 and contains a nested-name-specifier which specifies a class-name that
5428 names a dependent type.
5430 We generalize this to just say that the address of a member of a
5431 dependent class is value-dependent; the above doesn't cover the
5432 address of a static data member named with an unqualified-id. */
5434 static bool
5435 has_value_dependent_address (tree op)
5437 /* We could use get_inner_reference here, but there's no need;
5438 this is only relevant for template non-type arguments, which
5439 can only be expressed as &id-expression. */
5440 if (DECL_P (op))
5442 tree ctx = CP_DECL_CONTEXT (op);
5443 if (TYPE_P (ctx) && dependent_type_p (ctx))
5444 return true;
5447 return false;
5450 /* The next set of functions are used for providing helpful explanatory
5451 diagnostics for failed overload resolution. Their messages should be
5452 indented by two spaces for consistency with the messages in
5453 call.c */
5455 static int
5456 unify_success (bool /*explain_p*/)
5458 return 0;
5461 static int
5462 unify_parameter_deduction_failure (bool explain_p, tree parm)
5464 if (explain_p)
5465 inform (input_location,
5466 " couldn't deduce template parameter %qD", parm);
5467 return 1;
5470 static int
5471 unify_invalid (bool /*explain_p*/)
5473 return 1;
5476 static int
5477 unify_cv_qual_mismatch (bool explain_p, tree parm, tree arg)
5479 if (explain_p)
5480 inform (input_location,
5481 " types %qT and %qT have incompatible cv-qualifiers",
5482 parm, arg);
5483 return 1;
5486 static int
5487 unify_type_mismatch (bool explain_p, tree parm, tree arg)
5489 if (explain_p)
5490 inform (input_location, " mismatched types %qT and %qT", parm, arg);
5491 return 1;
5494 static int
5495 unify_parameter_pack_mismatch (bool explain_p, tree parm, tree arg)
5497 if (explain_p)
5498 inform (input_location,
5499 " template parameter %qD is not a parameter pack, but "
5500 "argument %qD is",
5501 parm, arg);
5502 return 1;
5505 static int
5506 unify_ptrmem_cst_mismatch (bool explain_p, tree parm, tree arg)
5508 if (explain_p)
5509 inform (input_location,
5510 " template argument %qE does not match "
5511 "pointer-to-member constant %qE",
5512 arg, parm);
5513 return 1;
5516 static int
5517 unify_expression_unequal (bool explain_p, tree parm, tree arg)
5519 if (explain_p)
5520 inform (input_location, " %qE is not equivalent to %qE", parm, arg);
5521 return 1;
5524 static int
5525 unify_parameter_pack_inconsistent (bool explain_p, tree old_arg, tree new_arg)
5527 if (explain_p)
5528 inform (input_location,
5529 " inconsistent parameter pack deduction with %qT and %qT",
5530 old_arg, new_arg);
5531 return 1;
5534 static int
5535 unify_inconsistency (bool explain_p, tree parm, tree first, tree second)
5537 if (explain_p)
5539 if (TYPE_P (parm))
5540 inform (input_location,
5541 " deduced conflicting types for parameter %qT (%qT and %qT)",
5542 parm, first, second);
5543 else
5544 inform (input_location,
5545 " deduced conflicting values for non-type parameter "
5546 "%qE (%qE and %qE)", parm, first, second);
5548 return 1;
5551 static int
5552 unify_vla_arg (bool explain_p, tree arg)
5554 if (explain_p)
5555 inform (input_location,
5556 " variable-sized array type %qT is not "
5557 "a valid template argument",
5558 arg);
5559 return 1;
5562 static int
5563 unify_method_type_error (bool explain_p, tree arg)
5565 if (explain_p)
5566 inform (input_location,
5567 " member function type %qT is not a valid template argument",
5568 arg);
5569 return 1;
5572 static int
5573 unify_arity (bool explain_p, int have, int wanted, bool least_p = false)
5575 if (explain_p)
5577 if (least_p)
5578 inform_n (input_location, wanted,
5579 " candidate expects at least %d argument, %d provided",
5580 " candidate expects at least %d arguments, %d provided",
5581 wanted, have);
5582 else
5583 inform_n (input_location, wanted,
5584 " candidate expects %d argument, %d provided",
5585 " candidate expects %d arguments, %d provided",
5586 wanted, have);
5588 return 1;
5591 static int
5592 unify_too_many_arguments (bool explain_p, int have, int wanted)
5594 return unify_arity (explain_p, have, wanted);
5597 static int
5598 unify_too_few_arguments (bool explain_p, int have, int wanted,
5599 bool least_p = false)
5601 return unify_arity (explain_p, have, wanted, least_p);
5604 static int
5605 unify_arg_conversion (bool explain_p, tree to_type,
5606 tree from_type, tree arg)
5608 if (explain_p)
5609 inform (EXPR_LOC_OR_LOC (arg, input_location),
5610 " cannot convert %qE (type %qT) to type %qT",
5611 arg, from_type, to_type);
5612 return 1;
5615 static int
5616 unify_no_common_base (bool explain_p, enum template_base_result r,
5617 tree parm, tree arg)
5619 if (explain_p)
5620 switch (r)
5622 case tbr_ambiguous_baseclass:
5623 inform (input_location, " %qT is an ambiguous base class of %qT",
5624 parm, arg);
5625 break;
5626 default:
5627 inform (input_location, " %qT is not derived from %qT", arg, parm);
5628 break;
5630 return 1;
5633 static int
5634 unify_inconsistent_template_template_parameters (bool explain_p)
5636 if (explain_p)
5637 inform (input_location,
5638 " template parameters of a template template argument are "
5639 "inconsistent with other deduced template arguments");
5640 return 1;
5643 static int
5644 unify_template_deduction_failure (bool explain_p, tree parm, tree arg)
5646 if (explain_p)
5647 inform (input_location,
5648 " can't deduce a template for %qT from non-template type %qT",
5649 parm, arg);
5650 return 1;
5653 static int
5654 unify_template_argument_mismatch (bool explain_p, tree parm, tree arg)
5656 if (explain_p)
5657 inform (input_location,
5658 " template argument %qE does not match %qD", arg, parm);
5659 return 1;
5662 static int
5663 unify_overload_resolution_failure (bool explain_p, tree arg)
5665 if (explain_p)
5666 inform (input_location,
5667 " could not resolve address from overloaded function %qE",
5668 arg);
5669 return 1;
5672 /* Attempt to convert the non-type template parameter EXPR to the
5673 indicated TYPE. If the conversion is successful, return the
5674 converted value. If the conversion is unsuccessful, return
5675 NULL_TREE if we issued an error message, or error_mark_node if we
5676 did not. We issue error messages for out-and-out bad template
5677 parameters, but not simply because the conversion failed, since we
5678 might be just trying to do argument deduction. Both TYPE and EXPR
5679 must be non-dependent.
5681 The conversion follows the special rules described in
5682 [temp.arg.nontype], and it is much more strict than an implicit
5683 conversion.
5685 This function is called twice for each template argument (see
5686 lookup_template_class for a more accurate description of this
5687 problem). This means that we need to handle expressions which
5688 are not valid in a C++ source, but can be created from the
5689 first call (for instance, casts to perform conversions). These
5690 hacks can go away after we fix the double coercion problem. */
5692 static tree
5693 convert_nontype_argument (tree type, tree expr, tsubst_flags_t complain)
5695 tree expr_type;
5697 /* Detect immediately string literals as invalid non-type argument.
5698 This special-case is not needed for correctness (we would easily
5699 catch this later), but only to provide better diagnostic for this
5700 common user mistake. As suggested by DR 100, we do not mention
5701 linkage issues in the diagnostic as this is not the point. */
5702 /* FIXME we're making this OK. */
5703 if (TREE_CODE (expr) == STRING_CST)
5705 if (complain & tf_error)
5706 error ("%qE is not a valid template argument for type %qT "
5707 "because string literals can never be used in this context",
5708 expr, type);
5709 return NULL_TREE;
5712 /* Add the ADDR_EXPR now for the benefit of
5713 value_dependent_expression_p. */
5714 if (TYPE_PTROBV_P (type)
5715 && TREE_CODE (TREE_TYPE (expr)) == ARRAY_TYPE)
5717 expr = decay_conversion (expr, complain);
5718 if (expr == error_mark_node)
5719 return error_mark_node;
5722 /* If we are in a template, EXPR may be non-dependent, but still
5723 have a syntactic, rather than semantic, form. For example, EXPR
5724 might be a SCOPE_REF, rather than the VAR_DECL to which the
5725 SCOPE_REF refers. Preserving the qualifying scope is necessary
5726 so that access checking can be performed when the template is
5727 instantiated -- but here we need the resolved form so that we can
5728 convert the argument. */
5729 if (TYPE_REF_OBJ_P (type)
5730 && has_value_dependent_address (expr))
5731 /* If we want the address and it's value-dependent, don't fold. */;
5732 else if (!type_unknown_p (expr))
5733 expr = fold_non_dependent_expr_sfinae (expr, complain);
5734 if (error_operand_p (expr))
5735 return error_mark_node;
5736 expr_type = TREE_TYPE (expr);
5737 if (TREE_CODE (type) == REFERENCE_TYPE)
5738 expr = mark_lvalue_use (expr);
5739 else
5740 expr = mark_rvalue_use (expr);
5742 /* 14.3.2/5: The null pointer{,-to-member} conversion is applied
5743 to a non-type argument of "nullptr". */
5744 if (expr == nullptr_node && TYPE_PTR_OR_PTRMEM_P (type))
5745 expr = convert (type, expr);
5747 /* In C++11, integral or enumeration non-type template arguments can be
5748 arbitrary constant expressions. Pointer and pointer to
5749 member arguments can be general constant expressions that evaluate
5750 to a null value, but otherwise still need to be of a specific form. */
5751 if (cxx_dialect >= cxx11)
5753 if (TREE_CODE (expr) == PTRMEM_CST)
5754 /* A PTRMEM_CST is already constant, and a valid template
5755 argument for a parameter of pointer to member type, we just want
5756 to leave it in that form rather than lower it to a
5757 CONSTRUCTOR. */;
5758 else if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
5759 expr = maybe_constant_value (expr);
5760 else if (TYPE_PTR_OR_PTRMEM_P (type))
5762 tree folded = maybe_constant_value (expr);
5763 if (TYPE_PTR_P (type) ? integer_zerop (folded)
5764 : null_member_pointer_value_p (folded))
5765 expr = folded;
5769 /* HACK: Due to double coercion, we can get a
5770 NOP_EXPR<REFERENCE_TYPE>(ADDR_EXPR<POINTER_TYPE> (arg)) here,
5771 which is the tree that we built on the first call (see
5772 below when coercing to reference to object or to reference to
5773 function). We just strip everything and get to the arg.
5774 See g++.old-deja/g++.oliva/template4.C and g++.dg/template/nontype9.C
5775 for examples. */
5776 if (TYPE_REF_OBJ_P (type) || TYPE_REFFN_P (type))
5778 tree probe_type, probe = expr;
5779 if (REFERENCE_REF_P (probe))
5780 probe = TREE_OPERAND (probe, 0);
5781 probe_type = TREE_TYPE (probe);
5782 if (TREE_CODE (probe) == NOP_EXPR)
5784 /* ??? Maybe we could use convert_from_reference here, but we
5785 would need to relax its constraints because the NOP_EXPR
5786 could actually change the type to something more cv-qualified,
5787 and this is not folded by convert_from_reference. */
5788 tree addr = TREE_OPERAND (probe, 0);
5789 if (TREE_CODE (probe_type) == REFERENCE_TYPE
5790 && TREE_CODE (addr) == ADDR_EXPR
5791 && TYPE_PTR_P (TREE_TYPE (addr))
5792 && (same_type_ignoring_top_level_qualifiers_p
5793 (TREE_TYPE (probe_type),
5794 TREE_TYPE (TREE_TYPE (addr)))))
5796 expr = TREE_OPERAND (addr, 0);
5797 expr_type = TREE_TYPE (probe_type);
5802 /* We could also generate a NOP_EXPR(ADDR_EXPR()) when the
5803 parameter is a pointer to object, through decay and
5804 qualification conversion. Let's strip everything. */
5805 else if (TREE_CODE (expr) == NOP_EXPR && TYPE_PTROBV_P (type))
5807 tree probe = expr;
5808 STRIP_NOPS (probe);
5809 if (TREE_CODE (probe) == ADDR_EXPR
5810 && TYPE_PTR_P (TREE_TYPE (probe)))
5812 /* Skip the ADDR_EXPR only if it is part of the decay for
5813 an array. Otherwise, it is part of the original argument
5814 in the source code. */
5815 if (TREE_CODE (TREE_TYPE (TREE_OPERAND (probe, 0))) == ARRAY_TYPE)
5816 probe = TREE_OPERAND (probe, 0);
5817 expr = probe;
5818 expr_type = TREE_TYPE (expr);
5822 /* [temp.arg.nontype]/5, bullet 1
5824 For a non-type template-parameter of integral or enumeration type,
5825 integral promotions (_conv.prom_) and integral conversions
5826 (_conv.integral_) are applied. */
5827 if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
5829 tree t = build_integral_nontype_arg_conv (type, expr, complain);
5830 t = maybe_constant_value (t);
5831 if (t != error_mark_node)
5832 expr = t;
5834 if (!same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (expr)))
5835 return error_mark_node;
5837 /* Notice that there are constant expressions like '4 % 0' which
5838 do not fold into integer constants. */
5839 if (TREE_CODE (expr) != INTEGER_CST)
5841 if (complain & tf_error)
5843 int errs = errorcount, warns = warningcount + werrorcount;
5844 if (processing_template_decl
5845 && !require_potential_constant_expression (expr))
5846 return NULL_TREE;
5847 expr = cxx_constant_value (expr);
5848 if (errorcount > errs || warningcount + werrorcount > warns)
5849 inform (EXPR_LOC_OR_LOC (expr, input_location),
5850 "in template argument for type %qT ", type);
5851 if (expr == error_mark_node)
5852 return NULL_TREE;
5853 /* else cxx_constant_value complained but gave us
5854 a real constant, so go ahead. */
5855 gcc_assert (TREE_CODE (expr) == INTEGER_CST);
5857 else
5858 return NULL_TREE;
5861 /* Avoid typedef problems. */
5862 if (TREE_TYPE (expr) != type)
5863 expr = fold_convert (type, expr);
5865 /* [temp.arg.nontype]/5, bullet 2
5867 For a non-type template-parameter of type pointer to object,
5868 qualification conversions (_conv.qual_) and the array-to-pointer
5869 conversion (_conv.array_) are applied. */
5870 else if (TYPE_PTROBV_P (type))
5872 /* [temp.arg.nontype]/1 (TC1 version, DR 49):
5874 A template-argument for a non-type, non-template template-parameter
5875 shall be one of: [...]
5877 -- the name of a non-type template-parameter;
5878 -- the address of an object or function with external linkage, [...]
5879 expressed as "& id-expression" where the & is optional if the name
5880 refers to a function or array, or if the corresponding
5881 template-parameter is a reference.
5883 Here, we do not care about functions, as they are invalid anyway
5884 for a parameter of type pointer-to-object. */
5886 if (DECL_P (expr) && DECL_TEMPLATE_PARM_P (expr))
5887 /* Non-type template parameters are OK. */
5889 else if (cxx_dialect >= cxx11 && integer_zerop (expr))
5890 /* Null pointer values are OK in C++11. */;
5891 else if (TREE_CODE (expr) != ADDR_EXPR
5892 && TREE_CODE (expr_type) != ARRAY_TYPE)
5894 if (VAR_P (expr))
5896 if (complain & tf_error)
5897 error ("%qD is not a valid template argument "
5898 "because %qD is a variable, not the address of "
5899 "a variable", expr, expr);
5900 return NULL_TREE;
5902 if (POINTER_TYPE_P (expr_type))
5904 if (complain & tf_error)
5905 error ("%qE is not a valid template argument for %qT "
5906 "because it is not the address of a variable",
5907 expr, type);
5908 return NULL_TREE;
5910 /* Other values, like integer constants, might be valid
5911 non-type arguments of some other type. */
5912 return error_mark_node;
5914 else
5916 tree decl;
5918 decl = ((TREE_CODE (expr) == ADDR_EXPR)
5919 ? TREE_OPERAND (expr, 0) : expr);
5920 if (!VAR_P (decl))
5922 if (complain & tf_error)
5923 error ("%qE is not a valid template argument of type %qT "
5924 "because %qE is not a variable", expr, type, decl);
5925 return NULL_TREE;
5927 else if (cxx_dialect < cxx11 && !DECL_EXTERNAL_LINKAGE_P (decl))
5929 if (complain & tf_error)
5930 error ("%qE is not a valid template argument of type %qT "
5931 "because %qD does not have external linkage",
5932 expr, type, decl);
5933 return NULL_TREE;
5935 else if (cxx_dialect >= cxx11 && decl_linkage (decl) == lk_none)
5937 if (complain & tf_error)
5938 error ("%qE is not a valid template argument of type %qT "
5939 "because %qD has no linkage", expr, type, decl);
5940 return NULL_TREE;
5944 expr = decay_conversion (expr, complain);
5945 if (expr == error_mark_node)
5946 return error_mark_node;
5948 expr = perform_qualification_conversions (type, expr);
5949 if (expr == error_mark_node)
5950 return error_mark_node;
5952 /* [temp.arg.nontype]/5, bullet 3
5954 For a non-type template-parameter of type reference to object, no
5955 conversions apply. The type referred to by the reference may be more
5956 cv-qualified than the (otherwise identical) type of the
5957 template-argument. The template-parameter is bound directly to the
5958 template-argument, which must be an lvalue. */
5959 else if (TYPE_REF_OBJ_P (type))
5961 if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type),
5962 expr_type))
5963 return error_mark_node;
5965 if (!at_least_as_qualified_p (TREE_TYPE (type), expr_type))
5967 if (complain & tf_error)
5968 error ("%qE is not a valid template argument for type %qT "
5969 "because of conflicts in cv-qualification", expr, type);
5970 return NULL_TREE;
5973 if (!real_lvalue_p (expr))
5975 if (complain & tf_error)
5976 error ("%qE is not a valid template argument for type %qT "
5977 "because it is not an lvalue", expr, type);
5978 return NULL_TREE;
5981 /* [temp.arg.nontype]/1
5983 A template-argument for a non-type, non-template template-parameter
5984 shall be one of: [...]
5986 -- the address of an object or function with external linkage. */
5987 if (INDIRECT_REF_P (expr)
5988 && TYPE_REF_OBJ_P (TREE_TYPE (TREE_OPERAND (expr, 0))))
5990 expr = TREE_OPERAND (expr, 0);
5991 if (DECL_P (expr))
5993 if (complain & tf_error)
5994 error ("%q#D is not a valid template argument for type %qT "
5995 "because a reference variable does not have a constant "
5996 "address", expr, type);
5997 return NULL_TREE;
6001 if (!DECL_P (expr))
6003 if (complain & tf_error)
6004 error ("%qE is not a valid template argument for type %qT "
6005 "because it is not an object with external linkage",
6006 expr, type);
6007 return NULL_TREE;
6010 if (!DECL_EXTERNAL_LINKAGE_P (expr))
6012 if (complain & tf_error)
6013 error ("%qE is not a valid template argument for type %qT "
6014 "because object %qD has not external linkage",
6015 expr, type, expr);
6016 return NULL_TREE;
6019 expr = build_nop (type, build_address (expr));
6021 /* [temp.arg.nontype]/5, bullet 4
6023 For a non-type template-parameter of type pointer to function, only
6024 the function-to-pointer conversion (_conv.func_) is applied. If the
6025 template-argument represents a set of overloaded functions (or a
6026 pointer to such), the matching function is selected from the set
6027 (_over.over_). */
6028 else if (TYPE_PTRFN_P (type))
6030 /* If the argument is a template-id, we might not have enough
6031 context information to decay the pointer. */
6032 if (!type_unknown_p (expr_type))
6034 expr = decay_conversion (expr, complain);
6035 if (expr == error_mark_node)
6036 return error_mark_node;
6039 if (cxx_dialect >= cxx11 && integer_zerop (expr))
6040 /* Null pointer values are OK in C++11. */
6041 return perform_qualification_conversions (type, expr);
6043 expr = convert_nontype_argument_function (type, expr, complain);
6044 if (!expr || expr == error_mark_node)
6045 return expr;
6047 /* [temp.arg.nontype]/5, bullet 5
6049 For a non-type template-parameter of type reference to function, no
6050 conversions apply. If the template-argument represents a set of
6051 overloaded functions, the matching function is selected from the set
6052 (_over.over_). */
6053 else if (TYPE_REFFN_P (type))
6055 if (TREE_CODE (expr) == ADDR_EXPR)
6057 if (complain & tf_error)
6059 error ("%qE is not a valid template argument for type %qT "
6060 "because it is a pointer", expr, type);
6061 inform (input_location, "try using %qE instead",
6062 TREE_OPERAND (expr, 0));
6064 return NULL_TREE;
6067 expr = convert_nontype_argument_function (type, expr, complain);
6068 if (!expr || expr == error_mark_node)
6069 return expr;
6071 expr = build_nop (type, build_address (expr));
6073 /* [temp.arg.nontype]/5, bullet 6
6075 For a non-type template-parameter of type pointer to member function,
6076 no conversions apply. If the template-argument represents a set of
6077 overloaded member functions, the matching member function is selected
6078 from the set (_over.over_). */
6079 else if (TYPE_PTRMEMFUNC_P (type))
6081 expr = instantiate_type (type, expr, tf_none);
6082 if (expr == error_mark_node)
6083 return error_mark_node;
6085 /* [temp.arg.nontype] bullet 1 says the pointer to member
6086 expression must be a pointer-to-member constant. */
6087 if (!check_valid_ptrmem_cst_expr (type, expr, complain))
6088 return error_mark_node;
6090 /* There is no way to disable standard conversions in
6091 resolve_address_of_overloaded_function (called by
6092 instantiate_type). It is possible that the call succeeded by
6093 converting &B::I to &D::I (where B is a base of D), so we need
6094 to reject this conversion here.
6096 Actually, even if there was a way to disable standard conversions,
6097 it would still be better to reject them here so that we can
6098 provide a superior diagnostic. */
6099 if (!same_type_p (TREE_TYPE (expr), type))
6101 if (complain & tf_error)
6103 error ("%qE is not a valid template argument for type %qT "
6104 "because it is of type %qT", expr, type,
6105 TREE_TYPE (expr));
6106 /* If we are just one standard conversion off, explain. */
6107 if (can_convert_standard (type, TREE_TYPE (expr), complain))
6108 inform (input_location,
6109 "standard conversions are not allowed in this context");
6111 return NULL_TREE;
6114 /* [temp.arg.nontype]/5, bullet 7
6116 For a non-type template-parameter of type pointer to data member,
6117 qualification conversions (_conv.qual_) are applied. */
6118 else if (TYPE_PTRDATAMEM_P (type))
6120 /* [temp.arg.nontype] bullet 1 says the pointer to member
6121 expression must be a pointer-to-member constant. */
6122 if (!check_valid_ptrmem_cst_expr (type, expr, complain))
6123 return error_mark_node;
6125 expr = perform_qualification_conversions (type, expr);
6126 if (expr == error_mark_node)
6127 return expr;
6129 else if (NULLPTR_TYPE_P (type))
6131 if (expr != nullptr_node)
6133 if (complain & tf_error)
6134 error ("%qE is not a valid template argument for type %qT "
6135 "because it is of type %qT", expr, type, TREE_TYPE (expr));
6136 return NULL_TREE;
6138 return expr;
6140 /* A template non-type parameter must be one of the above. */
6141 else
6142 gcc_unreachable ();
6144 /* Sanity check: did we actually convert the argument to the
6145 right type? */
6146 gcc_assert (same_type_ignoring_top_level_qualifiers_p
6147 (type, TREE_TYPE (expr)));
6148 return expr;
6151 /* Subroutine of coerce_template_template_parms, which returns 1 if
6152 PARM_PARM and ARG_PARM match using the rule for the template
6153 parameters of template template parameters. Both PARM and ARG are
6154 template parameters; the rest of the arguments are the same as for
6155 coerce_template_template_parms.
6157 static int
6158 coerce_template_template_parm (tree parm,
6159 tree arg,
6160 tsubst_flags_t complain,
6161 tree in_decl,
6162 tree outer_args)
6164 if (arg == NULL_TREE || error_operand_p (arg)
6165 || parm == NULL_TREE || error_operand_p (parm))
6166 return 0;
6168 if (TREE_CODE (arg) != TREE_CODE (parm))
6169 return 0;
6171 switch (TREE_CODE (parm))
6173 case TEMPLATE_DECL:
6174 /* We encounter instantiations of templates like
6175 template <template <template <class> class> class TT>
6176 class C; */
6178 tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
6179 tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
6181 if (!coerce_template_template_parms
6182 (parmparm, argparm, complain, in_decl, outer_args))
6183 return 0;
6185 /* Fall through. */
6187 case TYPE_DECL:
6188 if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (arg))
6189 && !TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
6190 /* Argument is a parameter pack but parameter is not. */
6191 return 0;
6192 break;
6194 case PARM_DECL:
6195 /* The tsubst call is used to handle cases such as
6197 template <int> class C {};
6198 template <class T, template <T> class TT> class D {};
6199 D<int, C> d;
6201 i.e. the parameter list of TT depends on earlier parameters. */
6202 if (!uses_template_parms (TREE_TYPE (arg))
6203 && !same_type_p
6204 (tsubst (TREE_TYPE (parm), outer_args, complain, in_decl),
6205 TREE_TYPE (arg)))
6206 return 0;
6208 if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (arg))
6209 && !TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
6210 /* Argument is a parameter pack but parameter is not. */
6211 return 0;
6213 break;
6215 default:
6216 gcc_unreachable ();
6219 return 1;
6223 /* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
6224 template template parameters. Both PARM_PARMS and ARG_PARMS are
6225 vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
6226 or PARM_DECL.
6228 Consider the example:
6229 template <class T> class A;
6230 template<template <class U> class TT> class B;
6232 For B<A>, PARM_PARMS are the parameters to TT, while ARG_PARMS are
6233 the parameters to A, and OUTER_ARGS contains A. */
6235 static int
6236 coerce_template_template_parms (tree parm_parms,
6237 tree arg_parms,
6238 tsubst_flags_t complain,
6239 tree in_decl,
6240 tree outer_args)
6242 int nparms, nargs, i;
6243 tree parm, arg;
6244 int variadic_p = 0;
6246 gcc_assert (TREE_CODE (parm_parms) == TREE_VEC);
6247 gcc_assert (TREE_CODE (arg_parms) == TREE_VEC);
6249 nparms = TREE_VEC_LENGTH (parm_parms);
6250 nargs = TREE_VEC_LENGTH (arg_parms);
6252 /* Determine whether we have a parameter pack at the end of the
6253 template template parameter's template parameter list. */
6254 if (TREE_VEC_ELT (parm_parms, nparms - 1) != error_mark_node)
6256 parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, nparms - 1));
6258 if (error_operand_p (parm))
6259 return 0;
6261 switch (TREE_CODE (parm))
6263 case TEMPLATE_DECL:
6264 case TYPE_DECL:
6265 if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
6266 variadic_p = 1;
6267 break;
6269 case PARM_DECL:
6270 if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
6271 variadic_p = 1;
6272 break;
6274 default:
6275 gcc_unreachable ();
6279 if (nargs != nparms
6280 && !(variadic_p && nargs >= nparms - 1))
6281 return 0;
6283 /* Check all of the template parameters except the parameter pack at
6284 the end (if any). */
6285 for (i = 0; i < nparms - variadic_p; ++i)
6287 if (TREE_VEC_ELT (parm_parms, i) == error_mark_node
6288 || TREE_VEC_ELT (arg_parms, i) == error_mark_node)
6289 continue;
6291 parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
6292 arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
6294 if (!coerce_template_template_parm (parm, arg, complain, in_decl,
6295 outer_args))
6296 return 0;
6300 if (variadic_p)
6302 /* Check each of the template parameters in the template
6303 argument against the template parameter pack at the end of
6304 the template template parameter. */
6305 if (TREE_VEC_ELT (parm_parms, i) == error_mark_node)
6306 return 0;
6308 parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
6310 for (; i < nargs; ++i)
6312 if (TREE_VEC_ELT (arg_parms, i) == error_mark_node)
6313 continue;
6315 arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
6317 if (!coerce_template_template_parm (parm, arg, complain, in_decl,
6318 outer_args))
6319 return 0;
6323 return 1;
6326 /* Verifies that the deduced template arguments (in TARGS) for the
6327 template template parameters (in TPARMS) represent valid bindings,
6328 by comparing the template parameter list of each template argument
6329 to the template parameter list of its corresponding template
6330 template parameter, in accordance with DR150. This
6331 routine can only be called after all template arguments have been
6332 deduced. It will return TRUE if all of the template template
6333 parameter bindings are okay, FALSE otherwise. */
6334 bool
6335 template_template_parm_bindings_ok_p (tree tparms, tree targs)
6337 int i, ntparms = TREE_VEC_LENGTH (tparms);
6338 bool ret = true;
6340 /* We're dealing with template parms in this process. */
6341 ++processing_template_decl;
6343 targs = INNERMOST_TEMPLATE_ARGS (targs);
6345 for (i = 0; i < ntparms; ++i)
6347 tree tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
6348 tree targ = TREE_VEC_ELT (targs, i);
6350 if (TREE_CODE (tparm) == TEMPLATE_DECL && targ)
6352 tree packed_args = NULL_TREE;
6353 int idx, len = 1;
6355 if (ARGUMENT_PACK_P (targ))
6357 /* Look inside the argument pack. */
6358 packed_args = ARGUMENT_PACK_ARGS (targ);
6359 len = TREE_VEC_LENGTH (packed_args);
6362 for (idx = 0; idx < len; ++idx)
6364 tree targ_parms = NULL_TREE;
6366 if (packed_args)
6367 /* Extract the next argument from the argument
6368 pack. */
6369 targ = TREE_VEC_ELT (packed_args, idx);
6371 if (PACK_EXPANSION_P (targ))
6372 /* Look at the pattern of the pack expansion. */
6373 targ = PACK_EXPANSION_PATTERN (targ);
6375 /* Extract the template parameters from the template
6376 argument. */
6377 if (TREE_CODE (targ) == TEMPLATE_DECL)
6378 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (targ);
6379 else if (TREE_CODE (targ) == TEMPLATE_TEMPLATE_PARM)
6380 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_NAME (targ));
6382 /* Verify that we can coerce the template template
6383 parameters from the template argument to the template
6384 parameter. This requires an exact match. */
6385 if (targ_parms
6386 && !coerce_template_template_parms
6387 (DECL_INNERMOST_TEMPLATE_PARMS (tparm),
6388 targ_parms,
6389 tf_none,
6390 tparm,
6391 targs))
6393 ret = false;
6394 goto out;
6400 out:
6402 --processing_template_decl;
6403 return ret;
6406 /* Since type attributes aren't mangled, we need to strip them from
6407 template type arguments. */
6409 static tree
6410 canonicalize_type_argument (tree arg, tsubst_flags_t complain)
6412 tree mv;
6413 if (!arg || arg == error_mark_node || arg == TYPE_CANONICAL (arg))
6414 return arg;
6415 mv = TYPE_MAIN_VARIANT (arg);
6416 arg = strip_typedefs (arg);
6417 if (TYPE_ALIGN (arg) != TYPE_ALIGN (mv)
6418 || TYPE_ATTRIBUTES (arg) != TYPE_ATTRIBUTES (mv))
6420 if (complain & tf_warning)
6421 warning (0, "ignoring attributes on template argument %qT", arg);
6422 arg = build_aligned_type (arg, TYPE_ALIGN (mv));
6423 arg = cp_build_type_attribute_variant (arg, TYPE_ATTRIBUTES (mv));
6425 return arg;
6428 /* Convert the indicated template ARG as necessary to match the
6429 indicated template PARM. Returns the converted ARG, or
6430 error_mark_node if the conversion was unsuccessful. Error and
6431 warning messages are issued under control of COMPLAIN. This
6432 conversion is for the Ith parameter in the parameter list. ARGS is
6433 the full set of template arguments deduced so far. */
6435 static tree
6436 convert_template_argument (tree parm,
6437 tree arg,
6438 tree args,
6439 tsubst_flags_t complain,
6440 int i,
6441 tree in_decl)
6443 tree orig_arg;
6444 tree val;
6445 int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
6447 if (TREE_CODE (arg) == TREE_LIST
6448 && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
6450 /* The template argument was the name of some
6451 member function. That's usually
6452 invalid, but static members are OK. In any
6453 case, grab the underlying fields/functions
6454 and issue an error later if required. */
6455 orig_arg = TREE_VALUE (arg);
6456 TREE_TYPE (arg) = unknown_type_node;
6459 orig_arg = arg;
6461 requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
6462 requires_type = (TREE_CODE (parm) == TYPE_DECL
6463 || requires_tmpl_type);
6465 /* When determining whether an argument pack expansion is a template,
6466 look at the pattern. */
6467 if (TREE_CODE (arg) == TYPE_PACK_EXPANSION)
6468 arg = PACK_EXPANSION_PATTERN (arg);
6470 /* Deal with an injected-class-name used as a template template arg. */
6471 if (requires_tmpl_type && CLASS_TYPE_P (arg))
6473 tree t = maybe_get_template_decl_from_type_decl (TYPE_NAME (arg));
6474 if (TREE_CODE (t) == TEMPLATE_DECL)
6476 if (cxx_dialect >= cxx11)
6477 /* OK under DR 1004. */;
6478 else if (complain & tf_warning_or_error)
6479 pedwarn (input_location, OPT_Wpedantic, "injected-class-name %qD"
6480 " used as template template argument", TYPE_NAME (arg));
6481 else if (flag_pedantic_errors)
6482 t = arg;
6484 arg = t;
6488 is_tmpl_type =
6489 ((TREE_CODE (arg) == TEMPLATE_DECL
6490 && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
6491 || (requires_tmpl_type && TREE_CODE (arg) == TYPE_ARGUMENT_PACK)
6492 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
6493 || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
6495 if (is_tmpl_type
6496 && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
6497 || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
6498 arg = TYPE_STUB_DECL (arg);
6500 is_type = TYPE_P (arg) || is_tmpl_type;
6502 if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
6503 && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
6505 if (TREE_CODE (TREE_OPERAND (arg, 1)) == BIT_NOT_EXPR)
6507 if (complain & tf_error)
6508 error ("invalid use of destructor %qE as a type", orig_arg);
6509 return error_mark_node;
6512 permerror (input_location,
6513 "to refer to a type member of a template parameter, "
6514 "use %<typename %E%>", orig_arg);
6516 orig_arg = make_typename_type (TREE_OPERAND (arg, 0),
6517 TREE_OPERAND (arg, 1),
6518 typename_type,
6519 complain);
6520 arg = orig_arg;
6521 is_type = 1;
6523 if (is_type != requires_type)
6525 if (in_decl)
6527 if (complain & tf_error)
6529 error ("type/value mismatch at argument %d in template "
6530 "parameter list for %qD",
6531 i + 1, in_decl);
6532 if (is_type)
6533 inform (input_location,
6534 " expected a constant of type %qT, got %qT",
6535 TREE_TYPE (parm),
6536 (DECL_P (arg) ? DECL_NAME (arg) : orig_arg));
6537 else if (requires_tmpl_type)
6538 inform (input_location,
6539 " expected a class template, got %qE", orig_arg);
6540 else
6541 inform (input_location,
6542 " expected a type, got %qE", orig_arg);
6545 return error_mark_node;
6547 if (is_tmpl_type ^ requires_tmpl_type)
6549 if (in_decl && (complain & tf_error))
6551 error ("type/value mismatch at argument %d in template "
6552 "parameter list for %qD",
6553 i + 1, in_decl);
6554 if (is_tmpl_type)
6555 inform (input_location,
6556 " expected a type, got %qT", DECL_NAME (arg));
6557 else
6558 inform (input_location,
6559 " expected a class template, got %qT", orig_arg);
6561 return error_mark_node;
6564 if (is_type)
6566 if (requires_tmpl_type)
6568 if (template_parameter_pack_p (parm) && ARGUMENT_PACK_P (orig_arg))
6569 val = orig_arg;
6570 else if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
6571 /* The number of argument required is not known yet.
6572 Just accept it for now. */
6573 val = TREE_TYPE (arg);
6574 else
6576 tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
6577 tree argparm;
6579 /* Strip alias templates that are equivalent to another
6580 template. */
6581 arg = get_underlying_template (arg);
6582 argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
6584 if (coerce_template_template_parms (parmparm, argparm,
6585 complain, in_decl,
6586 args))
6588 val = arg;
6590 /* TEMPLATE_TEMPLATE_PARM node is preferred over
6591 TEMPLATE_DECL. */
6592 if (val != error_mark_node)
6594 if (DECL_TEMPLATE_TEMPLATE_PARM_P (val))
6595 val = TREE_TYPE (val);
6596 if (TREE_CODE (orig_arg) == TYPE_PACK_EXPANSION)
6597 val = make_pack_expansion (val);
6600 else
6602 if (in_decl && (complain & tf_error))
6604 error ("type/value mismatch at argument %d in "
6605 "template parameter list for %qD",
6606 i + 1, in_decl);
6607 inform (input_location,
6608 " expected a template of type %qD, got %qT",
6609 parm, orig_arg);
6612 val = error_mark_node;
6616 else
6617 val = orig_arg;
6618 /* We only form one instance of each template specialization.
6619 Therefore, if we use a non-canonical variant (i.e., a
6620 typedef), any future messages referring to the type will use
6621 the typedef, which is confusing if those future uses do not
6622 themselves also use the typedef. */
6623 if (TYPE_P (val))
6624 val = canonicalize_type_argument (val, complain);
6626 else
6628 tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
6630 if (invalid_nontype_parm_type_p (t, complain))
6631 return error_mark_node;
6633 if (template_parameter_pack_p (parm) && ARGUMENT_PACK_P (orig_arg))
6635 if (same_type_p (t, TREE_TYPE (orig_arg)))
6636 val = orig_arg;
6637 else
6639 /* Not sure if this is reachable, but it doesn't hurt
6640 to be robust. */
6641 error ("type mismatch in nontype parameter pack");
6642 val = error_mark_node;
6645 else if (!dependent_template_arg_p (orig_arg)
6646 && !uses_template_parms (t))
6647 /* We used to call digest_init here. However, digest_init
6648 will report errors, which we don't want when complain
6649 is zero. More importantly, digest_init will try too
6650 hard to convert things: for example, `0' should not be
6651 converted to pointer type at this point according to
6652 the standard. Accepting this is not merely an
6653 extension, since deciding whether or not these
6654 conversions can occur is part of determining which
6655 function template to call, or whether a given explicit
6656 argument specification is valid. */
6657 val = convert_nontype_argument (t, orig_arg, complain);
6658 else
6659 val = strip_typedefs_expr (orig_arg);
6661 if (val == NULL_TREE)
6662 val = error_mark_node;
6663 else if (val == error_mark_node && (complain & tf_error))
6664 error ("could not convert template argument %qE to %qT", orig_arg, t);
6666 if (TREE_CODE (val) == SCOPE_REF)
6668 /* Strip typedefs from the SCOPE_REF. */
6669 tree type = canonicalize_type_argument (TREE_TYPE (val), complain);
6670 tree scope = canonicalize_type_argument (TREE_OPERAND (val, 0),
6671 complain);
6672 val = build_qualified_name (type, scope, TREE_OPERAND (val, 1),
6673 QUALIFIED_NAME_IS_TEMPLATE (val));
6677 return val;
6680 /* Coerces the remaining template arguments in INNER_ARGS (from
6681 ARG_IDX to the end) into the parameter pack at PARM_IDX in PARMS.
6682 Returns the coerced argument pack. PARM_IDX is the position of this
6683 parameter in the template parameter list. ARGS is the original
6684 template argument list. */
6685 static tree
6686 coerce_template_parameter_pack (tree parms,
6687 int parm_idx,
6688 tree args,
6689 tree inner_args,
6690 int arg_idx,
6691 tree new_args,
6692 int* lost,
6693 tree in_decl,
6694 tsubst_flags_t complain)
6696 tree parm = TREE_VEC_ELT (parms, parm_idx);
6697 int nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
6698 tree packed_args;
6699 tree argument_pack;
6700 tree packed_parms = NULL_TREE;
6702 if (arg_idx > nargs)
6703 arg_idx = nargs;
6705 if (tree packs = fixed_parameter_pack_p (TREE_VALUE (parm)))
6707 /* When the template parameter is a non-type template parameter pack
6708 or template template parameter pack whose type or template
6709 parameters use parameter packs, we know exactly how many arguments
6710 we are looking for. Build a vector of the instantiated decls for
6711 these template parameters in PACKED_PARMS. */
6712 /* We can't use make_pack_expansion here because it would interpret a
6713 _DECL as a use rather than a declaration. */
6714 tree decl = TREE_VALUE (parm);
6715 tree exp = cxx_make_type (TYPE_PACK_EXPANSION);
6716 SET_PACK_EXPANSION_PATTERN (exp, decl);
6717 PACK_EXPANSION_PARAMETER_PACKS (exp) = packs;
6718 SET_TYPE_STRUCTURAL_EQUALITY (exp);
6720 TREE_VEC_LENGTH (args)--;
6721 packed_parms = tsubst_pack_expansion (exp, args, complain, decl);
6722 TREE_VEC_LENGTH (args)++;
6724 if (packed_parms == error_mark_node)
6725 return error_mark_node;
6727 /* If we're doing a partial instantiation of a member template,
6728 verify that all of the types used for the non-type
6729 template parameter pack are, in fact, valid for non-type
6730 template parameters. */
6731 if (arg_idx < nargs
6732 && PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx)))
6734 int j, len = TREE_VEC_LENGTH (packed_parms);
6735 for (j = 0; j < len; ++j)
6737 tree t = TREE_TYPE (TREE_VEC_ELT (packed_parms, j));
6738 if (invalid_nontype_parm_type_p (t, complain))
6739 return error_mark_node;
6743 packed_args = make_tree_vec (TREE_VEC_LENGTH (packed_parms));
6745 else
6746 packed_args = make_tree_vec (nargs - arg_idx);
6748 /* Convert the remaining arguments, which will be a part of the
6749 parameter pack "parm". */
6750 for (; arg_idx < nargs; ++arg_idx)
6752 tree arg = TREE_VEC_ELT (inner_args, arg_idx);
6753 tree actual_parm = TREE_VALUE (parm);
6754 int pack_idx = arg_idx - parm_idx;
6756 if (packed_parms)
6758 /* Once we've packed as many args as we have types, stop. */
6759 if (pack_idx >= TREE_VEC_LENGTH (packed_parms))
6760 break;
6761 else if (PACK_EXPANSION_P (arg))
6762 /* We don't know how many args we have yet, just
6763 use the unconverted ones for now. */
6764 return NULL_TREE;
6765 else
6766 actual_parm = TREE_VEC_ELT (packed_parms, pack_idx);
6769 if (arg == error_mark_node)
6771 if (complain & tf_error)
6772 error ("template argument %d is invalid", arg_idx + 1);
6774 else
6775 arg = convert_template_argument (actual_parm,
6776 arg, new_args, complain, parm_idx,
6777 in_decl);
6778 if (arg == error_mark_node)
6779 (*lost)++;
6780 TREE_VEC_ELT (packed_args, pack_idx) = arg;
6783 if (arg_idx - parm_idx < TREE_VEC_LENGTH (packed_args)
6784 && TREE_VEC_LENGTH (packed_args) > 0)
6786 if (complain & tf_error)
6787 error ("wrong number of template arguments (%d, should be %d)",
6788 arg_idx - parm_idx, TREE_VEC_LENGTH (packed_args));
6789 return error_mark_node;
6792 if (TREE_CODE (TREE_VALUE (parm)) == TYPE_DECL
6793 || TREE_CODE (TREE_VALUE (parm)) == TEMPLATE_DECL)
6794 argument_pack = cxx_make_type (TYPE_ARGUMENT_PACK);
6795 else
6797 argument_pack = make_node (NONTYPE_ARGUMENT_PACK);
6798 TREE_TYPE (argument_pack)
6799 = tsubst (TREE_TYPE (TREE_VALUE (parm)), new_args, complain, in_decl);
6800 TREE_CONSTANT (argument_pack) = 1;
6803 SET_ARGUMENT_PACK_ARGS (argument_pack, packed_args);
6804 #ifdef ENABLE_CHECKING
6805 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (packed_args,
6806 TREE_VEC_LENGTH (packed_args));
6807 #endif
6808 return argument_pack;
6811 /* Returns the number of pack expansions in the template argument vector
6812 ARGS. */
6814 static int
6815 pack_expansion_args_count (tree args)
6817 int i;
6818 int count = 0;
6819 if (args)
6820 for (i = 0; i < TREE_VEC_LENGTH (args); ++i)
6822 tree elt = TREE_VEC_ELT (args, i);
6823 if (elt && PACK_EXPANSION_P (elt))
6824 ++count;
6826 return count;
6829 /* Convert all template arguments to their appropriate types, and
6830 return a vector containing the innermost resulting template
6831 arguments. If any error occurs, return error_mark_node. Error and
6832 warning messages are issued under control of COMPLAIN.
6834 If REQUIRE_ALL_ARGS is false, argument deduction will be performed
6835 for arguments not specified in ARGS. Otherwise, if
6836 USE_DEFAULT_ARGS is true, default arguments will be used to fill in
6837 unspecified arguments. If REQUIRE_ALL_ARGS is true, but
6838 USE_DEFAULT_ARGS is false, then all arguments must be specified in
6839 ARGS. */
6841 static tree
6842 coerce_template_parms (tree parms,
6843 tree args,
6844 tree in_decl,
6845 tsubst_flags_t complain,
6846 bool require_all_args,
6847 bool use_default_args)
6849 int nparms, nargs, parm_idx, arg_idx, lost = 0;
6850 tree orig_inner_args;
6851 tree inner_args;
6852 tree new_args;
6853 tree new_inner_args;
6854 int saved_unevaluated_operand;
6855 int saved_inhibit_evaluation_warnings;
6857 /* When used as a boolean value, indicates whether this is a
6858 variadic template parameter list. Since it's an int, we can also
6859 subtract it from nparms to get the number of non-variadic
6860 parameters. */
6861 int variadic_p = 0;
6862 int variadic_args_p = 0;
6863 int post_variadic_parms = 0;
6865 /* Likewise for parameters with default arguments. */
6866 int default_p = 0;
6868 if (args == error_mark_node)
6869 return error_mark_node;
6871 nparms = TREE_VEC_LENGTH (parms);
6873 /* Determine if there are any parameter packs or default arguments. */
6874 for (parm_idx = 0; parm_idx < nparms; ++parm_idx)
6876 tree parm = TREE_VEC_ELT (parms, parm_idx);
6877 if (variadic_p)
6878 ++post_variadic_parms;
6879 if (template_parameter_pack_p (TREE_VALUE (parm)))
6880 ++variadic_p;
6881 if (TREE_PURPOSE (parm))
6882 ++default_p;
6885 inner_args = orig_inner_args = INNERMOST_TEMPLATE_ARGS (args);
6886 /* If there are no parameters that follow a parameter pack, we need to
6887 expand any argument packs so that we can deduce a parameter pack from
6888 some non-packed args followed by an argument pack, as in variadic85.C.
6889 If there are such parameters, we need to leave argument packs intact
6890 so the arguments are assigned properly. This can happen when dealing
6891 with a nested class inside a partial specialization of a class
6892 template, as in variadic92.C, or when deducing a template parameter pack
6893 from a sub-declarator, as in variadic114.C. */
6894 if (!post_variadic_parms)
6895 inner_args = expand_template_argument_pack (inner_args);
6897 /* Count any pack expansion args. */
6898 variadic_args_p = pack_expansion_args_count (inner_args);
6900 nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
6901 if ((nargs > nparms && !variadic_p)
6902 || (nargs < nparms - variadic_p
6903 && require_all_args
6904 && !variadic_args_p
6905 && (!use_default_args
6906 || (TREE_VEC_ELT (parms, nargs) != error_mark_node
6907 && !TREE_PURPOSE (TREE_VEC_ELT (parms, nargs))))))
6909 if (complain & tf_error)
6911 if (variadic_p || default_p)
6913 nparms -= variadic_p + default_p;
6914 error ("wrong number of template arguments "
6915 "(%d, should be at least %d)", nargs, nparms);
6917 else
6918 error ("wrong number of template arguments "
6919 "(%d, should be %d)", nargs, nparms);
6921 if (in_decl)
6922 inform (input_location, "provided for %q+D", in_decl);
6925 return error_mark_node;
6927 /* We can't pass a pack expansion to a non-pack parameter of an alias
6928 template (DR 1430). */
6929 else if (in_decl && DECL_ALIAS_TEMPLATE_P (in_decl)
6930 && variadic_args_p
6931 && nargs - variadic_args_p < nparms - variadic_p)
6933 if (complain & tf_error)
6935 for (int i = 0; i < TREE_VEC_LENGTH (inner_args); ++i)
6937 tree arg = TREE_VEC_ELT (inner_args, i);
6938 tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
6940 if (PACK_EXPANSION_P (arg)
6941 && !template_parameter_pack_p (parm))
6943 error ("pack expansion argument for non-pack parameter "
6944 "%qD of alias template %qD", parm, in_decl);
6945 inform (DECL_SOURCE_LOCATION (parm), "declared here");
6946 goto found;
6949 gcc_unreachable ();
6950 found:;
6952 return error_mark_node;
6955 /* We need to evaluate the template arguments, even though this
6956 template-id may be nested within a "sizeof". */
6957 saved_unevaluated_operand = cp_unevaluated_operand;
6958 cp_unevaluated_operand = 0;
6959 saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
6960 c_inhibit_evaluation_warnings = 0;
6961 new_inner_args = make_tree_vec (nparms);
6962 new_args = add_outermost_template_args (args, new_inner_args);
6963 int pack_adjust = 0;
6964 for (parm_idx = 0, arg_idx = 0; parm_idx < nparms; parm_idx++, arg_idx++)
6966 tree arg;
6967 tree parm;
6969 /* Get the Ith template parameter. */
6970 parm = TREE_VEC_ELT (parms, parm_idx);
6972 if (parm == error_mark_node)
6974 TREE_VEC_ELT (new_inner_args, arg_idx) = error_mark_node;
6975 continue;
6978 /* Calculate the next argument. */
6979 if (arg_idx < nargs)
6980 arg = TREE_VEC_ELT (inner_args, arg_idx);
6981 else
6982 arg = NULL_TREE;
6984 if (template_parameter_pack_p (TREE_VALUE (parm))
6985 && !(arg && ARGUMENT_PACK_P (arg)))
6987 /* Some arguments will be placed in the
6988 template parameter pack PARM. */
6989 arg = coerce_template_parameter_pack (parms, parm_idx, args,
6990 inner_args, arg_idx,
6991 new_args, &lost,
6992 in_decl, complain);
6994 if (arg == NULL_TREE)
6996 /* We don't know how many args we have yet, just use the
6997 unconverted (and still packed) ones for now. */
6998 new_inner_args = orig_inner_args;
6999 arg_idx = nargs;
7000 break;
7003 TREE_VEC_ELT (new_inner_args, parm_idx) = arg;
7005 /* Store this argument. */
7006 if (arg == error_mark_node)
7008 lost++;
7009 /* We are done with all of the arguments. */
7010 arg_idx = nargs;
7012 else
7014 pack_adjust = TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg)) - 1;
7015 arg_idx += pack_adjust;
7018 continue;
7020 else if (arg)
7022 if (PACK_EXPANSION_P (arg))
7024 /* "If every valid specialization of a variadic template
7025 requires an empty template parameter pack, the template is
7026 ill-formed, no diagnostic required." So check that the
7027 pattern works with this parameter. */
7028 tree pattern = PACK_EXPANSION_PATTERN (arg);
7029 tree conv = convert_template_argument (TREE_VALUE (parm),
7030 pattern, new_args,
7031 complain, parm_idx,
7032 in_decl);
7033 if (conv == error_mark_node)
7035 inform (input_location, "so any instantiation with a "
7036 "non-empty parameter pack would be ill-formed");
7037 ++lost;
7039 else if (TYPE_P (conv) && !TYPE_P (pattern))
7040 /* Recover from missing typename. */
7041 TREE_VEC_ELT (inner_args, arg_idx)
7042 = make_pack_expansion (conv);
7044 /* We don't know how many args we have yet, just
7045 use the unconverted ones for now. */
7046 new_inner_args = inner_args;
7047 arg_idx = nargs;
7048 break;
7051 else if (require_all_args)
7053 /* There must be a default arg in this case. */
7054 arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
7055 complain, in_decl);
7056 /* The position of the first default template argument,
7057 is also the number of non-defaulted arguments in NEW_INNER_ARGS.
7058 Record that. */
7059 if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args))
7060 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args,
7061 arg_idx - pack_adjust);
7063 else
7064 break;
7066 if (arg == error_mark_node)
7068 if (complain & tf_error)
7069 error ("template argument %d is invalid", arg_idx + 1);
7071 else if (!arg)
7072 /* This only occurs if there was an error in the template
7073 parameter list itself (which we would already have
7074 reported) that we are trying to recover from, e.g., a class
7075 template with a parameter list such as
7076 template<typename..., typename>. */
7077 ++lost;
7078 else
7079 arg = convert_template_argument (TREE_VALUE (parm),
7080 arg, new_args, complain,
7081 parm_idx, in_decl);
7083 if (arg == error_mark_node)
7084 lost++;
7085 TREE_VEC_ELT (new_inner_args, arg_idx - pack_adjust) = arg;
7087 cp_unevaluated_operand = saved_unevaluated_operand;
7088 c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
7090 if (variadic_p && arg_idx < nargs)
7092 if (complain & tf_error)
7094 error ("wrong number of template arguments "
7095 "(%d, should be %d)", nargs, arg_idx);
7096 if (in_decl)
7097 error ("provided for %q+D", in_decl);
7099 return error_mark_node;
7102 if (lost)
7103 return error_mark_node;
7105 #ifdef ENABLE_CHECKING
7106 if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args))
7107 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args,
7108 TREE_VEC_LENGTH (new_inner_args));
7109 #endif
7111 return new_inner_args;
7114 /* Like coerce_template_parms. If PARMS represents all template
7115 parameters levels, this function returns a vector of vectors
7116 representing all the resulting argument levels. Note that in this
7117 case, only the innermost arguments are coerced because the
7118 outermost ones are supposed to have been coerced already.
7120 Otherwise, if PARMS represents only (the innermost) vector of
7121 parameters, this function returns a vector containing just the
7122 innermost resulting arguments. */
7124 static tree
7125 coerce_innermost_template_parms (tree parms,
7126 tree args,
7127 tree in_decl,
7128 tsubst_flags_t complain,
7129 bool require_all_args,
7130 bool use_default_args)
7132 int parms_depth = TMPL_PARMS_DEPTH (parms);
7133 int args_depth = TMPL_ARGS_DEPTH (args);
7134 tree coerced_args;
7136 if (parms_depth > 1)
7138 coerced_args = make_tree_vec (parms_depth);
7139 tree level;
7140 int cur_depth;
7142 for (level = parms, cur_depth = parms_depth;
7143 parms_depth > 0 && level != NULL_TREE;
7144 level = TREE_CHAIN (level), --cur_depth)
7146 tree l;
7147 if (cur_depth == args_depth)
7148 l = coerce_template_parms (TREE_VALUE (level),
7149 args, in_decl, complain,
7150 require_all_args,
7151 use_default_args);
7152 else
7153 l = TMPL_ARGS_LEVEL (args, cur_depth);
7155 if (l == error_mark_node)
7156 return error_mark_node;
7158 SET_TMPL_ARGS_LEVEL (coerced_args, cur_depth, l);
7161 else
7162 coerced_args = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parms),
7163 args, in_decl, complain,
7164 require_all_args,
7165 use_default_args);
7166 return coerced_args;
7169 /* Returns 1 if template args OT and NT are equivalent. */
7171 static int
7172 template_args_equal (tree ot, tree nt)
7174 if (nt == ot)
7175 return 1;
7176 if (nt == NULL_TREE || ot == NULL_TREE)
7177 return false;
7179 if (TREE_CODE (nt) == TREE_VEC)
7180 /* For member templates */
7181 return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
7182 else if (PACK_EXPANSION_P (ot))
7183 return (PACK_EXPANSION_P (nt)
7184 && template_args_equal (PACK_EXPANSION_PATTERN (ot),
7185 PACK_EXPANSION_PATTERN (nt))
7186 && template_args_equal (PACK_EXPANSION_EXTRA_ARGS (ot),
7187 PACK_EXPANSION_EXTRA_ARGS (nt)));
7188 else if (ARGUMENT_PACK_P (ot))
7190 int i, len;
7191 tree opack, npack;
7193 if (!ARGUMENT_PACK_P (nt))
7194 return 0;
7196 opack = ARGUMENT_PACK_ARGS (ot);
7197 npack = ARGUMENT_PACK_ARGS (nt);
7198 len = TREE_VEC_LENGTH (opack);
7199 if (TREE_VEC_LENGTH (npack) != len)
7200 return 0;
7201 for (i = 0; i < len; ++i)
7202 if (!template_args_equal (TREE_VEC_ELT (opack, i),
7203 TREE_VEC_ELT (npack, i)))
7204 return 0;
7205 return 1;
7207 else if (ot && TREE_CODE (ot) == ARGUMENT_PACK_SELECT)
7209 /* We get here probably because we are in the middle of substituting
7210 into the pattern of a pack expansion. In that case the
7211 ARGUMENT_PACK_SELECT temporarily replaces the pack argument we are
7212 interested in. So we want to use the initial pack argument for
7213 the comparison. */
7214 ot = ARGUMENT_PACK_SELECT_FROM_PACK (ot);
7215 if (nt && TREE_CODE (nt) == ARGUMENT_PACK_SELECT)
7216 nt = ARGUMENT_PACK_SELECT_FROM_PACK (nt);
7217 return template_args_equal (ot, nt);
7219 else if (TYPE_P (nt))
7220 return TYPE_P (ot) && same_type_p (ot, nt);
7221 else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
7222 return 0;
7223 else
7224 return cp_tree_equal (ot, nt);
7227 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets of
7228 template arguments. Returns 0 otherwise, and updates OLDARG_PTR and
7229 NEWARG_PTR with the offending arguments if they are non-NULL. */
7231 static int
7232 comp_template_args_with_info (tree oldargs, tree newargs,
7233 tree *oldarg_ptr, tree *newarg_ptr)
7235 int i;
7237 if (oldargs == newargs)
7238 return 1;
7240 if (!oldargs || !newargs)
7241 return 0;
7243 if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
7244 return 0;
7246 for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
7248 tree nt = TREE_VEC_ELT (newargs, i);
7249 tree ot = TREE_VEC_ELT (oldargs, i);
7251 if (! template_args_equal (ot, nt))
7253 if (oldarg_ptr != NULL)
7254 *oldarg_ptr = ot;
7255 if (newarg_ptr != NULL)
7256 *newarg_ptr = nt;
7257 return 0;
7260 return 1;
7263 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
7264 of template arguments. Returns 0 otherwise. */
7267 comp_template_args (tree oldargs, tree newargs)
7269 return comp_template_args_with_info (oldargs, newargs, NULL, NULL);
7272 static void
7273 add_pending_template (tree d)
7275 tree ti = (TYPE_P (d)
7276 ? CLASSTYPE_TEMPLATE_INFO (d)
7277 : DECL_TEMPLATE_INFO (d));
7278 struct pending_template *pt;
7279 int level;
7281 if (TI_PENDING_TEMPLATE_FLAG (ti))
7282 return;
7284 /* We are called both from instantiate_decl, where we've already had a
7285 tinst_level pushed, and instantiate_template, where we haven't.
7286 Compensate. */
7287 level = !current_tinst_level || current_tinst_level->decl != d;
7289 if (level)
7290 push_tinst_level (d);
7292 pt = ggc_alloc<pending_template> ();
7293 pt->next = NULL;
7294 pt->tinst = current_tinst_level;
7295 if (last_pending_template)
7296 last_pending_template->next = pt;
7297 else
7298 pending_templates = pt;
7300 last_pending_template = pt;
7302 TI_PENDING_TEMPLATE_FLAG (ti) = 1;
7304 if (level)
7305 pop_tinst_level ();
7309 /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
7310 ARGLIST. Valid choices for FNS are given in the cp-tree.def
7311 documentation for TEMPLATE_ID_EXPR. */
7313 tree
7314 lookup_template_function (tree fns, tree arglist)
7316 tree type;
7318 if (fns == error_mark_node || arglist == error_mark_node)
7319 return error_mark_node;
7321 gcc_assert (!arglist || TREE_CODE (arglist) == TREE_VEC);
7323 if (!is_overloaded_fn (fns) && !identifier_p (fns))
7325 error ("%q#D is not a function template", fns);
7326 return error_mark_node;
7329 if (BASELINK_P (fns))
7331 BASELINK_FUNCTIONS (fns) = build2 (TEMPLATE_ID_EXPR,
7332 unknown_type_node,
7333 BASELINK_FUNCTIONS (fns),
7334 arglist);
7335 return fns;
7338 type = TREE_TYPE (fns);
7339 if (TREE_CODE (fns) == OVERLOAD || !type)
7340 type = unknown_type_node;
7342 return build2 (TEMPLATE_ID_EXPR, type, fns, arglist);
7345 /* Within the scope of a template class S<T>, the name S gets bound
7346 (in build_self_reference) to a TYPE_DECL for the class, not a
7347 TEMPLATE_DECL. If DECL is a TYPE_DECL for current_class_type,
7348 or one of its enclosing classes, and that type is a template,
7349 return the associated TEMPLATE_DECL. Otherwise, the original
7350 DECL is returned.
7352 Also handle the case when DECL is a TREE_LIST of ambiguous
7353 injected-class-names from different bases. */
7355 tree
7356 maybe_get_template_decl_from_type_decl (tree decl)
7358 if (decl == NULL_TREE)
7359 return decl;
7361 /* DR 176: A lookup that finds an injected-class-name (10.2
7362 [class.member.lookup]) can result in an ambiguity in certain cases
7363 (for example, if it is found in more than one base class). If all of
7364 the injected-class-names that are found refer to specializations of
7365 the same class template, and if the name is followed by a
7366 template-argument-list, the reference refers to the class template
7367 itself and not a specialization thereof, and is not ambiguous. */
7368 if (TREE_CODE (decl) == TREE_LIST)
7370 tree t, tmpl = NULL_TREE;
7371 for (t = decl; t; t = TREE_CHAIN (t))
7373 tree elt = maybe_get_template_decl_from_type_decl (TREE_VALUE (t));
7374 if (!tmpl)
7375 tmpl = elt;
7376 else if (tmpl != elt)
7377 break;
7379 if (tmpl && t == NULL_TREE)
7380 return tmpl;
7381 else
7382 return decl;
7385 return (decl != NULL_TREE
7386 && DECL_SELF_REFERENCE_P (decl)
7387 && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
7388 ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
7391 /* Given an IDENTIFIER_NODE (or type TEMPLATE_DECL) and a chain of
7392 parameters, find the desired type.
7394 D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
7396 IN_DECL, if non-NULL, is the template declaration we are trying to
7397 instantiate.
7399 If ENTERING_SCOPE is nonzero, we are about to enter the scope of
7400 the class we are looking up.
7402 Issue error and warning messages under control of COMPLAIN.
7404 If the template class is really a local class in a template
7405 function, then the FUNCTION_CONTEXT is the function in which it is
7406 being instantiated.
7408 ??? Note that this function is currently called *twice* for each
7409 template-id: the first time from the parser, while creating the
7410 incomplete type (finish_template_type), and the second type during the
7411 real instantiation (instantiate_template_class). This is surely something
7412 that we want to avoid. It also causes some problems with argument
7413 coercion (see convert_nontype_argument for more information on this). */
7415 static tree
7416 lookup_template_class_1 (tree d1, tree arglist, tree in_decl, tree context,
7417 int entering_scope, tsubst_flags_t complain)
7419 tree templ = NULL_TREE, parmlist;
7420 tree t;
7421 spec_entry **slot;
7422 spec_entry *entry;
7423 spec_entry elt;
7424 hashval_t hash;
7426 if (identifier_p (d1))
7428 tree value = innermost_non_namespace_value (d1);
7429 if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
7430 templ = value;
7431 else
7433 if (context)
7434 push_decl_namespace (context);
7435 templ = lookup_name (d1);
7436 templ = maybe_get_template_decl_from_type_decl (templ);
7437 if (context)
7438 pop_decl_namespace ();
7440 if (templ)
7441 context = DECL_CONTEXT (templ);
7443 else if (TREE_CODE (d1) == TYPE_DECL && MAYBE_CLASS_TYPE_P (TREE_TYPE (d1)))
7445 tree type = TREE_TYPE (d1);
7447 /* If we are declaring a constructor, say A<T>::A<T>, we will get
7448 an implicit typename for the second A. Deal with it. */
7449 if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
7450 type = TREE_TYPE (type);
7452 if (CLASSTYPE_TEMPLATE_INFO (type))
7454 templ = CLASSTYPE_TI_TEMPLATE (type);
7455 d1 = DECL_NAME (templ);
7458 else if (TREE_CODE (d1) == ENUMERAL_TYPE
7459 || (TYPE_P (d1) && MAYBE_CLASS_TYPE_P (d1)))
7461 templ = TYPE_TI_TEMPLATE (d1);
7462 d1 = DECL_NAME (templ);
7464 else if (DECL_TYPE_TEMPLATE_P (d1))
7466 templ = d1;
7467 d1 = DECL_NAME (templ);
7468 context = DECL_CONTEXT (templ);
7470 else if (DECL_TEMPLATE_TEMPLATE_PARM_P (d1))
7472 templ = d1;
7473 d1 = DECL_NAME (templ);
7476 /* Issue an error message if we didn't find a template. */
7477 if (! templ)
7479 if (complain & tf_error)
7480 error ("%qT is not a template", d1);
7481 return error_mark_node;
7484 if (TREE_CODE (templ) != TEMPLATE_DECL
7485 /* Make sure it's a user visible template, if it was named by
7486 the user. */
7487 || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (templ)
7488 && !PRIMARY_TEMPLATE_P (templ)))
7490 if (complain & tf_error)
7492 error ("non-template type %qT used as a template", d1);
7493 if (in_decl)
7494 error ("for template declaration %q+D", in_decl);
7496 return error_mark_node;
7499 complain &= ~tf_user;
7501 /* An alias that just changes the name of a template is equivalent to the
7502 other template, so if any of the arguments are pack expansions, strip
7503 the alias to avoid problems with a pack expansion passed to a non-pack
7504 alias template parameter (DR 1430). */
7505 if (pack_expansion_args_count (INNERMOST_TEMPLATE_ARGS (arglist)))
7506 templ = get_underlying_template (templ);
7508 if (DECL_TEMPLATE_TEMPLATE_PARM_P (templ))
7510 /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
7511 template arguments */
7513 tree parm;
7514 tree arglist2;
7515 tree outer;
7517 parmlist = DECL_INNERMOST_TEMPLATE_PARMS (templ);
7519 /* Consider an example where a template template parameter declared as
7521 template <class T, class U = std::allocator<T> > class TT
7523 The template parameter level of T and U are one level larger than
7524 of TT. To proper process the default argument of U, say when an
7525 instantiation `TT<int>' is seen, we need to build the full
7526 arguments containing {int} as the innermost level. Outer levels,
7527 available when not appearing as default template argument, can be
7528 obtained from the arguments of the enclosing template.
7530 Suppose that TT is later substituted with std::vector. The above
7531 instantiation is `TT<int, std::allocator<T> >' with TT at
7532 level 1, and T at level 2, while the template arguments at level 1
7533 becomes {std::vector} and the inner level 2 is {int}. */
7535 outer = DECL_CONTEXT (templ);
7536 if (outer)
7537 outer = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (outer)));
7538 else if (current_template_parms)
7539 /* This is an argument of the current template, so we haven't set
7540 DECL_CONTEXT yet. */
7541 outer = current_template_args ();
7543 if (outer)
7544 arglist = add_to_template_args (outer, arglist);
7546 arglist2 = coerce_template_parms (parmlist, arglist, templ,
7547 complain,
7548 /*require_all_args=*/true,
7549 /*use_default_args=*/true);
7550 if (arglist2 == error_mark_node
7551 || (!uses_template_parms (arglist2)
7552 && check_instantiated_args (templ, arglist2, complain)))
7553 return error_mark_node;
7555 parm = bind_template_template_parm (TREE_TYPE (templ), arglist2);
7556 return parm;
7558 else
7560 tree template_type = TREE_TYPE (templ);
7561 tree gen_tmpl;
7562 tree type_decl;
7563 tree found = NULL_TREE;
7564 int arg_depth;
7565 int parm_depth;
7566 int is_dependent_type;
7567 int use_partial_inst_tmpl = false;
7569 if (template_type == error_mark_node)
7570 /* An error occurred while building the template TEMPL, and a
7571 diagnostic has most certainly been emitted for that
7572 already. Let's propagate that error. */
7573 return error_mark_node;
7575 gen_tmpl = most_general_template (templ);
7576 parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
7577 parm_depth = TMPL_PARMS_DEPTH (parmlist);
7578 arg_depth = TMPL_ARGS_DEPTH (arglist);
7580 if (arg_depth == 1 && parm_depth > 1)
7582 /* We've been given an incomplete set of template arguments.
7583 For example, given:
7585 template <class T> struct S1 {
7586 template <class U> struct S2 {};
7587 template <class U> struct S2<U*> {};
7590 we will be called with an ARGLIST of `U*', but the
7591 TEMPLATE will be `template <class T> template
7592 <class U> struct S1<T>::S2'. We must fill in the missing
7593 arguments. */
7594 arglist
7595 = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (templ)),
7596 arglist);
7597 arg_depth = TMPL_ARGS_DEPTH (arglist);
7600 /* Now we should have enough arguments. */
7601 gcc_assert (parm_depth == arg_depth);
7603 /* From here on, we're only interested in the most general
7604 template. */
7606 /* Calculate the BOUND_ARGS. These will be the args that are
7607 actually tsubst'd into the definition to create the
7608 instantiation. */
7609 if (parm_depth > 1)
7611 /* We have multiple levels of arguments to coerce, at once. */
7612 int i;
7613 int saved_depth = TMPL_ARGS_DEPTH (arglist);
7615 tree bound_args = make_tree_vec (parm_depth);
7617 for (i = saved_depth,
7618 t = DECL_TEMPLATE_PARMS (gen_tmpl);
7619 i > 0 && t != NULL_TREE;
7620 --i, t = TREE_CHAIN (t))
7622 tree a;
7623 if (i == saved_depth)
7624 a = coerce_template_parms (TREE_VALUE (t),
7625 arglist, gen_tmpl,
7626 complain,
7627 /*require_all_args=*/true,
7628 /*use_default_args=*/true);
7629 else
7630 /* Outer levels should have already been coerced. */
7631 a = TMPL_ARGS_LEVEL (arglist, i);
7633 /* Don't process further if one of the levels fails. */
7634 if (a == error_mark_node)
7636 /* Restore the ARGLIST to its full size. */
7637 TREE_VEC_LENGTH (arglist) = saved_depth;
7638 return error_mark_node;
7641 SET_TMPL_ARGS_LEVEL (bound_args, i, a);
7643 /* We temporarily reduce the length of the ARGLIST so
7644 that coerce_template_parms will see only the arguments
7645 corresponding to the template parameters it is
7646 examining. */
7647 TREE_VEC_LENGTH (arglist)--;
7650 /* Restore the ARGLIST to its full size. */
7651 TREE_VEC_LENGTH (arglist) = saved_depth;
7653 arglist = bound_args;
7655 else
7656 arglist
7657 = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
7658 INNERMOST_TEMPLATE_ARGS (arglist),
7659 gen_tmpl,
7660 complain,
7661 /*require_all_args=*/true,
7662 /*use_default_args=*/true);
7664 if (arglist == error_mark_node)
7665 /* We were unable to bind the arguments. */
7666 return error_mark_node;
7668 /* In the scope of a template class, explicit references to the
7669 template class refer to the type of the template, not any
7670 instantiation of it. For example, in:
7672 template <class T> class C { void f(C<T>); }
7674 the `C<T>' is just the same as `C'. Outside of the
7675 class, however, such a reference is an instantiation. */
7676 if ((entering_scope
7677 || !PRIMARY_TEMPLATE_P (gen_tmpl)
7678 || currently_open_class (template_type))
7679 /* comp_template_args is expensive, check it last. */
7680 && comp_template_args (TYPE_TI_ARGS (template_type),
7681 arglist))
7682 return template_type;
7684 /* If we already have this specialization, return it. */
7685 elt.tmpl = gen_tmpl;
7686 elt.args = arglist;
7687 hash = spec_hasher::hash (&elt);
7688 entry = type_specializations->find_with_hash (&elt, hash);
7690 if (entry)
7691 return entry->spec;
7693 is_dependent_type = uses_template_parms (arglist);
7695 /* If the deduced arguments are invalid, then the binding
7696 failed. */
7697 if (!is_dependent_type
7698 && check_instantiated_args (gen_tmpl,
7699 INNERMOST_TEMPLATE_ARGS (arglist),
7700 complain))
7701 return error_mark_node;
7703 if (!is_dependent_type
7704 && !PRIMARY_TEMPLATE_P (gen_tmpl)
7705 && !LAMBDA_TYPE_P (TREE_TYPE (gen_tmpl))
7706 && TREE_CODE (CP_DECL_CONTEXT (gen_tmpl)) == NAMESPACE_DECL)
7708 found = xref_tag_from_type (TREE_TYPE (gen_tmpl),
7709 DECL_NAME (gen_tmpl),
7710 /*tag_scope=*/ts_global);
7711 return found;
7714 context = tsubst (DECL_CONTEXT (gen_tmpl), arglist,
7715 complain, in_decl);
7716 if (context == error_mark_node)
7717 return error_mark_node;
7719 if (!context)
7720 context = global_namespace;
7722 /* Create the type. */
7723 if (DECL_ALIAS_TEMPLATE_P (gen_tmpl))
7725 /* The user referred to a specialization of an alias
7726 template represented by GEN_TMPL.
7728 [temp.alias]/2 says:
7730 When a template-id refers to the specialization of an
7731 alias template, it is equivalent to the associated
7732 type obtained by substitution of its
7733 template-arguments for the template-parameters in the
7734 type-id of the alias template. */
7736 t = tsubst (TREE_TYPE (gen_tmpl), arglist, complain, in_decl);
7737 /* Note that the call above (by indirectly calling
7738 register_specialization in tsubst_decl) registers the
7739 TYPE_DECL representing the specialization of the alias
7740 template. So next time someone substitutes ARGLIST for
7741 the template parms into the alias template (GEN_TMPL),
7742 she'll get that TYPE_DECL back. */
7744 if (t == error_mark_node)
7745 return t;
7747 else if (TREE_CODE (template_type) == ENUMERAL_TYPE)
7749 if (!is_dependent_type)
7751 set_current_access_from_decl (TYPE_NAME (template_type));
7752 t = start_enum (TYPE_IDENTIFIER (template_type), NULL_TREE,
7753 tsubst (ENUM_UNDERLYING_TYPE (template_type),
7754 arglist, complain, in_decl),
7755 SCOPED_ENUM_P (template_type), NULL);
7757 if (t == error_mark_node)
7758 return t;
7760 else
7762 /* We don't want to call start_enum for this type, since
7763 the values for the enumeration constants may involve
7764 template parameters. And, no one should be interested
7765 in the enumeration constants for such a type. */
7766 t = cxx_make_type (ENUMERAL_TYPE);
7767 SET_SCOPED_ENUM_P (t, SCOPED_ENUM_P (template_type));
7769 SET_OPAQUE_ENUM_P (t, OPAQUE_ENUM_P (template_type));
7770 ENUM_FIXED_UNDERLYING_TYPE_P (t)
7771 = ENUM_FIXED_UNDERLYING_TYPE_P (template_type);
7773 else if (CLASS_TYPE_P (template_type))
7775 t = make_class_type (TREE_CODE (template_type));
7776 CLASSTYPE_DECLARED_CLASS (t)
7777 = CLASSTYPE_DECLARED_CLASS (template_type);
7778 SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
7779 TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
7781 /* A local class. Make sure the decl gets registered properly. */
7782 if (context == current_function_decl)
7783 pushtag (DECL_NAME (gen_tmpl), t, /*tag_scope=*/ts_current);
7785 if (comp_template_args (CLASSTYPE_TI_ARGS (template_type), arglist))
7786 /* This instantiation is another name for the primary
7787 template type. Set the TYPE_CANONICAL field
7788 appropriately. */
7789 TYPE_CANONICAL (t) = template_type;
7790 else if (any_template_arguments_need_structural_equality_p (arglist))
7791 /* Some of the template arguments require structural
7792 equality testing, so this template class requires
7793 structural equality testing. */
7794 SET_TYPE_STRUCTURAL_EQUALITY (t);
7796 else
7797 gcc_unreachable ();
7799 /* If we called start_enum or pushtag above, this information
7800 will already be set up. */
7801 if (!TYPE_NAME (t))
7803 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
7805 type_decl = create_implicit_typedef (DECL_NAME (gen_tmpl), t);
7806 DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
7807 DECL_SOURCE_LOCATION (type_decl)
7808 = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
7810 else
7811 type_decl = TYPE_NAME (t);
7813 if (CLASS_TYPE_P (template_type))
7815 TREE_PRIVATE (type_decl)
7816 = TREE_PRIVATE (TYPE_MAIN_DECL (template_type));
7817 TREE_PROTECTED (type_decl)
7818 = TREE_PROTECTED (TYPE_MAIN_DECL (template_type));
7819 if (CLASSTYPE_VISIBILITY_SPECIFIED (template_type))
7821 DECL_VISIBILITY_SPECIFIED (type_decl) = 1;
7822 DECL_VISIBILITY (type_decl) = CLASSTYPE_VISIBILITY (template_type);
7826 if (OVERLOAD_TYPE_P (t)
7827 && !DECL_ALIAS_TEMPLATE_P (gen_tmpl))
7829 if (tree attributes
7830 = lookup_attribute ("abi_tag", TYPE_ATTRIBUTES (template_type)))
7832 if (!TREE_CHAIN (attributes))
7833 TYPE_ATTRIBUTES (t) = attributes;
7834 else
7835 TYPE_ATTRIBUTES (t)
7836 = build_tree_list (TREE_PURPOSE (attributes),
7837 TREE_VALUE (attributes));
7841 /* Let's consider the explicit specialization of a member
7842 of a class template specialization that is implicitly instantiated,
7843 e.g.:
7844 template<class T>
7845 struct S
7847 template<class U> struct M {}; //#0
7850 template<>
7851 template<>
7852 struct S<int>::M<char> //#1
7854 int i;
7856 [temp.expl.spec]/4 says this is valid.
7858 In this case, when we write:
7859 S<int>::M<char> m;
7861 M is instantiated from the CLASSTYPE_TI_TEMPLATE of #1, not from
7862 the one of #0.
7864 When we encounter #1, we want to store the partial instantiation
7865 of M (template<class T> S<int>::M<T>) in its CLASSTYPE_TI_TEMPLATE.
7867 For all cases other than this "explicit specialization of member of a
7868 class template", we just want to store the most general template into
7869 the CLASSTYPE_TI_TEMPLATE of M.
7871 This case of "explicit specialization of member of a class template"
7872 only happens when:
7873 1/ the enclosing class is an instantiation of, and therefore not
7874 the same as, the context of the most general template, and
7875 2/ we aren't looking at the partial instantiation itself, i.e.
7876 the innermost arguments are not the same as the innermost parms of
7877 the most general template.
7879 So it's only when 1/ and 2/ happens that we want to use the partial
7880 instantiation of the member template in lieu of its most general
7881 template. */
7883 if (PRIMARY_TEMPLATE_P (gen_tmpl)
7884 && TMPL_ARGS_HAVE_MULTIPLE_LEVELS (arglist)
7885 /* the enclosing class must be an instantiation... */
7886 && CLASS_TYPE_P (context)
7887 && !same_type_p (context, DECL_CONTEXT (gen_tmpl)))
7889 tree partial_inst_args;
7890 TREE_VEC_LENGTH (arglist)--;
7891 ++processing_template_decl;
7892 partial_inst_args =
7893 tsubst (INNERMOST_TEMPLATE_ARGS
7894 (TYPE_TI_ARGS (TREE_TYPE (gen_tmpl))),
7895 arglist, complain, NULL_TREE);
7896 --processing_template_decl;
7897 TREE_VEC_LENGTH (arglist)++;
7898 use_partial_inst_tmpl =
7899 /*...and we must not be looking at the partial instantiation
7900 itself. */
7901 !comp_template_args (INNERMOST_TEMPLATE_ARGS (arglist),
7902 partial_inst_args);
7905 if (!use_partial_inst_tmpl)
7906 /* This case is easy; there are no member templates involved. */
7907 found = gen_tmpl;
7908 else
7910 /* This is a full instantiation of a member template. Find
7911 the partial instantiation of which this is an instance. */
7913 /* Temporarily reduce by one the number of levels in the ARGLIST
7914 so as to avoid comparing the last set of arguments. */
7915 TREE_VEC_LENGTH (arglist)--;
7916 found = tsubst (gen_tmpl, arglist, complain, NULL_TREE);
7917 TREE_VEC_LENGTH (arglist)++;
7918 /* FOUND is either a proper class type, or an alias
7919 template specialization. In the later case, it's a
7920 TYPE_DECL, resulting from the substituting of arguments
7921 for parameters in the TYPE_DECL of the alias template
7922 done earlier. So be careful while getting the template
7923 of FOUND. */
7924 found = TREE_CODE (found) == TYPE_DECL
7925 ? TYPE_TI_TEMPLATE (TREE_TYPE (found))
7926 : CLASSTYPE_TI_TEMPLATE (found);
7929 SET_TYPE_TEMPLATE_INFO (t, build_template_info (found, arglist));
7931 elt.spec = t;
7932 slot = type_specializations->find_slot_with_hash (&elt, hash, INSERT);
7933 entry = ggc_alloc<spec_entry> ();
7934 *entry = elt;
7935 *slot = entry;
7937 /* Note this use of the partial instantiation so we can check it
7938 later in maybe_process_partial_specialization. */
7939 DECL_TEMPLATE_INSTANTIATIONS (found)
7940 = tree_cons (arglist, t,
7941 DECL_TEMPLATE_INSTANTIATIONS (found));
7943 if (TREE_CODE (template_type) == ENUMERAL_TYPE && !is_dependent_type
7944 && !DECL_ALIAS_TEMPLATE_P (gen_tmpl))
7945 /* Now that the type has been registered on the instantiations
7946 list, we set up the enumerators. Because the enumeration
7947 constants may involve the enumeration type itself, we make
7948 sure to register the type first, and then create the
7949 constants. That way, doing tsubst_expr for the enumeration
7950 constants won't result in recursive calls here; we'll find
7951 the instantiation and exit above. */
7952 tsubst_enum (template_type, t, arglist);
7954 if (CLASS_TYPE_P (template_type) && is_dependent_type)
7955 /* If the type makes use of template parameters, the
7956 code that generates debugging information will crash. */
7957 DECL_IGNORED_P (TYPE_MAIN_DECL (t)) = 1;
7959 /* Possibly limit visibility based on template args. */
7960 TREE_PUBLIC (type_decl) = 1;
7961 determine_visibility (type_decl);
7963 inherit_targ_abi_tags (t);
7965 return t;
7969 /* Wrapper for lookup_template_class_1. */
7971 tree
7972 lookup_template_class (tree d1, tree arglist, tree in_decl, tree context,
7973 int entering_scope, tsubst_flags_t complain)
7975 tree ret;
7976 timevar_push (TV_TEMPLATE_INST);
7977 ret = lookup_template_class_1 (d1, arglist, in_decl, context,
7978 entering_scope, complain);
7979 timevar_pop (TV_TEMPLATE_INST);
7980 return ret;
7983 /* Return a TEMPLATE_ID_EXPR for the given variable template and ARGLIST.
7984 If the ARGLIST refers to any template parameters, the type of the
7985 expression is the unknown_type_node since the template-id could
7986 refer to an explicit or partial specialization. */
7988 tree
7989 lookup_template_variable (tree templ, tree arglist)
7991 tree type;
7992 if (uses_template_parms (arglist))
7993 type = unknown_type_node;
7994 else
7995 type = TREE_TYPE (templ);
7996 return build2 (TEMPLATE_ID_EXPR, type, templ, arglist);
8000 struct pair_fn_data
8002 tree_fn_t fn;
8003 void *data;
8004 /* True when we should also visit template parameters that occur in
8005 non-deduced contexts. */
8006 bool include_nondeduced_p;
8007 hash_set<tree> *visited;
8010 /* Called from for_each_template_parm via walk_tree. */
8012 static tree
8013 for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
8015 tree t = *tp;
8016 struct pair_fn_data *pfd = (struct pair_fn_data *) d;
8017 tree_fn_t fn = pfd->fn;
8018 void *data = pfd->data;
8020 if (TYPE_P (t)
8021 && (pfd->include_nondeduced_p || TREE_CODE (t) != TYPENAME_TYPE)
8022 && for_each_template_parm (TYPE_CONTEXT (t), fn, data, pfd->visited,
8023 pfd->include_nondeduced_p))
8024 return error_mark_node;
8026 switch (TREE_CODE (t))
8028 case RECORD_TYPE:
8029 if (TYPE_PTRMEMFUNC_P (t))
8030 break;
8031 /* Fall through. */
8033 case UNION_TYPE:
8034 case ENUMERAL_TYPE:
8035 if (!TYPE_TEMPLATE_INFO (t))
8036 *walk_subtrees = 0;
8037 else if (for_each_template_parm (TYPE_TI_ARGS (t),
8038 fn, data, pfd->visited,
8039 pfd->include_nondeduced_p))
8040 return error_mark_node;
8041 break;
8043 case INTEGER_TYPE:
8044 if (for_each_template_parm (TYPE_MIN_VALUE (t),
8045 fn, data, pfd->visited,
8046 pfd->include_nondeduced_p)
8047 || for_each_template_parm (TYPE_MAX_VALUE (t),
8048 fn, data, pfd->visited,
8049 pfd->include_nondeduced_p))
8050 return error_mark_node;
8051 break;
8053 case METHOD_TYPE:
8054 /* Since we're not going to walk subtrees, we have to do this
8055 explicitly here. */
8056 if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data,
8057 pfd->visited, pfd->include_nondeduced_p))
8058 return error_mark_node;
8059 /* Fall through. */
8061 case FUNCTION_TYPE:
8062 /* Check the return type. */
8063 if (for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
8064 pfd->include_nondeduced_p))
8065 return error_mark_node;
8067 /* Check the parameter types. Since default arguments are not
8068 instantiated until they are needed, the TYPE_ARG_TYPES may
8069 contain expressions that involve template parameters. But,
8070 no-one should be looking at them yet. And, once they're
8071 instantiated, they don't contain template parameters, so
8072 there's no point in looking at them then, either. */
8074 tree parm;
8076 for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
8077 if (for_each_template_parm (TREE_VALUE (parm), fn, data,
8078 pfd->visited, pfd->include_nondeduced_p))
8079 return error_mark_node;
8081 /* Since we've already handled the TYPE_ARG_TYPES, we don't
8082 want walk_tree walking into them itself. */
8083 *walk_subtrees = 0;
8085 break;
8087 case TYPEOF_TYPE:
8088 case UNDERLYING_TYPE:
8089 if (pfd->include_nondeduced_p
8090 && for_each_template_parm (TYPE_FIELDS (t), fn, data,
8091 pfd->visited,
8092 pfd->include_nondeduced_p))
8093 return error_mark_node;
8094 break;
8096 case FUNCTION_DECL:
8097 case VAR_DECL:
8098 if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
8099 && for_each_template_parm (DECL_TI_ARGS (t), fn, data,
8100 pfd->visited, pfd->include_nondeduced_p))
8101 return error_mark_node;
8102 /* Fall through. */
8104 case PARM_DECL:
8105 case CONST_DECL:
8106 if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t)
8107 && for_each_template_parm (DECL_INITIAL (t), fn, data,
8108 pfd->visited, pfd->include_nondeduced_p))
8109 return error_mark_node;
8110 if (DECL_CONTEXT (t)
8111 && pfd->include_nondeduced_p
8112 && for_each_template_parm (DECL_CONTEXT (t), fn, data,
8113 pfd->visited, pfd->include_nondeduced_p))
8114 return error_mark_node;
8115 break;
8117 case BOUND_TEMPLATE_TEMPLATE_PARM:
8118 /* Record template parameters such as `T' inside `TT<T>'. */
8119 if (for_each_template_parm (TYPE_TI_ARGS (t), fn, data, pfd->visited,
8120 pfd->include_nondeduced_p))
8121 return error_mark_node;
8122 /* Fall through. */
8124 case TEMPLATE_TEMPLATE_PARM:
8125 case TEMPLATE_TYPE_PARM:
8126 case TEMPLATE_PARM_INDEX:
8127 if (fn && (*fn)(t, data))
8128 return error_mark_node;
8129 else if (!fn)
8130 return error_mark_node;
8131 break;
8133 case TEMPLATE_DECL:
8134 /* A template template parameter is encountered. */
8135 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
8136 && for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
8137 pfd->include_nondeduced_p))
8138 return error_mark_node;
8140 /* Already substituted template template parameter */
8141 *walk_subtrees = 0;
8142 break;
8144 case TYPENAME_TYPE:
8145 if (!fn
8146 || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn,
8147 data, pfd->visited,
8148 pfd->include_nondeduced_p))
8149 return error_mark_node;
8150 break;
8152 case CONSTRUCTOR:
8153 if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
8154 && pfd->include_nondeduced_p
8155 && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
8156 (TREE_TYPE (t)), fn, data,
8157 pfd->visited, pfd->include_nondeduced_p))
8158 return error_mark_node;
8159 break;
8161 case INDIRECT_REF:
8162 case COMPONENT_REF:
8163 /* If there's no type, then this thing must be some expression
8164 involving template parameters. */
8165 if (!fn && !TREE_TYPE (t))
8166 return error_mark_node;
8167 break;
8169 case MODOP_EXPR:
8170 case CAST_EXPR:
8171 case IMPLICIT_CONV_EXPR:
8172 case REINTERPRET_CAST_EXPR:
8173 case CONST_CAST_EXPR:
8174 case STATIC_CAST_EXPR:
8175 case DYNAMIC_CAST_EXPR:
8176 case ARROW_EXPR:
8177 case DOTSTAR_EXPR:
8178 case TYPEID_EXPR:
8179 case PSEUDO_DTOR_EXPR:
8180 if (!fn)
8181 return error_mark_node;
8182 break;
8184 default:
8185 break;
8188 /* We didn't find any template parameters we liked. */
8189 return NULL_TREE;
8192 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
8193 BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
8194 call FN with the parameter and the DATA.
8195 If FN returns nonzero, the iteration is terminated, and
8196 for_each_template_parm returns 1. Otherwise, the iteration
8197 continues. If FN never returns a nonzero value, the value
8198 returned by for_each_template_parm is 0. If FN is NULL, it is
8199 considered to be the function which always returns 1.
8201 If INCLUDE_NONDEDUCED_P, then this routine will also visit template
8202 parameters that occur in non-deduced contexts. When false, only
8203 visits those template parameters that can be deduced. */
8205 static int
8206 for_each_template_parm (tree t, tree_fn_t fn, void* data,
8207 hash_set<tree> *visited,
8208 bool include_nondeduced_p)
8210 struct pair_fn_data pfd;
8211 int result;
8213 /* Set up. */
8214 pfd.fn = fn;
8215 pfd.data = data;
8216 pfd.include_nondeduced_p = include_nondeduced_p;
8218 /* Walk the tree. (Conceptually, we would like to walk without
8219 duplicates, but for_each_template_parm_r recursively calls
8220 for_each_template_parm, so we would need to reorganize a fair
8221 bit to use walk_tree_without_duplicates, so we keep our own
8222 visited list.) */
8223 if (visited)
8224 pfd.visited = visited;
8225 else
8226 pfd.visited = new hash_set<tree>;
8227 result = cp_walk_tree (&t,
8228 for_each_template_parm_r,
8229 &pfd,
8230 pfd.visited) != NULL_TREE;
8232 /* Clean up. */
8233 if (!visited)
8235 delete pfd.visited;
8236 pfd.visited = 0;
8239 return result;
8242 /* Returns true if T depends on any template parameter. */
8245 uses_template_parms (tree t)
8247 bool dependent_p;
8248 int saved_processing_template_decl;
8250 saved_processing_template_decl = processing_template_decl;
8251 if (!saved_processing_template_decl)
8252 processing_template_decl = 1;
8253 if (TYPE_P (t))
8254 dependent_p = dependent_type_p (t);
8255 else if (TREE_CODE (t) == TREE_VEC)
8256 dependent_p = any_dependent_template_arguments_p (t);
8257 else if (TREE_CODE (t) == TREE_LIST)
8258 dependent_p = (uses_template_parms (TREE_VALUE (t))
8259 || uses_template_parms (TREE_CHAIN (t)));
8260 else if (TREE_CODE (t) == TYPE_DECL)
8261 dependent_p = dependent_type_p (TREE_TYPE (t));
8262 else if (DECL_P (t)
8263 || EXPR_P (t)
8264 || TREE_CODE (t) == TEMPLATE_PARM_INDEX
8265 || TREE_CODE (t) == OVERLOAD
8266 || BASELINK_P (t)
8267 || identifier_p (t)
8268 || TREE_CODE (t) == TRAIT_EXPR
8269 || TREE_CODE (t) == CONSTRUCTOR
8270 || CONSTANT_CLASS_P (t))
8271 dependent_p = (type_dependent_expression_p (t)
8272 || value_dependent_expression_p (t));
8273 else
8275 gcc_assert (t == error_mark_node);
8276 dependent_p = false;
8279 processing_template_decl = saved_processing_template_decl;
8281 return dependent_p;
8284 /* Returns true iff current_function_decl is an incompletely instantiated
8285 template. Useful instead of processing_template_decl because the latter
8286 is set to 0 during fold_non_dependent_expr. */
8288 bool
8289 in_template_function (void)
8291 tree fn = current_function_decl;
8292 bool ret;
8293 ++processing_template_decl;
8294 ret = (fn && DECL_LANG_SPECIFIC (fn)
8295 && DECL_TEMPLATE_INFO (fn)
8296 && any_dependent_template_arguments_p (DECL_TI_ARGS (fn)));
8297 --processing_template_decl;
8298 return ret;
8301 /* Returns true if T depends on any template parameter with level LEVEL. */
8304 uses_template_parms_level (tree t, int level)
8306 return for_each_template_parm (t, template_parm_this_level_p, &level, NULL,
8307 /*include_nondeduced_p=*/true);
8310 /* Returns TRUE iff INST is an instantiation we don't need to do in an
8311 ill-formed translation unit, i.e. a variable or function that isn't
8312 usable in a constant expression. */
8314 static inline bool
8315 neglectable_inst_p (tree d)
8317 return (DECL_P (d)
8318 && !(TREE_CODE (d) == FUNCTION_DECL ? DECL_DECLARED_CONSTEXPR_P (d)
8319 : decl_maybe_constant_var_p (d)));
8322 /* Returns TRUE iff we should refuse to instantiate DECL because it's
8323 neglectable and instantiated from within an erroneous instantiation. */
8325 static bool
8326 limit_bad_template_recursion (tree decl)
8328 struct tinst_level *lev = current_tinst_level;
8329 int errs = errorcount + sorrycount;
8330 if (lev == NULL || errs == 0 || !neglectable_inst_p (decl))
8331 return false;
8333 for (; lev; lev = lev->next)
8334 if (neglectable_inst_p (lev->decl))
8335 break;
8337 return (lev && errs > lev->errors);
8340 static int tinst_depth;
8341 extern int max_tinst_depth;
8342 int depth_reached;
8344 static GTY(()) struct tinst_level *last_error_tinst_level;
8346 /* We're starting to instantiate D; record the template instantiation context
8347 for diagnostics and to restore it later. */
8349 bool
8350 push_tinst_level (tree d)
8352 return push_tinst_level_loc (d, input_location);
8355 /* We're starting to instantiate D; record the template instantiation context
8356 at LOC for diagnostics and to restore it later. */
8358 bool
8359 push_tinst_level_loc (tree d, location_t loc)
8361 struct tinst_level *new_level;
8363 if (tinst_depth >= max_tinst_depth)
8365 fatal_error ("template instantiation depth exceeds maximum of %d"
8366 " (use -ftemplate-depth= to increase the maximum)",
8367 max_tinst_depth);
8368 return false;
8371 /* If the current instantiation caused problems, don't let it instantiate
8372 anything else. Do allow deduction substitution and decls usable in
8373 constant expressions. */
8374 if (limit_bad_template_recursion (d))
8375 return false;
8377 new_level = ggc_alloc<tinst_level> ();
8378 new_level->decl = d;
8379 new_level->locus = loc;
8380 new_level->errors = errorcount+sorrycount;
8381 new_level->in_system_header_p = in_system_header_at (input_location);
8382 new_level->next = current_tinst_level;
8383 current_tinst_level = new_level;
8385 ++tinst_depth;
8386 if (GATHER_STATISTICS && (tinst_depth > depth_reached))
8387 depth_reached = tinst_depth;
8389 return true;
8392 /* We're done instantiating this template; return to the instantiation
8393 context. */
8395 void
8396 pop_tinst_level (void)
8398 /* Restore the filename and line number stashed away when we started
8399 this instantiation. */
8400 input_location = current_tinst_level->locus;
8401 current_tinst_level = current_tinst_level->next;
8402 --tinst_depth;
8405 /* We're instantiating a deferred template; restore the template
8406 instantiation context in which the instantiation was requested, which
8407 is one step out from LEVEL. Return the corresponding DECL or TYPE. */
8409 static tree
8410 reopen_tinst_level (struct tinst_level *level)
8412 struct tinst_level *t;
8414 tinst_depth = 0;
8415 for (t = level; t; t = t->next)
8416 ++tinst_depth;
8418 current_tinst_level = level;
8419 pop_tinst_level ();
8420 if (current_tinst_level)
8421 current_tinst_level->errors = errorcount+sorrycount;
8422 return level->decl;
8425 /* Returns the TINST_LEVEL which gives the original instantiation
8426 context. */
8428 struct tinst_level *
8429 outermost_tinst_level (void)
8431 struct tinst_level *level = current_tinst_level;
8432 if (level)
8433 while (level->next)
8434 level = level->next;
8435 return level;
8438 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL. ARGS is the
8439 vector of template arguments, as for tsubst.
8441 Returns an appropriate tsubst'd friend declaration. */
8443 static tree
8444 tsubst_friend_function (tree decl, tree args)
8446 tree new_friend;
8448 if (TREE_CODE (decl) == FUNCTION_DECL
8449 && DECL_TEMPLATE_INSTANTIATION (decl)
8450 && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
8451 /* This was a friend declared with an explicit template
8452 argument list, e.g.:
8454 friend void f<>(T);
8456 to indicate that f was a template instantiation, not a new
8457 function declaration. Now, we have to figure out what
8458 instantiation of what template. */
8460 tree template_id, arglist, fns;
8461 tree new_args;
8462 tree tmpl;
8463 tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
8465 /* Friend functions are looked up in the containing namespace scope.
8466 We must enter that scope, to avoid finding member functions of the
8467 current class with same name. */
8468 push_nested_namespace (ns);
8469 fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
8470 tf_warning_or_error, NULL_TREE,
8471 /*integral_constant_expression_p=*/false);
8472 pop_nested_namespace (ns);
8473 arglist = tsubst (DECL_TI_ARGS (decl), args,
8474 tf_warning_or_error, NULL_TREE);
8475 template_id = lookup_template_function (fns, arglist);
8477 new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
8478 tmpl = determine_specialization (template_id, new_friend,
8479 &new_args,
8480 /*need_member_template=*/0,
8481 TREE_VEC_LENGTH (args),
8482 tsk_none);
8483 return instantiate_template (tmpl, new_args, tf_error);
8486 new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
8488 /* The NEW_FRIEND will look like an instantiation, to the
8489 compiler, but is not an instantiation from the point of view of
8490 the language. For example, we might have had:
8492 template <class T> struct S {
8493 template <class U> friend void f(T, U);
8496 Then, in S<int>, template <class U> void f(int, U) is not an
8497 instantiation of anything. */
8498 if (new_friend == error_mark_node)
8499 return error_mark_node;
8501 DECL_USE_TEMPLATE (new_friend) = 0;
8502 if (TREE_CODE (decl) == TEMPLATE_DECL)
8504 DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
8505 DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
8506 = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
8509 /* The mangled name for the NEW_FRIEND is incorrect. The function
8510 is not a template instantiation and should not be mangled like
8511 one. Therefore, we forget the mangling here; we'll recompute it
8512 later if we need it. */
8513 if (TREE_CODE (new_friend) != TEMPLATE_DECL)
8515 SET_DECL_RTL (new_friend, NULL);
8516 SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
8519 if (DECL_NAMESPACE_SCOPE_P (new_friend))
8521 tree old_decl;
8522 tree new_friend_template_info;
8523 tree new_friend_result_template_info;
8524 tree ns;
8525 int new_friend_is_defn;
8527 /* We must save some information from NEW_FRIEND before calling
8528 duplicate decls since that function will free NEW_FRIEND if
8529 possible. */
8530 new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
8531 new_friend_is_defn =
8532 (DECL_INITIAL (DECL_TEMPLATE_RESULT
8533 (template_for_substitution (new_friend)))
8534 != NULL_TREE);
8535 if (TREE_CODE (new_friend) == TEMPLATE_DECL)
8537 /* This declaration is a `primary' template. */
8538 DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
8540 new_friend_result_template_info
8541 = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
8543 else
8544 new_friend_result_template_info = NULL_TREE;
8546 /* Make the init_value nonzero so pushdecl knows this is a defn. */
8547 if (new_friend_is_defn)
8548 DECL_INITIAL (new_friend) = error_mark_node;
8550 /* Inside pushdecl_namespace_level, we will push into the
8551 current namespace. However, the friend function should go
8552 into the namespace of the template. */
8553 ns = decl_namespace_context (new_friend);
8554 push_nested_namespace (ns);
8555 old_decl = pushdecl_namespace_level (new_friend, /*is_friend=*/true);
8556 pop_nested_namespace (ns);
8558 if (old_decl == error_mark_node)
8559 return error_mark_node;
8561 if (old_decl != new_friend)
8563 /* This new friend declaration matched an existing
8564 declaration. For example, given:
8566 template <class T> void f(T);
8567 template <class U> class C {
8568 template <class T> friend void f(T) {}
8571 the friend declaration actually provides the definition
8572 of `f', once C has been instantiated for some type. So,
8573 old_decl will be the out-of-class template declaration,
8574 while new_friend is the in-class definition.
8576 But, if `f' was called before this point, the
8577 instantiation of `f' will have DECL_TI_ARGS corresponding
8578 to `T' but not to `U', references to which might appear
8579 in the definition of `f'. Previously, the most general
8580 template for an instantiation of `f' was the out-of-class
8581 version; now it is the in-class version. Therefore, we
8582 run through all specialization of `f', adding to their
8583 DECL_TI_ARGS appropriately. In particular, they need a
8584 new set of outer arguments, corresponding to the
8585 arguments for this class instantiation.
8587 The same situation can arise with something like this:
8589 friend void f(int);
8590 template <class T> class C {
8591 friend void f(T) {}
8594 when `C<int>' is instantiated. Now, `f(int)' is defined
8595 in the class. */
8597 if (!new_friend_is_defn)
8598 /* On the other hand, if the in-class declaration does
8599 *not* provide a definition, then we don't want to alter
8600 existing definitions. We can just leave everything
8601 alone. */
8603 else
8605 tree new_template = TI_TEMPLATE (new_friend_template_info);
8606 tree new_args = TI_ARGS (new_friend_template_info);
8608 /* Overwrite whatever template info was there before, if
8609 any, with the new template information pertaining to
8610 the declaration. */
8611 DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
8613 if (TREE_CODE (old_decl) != TEMPLATE_DECL)
8615 /* We should have called reregister_specialization in
8616 duplicate_decls. */
8617 gcc_assert (retrieve_specialization (new_template,
8618 new_args, 0)
8619 == old_decl);
8621 /* Instantiate it if the global has already been used. */
8622 if (DECL_ODR_USED (old_decl))
8623 instantiate_decl (old_decl, /*defer_ok=*/true,
8624 /*expl_inst_class_mem_p=*/false);
8626 else
8628 tree t;
8630 /* Indicate that the old function template is a partial
8631 instantiation. */
8632 DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
8633 = new_friend_result_template_info;
8635 gcc_assert (new_template
8636 == most_general_template (new_template));
8637 gcc_assert (new_template != old_decl);
8639 /* Reassign any specializations already in the hash table
8640 to the new more general template, and add the
8641 additional template args. */
8642 for (t = DECL_TEMPLATE_INSTANTIATIONS (old_decl);
8643 t != NULL_TREE;
8644 t = TREE_CHAIN (t))
8646 tree spec = TREE_VALUE (t);
8647 spec_entry elt;
8649 elt.tmpl = old_decl;
8650 elt.args = DECL_TI_ARGS (spec);
8651 elt.spec = NULL_TREE;
8653 decl_specializations->remove_elt (&elt);
8655 DECL_TI_ARGS (spec)
8656 = add_outermost_template_args (new_args,
8657 DECL_TI_ARGS (spec));
8659 register_specialization
8660 (spec, new_template, DECL_TI_ARGS (spec), true, 0);
8663 DECL_TEMPLATE_INSTANTIATIONS (old_decl) = NULL_TREE;
8667 /* The information from NEW_FRIEND has been merged into OLD_DECL
8668 by duplicate_decls. */
8669 new_friend = old_decl;
8672 else
8674 tree context = DECL_CONTEXT (new_friend);
8675 bool dependent_p;
8677 /* In the code
8678 template <class T> class C {
8679 template <class U> friend void C1<U>::f (); // case 1
8680 friend void C2<T>::f (); // case 2
8682 we only need to make sure CONTEXT is a complete type for
8683 case 2. To distinguish between the two cases, we note that
8684 CONTEXT of case 1 remains dependent type after tsubst while
8685 this isn't true for case 2. */
8686 ++processing_template_decl;
8687 dependent_p = dependent_type_p (context);
8688 --processing_template_decl;
8690 if (!dependent_p
8691 && !complete_type_or_else (context, NULL_TREE))
8692 return error_mark_node;
8694 if (COMPLETE_TYPE_P (context))
8696 tree fn = new_friend;
8697 /* do_friend adds the TEMPLATE_DECL for any member friend
8698 template even if it isn't a member template, i.e.
8699 template <class T> friend A<T>::f();
8700 Look through it in that case. */
8701 if (TREE_CODE (fn) == TEMPLATE_DECL
8702 && !PRIMARY_TEMPLATE_P (fn))
8703 fn = DECL_TEMPLATE_RESULT (fn);
8704 /* Check to see that the declaration is really present, and,
8705 possibly obtain an improved declaration. */
8706 fn = check_classfn (context, fn, NULL_TREE);
8708 if (fn)
8709 new_friend = fn;
8713 return new_friend;
8716 /* FRIEND_TMPL is a friend TEMPLATE_DECL. ARGS is the vector of
8717 template arguments, as for tsubst.
8719 Returns an appropriate tsubst'd friend type or error_mark_node on
8720 failure. */
8722 static tree
8723 tsubst_friend_class (tree friend_tmpl, tree args)
8725 tree friend_type;
8726 tree tmpl;
8727 tree context;
8729 if (DECL_TEMPLATE_TEMPLATE_PARM_P (friend_tmpl))
8731 tree t = tsubst (TREE_TYPE (friend_tmpl), args, tf_none, NULL_TREE);
8732 return TREE_TYPE (t);
8735 context = CP_DECL_CONTEXT (friend_tmpl);
8737 if (context != global_namespace)
8739 if (TREE_CODE (context) == NAMESPACE_DECL)
8740 push_nested_namespace (context);
8741 else
8742 push_nested_class (tsubst (context, args, tf_none, NULL_TREE));
8745 /* Look for a class template declaration. We look for hidden names
8746 because two friend declarations of the same template are the
8747 same. For example, in:
8749 struct A {
8750 template <typename> friend class F;
8752 template <typename> struct B {
8753 template <typename> friend class F;
8756 both F templates are the same. */
8757 tmpl = lookup_name_real (DECL_NAME (friend_tmpl), 0, 0,
8758 /*block_p=*/true, 0, LOOKUP_HIDDEN);
8760 /* But, if we don't find one, it might be because we're in a
8761 situation like this:
8763 template <class T>
8764 struct S {
8765 template <class U>
8766 friend struct S;
8769 Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
8770 for `S<int>', not the TEMPLATE_DECL. */
8771 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
8773 tmpl = lookup_name_prefer_type (DECL_NAME (friend_tmpl), 1);
8774 tmpl = maybe_get_template_decl_from_type_decl (tmpl);
8777 if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
8779 /* The friend template has already been declared. Just
8780 check to see that the declarations match, and install any new
8781 default parameters. We must tsubst the default parameters,
8782 of course. We only need the innermost template parameters
8783 because that is all that redeclare_class_template will look
8784 at. */
8785 if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
8786 > TMPL_ARGS_DEPTH (args))
8788 tree parms;
8789 location_t saved_input_location;
8790 parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
8791 args, tf_warning_or_error);
8793 saved_input_location = input_location;
8794 input_location = DECL_SOURCE_LOCATION (friend_tmpl);
8795 redeclare_class_template (TREE_TYPE (tmpl), parms);
8796 input_location = saved_input_location;
8800 friend_type = TREE_TYPE (tmpl);
8802 else
8804 /* The friend template has not already been declared. In this
8805 case, the instantiation of the template class will cause the
8806 injection of this template into the global scope. */
8807 tmpl = tsubst (friend_tmpl, args, tf_warning_or_error, NULL_TREE);
8808 if (tmpl == error_mark_node)
8809 return error_mark_node;
8811 /* The new TMPL is not an instantiation of anything, so we
8812 forget its origins. We don't reset CLASSTYPE_TI_TEMPLATE for
8813 the new type because that is supposed to be the corresponding
8814 template decl, i.e., TMPL. */
8815 DECL_USE_TEMPLATE (tmpl) = 0;
8816 DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
8817 CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
8818 CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
8819 = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
8821 /* Inject this template into the global scope. */
8822 friend_type = TREE_TYPE (pushdecl_top_level_maybe_friend (tmpl, true));
8825 if (context != global_namespace)
8827 if (TREE_CODE (context) == NAMESPACE_DECL)
8828 pop_nested_namespace (context);
8829 else
8830 pop_nested_class ();
8833 return friend_type;
8836 /* Returns zero if TYPE cannot be completed later due to circularity.
8837 Otherwise returns one. */
8839 static int
8840 can_complete_type_without_circularity (tree type)
8842 if (type == NULL_TREE || type == error_mark_node)
8843 return 0;
8844 else if (COMPLETE_TYPE_P (type))
8845 return 1;
8846 else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
8847 return can_complete_type_without_circularity (TREE_TYPE (type));
8848 else if (CLASS_TYPE_P (type)
8849 && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
8850 return 0;
8851 else
8852 return 1;
8855 static tree tsubst_omp_clauses (tree, bool, tree, tsubst_flags_t, tree);
8857 /* Apply any attributes which had to be deferred until instantiation
8858 time. DECL_P, ATTRIBUTES and ATTR_FLAGS are as cplus_decl_attributes;
8859 ARGS, COMPLAIN, IN_DECL are as tsubst. */
8861 static void
8862 apply_late_template_attributes (tree *decl_p, tree attributes, int attr_flags,
8863 tree args, tsubst_flags_t complain, tree in_decl)
8865 tree last_dep = NULL_TREE;
8866 tree t;
8867 tree *p;
8869 for (t = attributes; t; t = TREE_CHAIN (t))
8870 if (ATTR_IS_DEPENDENT (t))
8872 last_dep = t;
8873 attributes = copy_list (attributes);
8874 break;
8877 if (DECL_P (*decl_p))
8879 if (TREE_TYPE (*decl_p) == error_mark_node)
8880 return;
8881 p = &DECL_ATTRIBUTES (*decl_p);
8883 else
8884 p = &TYPE_ATTRIBUTES (*decl_p);
8886 if (last_dep)
8888 tree late_attrs = NULL_TREE;
8889 tree *q = &late_attrs;
8891 for (*p = attributes; *p; )
8893 t = *p;
8894 if (ATTR_IS_DEPENDENT (t))
8896 *p = TREE_CHAIN (t);
8897 TREE_CHAIN (t) = NULL_TREE;
8898 if ((flag_openmp || flag_cilkplus)
8899 && is_attribute_p ("omp declare simd",
8900 get_attribute_name (t))
8901 && TREE_VALUE (t))
8903 tree clauses = TREE_VALUE (TREE_VALUE (t));
8904 clauses = tsubst_omp_clauses (clauses, true, args,
8905 complain, in_decl);
8906 c_omp_declare_simd_clauses_to_decls (*decl_p, clauses);
8907 clauses = finish_omp_clauses (clauses);
8908 tree parms = DECL_ARGUMENTS (*decl_p);
8909 clauses
8910 = c_omp_declare_simd_clauses_to_numbers (parms, clauses);
8911 if (clauses)
8912 TREE_VALUE (TREE_VALUE (t)) = clauses;
8913 else
8914 TREE_VALUE (t) = NULL_TREE;
8916 /* If the first attribute argument is an identifier, don't
8917 pass it through tsubst. Attributes like mode, format,
8918 cleanup and several target specific attributes expect it
8919 unmodified. */
8920 else if (attribute_takes_identifier_p (get_attribute_name (t))
8921 && TREE_VALUE (t))
8923 tree chain
8924 = tsubst_expr (TREE_CHAIN (TREE_VALUE (t)), args, complain,
8925 in_decl,
8926 /*integral_constant_expression_p=*/false);
8927 if (chain != TREE_CHAIN (TREE_VALUE (t)))
8928 TREE_VALUE (t)
8929 = tree_cons (NULL_TREE, TREE_VALUE (TREE_VALUE (t)),
8930 chain);
8932 else
8933 TREE_VALUE (t)
8934 = tsubst_expr (TREE_VALUE (t), args, complain, in_decl,
8935 /*integral_constant_expression_p=*/false);
8936 *q = t;
8937 q = &TREE_CHAIN (t);
8939 else
8940 p = &TREE_CHAIN (t);
8943 cplus_decl_attributes (decl_p, late_attrs, attr_flags);
8947 /* Perform (or defer) access check for typedefs that were referenced
8948 from within the template TMPL code.
8949 This is a subroutine of instantiate_decl and instantiate_class_template.
8950 TMPL is the template to consider and TARGS is the list of arguments of
8951 that template. */
8953 static void
8954 perform_typedefs_access_check (tree tmpl, tree targs)
8956 location_t saved_location;
8957 unsigned i;
8958 qualified_typedef_usage_t *iter;
8960 if (!tmpl
8961 || (!CLASS_TYPE_P (tmpl)
8962 && TREE_CODE (tmpl) != FUNCTION_DECL))
8963 return;
8965 saved_location = input_location;
8966 FOR_EACH_VEC_SAFE_ELT (get_types_needing_access_check (tmpl), i, iter)
8968 tree type_decl = iter->typedef_decl;
8969 tree type_scope = iter->context;
8971 if (!type_decl || !type_scope || !CLASS_TYPE_P (type_scope))
8972 continue;
8974 if (uses_template_parms (type_decl))
8975 type_decl = tsubst (type_decl, targs, tf_error, NULL_TREE);
8976 if (uses_template_parms (type_scope))
8977 type_scope = tsubst (type_scope, targs, tf_error, NULL_TREE);
8979 /* Make access check error messages point to the location
8980 of the use of the typedef. */
8981 input_location = iter->locus;
8982 perform_or_defer_access_check (TYPE_BINFO (type_scope),
8983 type_decl, type_decl,
8984 tf_warning_or_error);
8986 input_location = saved_location;
8989 static tree
8990 instantiate_class_template_1 (tree type)
8992 tree templ, args, pattern, t, member;
8993 tree typedecl;
8994 tree pbinfo;
8995 tree base_list;
8996 unsigned int saved_maximum_field_alignment;
8997 tree fn_context;
8999 if (type == error_mark_node)
9000 return error_mark_node;
9002 if (COMPLETE_OR_OPEN_TYPE_P (type)
9003 || uses_template_parms (type))
9004 return type;
9006 /* Figure out which template is being instantiated. */
9007 templ = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
9008 gcc_assert (TREE_CODE (templ) == TEMPLATE_DECL);
9010 /* Determine what specialization of the original template to
9011 instantiate. */
9012 t = most_specialized_class (type, tf_warning_or_error);
9013 if (t == error_mark_node)
9015 TYPE_BEING_DEFINED (type) = 1;
9016 return error_mark_node;
9018 else if (t)
9020 /* This TYPE is actually an instantiation of a partial
9021 specialization. We replace the innermost set of ARGS with
9022 the arguments appropriate for substitution. For example,
9023 given:
9025 template <class T> struct S {};
9026 template <class T> struct S<T*> {};
9028 and supposing that we are instantiating S<int*>, ARGS will
9029 presently be {int*} -- but we need {int}. */
9030 pattern = TREE_TYPE (t);
9031 args = TREE_PURPOSE (t);
9033 else
9035 pattern = TREE_TYPE (templ);
9036 args = CLASSTYPE_TI_ARGS (type);
9039 /* If the template we're instantiating is incomplete, then clearly
9040 there's nothing we can do. */
9041 if (!COMPLETE_TYPE_P (pattern))
9042 return type;
9044 /* If we've recursively instantiated too many templates, stop. */
9045 if (! push_tinst_level (type))
9046 return type;
9048 /* Now we're really doing the instantiation. Mark the type as in
9049 the process of being defined. */
9050 TYPE_BEING_DEFINED (type) = 1;
9052 /* We may be in the middle of deferred access check. Disable
9053 it now. */
9054 push_deferring_access_checks (dk_no_deferred);
9056 fn_context = decl_function_context (TYPE_MAIN_DECL (type));
9057 /* Also avoid push_to_top_level for a lambda in an NSDMI. */
9058 if (!fn_context && LAMBDA_TYPE_P (type) && TYPE_CLASS_SCOPE_P (type))
9059 fn_context = error_mark_node;
9060 if (!fn_context)
9061 push_to_top_level ();
9062 /* Use #pragma pack from the template context. */
9063 saved_maximum_field_alignment = maximum_field_alignment;
9064 maximum_field_alignment = TYPE_PRECISION (pattern);
9066 SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
9068 /* Set the input location to the most specialized template definition.
9069 This is needed if tsubsting causes an error. */
9070 typedecl = TYPE_MAIN_DECL (pattern);
9071 input_location = DECL_SOURCE_LOCATION (TYPE_NAME (type)) =
9072 DECL_SOURCE_LOCATION (typedecl);
9074 TYPE_PACKED (type) = TYPE_PACKED (pattern);
9075 TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
9076 TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
9077 TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
9078 if (ANON_AGGR_TYPE_P (pattern))
9079 SET_ANON_AGGR_TYPE_P (type);
9080 if (CLASSTYPE_VISIBILITY_SPECIFIED (pattern))
9082 CLASSTYPE_VISIBILITY_SPECIFIED (type) = 1;
9083 CLASSTYPE_VISIBILITY (type) = CLASSTYPE_VISIBILITY (pattern);
9084 /* Adjust visibility for template arguments. */
9085 determine_visibility (TYPE_MAIN_DECL (type));
9087 if (CLASS_TYPE_P (type))
9088 CLASSTYPE_FINAL (type) = CLASSTYPE_FINAL (pattern);
9090 pbinfo = TYPE_BINFO (pattern);
9092 /* We should never instantiate a nested class before its enclosing
9093 class; we need to look up the nested class by name before we can
9094 instantiate it, and that lookup should instantiate the enclosing
9095 class. */
9096 gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
9097 || COMPLETE_OR_OPEN_TYPE_P (TYPE_CONTEXT (type)));
9099 base_list = NULL_TREE;
9100 if (BINFO_N_BASE_BINFOS (pbinfo))
9102 tree pbase_binfo;
9103 tree pushed_scope;
9104 int i;
9106 /* We must enter the scope containing the type, as that is where
9107 the accessibility of types named in dependent bases are
9108 looked up from. */
9109 pushed_scope = push_scope (CP_TYPE_CONTEXT (type));
9111 /* Substitute into each of the bases to determine the actual
9112 basetypes. */
9113 for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
9115 tree base;
9116 tree access = BINFO_BASE_ACCESS (pbinfo, i);
9117 tree expanded_bases = NULL_TREE;
9118 int idx, len = 1;
9120 if (PACK_EXPANSION_P (BINFO_TYPE (pbase_binfo)))
9122 expanded_bases =
9123 tsubst_pack_expansion (BINFO_TYPE (pbase_binfo),
9124 args, tf_error, NULL_TREE);
9125 if (expanded_bases == error_mark_node)
9126 continue;
9128 len = TREE_VEC_LENGTH (expanded_bases);
9131 for (idx = 0; idx < len; idx++)
9133 if (expanded_bases)
9134 /* Extract the already-expanded base class. */
9135 base = TREE_VEC_ELT (expanded_bases, idx);
9136 else
9137 /* Substitute to figure out the base class. */
9138 base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error,
9139 NULL_TREE);
9141 if (base == error_mark_node)
9142 continue;
9144 base_list = tree_cons (access, base, base_list);
9145 if (BINFO_VIRTUAL_P (pbase_binfo))
9146 TREE_TYPE (base_list) = integer_type_node;
9150 /* The list is now in reverse order; correct that. */
9151 base_list = nreverse (base_list);
9153 if (pushed_scope)
9154 pop_scope (pushed_scope);
9156 /* Now call xref_basetypes to set up all the base-class
9157 information. */
9158 xref_basetypes (type, base_list);
9160 apply_late_template_attributes (&type, TYPE_ATTRIBUTES (pattern),
9161 (int) ATTR_FLAG_TYPE_IN_PLACE,
9162 args, tf_error, NULL_TREE);
9163 fixup_attribute_variants (type);
9165 /* Now that our base classes are set up, enter the scope of the
9166 class, so that name lookups into base classes, etc. will work
9167 correctly. This is precisely analogous to what we do in
9168 begin_class_definition when defining an ordinary non-template
9169 class, except we also need to push the enclosing classes. */
9170 push_nested_class (type);
9172 /* Now members are processed in the order of declaration. */
9173 for (member = CLASSTYPE_DECL_LIST (pattern);
9174 member; member = TREE_CHAIN (member))
9176 tree t = TREE_VALUE (member);
9178 if (TREE_PURPOSE (member))
9180 if (TYPE_P (t))
9182 /* Build new CLASSTYPE_NESTED_UTDS. */
9184 tree newtag;
9185 bool class_template_p;
9187 class_template_p = (TREE_CODE (t) != ENUMERAL_TYPE
9188 && TYPE_LANG_SPECIFIC (t)
9189 && CLASSTYPE_IS_TEMPLATE (t));
9190 /* If the member is a class template, then -- even after
9191 substitution -- there may be dependent types in the
9192 template argument list for the class. We increment
9193 PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
9194 that function will assume that no types are dependent
9195 when outside of a template. */
9196 if (class_template_p)
9197 ++processing_template_decl;
9198 newtag = tsubst (t, args, tf_error, NULL_TREE);
9199 if (class_template_p)
9200 --processing_template_decl;
9201 if (newtag == error_mark_node)
9202 continue;
9204 if (TREE_CODE (newtag) != ENUMERAL_TYPE)
9206 tree name = TYPE_IDENTIFIER (t);
9208 if (class_template_p)
9209 /* Unfortunately, lookup_template_class sets
9210 CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
9211 instantiation (i.e., for the type of a member
9212 template class nested within a template class.)
9213 This behavior is required for
9214 maybe_process_partial_specialization to work
9215 correctly, but is not accurate in this case;
9216 the TAG is not an instantiation of anything.
9217 (The corresponding TEMPLATE_DECL is an
9218 instantiation, but the TYPE is not.) */
9219 CLASSTYPE_USE_TEMPLATE (newtag) = 0;
9221 /* Now, we call pushtag to put this NEWTAG into the scope of
9222 TYPE. We first set up the IDENTIFIER_TYPE_VALUE to avoid
9223 pushtag calling push_template_decl. We don't have to do
9224 this for enums because it will already have been done in
9225 tsubst_enum. */
9226 if (name)
9227 SET_IDENTIFIER_TYPE_VALUE (name, newtag);
9228 pushtag (name, newtag, /*tag_scope=*/ts_current);
9231 else if (DECL_DECLARES_FUNCTION_P (t))
9233 /* Build new TYPE_METHODS. */
9234 tree r;
9236 if (TREE_CODE (t) == TEMPLATE_DECL)
9237 ++processing_template_decl;
9238 r = tsubst (t, args, tf_error, NULL_TREE);
9239 if (TREE_CODE (t) == TEMPLATE_DECL)
9240 --processing_template_decl;
9241 set_current_access_from_decl (r);
9242 finish_member_declaration (r);
9243 /* Instantiate members marked with attribute used. */
9244 if (r != error_mark_node && DECL_PRESERVE_P (r))
9245 mark_used (r);
9246 if (TREE_CODE (r) == FUNCTION_DECL
9247 && DECL_OMP_DECLARE_REDUCTION_P (r))
9248 cp_check_omp_declare_reduction (r);
9250 else if (DECL_CLASS_TEMPLATE_P (t)
9251 && LAMBDA_TYPE_P (TREE_TYPE (t)))
9252 /* A closure type for a lambda in a default argument for a
9253 member template. Ignore it; it will be instantiated with
9254 the default argument. */;
9255 else
9257 /* Build new TYPE_FIELDS. */
9258 if (TREE_CODE (t) == STATIC_ASSERT)
9260 tree condition;
9262 ++c_inhibit_evaluation_warnings;
9263 condition =
9264 tsubst_expr (STATIC_ASSERT_CONDITION (t), args,
9265 tf_warning_or_error, NULL_TREE,
9266 /*integral_constant_expression_p=*/true);
9267 --c_inhibit_evaluation_warnings;
9269 finish_static_assert (condition,
9270 STATIC_ASSERT_MESSAGE (t),
9271 STATIC_ASSERT_SOURCE_LOCATION (t),
9272 /*member_p=*/true);
9274 else if (TREE_CODE (t) != CONST_DECL)
9276 tree r;
9277 tree vec = NULL_TREE;
9278 int len = 1;
9280 /* The file and line for this declaration, to
9281 assist in error message reporting. Since we
9282 called push_tinst_level above, we don't need to
9283 restore these. */
9284 input_location = DECL_SOURCE_LOCATION (t);
9286 if (TREE_CODE (t) == TEMPLATE_DECL)
9287 ++processing_template_decl;
9288 r = tsubst (t, args, tf_warning_or_error, NULL_TREE);
9289 if (TREE_CODE (t) == TEMPLATE_DECL)
9290 --processing_template_decl;
9292 if (TREE_CODE (r) == TREE_VEC)
9294 /* A capture pack became multiple fields. */
9295 vec = r;
9296 len = TREE_VEC_LENGTH (vec);
9299 for (int i = 0; i < len; ++i)
9301 if (vec)
9302 r = TREE_VEC_ELT (vec, i);
9303 if (VAR_P (r))
9305 /* In [temp.inst]:
9307 [t]he initialization (and any associated
9308 side-effects) of a static data member does
9309 not occur unless the static data member is
9310 itself used in a way that requires the
9311 definition of the static data member to
9312 exist.
9314 Therefore, we do not substitute into the
9315 initialized for the static data member here. */
9316 finish_static_data_member_decl
9318 /*init=*/NULL_TREE,
9319 /*init_const_expr_p=*/false,
9320 /*asmspec_tree=*/NULL_TREE,
9321 /*flags=*/0);
9322 /* Instantiate members marked with attribute used. */
9323 if (r != error_mark_node && DECL_PRESERVE_P (r))
9324 mark_used (r);
9326 else if (TREE_CODE (r) == FIELD_DECL)
9328 /* Determine whether R has a valid type and can be
9329 completed later. If R is invalid, then its type
9330 is replaced by error_mark_node. */
9331 tree rtype = TREE_TYPE (r);
9332 if (can_complete_type_without_circularity (rtype))
9333 complete_type (rtype);
9335 if (!COMPLETE_TYPE_P (rtype))
9337 cxx_incomplete_type_error (r, rtype);
9338 TREE_TYPE (r) = error_mark_node;
9342 /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
9343 such a thing will already have been added to the field
9344 list by tsubst_enum in finish_member_declaration in the
9345 CLASSTYPE_NESTED_UTDS case above. */
9346 if (!(TREE_CODE (r) == TYPE_DECL
9347 && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
9348 && DECL_ARTIFICIAL (r)))
9350 set_current_access_from_decl (r);
9351 finish_member_declaration (r);
9357 else
9359 if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t)
9360 || DECL_TEMPLATE_TEMPLATE_PARM_P (t))
9362 /* Build new CLASSTYPE_FRIEND_CLASSES. */
9364 tree friend_type = t;
9365 bool adjust_processing_template_decl = false;
9367 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
9369 /* template <class T> friend class C; */
9370 friend_type = tsubst_friend_class (friend_type, args);
9371 adjust_processing_template_decl = true;
9373 else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
9375 /* template <class T> friend class C::D; */
9376 friend_type = tsubst (friend_type, args,
9377 tf_warning_or_error, NULL_TREE);
9378 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
9379 friend_type = TREE_TYPE (friend_type);
9380 adjust_processing_template_decl = true;
9382 else if (TREE_CODE (friend_type) == TYPENAME_TYPE
9383 || TREE_CODE (friend_type) == TEMPLATE_TYPE_PARM)
9385 /* This could be either
9387 friend class T::C;
9389 when dependent_type_p is false or
9391 template <class U> friend class T::C;
9393 otherwise. */
9394 friend_type = tsubst (friend_type, args,
9395 tf_warning_or_error, NULL_TREE);
9396 /* Bump processing_template_decl for correct
9397 dependent_type_p calculation. */
9398 ++processing_template_decl;
9399 if (dependent_type_p (friend_type))
9400 adjust_processing_template_decl = true;
9401 --processing_template_decl;
9403 else if (!CLASSTYPE_USE_TEMPLATE (friend_type)
9404 && hidden_name_p (TYPE_NAME (friend_type)))
9406 /* friend class C;
9408 where C hasn't been declared yet. Let's lookup name
9409 from namespace scope directly, bypassing any name that
9410 come from dependent base class. */
9411 tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
9413 /* The call to xref_tag_from_type does injection for friend
9414 classes. */
9415 push_nested_namespace (ns);
9416 friend_type =
9417 xref_tag_from_type (friend_type, NULL_TREE,
9418 /*tag_scope=*/ts_current);
9419 pop_nested_namespace (ns);
9421 else if (uses_template_parms (friend_type))
9422 /* friend class C<T>; */
9423 friend_type = tsubst (friend_type, args,
9424 tf_warning_or_error, NULL_TREE);
9425 /* Otherwise it's
9427 friend class C;
9429 where C is already declared or
9431 friend class C<int>;
9433 We don't have to do anything in these cases. */
9435 if (adjust_processing_template_decl)
9436 /* Trick make_friend_class into realizing that the friend
9437 we're adding is a template, not an ordinary class. It's
9438 important that we use make_friend_class since it will
9439 perform some error-checking and output cross-reference
9440 information. */
9441 ++processing_template_decl;
9443 if (friend_type != error_mark_node)
9444 make_friend_class (type, friend_type, /*complain=*/false);
9446 if (adjust_processing_template_decl)
9447 --processing_template_decl;
9449 else
9451 /* Build new DECL_FRIENDLIST. */
9452 tree r;
9454 /* The file and line for this declaration, to
9455 assist in error message reporting. Since we
9456 called push_tinst_level above, we don't need to
9457 restore these. */
9458 input_location = DECL_SOURCE_LOCATION (t);
9460 if (TREE_CODE (t) == TEMPLATE_DECL)
9462 ++processing_template_decl;
9463 push_deferring_access_checks (dk_no_check);
9466 r = tsubst_friend_function (t, args);
9467 add_friend (type, r, /*complain=*/false);
9468 if (TREE_CODE (t) == TEMPLATE_DECL)
9470 pop_deferring_access_checks ();
9471 --processing_template_decl;
9477 if (tree expr = CLASSTYPE_LAMBDA_EXPR (type))
9479 tree decl = lambda_function (type);
9480 if (decl)
9482 if (!DECL_TEMPLATE_INFO (decl)
9483 || DECL_TEMPLATE_RESULT (DECL_TI_TEMPLATE (decl)) != decl)
9484 instantiate_decl (decl, false, false);
9486 /* We need to instantiate the capture list from the template
9487 after we've instantiated the closure members, but before we
9488 consider adding the conversion op. Also keep any captures
9489 that may have been added during instantiation of the op(). */
9490 tree tmpl_expr = CLASSTYPE_LAMBDA_EXPR (pattern);
9491 tree tmpl_cap
9492 = tsubst_copy_and_build (LAMBDA_EXPR_CAPTURE_LIST (tmpl_expr),
9493 args, tf_warning_or_error, NULL_TREE,
9494 false, false);
9496 LAMBDA_EXPR_CAPTURE_LIST (expr)
9497 = chainon (tmpl_cap, nreverse (LAMBDA_EXPR_CAPTURE_LIST (expr)));
9499 maybe_add_lambda_conv_op (type);
9501 else
9502 gcc_assert (errorcount);
9505 /* Set the file and line number information to whatever is given for
9506 the class itself. This puts error messages involving generated
9507 implicit functions at a predictable point, and the same point
9508 that would be used for non-template classes. */
9509 input_location = DECL_SOURCE_LOCATION (typedecl);
9511 unreverse_member_declarations (type);
9512 finish_struct_1 (type);
9513 TYPE_BEING_DEFINED (type) = 0;
9515 /* We don't instantiate default arguments for member functions. 14.7.1:
9517 The implicit instantiation of a class template specialization causes
9518 the implicit instantiation of the declarations, but not of the
9519 definitions or default arguments, of the class member functions,
9520 member classes, static data members and member templates.... */
9522 /* Some typedefs referenced from within the template code need to be access
9523 checked at template instantiation time, i.e now. These types were
9524 added to the template at parsing time. Let's get those and perform
9525 the access checks then. */
9526 perform_typedefs_access_check (pattern, args);
9527 perform_deferred_access_checks (tf_warning_or_error);
9528 pop_nested_class ();
9529 maximum_field_alignment = saved_maximum_field_alignment;
9530 if (!fn_context)
9531 pop_from_top_level ();
9532 pop_deferring_access_checks ();
9533 pop_tinst_level ();
9535 /* The vtable for a template class can be emitted in any translation
9536 unit in which the class is instantiated. When there is no key
9537 method, however, finish_struct_1 will already have added TYPE to
9538 the keyed_classes list. */
9539 if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
9540 keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
9542 return type;
9545 /* Wrapper for instantiate_class_template_1. */
9547 tree
9548 instantiate_class_template (tree type)
9550 tree ret;
9551 timevar_push (TV_TEMPLATE_INST);
9552 ret = instantiate_class_template_1 (type);
9553 timevar_pop (TV_TEMPLATE_INST);
9554 return ret;
9557 static tree
9558 tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
9560 tree r;
9562 if (!t)
9563 r = t;
9564 else if (TYPE_P (t))
9565 r = tsubst (t, args, complain, in_decl);
9566 else
9568 if (!(complain & tf_warning))
9569 ++c_inhibit_evaluation_warnings;
9570 r = tsubst_expr (t, args, complain, in_decl,
9571 /*integral_constant_expression_p=*/true);
9572 if (!(complain & tf_warning))
9573 --c_inhibit_evaluation_warnings;
9575 return r;
9578 /* Given a function parameter pack TMPL_PARM and some function parameters
9579 instantiated from it at *SPEC_P, return a NONTYPE_ARGUMENT_PACK of them
9580 and set *SPEC_P to point at the next point in the list. */
9582 static tree
9583 extract_fnparm_pack (tree tmpl_parm, tree *spec_p)
9585 /* Collect all of the extra "packed" parameters into an
9586 argument pack. */
9587 tree parmvec;
9588 tree parmtypevec;
9589 tree argpack = make_node (NONTYPE_ARGUMENT_PACK);
9590 tree argtypepack = cxx_make_type (TYPE_ARGUMENT_PACK);
9591 tree spec_parm = *spec_p;
9592 int i, len;
9594 for (len = 0; spec_parm; ++len, spec_parm = TREE_CHAIN (spec_parm))
9595 if (tmpl_parm
9596 && !function_parameter_expanded_from_pack_p (spec_parm, tmpl_parm))
9597 break;
9599 /* Fill in PARMVEC and PARMTYPEVEC with all of the parameters. */
9600 parmvec = make_tree_vec (len);
9601 parmtypevec = make_tree_vec (len);
9602 spec_parm = *spec_p;
9603 for (i = 0; i < len; i++, spec_parm = DECL_CHAIN (spec_parm))
9605 TREE_VEC_ELT (parmvec, i) = spec_parm;
9606 TREE_VEC_ELT (parmtypevec, i) = TREE_TYPE (spec_parm);
9609 /* Build the argument packs. */
9610 SET_ARGUMENT_PACK_ARGS (argpack, parmvec);
9611 SET_ARGUMENT_PACK_ARGS (argtypepack, parmtypevec);
9612 TREE_TYPE (argpack) = argtypepack;
9613 *spec_p = spec_parm;
9615 return argpack;
9618 /* Give a chain SPEC_PARM of PARM_DECLs, pack them into a
9619 NONTYPE_ARGUMENT_PACK. */
9621 static tree
9622 make_fnparm_pack (tree spec_parm)
9624 return extract_fnparm_pack (NULL_TREE, &spec_parm);
9627 /* Return true iff the Ith element of the argument pack ARG_PACK is a
9628 pack expansion. */
9630 static bool
9631 argument_pack_element_is_expansion_p (tree arg_pack, int i)
9633 tree vec = ARGUMENT_PACK_ARGS (arg_pack);
9634 if (i >= TREE_VEC_LENGTH (vec))
9635 return false;
9636 return PACK_EXPANSION_P (TREE_VEC_ELT (vec, i));
9640 /* Creates and return an ARGUMENT_PACK_SELECT tree node. */
9642 static tree
9643 make_argument_pack_select (tree arg_pack, unsigned index)
9645 tree aps = make_node (ARGUMENT_PACK_SELECT);
9647 ARGUMENT_PACK_SELECT_FROM_PACK (aps) = arg_pack;
9648 ARGUMENT_PACK_SELECT_INDEX (aps) = index;
9650 return aps;
9653 /* This is a subroutine of tsubst_pack_expansion.
9655 It returns TRUE if we need to use the PACK_EXPANSION_EXTRA_ARGS
9656 mechanism to store the (non complete list of) arguments of the
9657 substitution and return a non substituted pack expansion, in order
9658 to wait for when we have enough arguments to really perform the
9659 substitution. */
9661 static bool
9662 use_pack_expansion_extra_args_p (tree parm_packs,
9663 int arg_pack_len,
9664 bool has_empty_arg)
9666 /* If one pack has an expansion and another pack has a normal
9667 argument or if one pack has an empty argument and an another
9668 one hasn't then tsubst_pack_expansion cannot perform the
9669 substitution and need to fall back on the
9670 PACK_EXPANSION_EXTRA mechanism. */
9671 if (parm_packs == NULL_TREE)
9672 return false;
9673 else if (has_empty_arg)
9674 return true;
9676 bool has_expansion_arg = false;
9677 for (int i = 0 ; i < arg_pack_len; ++i)
9679 bool has_non_expansion_arg = false;
9680 for (tree parm_pack = parm_packs;
9681 parm_pack;
9682 parm_pack = TREE_CHAIN (parm_pack))
9684 tree arg = TREE_VALUE (parm_pack);
9686 if (argument_pack_element_is_expansion_p (arg, i))
9687 has_expansion_arg = true;
9688 else
9689 has_non_expansion_arg = true;
9692 if (has_expansion_arg && has_non_expansion_arg)
9693 return true;
9695 return false;
9698 /* [temp.variadic]/6 says that:
9700 The instantiation of a pack expansion [...]
9701 produces a list E1,E2, ..., En, where N is the number of elements
9702 in the pack expansion parameters.
9704 This subroutine of tsubst_pack_expansion produces one of these Ei.
9706 PATTERN is the pattern of the pack expansion. PARM_PACKS is a
9707 TREE_LIST in which each TREE_PURPOSE is a parameter pack of
9708 PATTERN, and each TREE_VALUE is its corresponding argument pack.
9709 INDEX is the index 'i' of the element Ei to produce. ARGS,
9710 COMPLAIN, and IN_DECL are the same parameters as for the
9711 tsubst_pack_expansion function.
9713 The function returns the resulting Ei upon successful completion,
9714 or error_mark_node.
9716 Note that this function possibly modifies the ARGS parameter, so
9717 it's the responsibility of the caller to restore it. */
9719 static tree
9720 gen_elem_of_pack_expansion_instantiation (tree pattern,
9721 tree parm_packs,
9722 unsigned index,
9723 tree args /* This parm gets
9724 modified. */,
9725 tsubst_flags_t complain,
9726 tree in_decl)
9728 tree t;
9729 bool ith_elem_is_expansion = false;
9731 /* For each parameter pack, change the substitution of the parameter
9732 pack to the ith argument in its argument pack, then expand the
9733 pattern. */
9734 for (tree pack = parm_packs; pack; pack = TREE_CHAIN (pack))
9736 tree parm = TREE_PURPOSE (pack);
9737 tree arg_pack = TREE_VALUE (pack);
9738 tree aps; /* instance of ARGUMENT_PACK_SELECT. */
9740 ith_elem_is_expansion |=
9741 argument_pack_element_is_expansion_p (arg_pack, index);
9743 /* Select the Ith argument from the pack. */
9744 if (TREE_CODE (parm) == PARM_DECL
9745 || TREE_CODE (parm) == FIELD_DECL)
9747 if (index == 0)
9749 aps = make_argument_pack_select (arg_pack, index);
9750 mark_used (parm);
9751 register_local_specialization (aps, parm);
9753 else
9754 aps = retrieve_local_specialization (parm);
9756 else
9758 int idx, level;
9759 template_parm_level_and_index (parm, &level, &idx);
9761 if (index == 0)
9763 aps = make_argument_pack_select (arg_pack, index);
9764 /* Update the corresponding argument. */
9765 TMPL_ARG (args, level, idx) = aps;
9767 else
9768 /* Re-use the ARGUMENT_PACK_SELECT. */
9769 aps = TMPL_ARG (args, level, idx);
9771 ARGUMENT_PACK_SELECT_INDEX (aps) = index;
9774 /* Substitute into the PATTERN with the (possibly altered)
9775 arguments. */
9776 if (pattern == in_decl)
9777 /* Expanding a fixed parameter pack from
9778 coerce_template_parameter_pack. */
9779 t = tsubst_decl (pattern, args, complain);
9780 else if (!TYPE_P (pattern))
9781 t = tsubst_expr (pattern, args, complain, in_decl,
9782 /*integral_constant_expression_p=*/false);
9783 else
9784 t = tsubst (pattern, args, complain, in_decl);
9786 /* If the Ith argument pack element is a pack expansion, then
9787 the Ith element resulting from the substituting is going to
9788 be a pack expansion as well. */
9789 if (ith_elem_is_expansion)
9790 t = make_pack_expansion (t);
9792 return t;
9795 /* Substitute ARGS into T, which is an pack expansion
9796 (i.e. TYPE_PACK_EXPANSION or EXPR_PACK_EXPANSION). Returns a
9797 TREE_VEC with the substituted arguments, a PACK_EXPANSION_* node
9798 (if only a partial substitution could be performed) or
9799 ERROR_MARK_NODE if there was an error. */
9800 tree
9801 tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
9802 tree in_decl)
9804 tree pattern;
9805 tree pack, packs = NULL_TREE;
9806 bool unsubstituted_packs = false;
9807 int i, len = -1;
9808 tree result;
9809 hash_map<tree, tree> *saved_local_specializations = NULL;
9810 bool need_local_specializations = false;
9811 int levels;
9813 gcc_assert (PACK_EXPANSION_P (t));
9814 pattern = PACK_EXPANSION_PATTERN (t);
9816 /* Add in any args remembered from an earlier partial instantiation. */
9817 args = add_to_template_args (PACK_EXPANSION_EXTRA_ARGS (t), args);
9819 levels = TMPL_ARGS_DEPTH (args);
9821 /* Determine the argument packs that will instantiate the parameter
9822 packs used in the expansion expression. While we're at it,
9823 compute the number of arguments to be expanded and make sure it
9824 is consistent. */
9825 for (pack = PACK_EXPANSION_PARAMETER_PACKS (t); pack;
9826 pack = TREE_CHAIN (pack))
9828 tree parm_pack = TREE_VALUE (pack);
9829 tree arg_pack = NULL_TREE;
9830 tree orig_arg = NULL_TREE;
9831 int level = 0;
9833 if (TREE_CODE (parm_pack) == BASES)
9835 if (BASES_DIRECT (parm_pack))
9836 return calculate_direct_bases (tsubst_expr (BASES_TYPE (parm_pack),
9837 args, complain, in_decl, false));
9838 else
9839 return calculate_bases (tsubst_expr (BASES_TYPE (parm_pack),
9840 args, complain, in_decl, false));
9842 if (TREE_CODE (parm_pack) == PARM_DECL)
9844 if (PACK_EXPANSION_LOCAL_P (t))
9845 arg_pack = retrieve_local_specialization (parm_pack);
9846 else
9848 /* We can't rely on local_specializations for a parameter
9849 name used later in a function declaration (such as in a
9850 late-specified return type). Even if it exists, it might
9851 have the wrong value for a recursive call. Just make a
9852 dummy decl, since it's only used for its type. */
9853 arg_pack = tsubst_decl (parm_pack, args, complain);
9854 if (arg_pack && DECL_PACK_P (arg_pack))
9855 /* Partial instantiation of the parm_pack, we can't build
9856 up an argument pack yet. */
9857 arg_pack = NULL_TREE;
9858 else
9859 arg_pack = make_fnparm_pack (arg_pack);
9860 need_local_specializations = true;
9863 else if (TREE_CODE (parm_pack) == FIELD_DECL)
9864 arg_pack = tsubst_copy (parm_pack, args, complain, in_decl);
9865 else
9867 int idx;
9868 template_parm_level_and_index (parm_pack, &level, &idx);
9870 if (level <= levels)
9871 arg_pack = TMPL_ARG (args, level, idx);
9874 orig_arg = arg_pack;
9875 if (arg_pack && TREE_CODE (arg_pack) == ARGUMENT_PACK_SELECT)
9876 arg_pack = ARGUMENT_PACK_SELECT_FROM_PACK (arg_pack);
9878 if (arg_pack && !ARGUMENT_PACK_P (arg_pack))
9879 /* This can only happen if we forget to expand an argument
9880 pack somewhere else. Just return an error, silently. */
9882 result = make_tree_vec (1);
9883 TREE_VEC_ELT (result, 0) = error_mark_node;
9884 return result;
9887 if (arg_pack)
9889 int my_len =
9890 TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack));
9892 /* Don't bother trying to do a partial substitution with
9893 incomplete packs; we'll try again after deduction. */
9894 if (ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
9895 return t;
9897 if (len < 0)
9898 len = my_len;
9899 else if (len != my_len)
9901 if (!(complain & tf_error))
9902 /* Fail quietly. */;
9903 else if (TREE_CODE (t) == TYPE_PACK_EXPANSION)
9904 error ("mismatched argument pack lengths while expanding "
9905 "%<%T%>",
9906 pattern);
9907 else
9908 error ("mismatched argument pack lengths while expanding "
9909 "%<%E%>",
9910 pattern);
9911 return error_mark_node;
9914 /* Keep track of the parameter packs and their corresponding
9915 argument packs. */
9916 packs = tree_cons (parm_pack, arg_pack, packs);
9917 TREE_TYPE (packs) = orig_arg;
9919 else
9921 /* We can't substitute for this parameter pack. We use a flag as
9922 well as the missing_level counter because function parameter
9923 packs don't have a level. */
9924 unsubstituted_packs = true;
9928 /* If the expansion is just T..., return the matching argument pack. */
9929 if (!unsubstituted_packs
9930 && TREE_PURPOSE (packs) == pattern)
9932 tree args = ARGUMENT_PACK_ARGS (TREE_VALUE (packs));
9933 if (TREE_CODE (t) == TYPE_PACK_EXPANSION
9934 || pack_expansion_args_count (args))
9935 return args;
9936 /* Otherwise use the normal path so we get convert_from_reference. */
9939 /* We cannot expand this expansion expression, because we don't have
9940 all of the argument packs we need. */
9941 if (use_pack_expansion_extra_args_p (packs, len, unsubstituted_packs))
9943 /* We got some full packs, but we can't substitute them in until we
9944 have values for all the packs. So remember these until then. */
9946 t = make_pack_expansion (pattern);
9947 PACK_EXPANSION_EXTRA_ARGS (t) = args;
9948 return t;
9950 else if (unsubstituted_packs)
9952 /* There were no real arguments, we're just replacing a parameter
9953 pack with another version of itself. Substitute into the
9954 pattern and return a PACK_EXPANSION_*. The caller will need to
9955 deal with that. */
9956 if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
9957 t = tsubst_expr (pattern, args, complain, in_decl,
9958 /*integral_constant_expression_p=*/false);
9959 else
9960 t = tsubst (pattern, args, complain, in_decl);
9961 t = make_pack_expansion (t);
9962 return t;
9965 gcc_assert (len >= 0);
9967 if (need_local_specializations)
9969 /* We're in a late-specified return type, so create our own local
9970 specializations map; the current map is either NULL or (in the
9971 case of recursive unification) might have bindings that we don't
9972 want to use or alter. */
9973 saved_local_specializations = local_specializations;
9974 local_specializations = new hash_map<tree, tree>;
9977 /* For each argument in each argument pack, substitute into the
9978 pattern. */
9979 result = make_tree_vec (len);
9980 for (i = 0; i < len; ++i)
9982 t = gen_elem_of_pack_expansion_instantiation (pattern, packs,
9984 args, complain,
9985 in_decl);
9986 TREE_VEC_ELT (result, i) = t;
9987 if (t == error_mark_node)
9989 result = error_mark_node;
9990 break;
9994 /* Update ARGS to restore the substitution from parameter packs to
9995 their argument packs. */
9996 for (pack = packs; pack; pack = TREE_CHAIN (pack))
9998 tree parm = TREE_PURPOSE (pack);
10000 if (TREE_CODE (parm) == PARM_DECL
10001 || TREE_CODE (parm) == FIELD_DECL)
10002 register_local_specialization (TREE_TYPE (pack), parm);
10003 else
10005 int idx, level;
10007 if (TREE_VALUE (pack) == NULL_TREE)
10008 continue;
10010 template_parm_level_and_index (parm, &level, &idx);
10012 /* Update the corresponding argument. */
10013 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
10014 TREE_VEC_ELT (TREE_VEC_ELT (args, level -1 ), idx) =
10015 TREE_TYPE (pack);
10016 else
10017 TREE_VEC_ELT (args, idx) = TREE_TYPE (pack);
10021 if (need_local_specializations)
10023 delete local_specializations;
10024 local_specializations = saved_local_specializations;
10027 return result;
10030 /* Given PARM_DECL PARM, find the corresponding PARM_DECL in the template
10031 TMPL. We do this using DECL_PARM_INDEX, which should work even with
10032 parameter packs; all parms generated from a function parameter pack will
10033 have the same DECL_PARM_INDEX. */
10035 tree
10036 get_pattern_parm (tree parm, tree tmpl)
10038 tree pattern = DECL_TEMPLATE_RESULT (tmpl);
10039 tree patparm;
10041 if (DECL_ARTIFICIAL (parm))
10043 for (patparm = DECL_ARGUMENTS (pattern);
10044 patparm; patparm = DECL_CHAIN (patparm))
10045 if (DECL_ARTIFICIAL (patparm)
10046 && DECL_NAME (parm) == DECL_NAME (patparm))
10047 break;
10049 else
10051 patparm = FUNCTION_FIRST_USER_PARM (DECL_TEMPLATE_RESULT (tmpl));
10052 patparm = chain_index (DECL_PARM_INDEX (parm)-1, patparm);
10053 gcc_assert (DECL_PARM_INDEX (patparm)
10054 == DECL_PARM_INDEX (parm));
10057 return patparm;
10060 /* Substitute ARGS into the vector or list of template arguments T. */
10062 static tree
10063 tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
10065 tree orig_t = t;
10066 int len, need_new = 0, i, expanded_len_adjust = 0, out;
10067 tree *elts;
10069 if (t == error_mark_node)
10070 return error_mark_node;
10072 len = TREE_VEC_LENGTH (t);
10073 elts = XALLOCAVEC (tree, len);
10075 for (i = 0; i < len; i++)
10077 tree orig_arg = TREE_VEC_ELT (t, i);
10078 tree new_arg;
10080 if (TREE_CODE (orig_arg) == TREE_VEC)
10081 new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
10082 else if (PACK_EXPANSION_P (orig_arg))
10084 /* Substitute into an expansion expression. */
10085 new_arg = tsubst_pack_expansion (orig_arg, args, complain, in_decl);
10087 if (TREE_CODE (new_arg) == TREE_VEC)
10088 /* Add to the expanded length adjustment the number of
10089 expanded arguments. We subtract one from this
10090 measurement, because the argument pack expression
10091 itself is already counted as 1 in
10092 LEN. EXPANDED_LEN_ADJUST can actually be negative, if
10093 the argument pack is empty. */
10094 expanded_len_adjust += TREE_VEC_LENGTH (new_arg) - 1;
10096 else if (ARGUMENT_PACK_P (orig_arg))
10098 /* Substitute into each of the arguments. */
10099 new_arg = TYPE_P (orig_arg)
10100 ? cxx_make_type (TREE_CODE (orig_arg))
10101 : make_node (TREE_CODE (orig_arg));
10103 SET_ARGUMENT_PACK_ARGS (
10104 new_arg,
10105 tsubst_template_args (ARGUMENT_PACK_ARGS (orig_arg),
10106 args, complain, in_decl));
10108 if (ARGUMENT_PACK_ARGS (new_arg) == error_mark_node)
10109 new_arg = error_mark_node;
10111 if (TREE_CODE (new_arg) == NONTYPE_ARGUMENT_PACK) {
10112 TREE_TYPE (new_arg) = tsubst (TREE_TYPE (orig_arg), args,
10113 complain, in_decl);
10114 TREE_CONSTANT (new_arg) = TREE_CONSTANT (orig_arg);
10116 if (TREE_TYPE (new_arg) == error_mark_node)
10117 new_arg = error_mark_node;
10120 else
10121 new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
10123 if (new_arg == error_mark_node)
10124 return error_mark_node;
10126 elts[i] = new_arg;
10127 if (new_arg != orig_arg)
10128 need_new = 1;
10131 if (!need_new)
10132 return t;
10134 /* Make space for the expanded arguments coming from template
10135 argument packs. */
10136 t = make_tree_vec (len + expanded_len_adjust);
10137 /* ORIG_T can contain TREE_VECs. That happens if ORIG_T contains the
10138 arguments for a member template.
10139 In that case each TREE_VEC in ORIG_T represents a level of template
10140 arguments, and ORIG_T won't carry any non defaulted argument count.
10141 It will rather be the nested TREE_VECs that will carry one.
10142 In other words, ORIG_T carries a non defaulted argument count only
10143 if it doesn't contain any nested TREE_VEC. */
10144 if (NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t))
10146 int count = GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t);
10147 count += expanded_len_adjust;
10148 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (t, count);
10150 for (i = 0, out = 0; i < len; i++)
10152 if ((PACK_EXPANSION_P (TREE_VEC_ELT (orig_t, i))
10153 || ARGUMENT_PACK_P (TREE_VEC_ELT (orig_t, i)))
10154 && TREE_CODE (elts[i]) == TREE_VEC)
10156 int idx;
10158 /* Now expand the template argument pack "in place". */
10159 for (idx = 0; idx < TREE_VEC_LENGTH (elts[i]); idx++, out++)
10160 TREE_VEC_ELT (t, out) = TREE_VEC_ELT (elts[i], idx);
10162 else
10164 TREE_VEC_ELT (t, out) = elts[i];
10165 out++;
10169 return t;
10172 /* Return the result of substituting ARGS into the template parameters
10173 given by PARMS. If there are m levels of ARGS and m + n levels of
10174 PARMS, then the result will contain n levels of PARMS. For
10175 example, if PARMS is `template <class T> template <class U>
10176 template <T*, U, class V>' and ARGS is {{int}, {double}} then the
10177 result will be `template <int*, double, class V>'. */
10179 static tree
10180 tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
10182 tree r = NULL_TREE;
10183 tree* new_parms;
10185 /* When substituting into a template, we must set
10186 PROCESSING_TEMPLATE_DECL as the template parameters may be
10187 dependent if they are based on one-another, and the dependency
10188 predicates are short-circuit outside of templates. */
10189 ++processing_template_decl;
10191 for (new_parms = &r;
10192 parms && TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
10193 new_parms = &(TREE_CHAIN (*new_parms)),
10194 parms = TREE_CHAIN (parms))
10196 tree new_vec =
10197 make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
10198 int i;
10200 for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
10202 tree tuple;
10204 if (parms == error_mark_node)
10205 continue;
10207 tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
10209 if (tuple == error_mark_node)
10210 continue;
10212 TREE_VEC_ELT (new_vec, i) =
10213 tsubst_template_parm (tuple, args, complain);
10216 *new_parms =
10217 tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
10218 - TMPL_ARGS_DEPTH (args)),
10219 new_vec, NULL_TREE);
10222 --processing_template_decl;
10224 return r;
10227 /* Return the result of substituting ARGS into one template parameter
10228 given by T. T Must be a TREE_LIST which TREE_VALUE is the template
10229 parameter and which TREE_PURPOSE is the default argument of the
10230 template parameter. */
10232 static tree
10233 tsubst_template_parm (tree t, tree args, tsubst_flags_t complain)
10235 tree default_value, parm_decl;
10237 if (args == NULL_TREE
10238 || t == NULL_TREE
10239 || t == error_mark_node)
10240 return t;
10242 gcc_assert (TREE_CODE (t) == TREE_LIST);
10244 default_value = TREE_PURPOSE (t);
10245 parm_decl = TREE_VALUE (t);
10247 parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
10248 if (TREE_CODE (parm_decl) == PARM_DECL
10249 && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl), complain))
10250 parm_decl = error_mark_node;
10251 default_value = tsubst_template_arg (default_value, args,
10252 complain, NULL_TREE);
10254 return build_tree_list (default_value, parm_decl);
10257 /* Substitute the ARGS into the indicated aggregate (or enumeration)
10258 type T. If T is not an aggregate or enumeration type, it is
10259 handled as if by tsubst. IN_DECL is as for tsubst. If
10260 ENTERING_SCOPE is nonzero, T is the context for a template which
10261 we are presently tsubst'ing. Return the substituted value. */
10263 static tree
10264 tsubst_aggr_type (tree t,
10265 tree args,
10266 tsubst_flags_t complain,
10267 tree in_decl,
10268 int entering_scope)
10270 if (t == NULL_TREE)
10271 return NULL_TREE;
10273 switch (TREE_CODE (t))
10275 case RECORD_TYPE:
10276 if (TYPE_PTRMEMFUNC_P (t))
10277 return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
10279 /* Else fall through. */
10280 case ENUMERAL_TYPE:
10281 case UNION_TYPE:
10282 if (TYPE_TEMPLATE_INFO (t) && uses_template_parms (t))
10284 tree argvec;
10285 tree context;
10286 tree r;
10287 int saved_unevaluated_operand;
10288 int saved_inhibit_evaluation_warnings;
10290 /* In "sizeof(X<I>)" we need to evaluate "I". */
10291 saved_unevaluated_operand = cp_unevaluated_operand;
10292 cp_unevaluated_operand = 0;
10293 saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
10294 c_inhibit_evaluation_warnings = 0;
10296 /* First, determine the context for the type we are looking
10297 up. */
10298 context = TYPE_CONTEXT (t);
10299 if (context && TYPE_P (context))
10301 context = tsubst_aggr_type (context, args, complain,
10302 in_decl, /*entering_scope=*/1);
10303 /* If context is a nested class inside a class template,
10304 it may still need to be instantiated (c++/33959). */
10305 context = complete_type (context);
10308 /* Then, figure out what arguments are appropriate for the
10309 type we are trying to find. For example, given:
10311 template <class T> struct S;
10312 template <class T, class U> void f(T, U) { S<U> su; }
10314 and supposing that we are instantiating f<int, double>,
10315 then our ARGS will be {int, double}, but, when looking up
10316 S we only want {double}. */
10317 argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
10318 complain, in_decl);
10319 if (argvec == error_mark_node)
10320 r = error_mark_node;
10321 else
10323 r = lookup_template_class (t, argvec, in_decl, context,
10324 entering_scope, complain);
10325 r = cp_build_qualified_type_real (r, cp_type_quals (t), complain);
10328 cp_unevaluated_operand = saved_unevaluated_operand;
10329 c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
10331 return r;
10333 else
10334 /* This is not a template type, so there's nothing to do. */
10335 return t;
10337 default:
10338 return tsubst (t, args, complain, in_decl);
10342 /* Substitute into the default argument ARG (a default argument for
10343 FN), which has the indicated TYPE. */
10345 tree
10346 tsubst_default_argument (tree fn, tree type, tree arg, tsubst_flags_t complain)
10348 tree saved_class_ptr = NULL_TREE;
10349 tree saved_class_ref = NULL_TREE;
10350 int errs = errorcount + sorrycount;
10352 /* This can happen in invalid code. */
10353 if (TREE_CODE (arg) == DEFAULT_ARG)
10354 return arg;
10356 /* This default argument came from a template. Instantiate the
10357 default argument here, not in tsubst. In the case of
10358 something like:
10360 template <class T>
10361 struct S {
10362 static T t();
10363 void f(T = t());
10366 we must be careful to do name lookup in the scope of S<T>,
10367 rather than in the current class. */
10368 push_access_scope (fn);
10369 /* The "this" pointer is not valid in a default argument. */
10370 if (cfun)
10372 saved_class_ptr = current_class_ptr;
10373 cp_function_chain->x_current_class_ptr = NULL_TREE;
10374 saved_class_ref = current_class_ref;
10375 cp_function_chain->x_current_class_ref = NULL_TREE;
10378 push_deferring_access_checks(dk_no_deferred);
10379 /* The default argument expression may cause implicitly defined
10380 member functions to be synthesized, which will result in garbage
10381 collection. We must treat this situation as if we were within
10382 the body of function so as to avoid collecting live data on the
10383 stack. */
10384 ++function_depth;
10385 arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
10386 complain, NULL_TREE,
10387 /*integral_constant_expression_p=*/false);
10388 --function_depth;
10389 pop_deferring_access_checks();
10391 /* Restore the "this" pointer. */
10392 if (cfun)
10394 cp_function_chain->x_current_class_ptr = saved_class_ptr;
10395 cp_function_chain->x_current_class_ref = saved_class_ref;
10398 if (errorcount+sorrycount > errs
10399 && (complain & tf_warning_or_error))
10400 inform (input_location,
10401 " when instantiating default argument for call to %D", fn);
10403 /* Make sure the default argument is reasonable. */
10404 arg = check_default_argument (type, arg, complain);
10406 pop_access_scope (fn);
10408 return arg;
10411 /* Substitute into all the default arguments for FN. */
10413 static void
10414 tsubst_default_arguments (tree fn, tsubst_flags_t complain)
10416 tree arg;
10417 tree tmpl_args;
10419 tmpl_args = DECL_TI_ARGS (fn);
10421 /* If this function is not yet instantiated, we certainly don't need
10422 its default arguments. */
10423 if (uses_template_parms (tmpl_args))
10424 return;
10425 /* Don't do this again for clones. */
10426 if (DECL_CLONED_FUNCTION_P (fn))
10427 return;
10429 for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
10430 arg;
10431 arg = TREE_CHAIN (arg))
10432 if (TREE_PURPOSE (arg))
10433 TREE_PURPOSE (arg) = tsubst_default_argument (fn,
10434 TREE_VALUE (arg),
10435 TREE_PURPOSE (arg),
10436 complain);
10439 /* Substitute the ARGS into the T, which is a _DECL. Return the
10440 result of the substitution. Issue error and warning messages under
10441 control of COMPLAIN. */
10443 static tree
10444 tsubst_decl (tree t, tree args, tsubst_flags_t complain)
10446 #define RETURN(EXP) do { r = (EXP); goto out; } while(0)
10447 location_t saved_loc;
10448 tree r = NULL_TREE;
10449 tree in_decl = t;
10450 hashval_t hash = 0;
10452 /* Set the filename and linenumber to improve error-reporting. */
10453 saved_loc = input_location;
10454 input_location = DECL_SOURCE_LOCATION (t);
10456 switch (TREE_CODE (t))
10458 case TEMPLATE_DECL:
10460 /* We can get here when processing a member function template,
10461 member class template, or template template parameter. */
10462 tree decl = DECL_TEMPLATE_RESULT (t);
10463 tree spec;
10464 tree tmpl_args;
10465 tree full_args;
10467 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
10469 /* Template template parameter is treated here. */
10470 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10471 if (new_type == error_mark_node)
10472 RETURN (error_mark_node);
10473 /* If we get a real template back, return it. This can happen in
10474 the context of most_specialized_class. */
10475 if (TREE_CODE (new_type) == TEMPLATE_DECL)
10476 return new_type;
10478 r = copy_decl (t);
10479 DECL_CHAIN (r) = NULL_TREE;
10480 TREE_TYPE (r) = new_type;
10481 DECL_TEMPLATE_RESULT (r)
10482 = build_decl (DECL_SOURCE_LOCATION (decl),
10483 TYPE_DECL, DECL_NAME (decl), new_type);
10484 DECL_TEMPLATE_PARMS (r)
10485 = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
10486 complain);
10487 TYPE_NAME (new_type) = r;
10488 break;
10491 /* We might already have an instance of this template.
10492 The ARGS are for the surrounding class type, so the
10493 full args contain the tsubst'd args for the context,
10494 plus the innermost args from the template decl. */
10495 tmpl_args = DECL_CLASS_TEMPLATE_P (t)
10496 ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
10497 : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
10498 /* Because this is a template, the arguments will still be
10499 dependent, even after substitution. If
10500 PROCESSING_TEMPLATE_DECL is not set, the dependency
10501 predicates will short-circuit. */
10502 ++processing_template_decl;
10503 full_args = tsubst_template_args (tmpl_args, args,
10504 complain, in_decl);
10505 --processing_template_decl;
10506 if (full_args == error_mark_node)
10507 RETURN (error_mark_node);
10509 /* If this is a default template template argument,
10510 tsubst might not have changed anything. */
10511 if (full_args == tmpl_args)
10512 RETURN (t);
10514 hash = hash_tmpl_and_args (t, full_args);
10515 spec = retrieve_specialization (t, full_args, hash);
10516 if (spec != NULL_TREE)
10518 r = spec;
10519 break;
10522 /* Make a new template decl. It will be similar to the
10523 original, but will record the current template arguments.
10524 We also create a new function declaration, which is just
10525 like the old one, but points to this new template, rather
10526 than the old one. */
10527 r = copy_decl (t);
10528 gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
10529 DECL_CHAIN (r) = NULL_TREE;
10531 DECL_TEMPLATE_INFO (r) = build_template_info (t, args);
10533 if (TREE_CODE (decl) == TYPE_DECL
10534 && !TYPE_DECL_ALIAS_P (decl))
10536 tree new_type;
10537 ++processing_template_decl;
10538 new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10539 --processing_template_decl;
10540 if (new_type == error_mark_node)
10541 RETURN (error_mark_node);
10543 TREE_TYPE (r) = new_type;
10544 /* For a partial specialization, we need to keep pointing to
10545 the primary template. */
10546 if (!DECL_TEMPLATE_SPECIALIZATION (t))
10547 CLASSTYPE_TI_TEMPLATE (new_type) = r;
10548 DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
10549 DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
10550 DECL_CONTEXT (r) = TYPE_CONTEXT (new_type);
10552 else
10554 tree new_decl;
10555 ++processing_template_decl;
10556 new_decl = tsubst (decl, args, complain, in_decl);
10557 --processing_template_decl;
10558 if (new_decl == error_mark_node)
10559 RETURN (error_mark_node);
10561 DECL_TEMPLATE_RESULT (r) = new_decl;
10562 DECL_TI_TEMPLATE (new_decl) = r;
10563 TREE_TYPE (r) = TREE_TYPE (new_decl);
10564 DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
10565 DECL_CONTEXT (r) = DECL_CONTEXT (new_decl);
10568 SET_DECL_IMPLICIT_INSTANTIATION (r);
10569 DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
10570 DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
10572 /* The template parameters for this new template are all the
10573 template parameters for the old template, except the
10574 outermost level of parameters. */
10575 DECL_TEMPLATE_PARMS (r)
10576 = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
10577 complain);
10579 if (PRIMARY_TEMPLATE_P (t))
10580 DECL_PRIMARY_TEMPLATE (r) = r;
10582 if (TREE_CODE (decl) != TYPE_DECL && TREE_CODE (decl) != VAR_DECL)
10583 /* Record this non-type partial instantiation. */
10584 register_specialization (r, t,
10585 DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)),
10586 false, hash);
10588 break;
10590 case FUNCTION_DECL:
10592 tree ctx;
10593 tree argvec = NULL_TREE;
10594 tree *friends;
10595 tree gen_tmpl;
10596 tree type;
10597 int member;
10598 int args_depth;
10599 int parms_depth;
10601 /* Nobody should be tsubst'ing into non-template functions. */
10602 gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
10604 if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
10606 tree spec;
10607 bool dependent_p;
10609 /* If T is not dependent, just return it. We have to
10610 increment PROCESSING_TEMPLATE_DECL because
10611 value_dependent_expression_p assumes that nothing is
10612 dependent when PROCESSING_TEMPLATE_DECL is zero. */
10613 ++processing_template_decl;
10614 dependent_p = value_dependent_expression_p (t);
10615 --processing_template_decl;
10616 if (!dependent_p)
10617 RETURN (t);
10619 /* Calculate the most general template of which R is a
10620 specialization, and the complete set of arguments used to
10621 specialize R. */
10622 gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
10623 argvec = tsubst_template_args (DECL_TI_ARGS
10624 (DECL_TEMPLATE_RESULT
10625 (DECL_TI_TEMPLATE (t))),
10626 args, complain, in_decl);
10627 if (argvec == error_mark_node)
10628 RETURN (error_mark_node);
10630 /* Check to see if we already have this specialization. */
10631 hash = hash_tmpl_and_args (gen_tmpl, argvec);
10632 spec = retrieve_specialization (gen_tmpl, argvec, hash);
10634 if (spec)
10636 r = spec;
10637 break;
10640 /* We can see more levels of arguments than parameters if
10641 there was a specialization of a member template, like
10642 this:
10644 template <class T> struct S { template <class U> void f(); }
10645 template <> template <class U> void S<int>::f(U);
10647 Here, we'll be substituting into the specialization,
10648 because that's where we can find the code we actually
10649 want to generate, but we'll have enough arguments for
10650 the most general template.
10652 We also deal with the peculiar case:
10654 template <class T> struct S {
10655 template <class U> friend void f();
10657 template <class U> void f() {}
10658 template S<int>;
10659 template void f<double>();
10661 Here, the ARGS for the instantiation of will be {int,
10662 double}. But, we only need as many ARGS as there are
10663 levels of template parameters in CODE_PATTERN. We are
10664 careful not to get fooled into reducing the ARGS in
10665 situations like:
10667 template <class T> struct S { template <class U> void f(U); }
10668 template <class T> template <> void S<T>::f(int) {}
10670 which we can spot because the pattern will be a
10671 specialization in this case. */
10672 args_depth = TMPL_ARGS_DEPTH (args);
10673 parms_depth =
10674 TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
10675 if (args_depth > parms_depth
10676 && !DECL_TEMPLATE_SPECIALIZATION (t))
10677 args = get_innermost_template_args (args, parms_depth);
10679 else
10681 /* This special case arises when we have something like this:
10683 template <class T> struct S {
10684 friend void f<int>(int, double);
10687 Here, the DECL_TI_TEMPLATE for the friend declaration
10688 will be an IDENTIFIER_NODE. We are being called from
10689 tsubst_friend_function, and we want only to create a
10690 new decl (R) with appropriate types so that we can call
10691 determine_specialization. */
10692 gen_tmpl = NULL_TREE;
10695 if (DECL_CLASS_SCOPE_P (t))
10697 if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
10698 member = 2;
10699 else
10700 member = 1;
10701 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
10702 complain, t, /*entering_scope=*/1);
10704 else
10706 member = 0;
10707 ctx = DECL_CONTEXT (t);
10709 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10710 if (type == error_mark_node)
10711 RETURN (error_mark_node);
10713 /* If we hit excessive deduction depth, the type is bogus even if
10714 it isn't error_mark_node, so don't build a decl. */
10715 if (excessive_deduction_depth)
10716 RETURN (error_mark_node);
10718 /* We do NOT check for matching decls pushed separately at this
10719 point, as they may not represent instantiations of this
10720 template, and in any case are considered separate under the
10721 discrete model. */
10722 r = copy_decl (t);
10723 DECL_USE_TEMPLATE (r) = 0;
10724 TREE_TYPE (r) = type;
10725 /* Clear out the mangled name and RTL for the instantiation. */
10726 SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
10727 SET_DECL_RTL (r, NULL);
10728 /* Leave DECL_INITIAL set on deleted instantiations. */
10729 if (!DECL_DELETED_FN (r))
10730 DECL_INITIAL (r) = NULL_TREE;
10731 DECL_CONTEXT (r) = ctx;
10733 /* OpenMP UDRs have the only argument a reference to the declared
10734 type. We want to diagnose if the declared type is a reference,
10735 which is invalid, but as references to references are usually
10736 quietly merged, diagnose it here. */
10737 if (DECL_OMP_DECLARE_REDUCTION_P (t))
10739 tree argtype
10740 = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (t))));
10741 argtype = tsubst (argtype, args, complain, in_decl);
10742 if (TREE_CODE (argtype) == REFERENCE_TYPE)
10743 error_at (DECL_SOURCE_LOCATION (t),
10744 "reference type %qT in "
10745 "%<#pragma omp declare reduction%>", argtype);
10746 if (strchr (IDENTIFIER_POINTER (DECL_NAME (t)), '~') == NULL)
10747 DECL_NAME (r) = omp_reduction_id (ERROR_MARK, DECL_NAME (t),
10748 argtype);
10751 if (member && DECL_CONV_FN_P (r))
10752 /* Type-conversion operator. Reconstruct the name, in
10753 case it's the name of one of the template's parameters. */
10754 DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
10756 DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
10757 complain, t);
10758 DECL_RESULT (r) = NULL_TREE;
10760 TREE_STATIC (r) = 0;
10761 TREE_PUBLIC (r) = TREE_PUBLIC (t);
10762 DECL_EXTERNAL (r) = 1;
10763 /* If this is an instantiation of a function with internal
10764 linkage, we already know what object file linkage will be
10765 assigned to the instantiation. */
10766 DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
10767 DECL_DEFER_OUTPUT (r) = 0;
10768 DECL_CHAIN (r) = NULL_TREE;
10769 DECL_PENDING_INLINE_INFO (r) = 0;
10770 DECL_PENDING_INLINE_P (r) = 0;
10771 DECL_SAVED_TREE (r) = NULL_TREE;
10772 DECL_STRUCT_FUNCTION (r) = NULL;
10773 TREE_USED (r) = 0;
10774 /* We'll re-clone as appropriate in instantiate_template. */
10775 DECL_CLONED_FUNCTION (r) = NULL_TREE;
10777 /* If we aren't complaining now, return on error before we register
10778 the specialization so that we'll complain eventually. */
10779 if ((complain & tf_error) == 0
10780 && IDENTIFIER_OPNAME_P (DECL_NAME (r))
10781 && !grok_op_properties (r, /*complain=*/false))
10782 RETURN (error_mark_node);
10784 /* Set up the DECL_TEMPLATE_INFO for R. There's no need to do
10785 this in the special friend case mentioned above where
10786 GEN_TMPL is NULL. */
10787 if (gen_tmpl)
10789 DECL_TEMPLATE_INFO (r)
10790 = build_template_info (gen_tmpl, argvec);
10791 SET_DECL_IMPLICIT_INSTANTIATION (r);
10793 tree new_r
10794 = register_specialization (r, gen_tmpl, argvec, false, hash);
10795 if (new_r != r)
10796 /* We instantiated this while substituting into
10797 the type earlier (template/friend54.C). */
10798 RETURN (new_r);
10800 /* We're not supposed to instantiate default arguments
10801 until they are called, for a template. But, for a
10802 declaration like:
10804 template <class T> void f ()
10805 { extern void g(int i = T()); }
10807 we should do the substitution when the template is
10808 instantiated. We handle the member function case in
10809 instantiate_class_template since the default arguments
10810 might refer to other members of the class. */
10811 if (!member
10812 && !PRIMARY_TEMPLATE_P (gen_tmpl)
10813 && !uses_template_parms (argvec))
10814 tsubst_default_arguments (r, complain);
10816 else
10817 DECL_TEMPLATE_INFO (r) = NULL_TREE;
10819 /* Copy the list of befriending classes. */
10820 for (friends = &DECL_BEFRIENDING_CLASSES (r);
10821 *friends;
10822 friends = &TREE_CHAIN (*friends))
10824 *friends = copy_node (*friends);
10825 TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
10826 args, complain,
10827 in_decl);
10830 if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
10832 maybe_retrofit_in_chrg (r);
10833 if (DECL_CONSTRUCTOR_P (r))
10834 grok_ctor_properties (ctx, r);
10835 if (DECL_INHERITED_CTOR_BASE (r))
10836 deduce_inheriting_ctor (r);
10837 /* If this is an instantiation of a member template, clone it.
10838 If it isn't, that'll be handled by
10839 clone_constructors_and_destructors. */
10840 if (PRIMARY_TEMPLATE_P (gen_tmpl))
10841 clone_function_decl (r, /*update_method_vec_p=*/0);
10843 else if ((complain & tf_error) != 0
10844 && IDENTIFIER_OPNAME_P (DECL_NAME (r))
10845 && !grok_op_properties (r, /*complain=*/true))
10846 RETURN (error_mark_node);
10848 if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
10849 SET_DECL_FRIEND_CONTEXT (r,
10850 tsubst (DECL_FRIEND_CONTEXT (t),
10851 args, complain, in_decl));
10853 /* Possibly limit visibility based on template args. */
10854 DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
10855 if (DECL_VISIBILITY_SPECIFIED (t))
10857 DECL_VISIBILITY_SPECIFIED (r) = 0;
10858 DECL_ATTRIBUTES (r)
10859 = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
10861 determine_visibility (r);
10862 if (DECL_DEFAULTED_OUTSIDE_CLASS_P (r)
10863 && !processing_template_decl)
10864 defaulted_late_check (r);
10866 apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
10867 args, complain, in_decl);
10869 break;
10871 case PARM_DECL:
10873 tree type = NULL_TREE;
10874 int i, len = 1;
10875 tree expanded_types = NULL_TREE;
10876 tree prev_r = NULL_TREE;
10877 tree first_r = NULL_TREE;
10879 if (DECL_PACK_P (t))
10881 /* If there is a local specialization that isn't a
10882 parameter pack, it means that we're doing a "simple"
10883 substitution from inside tsubst_pack_expansion. Just
10884 return the local specialization (which will be a single
10885 parm). */
10886 tree spec = retrieve_local_specialization (t);
10887 if (spec
10888 && TREE_CODE (spec) == PARM_DECL
10889 && TREE_CODE (TREE_TYPE (spec)) != TYPE_PACK_EXPANSION)
10890 RETURN (spec);
10892 /* Expand the TYPE_PACK_EXPANSION that provides the types for
10893 the parameters in this function parameter pack. */
10894 expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
10895 complain, in_decl);
10896 if (TREE_CODE (expanded_types) == TREE_VEC)
10898 len = TREE_VEC_LENGTH (expanded_types);
10900 /* Zero-length parameter packs are boring. Just substitute
10901 into the chain. */
10902 if (len == 0)
10903 RETURN (tsubst (TREE_CHAIN (t), args, complain,
10904 TREE_CHAIN (t)));
10906 else
10908 /* All we did was update the type. Make a note of that. */
10909 type = expanded_types;
10910 expanded_types = NULL_TREE;
10914 /* Loop through all of the parameters we'll build. When T is
10915 a function parameter pack, LEN is the number of expanded
10916 types in EXPANDED_TYPES; otherwise, LEN is 1. */
10917 r = NULL_TREE;
10918 for (i = 0; i < len; ++i)
10920 prev_r = r;
10921 r = copy_node (t);
10922 if (DECL_TEMPLATE_PARM_P (t))
10923 SET_DECL_TEMPLATE_PARM_P (r);
10925 if (expanded_types)
10926 /* We're on the Ith parameter of the function parameter
10927 pack. */
10929 /* Get the Ith type. */
10930 type = TREE_VEC_ELT (expanded_types, i);
10932 /* Rename the parameter to include the index. */
10933 DECL_NAME (r)
10934 = make_ith_pack_parameter_name (DECL_NAME (r), i);
10936 else if (!type)
10937 /* We're dealing with a normal parameter. */
10938 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10940 type = type_decays_to (type);
10941 TREE_TYPE (r) = type;
10942 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
10944 if (DECL_INITIAL (r))
10946 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
10947 DECL_INITIAL (r) = TREE_TYPE (r);
10948 else
10949 DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
10950 complain, in_decl);
10953 DECL_CONTEXT (r) = NULL_TREE;
10955 if (!DECL_TEMPLATE_PARM_P (r))
10956 DECL_ARG_TYPE (r) = type_passed_as (type);
10958 apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
10959 args, complain, in_decl);
10961 /* Keep track of the first new parameter we
10962 generate. That's what will be returned to the
10963 caller. */
10964 if (!first_r)
10965 first_r = r;
10967 /* Build a proper chain of parameters when substituting
10968 into a function parameter pack. */
10969 if (prev_r)
10970 DECL_CHAIN (prev_r) = r;
10973 /* If cp_unevaluated_operand is set, we're just looking for a
10974 single dummy parameter, so don't keep going. */
10975 if (DECL_CHAIN (t) && !cp_unevaluated_operand)
10976 DECL_CHAIN (r) = tsubst (DECL_CHAIN (t), args,
10977 complain, DECL_CHAIN (t));
10979 /* FIRST_R contains the start of the chain we've built. */
10980 r = first_r;
10982 break;
10984 case FIELD_DECL:
10986 tree type = NULL_TREE;
10987 tree vec = NULL_TREE;
10988 tree expanded_types = NULL_TREE;
10989 int len = 1;
10991 if (PACK_EXPANSION_P (TREE_TYPE (t)))
10993 /* This field is a lambda capture pack. Return a TREE_VEC of
10994 the expanded fields to instantiate_class_template_1 and
10995 store them in the specializations hash table as a
10996 NONTYPE_ARGUMENT_PACK so that tsubst_copy can find them. */
10997 expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
10998 complain, in_decl);
10999 if (TREE_CODE (expanded_types) == TREE_VEC)
11001 len = TREE_VEC_LENGTH (expanded_types);
11002 vec = make_tree_vec (len);
11004 else
11006 /* All we did was update the type. Make a note of that. */
11007 type = expanded_types;
11008 expanded_types = NULL_TREE;
11012 for (int i = 0; i < len; ++i)
11014 r = copy_decl (t);
11015 if (expanded_types)
11017 type = TREE_VEC_ELT (expanded_types, i);
11018 DECL_NAME (r)
11019 = make_ith_pack_parameter_name (DECL_NAME (r), i);
11021 else if (!type)
11022 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11024 if (type == error_mark_node)
11025 RETURN (error_mark_node);
11026 TREE_TYPE (r) = type;
11027 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
11029 if (DECL_C_BIT_FIELD (r))
11030 /* For bit-fields, DECL_INITIAL gives the number of bits. For
11031 non-bit-fields DECL_INITIAL is a non-static data member
11032 initializer, which gets deferred instantiation. */
11033 DECL_INITIAL (r)
11034 = tsubst_expr (DECL_INITIAL (t), args,
11035 complain, in_decl,
11036 /*integral_constant_expression_p=*/true);
11037 else if (DECL_INITIAL (t))
11039 /* Set up DECL_TEMPLATE_INFO so that we can get at the
11040 NSDMI in perform_member_init. Still set DECL_INITIAL
11041 so that we know there is one. */
11042 DECL_INITIAL (r) = void_node;
11043 gcc_assert (DECL_LANG_SPECIFIC (r) == NULL);
11044 retrofit_lang_decl (r);
11045 DECL_TEMPLATE_INFO (r) = build_template_info (t, args);
11047 /* We don't have to set DECL_CONTEXT here; it is set by
11048 finish_member_declaration. */
11049 DECL_CHAIN (r) = NULL_TREE;
11051 apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
11052 args, complain, in_decl);
11054 if (vec)
11055 TREE_VEC_ELT (vec, i) = r;
11058 if (vec)
11060 r = vec;
11061 tree pack = make_node (NONTYPE_ARGUMENT_PACK);
11062 tree tpack = cxx_make_type (TYPE_ARGUMENT_PACK);
11063 SET_ARGUMENT_PACK_ARGS (pack, vec);
11064 SET_ARGUMENT_PACK_ARGS (tpack, expanded_types);
11065 TREE_TYPE (pack) = tpack;
11066 register_specialization (pack, t, args, false, 0);
11069 break;
11071 case USING_DECL:
11072 /* We reach here only for member using decls. We also need to check
11073 uses_template_parms because DECL_DEPENDENT_P is not set for a
11074 using-declaration that designates a member of the current
11075 instantiation (c++/53549). */
11076 if (DECL_DEPENDENT_P (t)
11077 || uses_template_parms (USING_DECL_SCOPE (t)))
11079 tree inst_scope = tsubst_copy (USING_DECL_SCOPE (t), args,
11080 complain, in_decl);
11081 tree name = tsubst_copy (DECL_NAME (t), args, complain, in_decl);
11082 r = do_class_using_decl (inst_scope, name);
11083 if (!r)
11084 r = error_mark_node;
11085 else
11087 TREE_PROTECTED (r) = TREE_PROTECTED (t);
11088 TREE_PRIVATE (r) = TREE_PRIVATE (t);
11091 else
11093 r = copy_node (t);
11094 DECL_CHAIN (r) = NULL_TREE;
11096 break;
11098 case TYPE_DECL:
11099 case VAR_DECL:
11101 tree argvec = NULL_TREE;
11102 tree gen_tmpl = NULL_TREE;
11103 tree spec;
11104 tree tmpl = NULL_TREE;
11105 tree ctx;
11106 tree type = NULL_TREE;
11107 bool local_p;
11109 if (TREE_TYPE (t) == error_mark_node)
11110 RETURN (error_mark_node);
11112 if (TREE_CODE (t) == TYPE_DECL
11113 && t == TYPE_MAIN_DECL (TREE_TYPE (t)))
11115 /* If this is the canonical decl, we don't have to
11116 mess with instantiations, and often we can't (for
11117 typename, template type parms and such). Note that
11118 TYPE_NAME is not correct for the above test if
11119 we've copied the type for a typedef. */
11120 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11121 if (type == error_mark_node)
11122 RETURN (error_mark_node);
11123 r = TYPE_NAME (type);
11124 break;
11127 /* Check to see if we already have the specialization we
11128 need. */
11129 spec = NULL_TREE;
11130 if (DECL_CLASS_SCOPE_P (t) || DECL_NAMESPACE_SCOPE_P (t))
11132 /* T is a static data member or namespace-scope entity.
11133 We have to substitute into namespace-scope variables
11134 (even though such entities are never templates) because
11135 of cases like:
11137 template <class T> void f() { extern T t; }
11139 where the entity referenced is not known until
11140 instantiation time. */
11141 local_p = false;
11142 ctx = DECL_CONTEXT (t);
11143 if (DECL_CLASS_SCOPE_P (t))
11145 ctx = tsubst_aggr_type (ctx, args,
11146 complain,
11147 in_decl, /*entering_scope=*/1);
11148 /* If CTX is unchanged, then T is in fact the
11149 specialization we want. That situation occurs when
11150 referencing a static data member within in its own
11151 class. We can use pointer equality, rather than
11152 same_type_p, because DECL_CONTEXT is always
11153 canonical... */
11154 if (ctx == DECL_CONTEXT (t)
11155 /* ... unless T is a member template; in which
11156 case our caller can be willing to create a
11157 specialization of that template represented
11158 by T. */
11159 && !(DECL_TI_TEMPLATE (t)
11160 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (t))))
11161 spec = t;
11164 if (!spec)
11166 tmpl = DECL_TI_TEMPLATE (t);
11167 gen_tmpl = most_general_template (tmpl);
11168 argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
11169 if (argvec == error_mark_node)
11170 RETURN (error_mark_node);
11171 hash = hash_tmpl_and_args (gen_tmpl, argvec);
11172 spec = retrieve_specialization (gen_tmpl, argvec, hash);
11175 else
11177 /* A local variable. */
11178 local_p = true;
11179 /* Subsequent calls to pushdecl will fill this in. */
11180 ctx = NULL_TREE;
11181 spec = retrieve_local_specialization (t);
11183 /* If we already have the specialization we need, there is
11184 nothing more to do. */
11185 if (spec)
11187 r = spec;
11188 break;
11191 /* Create a new node for the specialization we need. */
11192 r = copy_decl (t);
11193 if (type == NULL_TREE)
11195 if (is_typedef_decl (t))
11196 type = DECL_ORIGINAL_TYPE (t);
11197 else
11198 type = TREE_TYPE (t);
11199 if (VAR_P (t)
11200 && VAR_HAD_UNKNOWN_BOUND (t)
11201 && type != error_mark_node)
11202 type = strip_array_domain (type);
11203 type = tsubst (type, args, complain, in_decl);
11205 if (VAR_P (r))
11207 /* Even if the original location is out of scope, the
11208 newly substituted one is not. */
11209 DECL_DEAD_FOR_LOCAL (r) = 0;
11210 DECL_INITIALIZED_P (r) = 0;
11211 DECL_TEMPLATE_INSTANTIATED (r) = 0;
11212 if (type == error_mark_node)
11213 RETURN (error_mark_node);
11214 if (TREE_CODE (type) == FUNCTION_TYPE)
11216 /* It may seem that this case cannot occur, since:
11218 typedef void f();
11219 void g() { f x; }
11221 declares a function, not a variable. However:
11223 typedef void f();
11224 template <typename T> void g() { T t; }
11225 template void g<f>();
11227 is an attempt to declare a variable with function
11228 type. */
11229 error ("variable %qD has function type",
11230 /* R is not yet sufficiently initialized, so we
11231 just use its name. */
11232 DECL_NAME (r));
11233 RETURN (error_mark_node);
11235 type = complete_type (type);
11236 /* Wait until cp_finish_decl to set this again, to handle
11237 circular dependency (template/instantiate6.C). */
11238 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r) = 0;
11239 type = check_var_type (DECL_NAME (r), type);
11241 if (DECL_HAS_VALUE_EXPR_P (t))
11243 tree ve = DECL_VALUE_EXPR (t);
11244 ve = tsubst_expr (ve, args, complain, in_decl,
11245 /*constant_expression_p=*/false);
11246 if (REFERENCE_REF_P (ve))
11248 gcc_assert (TREE_CODE (type) == REFERENCE_TYPE);
11249 ve = TREE_OPERAND (ve, 0);
11251 SET_DECL_VALUE_EXPR (r, ve);
11253 if (TREE_STATIC (r) || DECL_EXTERNAL (r))
11254 set_decl_tls_model (r, decl_tls_model (t));
11256 else if (DECL_SELF_REFERENCE_P (t))
11257 SET_DECL_SELF_REFERENCE_P (r);
11258 TREE_TYPE (r) = type;
11259 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
11260 DECL_CONTEXT (r) = ctx;
11261 /* Clear out the mangled name and RTL for the instantiation. */
11262 SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
11263 if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
11264 SET_DECL_RTL (r, NULL);
11265 /* The initializer must not be expanded until it is required;
11266 see [temp.inst]. */
11267 DECL_INITIAL (r) = NULL_TREE;
11268 if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
11269 SET_DECL_RTL (r, NULL);
11270 DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
11271 if (VAR_P (r))
11273 /* Possibly limit visibility based on template args. */
11274 DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
11275 if (DECL_VISIBILITY_SPECIFIED (t))
11277 DECL_VISIBILITY_SPECIFIED (r) = 0;
11278 DECL_ATTRIBUTES (r)
11279 = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
11281 determine_visibility (r);
11284 if (!local_p)
11286 /* A static data member declaration is always marked
11287 external when it is declared in-class, even if an
11288 initializer is present. We mimic the non-template
11289 processing here. */
11290 DECL_EXTERNAL (r) = 1;
11292 register_specialization (r, gen_tmpl, argvec, false, hash);
11293 DECL_TEMPLATE_INFO (r) = build_template_info (tmpl, argvec);
11294 SET_DECL_IMPLICIT_INSTANTIATION (r);
11296 else if (!cp_unevaluated_operand)
11297 register_local_specialization (r, t);
11299 DECL_CHAIN (r) = NULL_TREE;
11301 apply_late_template_attributes (&r, DECL_ATTRIBUTES (r),
11302 /*flags=*/0,
11303 args, complain, in_decl);
11305 /* Preserve a typedef that names a type. */
11306 if (is_typedef_decl (r))
11308 DECL_ORIGINAL_TYPE (r) = NULL_TREE;
11309 set_underlying_type (r);
11312 layout_decl (r, 0);
11314 break;
11316 default:
11317 gcc_unreachable ();
11319 #undef RETURN
11321 out:
11322 /* Restore the file and line information. */
11323 input_location = saved_loc;
11325 return r;
11328 /* Substitute into the ARG_TYPES of a function type.
11329 If END is a TREE_CHAIN, leave it and any following types
11330 un-substituted. */
11332 static tree
11333 tsubst_arg_types (tree arg_types,
11334 tree args,
11335 tree end,
11336 tsubst_flags_t complain,
11337 tree in_decl)
11339 tree remaining_arg_types;
11340 tree type = NULL_TREE;
11341 int i = 1;
11342 tree expanded_args = NULL_TREE;
11343 tree default_arg;
11345 if (!arg_types || arg_types == void_list_node || arg_types == end)
11346 return arg_types;
11348 remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
11349 args, end, complain, in_decl);
11350 if (remaining_arg_types == error_mark_node)
11351 return error_mark_node;
11353 if (PACK_EXPANSION_P (TREE_VALUE (arg_types)))
11355 /* For a pack expansion, perform substitution on the
11356 entire expression. Later on, we'll handle the arguments
11357 one-by-one. */
11358 expanded_args = tsubst_pack_expansion (TREE_VALUE (arg_types),
11359 args, complain, in_decl);
11361 if (TREE_CODE (expanded_args) == TREE_VEC)
11362 /* So that we'll spin through the parameters, one by one. */
11363 i = TREE_VEC_LENGTH (expanded_args);
11364 else
11366 /* We only partially substituted into the parameter
11367 pack. Our type is TYPE_PACK_EXPANSION. */
11368 type = expanded_args;
11369 expanded_args = NULL_TREE;
11373 while (i > 0) {
11374 --i;
11376 if (expanded_args)
11377 type = TREE_VEC_ELT (expanded_args, i);
11378 else if (!type)
11379 type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
11381 if (type == error_mark_node)
11382 return error_mark_node;
11383 if (VOID_TYPE_P (type))
11385 if (complain & tf_error)
11387 error ("invalid parameter type %qT", type);
11388 if (in_decl)
11389 error ("in declaration %q+D", in_decl);
11391 return error_mark_node;
11393 /* DR 657. */
11394 if (abstract_virtuals_error_sfinae (ACU_PARM, type, complain))
11395 return error_mark_node;
11397 /* Do array-to-pointer, function-to-pointer conversion, and ignore
11398 top-level qualifiers as required. */
11399 type = cv_unqualified (type_decays_to (type));
11401 /* We do not substitute into default arguments here. The standard
11402 mandates that they be instantiated only when needed, which is
11403 done in build_over_call. */
11404 default_arg = TREE_PURPOSE (arg_types);
11406 if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
11408 /* We've instantiated a template before its default arguments
11409 have been parsed. This can happen for a nested template
11410 class, and is not an error unless we require the default
11411 argument in a call of this function. */
11412 remaining_arg_types =
11413 tree_cons (default_arg, type, remaining_arg_types);
11414 vec_safe_push (DEFARG_INSTANTIATIONS(default_arg), remaining_arg_types);
11416 else
11417 remaining_arg_types =
11418 hash_tree_cons (default_arg, type, remaining_arg_types);
11421 return remaining_arg_types;
11424 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE. This routine does
11425 *not* handle the exception-specification for FNTYPE, because the
11426 initial substitution of explicitly provided template parameters
11427 during argument deduction forbids substitution into the
11428 exception-specification:
11430 [temp.deduct]
11432 All references in the function type of the function template to the
11433 corresponding template parameters are replaced by the specified tem-
11434 plate argument values. If a substitution in a template parameter or
11435 in the function type of the function template results in an invalid
11436 type, type deduction fails. [Note: The equivalent substitution in
11437 exception specifications is done only when the function is instanti-
11438 ated, at which point a program is ill-formed if the substitution
11439 results in an invalid type.] */
11441 static tree
11442 tsubst_function_type (tree t,
11443 tree args,
11444 tsubst_flags_t complain,
11445 tree in_decl)
11447 tree return_type;
11448 tree arg_types = NULL_TREE;
11449 tree fntype;
11451 /* The TYPE_CONTEXT is not used for function/method types. */
11452 gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
11454 /* DR 1227: Mixing immediate and non-immediate contexts in deduction
11455 failure. */
11456 bool late_return_type_p = TYPE_HAS_LATE_RETURN_TYPE (t);
11458 if (late_return_type_p)
11460 /* Substitute the argument types. */
11461 arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args, NULL_TREE,
11462 complain, in_decl);
11463 if (arg_types == error_mark_node)
11464 return error_mark_node;
11466 tree save_ccp = current_class_ptr;
11467 tree save_ccr = current_class_ref;
11468 tree this_type = (TREE_CODE (t) == METHOD_TYPE
11469 ? TREE_TYPE (TREE_VALUE (arg_types)) : NULL_TREE);
11470 bool do_inject = this_type && CLASS_TYPE_P (this_type);
11471 if (do_inject)
11473 /* DR 1207: 'this' is in scope in the trailing return type. */
11474 inject_this_parameter (this_type, cp_type_quals (this_type));
11477 /* Substitute the return type. */
11478 return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11480 if (do_inject)
11482 current_class_ptr = save_ccp;
11483 current_class_ref = save_ccr;
11486 else
11487 /* Substitute the return type. */
11488 return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11490 if (return_type == error_mark_node)
11491 return error_mark_node;
11492 /* DR 486 clarifies that creation of a function type with an
11493 invalid return type is a deduction failure. */
11494 if (TREE_CODE (return_type) == ARRAY_TYPE
11495 || TREE_CODE (return_type) == FUNCTION_TYPE)
11497 if (complain & tf_error)
11499 if (TREE_CODE (return_type) == ARRAY_TYPE)
11500 error ("function returning an array");
11501 else
11502 error ("function returning a function");
11504 return error_mark_node;
11506 /* And DR 657. */
11507 if (abstract_virtuals_error_sfinae (ACU_RETURN, return_type, complain))
11508 return error_mark_node;
11510 if (!late_return_type_p)
11512 /* Substitute the argument types. */
11513 arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args, NULL_TREE,
11514 complain, in_decl);
11515 if (arg_types == error_mark_node)
11516 return error_mark_node;
11519 /* Construct a new type node and return it. */
11520 if (TREE_CODE (t) == FUNCTION_TYPE)
11522 fntype = build_function_type (return_type, arg_types);
11523 fntype = apply_memfn_quals (fntype,
11524 type_memfn_quals (t),
11525 type_memfn_rqual (t));
11527 else
11529 tree r = TREE_TYPE (TREE_VALUE (arg_types));
11530 /* Don't pick up extra function qualifiers from the basetype. */
11531 r = cp_build_qualified_type_real (r, type_memfn_quals (t), complain);
11532 if (! MAYBE_CLASS_TYPE_P (r))
11534 /* [temp.deduct]
11536 Type deduction may fail for any of the following
11537 reasons:
11539 -- Attempting to create "pointer to member of T" when T
11540 is not a class type. */
11541 if (complain & tf_error)
11542 error ("creating pointer to member function of non-class type %qT",
11544 return error_mark_node;
11547 fntype = build_method_type_directly (r, return_type,
11548 TREE_CHAIN (arg_types));
11549 fntype = build_ref_qualified_type (fntype, type_memfn_rqual (t));
11551 fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
11553 if (late_return_type_p)
11554 TYPE_HAS_LATE_RETURN_TYPE (fntype) = 1;
11556 return fntype;
11559 /* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE. Substitute the template
11560 ARGS into that specification, and return the substituted
11561 specification. If there is no specification, return NULL_TREE. */
11563 static tree
11564 tsubst_exception_specification (tree fntype,
11565 tree args,
11566 tsubst_flags_t complain,
11567 tree in_decl,
11568 bool defer_ok)
11570 tree specs;
11571 tree new_specs;
11573 specs = TYPE_RAISES_EXCEPTIONS (fntype);
11574 new_specs = NULL_TREE;
11575 if (specs && TREE_PURPOSE (specs))
11577 /* A noexcept-specifier. */
11578 tree expr = TREE_PURPOSE (specs);
11579 if (TREE_CODE (expr) == INTEGER_CST)
11580 new_specs = expr;
11581 else if (defer_ok)
11583 /* Defer instantiation of noexcept-specifiers to avoid
11584 excessive instantiations (c++/49107). */
11585 new_specs = make_node (DEFERRED_NOEXCEPT);
11586 if (DEFERRED_NOEXCEPT_SPEC_P (specs))
11588 /* We already partially instantiated this member template,
11589 so combine the new args with the old. */
11590 DEFERRED_NOEXCEPT_PATTERN (new_specs)
11591 = DEFERRED_NOEXCEPT_PATTERN (expr);
11592 DEFERRED_NOEXCEPT_ARGS (new_specs)
11593 = add_to_template_args (DEFERRED_NOEXCEPT_ARGS (expr), args);
11595 else
11597 DEFERRED_NOEXCEPT_PATTERN (new_specs) = expr;
11598 DEFERRED_NOEXCEPT_ARGS (new_specs) = args;
11601 else
11602 new_specs = tsubst_copy_and_build
11603 (expr, args, complain, in_decl, /*function_p=*/false,
11604 /*integral_constant_expression_p=*/true);
11605 new_specs = build_noexcept_spec (new_specs, complain);
11607 else if (specs)
11609 if (! TREE_VALUE (specs))
11610 new_specs = specs;
11611 else
11612 while (specs)
11614 tree spec;
11615 int i, len = 1;
11616 tree expanded_specs = NULL_TREE;
11618 if (PACK_EXPANSION_P (TREE_VALUE (specs)))
11620 /* Expand the pack expansion type. */
11621 expanded_specs = tsubst_pack_expansion (TREE_VALUE (specs),
11622 args, complain,
11623 in_decl);
11625 if (expanded_specs == error_mark_node)
11626 return error_mark_node;
11627 else if (TREE_CODE (expanded_specs) == TREE_VEC)
11628 len = TREE_VEC_LENGTH (expanded_specs);
11629 else
11631 /* We're substituting into a member template, so
11632 we got a TYPE_PACK_EXPANSION back. Add that
11633 expansion and move on. */
11634 gcc_assert (TREE_CODE (expanded_specs)
11635 == TYPE_PACK_EXPANSION);
11636 new_specs = add_exception_specifier (new_specs,
11637 expanded_specs,
11638 complain);
11639 specs = TREE_CHAIN (specs);
11640 continue;
11644 for (i = 0; i < len; ++i)
11646 if (expanded_specs)
11647 spec = TREE_VEC_ELT (expanded_specs, i);
11648 else
11649 spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
11650 if (spec == error_mark_node)
11651 return spec;
11652 new_specs = add_exception_specifier (new_specs, spec,
11653 complain);
11656 specs = TREE_CHAIN (specs);
11659 return new_specs;
11662 /* Take the tree structure T and replace template parameters used
11663 therein with the argument vector ARGS. IN_DECL is an associated
11664 decl for diagnostics. If an error occurs, returns ERROR_MARK_NODE.
11665 Issue error and warning messages under control of COMPLAIN. Note
11666 that we must be relatively non-tolerant of extensions here, in
11667 order to preserve conformance; if we allow substitutions that
11668 should not be allowed, we may allow argument deductions that should
11669 not succeed, and therefore report ambiguous overload situations
11670 where there are none. In theory, we could allow the substitution,
11671 but indicate that it should have failed, and allow our caller to
11672 make sure that the right thing happens, but we don't try to do this
11673 yet.
11675 This function is used for dealing with types, decls and the like;
11676 for expressions, use tsubst_expr or tsubst_copy. */
11678 tree
11679 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
11681 enum tree_code code;
11682 tree type, r = NULL_TREE;
11684 if (t == NULL_TREE || t == error_mark_node
11685 || t == integer_type_node
11686 || t == void_type_node
11687 || t == char_type_node
11688 || t == unknown_type_node
11689 || TREE_CODE (t) == NAMESPACE_DECL
11690 || TREE_CODE (t) == TRANSLATION_UNIT_DECL)
11691 return t;
11693 if (DECL_P (t))
11694 return tsubst_decl (t, args, complain);
11696 if (args == NULL_TREE)
11697 return t;
11699 code = TREE_CODE (t);
11701 if (code == IDENTIFIER_NODE)
11702 type = IDENTIFIER_TYPE_VALUE (t);
11703 else
11704 type = TREE_TYPE (t);
11706 gcc_assert (type != unknown_type_node);
11708 /* Reuse typedefs. We need to do this to handle dependent attributes,
11709 such as attribute aligned. */
11710 if (TYPE_P (t)
11711 && typedef_variant_p (t))
11713 tree decl = TYPE_NAME (t);
11715 if (alias_template_specialization_p (t))
11717 /* DECL represents an alias template and we want to
11718 instantiate it. */
11719 tree tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
11720 tree gen_args = tsubst (DECL_TI_ARGS (decl), args, complain, in_decl);
11721 r = instantiate_alias_template (tmpl, gen_args, complain);
11723 else if (DECL_CLASS_SCOPE_P (decl)
11724 && CLASSTYPE_TEMPLATE_INFO (DECL_CONTEXT (decl))
11725 && uses_template_parms (DECL_CONTEXT (decl)))
11727 tree tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
11728 tree gen_args = tsubst (DECL_TI_ARGS (decl), args, complain, in_decl);
11729 r = retrieve_specialization (tmpl, gen_args, 0);
11731 else if (DECL_FUNCTION_SCOPE_P (decl)
11732 && DECL_TEMPLATE_INFO (DECL_CONTEXT (decl))
11733 && uses_template_parms (DECL_TI_ARGS (DECL_CONTEXT (decl))))
11734 r = retrieve_local_specialization (decl);
11735 else
11736 /* The typedef is from a non-template context. */
11737 return t;
11739 if (r)
11741 r = TREE_TYPE (r);
11742 r = cp_build_qualified_type_real
11743 (r, cp_type_quals (t) | cp_type_quals (r),
11744 complain | tf_ignore_bad_quals);
11745 return r;
11747 else
11749 /* We don't have an instantiation yet, so drop the typedef. */
11750 int quals = cp_type_quals (t);
11751 t = DECL_ORIGINAL_TYPE (decl);
11752 t = cp_build_qualified_type_real (t, quals,
11753 complain | tf_ignore_bad_quals);
11757 if (type
11758 && code != TYPENAME_TYPE
11759 && code != TEMPLATE_TYPE_PARM
11760 && code != IDENTIFIER_NODE
11761 && code != FUNCTION_TYPE
11762 && code != METHOD_TYPE)
11763 type = tsubst (type, args, complain, in_decl);
11764 if (type == error_mark_node)
11765 return error_mark_node;
11767 switch (code)
11769 case RECORD_TYPE:
11770 case UNION_TYPE:
11771 case ENUMERAL_TYPE:
11772 return tsubst_aggr_type (t, args, complain, in_decl,
11773 /*entering_scope=*/0);
11775 case ERROR_MARK:
11776 case IDENTIFIER_NODE:
11777 case VOID_TYPE:
11778 case REAL_TYPE:
11779 case COMPLEX_TYPE:
11780 case VECTOR_TYPE:
11781 case BOOLEAN_TYPE:
11782 case NULLPTR_TYPE:
11783 case LANG_TYPE:
11784 return t;
11786 case INTEGER_TYPE:
11787 if (t == integer_type_node)
11788 return t;
11790 if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
11791 && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
11792 return t;
11795 tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
11797 max = tsubst_expr (omax, args, complain, in_decl,
11798 /*integral_constant_expression_p=*/false);
11800 /* Fix up type of the magic NOP_EXPR with TREE_SIDE_EFFECTS if
11801 needed. */
11802 if (TREE_CODE (max) == NOP_EXPR
11803 && TREE_SIDE_EFFECTS (omax)
11804 && !TREE_TYPE (max))
11805 TREE_TYPE (max) = TREE_TYPE (TREE_OPERAND (max, 0));
11807 /* If we're in a partial instantiation, preserve the magic NOP_EXPR
11808 with TREE_SIDE_EFFECTS that indicates this is not an integral
11809 constant expression. */
11810 if (processing_template_decl
11811 && TREE_SIDE_EFFECTS (omax) && TREE_CODE (omax) == NOP_EXPR)
11813 gcc_assert (TREE_CODE (max) == NOP_EXPR);
11814 TREE_SIDE_EFFECTS (max) = 1;
11817 return compute_array_index_type (NULL_TREE, max, complain);
11820 case TEMPLATE_TYPE_PARM:
11821 case TEMPLATE_TEMPLATE_PARM:
11822 case BOUND_TEMPLATE_TEMPLATE_PARM:
11823 case TEMPLATE_PARM_INDEX:
11825 int idx;
11826 int level;
11827 int levels;
11828 tree arg = NULL_TREE;
11830 r = NULL_TREE;
11832 gcc_assert (TREE_VEC_LENGTH (args) > 0);
11833 template_parm_level_and_index (t, &level, &idx);
11835 levels = TMPL_ARGS_DEPTH (args);
11836 if (level <= levels)
11838 arg = TMPL_ARG (args, level, idx);
11840 if (arg && TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
11842 /* See through ARGUMENT_PACK_SELECT arguments. */
11843 arg = ARGUMENT_PACK_SELECT_ARG (arg);
11844 /* If the selected argument is an expansion E, that most
11845 likely means we were called from
11846 gen_elem_of_pack_expansion_instantiation during the
11847 substituting of pack an argument pack (which Ith
11848 element is a pack expansion, where I is
11849 ARGUMENT_PACK_SELECT_INDEX) into a pack expansion.
11850 In this case, the Ith element resulting from this
11851 substituting is going to be a pack expansion, which
11852 pattern is the pattern of E. Let's return the
11853 pattern of E, and
11854 gen_elem_of_pack_expansion_instantiation will
11855 build the resulting pack expansion from it. */
11856 if (PACK_EXPANSION_P (arg))
11858 /* Make sure we aren't throwing away arg info. */
11859 gcc_assert (!PACK_EXPANSION_EXTRA_ARGS (arg));
11860 arg = PACK_EXPANSION_PATTERN (arg);
11865 if (arg == error_mark_node)
11866 return error_mark_node;
11867 else if (arg != NULL_TREE)
11869 if (ARGUMENT_PACK_P (arg))
11870 /* If ARG is an argument pack, we don't actually want to
11871 perform a substitution here, because substitutions
11872 for argument packs are only done
11873 element-by-element. We can get to this point when
11874 substituting the type of a non-type template
11875 parameter pack, when that type actually contains
11876 template parameter packs from an outer template, e.g.,
11878 template<typename... Types> struct A {
11879 template<Types... Values> struct B { };
11880 }; */
11881 return t;
11883 if (code == TEMPLATE_TYPE_PARM)
11885 int quals;
11886 gcc_assert (TYPE_P (arg));
11888 quals = cp_type_quals (arg) | cp_type_quals (t);
11890 return cp_build_qualified_type_real
11891 (arg, quals, complain | tf_ignore_bad_quals);
11893 else if (code == BOUND_TEMPLATE_TEMPLATE_PARM)
11895 /* We are processing a type constructed from a
11896 template template parameter. */
11897 tree argvec = tsubst (TYPE_TI_ARGS (t),
11898 args, complain, in_decl);
11899 if (argvec == error_mark_node)
11900 return error_mark_node;
11902 gcc_assert (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
11903 || TREE_CODE (arg) == TEMPLATE_DECL
11904 || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
11906 if (TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE)
11907 /* Consider this code:
11909 template <template <class> class Template>
11910 struct Internal {
11911 template <class Arg> using Bind = Template<Arg>;
11914 template <template <class> class Template, class Arg>
11915 using Instantiate = Template<Arg>; //#0
11917 template <template <class> class Template,
11918 class Argument>
11919 using Bind =
11920 Instantiate<Internal<Template>::template Bind,
11921 Argument>; //#1
11923 When #1 is parsed, the
11924 BOUND_TEMPLATE_TEMPLATE_PARM representing the
11925 parameter `Template' in #0 matches the
11926 UNBOUND_CLASS_TEMPLATE representing the argument
11927 `Internal<Template>::template Bind'; We then want
11928 to assemble the type `Bind<Argument>' that can't
11929 be fully created right now, because
11930 `Internal<Template>' not being complete, the Bind
11931 template cannot be looked up in that context. So
11932 we need to "store" `Bind<Argument>' for later
11933 when the context of Bind becomes complete. Let's
11934 store that in a TYPENAME_TYPE. */
11935 return make_typename_type (TYPE_CONTEXT (arg),
11936 build_nt (TEMPLATE_ID_EXPR,
11937 TYPE_IDENTIFIER (arg),
11938 argvec),
11939 typename_type,
11940 complain);
11942 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
11943 are resolving nested-types in the signature of a
11944 member function templates. Otherwise ARG is a
11945 TEMPLATE_DECL and is the real template to be
11946 instantiated. */
11947 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
11948 arg = TYPE_NAME (arg);
11950 r = lookup_template_class (arg,
11951 argvec, in_decl,
11952 DECL_CONTEXT (arg),
11953 /*entering_scope=*/0,
11954 complain);
11955 return cp_build_qualified_type_real
11956 (r, cp_type_quals (t) | cp_type_quals (r), complain);
11958 else
11959 /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX. */
11960 return convert_from_reference (unshare_expr (arg));
11963 if (level == 1)
11964 /* This can happen during the attempted tsubst'ing in
11965 unify. This means that we don't yet have any information
11966 about the template parameter in question. */
11967 return t;
11969 /* Early in template argument deduction substitution, we don't
11970 want to reduce the level of 'auto', or it will be confused
11971 with a normal template parm in subsequent deduction. */
11972 if (is_auto (t) && (complain & tf_partial))
11973 return t;
11975 /* If we get here, we must have been looking at a parm for a
11976 more deeply nested template. Make a new version of this
11977 template parameter, but with a lower level. */
11978 switch (code)
11980 case TEMPLATE_TYPE_PARM:
11981 case TEMPLATE_TEMPLATE_PARM:
11982 case BOUND_TEMPLATE_TEMPLATE_PARM:
11983 if (cp_type_quals (t))
11985 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
11986 r = cp_build_qualified_type_real
11987 (r, cp_type_quals (t),
11988 complain | (code == TEMPLATE_TYPE_PARM
11989 ? tf_ignore_bad_quals : 0));
11991 else
11993 r = copy_type (t);
11994 TEMPLATE_TYPE_PARM_INDEX (r)
11995 = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
11996 r, levels, args, complain);
11997 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
11998 TYPE_MAIN_VARIANT (r) = r;
11999 TYPE_POINTER_TO (r) = NULL_TREE;
12000 TYPE_REFERENCE_TO (r) = NULL_TREE;
12002 if (TREE_CODE (r) == TEMPLATE_TEMPLATE_PARM)
12003 /* We have reduced the level of the template
12004 template parameter, but not the levels of its
12005 template parameters, so canonical_type_parameter
12006 will not be able to find the canonical template
12007 template parameter for this level. Thus, we
12008 require structural equality checking to compare
12009 TEMPLATE_TEMPLATE_PARMs. */
12010 SET_TYPE_STRUCTURAL_EQUALITY (r);
12011 else if (TYPE_STRUCTURAL_EQUALITY_P (t))
12012 SET_TYPE_STRUCTURAL_EQUALITY (r);
12013 else
12014 TYPE_CANONICAL (r) = canonical_type_parameter (r);
12016 if (code == BOUND_TEMPLATE_TEMPLATE_PARM)
12018 tree argvec = tsubst (TYPE_TI_ARGS (t), args,
12019 complain, in_decl);
12020 if (argvec == error_mark_node)
12021 return error_mark_node;
12023 TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
12024 = build_template_info (TYPE_TI_TEMPLATE (t), argvec);
12027 break;
12029 case TEMPLATE_PARM_INDEX:
12030 r = reduce_template_parm_level (t, type, levels, args, complain);
12031 break;
12033 default:
12034 gcc_unreachable ();
12037 return r;
12040 case TREE_LIST:
12042 tree purpose, value, chain;
12044 if (t == void_list_node)
12045 return t;
12047 purpose = TREE_PURPOSE (t);
12048 if (purpose)
12050 purpose = tsubst (purpose, args, complain, in_decl);
12051 if (purpose == error_mark_node)
12052 return error_mark_node;
12054 value = TREE_VALUE (t);
12055 if (value)
12057 value = tsubst (value, args, complain, in_decl);
12058 if (value == error_mark_node)
12059 return error_mark_node;
12061 chain = TREE_CHAIN (t);
12062 if (chain && chain != void_type_node)
12064 chain = tsubst (chain, args, complain, in_decl);
12065 if (chain == error_mark_node)
12066 return error_mark_node;
12068 if (purpose == TREE_PURPOSE (t)
12069 && value == TREE_VALUE (t)
12070 && chain == TREE_CHAIN (t))
12071 return t;
12072 return hash_tree_cons (purpose, value, chain);
12075 case TREE_BINFO:
12076 /* We should never be tsubsting a binfo. */
12077 gcc_unreachable ();
12079 case TREE_VEC:
12080 /* A vector of template arguments. */
12081 gcc_assert (!type);
12082 return tsubst_template_args (t, args, complain, in_decl);
12084 case POINTER_TYPE:
12085 case REFERENCE_TYPE:
12087 if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
12088 return t;
12090 /* [temp.deduct]
12092 Type deduction may fail for any of the following
12093 reasons:
12095 -- Attempting to create a pointer to reference type.
12096 -- Attempting to create a reference to a reference type or
12097 a reference to void.
12099 Core issue 106 says that creating a reference to a reference
12100 during instantiation is no longer a cause for failure. We
12101 only enforce this check in strict C++98 mode. */
12102 if ((TREE_CODE (type) == REFERENCE_TYPE
12103 && (((cxx_dialect == cxx98) && flag_iso) || code != REFERENCE_TYPE))
12104 || (code == REFERENCE_TYPE && VOID_TYPE_P (type)))
12106 static location_t last_loc;
12108 /* We keep track of the last time we issued this error
12109 message to avoid spewing a ton of messages during a
12110 single bad template instantiation. */
12111 if (complain & tf_error
12112 && last_loc != input_location)
12114 if (VOID_TYPE_P (type))
12115 error ("forming reference to void");
12116 else if (code == POINTER_TYPE)
12117 error ("forming pointer to reference type %qT", type);
12118 else
12119 error ("forming reference to reference type %qT", type);
12120 last_loc = input_location;
12123 return error_mark_node;
12125 else if (TREE_CODE (type) == FUNCTION_TYPE
12126 && (type_memfn_quals (type) != TYPE_UNQUALIFIED
12127 || type_memfn_rqual (type) != REF_QUAL_NONE))
12129 if (complain & tf_error)
12131 if (code == POINTER_TYPE)
12132 error ("forming pointer to qualified function type %qT",
12133 type);
12134 else
12135 error ("forming reference to qualified function type %qT",
12136 type);
12138 return error_mark_node;
12140 else if (code == POINTER_TYPE)
12142 r = build_pointer_type (type);
12143 if (TREE_CODE (type) == METHOD_TYPE)
12144 r = build_ptrmemfunc_type (r);
12146 else if (TREE_CODE (type) == REFERENCE_TYPE)
12147 /* In C++0x, during template argument substitution, when there is an
12148 attempt to create a reference to a reference type, reference
12149 collapsing is applied as described in [14.3.1/4 temp.arg.type]:
12151 "If a template-argument for a template-parameter T names a type
12152 that is a reference to a type A, an attempt to create the type
12153 'lvalue reference to cv T' creates the type 'lvalue reference to
12154 A,' while an attempt to create the type type rvalue reference to
12155 cv T' creates the type T"
12157 r = cp_build_reference_type
12158 (TREE_TYPE (type),
12159 TYPE_REF_IS_RVALUE (t) && TYPE_REF_IS_RVALUE (type));
12160 else
12161 r = cp_build_reference_type (type, TYPE_REF_IS_RVALUE (t));
12162 r = cp_build_qualified_type_real (r, cp_type_quals (t), complain);
12164 if (cxx_dialect >= cxx14
12165 && !(TREE_CODE (t) == REFERENCE_TYPE && REFERENCE_VLA_OK (t))
12166 && array_of_runtime_bound_p (type)
12167 && (flag_iso || warn_vla > 0))
12169 if (complain & tf_warning_or_error)
12170 pedwarn
12171 (input_location, OPT_Wvla,
12172 code == REFERENCE_TYPE
12173 ? G_("cannot declare reference to array of runtime bound")
12174 : G_("cannot declare pointer to array of runtime bound"));
12175 else
12176 r = error_mark_node;
12179 if (r != error_mark_node)
12180 /* Will this ever be needed for TYPE_..._TO values? */
12181 layout_type (r);
12183 return r;
12185 case OFFSET_TYPE:
12187 r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
12188 if (r == error_mark_node || !MAYBE_CLASS_TYPE_P (r))
12190 /* [temp.deduct]
12192 Type deduction may fail for any of the following
12193 reasons:
12195 -- Attempting to create "pointer to member of T" when T
12196 is not a class type. */
12197 if (complain & tf_error)
12198 error ("creating pointer to member of non-class type %qT", r);
12199 return error_mark_node;
12201 if (TREE_CODE (type) == REFERENCE_TYPE)
12203 if (complain & tf_error)
12204 error ("creating pointer to member reference type %qT", type);
12205 return error_mark_node;
12207 if (VOID_TYPE_P (type))
12209 if (complain & tf_error)
12210 error ("creating pointer to member of type void");
12211 return error_mark_node;
12213 gcc_assert (TREE_CODE (type) != METHOD_TYPE);
12214 if (TREE_CODE (type) == FUNCTION_TYPE)
12216 /* The type of the implicit object parameter gets its
12217 cv-qualifiers from the FUNCTION_TYPE. */
12218 tree memptr;
12219 tree method_type
12220 = build_memfn_type (type, r, type_memfn_quals (type),
12221 type_memfn_rqual (type));
12222 memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
12223 return cp_build_qualified_type_real (memptr, cp_type_quals (t),
12224 complain);
12226 else
12227 return cp_build_qualified_type_real (build_ptrmem_type (r, type),
12228 cp_type_quals (t),
12229 complain);
12231 case FUNCTION_TYPE:
12232 case METHOD_TYPE:
12234 tree fntype;
12235 tree specs;
12236 fntype = tsubst_function_type (t, args, complain, in_decl);
12237 if (fntype == error_mark_node)
12238 return error_mark_node;
12240 /* Substitute the exception specification. */
12241 specs = tsubst_exception_specification (t, args, complain,
12242 in_decl, /*defer_ok*/true);
12243 if (specs == error_mark_node)
12244 return error_mark_node;
12245 if (specs)
12246 fntype = build_exception_variant (fntype, specs);
12247 return fntype;
12249 case ARRAY_TYPE:
12251 tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
12252 if (domain == error_mark_node)
12253 return error_mark_node;
12255 /* As an optimization, we avoid regenerating the array type if
12256 it will obviously be the same as T. */
12257 if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
12258 return t;
12260 /* These checks should match the ones in create_array_type_for_decl.
12262 [temp.deduct]
12264 The deduction may fail for any of the following reasons:
12266 -- Attempting to create an array with an element type that
12267 is void, a function type, or a reference type, or [DR337]
12268 an abstract class type. */
12269 if (VOID_TYPE_P (type)
12270 || TREE_CODE (type) == FUNCTION_TYPE
12271 || (TREE_CODE (type) == ARRAY_TYPE
12272 && TYPE_DOMAIN (type) == NULL_TREE)
12273 || TREE_CODE (type) == REFERENCE_TYPE)
12275 if (complain & tf_error)
12276 error ("creating array of %qT", type);
12277 return error_mark_node;
12280 if (abstract_virtuals_error_sfinae (ACU_ARRAY, type, complain))
12281 return error_mark_node;
12283 r = build_cplus_array_type (type, domain);
12285 if (TYPE_USER_ALIGN (t))
12287 TYPE_ALIGN (r) = TYPE_ALIGN (t);
12288 TYPE_USER_ALIGN (r) = 1;
12291 return r;
12294 case TYPENAME_TYPE:
12296 tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
12297 in_decl, /*entering_scope=*/1);
12298 tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
12299 complain, in_decl);
12301 if (ctx == error_mark_node || f == error_mark_node)
12302 return error_mark_node;
12304 if (!MAYBE_CLASS_TYPE_P (ctx))
12306 if (complain & tf_error)
12307 error ("%qT is not a class, struct, or union type", ctx);
12308 return error_mark_node;
12310 else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
12312 /* Normally, make_typename_type does not require that the CTX
12313 have complete type in order to allow things like:
12315 template <class T> struct S { typename S<T>::X Y; };
12317 But, such constructs have already been resolved by this
12318 point, so here CTX really should have complete type, unless
12319 it's a partial instantiation. */
12320 ctx = complete_type (ctx);
12321 if (!COMPLETE_TYPE_P (ctx))
12323 if (complain & tf_error)
12324 cxx_incomplete_type_error (NULL_TREE, ctx);
12325 return error_mark_node;
12329 f = make_typename_type (ctx, f, typename_type,
12330 complain | tf_keep_type_decl);
12331 if (f == error_mark_node)
12332 return f;
12333 if (TREE_CODE (f) == TYPE_DECL)
12335 complain |= tf_ignore_bad_quals;
12336 f = TREE_TYPE (f);
12339 if (TREE_CODE (f) != TYPENAME_TYPE)
12341 if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
12343 if (complain & tf_error)
12344 error ("%qT resolves to %qT, which is not an enumeration type",
12345 t, f);
12346 else
12347 return error_mark_node;
12349 else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
12351 if (complain & tf_error)
12352 error ("%qT resolves to %qT, which is is not a class type",
12353 t, f);
12354 else
12355 return error_mark_node;
12359 return cp_build_qualified_type_real
12360 (f, cp_type_quals (f) | cp_type_quals (t), complain);
12363 case UNBOUND_CLASS_TEMPLATE:
12365 tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
12366 in_decl, /*entering_scope=*/1);
12367 tree name = TYPE_IDENTIFIER (t);
12368 tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
12370 if (ctx == error_mark_node || name == error_mark_node)
12371 return error_mark_node;
12373 if (parm_list)
12374 parm_list = tsubst_template_parms (parm_list, args, complain);
12375 return make_unbound_class_template (ctx, name, parm_list, complain);
12378 case TYPEOF_TYPE:
12380 tree type;
12382 ++cp_unevaluated_operand;
12383 ++c_inhibit_evaluation_warnings;
12385 type = tsubst_expr (TYPEOF_TYPE_EXPR (t), args,
12386 complain, in_decl,
12387 /*integral_constant_expression_p=*/false);
12389 --cp_unevaluated_operand;
12390 --c_inhibit_evaluation_warnings;
12392 type = finish_typeof (type);
12393 return cp_build_qualified_type_real (type,
12394 cp_type_quals (t)
12395 | cp_type_quals (type),
12396 complain);
12399 case DECLTYPE_TYPE:
12401 tree type;
12403 ++cp_unevaluated_operand;
12404 ++c_inhibit_evaluation_warnings;
12406 type = tsubst_copy_and_build (DECLTYPE_TYPE_EXPR (t), args,
12407 complain|tf_decltype, in_decl,
12408 /*function_p*/false,
12409 /*integral_constant_expression*/false);
12411 --cp_unevaluated_operand;
12412 --c_inhibit_evaluation_warnings;
12414 if (DECLTYPE_FOR_LAMBDA_CAPTURE (t))
12415 type = lambda_capture_field_type (type,
12416 DECLTYPE_FOR_INIT_CAPTURE (t));
12417 else if (DECLTYPE_FOR_LAMBDA_PROXY (t))
12418 type = lambda_proxy_type (type);
12419 else
12421 bool id = DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t);
12422 if (id && TREE_CODE (DECLTYPE_TYPE_EXPR (t)) == BIT_NOT_EXPR
12423 && EXPR_P (type))
12424 /* In a template ~id could be either a complement expression
12425 or an unqualified-id naming a destructor; if instantiating
12426 it produces an expression, it's not an id-expression or
12427 member access. */
12428 id = false;
12429 type = finish_decltype_type (type, id, complain);
12431 return cp_build_qualified_type_real (type,
12432 cp_type_quals (t)
12433 | cp_type_quals (type),
12434 complain);
12437 case UNDERLYING_TYPE:
12439 tree type = tsubst (UNDERLYING_TYPE_TYPE (t), args,
12440 complain, in_decl);
12441 return finish_underlying_type (type);
12444 case TYPE_ARGUMENT_PACK:
12445 case NONTYPE_ARGUMENT_PACK:
12447 tree r = TYPE_P (t) ? cxx_make_type (code) : make_node (code);
12448 tree packed_out =
12449 tsubst_template_args (ARGUMENT_PACK_ARGS (t),
12450 args,
12451 complain,
12452 in_decl);
12453 SET_ARGUMENT_PACK_ARGS (r, packed_out);
12455 /* For template nontype argument packs, also substitute into
12456 the type. */
12457 if (code == NONTYPE_ARGUMENT_PACK)
12458 TREE_TYPE (r) = tsubst (TREE_TYPE (t), args, complain, in_decl);
12460 return r;
12462 break;
12464 case VOID_CST:
12465 case INTEGER_CST:
12466 case REAL_CST:
12467 case STRING_CST:
12468 case PLUS_EXPR:
12469 case MINUS_EXPR:
12470 case NEGATE_EXPR:
12471 case NOP_EXPR:
12472 case INDIRECT_REF:
12473 case ADDR_EXPR:
12474 case CALL_EXPR:
12475 case ARRAY_REF:
12476 case SCOPE_REF:
12477 /* We should use one of the expression tsubsts for these codes. */
12478 gcc_unreachable ();
12480 default:
12481 sorry ("use of %qs in template", get_tree_code_name (code));
12482 return error_mark_node;
12486 /* Like tsubst_expr for a BASELINK. OBJECT_TYPE, if non-NULL, is the
12487 type of the expression on the left-hand side of the "." or "->"
12488 operator. */
12490 static tree
12491 tsubst_baselink (tree baselink, tree object_type,
12492 tree args, tsubst_flags_t complain, tree in_decl)
12494 tree name;
12495 tree qualifying_scope;
12496 tree fns;
12497 tree optype;
12498 tree template_args = 0;
12499 bool template_id_p = false;
12500 bool qualified = BASELINK_QUALIFIED_P (baselink);
12502 /* A baselink indicates a function from a base class. Both the
12503 BASELINK_ACCESS_BINFO and the base class referenced may
12504 indicate bases of the template class, rather than the
12505 instantiated class. In addition, lookups that were not
12506 ambiguous before may be ambiguous now. Therefore, we perform
12507 the lookup again. */
12508 qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
12509 qualifying_scope = tsubst (qualifying_scope, args,
12510 complain, in_decl);
12511 fns = BASELINK_FUNCTIONS (baselink);
12512 optype = tsubst (BASELINK_OPTYPE (baselink), args, complain, in_decl);
12513 if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
12515 template_id_p = true;
12516 template_args = TREE_OPERAND (fns, 1);
12517 fns = TREE_OPERAND (fns, 0);
12518 if (template_args)
12519 template_args = tsubst_template_args (template_args, args,
12520 complain, in_decl);
12522 name = DECL_NAME (get_first_fn (fns));
12523 if (IDENTIFIER_TYPENAME_P (name))
12524 name = mangle_conv_op_name_for_type (optype);
12525 baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
12526 if (!baselink)
12527 return error_mark_node;
12529 /* If lookup found a single function, mark it as used at this
12530 point. (If it lookup found multiple functions the one selected
12531 later by overload resolution will be marked as used at that
12532 point.) */
12533 if (BASELINK_P (baselink))
12534 fns = BASELINK_FUNCTIONS (baselink);
12535 if (!template_id_p && !really_overloaded_fn (fns))
12536 mark_used (OVL_CURRENT (fns));
12538 /* Add back the template arguments, if present. */
12539 if (BASELINK_P (baselink) && template_id_p)
12540 BASELINK_FUNCTIONS (baselink)
12541 = build_nt (TEMPLATE_ID_EXPR,
12542 BASELINK_FUNCTIONS (baselink),
12543 template_args);
12544 /* Update the conversion operator type. */
12545 BASELINK_OPTYPE (baselink) = optype;
12547 if (!object_type)
12548 object_type = current_class_type;
12550 if (qualified)
12551 baselink = adjust_result_of_qualified_name_lookup (baselink,
12552 qualifying_scope,
12553 object_type);
12554 return baselink;
12557 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID. DONE is
12558 true if the qualified-id will be a postfix-expression in-and-of
12559 itself; false if more of the postfix-expression follows the
12560 QUALIFIED_ID. ADDRESS_P is true if the qualified-id is the operand
12561 of "&". */
12563 static tree
12564 tsubst_qualified_id (tree qualified_id, tree args,
12565 tsubst_flags_t complain, tree in_decl,
12566 bool done, bool address_p)
12568 tree expr;
12569 tree scope;
12570 tree name;
12571 bool is_template;
12572 tree template_args;
12573 location_t loc = UNKNOWN_LOCATION;
12575 gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
12577 /* Figure out what name to look up. */
12578 name = TREE_OPERAND (qualified_id, 1);
12579 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
12581 is_template = true;
12582 loc = EXPR_LOCATION (name);
12583 template_args = TREE_OPERAND (name, 1);
12584 if (template_args)
12585 template_args = tsubst_template_args (template_args, args,
12586 complain, in_decl);
12587 name = TREE_OPERAND (name, 0);
12589 else
12591 is_template = false;
12592 template_args = NULL_TREE;
12595 /* Substitute into the qualifying scope. When there are no ARGS, we
12596 are just trying to simplify a non-dependent expression. In that
12597 case the qualifying scope may be dependent, and, in any case,
12598 substituting will not help. */
12599 scope = TREE_OPERAND (qualified_id, 0);
12600 if (args)
12602 scope = tsubst (scope, args, complain, in_decl);
12603 expr = tsubst_copy (name, args, complain, in_decl);
12605 else
12606 expr = name;
12608 if (dependent_scope_p (scope))
12610 if (is_template)
12611 expr = build_min_nt_loc (loc, TEMPLATE_ID_EXPR, expr, template_args);
12612 return build_qualified_name (NULL_TREE, scope, expr,
12613 QUALIFIED_NAME_IS_TEMPLATE (qualified_id));
12616 if (!BASELINK_P (name) && !DECL_P (expr))
12618 if (TREE_CODE (expr) == BIT_NOT_EXPR)
12620 /* A BIT_NOT_EXPR is used to represent a destructor. */
12621 if (!check_dtor_name (scope, TREE_OPERAND (expr, 0)))
12623 error ("qualifying type %qT does not match destructor name ~%qT",
12624 scope, TREE_OPERAND (expr, 0));
12625 expr = error_mark_node;
12627 else
12628 expr = lookup_qualified_name (scope, complete_dtor_identifier,
12629 /*is_type_p=*/0, false);
12631 else
12632 expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
12633 if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
12634 ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
12636 if (complain & tf_error)
12638 error ("dependent-name %qE is parsed as a non-type, but "
12639 "instantiation yields a type", qualified_id);
12640 inform (input_location, "say %<typename %E%> if a type is meant", qualified_id);
12642 return error_mark_node;
12646 if (DECL_P (expr))
12648 check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
12649 scope);
12650 /* Remember that there was a reference to this entity. */
12651 mark_used (expr);
12654 if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
12656 if (complain & tf_error)
12657 qualified_name_lookup_error (scope,
12658 TREE_OPERAND (qualified_id, 1),
12659 expr, input_location);
12660 return error_mark_node;
12663 if (is_template)
12664 expr = lookup_template_function (expr, template_args);
12666 if (expr == error_mark_node && complain & tf_error)
12667 qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
12668 expr, input_location);
12669 else if (TYPE_P (scope))
12671 expr = (adjust_result_of_qualified_name_lookup
12672 (expr, scope, current_nonlambda_class_type ()));
12673 expr = (finish_qualified_id_expr
12674 (scope, expr, done, address_p && PTRMEM_OK_P (qualified_id),
12675 QUALIFIED_NAME_IS_TEMPLATE (qualified_id),
12676 /*template_arg_p=*/false, complain));
12679 /* Expressions do not generally have reference type. */
12680 if (TREE_CODE (expr) != SCOPE_REF
12681 /* However, if we're about to form a pointer-to-member, we just
12682 want the referenced member referenced. */
12683 && TREE_CODE (expr) != OFFSET_REF)
12684 expr = convert_from_reference (expr);
12686 return expr;
12689 /* tsubst the initializer for a VAR_DECL. INIT is the unsubstituted
12690 initializer, DECL is the substituted VAR_DECL. Other arguments are as
12691 for tsubst. */
12693 static tree
12694 tsubst_init (tree init, tree decl, tree args,
12695 tsubst_flags_t complain, tree in_decl)
12697 if (!init)
12698 return NULL_TREE;
12700 init = tsubst_expr (init, args, complain, in_decl, false);
12702 if (!init)
12704 /* If we had an initializer but it
12705 instantiated to nothing,
12706 value-initialize the object. This will
12707 only occur when the initializer was a
12708 pack expansion where the parameter packs
12709 used in that expansion were of length
12710 zero. */
12711 init = build_value_init (TREE_TYPE (decl),
12712 complain);
12713 if (TREE_CODE (init) == AGGR_INIT_EXPR)
12714 init = get_target_expr_sfinae (init, complain);
12717 return init;
12720 /* Like tsubst, but deals with expressions. This function just replaces
12721 template parms; to finish processing the resultant expression, use
12722 tsubst_copy_and_build or tsubst_expr. */
12724 static tree
12725 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
12727 enum tree_code code;
12728 tree r;
12730 if (t == NULL_TREE || t == error_mark_node || args == NULL_TREE)
12731 return t;
12733 code = TREE_CODE (t);
12735 switch (code)
12737 case PARM_DECL:
12738 r = retrieve_local_specialization (t);
12740 if (r == NULL_TREE)
12742 /* We get here for a use of 'this' in an NSDMI. */
12743 if (DECL_NAME (t) == this_identifier
12744 && current_function_decl
12745 && DECL_CONSTRUCTOR_P (current_function_decl))
12746 return current_class_ptr;
12748 /* This can happen for a parameter name used later in a function
12749 declaration (such as in a late-specified return type). Just
12750 make a dummy decl, since it's only used for its type. */
12751 gcc_assert (cp_unevaluated_operand != 0);
12752 r = tsubst_decl (t, args, complain);
12753 /* Give it the template pattern as its context; its true context
12754 hasn't been instantiated yet and this is good enough for
12755 mangling. */
12756 DECL_CONTEXT (r) = DECL_CONTEXT (t);
12759 if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
12760 r = ARGUMENT_PACK_SELECT_ARG (r);
12761 mark_used (r);
12762 return r;
12764 case CONST_DECL:
12766 tree enum_type;
12767 tree v;
12769 if (DECL_TEMPLATE_PARM_P (t))
12770 return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
12771 /* There is no need to substitute into namespace-scope
12772 enumerators. */
12773 if (DECL_NAMESPACE_SCOPE_P (t))
12774 return t;
12775 /* If ARGS is NULL, then T is known to be non-dependent. */
12776 if (args == NULL_TREE)
12777 return integral_constant_value (t);
12779 /* Unfortunately, we cannot just call lookup_name here.
12780 Consider:
12782 template <int I> int f() {
12783 enum E { a = I };
12784 struct S { void g() { E e = a; } };
12787 When we instantiate f<7>::S::g(), say, lookup_name is not
12788 clever enough to find f<7>::a. */
12789 enum_type
12790 = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
12791 /*entering_scope=*/0);
12793 for (v = TYPE_VALUES (enum_type);
12794 v != NULL_TREE;
12795 v = TREE_CHAIN (v))
12796 if (TREE_PURPOSE (v) == DECL_NAME (t))
12797 return TREE_VALUE (v);
12799 /* We didn't find the name. That should never happen; if
12800 name-lookup found it during preliminary parsing, we
12801 should find it again here during instantiation. */
12802 gcc_unreachable ();
12804 return t;
12806 case FIELD_DECL:
12807 if (PACK_EXPANSION_P (TREE_TYPE (t)))
12809 /* Check for a local specialization set up by
12810 tsubst_pack_expansion. */
12811 if (tree r = retrieve_local_specialization (t))
12813 if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
12814 r = ARGUMENT_PACK_SELECT_ARG (r);
12815 return r;
12818 /* When retrieving a capture pack from a generic lambda, remove the
12819 lambda call op's own template argument list from ARGS. Only the
12820 template arguments active for the closure type should be used to
12821 retrieve the pack specialization. */
12822 if (LAMBDA_FUNCTION_P (current_function_decl)
12823 && (template_class_depth (DECL_CONTEXT (t))
12824 != TMPL_ARGS_DEPTH (args)))
12825 args = strip_innermost_template_args (args, 1);
12827 /* Otherwise return the full NONTYPE_ARGUMENT_PACK that
12828 tsubst_decl put in the hash table. */
12829 return retrieve_specialization (t, args, 0);
12832 if (DECL_CONTEXT (t))
12834 tree ctx;
12836 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
12837 /*entering_scope=*/1);
12838 if (ctx != DECL_CONTEXT (t))
12840 tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
12841 if (!r)
12843 if (complain & tf_error)
12844 error ("using invalid field %qD", t);
12845 return error_mark_node;
12847 return r;
12851 return t;
12853 case VAR_DECL:
12854 case FUNCTION_DECL:
12855 if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
12856 r = tsubst (t, args, complain, in_decl);
12857 else if (local_variable_p (t))
12859 r = retrieve_local_specialization (t);
12860 if (r == NULL_TREE)
12862 /* First try name lookup to find the instantiation. */
12863 r = lookup_name (DECL_NAME (t));
12864 if (r)
12866 /* Make sure that the one we found is the one we want. */
12867 tree ctx = tsubst (DECL_CONTEXT (t), args,
12868 complain, in_decl);
12869 if (ctx != DECL_CONTEXT (r))
12870 r = NULL_TREE;
12873 if (r)
12874 /* OK */;
12875 else
12877 /* This can happen for a variable used in a
12878 late-specified return type of a local lambda, or for a
12879 local static or constant. Building a new VAR_DECL
12880 should be OK in all those cases. */
12881 r = tsubst_decl (t, args, complain);
12882 if (decl_maybe_constant_var_p (r))
12884 /* We can't call cp_finish_decl, so handle the
12885 initializer by hand. */
12886 tree init = tsubst_init (DECL_INITIAL (t), r, args,
12887 complain, in_decl);
12888 if (!processing_template_decl)
12889 init = maybe_constant_init (init);
12890 if (processing_template_decl
12891 ? potential_constant_expression (init)
12892 : reduced_constant_expression_p (init))
12893 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r)
12894 = TREE_CONSTANT (r) = true;
12895 DECL_INITIAL (r) = init;
12897 gcc_assert (cp_unevaluated_operand || TREE_STATIC (r)
12898 || decl_constant_var_p (r)
12899 || errorcount || sorrycount);
12900 if (!processing_template_decl)
12902 if (TREE_STATIC (r))
12903 rest_of_decl_compilation (r, toplevel_bindings_p (),
12904 at_eof);
12905 else if (decl_constant_var_p (r))
12906 /* A use of a local constant decays to its value.
12907 FIXME update for core DR 696. */
12908 r = integral_constant_value (r);
12911 /* Remember this for subsequent uses. */
12912 if (local_specializations)
12913 register_local_specialization (r, t);
12916 else
12917 r = t;
12918 mark_used (r);
12919 return r;
12921 case NAMESPACE_DECL:
12922 return t;
12924 case OVERLOAD:
12925 /* An OVERLOAD will always be a non-dependent overload set; an
12926 overload set from function scope will just be represented with an
12927 IDENTIFIER_NODE, and from class scope with a BASELINK. */
12928 gcc_assert (!uses_template_parms (t));
12929 return t;
12931 case BASELINK:
12932 return tsubst_baselink (t, current_nonlambda_class_type (),
12933 args, complain, in_decl);
12935 case TEMPLATE_DECL:
12936 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
12937 return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
12938 args, complain, in_decl);
12939 else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
12940 return tsubst (t, args, complain, in_decl);
12941 else if (DECL_CLASS_SCOPE_P (t)
12942 && uses_template_parms (DECL_CONTEXT (t)))
12944 /* Template template argument like the following example need
12945 special treatment:
12947 template <template <class> class TT> struct C {};
12948 template <class T> struct D {
12949 template <class U> struct E {};
12950 C<E> c; // #1
12952 D<int> d; // #2
12954 We are processing the template argument `E' in #1 for
12955 the template instantiation #2. Originally, `E' is a
12956 TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT. Now we
12957 have to substitute this with one having context `D<int>'. */
12959 tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
12960 return lookup_field (context, DECL_NAME(t), 0, false);
12962 else
12963 /* Ordinary template template argument. */
12964 return t;
12966 case CAST_EXPR:
12967 case REINTERPRET_CAST_EXPR:
12968 case CONST_CAST_EXPR:
12969 case STATIC_CAST_EXPR:
12970 case DYNAMIC_CAST_EXPR:
12971 case IMPLICIT_CONV_EXPR:
12972 case CONVERT_EXPR:
12973 case NOP_EXPR:
12975 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
12976 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
12977 return build1 (code, type, op0);
12980 case SIZEOF_EXPR:
12981 if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
12984 tree expanded, op = TREE_OPERAND (t, 0);
12985 int len = 0;
12987 if (SIZEOF_EXPR_TYPE_P (t))
12988 op = TREE_TYPE (op);
12990 ++cp_unevaluated_operand;
12991 ++c_inhibit_evaluation_warnings;
12992 /* We only want to compute the number of arguments. */
12993 expanded = tsubst_pack_expansion (op, args, complain, in_decl);
12994 --cp_unevaluated_operand;
12995 --c_inhibit_evaluation_warnings;
12997 if (TREE_CODE (expanded) == TREE_VEC)
12998 len = TREE_VEC_LENGTH (expanded);
13000 if (expanded == error_mark_node)
13001 return error_mark_node;
13002 else if (PACK_EXPANSION_P (expanded)
13003 || (TREE_CODE (expanded) == TREE_VEC
13004 && len > 0
13005 && PACK_EXPANSION_P (TREE_VEC_ELT (expanded, len-1))))
13007 if (TREE_CODE (expanded) == TREE_VEC)
13008 expanded = TREE_VEC_ELT (expanded, len - 1);
13010 if (TYPE_P (expanded))
13011 return cxx_sizeof_or_alignof_type (expanded, SIZEOF_EXPR,
13012 complain & tf_error);
13013 else
13014 return cxx_sizeof_or_alignof_expr (expanded, SIZEOF_EXPR,
13015 complain & tf_error);
13017 else
13018 return build_int_cst (size_type_node, len);
13020 if (SIZEOF_EXPR_TYPE_P (t))
13022 r = tsubst (TREE_TYPE (TREE_OPERAND (t, 0)),
13023 args, complain, in_decl);
13024 r = build1 (NOP_EXPR, r, error_mark_node);
13025 r = build1 (SIZEOF_EXPR,
13026 tsubst (TREE_TYPE (t), args, complain, in_decl), r);
13027 SIZEOF_EXPR_TYPE_P (r) = 1;
13028 return r;
13030 /* Fall through */
13032 case INDIRECT_REF:
13033 case NEGATE_EXPR:
13034 case TRUTH_NOT_EXPR:
13035 case BIT_NOT_EXPR:
13036 case ADDR_EXPR:
13037 case UNARY_PLUS_EXPR: /* Unary + */
13038 case ALIGNOF_EXPR:
13039 case AT_ENCODE_EXPR:
13040 case ARROW_EXPR:
13041 case THROW_EXPR:
13042 case TYPEID_EXPR:
13043 case REALPART_EXPR:
13044 case IMAGPART_EXPR:
13045 case PAREN_EXPR:
13047 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13048 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
13049 return build1 (code, type, op0);
13052 case COMPONENT_REF:
13054 tree object;
13055 tree name;
13057 object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
13058 name = TREE_OPERAND (t, 1);
13059 if (TREE_CODE (name) == BIT_NOT_EXPR)
13061 name = tsubst_copy (TREE_OPERAND (name, 0), args,
13062 complain, in_decl);
13063 name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
13065 else if (TREE_CODE (name) == SCOPE_REF
13066 && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
13068 tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
13069 complain, in_decl);
13070 name = TREE_OPERAND (name, 1);
13071 name = tsubst_copy (TREE_OPERAND (name, 0), args,
13072 complain, in_decl);
13073 name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
13074 name = build_qualified_name (/*type=*/NULL_TREE,
13075 base, name,
13076 /*template_p=*/false);
13078 else if (BASELINK_P (name))
13079 name = tsubst_baselink (name,
13080 non_reference (TREE_TYPE (object)),
13081 args, complain,
13082 in_decl);
13083 else
13084 name = tsubst_copy (name, args, complain, in_decl);
13085 return build_nt (COMPONENT_REF, object, name, NULL_TREE);
13088 case PLUS_EXPR:
13089 case MINUS_EXPR:
13090 case MULT_EXPR:
13091 case TRUNC_DIV_EXPR:
13092 case CEIL_DIV_EXPR:
13093 case FLOOR_DIV_EXPR:
13094 case ROUND_DIV_EXPR:
13095 case EXACT_DIV_EXPR:
13096 case BIT_AND_EXPR:
13097 case BIT_IOR_EXPR:
13098 case BIT_XOR_EXPR:
13099 case TRUNC_MOD_EXPR:
13100 case FLOOR_MOD_EXPR:
13101 case TRUTH_ANDIF_EXPR:
13102 case TRUTH_ORIF_EXPR:
13103 case TRUTH_AND_EXPR:
13104 case TRUTH_OR_EXPR:
13105 case RSHIFT_EXPR:
13106 case LSHIFT_EXPR:
13107 case RROTATE_EXPR:
13108 case LROTATE_EXPR:
13109 case EQ_EXPR:
13110 case NE_EXPR:
13111 case MAX_EXPR:
13112 case MIN_EXPR:
13113 case LE_EXPR:
13114 case GE_EXPR:
13115 case LT_EXPR:
13116 case GT_EXPR:
13117 case COMPOUND_EXPR:
13118 case DOTSTAR_EXPR:
13119 case MEMBER_REF:
13120 case PREDECREMENT_EXPR:
13121 case PREINCREMENT_EXPR:
13122 case POSTDECREMENT_EXPR:
13123 case POSTINCREMENT_EXPR:
13125 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
13126 tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
13127 return build_nt (code, op0, op1);
13130 case SCOPE_REF:
13132 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
13133 tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
13134 return build_qualified_name (/*type=*/NULL_TREE, op0, op1,
13135 QUALIFIED_NAME_IS_TEMPLATE (t));
13138 case ARRAY_REF:
13140 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
13141 tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
13142 return build_nt (ARRAY_REF, op0, op1, NULL_TREE, NULL_TREE);
13145 case CALL_EXPR:
13147 int n = VL_EXP_OPERAND_LENGTH (t);
13148 tree result = build_vl_exp (CALL_EXPR, n);
13149 int i;
13150 for (i = 0; i < n; i++)
13151 TREE_OPERAND (t, i) = tsubst_copy (TREE_OPERAND (t, i), args,
13152 complain, in_decl);
13153 return result;
13156 case COND_EXPR:
13157 case MODOP_EXPR:
13158 case PSEUDO_DTOR_EXPR:
13159 case VEC_PERM_EXPR:
13161 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
13162 tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
13163 tree op2 = tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl);
13164 r = build_nt (code, op0, op1, op2);
13165 TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
13166 return r;
13169 case NEW_EXPR:
13171 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
13172 tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
13173 tree op2 = tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl);
13174 r = build_nt (code, op0, op1, op2);
13175 NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
13176 return r;
13179 case DELETE_EXPR:
13181 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
13182 tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
13183 r = build_nt (code, op0, op1);
13184 DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
13185 DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
13186 return r;
13189 case TEMPLATE_ID_EXPR:
13191 /* Substituted template arguments */
13192 tree fn = TREE_OPERAND (t, 0);
13193 tree targs = TREE_OPERAND (t, 1);
13195 fn = tsubst_copy (fn, args, complain, in_decl);
13196 if (targs)
13197 targs = tsubst_template_args (targs, args, complain, in_decl);
13199 return lookup_template_function (fn, targs);
13202 case TREE_LIST:
13204 tree purpose, value, chain;
13206 if (t == void_list_node)
13207 return t;
13209 purpose = TREE_PURPOSE (t);
13210 if (purpose)
13211 purpose = tsubst_copy (purpose, args, complain, in_decl);
13212 value = TREE_VALUE (t);
13213 if (value)
13214 value = tsubst_copy (value, args, complain, in_decl);
13215 chain = TREE_CHAIN (t);
13216 if (chain && chain != void_type_node)
13217 chain = tsubst_copy (chain, args, complain, in_decl);
13218 if (purpose == TREE_PURPOSE (t)
13219 && value == TREE_VALUE (t)
13220 && chain == TREE_CHAIN (t))
13221 return t;
13222 return tree_cons (purpose, value, chain);
13225 case RECORD_TYPE:
13226 case UNION_TYPE:
13227 case ENUMERAL_TYPE:
13228 case INTEGER_TYPE:
13229 case TEMPLATE_TYPE_PARM:
13230 case TEMPLATE_TEMPLATE_PARM:
13231 case BOUND_TEMPLATE_TEMPLATE_PARM:
13232 case TEMPLATE_PARM_INDEX:
13233 case POINTER_TYPE:
13234 case REFERENCE_TYPE:
13235 case OFFSET_TYPE:
13236 case FUNCTION_TYPE:
13237 case METHOD_TYPE:
13238 case ARRAY_TYPE:
13239 case TYPENAME_TYPE:
13240 case UNBOUND_CLASS_TEMPLATE:
13241 case TYPEOF_TYPE:
13242 case DECLTYPE_TYPE:
13243 case TYPE_DECL:
13244 return tsubst (t, args, complain, in_decl);
13246 case USING_DECL:
13247 t = DECL_NAME (t);
13248 /* Fall through. */
13249 case IDENTIFIER_NODE:
13250 if (IDENTIFIER_TYPENAME_P (t))
13252 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13253 return mangle_conv_op_name_for_type (new_type);
13255 else
13256 return t;
13258 case CONSTRUCTOR:
13259 /* This is handled by tsubst_copy_and_build. */
13260 gcc_unreachable ();
13262 case VA_ARG_EXPR:
13264 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
13265 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13266 return build_x_va_arg (EXPR_LOCATION (t), op0, type);
13269 case CLEANUP_POINT_EXPR:
13270 /* We shouldn't have built any of these during initial template
13271 generation. Instead, they should be built during instantiation
13272 in response to the saved STMT_IS_FULL_EXPR_P setting. */
13273 gcc_unreachable ();
13275 case OFFSET_REF:
13277 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13278 tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
13279 tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
13280 r = build2 (code, type, op0, op1);
13281 PTRMEM_OK_P (r) = PTRMEM_OK_P (t);
13282 mark_used (TREE_OPERAND (r, 1));
13283 return r;
13286 case EXPR_PACK_EXPANSION:
13287 error ("invalid use of pack expansion expression");
13288 return error_mark_node;
13290 case NONTYPE_ARGUMENT_PACK:
13291 error ("use %<...%> to expand argument pack");
13292 return error_mark_node;
13294 case VOID_CST:
13295 gcc_checking_assert (t == void_node && VOID_TYPE_P (TREE_TYPE (t)));
13296 return t;
13298 case INTEGER_CST:
13299 case REAL_CST:
13300 case STRING_CST:
13301 case COMPLEX_CST:
13303 /* Instantiate any typedefs in the type. */
13304 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13305 r = fold_convert (type, t);
13306 gcc_assert (TREE_CODE (r) == code);
13307 return r;
13310 case PTRMEM_CST:
13311 /* These can sometimes show up in a partial instantiation, but never
13312 involve template parms. */
13313 gcc_assert (!uses_template_parms (t));
13314 return t;
13316 default:
13317 /* We shouldn't get here, but keep going if !ENABLE_CHECKING. */
13318 gcc_checking_assert (false);
13319 return t;
13323 /* Like tsubst_copy, but specifically for OpenMP clauses. */
13325 static tree
13326 tsubst_omp_clauses (tree clauses, bool declare_simd,
13327 tree args, tsubst_flags_t complain, tree in_decl)
13329 tree new_clauses = NULL, nc, oc;
13331 for (oc = clauses; oc ; oc = OMP_CLAUSE_CHAIN (oc))
13333 nc = copy_node (oc);
13334 OMP_CLAUSE_CHAIN (nc) = new_clauses;
13335 new_clauses = nc;
13337 switch (OMP_CLAUSE_CODE (nc))
13339 case OMP_CLAUSE_LASTPRIVATE:
13340 if (OMP_CLAUSE_LASTPRIVATE_STMT (oc))
13342 OMP_CLAUSE_LASTPRIVATE_STMT (nc) = push_stmt_list ();
13343 tsubst_expr (OMP_CLAUSE_LASTPRIVATE_STMT (oc), args, complain,
13344 in_decl, /*integral_constant_expression_p=*/false);
13345 OMP_CLAUSE_LASTPRIVATE_STMT (nc)
13346 = pop_stmt_list (OMP_CLAUSE_LASTPRIVATE_STMT (nc));
13348 /* FALLTHRU */
13349 case OMP_CLAUSE_PRIVATE:
13350 case OMP_CLAUSE_SHARED:
13351 case OMP_CLAUSE_FIRSTPRIVATE:
13352 case OMP_CLAUSE_COPYIN:
13353 case OMP_CLAUSE_COPYPRIVATE:
13354 case OMP_CLAUSE_IF:
13355 case OMP_CLAUSE_NUM_THREADS:
13356 case OMP_CLAUSE_SCHEDULE:
13357 case OMP_CLAUSE_COLLAPSE:
13358 case OMP_CLAUSE_FINAL:
13359 case OMP_CLAUSE_DEPEND:
13360 case OMP_CLAUSE_FROM:
13361 case OMP_CLAUSE_TO:
13362 case OMP_CLAUSE_UNIFORM:
13363 case OMP_CLAUSE_MAP:
13364 case OMP_CLAUSE_DEVICE:
13365 case OMP_CLAUSE_DIST_SCHEDULE:
13366 case OMP_CLAUSE_NUM_TEAMS:
13367 case OMP_CLAUSE_THREAD_LIMIT:
13368 case OMP_CLAUSE_SAFELEN:
13369 case OMP_CLAUSE_SIMDLEN:
13370 OMP_CLAUSE_OPERAND (nc, 0)
13371 = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain,
13372 in_decl, /*integral_constant_expression_p=*/false);
13373 break;
13374 case OMP_CLAUSE_REDUCTION:
13375 if (OMP_CLAUSE_REDUCTION_PLACEHOLDER (oc))
13377 tree placeholder = OMP_CLAUSE_REDUCTION_PLACEHOLDER (oc);
13378 if (TREE_CODE (placeholder) == SCOPE_REF)
13380 tree scope = tsubst (TREE_OPERAND (placeholder, 0), args,
13381 complain, in_decl);
13382 OMP_CLAUSE_REDUCTION_PLACEHOLDER (nc)
13383 = build_qualified_name (NULL_TREE, scope,
13384 TREE_OPERAND (placeholder, 1),
13385 false);
13387 else
13388 gcc_assert (identifier_p (placeholder));
13390 OMP_CLAUSE_OPERAND (nc, 0)
13391 = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain,
13392 in_decl, /*integral_constant_expression_p=*/false);
13393 break;
13394 case OMP_CLAUSE_LINEAR:
13395 case OMP_CLAUSE_ALIGNED:
13396 OMP_CLAUSE_OPERAND (nc, 0)
13397 = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain,
13398 in_decl, /*integral_constant_expression_p=*/false);
13399 OMP_CLAUSE_OPERAND (nc, 1)
13400 = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 1), args, complain,
13401 in_decl, /*integral_constant_expression_p=*/false);
13402 break;
13404 case OMP_CLAUSE_NOWAIT:
13405 case OMP_CLAUSE_ORDERED:
13406 case OMP_CLAUSE_DEFAULT:
13407 case OMP_CLAUSE_UNTIED:
13408 case OMP_CLAUSE_MERGEABLE:
13409 case OMP_CLAUSE_INBRANCH:
13410 case OMP_CLAUSE_NOTINBRANCH:
13411 case OMP_CLAUSE_PROC_BIND:
13412 case OMP_CLAUSE_FOR:
13413 case OMP_CLAUSE_PARALLEL:
13414 case OMP_CLAUSE_SECTIONS:
13415 case OMP_CLAUSE_TASKGROUP:
13416 break;
13417 default:
13418 gcc_unreachable ();
13422 new_clauses = nreverse (new_clauses);
13423 if (!declare_simd)
13424 new_clauses = finish_omp_clauses (new_clauses);
13425 return new_clauses;
13428 /* Like tsubst_copy_and_build, but unshare TREE_LIST nodes. */
13430 static tree
13431 tsubst_copy_asm_operands (tree t, tree args, tsubst_flags_t complain,
13432 tree in_decl)
13434 #define RECUR(t) tsubst_copy_asm_operands (t, args, complain, in_decl)
13436 tree purpose, value, chain;
13438 if (t == NULL)
13439 return t;
13441 if (TREE_CODE (t) != TREE_LIST)
13442 return tsubst_copy_and_build (t, args, complain, in_decl,
13443 /*function_p=*/false,
13444 /*integral_constant_expression_p=*/false);
13446 if (t == void_list_node)
13447 return t;
13449 purpose = TREE_PURPOSE (t);
13450 if (purpose)
13451 purpose = RECUR (purpose);
13452 value = TREE_VALUE (t);
13453 if (value)
13455 if (TREE_CODE (value) != LABEL_DECL)
13456 value = RECUR (value);
13457 else
13459 value = lookup_label (DECL_NAME (value));
13460 gcc_assert (TREE_CODE (value) == LABEL_DECL);
13461 TREE_USED (value) = 1;
13464 chain = TREE_CHAIN (t);
13465 if (chain && chain != void_type_node)
13466 chain = RECUR (chain);
13467 return tree_cons (purpose, value, chain);
13468 #undef RECUR
13471 /* Substitute one OMP_FOR iterator. */
13473 static void
13474 tsubst_omp_for_iterator (tree t, int i, tree declv, tree initv,
13475 tree condv, tree incrv, tree *clauses,
13476 tree args, tsubst_flags_t complain, tree in_decl,
13477 bool integral_constant_expression_p)
13479 #define RECUR(NODE) \
13480 tsubst_expr ((NODE), args, complain, in_decl, \
13481 integral_constant_expression_p)
13482 tree decl, init, cond, incr;
13484 init = TREE_VEC_ELT (OMP_FOR_INIT (t), i);
13485 gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
13486 decl = TREE_OPERAND (init, 0);
13487 init = TREE_OPERAND (init, 1);
13488 tree decl_expr = NULL_TREE;
13489 if (init && TREE_CODE (init) == DECL_EXPR)
13491 /* We need to jump through some hoops to handle declarations in the
13492 for-init-statement, since we might need to handle auto deduction,
13493 but we need to keep control of initialization. */
13494 decl_expr = init;
13495 init = DECL_INITIAL (DECL_EXPR_DECL (init));
13496 decl = tsubst_decl (decl, args, complain);
13498 else
13499 decl = RECUR (decl);
13500 init = RECUR (init);
13502 tree auto_node = type_uses_auto (TREE_TYPE (decl));
13503 if (auto_node && init)
13504 TREE_TYPE (decl)
13505 = do_auto_deduction (TREE_TYPE (decl), init, auto_node);
13507 gcc_assert (!type_dependent_expression_p (decl));
13509 if (!CLASS_TYPE_P (TREE_TYPE (decl)))
13511 if (decl_expr)
13513 /* Declare the variable, but don't let that initialize it. */
13514 tree init_sav = DECL_INITIAL (DECL_EXPR_DECL (decl_expr));
13515 DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = NULL_TREE;
13516 RECUR (decl_expr);
13517 DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = init_sav;
13520 cond = RECUR (TREE_VEC_ELT (OMP_FOR_COND (t), i));
13521 incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
13522 if (TREE_CODE (incr) == MODIFY_EXPR)
13524 tree lhs = RECUR (TREE_OPERAND (incr, 0));
13525 tree rhs = RECUR (TREE_OPERAND (incr, 1));
13526 incr = build_x_modify_expr (EXPR_LOCATION (incr), lhs,
13527 NOP_EXPR, rhs, complain);
13529 else
13530 incr = RECUR (incr);
13531 TREE_VEC_ELT (declv, i) = decl;
13532 TREE_VEC_ELT (initv, i) = init;
13533 TREE_VEC_ELT (condv, i) = cond;
13534 TREE_VEC_ELT (incrv, i) = incr;
13535 return;
13538 if (decl_expr)
13540 /* Declare and initialize the variable. */
13541 RECUR (decl_expr);
13542 init = NULL_TREE;
13544 else if (init)
13546 tree c;
13547 for (c = *clauses; c ; c = OMP_CLAUSE_CHAIN (c))
13549 if ((OMP_CLAUSE_CODE (c) == OMP_CLAUSE_PRIVATE
13550 || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE)
13551 && OMP_CLAUSE_DECL (c) == decl)
13552 break;
13553 else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FIRSTPRIVATE
13554 && OMP_CLAUSE_DECL (c) == decl)
13555 error ("iteration variable %qD should not be firstprivate", decl);
13556 else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION
13557 && OMP_CLAUSE_DECL (c) == decl)
13558 error ("iteration variable %qD should not be reduction", decl);
13560 if (c == NULL)
13562 c = build_omp_clause (input_location, OMP_CLAUSE_PRIVATE);
13563 OMP_CLAUSE_DECL (c) = decl;
13564 c = finish_omp_clauses (c);
13565 if (c)
13567 OMP_CLAUSE_CHAIN (c) = *clauses;
13568 *clauses = c;
13572 cond = TREE_VEC_ELT (OMP_FOR_COND (t), i);
13573 if (COMPARISON_CLASS_P (cond))
13575 tree op0 = RECUR (TREE_OPERAND (cond, 0));
13576 tree op1 = RECUR (TREE_OPERAND (cond, 1));
13577 cond = build2 (TREE_CODE (cond), boolean_type_node, op0, op1);
13579 else
13580 cond = RECUR (cond);
13581 incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
13582 switch (TREE_CODE (incr))
13584 case PREINCREMENT_EXPR:
13585 case PREDECREMENT_EXPR:
13586 case POSTINCREMENT_EXPR:
13587 case POSTDECREMENT_EXPR:
13588 incr = build2 (TREE_CODE (incr), TREE_TYPE (decl),
13589 RECUR (TREE_OPERAND (incr, 0)), NULL_TREE);
13590 break;
13591 case MODIFY_EXPR:
13592 if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
13593 || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
13595 tree rhs = TREE_OPERAND (incr, 1);
13596 tree lhs = RECUR (TREE_OPERAND (incr, 0));
13597 tree rhs0 = RECUR (TREE_OPERAND (rhs, 0));
13598 tree rhs1 = RECUR (TREE_OPERAND (rhs, 1));
13599 incr = build2 (MODIFY_EXPR, TREE_TYPE (decl), lhs,
13600 build2 (TREE_CODE (rhs), TREE_TYPE (decl),
13601 rhs0, rhs1));
13603 else
13604 incr = RECUR (incr);
13605 break;
13606 case MODOP_EXPR:
13607 if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
13608 || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
13610 tree lhs = RECUR (TREE_OPERAND (incr, 0));
13611 incr = build2 (MODIFY_EXPR, TREE_TYPE (decl), lhs,
13612 build2 (TREE_CODE (TREE_OPERAND (incr, 1)),
13613 TREE_TYPE (decl), lhs,
13614 RECUR (TREE_OPERAND (incr, 2))));
13616 else if (TREE_CODE (TREE_OPERAND (incr, 1)) == NOP_EXPR
13617 && (TREE_CODE (TREE_OPERAND (incr, 2)) == PLUS_EXPR
13618 || (TREE_CODE (TREE_OPERAND (incr, 2)) == MINUS_EXPR)))
13620 tree rhs = TREE_OPERAND (incr, 2);
13621 tree lhs = RECUR (TREE_OPERAND (incr, 0));
13622 tree rhs0 = RECUR (TREE_OPERAND (rhs, 0));
13623 tree rhs1 = RECUR (TREE_OPERAND (rhs, 1));
13624 incr = build2 (MODIFY_EXPR, TREE_TYPE (decl), lhs,
13625 build2 (TREE_CODE (rhs), TREE_TYPE (decl),
13626 rhs0, rhs1));
13628 else
13629 incr = RECUR (incr);
13630 break;
13631 default:
13632 incr = RECUR (incr);
13633 break;
13636 TREE_VEC_ELT (declv, i) = decl;
13637 TREE_VEC_ELT (initv, i) = init;
13638 TREE_VEC_ELT (condv, i) = cond;
13639 TREE_VEC_ELT (incrv, i) = incr;
13640 #undef RECUR
13643 /* Like tsubst_copy for expressions, etc. but also does semantic
13644 processing. */
13646 static tree
13647 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
13648 bool integral_constant_expression_p)
13650 #define RETURN(EXP) do { r = (EXP); goto out; } while(0)
13651 #define RECUR(NODE) \
13652 tsubst_expr ((NODE), args, complain, in_decl, \
13653 integral_constant_expression_p)
13655 tree stmt, tmp;
13656 tree r;
13657 location_t loc;
13659 if (t == NULL_TREE || t == error_mark_node)
13660 return t;
13662 loc = input_location;
13663 if (EXPR_HAS_LOCATION (t))
13664 input_location = EXPR_LOCATION (t);
13665 if (STATEMENT_CODE_P (TREE_CODE (t)))
13666 current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
13668 switch (TREE_CODE (t))
13670 case STATEMENT_LIST:
13672 tree_stmt_iterator i;
13673 for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
13674 RECUR (tsi_stmt (i));
13675 break;
13678 case CTOR_INITIALIZER:
13679 finish_mem_initializers (tsubst_initializer_list
13680 (TREE_OPERAND (t, 0), args));
13681 break;
13683 case RETURN_EXPR:
13684 finish_return_stmt (RECUR (TREE_OPERAND (t, 0)));
13685 break;
13687 case EXPR_STMT:
13688 tmp = RECUR (EXPR_STMT_EXPR (t));
13689 if (EXPR_STMT_STMT_EXPR_RESULT (t))
13690 finish_stmt_expr_expr (tmp, cur_stmt_expr);
13691 else
13692 finish_expr_stmt (tmp);
13693 break;
13695 case USING_STMT:
13696 do_using_directive (USING_STMT_NAMESPACE (t));
13697 break;
13699 case DECL_EXPR:
13701 tree decl, pattern_decl;
13702 tree init;
13704 pattern_decl = decl = DECL_EXPR_DECL (t);
13705 if (TREE_CODE (decl) == LABEL_DECL)
13706 finish_label_decl (DECL_NAME (decl));
13707 else if (TREE_CODE (decl) == USING_DECL)
13709 tree scope = USING_DECL_SCOPE (decl);
13710 tree name = DECL_NAME (decl);
13711 tree decl;
13713 scope = tsubst (scope, args, complain, in_decl);
13714 decl = lookup_qualified_name (scope, name,
13715 /*is_type_p=*/false,
13716 /*complain=*/false);
13717 if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
13718 qualified_name_lookup_error (scope, name, decl, input_location);
13719 else
13720 do_local_using_decl (decl, scope, name);
13722 else if (DECL_PACK_P (decl))
13724 /* Don't build up decls for a variadic capture proxy, we'll
13725 instantiate the elements directly as needed. */
13726 break;
13728 else
13730 init = DECL_INITIAL (decl);
13731 decl = tsubst (decl, args, complain, in_decl);
13732 if (decl != error_mark_node)
13734 /* By marking the declaration as instantiated, we avoid
13735 trying to instantiate it. Since instantiate_decl can't
13736 handle local variables, and since we've already done
13737 all that needs to be done, that's the right thing to
13738 do. */
13739 if (VAR_P (decl))
13740 DECL_TEMPLATE_INSTANTIATED (decl) = 1;
13741 if (VAR_P (decl)
13742 && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
13743 /* Anonymous aggregates are a special case. */
13744 finish_anon_union (decl);
13745 else if (is_capture_proxy (DECL_EXPR_DECL (t)))
13747 DECL_CONTEXT (decl) = current_function_decl;
13748 if (DECL_NAME (decl) == this_identifier)
13750 tree lam = DECL_CONTEXT (current_function_decl);
13751 lam = CLASSTYPE_LAMBDA_EXPR (lam);
13752 LAMBDA_EXPR_THIS_CAPTURE (lam) = decl;
13754 insert_capture_proxy (decl);
13756 else if (DECL_IMPLICIT_TYPEDEF_P (t))
13757 /* We already did a pushtag. */;
13758 else if (TREE_CODE (decl) == FUNCTION_DECL
13759 && DECL_OMP_DECLARE_REDUCTION_P (decl)
13760 && DECL_FUNCTION_SCOPE_P (pattern_decl))
13762 DECL_CONTEXT (decl) = NULL_TREE;
13763 pushdecl (decl);
13764 DECL_CONTEXT (decl) = current_function_decl;
13765 cp_check_omp_declare_reduction (decl);
13767 else
13769 int const_init = false;
13770 maybe_push_decl (decl);
13771 if (VAR_P (decl)
13772 && DECL_PRETTY_FUNCTION_P (decl))
13774 /* For __PRETTY_FUNCTION__ we have to adjust the
13775 initializer. */
13776 const char *const name
13777 = cxx_printable_name (current_function_decl, 2);
13778 init = cp_fname_init (name, &TREE_TYPE (decl));
13780 else
13781 init = tsubst_init (init, decl, args, complain, in_decl);
13783 if (VAR_P (decl))
13784 const_init = (DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P
13785 (pattern_decl));
13786 cp_finish_decl (decl, init, const_init, NULL_TREE, 0);
13791 break;
13794 case FOR_STMT:
13795 stmt = begin_for_stmt (NULL_TREE, NULL_TREE);
13796 RECUR (FOR_INIT_STMT (t));
13797 finish_for_init_stmt (stmt);
13798 tmp = RECUR (FOR_COND (t));
13799 finish_for_cond (tmp, stmt, false);
13800 tmp = RECUR (FOR_EXPR (t));
13801 finish_for_expr (tmp, stmt);
13802 RECUR (FOR_BODY (t));
13803 finish_for_stmt (stmt);
13804 break;
13806 case RANGE_FOR_STMT:
13808 tree decl, expr;
13809 stmt = begin_for_stmt (NULL_TREE, NULL_TREE);
13810 decl = RANGE_FOR_DECL (t);
13811 decl = tsubst (decl, args, complain, in_decl);
13812 maybe_push_decl (decl);
13813 expr = RECUR (RANGE_FOR_EXPR (t));
13814 stmt = cp_convert_range_for (stmt, decl, expr, RANGE_FOR_IVDEP (t));
13815 RECUR (RANGE_FOR_BODY (t));
13816 finish_for_stmt (stmt);
13818 break;
13820 case WHILE_STMT:
13821 stmt = begin_while_stmt ();
13822 tmp = RECUR (WHILE_COND (t));
13823 finish_while_stmt_cond (tmp, stmt, false);
13824 RECUR (WHILE_BODY (t));
13825 finish_while_stmt (stmt);
13826 break;
13828 case DO_STMT:
13829 stmt = begin_do_stmt ();
13830 RECUR (DO_BODY (t));
13831 finish_do_body (stmt);
13832 tmp = RECUR (DO_COND (t));
13833 finish_do_stmt (tmp, stmt, false);
13834 break;
13836 case IF_STMT:
13837 stmt = begin_if_stmt ();
13838 tmp = RECUR (IF_COND (t));
13839 finish_if_stmt_cond (tmp, stmt);
13840 RECUR (THEN_CLAUSE (t));
13841 finish_then_clause (stmt);
13843 if (ELSE_CLAUSE (t))
13845 begin_else_clause (stmt);
13846 RECUR (ELSE_CLAUSE (t));
13847 finish_else_clause (stmt);
13850 finish_if_stmt (stmt);
13851 break;
13853 case BIND_EXPR:
13854 if (BIND_EXPR_BODY_BLOCK (t))
13855 stmt = begin_function_body ();
13856 else
13857 stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
13858 ? BCS_TRY_BLOCK : 0);
13860 RECUR (BIND_EXPR_BODY (t));
13862 if (BIND_EXPR_BODY_BLOCK (t))
13863 finish_function_body (stmt);
13864 else
13865 finish_compound_stmt (stmt);
13866 break;
13868 case BREAK_STMT:
13869 finish_break_stmt ();
13870 break;
13872 case CONTINUE_STMT:
13873 finish_continue_stmt ();
13874 break;
13876 case SWITCH_STMT:
13877 stmt = begin_switch_stmt ();
13878 tmp = RECUR (SWITCH_STMT_COND (t));
13879 finish_switch_cond (tmp, stmt);
13880 RECUR (SWITCH_STMT_BODY (t));
13881 finish_switch_stmt (stmt);
13882 break;
13884 case CASE_LABEL_EXPR:
13886 tree low = RECUR (CASE_LOW (t));
13887 tree high = RECUR (CASE_HIGH (t));
13888 finish_case_label (EXPR_LOCATION (t), low, high);
13890 break;
13892 case LABEL_EXPR:
13894 tree decl = LABEL_EXPR_LABEL (t);
13895 tree label;
13897 label = finish_label_stmt (DECL_NAME (decl));
13898 if (DECL_ATTRIBUTES (decl) != NULL_TREE)
13899 cplus_decl_attributes (&label, DECL_ATTRIBUTES (decl), 0);
13901 break;
13903 case GOTO_EXPR:
13904 tmp = GOTO_DESTINATION (t);
13905 if (TREE_CODE (tmp) != LABEL_DECL)
13906 /* Computed goto's must be tsubst'd into. On the other hand,
13907 non-computed gotos must not be; the identifier in question
13908 will have no binding. */
13909 tmp = RECUR (tmp);
13910 else
13911 tmp = DECL_NAME (tmp);
13912 finish_goto_stmt (tmp);
13913 break;
13915 case ASM_EXPR:
13917 tree string = RECUR (ASM_STRING (t));
13918 tree outputs = tsubst_copy_asm_operands (ASM_OUTPUTS (t), args,
13919 complain, in_decl);
13920 tree inputs = tsubst_copy_asm_operands (ASM_INPUTS (t), args,
13921 complain, in_decl);
13922 tree clobbers = tsubst_copy_asm_operands (ASM_CLOBBERS (t), args,
13923 complain, in_decl);
13924 tree labels = tsubst_copy_asm_operands (ASM_LABELS (t), args,
13925 complain, in_decl);
13926 tmp = finish_asm_stmt (ASM_VOLATILE_P (t), string, outputs, inputs,
13927 clobbers, labels);
13928 tree asm_expr = tmp;
13929 if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
13930 asm_expr = TREE_OPERAND (asm_expr, 0);
13931 ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
13933 break;
13935 case TRY_BLOCK:
13936 if (CLEANUP_P (t))
13938 stmt = begin_try_block ();
13939 RECUR (TRY_STMTS (t));
13940 finish_cleanup_try_block (stmt);
13941 finish_cleanup (RECUR (TRY_HANDLERS (t)), stmt);
13943 else
13945 tree compound_stmt = NULL_TREE;
13947 if (FN_TRY_BLOCK_P (t))
13948 stmt = begin_function_try_block (&compound_stmt);
13949 else
13950 stmt = begin_try_block ();
13952 RECUR (TRY_STMTS (t));
13954 if (FN_TRY_BLOCK_P (t))
13955 finish_function_try_block (stmt);
13956 else
13957 finish_try_block (stmt);
13959 RECUR (TRY_HANDLERS (t));
13960 if (FN_TRY_BLOCK_P (t))
13961 finish_function_handler_sequence (stmt, compound_stmt);
13962 else
13963 finish_handler_sequence (stmt);
13965 break;
13967 case HANDLER:
13969 tree decl = HANDLER_PARMS (t);
13971 if (decl)
13973 decl = tsubst (decl, args, complain, in_decl);
13974 /* Prevent instantiate_decl from trying to instantiate
13975 this variable. We've already done all that needs to be
13976 done. */
13977 if (decl != error_mark_node)
13978 DECL_TEMPLATE_INSTANTIATED (decl) = 1;
13980 stmt = begin_handler ();
13981 finish_handler_parms (decl, stmt);
13982 RECUR (HANDLER_BODY (t));
13983 finish_handler (stmt);
13985 break;
13987 case TAG_DEFN:
13988 tmp = tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
13989 if (CLASS_TYPE_P (tmp))
13991 /* Local classes are not independent templates; they are
13992 instantiated along with their containing function. And this
13993 way we don't have to deal with pushing out of one local class
13994 to instantiate a member of another local class. */
13995 tree fn;
13996 /* Closures are handled by the LAMBDA_EXPR. */
13997 gcc_assert (!LAMBDA_TYPE_P (TREE_TYPE (t)));
13998 complete_type (tmp);
13999 for (fn = TYPE_METHODS (tmp); fn; fn = DECL_CHAIN (fn))
14000 if (!DECL_ARTIFICIAL (fn))
14001 instantiate_decl (fn, /*defer_ok*/0, /*expl_inst_class*/false);
14003 break;
14005 case STATIC_ASSERT:
14007 tree condition;
14009 ++c_inhibit_evaluation_warnings;
14010 condition =
14011 tsubst_expr (STATIC_ASSERT_CONDITION (t),
14012 args,
14013 complain, in_decl,
14014 /*integral_constant_expression_p=*/true);
14015 --c_inhibit_evaluation_warnings;
14017 finish_static_assert (condition,
14018 STATIC_ASSERT_MESSAGE (t),
14019 STATIC_ASSERT_SOURCE_LOCATION (t),
14020 /*member_p=*/false);
14022 break;
14024 case OMP_PARALLEL:
14025 tmp = tsubst_omp_clauses (OMP_PARALLEL_CLAUSES (t), false,
14026 args, complain, in_decl);
14027 stmt = begin_omp_parallel ();
14028 RECUR (OMP_PARALLEL_BODY (t));
14029 OMP_PARALLEL_COMBINED (finish_omp_parallel (tmp, stmt))
14030 = OMP_PARALLEL_COMBINED (t);
14031 break;
14033 case OMP_TASK:
14034 tmp = tsubst_omp_clauses (OMP_TASK_CLAUSES (t), false,
14035 args, complain, in_decl);
14036 stmt = begin_omp_task ();
14037 RECUR (OMP_TASK_BODY (t));
14038 finish_omp_task (tmp, stmt);
14039 break;
14041 case OMP_FOR:
14042 case OMP_SIMD:
14043 case CILK_SIMD:
14044 case CILK_FOR:
14045 case OMP_DISTRIBUTE:
14047 tree clauses, body, pre_body;
14048 tree declv = NULL_TREE, initv = NULL_TREE, condv = NULL_TREE;
14049 tree incrv = NULL_TREE;
14050 int i;
14052 clauses = tsubst_omp_clauses (OMP_FOR_CLAUSES (t), false,
14053 args, complain, in_decl);
14054 if (OMP_FOR_INIT (t) != NULL_TREE)
14056 declv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
14057 initv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
14058 condv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
14059 incrv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
14062 stmt = begin_omp_structured_block ();
14064 pre_body = push_stmt_list ();
14065 RECUR (OMP_FOR_PRE_BODY (t));
14066 pre_body = pop_stmt_list (pre_body);
14068 if (OMP_FOR_INIT (t) != NULL_TREE)
14069 for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INIT (t)); i++)
14070 tsubst_omp_for_iterator (t, i, declv, initv, condv, incrv,
14071 &clauses, args, complain, in_decl,
14072 integral_constant_expression_p);
14074 body = push_stmt_list ();
14075 RECUR (OMP_FOR_BODY (t));
14076 body = pop_stmt_list (body);
14078 if (OMP_FOR_INIT (t) != NULL_TREE)
14079 t = finish_omp_for (EXPR_LOCATION (t), TREE_CODE (t), declv, initv,
14080 condv, incrv, body, pre_body, clauses);
14081 else
14083 t = make_node (TREE_CODE (t));
14084 TREE_TYPE (t) = void_type_node;
14085 OMP_FOR_BODY (t) = body;
14086 OMP_FOR_PRE_BODY (t) = pre_body;
14087 OMP_FOR_CLAUSES (t) = clauses;
14088 SET_EXPR_LOCATION (t, EXPR_LOCATION (t));
14089 add_stmt (t);
14092 add_stmt (finish_omp_structured_block (stmt));
14094 break;
14096 case OMP_SECTIONS:
14097 case OMP_SINGLE:
14098 case OMP_TEAMS:
14099 tmp = tsubst_omp_clauses (OMP_CLAUSES (t), false,
14100 args, complain, in_decl);
14101 stmt = push_stmt_list ();
14102 RECUR (OMP_BODY (t));
14103 stmt = pop_stmt_list (stmt);
14105 t = copy_node (t);
14106 OMP_BODY (t) = stmt;
14107 OMP_CLAUSES (t) = tmp;
14108 add_stmt (t);
14109 break;
14111 case OMP_TARGET_DATA:
14112 case OMP_TARGET:
14113 tmp = tsubst_omp_clauses (OMP_CLAUSES (t), false,
14114 args, complain, in_decl);
14115 keep_next_level (true);
14116 stmt = begin_omp_structured_block ();
14118 RECUR (OMP_BODY (t));
14119 stmt = finish_omp_structured_block (stmt);
14121 t = copy_node (t);
14122 OMP_BODY (t) = stmt;
14123 OMP_CLAUSES (t) = tmp;
14124 add_stmt (t);
14125 break;
14127 case OMP_TARGET_UPDATE:
14128 tmp = tsubst_omp_clauses (OMP_TARGET_UPDATE_CLAUSES (t), false,
14129 args, complain, in_decl);
14130 t = copy_node (t);
14131 OMP_CLAUSES (t) = tmp;
14132 add_stmt (t);
14133 break;
14135 case OMP_SECTION:
14136 case OMP_CRITICAL:
14137 case OMP_MASTER:
14138 case OMP_TASKGROUP:
14139 case OMP_ORDERED:
14140 stmt = push_stmt_list ();
14141 RECUR (OMP_BODY (t));
14142 stmt = pop_stmt_list (stmt);
14144 t = copy_node (t);
14145 OMP_BODY (t) = stmt;
14146 add_stmt (t);
14147 break;
14149 case OMP_ATOMIC:
14150 gcc_assert (OMP_ATOMIC_DEPENDENT_P (t));
14151 if (TREE_CODE (TREE_OPERAND (t, 1)) != MODIFY_EXPR)
14153 tree op1 = TREE_OPERAND (t, 1);
14154 tree rhs1 = NULL_TREE;
14155 tree lhs, rhs;
14156 if (TREE_CODE (op1) == COMPOUND_EXPR)
14158 rhs1 = RECUR (TREE_OPERAND (op1, 0));
14159 op1 = TREE_OPERAND (op1, 1);
14161 lhs = RECUR (TREE_OPERAND (op1, 0));
14162 rhs = RECUR (TREE_OPERAND (op1, 1));
14163 finish_omp_atomic (OMP_ATOMIC, TREE_CODE (op1), lhs, rhs,
14164 NULL_TREE, NULL_TREE, rhs1,
14165 OMP_ATOMIC_SEQ_CST (t));
14167 else
14169 tree op1 = TREE_OPERAND (t, 1);
14170 tree v = NULL_TREE, lhs, rhs = NULL_TREE, lhs1 = NULL_TREE;
14171 tree rhs1 = NULL_TREE;
14172 enum tree_code code = TREE_CODE (TREE_OPERAND (op1, 1));
14173 enum tree_code opcode = NOP_EXPR;
14174 if (code == OMP_ATOMIC_READ)
14176 v = RECUR (TREE_OPERAND (op1, 0));
14177 lhs = RECUR (TREE_OPERAND (TREE_OPERAND (op1, 1), 0));
14179 else if (code == OMP_ATOMIC_CAPTURE_OLD
14180 || code == OMP_ATOMIC_CAPTURE_NEW)
14182 tree op11 = TREE_OPERAND (TREE_OPERAND (op1, 1), 1);
14183 v = RECUR (TREE_OPERAND (op1, 0));
14184 lhs1 = RECUR (TREE_OPERAND (TREE_OPERAND (op1, 1), 0));
14185 if (TREE_CODE (op11) == COMPOUND_EXPR)
14187 rhs1 = RECUR (TREE_OPERAND (op11, 0));
14188 op11 = TREE_OPERAND (op11, 1);
14190 lhs = RECUR (TREE_OPERAND (op11, 0));
14191 rhs = RECUR (TREE_OPERAND (op11, 1));
14192 opcode = TREE_CODE (op11);
14193 if (opcode == MODIFY_EXPR)
14194 opcode = NOP_EXPR;
14196 else
14198 code = OMP_ATOMIC;
14199 lhs = RECUR (TREE_OPERAND (op1, 0));
14200 rhs = RECUR (TREE_OPERAND (op1, 1));
14202 finish_omp_atomic (code, opcode, lhs, rhs, v, lhs1, rhs1,
14203 OMP_ATOMIC_SEQ_CST (t));
14205 break;
14207 case TRANSACTION_EXPR:
14209 int flags = 0;
14210 flags |= (TRANSACTION_EXPR_OUTER (t) ? TM_STMT_ATTR_OUTER : 0);
14211 flags |= (TRANSACTION_EXPR_RELAXED (t) ? TM_STMT_ATTR_RELAXED : 0);
14213 if (TRANSACTION_EXPR_IS_STMT (t))
14215 tree body = TRANSACTION_EXPR_BODY (t);
14216 tree noex = NULL_TREE;
14217 if (TREE_CODE (body) == MUST_NOT_THROW_EXPR)
14219 noex = MUST_NOT_THROW_COND (body);
14220 if (noex == NULL_TREE)
14221 noex = boolean_true_node;
14222 body = TREE_OPERAND (body, 0);
14224 stmt = begin_transaction_stmt (input_location, NULL, flags);
14225 RECUR (body);
14226 finish_transaction_stmt (stmt, NULL, flags, RECUR (noex));
14228 else
14230 stmt = build_transaction_expr (EXPR_LOCATION (t),
14231 RECUR (TRANSACTION_EXPR_BODY (t)),
14232 flags, NULL_TREE);
14233 RETURN (stmt);
14236 break;
14238 case MUST_NOT_THROW_EXPR:
14240 tree op0 = RECUR (TREE_OPERAND (t, 0));
14241 tree cond = RECUR (MUST_NOT_THROW_COND (t));
14242 RETURN (build_must_not_throw_expr (op0, cond));
14245 case EXPR_PACK_EXPANSION:
14246 error ("invalid use of pack expansion expression");
14247 RETURN (error_mark_node);
14249 case NONTYPE_ARGUMENT_PACK:
14250 error ("use %<...%> to expand argument pack");
14251 RETURN (error_mark_node);
14253 case CILK_SPAWN_STMT:
14254 cfun->calls_cilk_spawn = 1;
14255 RETURN (build_cilk_spawn (EXPR_LOCATION (t), RECUR (CILK_SPAWN_FN (t))));
14257 case CILK_SYNC_STMT:
14258 RETURN (build_cilk_sync ());
14260 case COMPOUND_EXPR:
14261 tmp = RECUR (TREE_OPERAND (t, 0));
14262 if (tmp == NULL_TREE)
14263 /* If the first operand was a statement, we're done with it. */
14264 RETURN (RECUR (TREE_OPERAND (t, 1)));
14265 RETURN (build_x_compound_expr (EXPR_LOCATION (t), tmp,
14266 RECUR (TREE_OPERAND (t, 1)),
14267 complain));
14269 case ANNOTATE_EXPR:
14270 tmp = RECUR (TREE_OPERAND (t, 0));
14271 RETURN (build2_loc (EXPR_LOCATION (t), ANNOTATE_EXPR,
14272 TREE_TYPE (tmp), tmp, RECUR (TREE_OPERAND (t, 1))));
14274 default:
14275 gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
14277 RETURN (tsubst_copy_and_build (t, args, complain, in_decl,
14278 /*function_p=*/false,
14279 integral_constant_expression_p));
14282 RETURN (NULL_TREE);
14283 out:
14284 input_location = loc;
14285 return r;
14286 #undef RECUR
14287 #undef RETURN
14290 /* Instantiate the special body of the artificial DECL_OMP_DECLARE_REDUCTION
14291 function. For description of the body see comment above
14292 cp_parser_omp_declare_reduction_exprs. */
14294 static void
14295 tsubst_omp_udr (tree t, tree args, tsubst_flags_t complain, tree in_decl)
14297 if (t == NULL_TREE || t == error_mark_node)
14298 return;
14300 gcc_assert (TREE_CODE (t) == STATEMENT_LIST);
14302 tree_stmt_iterator tsi;
14303 int i;
14304 tree stmts[7];
14305 memset (stmts, 0, sizeof stmts);
14306 for (i = 0, tsi = tsi_start (t);
14307 i < 7 && !tsi_end_p (tsi);
14308 i++, tsi_next (&tsi))
14309 stmts[i] = tsi_stmt (tsi);
14310 gcc_assert (tsi_end_p (tsi));
14312 if (i >= 3)
14314 gcc_assert (TREE_CODE (stmts[0]) == DECL_EXPR
14315 && TREE_CODE (stmts[1]) == DECL_EXPR);
14316 tree omp_out = tsubst (DECL_EXPR_DECL (stmts[0]),
14317 args, complain, in_decl);
14318 tree omp_in = tsubst (DECL_EXPR_DECL (stmts[1]),
14319 args, complain, in_decl);
14320 DECL_CONTEXT (omp_out) = current_function_decl;
14321 DECL_CONTEXT (omp_in) = current_function_decl;
14322 keep_next_level (true);
14323 tree block = begin_omp_structured_block ();
14324 tsubst_expr (stmts[2], args, complain, in_decl, false);
14325 block = finish_omp_structured_block (block);
14326 block = maybe_cleanup_point_expr_void (block);
14327 add_decl_expr (omp_out);
14328 if (TREE_NO_WARNING (DECL_EXPR_DECL (stmts[0])))
14329 TREE_NO_WARNING (omp_out) = 1;
14330 add_decl_expr (omp_in);
14331 finish_expr_stmt (block);
14333 if (i >= 6)
14335 gcc_assert (TREE_CODE (stmts[3]) == DECL_EXPR
14336 && TREE_CODE (stmts[4]) == DECL_EXPR);
14337 tree omp_priv = tsubst (DECL_EXPR_DECL (stmts[3]),
14338 args, complain, in_decl);
14339 tree omp_orig = tsubst (DECL_EXPR_DECL (stmts[4]),
14340 args, complain, in_decl);
14341 DECL_CONTEXT (omp_priv) = current_function_decl;
14342 DECL_CONTEXT (omp_orig) = current_function_decl;
14343 keep_next_level (true);
14344 tree block = begin_omp_structured_block ();
14345 tsubst_expr (stmts[5], args, complain, in_decl, false);
14346 block = finish_omp_structured_block (block);
14347 block = maybe_cleanup_point_expr_void (block);
14348 cp_walk_tree (&block, cp_remove_omp_priv_cleanup_stmt, omp_priv, NULL);
14349 add_decl_expr (omp_priv);
14350 add_decl_expr (omp_orig);
14351 finish_expr_stmt (block);
14352 if (i == 7)
14353 add_decl_expr (omp_orig);
14357 /* T is a postfix-expression that is not being used in a function
14358 call. Return the substituted version of T. */
14360 static tree
14361 tsubst_non_call_postfix_expression (tree t, tree args,
14362 tsubst_flags_t complain,
14363 tree in_decl)
14365 if (TREE_CODE (t) == SCOPE_REF)
14366 t = tsubst_qualified_id (t, args, complain, in_decl,
14367 /*done=*/false, /*address_p=*/false);
14368 else
14369 t = tsubst_copy_and_build (t, args, complain, in_decl,
14370 /*function_p=*/false,
14371 /*integral_constant_expression_p=*/false);
14373 return t;
14376 /* Sentinel to disable certain warnings during template substitution. */
14378 struct warning_sentinel {
14379 int &flag;
14380 int val;
14381 warning_sentinel(int& flag, bool suppress=true)
14382 : flag(flag), val(flag) { if (suppress) flag = 0; }
14383 ~warning_sentinel() { flag = val; }
14386 /* Like tsubst but deals with expressions and performs semantic
14387 analysis. FUNCTION_P is true if T is the "F" in "F (ARGS)". */
14389 tree
14390 tsubst_copy_and_build (tree t,
14391 tree args,
14392 tsubst_flags_t complain,
14393 tree in_decl,
14394 bool function_p,
14395 bool integral_constant_expression_p)
14397 #define RETURN(EXP) do { retval = (EXP); goto out; } while(0)
14398 #define RECUR(NODE) \
14399 tsubst_copy_and_build (NODE, args, complain, in_decl, \
14400 /*function_p=*/false, \
14401 integral_constant_expression_p)
14403 tree retval, op1;
14404 location_t loc;
14406 if (t == NULL_TREE || t == error_mark_node)
14407 return t;
14409 loc = input_location;
14410 if (EXPR_HAS_LOCATION (t))
14411 input_location = EXPR_LOCATION (t);
14413 /* N3276 decltype magic only applies to calls at the top level or on the
14414 right side of a comma. */
14415 tsubst_flags_t decltype_flag = (complain & tf_decltype);
14416 complain &= ~tf_decltype;
14418 switch (TREE_CODE (t))
14420 case USING_DECL:
14421 t = DECL_NAME (t);
14422 /* Fall through. */
14423 case IDENTIFIER_NODE:
14425 tree decl;
14426 cp_id_kind idk;
14427 bool non_integral_constant_expression_p;
14428 const char *error_msg;
14430 if (IDENTIFIER_TYPENAME_P (t))
14432 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
14433 t = mangle_conv_op_name_for_type (new_type);
14436 /* Look up the name. */
14437 decl = lookup_name (t);
14439 /* By convention, expressions use ERROR_MARK_NODE to indicate
14440 failure, not NULL_TREE. */
14441 if (decl == NULL_TREE)
14442 decl = error_mark_node;
14444 decl = finish_id_expression (t, decl, NULL_TREE,
14445 &idk,
14446 integral_constant_expression_p,
14447 /*allow_non_integral_constant_expression_p=*/(cxx_dialect >= cxx11),
14448 &non_integral_constant_expression_p,
14449 /*template_p=*/false,
14450 /*done=*/true,
14451 /*address_p=*/false,
14452 /*template_arg_p=*/false,
14453 &error_msg,
14454 input_location);
14455 if (error_msg)
14456 error (error_msg);
14457 if (!function_p && identifier_p (decl))
14459 if (complain & tf_error)
14460 unqualified_name_lookup_error (decl);
14461 decl = error_mark_node;
14463 RETURN (decl);
14466 case TEMPLATE_ID_EXPR:
14468 tree object;
14469 tree templ = RECUR (TREE_OPERAND (t, 0));
14470 tree targs = TREE_OPERAND (t, 1);
14472 if (targs)
14473 targs = tsubst_template_args (targs, args, complain, in_decl);
14475 if (TREE_CODE (templ) == COMPONENT_REF)
14477 object = TREE_OPERAND (templ, 0);
14478 templ = TREE_OPERAND (templ, 1);
14480 else
14481 object = NULL_TREE;
14482 templ = lookup_template_function (templ, targs);
14484 if (object)
14485 RETURN (build3 (COMPONENT_REF, TREE_TYPE (templ),
14486 object, templ, NULL_TREE));
14487 else
14488 RETURN (baselink_for_fns (templ));
14491 case INDIRECT_REF:
14493 tree r = RECUR (TREE_OPERAND (t, 0));
14495 if (REFERENCE_REF_P (t))
14497 /* A type conversion to reference type will be enclosed in
14498 such an indirect ref, but the substitution of the cast
14499 will have also added such an indirect ref. */
14500 if (TREE_CODE (TREE_TYPE (r)) == REFERENCE_TYPE)
14501 r = convert_from_reference (r);
14503 else
14504 r = build_x_indirect_ref (input_location, r, RO_UNARY_STAR,
14505 complain|decltype_flag);
14506 RETURN (r);
14509 case NOP_EXPR:
14511 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
14512 tree op0 = RECUR (TREE_OPERAND (t, 0));
14513 RETURN (build_nop (type, op0));
14516 case IMPLICIT_CONV_EXPR:
14518 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
14519 tree expr = RECUR (TREE_OPERAND (t, 0));
14520 int flags = LOOKUP_IMPLICIT;
14521 if (IMPLICIT_CONV_EXPR_DIRECT_INIT (t))
14522 flags = LOOKUP_NORMAL;
14523 RETURN (perform_implicit_conversion_flags (type, expr, complain,
14524 flags));
14527 case CONVERT_EXPR:
14529 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
14530 tree op0 = RECUR (TREE_OPERAND (t, 0));
14531 RETURN (build1 (CONVERT_EXPR, type, op0));
14534 case CAST_EXPR:
14535 case REINTERPRET_CAST_EXPR:
14536 case CONST_CAST_EXPR:
14537 case DYNAMIC_CAST_EXPR:
14538 case STATIC_CAST_EXPR:
14540 tree type;
14541 tree op, r = NULL_TREE;
14543 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
14544 if (integral_constant_expression_p
14545 && !cast_valid_in_integral_constant_expression_p (type))
14547 if (complain & tf_error)
14548 error ("a cast to a type other than an integral or "
14549 "enumeration type cannot appear in a constant-expression");
14550 RETURN (error_mark_node);
14553 op = RECUR (TREE_OPERAND (t, 0));
14555 warning_sentinel s(warn_useless_cast);
14556 switch (TREE_CODE (t))
14558 case CAST_EXPR:
14559 r = build_functional_cast (type, op, complain);
14560 break;
14561 case REINTERPRET_CAST_EXPR:
14562 r = build_reinterpret_cast (type, op, complain);
14563 break;
14564 case CONST_CAST_EXPR:
14565 r = build_const_cast (type, op, complain);
14566 break;
14567 case DYNAMIC_CAST_EXPR:
14568 r = build_dynamic_cast (type, op, complain);
14569 break;
14570 case STATIC_CAST_EXPR:
14571 r = build_static_cast (type, op, complain);
14572 break;
14573 default:
14574 gcc_unreachable ();
14577 RETURN (r);
14580 case POSTDECREMENT_EXPR:
14581 case POSTINCREMENT_EXPR:
14582 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
14583 args, complain, in_decl);
14584 RETURN (build_x_unary_op (input_location, TREE_CODE (t), op1,
14585 complain|decltype_flag));
14587 case PREDECREMENT_EXPR:
14588 case PREINCREMENT_EXPR:
14589 case NEGATE_EXPR:
14590 case BIT_NOT_EXPR:
14591 case ABS_EXPR:
14592 case TRUTH_NOT_EXPR:
14593 case UNARY_PLUS_EXPR: /* Unary + */
14594 case REALPART_EXPR:
14595 case IMAGPART_EXPR:
14596 RETURN (build_x_unary_op (input_location, TREE_CODE (t),
14597 RECUR (TREE_OPERAND (t, 0)),
14598 complain|decltype_flag));
14600 case FIX_TRUNC_EXPR:
14601 RETURN (cp_build_unary_op (FIX_TRUNC_EXPR, RECUR (TREE_OPERAND (t, 0)),
14602 0, complain));
14604 case ADDR_EXPR:
14605 op1 = TREE_OPERAND (t, 0);
14606 if (TREE_CODE (op1) == LABEL_DECL)
14607 RETURN (finish_label_address_expr (DECL_NAME (op1),
14608 EXPR_LOCATION (op1)));
14609 if (TREE_CODE (op1) == SCOPE_REF)
14610 op1 = tsubst_qualified_id (op1, args, complain, in_decl,
14611 /*done=*/true, /*address_p=*/true);
14612 else
14613 op1 = tsubst_non_call_postfix_expression (op1, args, complain,
14614 in_decl);
14615 RETURN (build_x_unary_op (input_location, ADDR_EXPR, op1,
14616 complain|decltype_flag));
14618 case PLUS_EXPR:
14619 case MINUS_EXPR:
14620 case MULT_EXPR:
14621 case TRUNC_DIV_EXPR:
14622 case CEIL_DIV_EXPR:
14623 case FLOOR_DIV_EXPR:
14624 case ROUND_DIV_EXPR:
14625 case EXACT_DIV_EXPR:
14626 case BIT_AND_EXPR:
14627 case BIT_IOR_EXPR:
14628 case BIT_XOR_EXPR:
14629 case TRUNC_MOD_EXPR:
14630 case FLOOR_MOD_EXPR:
14631 case TRUTH_ANDIF_EXPR:
14632 case TRUTH_ORIF_EXPR:
14633 case TRUTH_AND_EXPR:
14634 case TRUTH_OR_EXPR:
14635 case RSHIFT_EXPR:
14636 case LSHIFT_EXPR:
14637 case RROTATE_EXPR:
14638 case LROTATE_EXPR:
14639 case EQ_EXPR:
14640 case NE_EXPR:
14641 case MAX_EXPR:
14642 case MIN_EXPR:
14643 case LE_EXPR:
14644 case GE_EXPR:
14645 case LT_EXPR:
14646 case GT_EXPR:
14647 case MEMBER_REF:
14648 case DOTSTAR_EXPR:
14650 warning_sentinel s1(warn_type_limits);
14651 warning_sentinel s2(warn_div_by_zero);
14652 tree op0 = RECUR (TREE_OPERAND (t, 0));
14653 tree op1 = RECUR (TREE_OPERAND (t, 1));
14654 tree r = build_x_binary_op
14655 (input_location, TREE_CODE (t),
14656 op0,
14657 (TREE_NO_WARNING (TREE_OPERAND (t, 0))
14658 ? ERROR_MARK
14659 : TREE_CODE (TREE_OPERAND (t, 0))),
14660 op1,
14661 (TREE_NO_WARNING (TREE_OPERAND (t, 1))
14662 ? ERROR_MARK
14663 : TREE_CODE (TREE_OPERAND (t, 1))),
14664 /*overload=*/NULL,
14665 complain|decltype_flag);
14666 if (EXPR_P (r) && TREE_NO_WARNING (t))
14667 TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
14669 RETURN (r);
14672 case POINTER_PLUS_EXPR:
14674 tree op0 = RECUR (TREE_OPERAND (t, 0));
14675 tree op1 = RECUR (TREE_OPERAND (t, 1));
14676 return fold_build_pointer_plus (op0, op1);
14679 case SCOPE_REF:
14680 RETURN (tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
14681 /*address_p=*/false));
14682 case ARRAY_REF:
14683 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
14684 args, complain, in_decl);
14685 RETURN (build_x_array_ref (EXPR_LOCATION (t), op1,
14686 RECUR (TREE_OPERAND (t, 1)),
14687 complain|decltype_flag));
14689 case ARRAY_NOTATION_REF:
14691 tree start_index, length, stride;
14692 op1 = tsubst_non_call_postfix_expression (ARRAY_NOTATION_ARRAY (t),
14693 args, complain, in_decl);
14694 start_index = RECUR (ARRAY_NOTATION_START (t));
14695 length = RECUR (ARRAY_NOTATION_LENGTH (t));
14696 stride = RECUR (ARRAY_NOTATION_STRIDE (t));
14697 RETURN (build_array_notation_ref (EXPR_LOCATION (t), op1, start_index,
14698 length, stride, TREE_TYPE (op1)));
14700 case SIZEOF_EXPR:
14701 if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
14702 RETURN (tsubst_copy (t, args, complain, in_decl));
14703 /* Fall through */
14705 case ALIGNOF_EXPR:
14707 tree r;
14709 op1 = TREE_OPERAND (t, 0);
14710 if (TREE_CODE (t) == SIZEOF_EXPR && SIZEOF_EXPR_TYPE_P (t))
14711 op1 = TREE_TYPE (op1);
14712 if (!args)
14714 /* When there are no ARGS, we are trying to evaluate a
14715 non-dependent expression from the parser. Trying to do
14716 the substitutions may not work. */
14717 if (!TYPE_P (op1))
14718 op1 = TREE_TYPE (op1);
14720 else
14722 ++cp_unevaluated_operand;
14723 ++c_inhibit_evaluation_warnings;
14724 if (TYPE_P (op1))
14725 op1 = tsubst (op1, args, complain, in_decl);
14726 else
14727 op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
14728 /*function_p=*/false,
14729 /*integral_constant_expression_p=*/
14730 false);
14731 --cp_unevaluated_operand;
14732 --c_inhibit_evaluation_warnings;
14734 if (TYPE_P (op1))
14735 r = cxx_sizeof_or_alignof_type (op1, TREE_CODE (t),
14736 complain & tf_error);
14737 else
14738 r = cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t),
14739 complain & tf_error);
14740 if (TREE_CODE (t) == SIZEOF_EXPR && r != error_mark_node)
14742 if (TREE_CODE (r) != SIZEOF_EXPR || TYPE_P (op1))
14744 if (!processing_template_decl && TYPE_P (op1))
14746 r = build_min (SIZEOF_EXPR, size_type_node,
14747 build1 (NOP_EXPR, op1, error_mark_node));
14748 SIZEOF_EXPR_TYPE_P (r) = 1;
14750 else
14751 r = build_min (SIZEOF_EXPR, size_type_node, op1);
14752 TREE_SIDE_EFFECTS (r) = 0;
14753 TREE_READONLY (r) = 1;
14755 SET_EXPR_LOCATION (r, EXPR_LOCATION (t));
14757 RETURN (r);
14760 case AT_ENCODE_EXPR:
14762 op1 = TREE_OPERAND (t, 0);
14763 ++cp_unevaluated_operand;
14764 ++c_inhibit_evaluation_warnings;
14765 op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
14766 /*function_p=*/false,
14767 /*integral_constant_expression_p=*/false);
14768 --cp_unevaluated_operand;
14769 --c_inhibit_evaluation_warnings;
14770 RETURN (objc_build_encode_expr (op1));
14773 case NOEXCEPT_EXPR:
14774 op1 = TREE_OPERAND (t, 0);
14775 ++cp_unevaluated_operand;
14776 ++c_inhibit_evaluation_warnings;
14777 ++cp_noexcept_operand;
14778 op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
14779 /*function_p=*/false,
14780 /*integral_constant_expression_p=*/false);
14781 --cp_unevaluated_operand;
14782 --c_inhibit_evaluation_warnings;
14783 --cp_noexcept_operand;
14784 RETURN (finish_noexcept_expr (op1, complain));
14786 case MODOP_EXPR:
14788 warning_sentinel s(warn_div_by_zero);
14789 tree lhs = RECUR (TREE_OPERAND (t, 0));
14790 tree rhs = RECUR (TREE_OPERAND (t, 2));
14791 tree r = build_x_modify_expr
14792 (EXPR_LOCATION (t), lhs, TREE_CODE (TREE_OPERAND (t, 1)), rhs,
14793 complain|decltype_flag);
14794 /* TREE_NO_WARNING must be set if either the expression was
14795 parenthesized or it uses an operator such as >>= rather
14796 than plain assignment. In the former case, it was already
14797 set and must be copied. In the latter case,
14798 build_x_modify_expr sets it and it must not be reset
14799 here. */
14800 if (TREE_NO_WARNING (t))
14801 TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
14803 RETURN (r);
14806 case ARROW_EXPR:
14807 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
14808 args, complain, in_decl);
14809 /* Remember that there was a reference to this entity. */
14810 if (DECL_P (op1))
14811 mark_used (op1);
14812 RETURN (build_x_arrow (input_location, op1, complain));
14814 case NEW_EXPR:
14816 tree placement = RECUR (TREE_OPERAND (t, 0));
14817 tree init = RECUR (TREE_OPERAND (t, 3));
14818 vec<tree, va_gc> *placement_vec;
14819 vec<tree, va_gc> *init_vec;
14820 tree ret;
14822 if (placement == NULL_TREE)
14823 placement_vec = NULL;
14824 else
14826 placement_vec = make_tree_vector ();
14827 for (; placement != NULL_TREE; placement = TREE_CHAIN (placement))
14828 vec_safe_push (placement_vec, TREE_VALUE (placement));
14831 /* If there was an initializer in the original tree, but it
14832 instantiated to an empty list, then we should pass a
14833 non-NULL empty vector to tell build_new that it was an
14834 empty initializer() rather than no initializer. This can
14835 only happen when the initializer is a pack expansion whose
14836 parameter packs are of length zero. */
14837 if (init == NULL_TREE && TREE_OPERAND (t, 3) == NULL_TREE)
14838 init_vec = NULL;
14839 else
14841 init_vec = make_tree_vector ();
14842 if (init == void_node)
14843 gcc_assert (init_vec != NULL);
14844 else
14846 for (; init != NULL_TREE; init = TREE_CHAIN (init))
14847 vec_safe_push (init_vec, TREE_VALUE (init));
14851 tree op1 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
14852 tree op2 = RECUR (TREE_OPERAND (t, 2));
14853 ret = build_new (&placement_vec, op1, op2, &init_vec,
14854 NEW_EXPR_USE_GLOBAL (t),
14855 complain);
14857 if (placement_vec != NULL)
14858 release_tree_vector (placement_vec);
14859 if (init_vec != NULL)
14860 release_tree_vector (init_vec);
14862 RETURN (ret);
14865 case DELETE_EXPR:
14867 tree op0 = RECUR (TREE_OPERAND (t, 0));
14868 tree op1 = RECUR (TREE_OPERAND (t, 1));
14869 RETURN (delete_sanity (op0, op1,
14870 DELETE_EXPR_USE_VEC (t),
14871 DELETE_EXPR_USE_GLOBAL (t),
14872 complain));
14875 case COMPOUND_EXPR:
14877 tree op0 = tsubst_copy_and_build (TREE_OPERAND (t, 0), args,
14878 complain & ~tf_decltype, in_decl,
14879 /*function_p=*/false,
14880 integral_constant_expression_p);
14881 RETURN (build_x_compound_expr (EXPR_LOCATION (t),
14882 op0,
14883 RECUR (TREE_OPERAND (t, 1)),
14884 complain|decltype_flag));
14887 case CALL_EXPR:
14889 tree function;
14890 vec<tree, va_gc> *call_args;
14891 unsigned int nargs, i;
14892 bool qualified_p;
14893 bool koenig_p;
14894 tree ret;
14896 function = CALL_EXPR_FN (t);
14897 /* When we parsed the expression, we determined whether or
14898 not Koenig lookup should be performed. */
14899 koenig_p = KOENIG_LOOKUP_P (t);
14900 if (TREE_CODE (function) == SCOPE_REF)
14902 qualified_p = true;
14903 function = tsubst_qualified_id (function, args, complain, in_decl,
14904 /*done=*/false,
14905 /*address_p=*/false);
14907 else if (koenig_p && identifier_p (function))
14909 /* Do nothing; calling tsubst_copy_and_build on an identifier
14910 would incorrectly perform unqualified lookup again.
14912 Note that we can also have an IDENTIFIER_NODE if the earlier
14913 unqualified lookup found a member function; in that case
14914 koenig_p will be false and we do want to do the lookup
14915 again to find the instantiated member function.
14917 FIXME but doing that causes c++/15272, so we need to stop
14918 using IDENTIFIER_NODE in that situation. */
14919 qualified_p = false;
14921 else
14923 if (TREE_CODE (function) == COMPONENT_REF)
14925 tree op = TREE_OPERAND (function, 1);
14927 qualified_p = (TREE_CODE (op) == SCOPE_REF
14928 || (BASELINK_P (op)
14929 && BASELINK_QUALIFIED_P (op)));
14931 else
14932 qualified_p = false;
14934 if (TREE_CODE (function) == ADDR_EXPR
14935 && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL)
14936 /* Avoid error about taking the address of a constructor. */
14937 function = TREE_OPERAND (function, 0);
14939 function = tsubst_copy_and_build (function, args, complain,
14940 in_decl,
14941 !qualified_p,
14942 integral_constant_expression_p);
14944 if (BASELINK_P (function))
14945 qualified_p = true;
14948 nargs = call_expr_nargs (t);
14949 call_args = make_tree_vector ();
14950 for (i = 0; i < nargs; ++i)
14952 tree arg = CALL_EXPR_ARG (t, i);
14954 if (!PACK_EXPANSION_P (arg))
14955 vec_safe_push (call_args, RECUR (CALL_EXPR_ARG (t, i)));
14956 else
14958 /* Expand the pack expansion and push each entry onto
14959 CALL_ARGS. */
14960 arg = tsubst_pack_expansion (arg, args, complain, in_decl);
14961 if (TREE_CODE (arg) == TREE_VEC)
14963 unsigned int len, j;
14965 len = TREE_VEC_LENGTH (arg);
14966 for (j = 0; j < len; ++j)
14968 tree value = TREE_VEC_ELT (arg, j);
14969 if (value != NULL_TREE)
14970 value = convert_from_reference (value);
14971 vec_safe_push (call_args, value);
14974 else
14976 /* A partial substitution. Add one entry. */
14977 vec_safe_push (call_args, arg);
14982 /* We do not perform argument-dependent lookup if normal
14983 lookup finds a non-function, in accordance with the
14984 expected resolution of DR 218. */
14985 if (koenig_p
14986 && ((is_overloaded_fn (function)
14987 /* If lookup found a member function, the Koenig lookup is
14988 not appropriate, even if an unqualified-name was used
14989 to denote the function. */
14990 && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
14991 || identifier_p (function))
14992 /* Only do this when substitution turns a dependent call
14993 into a non-dependent call. */
14994 && type_dependent_expression_p_push (t)
14995 && !any_type_dependent_arguments_p (call_args))
14996 function = perform_koenig_lookup (function, call_args, tf_none);
14998 if (identifier_p (function)
14999 && !any_type_dependent_arguments_p (call_args))
15001 if (koenig_p && (complain & tf_warning_or_error))
15003 /* For backwards compatibility and good diagnostics, try
15004 the unqualified lookup again if we aren't in SFINAE
15005 context. */
15006 tree unq = (tsubst_copy_and_build
15007 (function, args, complain, in_decl, true,
15008 integral_constant_expression_p));
15009 if (unq == error_mark_node)
15010 RETURN (error_mark_node);
15012 if (unq != function)
15014 tree fn = unq;
15015 if (INDIRECT_REF_P (fn))
15016 fn = TREE_OPERAND (fn, 0);
15017 if (TREE_CODE (fn) == COMPONENT_REF)
15018 fn = TREE_OPERAND (fn, 1);
15019 if (is_overloaded_fn (fn))
15020 fn = get_first_fn (fn);
15021 if (permerror (EXPR_LOC_OR_LOC (t, input_location),
15022 "%qD was not declared in this scope, "
15023 "and no declarations were found by "
15024 "argument-dependent lookup at the point "
15025 "of instantiation", function))
15027 if (!DECL_P (fn))
15028 /* Can't say anything more. */;
15029 else if (DECL_CLASS_SCOPE_P (fn))
15031 location_t loc = EXPR_LOC_OR_LOC (t,
15032 input_location);
15033 inform (loc,
15034 "declarations in dependent base %qT are "
15035 "not found by unqualified lookup",
15036 DECL_CLASS_CONTEXT (fn));
15037 if (current_class_ptr)
15038 inform (loc,
15039 "use %<this->%D%> instead", function);
15040 else
15041 inform (loc,
15042 "use %<%T::%D%> instead",
15043 current_class_name, function);
15045 else
15046 inform (0, "%q+D declared here, later in the "
15047 "translation unit", fn);
15049 function = unq;
15052 if (identifier_p (function))
15054 if (complain & tf_error)
15055 unqualified_name_lookup_error (function);
15056 release_tree_vector (call_args);
15057 RETURN (error_mark_node);
15061 /* Remember that there was a reference to this entity. */
15062 if (DECL_P (function))
15063 mark_used (function);
15065 /* Put back tf_decltype for the actual call. */
15066 complain |= decltype_flag;
15068 if (TREE_CODE (function) == OFFSET_REF)
15069 ret = build_offset_ref_call_from_tree (function, &call_args,
15070 complain);
15071 else if (TREE_CODE (function) == COMPONENT_REF)
15073 tree instance = TREE_OPERAND (function, 0);
15074 tree fn = TREE_OPERAND (function, 1);
15076 if (processing_template_decl
15077 && (type_dependent_expression_p (instance)
15078 || (!BASELINK_P (fn)
15079 && TREE_CODE (fn) != FIELD_DECL)
15080 || type_dependent_expression_p (fn)
15081 || any_type_dependent_arguments_p (call_args)))
15082 ret = build_nt_call_vec (function, call_args);
15083 else if (!BASELINK_P (fn))
15084 ret = finish_call_expr (function, &call_args,
15085 /*disallow_virtual=*/false,
15086 /*koenig_p=*/false,
15087 complain);
15088 else
15089 ret = (build_new_method_call
15090 (instance, fn,
15091 &call_args, NULL_TREE,
15092 qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL,
15093 /*fn_p=*/NULL,
15094 complain));
15096 else
15097 ret = finish_call_expr (function, &call_args,
15098 /*disallow_virtual=*/qualified_p,
15099 koenig_p,
15100 complain);
15102 release_tree_vector (call_args);
15104 RETURN (ret);
15107 case COND_EXPR:
15109 tree cond = RECUR (TREE_OPERAND (t, 0));
15110 tree exp1, exp2;
15112 if (TREE_CODE (cond) == INTEGER_CST)
15114 if (integer_zerop (cond))
15116 ++c_inhibit_evaluation_warnings;
15117 exp1 = RECUR (TREE_OPERAND (t, 1));
15118 --c_inhibit_evaluation_warnings;
15119 exp2 = RECUR (TREE_OPERAND (t, 2));
15121 else
15123 exp1 = RECUR (TREE_OPERAND (t, 1));
15124 ++c_inhibit_evaluation_warnings;
15125 exp2 = RECUR (TREE_OPERAND (t, 2));
15126 --c_inhibit_evaluation_warnings;
15129 else
15131 exp1 = RECUR (TREE_OPERAND (t, 1));
15132 exp2 = RECUR (TREE_OPERAND (t, 2));
15135 RETURN (build_x_conditional_expr (EXPR_LOCATION (t),
15136 cond, exp1, exp2, complain));
15139 case PSEUDO_DTOR_EXPR:
15141 tree op0 = RECUR (TREE_OPERAND (t, 0));
15142 tree op1 = RECUR (TREE_OPERAND (t, 1));
15143 tree op2 = tsubst (TREE_OPERAND (t, 2), args, complain, in_decl);
15144 RETURN (finish_pseudo_destructor_expr (op0, op1, op2,
15145 input_location));
15148 case TREE_LIST:
15150 tree purpose, value, chain;
15152 if (t == void_list_node)
15153 RETURN (t);
15155 if ((TREE_PURPOSE (t) && PACK_EXPANSION_P (TREE_PURPOSE (t)))
15156 || (TREE_VALUE (t) && PACK_EXPANSION_P (TREE_VALUE (t))))
15158 /* We have pack expansions, so expand those and
15159 create a new list out of it. */
15160 tree purposevec = NULL_TREE;
15161 tree valuevec = NULL_TREE;
15162 tree chain;
15163 int i, len = -1;
15165 /* Expand the argument expressions. */
15166 if (TREE_PURPOSE (t))
15167 purposevec = tsubst_pack_expansion (TREE_PURPOSE (t), args,
15168 complain, in_decl);
15169 if (TREE_VALUE (t))
15170 valuevec = tsubst_pack_expansion (TREE_VALUE (t), args,
15171 complain, in_decl);
15173 /* Build the rest of the list. */
15174 chain = TREE_CHAIN (t);
15175 if (chain && chain != void_type_node)
15176 chain = RECUR (chain);
15178 /* Determine the number of arguments. */
15179 if (purposevec && TREE_CODE (purposevec) == TREE_VEC)
15181 len = TREE_VEC_LENGTH (purposevec);
15182 gcc_assert (!valuevec || len == TREE_VEC_LENGTH (valuevec));
15184 else if (TREE_CODE (valuevec) == TREE_VEC)
15185 len = TREE_VEC_LENGTH (valuevec);
15186 else
15188 /* Since we only performed a partial substitution into
15189 the argument pack, we only RETURN (a single list
15190 node. */
15191 if (purposevec == TREE_PURPOSE (t)
15192 && valuevec == TREE_VALUE (t)
15193 && chain == TREE_CHAIN (t))
15194 RETURN (t);
15196 RETURN (tree_cons (purposevec, valuevec, chain));
15199 /* Convert the argument vectors into a TREE_LIST */
15200 i = len;
15201 while (i > 0)
15203 /* Grab the Ith values. */
15204 i--;
15205 purpose = purposevec ? TREE_VEC_ELT (purposevec, i)
15206 : NULL_TREE;
15207 value
15208 = valuevec ? convert_from_reference (TREE_VEC_ELT (valuevec, i))
15209 : NULL_TREE;
15211 /* Build the list (backwards). */
15212 chain = tree_cons (purpose, value, chain);
15215 RETURN (chain);
15218 purpose = TREE_PURPOSE (t);
15219 if (purpose)
15220 purpose = RECUR (purpose);
15221 value = TREE_VALUE (t);
15222 if (value)
15223 value = RECUR (value);
15224 chain = TREE_CHAIN (t);
15225 if (chain && chain != void_type_node)
15226 chain = RECUR (chain);
15227 if (purpose == TREE_PURPOSE (t)
15228 && value == TREE_VALUE (t)
15229 && chain == TREE_CHAIN (t))
15230 RETURN (t);
15231 RETURN (tree_cons (purpose, value, chain));
15234 case COMPONENT_REF:
15236 tree object;
15237 tree object_type;
15238 tree member;
15239 tree r;
15241 object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
15242 args, complain, in_decl);
15243 /* Remember that there was a reference to this entity. */
15244 if (DECL_P (object))
15245 mark_used (object);
15246 object_type = TREE_TYPE (object);
15248 member = TREE_OPERAND (t, 1);
15249 if (BASELINK_P (member))
15250 member = tsubst_baselink (member,
15251 non_reference (TREE_TYPE (object)),
15252 args, complain, in_decl);
15253 else
15254 member = tsubst_copy (member, args, complain, in_decl);
15255 if (member == error_mark_node)
15256 RETURN (error_mark_node);
15258 if (type_dependent_expression_p (object))
15259 /* We can't do much here. */;
15260 else if (!CLASS_TYPE_P (object_type))
15262 if (scalarish_type_p (object_type))
15264 tree s = NULL_TREE;
15265 tree dtor = member;
15267 if (TREE_CODE (dtor) == SCOPE_REF)
15269 s = TREE_OPERAND (dtor, 0);
15270 dtor = TREE_OPERAND (dtor, 1);
15272 if (TREE_CODE (dtor) == BIT_NOT_EXPR)
15274 dtor = TREE_OPERAND (dtor, 0);
15275 if (TYPE_P (dtor))
15276 RETURN (finish_pseudo_destructor_expr
15277 (object, s, dtor, input_location));
15281 else if (TREE_CODE (member) == SCOPE_REF
15282 && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
15284 /* Lookup the template functions now that we know what the
15285 scope is. */
15286 tree scope = TREE_OPERAND (member, 0);
15287 tree tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
15288 tree args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
15289 member = lookup_qualified_name (scope, tmpl,
15290 /*is_type_p=*/false,
15291 /*complain=*/false);
15292 if (BASELINK_P (member))
15294 BASELINK_FUNCTIONS (member)
15295 = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
15296 args);
15297 member = (adjust_result_of_qualified_name_lookup
15298 (member, BINFO_TYPE (BASELINK_BINFO (member)),
15299 object_type));
15301 else
15303 qualified_name_lookup_error (scope, tmpl, member,
15304 input_location);
15305 RETURN (error_mark_node);
15308 else if (TREE_CODE (member) == SCOPE_REF
15309 && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
15310 && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
15312 if (complain & tf_error)
15314 if (TYPE_P (TREE_OPERAND (member, 0)))
15315 error ("%qT is not a class or namespace",
15316 TREE_OPERAND (member, 0));
15317 else
15318 error ("%qD is not a class or namespace",
15319 TREE_OPERAND (member, 0));
15321 RETURN (error_mark_node);
15323 else if (TREE_CODE (member) == FIELD_DECL)
15325 r = finish_non_static_data_member (member, object, NULL_TREE);
15326 if (TREE_CODE (r) == COMPONENT_REF)
15327 REF_PARENTHESIZED_P (r) = REF_PARENTHESIZED_P (t);
15328 RETURN (r);
15331 r = finish_class_member_access_expr (object, member,
15332 /*template_p=*/false,
15333 complain);
15334 if (TREE_CODE (r) == COMPONENT_REF)
15335 REF_PARENTHESIZED_P (r) = REF_PARENTHESIZED_P (t);
15336 RETURN (r);
15339 case THROW_EXPR:
15340 RETURN (build_throw
15341 (RECUR (TREE_OPERAND (t, 0))));
15343 case CONSTRUCTOR:
15345 vec<constructor_elt, va_gc> *n;
15346 constructor_elt *ce;
15347 unsigned HOST_WIDE_INT idx;
15348 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
15349 bool process_index_p;
15350 int newlen;
15351 bool need_copy_p = false;
15352 tree r;
15354 if (type == error_mark_node)
15355 RETURN (error_mark_node);
15357 /* digest_init will do the wrong thing if we let it. */
15358 if (type && TYPE_PTRMEMFUNC_P (type))
15359 RETURN (t);
15361 /* We do not want to process the index of aggregate
15362 initializers as they are identifier nodes which will be
15363 looked up by digest_init. */
15364 process_index_p = !(type && MAYBE_CLASS_TYPE_P (type));
15366 n = vec_safe_copy (CONSTRUCTOR_ELTS (t));
15367 newlen = vec_safe_length (n);
15368 FOR_EACH_VEC_SAFE_ELT (n, idx, ce)
15370 if (ce->index && process_index_p
15371 /* An identifier index is looked up in the type
15372 being initialized, not the current scope. */
15373 && TREE_CODE (ce->index) != IDENTIFIER_NODE)
15374 ce->index = RECUR (ce->index);
15376 if (PACK_EXPANSION_P (ce->value))
15378 /* Substitute into the pack expansion. */
15379 ce->value = tsubst_pack_expansion (ce->value, args, complain,
15380 in_decl);
15382 if (ce->value == error_mark_node
15383 || PACK_EXPANSION_P (ce->value))
15385 else if (TREE_VEC_LENGTH (ce->value) == 1)
15386 /* Just move the argument into place. */
15387 ce->value = TREE_VEC_ELT (ce->value, 0);
15388 else
15390 /* Update the length of the final CONSTRUCTOR
15391 arguments vector, and note that we will need to
15392 copy.*/
15393 newlen = newlen + TREE_VEC_LENGTH (ce->value) - 1;
15394 need_copy_p = true;
15397 else
15398 ce->value = RECUR (ce->value);
15401 if (need_copy_p)
15403 vec<constructor_elt, va_gc> *old_n = n;
15405 vec_alloc (n, newlen);
15406 FOR_EACH_VEC_ELT (*old_n, idx, ce)
15408 if (TREE_CODE (ce->value) == TREE_VEC)
15410 int i, len = TREE_VEC_LENGTH (ce->value);
15411 for (i = 0; i < len; ++i)
15412 CONSTRUCTOR_APPEND_ELT (n, 0,
15413 TREE_VEC_ELT (ce->value, i));
15415 else
15416 CONSTRUCTOR_APPEND_ELT (n, 0, ce->value);
15420 r = build_constructor (init_list_type_node, n);
15421 CONSTRUCTOR_IS_DIRECT_INIT (r) = CONSTRUCTOR_IS_DIRECT_INIT (t);
15423 if (TREE_HAS_CONSTRUCTOR (t))
15424 RETURN (finish_compound_literal (type, r, complain));
15426 TREE_TYPE (r) = type;
15427 RETURN (r);
15430 case TYPEID_EXPR:
15432 tree operand_0 = TREE_OPERAND (t, 0);
15433 if (TYPE_P (operand_0))
15435 operand_0 = tsubst (operand_0, args, complain, in_decl);
15436 RETURN (get_typeid (operand_0, complain));
15438 else
15440 operand_0 = RECUR (operand_0);
15441 RETURN (build_typeid (operand_0, complain));
15445 case VAR_DECL:
15446 if (!args)
15447 RETURN (t);
15448 else if (DECL_PACK_P (t))
15450 /* We don't build decls for an instantiation of a
15451 variadic capture proxy, we instantiate the elements
15452 when needed. */
15453 gcc_assert (DECL_HAS_VALUE_EXPR_P (t));
15454 return RECUR (DECL_VALUE_EXPR (t));
15456 /* Fall through */
15458 case PARM_DECL:
15460 tree r = tsubst_copy (t, args, complain, in_decl);
15461 /* ??? We're doing a subset of finish_id_expression here. */
15462 if (VAR_P (r)
15463 && !processing_template_decl
15464 && !cp_unevaluated_operand
15465 && (TREE_STATIC (r) || DECL_EXTERNAL (r))
15466 && DECL_THREAD_LOCAL_P (r))
15468 if (tree wrap = get_tls_wrapper_fn (r))
15469 /* Replace an evaluated use of the thread_local variable with
15470 a call to its wrapper. */
15471 r = build_cxx_call (wrap, 0, NULL, tf_warning_or_error);
15473 else if (outer_automatic_var_p (r))
15474 r = process_outer_var_ref (r, complain);
15476 if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
15477 /* If the original type was a reference, we'll be wrapped in
15478 the appropriate INDIRECT_REF. */
15479 r = convert_from_reference (r);
15480 RETURN (r);
15483 case VA_ARG_EXPR:
15485 tree op0 = RECUR (TREE_OPERAND (t, 0));
15486 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
15487 RETURN (build_x_va_arg (EXPR_LOCATION (t), op0, type));
15490 case OFFSETOF_EXPR:
15491 RETURN (finish_offsetof (RECUR (TREE_OPERAND (t, 0)),
15492 EXPR_LOCATION (t)));
15494 case TRAIT_EXPR:
15496 tree type1 = tsubst (TRAIT_EXPR_TYPE1 (t), args,
15497 complain, in_decl);
15499 tree type2 = TRAIT_EXPR_TYPE2 (t);
15500 if (type2 && TREE_CODE (type2) == TREE_LIST)
15501 type2 = RECUR (type2);
15502 else if (type2)
15503 type2 = tsubst (type2, args, complain, in_decl);
15505 RETURN (finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2));
15508 case STMT_EXPR:
15510 tree old_stmt_expr = cur_stmt_expr;
15511 tree stmt_expr = begin_stmt_expr ();
15513 cur_stmt_expr = stmt_expr;
15514 tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl,
15515 integral_constant_expression_p);
15516 stmt_expr = finish_stmt_expr (stmt_expr, false);
15517 cur_stmt_expr = old_stmt_expr;
15519 /* If the resulting list of expression statement is empty,
15520 fold it further into void_node. */
15521 if (empty_expr_stmt_p (stmt_expr))
15522 stmt_expr = void_node;
15524 RETURN (stmt_expr);
15527 case LAMBDA_EXPR:
15529 tree r = build_lambda_expr ();
15531 tree type = tsubst (LAMBDA_EXPR_CLOSURE (t), args, complain, NULL_TREE);
15532 LAMBDA_EXPR_CLOSURE (r) = type;
15533 CLASSTYPE_LAMBDA_EXPR (type) = r;
15535 LAMBDA_EXPR_LOCATION (r)
15536 = LAMBDA_EXPR_LOCATION (t);
15537 LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (r)
15538 = LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (t);
15539 LAMBDA_EXPR_MUTABLE_P (r) = LAMBDA_EXPR_MUTABLE_P (t);
15540 LAMBDA_EXPR_DISCRIMINATOR (r)
15541 = (LAMBDA_EXPR_DISCRIMINATOR (t));
15542 /* For a function scope, we want to use tsubst so that we don't
15543 complain about referring to an auto function before its return
15544 type has been deduced. Otherwise, we want to use tsubst_copy so
15545 that we look up the existing field/parameter/variable rather
15546 than build a new one. */
15547 tree scope = LAMBDA_EXPR_EXTRA_SCOPE (t);
15548 if (scope && TREE_CODE (scope) == FUNCTION_DECL)
15549 scope = tsubst (scope, args, complain, in_decl);
15550 else if (scope && TREE_CODE (scope) == PARM_DECL)
15552 /* Look up the parameter we want directly, as tsubst_copy
15553 doesn't do what we need. */
15554 tree fn = tsubst (DECL_CONTEXT (scope), args, complain, in_decl);
15555 tree parm = FUNCTION_FIRST_USER_PARM (fn);
15556 while (DECL_PARM_INDEX (parm) != DECL_PARM_INDEX (scope))
15557 parm = DECL_CHAIN (parm);
15558 scope = parm;
15559 /* FIXME Work around the parm not having DECL_CONTEXT set. */
15560 if (DECL_CONTEXT (scope) == NULL_TREE)
15561 DECL_CONTEXT (scope) = fn;
15563 else
15564 scope = RECUR (scope);
15565 LAMBDA_EXPR_EXTRA_SCOPE (r) = scope;
15566 LAMBDA_EXPR_RETURN_TYPE (r)
15567 = tsubst (LAMBDA_EXPR_RETURN_TYPE (t), args, complain, in_decl);
15569 gcc_assert (LAMBDA_EXPR_THIS_CAPTURE (t) == NULL_TREE
15570 && LAMBDA_EXPR_PENDING_PROXIES (t) == NULL);
15572 /* Do this again now that LAMBDA_EXPR_EXTRA_SCOPE is set. */
15573 determine_visibility (TYPE_NAME (type));
15574 /* Now that we know visibility, instantiate the type so we have a
15575 declaration of the op() for later calls to lambda_function. */
15576 complete_type (type);
15578 LAMBDA_EXPR_THIS_CAPTURE (r) = NULL_TREE;
15580 RETURN (build_lambda_object (r));
15583 case TARGET_EXPR:
15584 /* We can get here for a constant initializer of non-dependent type.
15585 FIXME stop folding in cp_parser_initializer_clause. */
15587 tree r = get_target_expr_sfinae (RECUR (TARGET_EXPR_INITIAL (t)),
15588 complain);
15589 RETURN (r);
15592 case TRANSACTION_EXPR:
15593 RETURN (tsubst_expr(t, args, complain, in_decl,
15594 integral_constant_expression_p));
15596 case PAREN_EXPR:
15597 RETURN (finish_parenthesized_expr (RECUR (TREE_OPERAND (t, 0))));
15599 case VEC_PERM_EXPR:
15601 tree op0 = RECUR (TREE_OPERAND (t, 0));
15602 tree op1 = RECUR (TREE_OPERAND (t, 1));
15603 tree op2 = RECUR (TREE_OPERAND (t, 2));
15604 RETURN (build_x_vec_perm_expr (input_location, op0, op1, op2,
15605 complain));
15608 default:
15609 /* Handle Objective-C++ constructs, if appropriate. */
15611 tree subst
15612 = objcp_tsubst_copy_and_build (t, args, complain,
15613 in_decl, /*function_p=*/false);
15614 if (subst)
15615 RETURN (subst);
15617 RETURN (tsubst_copy (t, args, complain, in_decl));
15620 #undef RECUR
15621 #undef RETURN
15622 out:
15623 input_location = loc;
15624 return retval;
15627 /* Verify that the instantiated ARGS are valid. For type arguments,
15628 make sure that the type's linkage is ok. For non-type arguments,
15629 make sure they are constants if they are integral or enumerations.
15630 Emit an error under control of COMPLAIN, and return TRUE on error. */
15632 static bool
15633 check_instantiated_arg (tree tmpl, tree t, tsubst_flags_t complain)
15635 if (dependent_template_arg_p (t))
15636 return false;
15637 if (ARGUMENT_PACK_P (t))
15639 tree vec = ARGUMENT_PACK_ARGS (t);
15640 int len = TREE_VEC_LENGTH (vec);
15641 bool result = false;
15642 int i;
15644 for (i = 0; i < len; ++i)
15645 if (check_instantiated_arg (tmpl, TREE_VEC_ELT (vec, i), complain))
15646 result = true;
15647 return result;
15649 else if (TYPE_P (t))
15651 /* [basic.link]: A name with no linkage (notably, the name
15652 of a class or enumeration declared in a local scope)
15653 shall not be used to declare an entity with linkage.
15654 This implies that names with no linkage cannot be used as
15655 template arguments
15657 DR 757 relaxes this restriction for C++0x. */
15658 tree nt = (cxx_dialect > cxx98 ? NULL_TREE
15659 : no_linkage_check (t, /*relaxed_p=*/false));
15661 if (nt)
15663 /* DR 488 makes use of a type with no linkage cause
15664 type deduction to fail. */
15665 if (complain & tf_error)
15667 if (TYPE_ANONYMOUS_P (nt))
15668 error ("%qT is/uses anonymous type", t);
15669 else
15670 error ("template argument for %qD uses local type %qT",
15671 tmpl, t);
15673 return true;
15675 /* In order to avoid all sorts of complications, we do not
15676 allow variably-modified types as template arguments. */
15677 else if (variably_modified_type_p (t, NULL_TREE))
15679 if (complain & tf_error)
15680 error ("%qT is a variably modified type", t);
15681 return true;
15684 /* Class template and alias template arguments should be OK. */
15685 else if (DECL_TYPE_TEMPLATE_P (t))
15687 /* A non-type argument of integral or enumerated type must be a
15688 constant. */
15689 else if (TREE_TYPE (t)
15690 && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
15691 && !TREE_CONSTANT (t))
15693 if (complain & tf_error)
15694 error ("integral expression %qE is not constant", t);
15695 return true;
15697 return false;
15700 static bool
15701 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
15703 int ix, len = DECL_NTPARMS (tmpl);
15704 bool result = false;
15706 for (ix = 0; ix != len; ix++)
15708 if (check_instantiated_arg (tmpl, TREE_VEC_ELT (args, ix), complain))
15709 result = true;
15711 if (result && (complain & tf_error))
15712 error (" trying to instantiate %qD", tmpl);
15713 return result;
15716 /* We're out of SFINAE context now, so generate diagnostics for the access
15717 errors we saw earlier when instantiating D from TMPL and ARGS. */
15719 static void
15720 recheck_decl_substitution (tree d, tree tmpl, tree args)
15722 tree pattern = DECL_TEMPLATE_RESULT (tmpl);
15723 tree type = TREE_TYPE (pattern);
15724 location_t loc = input_location;
15726 push_access_scope (d);
15727 push_deferring_access_checks (dk_no_deferred);
15728 input_location = DECL_SOURCE_LOCATION (pattern);
15729 tsubst (type, args, tf_warning_or_error, d);
15730 input_location = loc;
15731 pop_deferring_access_checks ();
15732 pop_access_scope (d);
15735 /* Instantiate the indicated variable, function, or alias template TMPL with
15736 the template arguments in TARG_PTR. */
15738 static tree
15739 instantiate_template_1 (tree tmpl, tree orig_args, tsubst_flags_t complain)
15741 tree targ_ptr = orig_args;
15742 tree fndecl;
15743 tree gen_tmpl;
15744 tree spec;
15745 bool access_ok = true;
15747 if (tmpl == error_mark_node)
15748 return error_mark_node;
15750 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
15752 /* If this function is a clone, handle it specially. */
15753 if (DECL_CLONED_FUNCTION_P (tmpl))
15755 tree spec;
15756 tree clone;
15758 /* Use DECL_ABSTRACT_ORIGIN because only FUNCTION_DECLs have
15759 DECL_CLONED_FUNCTION. */
15760 spec = instantiate_template (DECL_ABSTRACT_ORIGIN (tmpl),
15761 targ_ptr, complain);
15762 if (spec == error_mark_node)
15763 return error_mark_node;
15765 /* Look for the clone. */
15766 FOR_EACH_CLONE (clone, spec)
15767 if (DECL_NAME (clone) == DECL_NAME (tmpl))
15768 return clone;
15769 /* We should always have found the clone by now. */
15770 gcc_unreachable ();
15771 return NULL_TREE;
15774 if (targ_ptr == error_mark_node)
15775 return error_mark_node;
15777 /* Check to see if we already have this specialization. */
15778 gen_tmpl = most_general_template (tmpl);
15779 if (tmpl != gen_tmpl)
15780 /* The TMPL is a partial instantiation. To get a full set of
15781 arguments we must add the arguments used to perform the
15782 partial instantiation. */
15783 targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
15784 targ_ptr);
15786 /* It would be nice to avoid hashing here and then again in tsubst_decl,
15787 but it doesn't seem to be on the hot path. */
15788 spec = retrieve_specialization (gen_tmpl, targ_ptr, 0);
15790 gcc_assert (tmpl == gen_tmpl
15791 || ((fndecl = retrieve_specialization (tmpl, orig_args, 0))
15792 == spec)
15793 || fndecl == NULL_TREE);
15795 if (spec != NULL_TREE)
15797 if (FNDECL_HAS_ACCESS_ERRORS (spec))
15799 if (complain & tf_error)
15800 recheck_decl_substitution (spec, gen_tmpl, targ_ptr);
15801 return error_mark_node;
15803 return spec;
15806 if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
15807 complain))
15808 return error_mark_node;
15810 /* We are building a FUNCTION_DECL, during which the access of its
15811 parameters and return types have to be checked. However this
15812 FUNCTION_DECL which is the desired context for access checking
15813 is not built yet. We solve this chicken-and-egg problem by
15814 deferring all checks until we have the FUNCTION_DECL. */
15815 push_deferring_access_checks (dk_deferred);
15817 /* Instantiation of the function happens in the context of the function
15818 template, not the context of the overload resolution we're doing. */
15819 push_to_top_level ();
15820 /* If there are dependent arguments, e.g. because we're doing partial
15821 ordering, make sure processing_template_decl stays set. */
15822 if (uses_template_parms (targ_ptr))
15823 ++processing_template_decl;
15824 if (DECL_CLASS_SCOPE_P (gen_tmpl))
15826 tree ctx = tsubst (DECL_CONTEXT (gen_tmpl), targ_ptr,
15827 complain, gen_tmpl);
15828 push_nested_class (ctx);
15830 /* Substitute template parameters to obtain the specialization. */
15831 fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
15832 targ_ptr, complain, gen_tmpl);
15833 if (DECL_CLASS_SCOPE_P (gen_tmpl))
15834 pop_nested_class ();
15835 pop_from_top_level ();
15837 if (fndecl == error_mark_node)
15839 pop_deferring_access_checks ();
15840 return error_mark_node;
15843 /* The DECL_TI_TEMPLATE should always be the immediate parent
15844 template, not the most general template. */
15845 DECL_TI_TEMPLATE (fndecl) = tmpl;
15847 /* Now we know the specialization, compute access previously
15848 deferred. */
15849 push_access_scope (fndecl);
15850 if (!perform_deferred_access_checks (complain))
15851 access_ok = false;
15852 pop_access_scope (fndecl);
15853 pop_deferring_access_checks ();
15855 /* If we've just instantiated the main entry point for a function,
15856 instantiate all the alternate entry points as well. We do this
15857 by cloning the instantiation of the main entry point, not by
15858 instantiating the template clones. */
15859 if (DECL_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (DECL_CHAIN (gen_tmpl)))
15860 clone_function_decl (fndecl, /*update_method_vec_p=*/0);
15862 if (!access_ok)
15864 if (!(complain & tf_error))
15866 /* Remember to reinstantiate when we're out of SFINAE so the user
15867 can see the errors. */
15868 FNDECL_HAS_ACCESS_ERRORS (fndecl) = true;
15870 return error_mark_node;
15872 return fndecl;
15875 /* Wrapper for instantiate_template_1. */
15877 tree
15878 instantiate_template (tree tmpl, tree orig_args, tsubst_flags_t complain)
15880 tree ret;
15881 timevar_push (TV_TEMPLATE_INST);
15882 ret = instantiate_template_1 (tmpl, orig_args, complain);
15883 timevar_pop (TV_TEMPLATE_INST);
15884 return ret;
15887 /* Instantiate the alias template TMPL with ARGS. Also push a template
15888 instantiation level, which instantiate_template doesn't do because
15889 functions and variables have sufficient context established by the
15890 callers. */
15892 static tree
15893 instantiate_alias_template (tree tmpl, tree args, tsubst_flags_t complain)
15895 struct pending_template *old_last_pend = last_pending_template;
15896 struct tinst_level *old_error_tinst = last_error_tinst_level;
15897 if (tmpl == error_mark_node || args == error_mark_node)
15898 return error_mark_node;
15899 tree tinst = build_tree_list (tmpl, args);
15900 if (!push_tinst_level (tinst))
15902 ggc_free (tinst);
15903 return error_mark_node;
15906 args =
15907 coerce_innermost_template_parms (DECL_TEMPLATE_PARMS (tmpl),
15908 args, tmpl, complain,
15909 /*require_all_args=*/true,
15910 /*use_default_args=*/true);
15912 tree r = instantiate_template (tmpl, args, complain);
15913 pop_tinst_level ();
15914 /* We can't free this if a pending_template entry or last_error_tinst_level
15915 is pointing at it. */
15916 if (last_pending_template == old_last_pend
15917 && last_error_tinst_level == old_error_tinst)
15918 ggc_free (tinst);
15920 return r;
15923 /* PARM is a template parameter pack for FN. Returns true iff
15924 PARM is used in a deducible way in the argument list of FN. */
15926 static bool
15927 pack_deducible_p (tree parm, tree fn)
15929 tree t = FUNCTION_FIRST_USER_PARMTYPE (fn);
15930 for (; t; t = TREE_CHAIN (t))
15932 tree type = TREE_VALUE (t);
15933 tree packs;
15934 if (!PACK_EXPANSION_P (type))
15935 continue;
15936 for (packs = PACK_EXPANSION_PARAMETER_PACKS (type);
15937 packs; packs = TREE_CHAIN (packs))
15938 if (template_args_equal (TREE_VALUE (packs), parm))
15940 /* The template parameter pack is used in a function parameter
15941 pack. If this is the end of the parameter list, the
15942 template parameter pack is deducible. */
15943 if (TREE_CHAIN (t) == void_list_node)
15944 return true;
15945 else
15946 /* Otherwise, not. Well, it could be deduced from
15947 a non-pack parameter, but doing so would end up with
15948 a deduction mismatch, so don't bother. */
15949 return false;
15952 /* The template parameter pack isn't used in any function parameter
15953 packs, but it might be used deeper, e.g. tuple<Args...>. */
15954 return true;
15957 /* The FN is a TEMPLATE_DECL for a function. ARGS is an array with
15958 NARGS elements of the arguments that are being used when calling
15959 it. TARGS is a vector into which the deduced template arguments
15960 are placed.
15962 Returns either a FUNCTION_DECL for the matching specialization of FN or
15963 NULL_TREE if no suitable specialization can be found. If EXPLAIN_P is
15964 true, diagnostics will be printed to explain why it failed.
15966 If FN is a conversion operator, or we are trying to produce a specific
15967 specialization, RETURN_TYPE is the return type desired.
15969 The EXPLICIT_TARGS are explicit template arguments provided via a
15970 template-id.
15972 The parameter STRICT is one of:
15974 DEDUCE_CALL:
15975 We are deducing arguments for a function call, as in
15976 [temp.deduct.call].
15978 DEDUCE_CONV:
15979 We are deducing arguments for a conversion function, as in
15980 [temp.deduct.conv].
15982 DEDUCE_EXACT:
15983 We are deducing arguments when doing an explicit instantiation
15984 as in [temp.explicit], when determining an explicit specialization
15985 as in [temp.expl.spec], or when taking the address of a function
15986 template, as in [temp.deduct.funcaddr]. */
15988 tree
15989 fn_type_unification (tree fn,
15990 tree explicit_targs,
15991 tree targs,
15992 const tree *args,
15993 unsigned int nargs,
15994 tree return_type,
15995 unification_kind_t strict,
15996 int flags,
15997 bool explain_p,
15998 bool decltype_p)
16000 tree parms;
16001 tree fntype;
16002 tree decl = NULL_TREE;
16003 tsubst_flags_t complain = (explain_p ? tf_warning_or_error : tf_none);
16004 bool ok;
16005 static int deduction_depth;
16006 struct pending_template *old_last_pend = last_pending_template;
16007 struct tinst_level *old_error_tinst = last_error_tinst_level;
16008 tree tparms = DECL_INNERMOST_TEMPLATE_PARMS (fn);
16009 tree tinst;
16010 tree r = error_mark_node;
16012 if (decltype_p)
16013 complain |= tf_decltype;
16015 /* In C++0x, it's possible to have a function template whose type depends
16016 on itself recursively. This is most obvious with decltype, but can also
16017 occur with enumeration scope (c++/48969). So we need to catch infinite
16018 recursion and reject the substitution at deduction time; this function
16019 will return error_mark_node for any repeated substitution.
16021 This also catches excessive recursion such as when f<N> depends on
16022 f<N-1> across all integers, and returns error_mark_node for all the
16023 substitutions back up to the initial one.
16025 This is, of course, not reentrant. */
16026 if (excessive_deduction_depth)
16027 return error_mark_node;
16028 tinst = build_tree_list (fn, NULL_TREE);
16029 ++deduction_depth;
16031 gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
16033 fntype = TREE_TYPE (fn);
16034 if (explicit_targs)
16036 /* [temp.deduct]
16038 The specified template arguments must match the template
16039 parameters in kind (i.e., type, nontype, template), and there
16040 must not be more arguments than there are parameters;
16041 otherwise type deduction fails.
16043 Nontype arguments must match the types of the corresponding
16044 nontype template parameters, or must be convertible to the
16045 types of the corresponding nontype parameters as specified in
16046 _temp.arg.nontype_, otherwise type deduction fails.
16048 All references in the function type of the function template
16049 to the corresponding template parameters are replaced by the
16050 specified template argument values. If a substitution in a
16051 template parameter or in the function type of the function
16052 template results in an invalid type, type deduction fails. */
16053 int i, len = TREE_VEC_LENGTH (tparms);
16054 location_t loc = input_location;
16055 bool incomplete = false;
16057 /* Adjust any explicit template arguments before entering the
16058 substitution context. */
16059 explicit_targs
16060 = (coerce_template_parms (tparms, explicit_targs, NULL_TREE,
16061 complain,
16062 /*require_all_args=*/false,
16063 /*use_default_args=*/false));
16064 if (explicit_targs == error_mark_node)
16065 goto fail;
16067 /* Substitute the explicit args into the function type. This is
16068 necessary so that, for instance, explicitly declared function
16069 arguments can match null pointed constants. If we were given
16070 an incomplete set of explicit args, we must not do semantic
16071 processing during substitution as we could create partial
16072 instantiations. */
16073 for (i = 0; i < len; i++)
16075 tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
16076 bool parameter_pack = false;
16077 tree targ = TREE_VEC_ELT (explicit_targs, i);
16079 /* Dig out the actual parm. */
16080 if (TREE_CODE (parm) == TYPE_DECL
16081 || TREE_CODE (parm) == TEMPLATE_DECL)
16083 parm = TREE_TYPE (parm);
16084 parameter_pack = TEMPLATE_TYPE_PARAMETER_PACK (parm);
16086 else if (TREE_CODE (parm) == PARM_DECL)
16088 parm = DECL_INITIAL (parm);
16089 parameter_pack = TEMPLATE_PARM_PARAMETER_PACK (parm);
16092 if (!parameter_pack && targ == NULL_TREE)
16093 /* No explicit argument for this template parameter. */
16094 incomplete = true;
16096 if (parameter_pack && pack_deducible_p (parm, fn))
16098 /* Mark the argument pack as "incomplete". We could
16099 still deduce more arguments during unification.
16100 We remove this mark in type_unification_real. */
16101 if (targ)
16103 ARGUMENT_PACK_INCOMPLETE_P(targ) = 1;
16104 ARGUMENT_PACK_EXPLICIT_ARGS (targ)
16105 = ARGUMENT_PACK_ARGS (targ);
16108 /* We have some incomplete argument packs. */
16109 incomplete = true;
16113 TREE_VALUE (tinst) = explicit_targs;
16114 if (!push_tinst_level (tinst))
16116 excessive_deduction_depth = true;
16117 goto fail;
16119 processing_template_decl += incomplete;
16120 input_location = DECL_SOURCE_LOCATION (fn);
16121 /* Ignore any access checks; we'll see them again in
16122 instantiate_template and they might have the wrong
16123 access path at this point. */
16124 push_deferring_access_checks (dk_deferred);
16125 fntype = tsubst (TREE_TYPE (fn), explicit_targs,
16126 complain | tf_partial, NULL_TREE);
16127 pop_deferring_access_checks ();
16128 input_location = loc;
16129 processing_template_decl -= incomplete;
16130 pop_tinst_level ();
16132 if (fntype == error_mark_node)
16133 goto fail;
16135 /* Place the explicitly specified arguments in TARGS. */
16136 for (i = NUM_TMPL_ARGS (explicit_targs); i--;)
16137 TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (explicit_targs, i);
16140 /* Never do unification on the 'this' parameter. */
16141 parms = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (fntype));
16143 if (return_type)
16145 tree *new_args;
16147 parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
16148 new_args = XALLOCAVEC (tree, nargs + 1);
16149 new_args[0] = return_type;
16150 memcpy (new_args + 1, args, nargs * sizeof (tree));
16151 args = new_args;
16152 ++nargs;
16155 /* We allow incomplete unification without an error message here
16156 because the standard doesn't seem to explicitly prohibit it. Our
16157 callers must be ready to deal with unification failures in any
16158 event. */
16160 TREE_VALUE (tinst) = targs;
16161 /* If we aren't explaining yet, push tinst context so we can see where
16162 any errors (e.g. from class instantiations triggered by instantiation
16163 of default template arguments) come from. If we are explaining, this
16164 context is redundant. */
16165 if (!explain_p && !push_tinst_level (tinst))
16167 excessive_deduction_depth = true;
16168 goto fail;
16171 /* type_unification_real will pass back any access checks from default
16172 template argument substitution. */
16173 vec<deferred_access_check, va_gc> *checks;
16174 checks = NULL;
16176 ok = !type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
16177 targs, parms, args, nargs, /*subr=*/0,
16178 strict, flags, &checks, explain_p);
16179 if (!explain_p)
16180 pop_tinst_level ();
16181 if (!ok)
16182 goto fail;
16184 /* Now that we have bindings for all of the template arguments,
16185 ensure that the arguments deduced for the template template
16186 parameters have compatible template parameter lists. We cannot
16187 check this property before we have deduced all template
16188 arguments, because the template parameter types of a template
16189 template parameter might depend on prior template parameters
16190 deduced after the template template parameter. The following
16191 ill-formed example illustrates this issue:
16193 template<typename T, template<T> class C> void f(C<5>, T);
16195 template<int N> struct X {};
16197 void g() {
16198 f(X<5>(), 5l); // error: template argument deduction fails
16201 The template parameter list of 'C' depends on the template type
16202 parameter 'T', but 'C' is deduced to 'X' before 'T' is deduced to
16203 'long'. Thus, we can't check that 'C' cannot bind to 'X' at the
16204 time that we deduce 'C'. */
16205 if (!template_template_parm_bindings_ok_p
16206 (DECL_INNERMOST_TEMPLATE_PARMS (fn), targs))
16208 unify_inconsistent_template_template_parameters (explain_p);
16209 goto fail;
16212 /* All is well so far. Now, check:
16214 [temp.deduct]
16216 When all template arguments have been deduced, all uses of
16217 template parameters in nondeduced contexts are replaced with
16218 the corresponding deduced argument values. If the
16219 substitution results in an invalid type, as described above,
16220 type deduction fails. */
16221 TREE_VALUE (tinst) = targs;
16222 if (!push_tinst_level (tinst))
16224 excessive_deduction_depth = true;
16225 goto fail;
16228 /* Also collect access checks from the instantiation. */
16229 reopen_deferring_access_checks (checks);
16231 decl = instantiate_template (fn, targs, complain);
16233 checks = get_deferred_access_checks ();
16234 pop_deferring_access_checks ();
16236 pop_tinst_level ();
16238 if (decl == error_mark_node)
16239 goto fail;
16241 /* Now perform any access checks encountered during substitution. */
16242 push_access_scope (decl);
16243 ok = perform_access_checks (checks, complain);
16244 pop_access_scope (decl);
16245 if (!ok)
16246 goto fail;
16248 /* If we're looking for an exact match, check that what we got
16249 is indeed an exact match. It might not be if some template
16250 parameters are used in non-deduced contexts. But don't check
16251 for an exact match if we have dependent template arguments;
16252 in that case we're doing partial ordering, and we already know
16253 that we have two candidates that will provide the actual type. */
16254 if (strict == DEDUCE_EXACT && !any_dependent_template_arguments_p (targs))
16256 tree substed = TREE_TYPE (decl);
16257 unsigned int i;
16259 tree sarg
16260 = skip_artificial_parms_for (decl, TYPE_ARG_TYPES (substed));
16261 if (return_type)
16262 sarg = tree_cons (NULL_TREE, TREE_TYPE (substed), sarg);
16263 for (i = 0; i < nargs && sarg; ++i, sarg = TREE_CHAIN (sarg))
16264 if (!same_type_p (args[i], TREE_VALUE (sarg)))
16266 unify_type_mismatch (explain_p, args[i],
16267 TREE_VALUE (sarg));
16268 goto fail;
16272 r = decl;
16274 fail:
16275 --deduction_depth;
16276 if (excessive_deduction_depth)
16278 if (deduction_depth == 0)
16279 /* Reset once we're all the way out. */
16280 excessive_deduction_depth = false;
16283 /* We can't free this if a pending_template entry or last_error_tinst_level
16284 is pointing at it. */
16285 if (last_pending_template == old_last_pend
16286 && last_error_tinst_level == old_error_tinst)
16287 ggc_free (tinst);
16289 return r;
16292 /* Adjust types before performing type deduction, as described in
16293 [temp.deduct.call] and [temp.deduct.conv]. The rules in these two
16294 sections are symmetric. PARM is the type of a function parameter
16295 or the return type of the conversion function. ARG is the type of
16296 the argument passed to the call, or the type of the value
16297 initialized with the result of the conversion function.
16298 ARG_EXPR is the original argument expression, which may be null. */
16300 static int
16301 maybe_adjust_types_for_deduction (unification_kind_t strict,
16302 tree* parm,
16303 tree* arg,
16304 tree arg_expr)
16306 int result = 0;
16308 switch (strict)
16310 case DEDUCE_CALL:
16311 break;
16313 case DEDUCE_CONV:
16315 /* Swap PARM and ARG throughout the remainder of this
16316 function; the handling is precisely symmetric since PARM
16317 will initialize ARG rather than vice versa. */
16318 tree* temp = parm;
16319 parm = arg;
16320 arg = temp;
16321 break;
16324 case DEDUCE_EXACT:
16325 /* Core issue #873: Do the DR606 thing (see below) for these cases,
16326 too, but here handle it by stripping the reference from PARM
16327 rather than by adding it to ARG. */
16328 if (TREE_CODE (*parm) == REFERENCE_TYPE
16329 && TYPE_REF_IS_RVALUE (*parm)
16330 && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
16331 && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
16332 && TREE_CODE (*arg) == REFERENCE_TYPE
16333 && !TYPE_REF_IS_RVALUE (*arg))
16334 *parm = TREE_TYPE (*parm);
16335 /* Nothing else to do in this case. */
16336 return 0;
16338 default:
16339 gcc_unreachable ();
16342 if (TREE_CODE (*parm) != REFERENCE_TYPE)
16344 /* [temp.deduct.call]
16346 If P is not a reference type:
16348 --If A is an array type, the pointer type produced by the
16349 array-to-pointer standard conversion (_conv.array_) is
16350 used in place of A for type deduction; otherwise,
16352 --If A is a function type, the pointer type produced by
16353 the function-to-pointer standard conversion
16354 (_conv.func_) is used in place of A for type deduction;
16355 otherwise,
16357 --If A is a cv-qualified type, the top level
16358 cv-qualifiers of A's type are ignored for type
16359 deduction. */
16360 if (TREE_CODE (*arg) == ARRAY_TYPE)
16361 *arg = build_pointer_type (TREE_TYPE (*arg));
16362 else if (TREE_CODE (*arg) == FUNCTION_TYPE)
16363 *arg = build_pointer_type (*arg);
16364 else
16365 *arg = TYPE_MAIN_VARIANT (*arg);
16368 /* From C++0x [14.8.2.1/3 temp.deduct.call] (after DR606), "If P is
16369 of the form T&&, where T is a template parameter, and the argument
16370 is an lvalue, T is deduced as A& */
16371 if (TREE_CODE (*parm) == REFERENCE_TYPE
16372 && TYPE_REF_IS_RVALUE (*parm)
16373 && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
16374 && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
16375 && (arg_expr ? real_lvalue_p (arg_expr)
16376 /* try_one_overload doesn't provide an arg_expr, but
16377 functions are always lvalues. */
16378 : TREE_CODE (*arg) == FUNCTION_TYPE))
16379 *arg = build_reference_type (*arg);
16381 /* [temp.deduct.call]
16383 If P is a cv-qualified type, the top level cv-qualifiers
16384 of P's type are ignored for type deduction. If P is a
16385 reference type, the type referred to by P is used for
16386 type deduction. */
16387 *parm = TYPE_MAIN_VARIANT (*parm);
16388 if (TREE_CODE (*parm) == REFERENCE_TYPE)
16390 *parm = TREE_TYPE (*parm);
16391 result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
16394 /* DR 322. For conversion deduction, remove a reference type on parm
16395 too (which has been swapped into ARG). */
16396 if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
16397 *arg = TREE_TYPE (*arg);
16399 return result;
16402 /* Subroutine of unify_one_argument. PARM is a function parameter of a
16403 template which does contain any deducible template parameters; check if
16404 ARG is a suitable match for it. STRICT, FLAGS and EXPLAIN_P are as in
16405 unify_one_argument. */
16407 static int
16408 check_non_deducible_conversion (tree parm, tree arg, int strict,
16409 int flags, bool explain_p)
16411 tree type;
16413 if (!TYPE_P (arg))
16414 type = TREE_TYPE (arg);
16415 else
16416 type = arg;
16418 if (same_type_p (parm, type))
16419 return unify_success (explain_p);
16421 if (strict == DEDUCE_CONV)
16423 if (can_convert_arg (type, parm, NULL_TREE, flags,
16424 explain_p ? tf_warning_or_error : tf_none))
16425 return unify_success (explain_p);
16427 else if (strict != DEDUCE_EXACT)
16429 if (can_convert_arg (parm, type,
16430 TYPE_P (arg) ? NULL_TREE : arg,
16431 flags, explain_p ? tf_warning_or_error : tf_none))
16432 return unify_success (explain_p);
16435 if (strict == DEDUCE_EXACT)
16436 return unify_type_mismatch (explain_p, parm, arg);
16437 else
16438 return unify_arg_conversion (explain_p, parm, type, arg);
16441 static bool uses_deducible_template_parms (tree type);
16443 /* Returns true iff the expression EXPR is one from which a template
16444 argument can be deduced. In other words, if it's an undecorated
16445 use of a template non-type parameter. */
16447 static bool
16448 deducible_expression (tree expr)
16450 return (TREE_CODE (expr) == TEMPLATE_PARM_INDEX);
16453 /* Returns true iff the array domain DOMAIN uses a template parameter in a
16454 deducible way; that is, if it has a max value of <PARM> - 1. */
16456 static bool
16457 deducible_array_bound (tree domain)
16459 if (domain == NULL_TREE)
16460 return false;
16462 tree max = TYPE_MAX_VALUE (domain);
16463 if (TREE_CODE (max) != MINUS_EXPR)
16464 return false;
16466 return deducible_expression (TREE_OPERAND (max, 0));
16469 /* Returns true iff the template arguments ARGS use a template parameter
16470 in a deducible way. */
16472 static bool
16473 deducible_template_args (tree args)
16475 for (int i = 0; i < TREE_VEC_LENGTH (args); ++i)
16477 bool deducible;
16478 tree elt = TREE_VEC_ELT (args, i);
16479 if (ARGUMENT_PACK_P (elt))
16480 deducible = deducible_template_args (ARGUMENT_PACK_ARGS (elt));
16481 else
16483 if (PACK_EXPANSION_P (elt))
16484 elt = PACK_EXPANSION_PATTERN (elt);
16485 if (TREE_CODE (elt) == TEMPLATE_TEMPLATE_PARM)
16486 deducible = true;
16487 else if (TYPE_P (elt))
16488 deducible = uses_deducible_template_parms (elt);
16489 else
16490 deducible = deducible_expression (elt);
16492 if (deducible)
16493 return true;
16495 return false;
16498 /* Returns true iff TYPE contains any deducible references to template
16499 parameters, as per 14.8.2.5. */
16501 static bool
16502 uses_deducible_template_parms (tree type)
16504 if (PACK_EXPANSION_P (type))
16505 type = PACK_EXPANSION_PATTERN (type);
16507 /* T
16508 cv-list T
16509 TT<T>
16510 TT<i>
16511 TT<> */
16512 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
16513 || TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
16514 return true;
16516 /* T*
16518 T&& */
16519 if (POINTER_TYPE_P (type))
16520 return uses_deducible_template_parms (TREE_TYPE (type));
16522 /* T[integer-constant ]
16523 type [i] */
16524 if (TREE_CODE (type) == ARRAY_TYPE)
16525 return (uses_deducible_template_parms (TREE_TYPE (type))
16526 || deducible_array_bound (TYPE_DOMAIN (type)));
16528 /* T type ::*
16529 type T::*
16530 T T::*
16531 T (type ::*)()
16532 type (T::*)()
16533 type (type ::*)(T)
16534 type (T::*)(T)
16535 T (type ::*)(T)
16536 T (T::*)()
16537 T (T::*)(T) */
16538 if (TYPE_PTRMEM_P (type))
16539 return (uses_deducible_template_parms (TYPE_PTRMEM_CLASS_TYPE (type))
16540 || (uses_deducible_template_parms
16541 (TYPE_PTRMEM_POINTED_TO_TYPE (type))));
16543 /* template-name <T> (where template-name refers to a class template)
16544 template-name <i> (where template-name refers to a class template) */
16545 if (CLASS_TYPE_P (type)
16546 && CLASSTYPE_TEMPLATE_INFO (type)
16547 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (type)))
16548 return deducible_template_args (INNERMOST_TEMPLATE_ARGS
16549 (CLASSTYPE_TI_ARGS (type)));
16551 /* type (T)
16553 T(T) */
16554 if (TREE_CODE (type) == FUNCTION_TYPE
16555 || TREE_CODE (type) == METHOD_TYPE)
16557 if (uses_deducible_template_parms (TREE_TYPE (type)))
16558 return true;
16559 tree parm = TYPE_ARG_TYPES (type);
16560 if (TREE_CODE (type) == METHOD_TYPE)
16561 parm = TREE_CHAIN (parm);
16562 for (; parm; parm = TREE_CHAIN (parm))
16563 if (uses_deducible_template_parms (TREE_VALUE (parm)))
16564 return true;
16567 return false;
16570 /* Subroutine of type_unification_real and unify_pack_expansion to
16571 handle unification of a single P/A pair. Parameters are as
16572 for those functions. */
16574 static int
16575 unify_one_argument (tree tparms, tree targs, tree parm, tree arg,
16576 int subr, unification_kind_t strict, int flags,
16577 bool explain_p)
16579 tree arg_expr = NULL_TREE;
16580 int arg_strict;
16582 if (arg == error_mark_node || parm == error_mark_node)
16583 return unify_invalid (explain_p);
16584 if (arg == unknown_type_node)
16585 /* We can't deduce anything from this, but we might get all the
16586 template args from other function args. */
16587 return unify_success (explain_p);
16589 /* Implicit conversions (Clause 4) will be performed on a function
16590 argument to convert it to the type of the corresponding function
16591 parameter if the parameter type contains no template-parameters that
16592 participate in template argument deduction. */
16593 if (TYPE_P (parm) && !uses_template_parms (parm))
16594 /* For function parameters that contain no template-parameters at all,
16595 we have historically checked for convertibility in order to shortcut
16596 consideration of this candidate. */
16597 return check_non_deducible_conversion (parm, arg, strict, flags,
16598 explain_p);
16599 else if (strict == DEDUCE_CALL
16600 && TYPE_P (parm) && !uses_deducible_template_parms (parm))
16601 /* For function parameters with only non-deducible template parameters,
16602 just return. */
16603 return unify_success (explain_p);
16605 switch (strict)
16607 case DEDUCE_CALL:
16608 arg_strict = (UNIFY_ALLOW_OUTER_LEVEL
16609 | UNIFY_ALLOW_MORE_CV_QUAL
16610 | UNIFY_ALLOW_DERIVED);
16611 break;
16613 case DEDUCE_CONV:
16614 arg_strict = UNIFY_ALLOW_LESS_CV_QUAL;
16615 break;
16617 case DEDUCE_EXACT:
16618 arg_strict = UNIFY_ALLOW_NONE;
16619 break;
16621 default:
16622 gcc_unreachable ();
16625 /* We only do these transformations if this is the top-level
16626 parameter_type_list in a call or declaration matching; in other
16627 situations (nested function declarators, template argument lists) we
16628 won't be comparing a type to an expression, and we don't do any type
16629 adjustments. */
16630 if (!subr)
16632 if (!TYPE_P (arg))
16634 gcc_assert (TREE_TYPE (arg) != NULL_TREE);
16635 if (type_unknown_p (arg))
16637 /* [temp.deduct.type] A template-argument can be
16638 deduced from a pointer to function or pointer
16639 to member function argument if the set of
16640 overloaded functions does not contain function
16641 templates and at most one of a set of
16642 overloaded functions provides a unique
16643 match. */
16645 if (resolve_overloaded_unification
16646 (tparms, targs, parm, arg, strict,
16647 arg_strict, explain_p))
16648 return unify_success (explain_p);
16649 return unify_overload_resolution_failure (explain_p, arg);
16652 arg_expr = arg;
16653 arg = unlowered_expr_type (arg);
16654 if (arg == error_mark_node)
16655 return unify_invalid (explain_p);
16658 arg_strict |=
16659 maybe_adjust_types_for_deduction (strict, &parm, &arg, arg_expr);
16661 else
16662 if ((TYPE_P (parm) || TREE_CODE (parm) == TEMPLATE_DECL)
16663 != (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL))
16664 return unify_template_argument_mismatch (explain_p, parm, arg);
16666 /* For deduction from an init-list we need the actual list. */
16667 if (arg_expr && BRACE_ENCLOSED_INITIALIZER_P (arg_expr))
16668 arg = arg_expr;
16669 return unify (tparms, targs, parm, arg, arg_strict, explain_p);
16672 /* Most parms like fn_type_unification.
16674 If SUBR is 1, we're being called recursively (to unify the
16675 arguments of a function or method parameter of a function
16676 template).
16678 CHECKS is a pointer to a vector of access checks encountered while
16679 substituting default template arguments. */
16681 static int
16682 type_unification_real (tree tparms,
16683 tree targs,
16684 tree xparms,
16685 const tree *xargs,
16686 unsigned int xnargs,
16687 int subr,
16688 unification_kind_t strict,
16689 int flags,
16690 vec<deferred_access_check, va_gc> **checks,
16691 bool explain_p)
16693 tree parm, arg;
16694 int i;
16695 int ntparms = TREE_VEC_LENGTH (tparms);
16696 int saw_undeduced = 0;
16697 tree parms;
16698 const tree *args;
16699 unsigned int nargs;
16700 unsigned int ia;
16702 gcc_assert (TREE_CODE (tparms) == TREE_VEC);
16703 gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
16704 gcc_assert (ntparms > 0);
16706 /* Reset the number of non-defaulted template arguments contained
16707 in TARGS. */
16708 NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs) = NULL_TREE;
16710 again:
16711 parms = xparms;
16712 args = xargs;
16713 nargs = xnargs;
16715 ia = 0;
16716 while (parms && parms != void_list_node
16717 && ia < nargs)
16719 parm = TREE_VALUE (parms);
16721 if (TREE_CODE (parm) == TYPE_PACK_EXPANSION
16722 && (!TREE_CHAIN (parms) || TREE_CHAIN (parms) == void_list_node))
16723 /* For a function parameter pack that occurs at the end of the
16724 parameter-declaration-list, the type A of each remaining
16725 argument of the call is compared with the type P of the
16726 declarator-id of the function parameter pack. */
16727 break;
16729 parms = TREE_CHAIN (parms);
16731 if (TREE_CODE (parm) == TYPE_PACK_EXPANSION)
16732 /* For a function parameter pack that does not occur at the
16733 end of the parameter-declaration-list, the type of the
16734 parameter pack is a non-deduced context. */
16735 continue;
16737 arg = args[ia];
16738 ++ia;
16740 if (unify_one_argument (tparms, targs, parm, arg, subr, strict,
16741 flags, explain_p))
16742 return 1;
16745 if (parms
16746 && parms != void_list_node
16747 && TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
16749 /* Unify the remaining arguments with the pack expansion type. */
16750 tree argvec;
16751 tree parmvec = make_tree_vec (1);
16753 /* Allocate a TREE_VEC and copy in all of the arguments */
16754 argvec = make_tree_vec (nargs - ia);
16755 for (i = 0; ia < nargs; ++ia, ++i)
16756 TREE_VEC_ELT (argvec, i) = args[ia];
16758 /* Copy the parameter into parmvec. */
16759 TREE_VEC_ELT (parmvec, 0) = TREE_VALUE (parms);
16760 if (unify_pack_expansion (tparms, targs, parmvec, argvec, strict,
16761 /*subr=*/subr, explain_p))
16762 return 1;
16764 /* Advance to the end of the list of parameters. */
16765 parms = TREE_CHAIN (parms);
16768 /* Fail if we've reached the end of the parm list, and more args
16769 are present, and the parm list isn't variadic. */
16770 if (ia < nargs && parms == void_list_node)
16771 return unify_too_many_arguments (explain_p, nargs, ia);
16772 /* Fail if parms are left and they don't have default values and
16773 they aren't all deduced as empty packs (c++/57397). This is
16774 consistent with sufficient_parms_p. */
16775 if (parms && parms != void_list_node
16776 && TREE_PURPOSE (parms) == NULL_TREE)
16778 unsigned int count = nargs;
16779 tree p = parms;
16780 bool type_pack_p;
16783 type_pack_p = TREE_CODE (TREE_VALUE (p)) == TYPE_PACK_EXPANSION;
16784 if (!type_pack_p)
16785 count++;
16786 p = TREE_CHAIN (p);
16788 while (p && p != void_list_node);
16789 if (count != nargs)
16790 return unify_too_few_arguments (explain_p, ia, count,
16791 type_pack_p);
16794 if (!subr)
16796 tsubst_flags_t complain = (explain_p
16797 ? tf_warning_or_error
16798 : tf_none);
16800 for (i = 0; i < ntparms; i++)
16802 tree targ = TREE_VEC_ELT (targs, i);
16803 tree tparm = TREE_VEC_ELT (tparms, i);
16805 /* Clear the "incomplete" flags on all argument packs now so that
16806 substituting them into later default arguments works. */
16807 if (targ && ARGUMENT_PACK_P (targ))
16809 ARGUMENT_PACK_INCOMPLETE_P (targ) = 0;
16810 ARGUMENT_PACK_EXPLICIT_ARGS (targ) = NULL_TREE;
16813 if (targ || tparm == error_mark_node)
16814 continue;
16815 tparm = TREE_VALUE (tparm);
16817 /* If this is an undeduced nontype parameter that depends on
16818 a type parameter, try another pass; its type may have been
16819 deduced from a later argument than the one from which
16820 this parameter can be deduced. */
16821 if (TREE_CODE (tparm) == PARM_DECL
16822 && uses_template_parms (TREE_TYPE (tparm))
16823 && !saw_undeduced++)
16824 goto again;
16826 /* Core issue #226 (C++0x) [temp.deduct]:
16828 If a template argument has not been deduced, its
16829 default template argument, if any, is used.
16831 When we are in C++98 mode, TREE_PURPOSE will either
16832 be NULL_TREE or ERROR_MARK_NODE, so we do not need
16833 to explicitly check cxx_dialect here. */
16834 if (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)))
16836 tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
16837 tree arg = TREE_PURPOSE (TREE_VEC_ELT (tparms, i));
16838 reopen_deferring_access_checks (*checks);
16839 location_t save_loc = input_location;
16840 if (DECL_P (parm))
16841 input_location = DECL_SOURCE_LOCATION (parm);
16842 arg = tsubst_template_arg (arg, targs, complain, NULL_TREE);
16843 arg = convert_template_argument (parm, arg, targs, complain,
16844 i, NULL_TREE);
16845 input_location = save_loc;
16846 *checks = get_deferred_access_checks ();
16847 pop_deferring_access_checks ();
16848 if (arg == error_mark_node)
16849 return 1;
16850 else
16852 TREE_VEC_ELT (targs, i) = arg;
16853 /* The position of the first default template argument,
16854 is also the number of non-defaulted arguments in TARGS.
16855 Record that. */
16856 if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
16857 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, i);
16858 continue;
16862 /* If the type parameter is a parameter pack, then it will
16863 be deduced to an empty parameter pack. */
16864 if (template_parameter_pack_p (tparm))
16866 tree arg;
16868 if (TREE_CODE (tparm) == TEMPLATE_PARM_INDEX)
16870 arg = make_node (NONTYPE_ARGUMENT_PACK);
16871 TREE_TYPE (arg) = TREE_TYPE (TEMPLATE_PARM_DECL (tparm));
16872 TREE_CONSTANT (arg) = 1;
16874 else
16875 arg = cxx_make_type (TYPE_ARGUMENT_PACK);
16877 SET_ARGUMENT_PACK_ARGS (arg, make_tree_vec (0));
16879 TREE_VEC_ELT (targs, i) = arg;
16880 continue;
16883 return unify_parameter_deduction_failure (explain_p, tparm);
16886 #ifdef ENABLE_CHECKING
16887 if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
16888 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, TREE_VEC_LENGTH (targs));
16889 #endif
16891 return unify_success (explain_p);
16894 /* Subroutine of type_unification_real. Args are like the variables
16895 at the call site. ARG is an overloaded function (or template-id);
16896 we try deducing template args from each of the overloads, and if
16897 only one succeeds, we go with that. Modifies TARGS and returns
16898 true on success. */
16900 static bool
16901 resolve_overloaded_unification (tree tparms,
16902 tree targs,
16903 tree parm,
16904 tree arg,
16905 unification_kind_t strict,
16906 int sub_strict,
16907 bool explain_p)
16909 tree tempargs = copy_node (targs);
16910 int good = 0;
16911 tree goodfn = NULL_TREE;
16912 bool addr_p;
16914 if (TREE_CODE (arg) == ADDR_EXPR)
16916 arg = TREE_OPERAND (arg, 0);
16917 addr_p = true;
16919 else
16920 addr_p = false;
16922 if (TREE_CODE (arg) == COMPONENT_REF)
16923 /* Handle `&x' where `x' is some static or non-static member
16924 function name. */
16925 arg = TREE_OPERAND (arg, 1);
16927 if (TREE_CODE (arg) == OFFSET_REF)
16928 arg = TREE_OPERAND (arg, 1);
16930 /* Strip baselink information. */
16931 if (BASELINK_P (arg))
16932 arg = BASELINK_FUNCTIONS (arg);
16934 if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
16936 /* If we got some explicit template args, we need to plug them into
16937 the affected templates before we try to unify, in case the
16938 explicit args will completely resolve the templates in question. */
16940 int ok = 0;
16941 tree expl_subargs = TREE_OPERAND (arg, 1);
16942 arg = TREE_OPERAND (arg, 0);
16944 for (; arg; arg = OVL_NEXT (arg))
16946 tree fn = OVL_CURRENT (arg);
16947 tree subargs, elem;
16949 if (TREE_CODE (fn) != TEMPLATE_DECL)
16950 continue;
16952 subargs = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (fn),
16953 expl_subargs, NULL_TREE, tf_none,
16954 /*require_all_args=*/true,
16955 /*use_default_args=*/true);
16956 if (subargs != error_mark_node
16957 && !any_dependent_template_arguments_p (subargs))
16959 elem = TREE_TYPE (instantiate_template (fn, subargs, tf_none));
16960 if (try_one_overload (tparms, targs, tempargs, parm,
16961 elem, strict, sub_strict, addr_p, explain_p)
16962 && (!goodfn || !same_type_p (goodfn, elem)))
16964 goodfn = elem;
16965 ++good;
16968 else if (subargs)
16969 ++ok;
16971 /* If no templates (or more than one) are fully resolved by the
16972 explicit arguments, this template-id is a non-deduced context; it
16973 could still be OK if we deduce all template arguments for the
16974 enclosing call through other arguments. */
16975 if (good != 1)
16976 good = ok;
16978 else if (TREE_CODE (arg) != OVERLOAD
16979 && TREE_CODE (arg) != FUNCTION_DECL)
16980 /* If ARG is, for example, "(0, &f)" then its type will be unknown
16981 -- but the deduction does not succeed because the expression is
16982 not just the function on its own. */
16983 return false;
16984 else
16985 for (; arg; arg = OVL_NEXT (arg))
16986 if (try_one_overload (tparms, targs, tempargs, parm,
16987 TREE_TYPE (OVL_CURRENT (arg)),
16988 strict, sub_strict, addr_p, explain_p)
16989 && (!goodfn || !decls_match (goodfn, OVL_CURRENT (arg))))
16991 goodfn = OVL_CURRENT (arg);
16992 ++good;
16995 /* [temp.deduct.type] A template-argument can be deduced from a pointer
16996 to function or pointer to member function argument if the set of
16997 overloaded functions does not contain function templates and at most
16998 one of a set of overloaded functions provides a unique match.
17000 So if we found multiple possibilities, we return success but don't
17001 deduce anything. */
17003 if (good == 1)
17005 int i = TREE_VEC_LENGTH (targs);
17006 for (; i--; )
17007 if (TREE_VEC_ELT (tempargs, i))
17009 tree old = TREE_VEC_ELT (targs, i);
17010 tree new_ = TREE_VEC_ELT (tempargs, i);
17011 if (new_ && old && ARGUMENT_PACK_P (old)
17012 && ARGUMENT_PACK_EXPLICIT_ARGS (old))
17013 /* Don't forget explicit template arguments in a pack. */
17014 ARGUMENT_PACK_EXPLICIT_ARGS (new_)
17015 = ARGUMENT_PACK_EXPLICIT_ARGS (old);
17016 TREE_VEC_ELT (targs, i) = new_;
17019 if (good)
17020 return true;
17022 return false;
17025 /* Core DR 115: In contexts where deduction is done and fails, or in
17026 contexts where deduction is not done, if a template argument list is
17027 specified and it, along with any default template arguments, identifies
17028 a single function template specialization, then the template-id is an
17029 lvalue for the function template specialization. */
17031 tree
17032 resolve_nondeduced_context (tree orig_expr)
17034 tree expr, offset, baselink;
17035 bool addr;
17037 if (!type_unknown_p (orig_expr))
17038 return orig_expr;
17040 expr = orig_expr;
17041 addr = false;
17042 offset = NULL_TREE;
17043 baselink = NULL_TREE;
17045 if (TREE_CODE (expr) == ADDR_EXPR)
17047 expr = TREE_OPERAND (expr, 0);
17048 addr = true;
17050 if (TREE_CODE (expr) == OFFSET_REF)
17052 offset = expr;
17053 expr = TREE_OPERAND (expr, 1);
17055 if (BASELINK_P (expr))
17057 baselink = expr;
17058 expr = BASELINK_FUNCTIONS (expr);
17061 if (TREE_CODE (expr) == TEMPLATE_ID_EXPR)
17063 int good = 0;
17064 tree goodfn = NULL_TREE;
17066 /* If we got some explicit template args, we need to plug them into
17067 the affected templates before we try to unify, in case the
17068 explicit args will completely resolve the templates in question. */
17070 tree expl_subargs = TREE_OPERAND (expr, 1);
17071 tree arg = TREE_OPERAND (expr, 0);
17072 tree badfn = NULL_TREE;
17073 tree badargs = NULL_TREE;
17075 for (; arg; arg = OVL_NEXT (arg))
17077 tree fn = OVL_CURRENT (arg);
17078 tree subargs, elem;
17080 if (TREE_CODE (fn) != TEMPLATE_DECL)
17081 continue;
17083 subargs = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (fn),
17084 expl_subargs, NULL_TREE, tf_none,
17085 /*require_all_args=*/true,
17086 /*use_default_args=*/true);
17087 if (subargs != error_mark_node
17088 && !any_dependent_template_arguments_p (subargs))
17090 elem = instantiate_template (fn, subargs, tf_none);
17091 if (elem == error_mark_node)
17093 badfn = fn;
17094 badargs = subargs;
17096 else if (elem && (!goodfn || !decls_match (goodfn, elem)))
17098 goodfn = elem;
17099 ++good;
17103 if (good == 1)
17105 mark_used (goodfn);
17106 expr = goodfn;
17107 if (baselink)
17108 expr = build_baselink (BASELINK_BINFO (baselink),
17109 BASELINK_ACCESS_BINFO (baselink),
17110 expr, BASELINK_OPTYPE (baselink));
17111 if (offset)
17113 tree base
17114 = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (offset, 0)));
17115 expr = build_offset_ref (base, expr, addr, tf_warning_or_error);
17117 if (addr)
17118 expr = cp_build_addr_expr (expr, tf_warning_or_error);
17119 return expr;
17121 else if (good == 0 && badargs)
17122 /* There were no good options and at least one bad one, so let the
17123 user know what the problem is. */
17124 instantiate_template (badfn, badargs, tf_warning_or_error);
17126 return orig_expr;
17129 /* Subroutine of resolve_overloaded_unification; does deduction for a single
17130 overload. Fills TARGS with any deduced arguments, or error_mark_node if
17131 different overloads deduce different arguments for a given parm.
17132 ADDR_P is true if the expression for which deduction is being
17133 performed was of the form "& fn" rather than simply "fn".
17135 Returns 1 on success. */
17137 static int
17138 try_one_overload (tree tparms,
17139 tree orig_targs,
17140 tree targs,
17141 tree parm,
17142 tree arg,
17143 unification_kind_t strict,
17144 int sub_strict,
17145 bool addr_p,
17146 bool explain_p)
17148 int nargs;
17149 tree tempargs;
17150 int i;
17152 if (arg == error_mark_node)
17153 return 0;
17155 /* [temp.deduct.type] A template-argument can be deduced from a pointer
17156 to function or pointer to member function argument if the set of
17157 overloaded functions does not contain function templates and at most
17158 one of a set of overloaded functions provides a unique match.
17160 So if this is a template, just return success. */
17162 if (uses_template_parms (arg))
17163 return 1;
17165 if (TREE_CODE (arg) == METHOD_TYPE)
17166 arg = build_ptrmemfunc_type (build_pointer_type (arg));
17167 else if (addr_p)
17168 arg = build_pointer_type (arg);
17170 sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
17172 /* We don't copy orig_targs for this because if we have already deduced
17173 some template args from previous args, unify would complain when we
17174 try to deduce a template parameter for the same argument, even though
17175 there isn't really a conflict. */
17176 nargs = TREE_VEC_LENGTH (targs);
17177 tempargs = make_tree_vec (nargs);
17179 if (unify (tparms, tempargs, parm, arg, sub_strict, explain_p))
17180 return 0;
17182 /* First make sure we didn't deduce anything that conflicts with
17183 explicitly specified args. */
17184 for (i = nargs; i--; )
17186 tree elt = TREE_VEC_ELT (tempargs, i);
17187 tree oldelt = TREE_VEC_ELT (orig_targs, i);
17189 if (!elt)
17190 /*NOP*/;
17191 else if (uses_template_parms (elt))
17192 /* Since we're unifying against ourselves, we will fill in
17193 template args used in the function parm list with our own
17194 template parms. Discard them. */
17195 TREE_VEC_ELT (tempargs, i) = NULL_TREE;
17196 else if (oldelt && !template_args_equal (oldelt, elt))
17197 return 0;
17200 for (i = nargs; i--; )
17202 tree elt = TREE_VEC_ELT (tempargs, i);
17204 if (elt)
17205 TREE_VEC_ELT (targs, i) = elt;
17208 return 1;
17211 /* PARM is a template class (perhaps with unbound template
17212 parameters). ARG is a fully instantiated type. If ARG can be
17213 bound to PARM, return ARG, otherwise return NULL_TREE. TPARMS and
17214 TARGS are as for unify. */
17216 static tree
17217 try_class_unification (tree tparms, tree targs, tree parm, tree arg,
17218 bool explain_p)
17220 tree copy_of_targs;
17222 if (!CLASSTYPE_TEMPLATE_INFO (arg)
17223 || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
17224 != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
17225 return NULL_TREE;
17227 /* We need to make a new template argument vector for the call to
17228 unify. If we used TARGS, we'd clutter it up with the result of
17229 the attempted unification, even if this class didn't work out.
17230 We also don't want to commit ourselves to all the unifications
17231 we've already done, since unification is supposed to be done on
17232 an argument-by-argument basis. In other words, consider the
17233 following pathological case:
17235 template <int I, int J, int K>
17236 struct S {};
17238 template <int I, int J>
17239 struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
17241 template <int I, int J, int K>
17242 void f(S<I, J, K>, S<I, I, I>);
17244 void g() {
17245 S<0, 0, 0> s0;
17246 S<0, 1, 2> s2;
17248 f(s0, s2);
17251 Now, by the time we consider the unification involving `s2', we
17252 already know that we must have `f<0, 0, 0>'. But, even though
17253 `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
17254 because there are two ways to unify base classes of S<0, 1, 2>
17255 with S<I, I, I>. If we kept the already deduced knowledge, we
17256 would reject the possibility I=1. */
17257 copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
17259 /* If unification failed, we're done. */
17260 if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
17261 CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE, explain_p))
17262 return NULL_TREE;
17264 return arg;
17267 /* Given a template type PARM and a class type ARG, find the unique
17268 base type in ARG that is an instance of PARM. We do not examine
17269 ARG itself; only its base-classes. If there is not exactly one
17270 appropriate base class, return NULL_TREE. PARM may be the type of
17271 a partial specialization, as well as a plain template type. Used
17272 by unify. */
17274 static enum template_base_result
17275 get_template_base (tree tparms, tree targs, tree parm, tree arg,
17276 bool explain_p, tree *result)
17278 tree rval = NULL_TREE;
17279 tree binfo;
17281 gcc_assert (RECORD_OR_UNION_CODE_P (TREE_CODE (arg)));
17283 binfo = TYPE_BINFO (complete_type (arg));
17284 if (!binfo)
17286 /* The type could not be completed. */
17287 *result = NULL_TREE;
17288 return tbr_incomplete_type;
17291 /* Walk in inheritance graph order. The search order is not
17292 important, and this avoids multiple walks of virtual bases. */
17293 for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
17295 tree r = try_class_unification (tparms, targs, parm,
17296 BINFO_TYPE (binfo), explain_p);
17298 if (r)
17300 /* If there is more than one satisfactory baseclass, then:
17302 [temp.deduct.call]
17304 If they yield more than one possible deduced A, the type
17305 deduction fails.
17307 applies. */
17308 if (rval && !same_type_p (r, rval))
17310 *result = NULL_TREE;
17311 return tbr_ambiguous_baseclass;
17314 rval = r;
17318 *result = rval;
17319 return tbr_success;
17322 /* Returns the level of DECL, which declares a template parameter. */
17324 static int
17325 template_decl_level (tree decl)
17327 switch (TREE_CODE (decl))
17329 case TYPE_DECL:
17330 case TEMPLATE_DECL:
17331 return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
17333 case PARM_DECL:
17334 return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
17336 default:
17337 gcc_unreachable ();
17339 return 0;
17342 /* Decide whether ARG can be unified with PARM, considering only the
17343 cv-qualifiers of each type, given STRICT as documented for unify.
17344 Returns nonzero iff the unification is OK on that basis. */
17346 static int
17347 check_cv_quals_for_unify (int strict, tree arg, tree parm)
17349 int arg_quals = cp_type_quals (arg);
17350 int parm_quals = cp_type_quals (parm);
17352 if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
17353 && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
17355 /* Although a CVR qualifier is ignored when being applied to a
17356 substituted template parameter ([8.3.2]/1 for example), that
17357 does not allow us to unify "const T" with "int&" because both
17358 types are not of the form "cv-list T" [14.8.2.5 temp.deduct.type].
17359 It is ok when we're allowing additional CV qualifiers
17360 at the outer level [14.8.2.1]/3,1st bullet. */
17361 if ((TREE_CODE (arg) == REFERENCE_TYPE
17362 || TREE_CODE (arg) == FUNCTION_TYPE
17363 || TREE_CODE (arg) == METHOD_TYPE)
17364 && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
17365 return 0;
17367 if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
17368 && (parm_quals & TYPE_QUAL_RESTRICT))
17369 return 0;
17372 if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
17373 && (arg_quals & parm_quals) != parm_quals)
17374 return 0;
17376 if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
17377 && (parm_quals & arg_quals) != arg_quals)
17378 return 0;
17380 return 1;
17383 /* Determines the LEVEL and INDEX for the template parameter PARM. */
17384 void
17385 template_parm_level_and_index (tree parm, int* level, int* index)
17387 if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
17388 || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
17389 || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
17391 *index = TEMPLATE_TYPE_IDX (parm);
17392 *level = TEMPLATE_TYPE_LEVEL (parm);
17394 else
17396 *index = TEMPLATE_PARM_IDX (parm);
17397 *level = TEMPLATE_PARM_LEVEL (parm);
17401 #define RECUR_AND_CHECK_FAILURE(TP, TA, P, A, S, EP) \
17402 do { \
17403 if (unify (TP, TA, P, A, S, EP)) \
17404 return 1; \
17405 } while (0);
17407 /* Unifies the remaining arguments in PACKED_ARGS with the pack
17408 expansion at the end of PACKED_PARMS. Returns 0 if the type
17409 deduction succeeds, 1 otherwise. STRICT is the same as in
17410 unify. CALL_ARGS_P is true iff PACKED_ARGS is actually a function
17411 call argument list. We'll need to adjust the arguments to make them
17412 types. SUBR tells us if this is from a recursive call to
17413 type_unification_real, or for comparing two template argument
17414 lists. */
17416 static int
17417 unify_pack_expansion (tree tparms, tree targs, tree packed_parms,
17418 tree packed_args, unification_kind_t strict,
17419 bool subr, bool explain_p)
17421 tree parm
17422 = TREE_VEC_ELT (packed_parms, TREE_VEC_LENGTH (packed_parms) - 1);
17423 tree pattern = PACK_EXPANSION_PATTERN (parm);
17424 tree pack, packs = NULL_TREE;
17425 int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
17427 packed_args = expand_template_argument_pack (packed_args);
17429 int len = TREE_VEC_LENGTH (packed_args);
17431 /* Determine the parameter packs we will be deducing from the
17432 pattern, and record their current deductions. */
17433 for (pack = PACK_EXPANSION_PARAMETER_PACKS (parm);
17434 pack; pack = TREE_CHAIN (pack))
17436 tree parm_pack = TREE_VALUE (pack);
17437 int idx, level;
17439 /* Determine the index and level of this parameter pack. */
17440 template_parm_level_and_index (parm_pack, &level, &idx);
17442 /* Keep track of the parameter packs and their corresponding
17443 argument packs. */
17444 packs = tree_cons (parm_pack, TMPL_ARG (targs, level, idx), packs);
17445 TREE_TYPE (packs) = make_tree_vec (len - start);
17448 /* Loop through all of the arguments that have not yet been
17449 unified and unify each with the pattern. */
17450 for (i = start; i < len; i++)
17452 tree parm;
17453 bool any_explicit = false;
17454 tree arg = TREE_VEC_ELT (packed_args, i);
17456 /* For each parameter pack, set its TMPL_ARG to either NULL_TREE
17457 or the element of its argument pack at the current index if
17458 this argument was explicitly specified. */
17459 for (pack = packs; pack; pack = TREE_CHAIN (pack))
17461 int idx, level;
17462 tree arg, pargs;
17463 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
17465 arg = NULL_TREE;
17466 if (TREE_VALUE (pack)
17467 && (pargs = ARGUMENT_PACK_EXPLICIT_ARGS (TREE_VALUE (pack)))
17468 && (i - start < TREE_VEC_LENGTH (pargs)))
17470 any_explicit = true;
17471 arg = TREE_VEC_ELT (pargs, i - start);
17473 TMPL_ARG (targs, level, idx) = arg;
17476 /* If we had explicit template arguments, substitute them into the
17477 pattern before deduction. */
17478 if (any_explicit)
17480 /* Some arguments might still be unspecified or dependent. */
17481 bool dependent;
17482 ++processing_template_decl;
17483 dependent = any_dependent_template_arguments_p (targs);
17484 if (!dependent)
17485 --processing_template_decl;
17486 parm = tsubst (pattern, targs,
17487 explain_p ? tf_warning_or_error : tf_none,
17488 NULL_TREE);
17489 if (dependent)
17490 --processing_template_decl;
17491 if (parm == error_mark_node)
17492 return 1;
17494 else
17495 parm = pattern;
17497 /* Unify the pattern with the current argument. */
17498 if (unify_one_argument (tparms, targs, parm, arg, subr, strict,
17499 LOOKUP_IMPLICIT, explain_p))
17500 return 1;
17502 /* For each parameter pack, collect the deduced value. */
17503 for (pack = packs; pack; pack = TREE_CHAIN (pack))
17505 int idx, level;
17506 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
17508 TREE_VEC_ELT (TREE_TYPE (pack), i - start) =
17509 TMPL_ARG (targs, level, idx);
17513 /* Verify that the results of unification with the parameter packs
17514 produce results consistent with what we've seen before, and make
17515 the deduced argument packs available. */
17516 for (pack = packs; pack; pack = TREE_CHAIN (pack))
17518 tree old_pack = TREE_VALUE (pack);
17519 tree new_args = TREE_TYPE (pack);
17520 int i, len = TREE_VEC_LENGTH (new_args);
17521 int idx, level;
17522 bool nondeduced_p = false;
17524 /* By default keep the original deduced argument pack.
17525 If necessary, more specific code is going to update the
17526 resulting deduced argument later down in this function. */
17527 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
17528 TMPL_ARG (targs, level, idx) = old_pack;
17530 /* If NEW_ARGS contains any NULL_TREE entries, we didn't
17531 actually deduce anything. */
17532 for (i = 0; i < len && !nondeduced_p; ++i)
17533 if (TREE_VEC_ELT (new_args, i) == NULL_TREE)
17534 nondeduced_p = true;
17535 if (nondeduced_p)
17536 continue;
17538 if (old_pack && ARGUMENT_PACK_INCOMPLETE_P (old_pack))
17540 /* If we had fewer function args than explicit template args,
17541 just use the explicits. */
17542 tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
17543 int explicit_len = TREE_VEC_LENGTH (explicit_args);
17544 if (len < explicit_len)
17545 new_args = explicit_args;
17548 if (!old_pack)
17550 tree result;
17551 /* Build the deduced *_ARGUMENT_PACK. */
17552 if (TREE_CODE (TREE_PURPOSE (pack)) == TEMPLATE_PARM_INDEX)
17554 result = make_node (NONTYPE_ARGUMENT_PACK);
17555 TREE_TYPE (result) =
17556 TREE_TYPE (TEMPLATE_PARM_DECL (TREE_PURPOSE (pack)));
17557 TREE_CONSTANT (result) = 1;
17559 else
17560 result = cxx_make_type (TYPE_ARGUMENT_PACK);
17562 SET_ARGUMENT_PACK_ARGS (result, new_args);
17564 /* Note the deduced argument packs for this parameter
17565 pack. */
17566 TMPL_ARG (targs, level, idx) = result;
17568 else if (ARGUMENT_PACK_INCOMPLETE_P (old_pack)
17569 && (ARGUMENT_PACK_ARGS (old_pack)
17570 == ARGUMENT_PACK_EXPLICIT_ARGS (old_pack)))
17572 /* We only had the explicitly-provided arguments before, but
17573 now we have a complete set of arguments. */
17574 tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
17576 SET_ARGUMENT_PACK_ARGS (old_pack, new_args);
17577 ARGUMENT_PACK_INCOMPLETE_P (old_pack) = 1;
17578 ARGUMENT_PACK_EXPLICIT_ARGS (old_pack) = explicit_args;
17580 else
17582 tree bad_old_arg = NULL_TREE, bad_new_arg = NULL_TREE;
17583 tree old_args = ARGUMENT_PACK_ARGS (old_pack);
17585 if (!comp_template_args_with_info (old_args, new_args,
17586 &bad_old_arg, &bad_new_arg))
17587 /* Inconsistent unification of this parameter pack. */
17588 return unify_parameter_pack_inconsistent (explain_p,
17589 bad_old_arg,
17590 bad_new_arg);
17594 return unify_success (explain_p);
17597 /* Handle unification of the domain of an array. PARM_DOM and ARG_DOM are
17598 INTEGER_TYPEs representing the TYPE_DOMAIN of ARRAY_TYPEs. The other
17599 parameters and return value are as for unify. */
17601 static int
17602 unify_array_domain (tree tparms, tree targs,
17603 tree parm_dom, tree arg_dom,
17604 bool explain_p)
17606 tree parm_max;
17607 tree arg_max;
17608 bool parm_cst;
17609 bool arg_cst;
17611 /* Our representation of array types uses "N - 1" as the
17612 TYPE_MAX_VALUE for an array with "N" elements, if "N" is
17613 not an integer constant. We cannot unify arbitrarily
17614 complex expressions, so we eliminate the MINUS_EXPRs
17615 here. */
17616 parm_max = TYPE_MAX_VALUE (parm_dom);
17617 parm_cst = TREE_CODE (parm_max) == INTEGER_CST;
17618 if (!parm_cst)
17620 gcc_assert (TREE_CODE (parm_max) == MINUS_EXPR);
17621 parm_max = TREE_OPERAND (parm_max, 0);
17623 arg_max = TYPE_MAX_VALUE (arg_dom);
17624 arg_cst = TREE_CODE (arg_max) == INTEGER_CST;
17625 if (!arg_cst)
17627 /* The ARG_MAX may not be a simple MINUS_EXPR, if we are
17628 trying to unify the type of a variable with the type
17629 of a template parameter. For example:
17631 template <unsigned int N>
17632 void f (char (&) [N]);
17633 int g();
17634 void h(int i) {
17635 char a[g(i)];
17636 f(a);
17639 Here, the type of the ARG will be "int [g(i)]", and
17640 may be a SAVE_EXPR, etc. */
17641 if (TREE_CODE (arg_max) != MINUS_EXPR)
17642 return unify_vla_arg (explain_p, arg_dom);
17643 arg_max = TREE_OPERAND (arg_max, 0);
17646 /* If only one of the bounds used a MINUS_EXPR, compensate
17647 by adding one to the other bound. */
17648 if (parm_cst && !arg_cst)
17649 parm_max = fold_build2_loc (input_location, PLUS_EXPR,
17650 integer_type_node,
17651 parm_max,
17652 integer_one_node);
17653 else if (arg_cst && !parm_cst)
17654 arg_max = fold_build2_loc (input_location, PLUS_EXPR,
17655 integer_type_node,
17656 arg_max,
17657 integer_one_node);
17659 return unify (tparms, targs, parm_max, arg_max,
17660 UNIFY_ALLOW_INTEGER, explain_p);
17663 /* Deduce the value of template parameters. TPARMS is the (innermost)
17664 set of template parameters to a template. TARGS is the bindings
17665 for those template parameters, as determined thus far; TARGS may
17666 include template arguments for outer levels of template parameters
17667 as well. PARM is a parameter to a template function, or a
17668 subcomponent of that parameter; ARG is the corresponding argument.
17669 This function attempts to match PARM with ARG in a manner
17670 consistent with the existing assignments in TARGS. If more values
17671 are deduced, then TARGS is updated.
17673 Returns 0 if the type deduction succeeds, 1 otherwise. The
17674 parameter STRICT is a bitwise or of the following flags:
17676 UNIFY_ALLOW_NONE:
17677 Require an exact match between PARM and ARG.
17678 UNIFY_ALLOW_MORE_CV_QUAL:
17679 Allow the deduced ARG to be more cv-qualified (by qualification
17680 conversion) than ARG.
17681 UNIFY_ALLOW_LESS_CV_QUAL:
17682 Allow the deduced ARG to be less cv-qualified than ARG.
17683 UNIFY_ALLOW_DERIVED:
17684 Allow the deduced ARG to be a template base class of ARG,
17685 or a pointer to a template base class of the type pointed to by
17686 ARG.
17687 UNIFY_ALLOW_INTEGER:
17688 Allow any integral type to be deduced. See the TEMPLATE_PARM_INDEX
17689 case for more information.
17690 UNIFY_ALLOW_OUTER_LEVEL:
17691 This is the outermost level of a deduction. Used to determine validity
17692 of qualification conversions. A valid qualification conversion must
17693 have const qualified pointers leading up to the inner type which
17694 requires additional CV quals, except at the outer level, where const
17695 is not required [conv.qual]. It would be normal to set this flag in
17696 addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
17697 UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
17698 This is the outermost level of a deduction, and PARM can be more CV
17699 qualified at this point.
17700 UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
17701 This is the outermost level of a deduction, and PARM can be less CV
17702 qualified at this point. */
17704 static int
17705 unify (tree tparms, tree targs, tree parm, tree arg, int strict,
17706 bool explain_p)
17708 int idx;
17709 tree targ;
17710 tree tparm;
17711 int strict_in = strict;
17713 /* I don't think this will do the right thing with respect to types.
17714 But the only case I've seen it in so far has been array bounds, where
17715 signedness is the only information lost, and I think that will be
17716 okay. */
17717 while (TREE_CODE (parm) == NOP_EXPR)
17718 parm = TREE_OPERAND (parm, 0);
17720 if (arg == error_mark_node)
17721 return unify_invalid (explain_p);
17722 if (arg == unknown_type_node
17723 || arg == init_list_type_node)
17724 /* We can't deduce anything from this, but we might get all the
17725 template args from other function args. */
17726 return unify_success (explain_p);
17728 /* If PARM uses template parameters, then we can't bail out here,
17729 even if ARG == PARM, since we won't record unifications for the
17730 template parameters. We might need them if we're trying to
17731 figure out which of two things is more specialized. */
17732 if (arg == parm && !uses_template_parms (parm))
17733 return unify_success (explain_p);
17735 /* Handle init lists early, so the rest of the function can assume
17736 we're dealing with a type. */
17737 if (BRACE_ENCLOSED_INITIALIZER_P (arg))
17739 tree elt, elttype;
17740 unsigned i;
17741 tree orig_parm = parm;
17743 /* Replace T with std::initializer_list<T> for deduction. */
17744 if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
17745 && flag_deduce_init_list)
17746 parm = listify (parm);
17748 if (!is_std_init_list (parm)
17749 && TREE_CODE (parm) != ARRAY_TYPE)
17750 /* We can only deduce from an initializer list argument if the
17751 parameter is std::initializer_list or an array; otherwise this
17752 is a non-deduced context. */
17753 return unify_success (explain_p);
17755 if (TREE_CODE (parm) == ARRAY_TYPE)
17756 elttype = TREE_TYPE (parm);
17757 else
17758 elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (parm), 0);
17760 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (arg), i, elt)
17762 int elt_strict = strict;
17764 if (elt == error_mark_node)
17765 return unify_invalid (explain_p);
17767 if (!BRACE_ENCLOSED_INITIALIZER_P (elt))
17769 tree type = TREE_TYPE (elt);
17770 /* It should only be possible to get here for a call. */
17771 gcc_assert (elt_strict & UNIFY_ALLOW_OUTER_LEVEL);
17772 elt_strict |= maybe_adjust_types_for_deduction
17773 (DEDUCE_CALL, &elttype, &type, elt);
17774 elt = type;
17777 RECUR_AND_CHECK_FAILURE (tparms, targs, elttype, elt, elt_strict,
17778 explain_p);
17781 if (TREE_CODE (parm) == ARRAY_TYPE
17782 && deducible_array_bound (TYPE_DOMAIN (parm)))
17784 /* Also deduce from the length of the initializer list. */
17785 tree max = size_int (CONSTRUCTOR_NELTS (arg));
17786 tree idx = compute_array_index_type (NULL_TREE, max, tf_none);
17787 if (idx == error_mark_node)
17788 return unify_invalid (explain_p);
17789 return unify_array_domain (tparms, targs, TYPE_DOMAIN (parm),
17790 idx, explain_p);
17793 /* If the std::initializer_list<T> deduction worked, replace the
17794 deduced A with std::initializer_list<A>. */
17795 if (orig_parm != parm)
17797 idx = TEMPLATE_TYPE_IDX (orig_parm);
17798 targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
17799 targ = listify (targ);
17800 TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = targ;
17802 return unify_success (explain_p);
17805 /* Immediately reject some pairs that won't unify because of
17806 cv-qualification mismatches. */
17807 if (TREE_CODE (arg) == TREE_CODE (parm)
17808 && TYPE_P (arg)
17809 /* It is the elements of the array which hold the cv quals of an array
17810 type, and the elements might be template type parms. We'll check
17811 when we recurse. */
17812 && TREE_CODE (arg) != ARRAY_TYPE
17813 /* We check the cv-qualifiers when unifying with template type
17814 parameters below. We want to allow ARG `const T' to unify with
17815 PARM `T' for example, when computing which of two templates
17816 is more specialized, for example. */
17817 && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
17818 && !check_cv_quals_for_unify (strict_in, arg, parm))
17819 return unify_cv_qual_mismatch (explain_p, parm, arg);
17821 if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
17822 && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
17823 strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
17824 strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
17825 strict &= ~UNIFY_ALLOW_DERIVED;
17826 strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
17827 strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
17829 switch (TREE_CODE (parm))
17831 case TYPENAME_TYPE:
17832 case SCOPE_REF:
17833 case UNBOUND_CLASS_TEMPLATE:
17834 /* In a type which contains a nested-name-specifier, template
17835 argument values cannot be deduced for template parameters used
17836 within the nested-name-specifier. */
17837 return unify_success (explain_p);
17839 case TEMPLATE_TYPE_PARM:
17840 case TEMPLATE_TEMPLATE_PARM:
17841 case BOUND_TEMPLATE_TEMPLATE_PARM:
17842 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
17843 if (error_operand_p (tparm))
17844 return unify_invalid (explain_p);
17846 if (TEMPLATE_TYPE_LEVEL (parm)
17847 != template_decl_level (tparm))
17848 /* The PARM is not one we're trying to unify. Just check
17849 to see if it matches ARG. */
17851 if (TREE_CODE (arg) == TREE_CODE (parm)
17852 && (is_auto (parm) ? is_auto (arg)
17853 : same_type_p (parm, arg)))
17854 return unify_success (explain_p);
17855 else
17856 return unify_type_mismatch (explain_p, parm, arg);
17858 idx = TEMPLATE_TYPE_IDX (parm);
17859 targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
17860 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
17861 if (error_operand_p (tparm))
17862 return unify_invalid (explain_p);
17864 /* Check for mixed types and values. */
17865 if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
17866 && TREE_CODE (tparm) != TYPE_DECL)
17867 || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
17868 && TREE_CODE (tparm) != TEMPLATE_DECL))
17869 gcc_unreachable ();
17871 if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
17873 /* ARG must be constructed from a template class or a template
17874 template parameter. */
17875 if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
17876 && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
17877 return unify_template_deduction_failure (explain_p, parm, arg);
17879 tree parmvec = TYPE_TI_ARGS (parm);
17880 /* An alias template name is never deduced. */
17881 if (TYPE_ALIAS_P (arg))
17882 arg = strip_typedefs (arg);
17883 tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
17884 tree full_argvec = add_to_template_args (targs, argvec);
17885 tree parm_parms
17886 = DECL_INNERMOST_TEMPLATE_PARMS
17887 (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (parm));
17888 int i, len;
17889 int parm_variadic_p = 0;
17891 /* The resolution to DR150 makes clear that default
17892 arguments for an N-argument may not be used to bind T
17893 to a template template parameter with fewer than N
17894 parameters. It is not safe to permit the binding of
17895 default arguments as an extension, as that may change
17896 the meaning of a conforming program. Consider:
17898 struct Dense { static const unsigned int dim = 1; };
17900 template <template <typename> class View,
17901 typename Block>
17902 void operator+(float, View<Block> const&);
17904 template <typename Block,
17905 unsigned int Dim = Block::dim>
17906 struct Lvalue_proxy { operator float() const; };
17908 void
17909 test_1d (void) {
17910 Lvalue_proxy<Dense> p;
17911 float b;
17912 b + p;
17915 Here, if Lvalue_proxy is permitted to bind to View, then
17916 the global operator+ will be used; if they are not, the
17917 Lvalue_proxy will be converted to float. */
17918 if (coerce_template_parms (parm_parms,
17919 full_argvec,
17920 TYPE_TI_TEMPLATE (parm),
17921 (explain_p
17922 ? tf_warning_or_error
17923 : tf_none),
17924 /*require_all_args=*/true,
17925 /*use_default_args=*/false)
17926 == error_mark_node)
17927 return 1;
17929 /* Deduce arguments T, i from TT<T> or TT<i>.
17930 We check each element of PARMVEC and ARGVEC individually
17931 rather than the whole TREE_VEC since they can have
17932 different number of elements. */
17934 parmvec = expand_template_argument_pack (parmvec);
17935 argvec = expand_template_argument_pack (argvec);
17937 len = TREE_VEC_LENGTH (parmvec);
17939 /* Check if the parameters end in a pack, making them
17940 variadic. */
17941 if (len > 0
17942 && PACK_EXPANSION_P (TREE_VEC_ELT (parmvec, len - 1)))
17943 parm_variadic_p = 1;
17945 for (i = 0; i < len - parm_variadic_p; ++i)
17946 /* If the template argument list of P contains a pack
17947 expansion that is not the last template argument, the
17948 entire template argument list is a non-deduced
17949 context. */
17950 if (PACK_EXPANSION_P (TREE_VEC_ELT (parmvec, i)))
17951 return unify_success (explain_p);
17953 if (TREE_VEC_LENGTH (argvec) < len - parm_variadic_p)
17954 return unify_too_few_arguments (explain_p,
17955 TREE_VEC_LENGTH (argvec), len);
17957 for (i = 0; i < len - parm_variadic_p; ++i)
17959 RECUR_AND_CHECK_FAILURE (tparms, targs,
17960 TREE_VEC_ELT (parmvec, i),
17961 TREE_VEC_ELT (argvec, i),
17962 UNIFY_ALLOW_NONE, explain_p);
17965 if (parm_variadic_p
17966 && unify_pack_expansion (tparms, targs,
17967 parmvec, argvec,
17968 DEDUCE_EXACT,
17969 /*subr=*/true, explain_p))
17970 return 1;
17972 arg = TYPE_TI_TEMPLATE (arg);
17974 /* Fall through to deduce template name. */
17977 if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
17978 || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
17980 /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>. */
17982 /* Simple cases: Value already set, does match or doesn't. */
17983 if (targ != NULL_TREE && template_args_equal (targ, arg))
17984 return unify_success (explain_p);
17985 else if (targ)
17986 return unify_inconsistency (explain_p, parm, targ, arg);
17988 else
17990 /* If PARM is `const T' and ARG is only `int', we don't have
17991 a match unless we are allowing additional qualification.
17992 If ARG is `const int' and PARM is just `T' that's OK;
17993 that binds `const int' to `T'. */
17994 if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
17995 arg, parm))
17996 return unify_cv_qual_mismatch (explain_p, parm, arg);
17998 /* Consider the case where ARG is `const volatile int' and
17999 PARM is `const T'. Then, T should be `volatile int'. */
18000 arg = cp_build_qualified_type_real
18001 (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
18002 if (arg == error_mark_node)
18003 return unify_invalid (explain_p);
18005 /* Simple cases: Value already set, does match or doesn't. */
18006 if (targ != NULL_TREE && same_type_p (targ, arg))
18007 return unify_success (explain_p);
18008 else if (targ)
18009 return unify_inconsistency (explain_p, parm, targ, arg);
18011 /* Make sure that ARG is not a variable-sized array. (Note
18012 that were talking about variable-sized arrays (like
18013 `int[n]'), rather than arrays of unknown size (like
18014 `int[]').) We'll get very confused by such a type since
18015 the bound of the array is not constant, and therefore
18016 not mangleable. Besides, such types are not allowed in
18017 ISO C++, so we can do as we please here. We do allow
18018 them for 'auto' deduction, since that isn't ABI-exposed. */
18019 if (!is_auto (parm) && variably_modified_type_p (arg, NULL_TREE))
18020 return unify_vla_arg (explain_p, arg);
18022 /* Strip typedefs as in convert_template_argument. */
18023 arg = canonicalize_type_argument (arg, tf_none);
18026 /* If ARG is a parameter pack or an expansion, we cannot unify
18027 against it unless PARM is also a parameter pack. */
18028 if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
18029 && !template_parameter_pack_p (parm))
18030 return unify_parameter_pack_mismatch (explain_p, parm, arg);
18032 /* If the argument deduction results is a METHOD_TYPE,
18033 then there is a problem.
18034 METHOD_TYPE doesn't map to any real C++ type the result of
18035 the deduction can not be of that type. */
18036 if (TREE_CODE (arg) == METHOD_TYPE)
18037 return unify_method_type_error (explain_p, arg);
18039 TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
18040 return unify_success (explain_p);
18042 case TEMPLATE_PARM_INDEX:
18043 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
18044 if (error_operand_p (tparm))
18045 return unify_invalid (explain_p);
18047 if (TEMPLATE_PARM_LEVEL (parm)
18048 != template_decl_level (tparm))
18050 /* The PARM is not one we're trying to unify. Just check
18051 to see if it matches ARG. */
18052 int result = !(TREE_CODE (arg) == TREE_CODE (parm)
18053 && cp_tree_equal (parm, arg));
18054 if (result)
18055 unify_expression_unequal (explain_p, parm, arg);
18056 return result;
18059 idx = TEMPLATE_PARM_IDX (parm);
18060 targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
18062 if (targ)
18064 int x = !cp_tree_equal (targ, arg);
18065 if (x)
18066 unify_inconsistency (explain_p, parm, targ, arg);
18067 return x;
18070 /* [temp.deduct.type] If, in the declaration of a function template
18071 with a non-type template-parameter, the non-type
18072 template-parameter is used in an expression in the function
18073 parameter-list and, if the corresponding template-argument is
18074 deduced, the template-argument type shall match the type of the
18075 template-parameter exactly, except that a template-argument
18076 deduced from an array bound may be of any integral type.
18077 The non-type parameter might use already deduced type parameters. */
18078 tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
18079 if (!TREE_TYPE (arg))
18080 /* Template-parameter dependent expression. Just accept it for now.
18081 It will later be processed in convert_template_argument. */
18083 else if (same_type_p (TREE_TYPE (arg), tparm))
18084 /* OK */;
18085 else if ((strict & UNIFY_ALLOW_INTEGER)
18086 && CP_INTEGRAL_TYPE_P (tparm))
18087 /* Convert the ARG to the type of PARM; the deduced non-type
18088 template argument must exactly match the types of the
18089 corresponding parameter. */
18090 arg = fold (build_nop (tparm, arg));
18091 else if (uses_template_parms (tparm))
18092 /* We haven't deduced the type of this parameter yet. Try again
18093 later. */
18094 return unify_success (explain_p);
18095 else
18096 return unify_type_mismatch (explain_p, tparm, TREE_TYPE (arg));
18098 /* If ARG is a parameter pack or an expansion, we cannot unify
18099 against it unless PARM is also a parameter pack. */
18100 if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
18101 && !TEMPLATE_PARM_PARAMETER_PACK (parm))
18102 return unify_parameter_pack_mismatch (explain_p, parm, arg);
18104 arg = strip_typedefs_expr (arg);
18105 TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
18106 return unify_success (explain_p);
18108 case PTRMEM_CST:
18110 /* A pointer-to-member constant can be unified only with
18111 another constant. */
18112 if (TREE_CODE (arg) != PTRMEM_CST)
18113 return unify_ptrmem_cst_mismatch (explain_p, parm, arg);
18115 /* Just unify the class member. It would be useless (and possibly
18116 wrong, depending on the strict flags) to unify also
18117 PTRMEM_CST_CLASS, because we want to be sure that both parm and
18118 arg refer to the same variable, even if through different
18119 classes. For instance:
18121 struct A { int x; };
18122 struct B : A { };
18124 Unification of &A::x and &B::x must succeed. */
18125 return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
18126 PTRMEM_CST_MEMBER (arg), strict, explain_p);
18129 case POINTER_TYPE:
18131 if (!TYPE_PTR_P (arg))
18132 return unify_type_mismatch (explain_p, parm, arg);
18134 /* [temp.deduct.call]
18136 A can be another pointer or pointer to member type that can
18137 be converted to the deduced A via a qualification
18138 conversion (_conv.qual_).
18140 We pass down STRICT here rather than UNIFY_ALLOW_NONE.
18141 This will allow for additional cv-qualification of the
18142 pointed-to types if appropriate. */
18144 if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
18145 /* The derived-to-base conversion only persists through one
18146 level of pointers. */
18147 strict |= (strict_in & UNIFY_ALLOW_DERIVED);
18149 return unify (tparms, targs, TREE_TYPE (parm),
18150 TREE_TYPE (arg), strict, explain_p);
18153 case REFERENCE_TYPE:
18154 if (TREE_CODE (arg) != REFERENCE_TYPE)
18155 return unify_type_mismatch (explain_p, parm, arg);
18156 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
18157 strict & UNIFY_ALLOW_MORE_CV_QUAL, explain_p);
18159 case ARRAY_TYPE:
18160 if (TREE_CODE (arg) != ARRAY_TYPE)
18161 return unify_type_mismatch (explain_p, parm, arg);
18162 if ((TYPE_DOMAIN (parm) == NULL_TREE)
18163 != (TYPE_DOMAIN (arg) == NULL_TREE))
18164 return unify_type_mismatch (explain_p, parm, arg);
18165 RECUR_AND_CHECK_FAILURE (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
18166 strict & UNIFY_ALLOW_MORE_CV_QUAL, explain_p);
18167 if (TYPE_DOMAIN (parm) != NULL_TREE)
18168 return unify_array_domain (tparms, targs, TYPE_DOMAIN (parm),
18169 TYPE_DOMAIN (arg), explain_p);
18170 return unify_success (explain_p);
18172 case REAL_TYPE:
18173 case COMPLEX_TYPE:
18174 case VECTOR_TYPE:
18175 case INTEGER_TYPE:
18176 case BOOLEAN_TYPE:
18177 case ENUMERAL_TYPE:
18178 case VOID_TYPE:
18179 case NULLPTR_TYPE:
18180 if (TREE_CODE (arg) != TREE_CODE (parm))
18181 return unify_type_mismatch (explain_p, parm, arg);
18183 /* We have already checked cv-qualification at the top of the
18184 function. */
18185 if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
18186 return unify_type_mismatch (explain_p, parm, arg);
18188 /* As far as unification is concerned, this wins. Later checks
18189 will invalidate it if necessary. */
18190 return unify_success (explain_p);
18192 /* Types INTEGER_CST and MINUS_EXPR can come from array bounds. */
18193 /* Type INTEGER_CST can come from ordinary constant template args. */
18194 case INTEGER_CST:
18195 while (TREE_CODE (arg) == NOP_EXPR)
18196 arg = TREE_OPERAND (arg, 0);
18198 if (TREE_CODE (arg) != INTEGER_CST)
18199 return unify_template_argument_mismatch (explain_p, parm, arg);
18200 return (tree_int_cst_equal (parm, arg)
18201 ? unify_success (explain_p)
18202 : unify_template_argument_mismatch (explain_p, parm, arg));
18204 case TREE_VEC:
18206 int i, len, argslen;
18207 int parm_variadic_p = 0;
18209 if (TREE_CODE (arg) != TREE_VEC)
18210 return unify_template_argument_mismatch (explain_p, parm, arg);
18212 len = TREE_VEC_LENGTH (parm);
18213 argslen = TREE_VEC_LENGTH (arg);
18215 /* Check for pack expansions in the parameters. */
18216 for (i = 0; i < len; ++i)
18218 if (PACK_EXPANSION_P (TREE_VEC_ELT (parm, i)))
18220 if (i == len - 1)
18221 /* We can unify against something with a trailing
18222 parameter pack. */
18223 parm_variadic_p = 1;
18224 else
18225 /* [temp.deduct.type]/9: If the template argument list of
18226 P contains a pack expansion that is not the last
18227 template argument, the entire template argument list
18228 is a non-deduced context. */
18229 return unify_success (explain_p);
18233 /* If we don't have enough arguments to satisfy the parameters
18234 (not counting the pack expression at the end), or we have
18235 too many arguments for a parameter list that doesn't end in
18236 a pack expression, we can't unify. */
18237 if (parm_variadic_p
18238 ? argslen < len - parm_variadic_p
18239 : argslen != len)
18240 return unify_arity (explain_p, TREE_VEC_LENGTH (arg), len);
18242 /* Unify all of the parameters that precede the (optional)
18243 pack expression. */
18244 for (i = 0; i < len - parm_variadic_p; ++i)
18246 RECUR_AND_CHECK_FAILURE (tparms, targs,
18247 TREE_VEC_ELT (parm, i),
18248 TREE_VEC_ELT (arg, i),
18249 UNIFY_ALLOW_NONE, explain_p);
18251 if (parm_variadic_p)
18252 return unify_pack_expansion (tparms, targs, parm, arg,
18253 DEDUCE_EXACT,
18254 /*subr=*/true, explain_p);
18255 return unify_success (explain_p);
18258 case RECORD_TYPE:
18259 case UNION_TYPE:
18260 if (TREE_CODE (arg) != TREE_CODE (parm))
18261 return unify_type_mismatch (explain_p, parm, arg);
18263 if (TYPE_PTRMEMFUNC_P (parm))
18265 if (!TYPE_PTRMEMFUNC_P (arg))
18266 return unify_type_mismatch (explain_p, parm, arg);
18268 return unify (tparms, targs,
18269 TYPE_PTRMEMFUNC_FN_TYPE (parm),
18270 TYPE_PTRMEMFUNC_FN_TYPE (arg),
18271 strict, explain_p);
18273 else if (TYPE_PTRMEMFUNC_P (arg))
18274 return unify_type_mismatch (explain_p, parm, arg);
18276 if (CLASSTYPE_TEMPLATE_INFO (parm))
18278 tree t = NULL_TREE;
18280 if (strict_in & UNIFY_ALLOW_DERIVED)
18282 /* First, we try to unify the PARM and ARG directly. */
18283 t = try_class_unification (tparms, targs,
18284 parm, arg, explain_p);
18286 if (!t)
18288 /* Fallback to the special case allowed in
18289 [temp.deduct.call]:
18291 If P is a class, and P has the form
18292 template-id, then A can be a derived class of
18293 the deduced A. Likewise, if P is a pointer to
18294 a class of the form template-id, A can be a
18295 pointer to a derived class pointed to by the
18296 deduced A. */
18297 enum template_base_result r;
18298 r = get_template_base (tparms, targs, parm, arg,
18299 explain_p, &t);
18301 if (!t)
18302 return unify_no_common_base (explain_p, r, parm, arg);
18305 else if (CLASSTYPE_TEMPLATE_INFO (arg)
18306 && (CLASSTYPE_TI_TEMPLATE (parm)
18307 == CLASSTYPE_TI_TEMPLATE (arg)))
18308 /* Perhaps PARM is something like S<U> and ARG is S<int>.
18309 Then, we should unify `int' and `U'. */
18310 t = arg;
18311 else
18312 /* There's no chance of unification succeeding. */
18313 return unify_type_mismatch (explain_p, parm, arg);
18315 return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
18316 CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE, explain_p);
18318 else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
18319 return unify_type_mismatch (explain_p, parm, arg);
18320 return unify_success (explain_p);
18322 case METHOD_TYPE:
18323 case FUNCTION_TYPE:
18325 unsigned int nargs;
18326 tree *args;
18327 tree a;
18328 unsigned int i;
18330 if (TREE_CODE (arg) != TREE_CODE (parm))
18331 return unify_type_mismatch (explain_p, parm, arg);
18333 /* CV qualifications for methods can never be deduced, they must
18334 match exactly. We need to check them explicitly here,
18335 because type_unification_real treats them as any other
18336 cv-qualified parameter. */
18337 if (TREE_CODE (parm) == METHOD_TYPE
18338 && (!check_cv_quals_for_unify
18339 (UNIFY_ALLOW_NONE,
18340 class_of_this_parm (arg),
18341 class_of_this_parm (parm))))
18342 return unify_cv_qual_mismatch (explain_p, parm, arg);
18344 RECUR_AND_CHECK_FAILURE (tparms, targs, TREE_TYPE (parm),
18345 TREE_TYPE (arg), UNIFY_ALLOW_NONE, explain_p);
18347 nargs = list_length (TYPE_ARG_TYPES (arg));
18348 args = XALLOCAVEC (tree, nargs);
18349 for (a = TYPE_ARG_TYPES (arg), i = 0;
18350 a != NULL_TREE && a != void_list_node;
18351 a = TREE_CHAIN (a), ++i)
18352 args[i] = TREE_VALUE (a);
18353 nargs = i;
18355 return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
18356 args, nargs, 1, DEDUCE_EXACT,
18357 LOOKUP_NORMAL, NULL, explain_p);
18360 case OFFSET_TYPE:
18361 /* Unify a pointer to member with a pointer to member function, which
18362 deduces the type of the member as a function type. */
18363 if (TYPE_PTRMEMFUNC_P (arg))
18365 /* Check top-level cv qualifiers */
18366 if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
18367 return unify_cv_qual_mismatch (explain_p, parm, arg);
18369 RECUR_AND_CHECK_FAILURE (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
18370 TYPE_PTRMEMFUNC_OBJECT_TYPE (arg),
18371 UNIFY_ALLOW_NONE, explain_p);
18373 /* Determine the type of the function we are unifying against. */
18374 tree fntype = static_fn_type (arg);
18376 return unify (tparms, targs, TREE_TYPE (parm), fntype, strict, explain_p);
18379 if (TREE_CODE (arg) != OFFSET_TYPE)
18380 return unify_type_mismatch (explain_p, parm, arg);
18381 RECUR_AND_CHECK_FAILURE (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
18382 TYPE_OFFSET_BASETYPE (arg),
18383 UNIFY_ALLOW_NONE, explain_p);
18384 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
18385 strict, explain_p);
18387 case CONST_DECL:
18388 if (DECL_TEMPLATE_PARM_P (parm))
18389 return unify (tparms, targs, DECL_INITIAL (parm), arg, strict, explain_p);
18390 if (arg != integral_constant_value (parm))
18391 return unify_template_argument_mismatch (explain_p, parm, arg);
18392 return unify_success (explain_p);
18394 case FIELD_DECL:
18395 case TEMPLATE_DECL:
18396 /* Matched cases are handled by the ARG == PARM test above. */
18397 return unify_template_argument_mismatch (explain_p, parm, arg);
18399 case VAR_DECL:
18400 /* A non-type template parameter that is a variable should be a
18401 an integral constant, in which case, it whould have been
18402 folded into its (constant) value. So we should not be getting
18403 a variable here. */
18404 gcc_unreachable ();
18406 case TYPE_ARGUMENT_PACK:
18407 case NONTYPE_ARGUMENT_PACK:
18408 return unify (tparms, targs, ARGUMENT_PACK_ARGS (parm),
18409 ARGUMENT_PACK_ARGS (arg), strict, explain_p);
18411 case TYPEOF_TYPE:
18412 case DECLTYPE_TYPE:
18413 case UNDERLYING_TYPE:
18414 /* Cannot deduce anything from TYPEOF_TYPE, DECLTYPE_TYPE,
18415 or UNDERLYING_TYPE nodes. */
18416 return unify_success (explain_p);
18418 case ERROR_MARK:
18419 /* Unification fails if we hit an error node. */
18420 return unify_invalid (explain_p);
18422 case INDIRECT_REF:
18423 if (REFERENCE_REF_P (parm))
18424 return unify (tparms, targs, TREE_OPERAND (parm, 0), arg,
18425 strict, explain_p);
18426 /* FALLTHRU */
18428 default:
18429 /* An unresolved overload is a nondeduced context. */
18430 if (is_overloaded_fn (parm) || type_unknown_p (parm))
18431 return unify_success (explain_p);
18432 gcc_assert (EXPR_P (parm));
18434 /* We must be looking at an expression. This can happen with
18435 something like:
18437 template <int I>
18438 void foo(S<I>, S<I + 2>);
18440 This is a "nondeduced context":
18442 [deduct.type]
18444 The nondeduced contexts are:
18446 --A type that is a template-id in which one or more of
18447 the template-arguments is an expression that references
18448 a template-parameter.
18450 In these cases, we assume deduction succeeded, but don't
18451 actually infer any unifications. */
18453 if (!uses_template_parms (parm)
18454 && !template_args_equal (parm, arg))
18455 return unify_expression_unequal (explain_p, parm, arg);
18456 else
18457 return unify_success (explain_p);
18460 #undef RECUR_AND_CHECK_FAILURE
18462 /* Note that DECL can be defined in this translation unit, if
18463 required. */
18465 static void
18466 mark_definable (tree decl)
18468 tree clone;
18469 DECL_NOT_REALLY_EXTERN (decl) = 1;
18470 FOR_EACH_CLONE (clone, decl)
18471 DECL_NOT_REALLY_EXTERN (clone) = 1;
18474 /* Called if RESULT is explicitly instantiated, or is a member of an
18475 explicitly instantiated class. */
18477 void
18478 mark_decl_instantiated (tree result, int extern_p)
18480 SET_DECL_EXPLICIT_INSTANTIATION (result);
18482 /* If this entity has already been written out, it's too late to
18483 make any modifications. */
18484 if (TREE_ASM_WRITTEN (result))
18485 return;
18487 /* For anonymous namespace we don't need to do anything. */
18488 if (decl_anon_ns_mem_p (result))
18490 gcc_assert (!TREE_PUBLIC (result));
18491 return;
18494 if (TREE_CODE (result) != FUNCTION_DECL)
18495 /* The TREE_PUBLIC flag for function declarations will have been
18496 set correctly by tsubst. */
18497 TREE_PUBLIC (result) = 1;
18499 /* This might have been set by an earlier implicit instantiation. */
18500 DECL_COMDAT (result) = 0;
18502 if (extern_p)
18503 DECL_NOT_REALLY_EXTERN (result) = 0;
18504 else
18506 mark_definable (result);
18507 mark_needed (result);
18508 /* Always make artificials weak. */
18509 if (DECL_ARTIFICIAL (result) && flag_weak)
18510 comdat_linkage (result);
18511 /* For WIN32 we also want to put explicit instantiations in
18512 linkonce sections. */
18513 else if (TREE_PUBLIC (result))
18514 maybe_make_one_only (result);
18517 /* If EXTERN_P, then this function will not be emitted -- unless
18518 followed by an explicit instantiation, at which point its linkage
18519 will be adjusted. If !EXTERN_P, then this function will be
18520 emitted here. In neither circumstance do we want
18521 import_export_decl to adjust the linkage. */
18522 DECL_INTERFACE_KNOWN (result) = 1;
18525 /* Subroutine of more_specialized_fn: check whether TARGS is missing any
18526 important template arguments. If any are missing, we check whether
18527 they're important by using error_mark_node for substituting into any
18528 args that were used for partial ordering (the ones between ARGS and END)
18529 and seeing if it bubbles up. */
18531 static bool
18532 check_undeduced_parms (tree targs, tree args, tree end)
18534 bool found = false;
18535 int i;
18536 for (i = TREE_VEC_LENGTH (targs) - 1; i >= 0; --i)
18537 if (TREE_VEC_ELT (targs, i) == NULL_TREE)
18539 found = true;
18540 TREE_VEC_ELT (targs, i) = error_mark_node;
18542 if (found)
18544 tree substed = tsubst_arg_types (args, targs, end, tf_none, NULL_TREE);
18545 if (substed == error_mark_node)
18546 return true;
18548 return false;
18551 /* Given two function templates PAT1 and PAT2, return:
18553 1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
18554 -1 if PAT2 is more specialized than PAT1.
18555 0 if neither is more specialized.
18557 LEN indicates the number of parameters we should consider
18558 (defaulted parameters should not be considered).
18560 The 1998 std underspecified function template partial ordering, and
18561 DR214 addresses the issue. We take pairs of arguments, one from
18562 each of the templates, and deduce them against each other. One of
18563 the templates will be more specialized if all the *other*
18564 template's arguments deduce against its arguments and at least one
18565 of its arguments *does* *not* deduce against the other template's
18566 corresponding argument. Deduction is done as for class templates.
18567 The arguments used in deduction have reference and top level cv
18568 qualifiers removed. Iff both arguments were originally reference
18569 types *and* deduction succeeds in both directions, an lvalue reference
18570 wins against an rvalue reference and otherwise the template
18571 with the more cv-qualified argument wins for that pairing (if
18572 neither is more cv-qualified, they both are equal). Unlike regular
18573 deduction, after all the arguments have been deduced in this way,
18574 we do *not* verify the deduced template argument values can be
18575 substituted into non-deduced contexts.
18577 The logic can be a bit confusing here, because we look at deduce1 and
18578 targs1 to see if pat2 is at least as specialized, and vice versa; if we
18579 can find template arguments for pat1 to make arg1 look like arg2, that
18580 means that arg2 is at least as specialized as arg1. */
18583 more_specialized_fn (tree pat1, tree pat2, int len)
18585 tree decl1 = DECL_TEMPLATE_RESULT (pat1);
18586 tree decl2 = DECL_TEMPLATE_RESULT (pat2);
18587 tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
18588 tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
18589 tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
18590 tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
18591 tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
18592 tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
18593 tree origs1, origs2;
18594 bool lose1 = false;
18595 bool lose2 = false;
18597 /* Remove the this parameter from non-static member functions. If
18598 one is a non-static member function and the other is not a static
18599 member function, remove the first parameter from that function
18600 also. This situation occurs for operator functions where we
18601 locate both a member function (with this pointer) and non-member
18602 operator (with explicit first operand). */
18603 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
18605 len--; /* LEN is the number of significant arguments for DECL1 */
18606 args1 = TREE_CHAIN (args1);
18607 if (!DECL_STATIC_FUNCTION_P (decl2))
18608 args2 = TREE_CHAIN (args2);
18610 else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
18612 args2 = TREE_CHAIN (args2);
18613 if (!DECL_STATIC_FUNCTION_P (decl1))
18615 len--;
18616 args1 = TREE_CHAIN (args1);
18620 /* If only one is a conversion operator, they are unordered. */
18621 if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
18622 return 0;
18624 /* Consider the return type for a conversion function */
18625 if (DECL_CONV_FN_P (decl1))
18627 args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
18628 args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
18629 len++;
18632 processing_template_decl++;
18634 origs1 = args1;
18635 origs2 = args2;
18637 while (len--
18638 /* Stop when an ellipsis is seen. */
18639 && args1 != NULL_TREE && args2 != NULL_TREE)
18641 tree arg1 = TREE_VALUE (args1);
18642 tree arg2 = TREE_VALUE (args2);
18643 int deduce1, deduce2;
18644 int quals1 = -1;
18645 int quals2 = -1;
18646 int ref1 = 0;
18647 int ref2 = 0;
18649 if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
18650 && TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
18652 /* When both arguments are pack expansions, we need only
18653 unify the patterns themselves. */
18654 arg1 = PACK_EXPANSION_PATTERN (arg1);
18655 arg2 = PACK_EXPANSION_PATTERN (arg2);
18657 /* This is the last comparison we need to do. */
18658 len = 0;
18661 if (TREE_CODE (arg1) == REFERENCE_TYPE)
18663 ref1 = TYPE_REF_IS_RVALUE (arg1) + 1;
18664 arg1 = TREE_TYPE (arg1);
18665 quals1 = cp_type_quals (arg1);
18668 if (TREE_CODE (arg2) == REFERENCE_TYPE)
18670 ref2 = TYPE_REF_IS_RVALUE (arg2) + 1;
18671 arg2 = TREE_TYPE (arg2);
18672 quals2 = cp_type_quals (arg2);
18675 arg1 = TYPE_MAIN_VARIANT (arg1);
18676 arg2 = TYPE_MAIN_VARIANT (arg2);
18678 if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION)
18680 int i, len2 = list_length (args2);
18681 tree parmvec = make_tree_vec (1);
18682 tree argvec = make_tree_vec (len2);
18683 tree ta = args2;
18685 /* Setup the parameter vector, which contains only ARG1. */
18686 TREE_VEC_ELT (parmvec, 0) = arg1;
18688 /* Setup the argument vector, which contains the remaining
18689 arguments. */
18690 for (i = 0; i < len2; i++, ta = TREE_CHAIN (ta))
18691 TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
18693 deduce1 = (unify_pack_expansion (tparms1, targs1, parmvec,
18694 argvec, DEDUCE_EXACT,
18695 /*subr=*/true, /*explain_p=*/false)
18696 == 0);
18698 /* We cannot deduce in the other direction, because ARG1 is
18699 a pack expansion but ARG2 is not. */
18700 deduce2 = 0;
18702 else if (TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
18704 int i, len1 = list_length (args1);
18705 tree parmvec = make_tree_vec (1);
18706 tree argvec = make_tree_vec (len1);
18707 tree ta = args1;
18709 /* Setup the parameter vector, which contains only ARG1. */
18710 TREE_VEC_ELT (parmvec, 0) = arg2;
18712 /* Setup the argument vector, which contains the remaining
18713 arguments. */
18714 for (i = 0; i < len1; i++, ta = TREE_CHAIN (ta))
18715 TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
18717 deduce2 = (unify_pack_expansion (tparms2, targs2, parmvec,
18718 argvec, DEDUCE_EXACT,
18719 /*subr=*/true, /*explain_p=*/false)
18720 == 0);
18722 /* We cannot deduce in the other direction, because ARG2 is
18723 a pack expansion but ARG1 is not.*/
18724 deduce1 = 0;
18727 else
18729 /* The normal case, where neither argument is a pack
18730 expansion. */
18731 deduce1 = (unify (tparms1, targs1, arg1, arg2,
18732 UNIFY_ALLOW_NONE, /*explain_p=*/false)
18733 == 0);
18734 deduce2 = (unify (tparms2, targs2, arg2, arg1,
18735 UNIFY_ALLOW_NONE, /*explain_p=*/false)
18736 == 0);
18739 /* If we couldn't deduce arguments for tparms1 to make arg1 match
18740 arg2, then arg2 is not as specialized as arg1. */
18741 if (!deduce1)
18742 lose2 = true;
18743 if (!deduce2)
18744 lose1 = true;
18746 /* "If, for a given type, deduction succeeds in both directions
18747 (i.e., the types are identical after the transformations above)
18748 and both P and A were reference types (before being replaced with
18749 the type referred to above):
18750 - if the type from the argument template was an lvalue reference and
18751 the type from the parameter template was not, the argument type is
18752 considered to be more specialized than the other; otherwise,
18753 - if the type from the argument template is more cv-qualified
18754 than the type from the parameter template (as described above),
18755 the argument type is considered to be more specialized than the other;
18756 otherwise,
18757 - neither type is more specialized than the other." */
18759 if (deduce1 && deduce2)
18761 if (ref1 && ref2 && ref1 != ref2)
18763 if (ref1 > ref2)
18764 lose1 = true;
18765 else
18766 lose2 = true;
18768 else if (quals1 != quals2 && quals1 >= 0 && quals2 >= 0)
18770 if ((quals1 & quals2) == quals2)
18771 lose2 = true;
18772 if ((quals1 & quals2) == quals1)
18773 lose1 = true;
18777 if (lose1 && lose2)
18778 /* We've failed to deduce something in either direction.
18779 These must be unordered. */
18780 break;
18782 if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
18783 || TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
18784 /* We have already processed all of the arguments in our
18785 handing of the pack expansion type. */
18786 len = 0;
18788 args1 = TREE_CHAIN (args1);
18789 args2 = TREE_CHAIN (args2);
18792 /* "In most cases, all template parameters must have values in order for
18793 deduction to succeed, but for partial ordering purposes a template
18794 parameter may remain without a value provided it is not used in the
18795 types being used for partial ordering."
18797 Thus, if we are missing any of the targs1 we need to substitute into
18798 origs1, then pat2 is not as specialized as pat1. This can happen when
18799 there is a nondeduced context. */
18800 if (!lose2 && check_undeduced_parms (targs1, origs1, args1))
18801 lose2 = true;
18802 if (!lose1 && check_undeduced_parms (targs2, origs2, args2))
18803 lose1 = true;
18805 processing_template_decl--;
18807 /* All things being equal, if the next argument is a pack expansion
18808 for one function but not for the other, prefer the
18809 non-variadic function. FIXME this is bogus; see c++/41958. */
18810 if (lose1 == lose2
18811 && args1 && TREE_VALUE (args1)
18812 && args2 && TREE_VALUE (args2))
18814 lose1 = TREE_CODE (TREE_VALUE (args1)) == TYPE_PACK_EXPANSION;
18815 lose2 = TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION;
18818 if (lose1 == lose2)
18819 return 0;
18820 else if (!lose1)
18821 return 1;
18822 else
18823 return -1;
18826 /* Determine which of two partial specializations of TMPL is more
18827 specialized.
18829 PAT1 is a TREE_LIST whose TREE_TYPE is the _TYPE node corresponding
18830 to the first partial specialization. The TREE_VALUE is the
18831 innermost set of template parameters for the partial
18832 specialization. PAT2 is similar, but for the second template.
18834 Return 1 if the first partial specialization is more specialized;
18835 -1 if the second is more specialized; 0 if neither is more
18836 specialized.
18838 See [temp.class.order] for information about determining which of
18839 two templates is more specialized. */
18841 static int
18842 more_specialized_class (tree tmpl, tree pat1, tree pat2)
18844 tree targs;
18845 tree tmpl1, tmpl2;
18846 int winner = 0;
18847 bool any_deductions = false;
18849 tmpl1 = TREE_TYPE (pat1);
18850 tmpl2 = TREE_TYPE (pat2);
18852 /* Just like what happens for functions, if we are ordering between
18853 different class template specializations, we may encounter dependent
18854 types in the arguments, and we need our dependency check functions
18855 to behave correctly. */
18856 ++processing_template_decl;
18857 targs = get_class_bindings (tmpl, TREE_VALUE (pat1),
18858 CLASSTYPE_TI_ARGS (tmpl1),
18859 CLASSTYPE_TI_ARGS (tmpl2));
18860 if (targs)
18862 --winner;
18863 any_deductions = true;
18866 targs = get_class_bindings (tmpl, TREE_VALUE (pat2),
18867 CLASSTYPE_TI_ARGS (tmpl2),
18868 CLASSTYPE_TI_ARGS (tmpl1));
18869 if (targs)
18871 ++winner;
18872 any_deductions = true;
18874 --processing_template_decl;
18876 /* In the case of a tie where at least one of the class templates
18877 has a parameter pack at the end, the template with the most
18878 non-packed parameters wins. */
18879 if (winner == 0
18880 && any_deductions
18881 && (template_args_variadic_p (TREE_PURPOSE (pat1))
18882 || template_args_variadic_p (TREE_PURPOSE (pat2))))
18884 tree args1 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat1));
18885 tree args2 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat2));
18886 int len1 = TREE_VEC_LENGTH (args1);
18887 int len2 = TREE_VEC_LENGTH (args2);
18889 /* We don't count the pack expansion at the end. */
18890 if (template_args_variadic_p (TREE_PURPOSE (pat1)))
18891 --len1;
18892 if (template_args_variadic_p (TREE_PURPOSE (pat2)))
18893 --len2;
18895 if (len1 > len2)
18896 return 1;
18897 else if (len1 < len2)
18898 return -1;
18901 return winner;
18904 /* Return the template arguments that will produce the function signature
18905 DECL from the function template FN, with the explicit template
18906 arguments EXPLICIT_ARGS. If CHECK_RETTYPE is true, the return type must
18907 also match. Return NULL_TREE if no satisfactory arguments could be
18908 found. */
18910 static tree
18911 get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
18913 int ntparms = DECL_NTPARMS (fn);
18914 tree targs = make_tree_vec (ntparms);
18915 tree decl_type = TREE_TYPE (decl);
18916 tree decl_arg_types;
18917 tree *args;
18918 unsigned int nargs, ix;
18919 tree arg;
18921 gcc_assert (decl != DECL_TEMPLATE_RESULT (fn));
18923 /* Never do unification on the 'this' parameter. */
18924 decl_arg_types = skip_artificial_parms_for (decl,
18925 TYPE_ARG_TYPES (decl_type));
18927 nargs = list_length (decl_arg_types);
18928 args = XALLOCAVEC (tree, nargs);
18929 for (arg = decl_arg_types, ix = 0;
18930 arg != NULL_TREE && arg != void_list_node;
18931 arg = TREE_CHAIN (arg), ++ix)
18932 args[ix] = TREE_VALUE (arg);
18934 if (fn_type_unification (fn, explicit_args, targs,
18935 args, ix,
18936 (check_rettype || DECL_CONV_FN_P (fn)
18937 ? TREE_TYPE (decl_type) : NULL_TREE),
18938 DEDUCE_EXACT, LOOKUP_NORMAL, /*explain_p=*/false,
18939 /*decltype*/false)
18940 == error_mark_node)
18941 return NULL_TREE;
18943 return targs;
18946 /* Return the innermost template arguments that, when applied to a partial
18947 specialization of TMPL whose innermost template parameters are
18948 TPARMS, and whose specialization arguments are SPEC_ARGS, yield the
18949 ARGS.
18951 For example, suppose we have:
18953 template <class T, class U> struct S {};
18954 template <class T> struct S<T*, int> {};
18956 Then, suppose we want to get `S<double*, int>'. The TPARMS will be
18957 {T}, the SPEC_ARGS will be {T*, int} and the ARGS will be {double*,
18958 int}. The resulting vector will be {double}, indicating that `T'
18959 is bound to `double'. */
18961 static tree
18962 get_class_bindings (tree tmpl, tree tparms, tree spec_args, tree args)
18964 int i, ntparms = TREE_VEC_LENGTH (tparms);
18965 tree deduced_args;
18966 tree innermost_deduced_args;
18968 innermost_deduced_args = make_tree_vec (ntparms);
18969 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
18971 deduced_args = copy_node (args);
18972 SET_TMPL_ARGS_LEVEL (deduced_args,
18973 TMPL_ARGS_DEPTH (deduced_args),
18974 innermost_deduced_args);
18976 else
18977 deduced_args = innermost_deduced_args;
18979 if (unify (tparms, deduced_args,
18980 INNERMOST_TEMPLATE_ARGS (spec_args),
18981 INNERMOST_TEMPLATE_ARGS (args),
18982 UNIFY_ALLOW_NONE, /*explain_p=*/false))
18983 return NULL_TREE;
18985 for (i = 0; i < ntparms; ++i)
18986 if (! TREE_VEC_ELT (innermost_deduced_args, i))
18987 return NULL_TREE;
18989 /* Verify that nondeduced template arguments agree with the type
18990 obtained from argument deduction.
18992 For example:
18994 struct A { typedef int X; };
18995 template <class T, class U> struct C {};
18996 template <class T> struct C<T, typename T::X> {};
18998 Then with the instantiation `C<A, int>', we can deduce that
18999 `T' is `A' but unify () does not check whether `typename T::X'
19000 is `int'. */
19001 spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
19002 spec_args = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
19003 spec_args, tmpl,
19004 tf_none, false, false);
19005 if (spec_args == error_mark_node
19006 /* We only need to check the innermost arguments; the other
19007 arguments will always agree. */
19008 || !comp_template_args (INNERMOST_TEMPLATE_ARGS (spec_args),
19009 INNERMOST_TEMPLATE_ARGS (args)))
19010 return NULL_TREE;
19012 /* Now that we have bindings for all of the template arguments,
19013 ensure that the arguments deduced for the template template
19014 parameters have compatible template parameter lists. See the use
19015 of template_template_parm_bindings_ok_p in fn_type_unification
19016 for more information. */
19017 if (!template_template_parm_bindings_ok_p (tparms, deduced_args))
19018 return NULL_TREE;
19020 return deduced_args;
19023 /* TEMPLATES is a TREE_LIST. Each TREE_VALUE is a TEMPLATE_DECL.
19024 Return the TREE_LIST node with the most specialized template, if
19025 any. If there is no most specialized template, the error_mark_node
19026 is returned.
19028 Note that this function does not look at, or modify, the
19029 TREE_PURPOSE or TREE_TYPE of any of the nodes. Since the node
19030 returned is one of the elements of INSTANTIATIONS, callers may
19031 store information in the TREE_PURPOSE or TREE_TYPE of the nodes,
19032 and retrieve it from the value returned. */
19034 tree
19035 most_specialized_instantiation (tree templates)
19037 tree fn, champ;
19039 ++processing_template_decl;
19041 champ = templates;
19042 for (fn = TREE_CHAIN (templates); fn; fn = TREE_CHAIN (fn))
19044 int fate = 0;
19046 if (get_bindings (TREE_VALUE (champ),
19047 DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
19048 NULL_TREE, /*check_ret=*/true))
19049 fate--;
19051 if (get_bindings (TREE_VALUE (fn),
19052 DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
19053 NULL_TREE, /*check_ret=*/true))
19054 fate++;
19056 if (fate == -1)
19057 champ = fn;
19058 else if (!fate)
19060 /* Equally specialized, move to next function. If there
19061 is no next function, nothing's most specialized. */
19062 fn = TREE_CHAIN (fn);
19063 champ = fn;
19064 if (!fn)
19065 break;
19069 if (champ)
19070 /* Now verify that champ is better than everything earlier in the
19071 instantiation list. */
19072 for (fn = templates; fn != champ; fn = TREE_CHAIN (fn))
19073 if (get_bindings (TREE_VALUE (champ),
19074 DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
19075 NULL_TREE, /*check_ret=*/true)
19076 || !get_bindings (TREE_VALUE (fn),
19077 DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
19078 NULL_TREE, /*check_ret=*/true))
19080 champ = NULL_TREE;
19081 break;
19084 processing_template_decl--;
19086 if (!champ)
19087 return error_mark_node;
19089 return champ;
19092 /* If DECL is a specialization of some template, return the most
19093 general such template. Otherwise, returns NULL_TREE.
19095 For example, given:
19097 template <class T> struct S { template <class U> void f(U); };
19099 if TMPL is `template <class U> void S<int>::f(U)' this will return
19100 the full template. This function will not trace past partial
19101 specializations, however. For example, given in addition:
19103 template <class T> struct S<T*> { template <class U> void f(U); };
19105 if TMPL is `template <class U> void S<int*>::f(U)' this will return
19106 `template <class T> template <class U> S<T*>::f(U)'. */
19108 tree
19109 most_general_template (tree decl)
19111 if (TREE_CODE (decl) != TEMPLATE_DECL)
19113 if (tree tinfo = get_template_info (decl))
19114 decl = TI_TEMPLATE (tinfo);
19115 /* The TI_TEMPLATE can be an IDENTIFIER_NODE for a
19116 template friend, or a FIELD_DECL for a capture pack. */
19117 if (TREE_CODE (decl) != TEMPLATE_DECL)
19118 return NULL_TREE;
19121 /* Look for more and more general templates. */
19122 while (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
19124 /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
19125 (See cp-tree.h for details.) */
19126 if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
19127 break;
19129 if (CLASS_TYPE_P (TREE_TYPE (decl))
19130 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
19131 break;
19133 /* Stop if we run into an explicitly specialized class template. */
19134 if (!DECL_NAMESPACE_SCOPE_P (decl)
19135 && DECL_CONTEXT (decl)
19136 && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
19137 break;
19139 decl = DECL_TI_TEMPLATE (decl);
19142 return decl;
19145 /* Return the most specialized of the class template partial
19146 specializations which can produce TYPE, a specialization of some class
19147 template. The value returned is actually a TREE_LIST; the TREE_TYPE is
19148 a _TYPE node corresponding to the partial specialization, while the
19149 TREE_PURPOSE is the set of template arguments that must be
19150 substituted into the TREE_TYPE in order to generate TYPE.
19152 If the choice of partial specialization is ambiguous, a diagnostic
19153 is issued, and the error_mark_node is returned. If there are no
19154 partial specializations matching TYPE, then NULL_TREE is
19155 returned, indicating that the primary template should be used. */
19157 static tree
19158 most_specialized_class (tree type, tsubst_flags_t complain)
19160 tree list = NULL_TREE;
19161 tree t;
19162 tree champ;
19163 int fate;
19164 bool ambiguous_p;
19165 tree outer_args = NULL_TREE;
19167 tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
19168 tree main_tmpl = most_general_template (tmpl);
19169 tree args = CLASSTYPE_TI_ARGS (type);
19171 /* For determining which partial specialization to use, only the
19172 innermost args are interesting. */
19173 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
19175 outer_args = strip_innermost_template_args (args, 1);
19176 args = INNERMOST_TEMPLATE_ARGS (args);
19179 for (t = DECL_TEMPLATE_SPECIALIZATIONS (main_tmpl); t; t = TREE_CHAIN (t))
19181 tree partial_spec_args;
19182 tree spec_args;
19183 tree spec_tmpl = TREE_VALUE (t);
19184 tree orig_parms = DECL_INNERMOST_TEMPLATE_PARMS (spec_tmpl);
19186 partial_spec_args = CLASSTYPE_TI_ARGS (TREE_TYPE (t));
19188 ++processing_template_decl;
19190 if (outer_args)
19192 /* Discard the outer levels of args, and then substitute in the
19193 template args from the enclosing class. */
19194 partial_spec_args = INNERMOST_TEMPLATE_ARGS (partial_spec_args);
19195 partial_spec_args = tsubst_template_args
19196 (partial_spec_args, outer_args, tf_none, NULL_TREE);
19198 /* And the same for the partial specialization TEMPLATE_DECL. */
19199 spec_tmpl = tsubst (spec_tmpl, outer_args, tf_none, NULL_TREE);
19202 partial_spec_args =
19203 coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
19204 partial_spec_args,
19205 tmpl, tf_none,
19206 /*require_all_args=*/true,
19207 /*use_default_args=*/true);
19209 --processing_template_decl;
19211 if (partial_spec_args == error_mark_node)
19212 return error_mark_node;
19213 if (spec_tmpl == error_mark_node)
19214 return error_mark_node;
19216 tree parms = DECL_INNERMOST_TEMPLATE_PARMS (spec_tmpl);
19217 spec_args = get_class_bindings (tmpl, parms,
19218 partial_spec_args,
19219 args);
19220 if (spec_args)
19222 if (outer_args)
19223 spec_args = add_to_template_args (outer_args, spec_args);
19224 list = tree_cons (spec_args, orig_parms, list);
19225 TREE_TYPE (list) = TREE_TYPE (t);
19229 if (! list)
19230 return NULL_TREE;
19232 ambiguous_p = false;
19233 t = list;
19234 champ = t;
19235 t = TREE_CHAIN (t);
19236 for (; t; t = TREE_CHAIN (t))
19238 fate = more_specialized_class (tmpl, champ, t);
19239 if (fate == 1)
19241 else
19243 if (fate == 0)
19245 t = TREE_CHAIN (t);
19246 if (! t)
19248 ambiguous_p = true;
19249 break;
19252 champ = t;
19256 if (!ambiguous_p)
19257 for (t = list; t && t != champ; t = TREE_CHAIN (t))
19259 fate = more_specialized_class (tmpl, champ, t);
19260 if (fate != 1)
19262 ambiguous_p = true;
19263 break;
19267 if (ambiguous_p)
19269 const char *str;
19270 char *spaces = NULL;
19271 if (!(complain & tf_error))
19272 return error_mark_node;
19273 error ("ambiguous class template instantiation for %q#T", type);
19274 str = ngettext ("candidate is:", "candidates are:", list_length (list));
19275 for (t = list; t; t = TREE_CHAIN (t))
19277 error ("%s %+#T", spaces ? spaces : str, TREE_TYPE (t));
19278 spaces = spaces ? spaces : get_spaces (str);
19280 free (spaces);
19281 return error_mark_node;
19284 return champ;
19287 /* Explicitly instantiate DECL. */
19289 void
19290 do_decl_instantiation (tree decl, tree storage)
19292 tree result = NULL_TREE;
19293 int extern_p = 0;
19295 if (!decl || decl == error_mark_node)
19296 /* An error occurred, for which grokdeclarator has already issued
19297 an appropriate message. */
19298 return;
19299 else if (! DECL_LANG_SPECIFIC (decl))
19301 error ("explicit instantiation of non-template %q#D", decl);
19302 return;
19305 bool var_templ = (DECL_TEMPLATE_INFO (decl)
19306 && variable_template_p (DECL_TI_TEMPLATE (decl)));
19308 if (VAR_P (decl) && !var_templ)
19310 /* There is an asymmetry here in the way VAR_DECLs and
19311 FUNCTION_DECLs are handled by grokdeclarator. In the case of
19312 the latter, the DECL we get back will be marked as a
19313 template instantiation, and the appropriate
19314 DECL_TEMPLATE_INFO will be set up. This does not happen for
19315 VAR_DECLs so we do the lookup here. Probably, grokdeclarator
19316 should handle VAR_DECLs as it currently handles
19317 FUNCTION_DECLs. */
19318 if (!DECL_CLASS_SCOPE_P (decl))
19320 error ("%qD is not a static data member of a class template", decl);
19321 return;
19323 result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
19324 if (!result || !VAR_P (result))
19326 error ("no matching template for %qD found", decl);
19327 return;
19329 if (!same_type_p (TREE_TYPE (result), TREE_TYPE (decl)))
19331 error ("type %qT for explicit instantiation %qD does not match "
19332 "declared type %qT", TREE_TYPE (result), decl,
19333 TREE_TYPE (decl));
19334 return;
19337 else if (TREE_CODE (decl) != FUNCTION_DECL && !var_templ)
19339 error ("explicit instantiation of %q#D", decl);
19340 return;
19342 else
19343 result = decl;
19345 /* Check for various error cases. Note that if the explicit
19346 instantiation is valid the RESULT will currently be marked as an
19347 *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
19348 until we get here. */
19350 if (DECL_TEMPLATE_SPECIALIZATION (result))
19352 /* DR 259 [temp.spec].
19354 Both an explicit instantiation and a declaration of an explicit
19355 specialization shall not appear in a program unless the explicit
19356 instantiation follows a declaration of the explicit specialization.
19358 For a given set of template parameters, if an explicit
19359 instantiation of a template appears after a declaration of an
19360 explicit specialization for that template, the explicit
19361 instantiation has no effect. */
19362 return;
19364 else if (DECL_EXPLICIT_INSTANTIATION (result))
19366 /* [temp.spec]
19368 No program shall explicitly instantiate any template more
19369 than once.
19371 We check DECL_NOT_REALLY_EXTERN so as not to complain when
19372 the first instantiation was `extern' and the second is not,
19373 and EXTERN_P for the opposite case. */
19374 if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
19375 permerror (input_location, "duplicate explicit instantiation of %q#D", result);
19376 /* If an "extern" explicit instantiation follows an ordinary
19377 explicit instantiation, the template is instantiated. */
19378 if (extern_p)
19379 return;
19381 else if (!DECL_IMPLICIT_INSTANTIATION (result))
19383 error ("no matching template for %qD found", result);
19384 return;
19386 else if (!DECL_TEMPLATE_INFO (result))
19388 permerror (input_location, "explicit instantiation of non-template %q#D", result);
19389 return;
19392 if (storage == NULL_TREE)
19394 else if (storage == ridpointers[(int) RID_EXTERN])
19396 if (!in_system_header_at (input_location) && (cxx_dialect == cxx98))
19397 pedwarn (input_location, OPT_Wpedantic,
19398 "ISO C++ 1998 forbids the use of %<extern%> on explicit "
19399 "instantiations");
19400 extern_p = 1;
19402 else
19403 error ("storage class %qD applied to template instantiation", storage);
19405 check_explicit_instantiation_namespace (result);
19406 mark_decl_instantiated (result, extern_p);
19407 if (! extern_p)
19408 instantiate_decl (result, /*defer_ok=*/1,
19409 /*expl_inst_class_mem_p=*/false);
19412 static void
19413 mark_class_instantiated (tree t, int extern_p)
19415 SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
19416 SET_CLASSTYPE_INTERFACE_KNOWN (t);
19417 CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
19418 TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
19419 if (! extern_p)
19421 CLASSTYPE_DEBUG_REQUESTED (t) = 1;
19422 rest_of_type_compilation (t, 1);
19426 /* Called from do_type_instantiation through binding_table_foreach to
19427 do recursive instantiation for the type bound in ENTRY. */
19428 static void
19429 bt_instantiate_type_proc (binding_entry entry, void *data)
19431 tree storage = *(tree *) data;
19433 if (MAYBE_CLASS_TYPE_P (entry->type)
19434 && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
19435 do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
19438 /* Called from do_type_instantiation to instantiate a member
19439 (a member function or a static member variable) of an
19440 explicitly instantiated class template. */
19441 static void
19442 instantiate_class_member (tree decl, int extern_p)
19444 mark_decl_instantiated (decl, extern_p);
19445 if (! extern_p)
19446 instantiate_decl (decl, /*defer_ok=*/1,
19447 /*expl_inst_class_mem_p=*/true);
19450 /* Perform an explicit instantiation of template class T. STORAGE, if
19451 non-null, is the RID for extern, inline or static. COMPLAIN is
19452 nonzero if this is called from the parser, zero if called recursively,
19453 since the standard is unclear (as detailed below). */
19455 void
19456 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
19458 int extern_p = 0;
19459 int nomem_p = 0;
19460 int static_p = 0;
19461 int previous_instantiation_extern_p = 0;
19463 if (TREE_CODE (t) == TYPE_DECL)
19464 t = TREE_TYPE (t);
19466 if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
19468 tree tmpl =
19469 (TYPE_TEMPLATE_INFO (t)) ? TYPE_TI_TEMPLATE (t) : NULL;
19470 if (tmpl)
19471 error ("explicit instantiation of non-class template %qD", tmpl);
19472 else
19473 error ("explicit instantiation of non-template type %qT", t);
19474 return;
19477 complete_type (t);
19479 if (!COMPLETE_TYPE_P (t))
19481 if (complain & tf_error)
19482 error ("explicit instantiation of %q#T before definition of template",
19484 return;
19487 if (storage != NULL_TREE)
19489 if (!in_system_header_at (input_location))
19491 if (storage == ridpointers[(int) RID_EXTERN])
19493 if (cxx_dialect == cxx98)
19494 pedwarn (input_location, OPT_Wpedantic,
19495 "ISO C++ 1998 forbids the use of %<extern%> on "
19496 "explicit instantiations");
19498 else
19499 pedwarn (input_location, OPT_Wpedantic,
19500 "ISO C++ forbids the use of %qE"
19501 " on explicit instantiations", storage);
19504 if (storage == ridpointers[(int) RID_INLINE])
19505 nomem_p = 1;
19506 else if (storage == ridpointers[(int) RID_EXTERN])
19507 extern_p = 1;
19508 else if (storage == ridpointers[(int) RID_STATIC])
19509 static_p = 1;
19510 else
19512 error ("storage class %qD applied to template instantiation",
19513 storage);
19514 extern_p = 0;
19518 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
19520 /* DR 259 [temp.spec].
19522 Both an explicit instantiation and a declaration of an explicit
19523 specialization shall not appear in a program unless the explicit
19524 instantiation follows a declaration of the explicit specialization.
19526 For a given set of template parameters, if an explicit
19527 instantiation of a template appears after a declaration of an
19528 explicit specialization for that template, the explicit
19529 instantiation has no effect. */
19530 return;
19532 else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
19534 /* [temp.spec]
19536 No program shall explicitly instantiate any template more
19537 than once.
19539 If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
19540 instantiation was `extern'. If EXTERN_P then the second is.
19541 These cases are OK. */
19542 previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
19544 if (!previous_instantiation_extern_p && !extern_p
19545 && (complain & tf_error))
19546 permerror (input_location, "duplicate explicit instantiation of %q#T", t);
19548 /* If we've already instantiated the template, just return now. */
19549 if (!CLASSTYPE_INTERFACE_ONLY (t))
19550 return;
19553 check_explicit_instantiation_namespace (TYPE_NAME (t));
19554 mark_class_instantiated (t, extern_p);
19556 if (nomem_p)
19557 return;
19560 tree tmp;
19562 /* In contrast to implicit instantiation, where only the
19563 declarations, and not the definitions, of members are
19564 instantiated, we have here:
19566 [temp.explicit]
19568 The explicit instantiation of a class template specialization
19569 implies the instantiation of all of its members not
19570 previously explicitly specialized in the translation unit
19571 containing the explicit instantiation.
19573 Of course, we can't instantiate member template classes, since
19574 we don't have any arguments for them. Note that the standard
19575 is unclear on whether the instantiation of the members are
19576 *explicit* instantiations or not. However, the most natural
19577 interpretation is that it should be an explicit instantiation. */
19579 if (! static_p)
19580 for (tmp = TYPE_METHODS (t); tmp; tmp = DECL_CHAIN (tmp))
19581 if (TREE_CODE (tmp) == FUNCTION_DECL
19582 && DECL_TEMPLATE_INSTANTIATION (tmp))
19583 instantiate_class_member (tmp, extern_p);
19585 for (tmp = TYPE_FIELDS (t); tmp; tmp = DECL_CHAIN (tmp))
19586 if (VAR_P (tmp) && DECL_TEMPLATE_INSTANTIATION (tmp))
19587 instantiate_class_member (tmp, extern_p);
19589 if (CLASSTYPE_NESTED_UTDS (t))
19590 binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
19591 bt_instantiate_type_proc, &storage);
19595 /* Given a function DECL, which is a specialization of TMPL, modify
19596 DECL to be a re-instantiation of TMPL with the same template
19597 arguments. TMPL should be the template into which tsubst'ing
19598 should occur for DECL, not the most general template.
19600 One reason for doing this is a scenario like this:
19602 template <class T>
19603 void f(const T&, int i);
19605 void g() { f(3, 7); }
19607 template <class T>
19608 void f(const T& t, const int i) { }
19610 Note that when the template is first instantiated, with
19611 instantiate_template, the resulting DECL will have no name for the
19612 first parameter, and the wrong type for the second. So, when we go
19613 to instantiate the DECL, we regenerate it. */
19615 static void
19616 regenerate_decl_from_template (tree decl, tree tmpl)
19618 /* The arguments used to instantiate DECL, from the most general
19619 template. */
19620 tree args;
19621 tree code_pattern;
19623 args = DECL_TI_ARGS (decl);
19624 code_pattern = DECL_TEMPLATE_RESULT (tmpl);
19626 /* Make sure that we can see identifiers, and compute access
19627 correctly. */
19628 push_access_scope (decl);
19630 if (TREE_CODE (decl) == FUNCTION_DECL)
19632 tree decl_parm;
19633 tree pattern_parm;
19634 tree specs;
19635 int args_depth;
19636 int parms_depth;
19638 args_depth = TMPL_ARGS_DEPTH (args);
19639 parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
19640 if (args_depth > parms_depth)
19641 args = get_innermost_template_args (args, parms_depth);
19643 specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
19644 args, tf_error, NULL_TREE,
19645 /*defer_ok*/false);
19646 if (specs && specs != error_mark_node)
19647 TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
19648 specs);
19650 /* Merge parameter declarations. */
19651 decl_parm = skip_artificial_parms_for (decl,
19652 DECL_ARGUMENTS (decl));
19653 pattern_parm
19654 = skip_artificial_parms_for (code_pattern,
19655 DECL_ARGUMENTS (code_pattern));
19656 while (decl_parm && !DECL_PACK_P (pattern_parm))
19658 tree parm_type;
19659 tree attributes;
19661 if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
19662 DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
19663 parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
19664 NULL_TREE);
19665 parm_type = type_decays_to (parm_type);
19666 if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
19667 TREE_TYPE (decl_parm) = parm_type;
19668 attributes = DECL_ATTRIBUTES (pattern_parm);
19669 if (DECL_ATTRIBUTES (decl_parm) != attributes)
19671 DECL_ATTRIBUTES (decl_parm) = attributes;
19672 cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
19674 decl_parm = DECL_CHAIN (decl_parm);
19675 pattern_parm = DECL_CHAIN (pattern_parm);
19677 /* Merge any parameters that match with the function parameter
19678 pack. */
19679 if (pattern_parm && DECL_PACK_P (pattern_parm))
19681 int i, len;
19682 tree expanded_types;
19683 /* Expand the TYPE_PACK_EXPANSION that provides the types for
19684 the parameters in this function parameter pack. */
19685 expanded_types = tsubst_pack_expansion (TREE_TYPE (pattern_parm),
19686 args, tf_error, NULL_TREE);
19687 len = TREE_VEC_LENGTH (expanded_types);
19688 for (i = 0; i < len; i++)
19690 tree parm_type;
19691 tree attributes;
19693 if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
19694 /* Rename the parameter to include the index. */
19695 DECL_NAME (decl_parm) =
19696 make_ith_pack_parameter_name (DECL_NAME (pattern_parm), i);
19697 parm_type = TREE_VEC_ELT (expanded_types, i);
19698 parm_type = type_decays_to (parm_type);
19699 if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
19700 TREE_TYPE (decl_parm) = parm_type;
19701 attributes = DECL_ATTRIBUTES (pattern_parm);
19702 if (DECL_ATTRIBUTES (decl_parm) != attributes)
19704 DECL_ATTRIBUTES (decl_parm) = attributes;
19705 cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
19707 decl_parm = DECL_CHAIN (decl_parm);
19710 /* Merge additional specifiers from the CODE_PATTERN. */
19711 if (DECL_DECLARED_INLINE_P (code_pattern)
19712 && !DECL_DECLARED_INLINE_P (decl))
19713 DECL_DECLARED_INLINE_P (decl) = 1;
19715 else if (VAR_P (decl))
19717 DECL_INITIAL (decl) =
19718 tsubst_expr (DECL_INITIAL (code_pattern), args,
19719 tf_error, DECL_TI_TEMPLATE (decl),
19720 /*integral_constant_expression_p=*/false);
19721 if (VAR_HAD_UNKNOWN_BOUND (decl))
19722 TREE_TYPE (decl) = tsubst (TREE_TYPE (code_pattern), args,
19723 tf_error, DECL_TI_TEMPLATE (decl));
19725 else
19726 gcc_unreachable ();
19728 pop_access_scope (decl);
19731 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
19732 substituted to get DECL. */
19734 tree
19735 template_for_substitution (tree decl)
19737 tree tmpl = DECL_TI_TEMPLATE (decl);
19739 /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
19740 for the instantiation. This is not always the most general
19741 template. Consider, for example:
19743 template <class T>
19744 struct S { template <class U> void f();
19745 template <> void f<int>(); };
19747 and an instantiation of S<double>::f<int>. We want TD to be the
19748 specialization S<T>::f<int>, not the more general S<T>::f<U>. */
19749 while (/* An instantiation cannot have a definition, so we need a
19750 more general template. */
19751 DECL_TEMPLATE_INSTANTIATION (tmpl)
19752 /* We must also deal with friend templates. Given:
19754 template <class T> struct S {
19755 template <class U> friend void f() {};
19758 S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
19759 so far as the language is concerned, but that's still
19760 where we get the pattern for the instantiation from. On
19761 other hand, if the definition comes outside the class, say:
19763 template <class T> struct S {
19764 template <class U> friend void f();
19766 template <class U> friend void f() {}
19768 we don't need to look any further. That's what the check for
19769 DECL_INITIAL is for. */
19770 || (TREE_CODE (decl) == FUNCTION_DECL
19771 && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
19772 && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
19774 /* The present template, TD, should not be a definition. If it
19775 were a definition, we should be using it! Note that we
19776 cannot restructure the loop to just keep going until we find
19777 a template with a definition, since that might go too far if
19778 a specialization was declared, but not defined. */
19780 /* Fetch the more general template. */
19781 tmpl = DECL_TI_TEMPLATE (tmpl);
19784 return tmpl;
19787 /* Returns true if we need to instantiate this template instance even if we
19788 know we aren't going to emit it.. */
19790 bool
19791 always_instantiate_p (tree decl)
19793 /* We always instantiate inline functions so that we can inline them. An
19794 explicit instantiation declaration prohibits implicit instantiation of
19795 non-inline functions. With high levels of optimization, we would
19796 normally inline non-inline functions -- but we're not allowed to do
19797 that for "extern template" functions. Therefore, we check
19798 DECL_DECLARED_INLINE_P, rather than possibly_inlined_p. */
19799 return ((TREE_CODE (decl) == FUNCTION_DECL
19800 && (DECL_DECLARED_INLINE_P (decl)
19801 || type_uses_auto (TREE_TYPE (TREE_TYPE (decl)))))
19802 /* And we need to instantiate static data members so that
19803 their initializers are available in integral constant
19804 expressions. */
19805 || (VAR_P (decl)
19806 && decl_maybe_constant_var_p (decl)));
19809 /* If FN has a noexcept-specifier that hasn't been instantiated yet,
19810 instantiate it now, modifying TREE_TYPE (fn). */
19812 void
19813 maybe_instantiate_noexcept (tree fn)
19815 tree fntype, spec, noex, clone;
19817 /* Don't instantiate a noexcept-specification from template context. */
19818 if (processing_template_decl)
19819 return;
19821 if (DECL_CLONED_FUNCTION_P (fn))
19822 fn = DECL_CLONED_FUNCTION (fn);
19823 fntype = TREE_TYPE (fn);
19824 spec = TYPE_RAISES_EXCEPTIONS (fntype);
19826 if (!spec || !TREE_PURPOSE (spec))
19827 return;
19829 noex = TREE_PURPOSE (spec);
19831 if (TREE_CODE (noex) == DEFERRED_NOEXCEPT)
19833 if (DEFERRED_NOEXCEPT_PATTERN (noex) == NULL_TREE)
19834 spec = get_defaulted_eh_spec (fn);
19835 else if (push_tinst_level (fn))
19837 push_access_scope (fn);
19838 push_deferring_access_checks (dk_no_deferred);
19839 input_location = DECL_SOURCE_LOCATION (fn);
19840 noex = tsubst_copy_and_build (DEFERRED_NOEXCEPT_PATTERN (noex),
19841 DEFERRED_NOEXCEPT_ARGS (noex),
19842 tf_warning_or_error, fn,
19843 /*function_p=*/false,
19844 /*integral_constant_expression_p=*/true);
19845 pop_deferring_access_checks ();
19846 pop_access_scope (fn);
19847 pop_tinst_level ();
19848 spec = build_noexcept_spec (noex, tf_warning_or_error);
19849 if (spec == error_mark_node)
19850 spec = noexcept_false_spec;
19852 else
19853 spec = noexcept_false_spec;
19855 TREE_TYPE (fn) = build_exception_variant (fntype, spec);
19858 FOR_EACH_CLONE (clone, fn)
19860 if (TREE_TYPE (clone) == fntype)
19861 TREE_TYPE (clone) = TREE_TYPE (fn);
19862 else
19863 TREE_TYPE (clone) = build_exception_variant (TREE_TYPE (clone), spec);
19867 /* Produce the definition of D, a _DECL generated from a template. If
19868 DEFER_OK is nonzero, then we don't have to actually do the
19869 instantiation now; we just have to do it sometime. Normally it is
19870 an error if this is an explicit instantiation but D is undefined.
19871 EXPL_INST_CLASS_MEM_P is true iff D is a member of an
19872 explicitly instantiated class template. */
19874 tree
19875 instantiate_decl (tree d, int defer_ok,
19876 bool expl_inst_class_mem_p)
19878 tree tmpl = DECL_TI_TEMPLATE (d);
19879 tree gen_args;
19880 tree args;
19881 tree td;
19882 tree code_pattern;
19883 tree spec;
19884 tree gen_tmpl;
19885 bool pattern_defined;
19886 location_t saved_loc = input_location;
19887 int saved_unevaluated_operand = cp_unevaluated_operand;
19888 int saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
19889 bool external_p;
19890 bool deleted_p;
19891 tree fn_context;
19892 bool nested;
19894 /* This function should only be used to instantiate templates for
19895 functions and static member variables. */
19896 gcc_assert (VAR_OR_FUNCTION_DECL_P (d));
19898 /* Variables are never deferred; if instantiation is required, they
19899 are instantiated right away. That allows for better code in the
19900 case that an expression refers to the value of the variable --
19901 if the variable has a constant value the referring expression can
19902 take advantage of that fact. */
19903 if (VAR_P (d)
19904 || DECL_DECLARED_CONSTEXPR_P (d))
19905 defer_ok = 0;
19907 /* Don't instantiate cloned functions. Instead, instantiate the
19908 functions they cloned. */
19909 if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
19910 d = DECL_CLONED_FUNCTION (d);
19912 if (DECL_TEMPLATE_INSTANTIATED (d)
19913 || (TREE_CODE (d) == FUNCTION_DECL
19914 && DECL_DEFAULTED_FN (d) && DECL_INITIAL (d))
19915 || DECL_TEMPLATE_SPECIALIZATION (d))
19916 /* D has already been instantiated or explicitly specialized, so
19917 there's nothing for us to do here.
19919 It might seem reasonable to check whether or not D is an explicit
19920 instantiation, and, if so, stop here. But when an explicit
19921 instantiation is deferred until the end of the compilation,
19922 DECL_EXPLICIT_INSTANTIATION is set, even though we still need to do
19923 the instantiation. */
19924 return d;
19926 /* Check to see whether we know that this template will be
19927 instantiated in some other file, as with "extern template"
19928 extension. */
19929 external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
19931 /* In general, we do not instantiate such templates. */
19932 if (external_p && !always_instantiate_p (d))
19933 return d;
19935 gen_tmpl = most_general_template (tmpl);
19936 gen_args = DECL_TI_ARGS (d);
19938 if (tmpl != gen_tmpl)
19939 /* We should already have the extra args. */
19940 gcc_assert (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (gen_tmpl))
19941 == TMPL_ARGS_DEPTH (gen_args));
19942 /* And what's in the hash table should match D. */
19943 gcc_assert ((spec = retrieve_specialization (gen_tmpl, gen_args, 0)) == d
19944 || spec == NULL_TREE);
19946 /* This needs to happen before any tsubsting. */
19947 if (! push_tinst_level (d))
19948 return d;
19950 timevar_push (TV_TEMPLATE_INST);
19952 /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
19953 for the instantiation. */
19954 td = template_for_substitution (d);
19955 code_pattern = DECL_TEMPLATE_RESULT (td);
19957 /* We should never be trying to instantiate a member of a class
19958 template or partial specialization. */
19959 gcc_assert (d != code_pattern);
19961 if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
19962 || DECL_TEMPLATE_SPECIALIZATION (td))
19963 /* In the case of a friend template whose definition is provided
19964 outside the class, we may have too many arguments. Drop the
19965 ones we don't need. The same is true for specializations. */
19966 args = get_innermost_template_args
19967 (gen_args, TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (td)));
19968 else
19969 args = gen_args;
19971 if (TREE_CODE (d) == FUNCTION_DECL)
19973 deleted_p = DECL_DELETED_FN (code_pattern);
19974 pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE
19975 || DECL_DEFAULTED_OUTSIDE_CLASS_P (code_pattern)
19976 || deleted_p);
19978 else
19980 deleted_p = false;
19981 pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
19984 /* We may be in the middle of deferred access check. Disable it now. */
19985 push_deferring_access_checks (dk_no_deferred);
19987 /* Unless an explicit instantiation directive has already determined
19988 the linkage of D, remember that a definition is available for
19989 this entity. */
19990 if (pattern_defined
19991 && !DECL_INTERFACE_KNOWN (d)
19992 && !DECL_NOT_REALLY_EXTERN (d))
19993 mark_definable (d);
19995 DECL_SOURCE_LOCATION (td) = DECL_SOURCE_LOCATION (code_pattern);
19996 DECL_SOURCE_LOCATION (d) = DECL_SOURCE_LOCATION (code_pattern);
19997 input_location = DECL_SOURCE_LOCATION (d);
19999 /* If D is a member of an explicitly instantiated class template,
20000 and no definition is available, treat it like an implicit
20001 instantiation. */
20002 if (!pattern_defined && expl_inst_class_mem_p
20003 && DECL_EXPLICIT_INSTANTIATION (d))
20005 /* Leave linkage flags alone on instantiations with anonymous
20006 visibility. */
20007 if (TREE_PUBLIC (d))
20009 DECL_NOT_REALLY_EXTERN (d) = 0;
20010 DECL_INTERFACE_KNOWN (d) = 0;
20012 SET_DECL_IMPLICIT_INSTANTIATION (d);
20015 /* Defer all other templates, unless we have been explicitly
20016 forbidden from doing so. */
20017 if (/* If there is no definition, we cannot instantiate the
20018 template. */
20019 ! pattern_defined
20020 /* If it's OK to postpone instantiation, do so. */
20021 || defer_ok
20022 /* If this is a static data member that will be defined
20023 elsewhere, we don't want to instantiate the entire data
20024 member, but we do want to instantiate the initializer so that
20025 we can substitute that elsewhere. */
20026 || (external_p && VAR_P (d))
20027 /* Handle here a deleted function too, avoid generating
20028 its body (c++/61080). */
20029 || deleted_p)
20031 /* The definition of the static data member is now required so
20032 we must substitute the initializer. */
20033 if (VAR_P (d)
20034 && !DECL_INITIAL (d)
20035 && DECL_INITIAL (code_pattern))
20037 tree ns;
20038 tree init;
20039 bool const_init = false;
20040 bool enter_context = DECL_CLASS_SCOPE_P (d);
20042 ns = decl_namespace_context (d);
20043 push_nested_namespace (ns);
20044 if (enter_context)
20045 push_nested_class (DECL_CONTEXT (d));
20046 init = tsubst_expr (DECL_INITIAL (code_pattern),
20047 args,
20048 tf_warning_or_error, NULL_TREE,
20049 /*integral_constant_expression_p=*/false);
20050 /* If instantiating the initializer involved instantiating this
20051 again, don't call cp_finish_decl twice. */
20052 if (!DECL_INITIAL (d))
20054 /* Make sure the initializer is still constant, in case of
20055 circular dependency (template/instantiate6.C). */
20056 const_init
20057 = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (code_pattern);
20058 cp_finish_decl (d, init, /*init_const_expr_p=*/const_init,
20059 /*asmspec_tree=*/NULL_TREE,
20060 LOOKUP_ONLYCONVERTING);
20062 if (enter_context)
20063 pop_nested_class ();
20064 pop_nested_namespace (ns);
20067 /* We restore the source position here because it's used by
20068 add_pending_template. */
20069 input_location = saved_loc;
20071 if (at_eof && !pattern_defined
20072 && DECL_EXPLICIT_INSTANTIATION (d)
20073 && DECL_NOT_REALLY_EXTERN (d))
20074 /* [temp.explicit]
20076 The definition of a non-exported function template, a
20077 non-exported member function template, or a non-exported
20078 member function or static data member of a class template
20079 shall be present in every translation unit in which it is
20080 explicitly instantiated. */
20081 permerror (input_location, "explicit instantiation of %qD "
20082 "but no definition available", d);
20084 /* If we're in unevaluated context, we just wanted to get the
20085 constant value; this isn't an odr use, so don't queue
20086 a full instantiation. */
20087 if (cp_unevaluated_operand != 0)
20088 goto out;
20089 /* ??? Historically, we have instantiated inline functions, even
20090 when marked as "extern template". */
20091 if (!(external_p && VAR_P (d)))
20092 add_pending_template (d);
20093 goto out;
20095 /* Tell the repository that D is available in this translation unit
20096 -- and see if it is supposed to be instantiated here. */
20097 if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
20099 /* In a PCH file, despite the fact that the repository hasn't
20100 requested instantiation in the PCH it is still possible that
20101 an instantiation will be required in a file that includes the
20102 PCH. */
20103 if (pch_file)
20104 add_pending_template (d);
20105 /* Instantiate inline functions so that the inliner can do its
20106 job, even though we'll not be emitting a copy of this
20107 function. */
20108 if (!(TREE_CODE (d) == FUNCTION_DECL && possibly_inlined_p (d)))
20109 goto out;
20112 fn_context = decl_function_context (d);
20113 nested = (current_function_decl != NULL_TREE);
20114 if (!fn_context)
20115 push_to_top_level ();
20116 else
20118 if (nested)
20119 push_function_context ();
20120 cp_unevaluated_operand = 0;
20121 c_inhibit_evaluation_warnings = 0;
20124 /* Mark D as instantiated so that recursive calls to
20125 instantiate_decl do not try to instantiate it again. */
20126 DECL_TEMPLATE_INSTANTIATED (d) = 1;
20128 /* Regenerate the declaration in case the template has been modified
20129 by a subsequent redeclaration. */
20130 regenerate_decl_from_template (d, td);
20132 /* We already set the file and line above. Reset them now in case
20133 they changed as a result of calling regenerate_decl_from_template. */
20134 input_location = DECL_SOURCE_LOCATION (d);
20136 if (VAR_P (d))
20138 tree init;
20139 bool const_init = false;
20141 /* Clear out DECL_RTL; whatever was there before may not be right
20142 since we've reset the type of the declaration. */
20143 SET_DECL_RTL (d, NULL);
20144 DECL_IN_AGGR_P (d) = 0;
20146 /* The initializer is placed in DECL_INITIAL by
20147 regenerate_decl_from_template so we don't need to
20148 push/pop_access_scope again here. Pull it out so that
20149 cp_finish_decl can process it. */
20150 init = DECL_INITIAL (d);
20151 DECL_INITIAL (d) = NULL_TREE;
20152 DECL_INITIALIZED_P (d) = 0;
20154 /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
20155 initializer. That function will defer actual emission until
20156 we have a chance to determine linkage. */
20157 DECL_EXTERNAL (d) = 0;
20159 /* Enter the scope of D so that access-checking works correctly. */
20160 bool enter_context = DECL_CLASS_SCOPE_P (d);
20161 if (enter_context)
20162 push_nested_class (DECL_CONTEXT (d));
20164 const_init = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (code_pattern);
20165 cp_finish_decl (d, init, const_init, NULL_TREE, 0);
20167 if (enter_context)
20168 pop_nested_class ();
20170 if (variable_template_p (td))
20171 note_variable_template_instantiation (d);
20173 else if (TREE_CODE (d) == FUNCTION_DECL && DECL_DEFAULTED_FN (code_pattern))
20174 synthesize_method (d);
20175 else if (TREE_CODE (d) == FUNCTION_DECL)
20177 hash_map<tree, tree> *saved_local_specializations;
20178 tree subst_decl;
20179 tree tmpl_parm;
20180 tree spec_parm;
20181 tree block = NULL_TREE;
20183 /* Save away the current list, in case we are instantiating one
20184 template from within the body of another. */
20185 saved_local_specializations = local_specializations;
20187 /* Set up the list of local specializations. */
20188 local_specializations = new hash_map<tree, tree>;
20190 /* Set up context. */
20191 if (DECL_OMP_DECLARE_REDUCTION_P (code_pattern)
20192 && TREE_CODE (DECL_CONTEXT (code_pattern)) == FUNCTION_DECL)
20193 block = push_stmt_list ();
20194 else
20195 start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
20197 /* Some typedefs referenced from within the template code need to be
20198 access checked at template instantiation time, i.e now. These
20199 types were added to the template at parsing time. Let's get those
20200 and perform the access checks then. */
20201 perform_typedefs_access_check (DECL_TEMPLATE_RESULT (gen_tmpl),
20202 gen_args);
20204 /* Create substitution entries for the parameters. */
20205 subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
20206 tmpl_parm = DECL_ARGUMENTS (subst_decl);
20207 spec_parm = DECL_ARGUMENTS (d);
20208 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
20210 register_local_specialization (spec_parm, tmpl_parm);
20211 spec_parm = skip_artificial_parms_for (d, spec_parm);
20212 tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
20214 for (; tmpl_parm; tmpl_parm = DECL_CHAIN (tmpl_parm))
20216 if (!DECL_PACK_P (tmpl_parm))
20218 register_local_specialization (spec_parm, tmpl_parm);
20219 spec_parm = DECL_CHAIN (spec_parm);
20221 else
20223 /* Register the (value) argument pack as a specialization of
20224 TMPL_PARM, then move on. */
20225 tree argpack = extract_fnparm_pack (tmpl_parm, &spec_parm);
20226 register_local_specialization (argpack, tmpl_parm);
20229 gcc_assert (!spec_parm);
20231 /* Substitute into the body of the function. */
20232 if (DECL_OMP_DECLARE_REDUCTION_P (code_pattern))
20233 tsubst_omp_udr (DECL_SAVED_TREE (code_pattern), args,
20234 tf_warning_or_error, tmpl);
20235 else
20237 tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
20238 tf_warning_or_error, tmpl,
20239 /*integral_constant_expression_p=*/false);
20241 /* Set the current input_location to the end of the function
20242 so that finish_function knows where we are. */
20243 input_location
20244 = DECL_STRUCT_FUNCTION (code_pattern)->function_end_locus;
20246 /* Remember if we saw an infinite loop in the template. */
20247 current_function_infinite_loop
20248 = DECL_STRUCT_FUNCTION (code_pattern)->language->infinite_loop;
20251 /* We don't need the local specializations any more. */
20252 delete local_specializations;
20253 local_specializations = saved_local_specializations;
20255 /* Finish the function. */
20256 if (DECL_OMP_DECLARE_REDUCTION_P (code_pattern)
20257 && TREE_CODE (DECL_CONTEXT (code_pattern)) == FUNCTION_DECL)
20258 DECL_SAVED_TREE (d) = pop_stmt_list (block);
20259 else
20261 d = finish_function (0);
20262 expand_or_defer_fn (d);
20265 if (DECL_OMP_DECLARE_REDUCTION_P (code_pattern))
20266 cp_check_omp_declare_reduction (d);
20269 /* We're not deferring instantiation any more. */
20270 TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
20272 if (!fn_context)
20273 pop_from_top_level ();
20274 else if (nested)
20275 pop_function_context ();
20277 out:
20278 input_location = saved_loc;
20279 cp_unevaluated_operand = saved_unevaluated_operand;
20280 c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
20281 pop_deferring_access_checks ();
20282 pop_tinst_level ();
20284 timevar_pop (TV_TEMPLATE_INST);
20286 return d;
20289 /* Run through the list of templates that we wish we could
20290 instantiate, and instantiate any we can. RETRIES is the
20291 number of times we retry pending template instantiation. */
20293 void
20294 instantiate_pending_templates (int retries)
20296 int reconsider;
20297 location_t saved_loc = input_location;
20299 /* Instantiating templates may trigger vtable generation. This in turn
20300 may require further template instantiations. We place a limit here
20301 to avoid infinite loop. */
20302 if (pending_templates && retries >= max_tinst_depth)
20304 tree decl = pending_templates->tinst->decl;
20306 fatal_error ("template instantiation depth exceeds maximum of %d"
20307 " instantiating %q+D, possibly from virtual table generation"
20308 " (use -ftemplate-depth= to increase the maximum)",
20309 max_tinst_depth, decl);
20310 if (TREE_CODE (decl) == FUNCTION_DECL)
20311 /* Pretend that we defined it. */
20312 DECL_INITIAL (decl) = error_mark_node;
20313 return;
20318 struct pending_template **t = &pending_templates;
20319 struct pending_template *last = NULL;
20320 reconsider = 0;
20321 while (*t)
20323 tree instantiation = reopen_tinst_level ((*t)->tinst);
20324 bool complete = false;
20326 if (TYPE_P (instantiation))
20328 tree fn;
20330 if (!COMPLETE_TYPE_P (instantiation))
20332 instantiate_class_template (instantiation);
20333 if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
20334 for (fn = TYPE_METHODS (instantiation);
20336 fn = TREE_CHAIN (fn))
20337 if (! DECL_ARTIFICIAL (fn))
20338 instantiate_decl (fn,
20339 /*defer_ok=*/0,
20340 /*expl_inst_class_mem_p=*/false);
20341 if (COMPLETE_TYPE_P (instantiation))
20342 reconsider = 1;
20345 complete = COMPLETE_TYPE_P (instantiation);
20347 else
20349 if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
20350 && !DECL_TEMPLATE_INSTANTIATED (instantiation))
20352 instantiation
20353 = instantiate_decl (instantiation,
20354 /*defer_ok=*/0,
20355 /*expl_inst_class_mem_p=*/false);
20356 if (DECL_TEMPLATE_INSTANTIATED (instantiation))
20357 reconsider = 1;
20360 complete = (DECL_TEMPLATE_SPECIALIZATION (instantiation)
20361 || DECL_TEMPLATE_INSTANTIATED (instantiation));
20364 if (complete)
20365 /* If INSTANTIATION has been instantiated, then we don't
20366 need to consider it again in the future. */
20367 *t = (*t)->next;
20368 else
20370 last = *t;
20371 t = &(*t)->next;
20373 tinst_depth = 0;
20374 current_tinst_level = NULL;
20376 last_pending_template = last;
20378 while (reconsider);
20380 input_location = saved_loc;
20383 /* Substitute ARGVEC into T, which is a list of initializers for
20384 either base class or a non-static data member. The TREE_PURPOSEs
20385 are DECLs, and the TREE_VALUEs are the initializer values. Used by
20386 instantiate_decl. */
20388 static tree
20389 tsubst_initializer_list (tree t, tree argvec)
20391 tree inits = NULL_TREE;
20393 for (; t; t = TREE_CHAIN (t))
20395 tree decl;
20396 tree init;
20397 tree expanded_bases = NULL_TREE;
20398 tree expanded_arguments = NULL_TREE;
20399 int i, len = 1;
20401 if (TREE_CODE (TREE_PURPOSE (t)) == TYPE_PACK_EXPANSION)
20403 tree expr;
20404 tree arg;
20406 /* Expand the base class expansion type into separate base
20407 classes. */
20408 expanded_bases = tsubst_pack_expansion (TREE_PURPOSE (t), argvec,
20409 tf_warning_or_error,
20410 NULL_TREE);
20411 if (expanded_bases == error_mark_node)
20412 continue;
20414 /* We'll be building separate TREE_LISTs of arguments for
20415 each base. */
20416 len = TREE_VEC_LENGTH (expanded_bases);
20417 expanded_arguments = make_tree_vec (len);
20418 for (i = 0; i < len; i++)
20419 TREE_VEC_ELT (expanded_arguments, i) = NULL_TREE;
20421 /* Build a dummy EXPR_PACK_EXPANSION that will be used to
20422 expand each argument in the TREE_VALUE of t. */
20423 expr = make_node (EXPR_PACK_EXPANSION);
20424 PACK_EXPANSION_LOCAL_P (expr) = true;
20425 PACK_EXPANSION_PARAMETER_PACKS (expr) =
20426 PACK_EXPANSION_PARAMETER_PACKS (TREE_PURPOSE (t));
20428 if (TREE_VALUE (t) == void_type_node)
20429 /* VOID_TYPE_NODE is used to indicate
20430 value-initialization. */
20432 for (i = 0; i < len; i++)
20433 TREE_VEC_ELT (expanded_arguments, i) = void_type_node;
20435 else
20437 /* Substitute parameter packs into each argument in the
20438 TREE_LIST. */
20439 in_base_initializer = 1;
20440 for (arg = TREE_VALUE (t); arg; arg = TREE_CHAIN (arg))
20442 tree expanded_exprs;
20444 /* Expand the argument. */
20445 SET_PACK_EXPANSION_PATTERN (expr, TREE_VALUE (arg));
20446 expanded_exprs
20447 = tsubst_pack_expansion (expr, argvec,
20448 tf_warning_or_error,
20449 NULL_TREE);
20450 if (expanded_exprs == error_mark_node)
20451 continue;
20453 /* Prepend each of the expanded expressions to the
20454 corresponding TREE_LIST in EXPANDED_ARGUMENTS. */
20455 for (i = 0; i < len; i++)
20457 TREE_VEC_ELT (expanded_arguments, i) =
20458 tree_cons (NULL_TREE,
20459 TREE_VEC_ELT (expanded_exprs, i),
20460 TREE_VEC_ELT (expanded_arguments, i));
20463 in_base_initializer = 0;
20465 /* Reverse all of the TREE_LISTs in EXPANDED_ARGUMENTS,
20466 since we built them backwards. */
20467 for (i = 0; i < len; i++)
20469 TREE_VEC_ELT (expanded_arguments, i) =
20470 nreverse (TREE_VEC_ELT (expanded_arguments, i));
20475 for (i = 0; i < len; ++i)
20477 if (expanded_bases)
20479 decl = TREE_VEC_ELT (expanded_bases, i);
20480 decl = expand_member_init (decl);
20481 init = TREE_VEC_ELT (expanded_arguments, i);
20483 else
20485 tree tmp;
20486 decl = tsubst_copy (TREE_PURPOSE (t), argvec,
20487 tf_warning_or_error, NULL_TREE);
20489 decl = expand_member_init (decl);
20490 if (decl && !DECL_P (decl))
20491 in_base_initializer = 1;
20493 init = TREE_VALUE (t);
20494 tmp = init;
20495 if (init != void_type_node)
20496 init = tsubst_expr (init, argvec,
20497 tf_warning_or_error, NULL_TREE,
20498 /*integral_constant_expression_p=*/false);
20499 if (init == NULL_TREE && tmp != NULL_TREE)
20500 /* If we had an initializer but it instantiated to nothing,
20501 value-initialize the object. This will only occur when
20502 the initializer was a pack expansion where the parameter
20503 packs used in that expansion were of length zero. */
20504 init = void_type_node;
20505 in_base_initializer = 0;
20508 if (decl)
20510 init = build_tree_list (decl, init);
20511 TREE_CHAIN (init) = inits;
20512 inits = init;
20516 return inits;
20519 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL. */
20521 static void
20522 set_current_access_from_decl (tree decl)
20524 if (TREE_PRIVATE (decl))
20525 current_access_specifier = access_private_node;
20526 else if (TREE_PROTECTED (decl))
20527 current_access_specifier = access_protected_node;
20528 else
20529 current_access_specifier = access_public_node;
20532 /* Instantiate an enumerated type. TAG is the template type, NEWTAG
20533 is the instantiation (which should have been created with
20534 start_enum) and ARGS are the template arguments to use. */
20536 static void
20537 tsubst_enum (tree tag, tree newtag, tree args)
20539 tree e;
20541 if (SCOPED_ENUM_P (newtag))
20542 begin_scope (sk_scoped_enum, newtag);
20544 for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
20546 tree value;
20547 tree decl;
20549 decl = TREE_VALUE (e);
20550 /* Note that in a template enum, the TREE_VALUE is the
20551 CONST_DECL, not the corresponding INTEGER_CST. */
20552 value = tsubst_expr (DECL_INITIAL (decl),
20553 args, tf_warning_or_error, NULL_TREE,
20554 /*integral_constant_expression_p=*/true);
20556 /* Give this enumeration constant the correct access. */
20557 set_current_access_from_decl (decl);
20559 /* Actually build the enumerator itself. */
20560 build_enumerator
20561 (DECL_NAME (decl), value, newtag, DECL_SOURCE_LOCATION (decl));
20564 if (SCOPED_ENUM_P (newtag))
20565 finish_scope ();
20567 finish_enum_value_list (newtag);
20568 finish_enum (newtag);
20570 DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
20571 = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
20574 /* DECL is a FUNCTION_DECL that is a template specialization. Return
20575 its type -- but without substituting the innermost set of template
20576 arguments. So, innermost set of template parameters will appear in
20577 the type. */
20579 tree
20580 get_mostly_instantiated_function_type (tree decl)
20582 tree fn_type;
20583 tree tmpl;
20584 tree targs;
20585 tree tparms;
20586 int parm_depth;
20588 tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
20589 targs = DECL_TI_ARGS (decl);
20590 tparms = DECL_TEMPLATE_PARMS (tmpl);
20591 parm_depth = TMPL_PARMS_DEPTH (tparms);
20593 /* There should be as many levels of arguments as there are levels
20594 of parameters. */
20595 gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
20597 fn_type = TREE_TYPE (tmpl);
20599 if (parm_depth == 1)
20600 /* No substitution is necessary. */
20602 else
20604 int i;
20605 tree partial_args;
20607 /* Replace the innermost level of the TARGS with NULL_TREEs to
20608 let tsubst know not to substitute for those parameters. */
20609 partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
20610 for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
20611 SET_TMPL_ARGS_LEVEL (partial_args, i,
20612 TMPL_ARGS_LEVEL (targs, i));
20613 SET_TMPL_ARGS_LEVEL (partial_args,
20614 TMPL_ARGS_DEPTH (targs),
20615 make_tree_vec (DECL_NTPARMS (tmpl)));
20617 /* Make sure that we can see identifiers, and compute access
20618 correctly. */
20619 push_access_scope (decl);
20621 ++processing_template_decl;
20622 /* Now, do the (partial) substitution to figure out the
20623 appropriate function type. */
20624 fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
20625 --processing_template_decl;
20627 /* Substitute into the template parameters to obtain the real
20628 innermost set of parameters. This step is important if the
20629 innermost set of template parameters contains value
20630 parameters whose types depend on outer template parameters. */
20631 TREE_VEC_LENGTH (partial_args)--;
20632 tparms = tsubst_template_parms (tparms, partial_args, tf_error);
20634 pop_access_scope (decl);
20637 return fn_type;
20640 /* Return truthvalue if we're processing a template different from
20641 the last one involved in diagnostics. */
20642 bool
20643 problematic_instantiation_changed (void)
20645 return current_tinst_level != last_error_tinst_level;
20648 /* Remember current template involved in diagnostics. */
20649 void
20650 record_last_problematic_instantiation (void)
20652 last_error_tinst_level = current_tinst_level;
20655 struct tinst_level *
20656 current_instantiation (void)
20658 return current_tinst_level;
20661 /* [temp.param] Check that template non-type parm TYPE is of an allowable
20662 type. Return zero for ok, nonzero for disallowed. Issue error and
20663 warning messages under control of COMPLAIN. */
20665 static int
20666 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
20668 if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
20669 return 0;
20670 else if (POINTER_TYPE_P (type))
20671 return 0;
20672 else if (TYPE_PTRMEM_P (type))
20673 return 0;
20674 else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
20675 return 0;
20676 else if (TREE_CODE (type) == TYPENAME_TYPE)
20677 return 0;
20678 else if (TREE_CODE (type) == DECLTYPE_TYPE)
20679 return 0;
20680 else if (TREE_CODE (type) == NULLPTR_TYPE)
20681 return 0;
20683 if (complain & tf_error)
20685 if (type == error_mark_node)
20686 inform (input_location, "invalid template non-type parameter");
20687 else
20688 error ("%q#T is not a valid type for a template non-type parameter",
20689 type);
20691 return 1;
20694 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
20695 Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
20697 static bool
20698 dependent_type_p_r (tree type)
20700 tree scope;
20702 /* [temp.dep.type]
20704 A type is dependent if it is:
20706 -- a template parameter. Template template parameters are types
20707 for us (since TYPE_P holds true for them) so we handle
20708 them here. */
20709 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
20710 || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
20711 return true;
20712 /* -- a qualified-id with a nested-name-specifier which contains a
20713 class-name that names a dependent type or whose unqualified-id
20714 names a dependent type. */
20715 if (TREE_CODE (type) == TYPENAME_TYPE)
20716 return true;
20717 /* -- a cv-qualified type where the cv-unqualified type is
20718 dependent. */
20719 type = TYPE_MAIN_VARIANT (type);
20720 /* -- a compound type constructed from any dependent type. */
20721 if (TYPE_PTRMEM_P (type))
20722 return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
20723 || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
20724 (type)));
20725 else if (TYPE_PTR_P (type)
20726 || TREE_CODE (type) == REFERENCE_TYPE)
20727 return dependent_type_p (TREE_TYPE (type));
20728 else if (TREE_CODE (type) == FUNCTION_TYPE
20729 || TREE_CODE (type) == METHOD_TYPE)
20731 tree arg_type;
20733 if (dependent_type_p (TREE_TYPE (type)))
20734 return true;
20735 for (arg_type = TYPE_ARG_TYPES (type);
20736 arg_type;
20737 arg_type = TREE_CHAIN (arg_type))
20738 if (dependent_type_p (TREE_VALUE (arg_type)))
20739 return true;
20740 return false;
20742 /* -- an array type constructed from any dependent type or whose
20743 size is specified by a constant expression that is
20744 value-dependent.
20746 We checked for type- and value-dependence of the bounds in
20747 compute_array_index_type, so TYPE_DEPENDENT_P is already set. */
20748 if (TREE_CODE (type) == ARRAY_TYPE)
20750 if (TYPE_DOMAIN (type)
20751 && dependent_type_p (TYPE_DOMAIN (type)))
20752 return true;
20753 return dependent_type_p (TREE_TYPE (type));
20756 /* -- a template-id in which either the template name is a template
20757 parameter ... */
20758 if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
20759 return true;
20760 /* ... or any of the template arguments is a dependent type or
20761 an expression that is type-dependent or value-dependent. */
20762 else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
20763 && (any_dependent_template_arguments_p
20764 (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
20765 return true;
20767 /* All TYPEOF_TYPEs, DECLTYPE_TYPEs, and UNDERLYING_TYPEs are
20768 dependent; if the argument of the `typeof' expression is not
20769 type-dependent, then it should already been have resolved. */
20770 if (TREE_CODE (type) == TYPEOF_TYPE
20771 || TREE_CODE (type) == DECLTYPE_TYPE
20772 || TREE_CODE (type) == UNDERLYING_TYPE)
20773 return true;
20775 /* A template argument pack is dependent if any of its packed
20776 arguments are. */
20777 if (TREE_CODE (type) == TYPE_ARGUMENT_PACK)
20779 tree args = ARGUMENT_PACK_ARGS (type);
20780 int i, len = TREE_VEC_LENGTH (args);
20781 for (i = 0; i < len; ++i)
20782 if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
20783 return true;
20786 /* All TYPE_PACK_EXPANSIONs are dependent, because parameter packs must
20787 be template parameters. */
20788 if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
20789 return true;
20791 /* The standard does not specifically mention types that are local
20792 to template functions or local classes, but they should be
20793 considered dependent too. For example:
20795 template <int I> void f() {
20796 enum E { a = I };
20797 S<sizeof (E)> s;
20800 The size of `E' cannot be known until the value of `I' has been
20801 determined. Therefore, `E' must be considered dependent. */
20802 scope = TYPE_CONTEXT (type);
20803 if (scope && TYPE_P (scope))
20804 return dependent_type_p (scope);
20805 /* Don't use type_dependent_expression_p here, as it can lead
20806 to infinite recursion trying to determine whether a lambda
20807 nested in a lambda is dependent (c++/47687). */
20808 else if (scope && TREE_CODE (scope) == FUNCTION_DECL
20809 && DECL_LANG_SPECIFIC (scope)
20810 && DECL_TEMPLATE_INFO (scope)
20811 && (any_dependent_template_arguments_p
20812 (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (scope)))))
20813 return true;
20815 /* Other types are non-dependent. */
20816 return false;
20819 /* Returns TRUE if TYPE is dependent, in the sense of
20820 [temp.dep.type]. Note that a NULL type is considered dependent. */
20822 bool
20823 dependent_type_p (tree type)
20825 /* If there are no template parameters in scope, then there can't be
20826 any dependent types. */
20827 if (!processing_template_decl)
20829 /* If we are not processing a template, then nobody should be
20830 providing us with a dependent type. */
20831 gcc_assert (type);
20832 gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM || is_auto (type));
20833 return false;
20836 /* If the type is NULL, we have not computed a type for the entity
20837 in question; in that case, the type is dependent. */
20838 if (!type)
20839 return true;
20841 /* Erroneous types can be considered non-dependent. */
20842 if (type == error_mark_node)
20843 return false;
20845 /* If we have not already computed the appropriate value for TYPE,
20846 do so now. */
20847 if (!TYPE_DEPENDENT_P_VALID (type))
20849 TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
20850 TYPE_DEPENDENT_P_VALID (type) = 1;
20853 return TYPE_DEPENDENT_P (type);
20856 /* Returns TRUE if SCOPE is a dependent scope, in which we can't do any
20857 lookup. In other words, a dependent type that is not the current
20858 instantiation. */
20860 bool
20861 dependent_scope_p (tree scope)
20863 return (scope && TYPE_P (scope) && dependent_type_p (scope)
20864 && !currently_open_class (scope));
20867 /* T is a SCOPE_REF; return whether we need to consider it
20868 instantiation-dependent so that we can check access at instantiation
20869 time even though we know which member it resolves to. */
20871 static bool
20872 instantiation_dependent_scope_ref_p (tree t)
20874 if (DECL_P (TREE_OPERAND (t, 1))
20875 && CLASS_TYPE_P (TREE_OPERAND (t, 0))
20876 && accessible_in_template_p (TREE_OPERAND (t, 0),
20877 TREE_OPERAND (t, 1)))
20878 return false;
20879 else
20880 return true;
20883 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
20884 [temp.dep.constexpr]. EXPRESSION is already known to be a constant
20885 expression. */
20887 /* Note that this predicate is not appropriate for general expressions;
20888 only constant expressions (that satisfy potential_constant_expression)
20889 can be tested for value dependence. */
20891 bool
20892 value_dependent_expression_p (tree expression)
20894 if (!processing_template_decl)
20895 return false;
20897 /* A name declared with a dependent type. */
20898 if (DECL_P (expression) && type_dependent_expression_p (expression))
20899 return true;
20901 switch (TREE_CODE (expression))
20903 case IDENTIFIER_NODE:
20904 /* A name that has not been looked up -- must be dependent. */
20905 return true;
20907 case TEMPLATE_PARM_INDEX:
20908 /* A non-type template parm. */
20909 return true;
20911 case CONST_DECL:
20912 /* A non-type template parm. */
20913 if (DECL_TEMPLATE_PARM_P (expression))
20914 return true;
20915 return value_dependent_expression_p (DECL_INITIAL (expression));
20917 case VAR_DECL:
20918 /* A constant with literal type and is initialized
20919 with an expression that is value-dependent.
20921 Note that a non-dependent parenthesized initializer will have
20922 already been replaced with its constant value, so if we see
20923 a TREE_LIST it must be dependent. */
20924 if (DECL_INITIAL (expression)
20925 && decl_constant_var_p (expression)
20926 && (TREE_CODE (DECL_INITIAL (expression)) == TREE_LIST
20927 || value_dependent_expression_p (DECL_INITIAL (expression))))
20928 return true;
20929 return false;
20931 case DYNAMIC_CAST_EXPR:
20932 case STATIC_CAST_EXPR:
20933 case CONST_CAST_EXPR:
20934 case REINTERPRET_CAST_EXPR:
20935 case CAST_EXPR:
20936 /* These expressions are value-dependent if the type to which
20937 the cast occurs is dependent or the expression being casted
20938 is value-dependent. */
20940 tree type = TREE_TYPE (expression);
20942 if (dependent_type_p (type))
20943 return true;
20945 /* A functional cast has a list of operands. */
20946 expression = TREE_OPERAND (expression, 0);
20947 if (!expression)
20949 /* If there are no operands, it must be an expression such
20950 as "int()". This should not happen for aggregate types
20951 because it would form non-constant expressions. */
20952 gcc_assert (cxx_dialect >= cxx11
20953 || INTEGRAL_OR_ENUMERATION_TYPE_P (type));
20955 return false;
20958 if (TREE_CODE (expression) == TREE_LIST)
20959 return any_value_dependent_elements_p (expression);
20961 return value_dependent_expression_p (expression);
20964 case SIZEOF_EXPR:
20965 if (SIZEOF_EXPR_TYPE_P (expression))
20966 return dependent_type_p (TREE_TYPE (TREE_OPERAND (expression, 0)));
20967 /* FALLTHRU */
20968 case ALIGNOF_EXPR:
20969 case TYPEID_EXPR:
20970 /* A `sizeof' expression is value-dependent if the operand is
20971 type-dependent or is a pack expansion. */
20972 expression = TREE_OPERAND (expression, 0);
20973 if (PACK_EXPANSION_P (expression))
20974 return true;
20975 else if (TYPE_P (expression))
20976 return dependent_type_p (expression);
20977 return instantiation_dependent_expression_p (expression);
20979 case AT_ENCODE_EXPR:
20980 /* An 'encode' expression is value-dependent if the operand is
20981 type-dependent. */
20982 expression = TREE_OPERAND (expression, 0);
20983 return dependent_type_p (expression);
20985 case NOEXCEPT_EXPR:
20986 expression = TREE_OPERAND (expression, 0);
20987 return instantiation_dependent_expression_p (expression);
20989 case SCOPE_REF:
20990 /* All instantiation-dependent expressions should also be considered
20991 value-dependent. */
20992 return instantiation_dependent_scope_ref_p (expression);
20994 case COMPONENT_REF:
20995 return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
20996 || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
20998 case NONTYPE_ARGUMENT_PACK:
20999 /* A NONTYPE_ARGUMENT_PACK is value-dependent if any packed argument
21000 is value-dependent. */
21002 tree values = ARGUMENT_PACK_ARGS (expression);
21003 int i, len = TREE_VEC_LENGTH (values);
21005 for (i = 0; i < len; ++i)
21006 if (value_dependent_expression_p (TREE_VEC_ELT (values, i)))
21007 return true;
21009 return false;
21012 case TRAIT_EXPR:
21014 tree type2 = TRAIT_EXPR_TYPE2 (expression);
21015 return (dependent_type_p (TRAIT_EXPR_TYPE1 (expression))
21016 || (type2 ? dependent_type_p (type2) : false));
21019 case MODOP_EXPR:
21020 return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
21021 || (value_dependent_expression_p (TREE_OPERAND (expression, 2))));
21023 case ARRAY_REF:
21024 return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
21025 || (value_dependent_expression_p (TREE_OPERAND (expression, 1))));
21027 case ADDR_EXPR:
21029 tree op = TREE_OPERAND (expression, 0);
21030 return (value_dependent_expression_p (op)
21031 || has_value_dependent_address (op));
21034 case CALL_EXPR:
21036 tree fn = get_callee_fndecl (expression);
21037 int i, nargs;
21038 if (!fn && value_dependent_expression_p (CALL_EXPR_FN (expression)))
21039 return true;
21040 nargs = call_expr_nargs (expression);
21041 for (i = 0; i < nargs; ++i)
21043 tree op = CALL_EXPR_ARG (expression, i);
21044 /* In a call to a constexpr member function, look through the
21045 implicit ADDR_EXPR on the object argument so that it doesn't
21046 cause the call to be considered value-dependent. We also
21047 look through it in potential_constant_expression. */
21048 if (i == 0 && fn && DECL_DECLARED_CONSTEXPR_P (fn)
21049 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
21050 && TREE_CODE (op) == ADDR_EXPR)
21051 op = TREE_OPERAND (op, 0);
21052 if (value_dependent_expression_p (op))
21053 return true;
21055 return false;
21058 case TEMPLATE_ID_EXPR:
21059 /* If a TEMPLATE_ID_EXPR involves a dependent name, it will be
21060 type-dependent. */
21061 return type_dependent_expression_p (expression);
21063 case CONSTRUCTOR:
21065 unsigned ix;
21066 tree val;
21067 if (dependent_type_p (TREE_TYPE (expression)))
21068 return true;
21069 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), ix, val)
21070 if (value_dependent_expression_p (val))
21071 return true;
21072 return false;
21075 case STMT_EXPR:
21076 /* Treat a GNU statement expression as dependent to avoid crashing
21077 under fold_non_dependent_expr; it can't be constant. */
21078 return true;
21080 default:
21081 /* A constant expression is value-dependent if any subexpression is
21082 value-dependent. */
21083 switch (TREE_CODE_CLASS (TREE_CODE (expression)))
21085 case tcc_reference:
21086 case tcc_unary:
21087 case tcc_comparison:
21088 case tcc_binary:
21089 case tcc_expression:
21090 case tcc_vl_exp:
21092 int i, len = cp_tree_operand_length (expression);
21094 for (i = 0; i < len; i++)
21096 tree t = TREE_OPERAND (expression, i);
21098 /* In some cases, some of the operands may be missing.l
21099 (For example, in the case of PREDECREMENT_EXPR, the
21100 amount to increment by may be missing.) That doesn't
21101 make the expression dependent. */
21102 if (t && value_dependent_expression_p (t))
21103 return true;
21106 break;
21107 default:
21108 break;
21110 break;
21113 /* The expression is not value-dependent. */
21114 return false;
21117 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
21118 [temp.dep.expr]. Note that an expression with no type is
21119 considered dependent. Other parts of the compiler arrange for an
21120 expression with type-dependent subexpressions to have no type, so
21121 this function doesn't have to be fully recursive. */
21123 bool
21124 type_dependent_expression_p (tree expression)
21126 if (!processing_template_decl)
21127 return false;
21129 if (expression == NULL_TREE || expression == error_mark_node)
21130 return false;
21132 /* An unresolved name is always dependent. */
21133 if (identifier_p (expression) || TREE_CODE (expression) == USING_DECL)
21134 return true;
21136 /* Some expression forms are never type-dependent. */
21137 if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
21138 || TREE_CODE (expression) == SIZEOF_EXPR
21139 || TREE_CODE (expression) == ALIGNOF_EXPR
21140 || TREE_CODE (expression) == AT_ENCODE_EXPR
21141 || TREE_CODE (expression) == NOEXCEPT_EXPR
21142 || TREE_CODE (expression) == TRAIT_EXPR
21143 || TREE_CODE (expression) == TYPEID_EXPR
21144 || TREE_CODE (expression) == DELETE_EXPR
21145 || TREE_CODE (expression) == VEC_DELETE_EXPR
21146 || TREE_CODE (expression) == THROW_EXPR)
21147 return false;
21149 /* The types of these expressions depends only on the type to which
21150 the cast occurs. */
21151 if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
21152 || TREE_CODE (expression) == STATIC_CAST_EXPR
21153 || TREE_CODE (expression) == CONST_CAST_EXPR
21154 || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
21155 || TREE_CODE (expression) == IMPLICIT_CONV_EXPR
21156 || TREE_CODE (expression) == CAST_EXPR)
21157 return dependent_type_p (TREE_TYPE (expression));
21159 /* The types of these expressions depends only on the type created
21160 by the expression. */
21161 if (TREE_CODE (expression) == NEW_EXPR
21162 || TREE_CODE (expression) == VEC_NEW_EXPR)
21164 /* For NEW_EXPR tree nodes created inside a template, either
21165 the object type itself or a TREE_LIST may appear as the
21166 operand 1. */
21167 tree type = TREE_OPERAND (expression, 1);
21168 if (TREE_CODE (type) == TREE_LIST)
21169 /* This is an array type. We need to check array dimensions
21170 as well. */
21171 return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
21172 || value_dependent_expression_p
21173 (TREE_OPERAND (TREE_VALUE (type), 1));
21174 else
21175 return dependent_type_p (type);
21178 if (TREE_CODE (expression) == SCOPE_REF)
21180 tree scope = TREE_OPERAND (expression, 0);
21181 tree name = TREE_OPERAND (expression, 1);
21183 /* 14.6.2.2 [temp.dep.expr]: An id-expression is type-dependent if it
21184 contains an identifier associated by name lookup with one or more
21185 declarations declared with a dependent type, or...a
21186 nested-name-specifier or qualified-id that names a member of an
21187 unknown specialization. */
21188 return (type_dependent_expression_p (name)
21189 || dependent_scope_p (scope));
21192 if (TREE_CODE (expression) == FUNCTION_DECL
21193 && DECL_LANG_SPECIFIC (expression)
21194 && DECL_TEMPLATE_INFO (expression)
21195 && (any_dependent_template_arguments_p
21196 (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
21197 return true;
21199 if (TREE_CODE (expression) == TEMPLATE_DECL
21200 && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
21201 return false;
21203 if (TREE_CODE (expression) == STMT_EXPR)
21204 expression = stmt_expr_value_expr (expression);
21206 if (BRACE_ENCLOSED_INITIALIZER_P (expression))
21208 tree elt;
21209 unsigned i;
21211 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), i, elt)
21213 if (type_dependent_expression_p (elt))
21214 return true;
21216 return false;
21219 /* A static data member of the current instantiation with incomplete
21220 array type is type-dependent, as the definition and specializations
21221 can have different bounds. */
21222 if (VAR_P (expression)
21223 && DECL_CLASS_SCOPE_P (expression)
21224 && dependent_type_p (DECL_CONTEXT (expression))
21225 && VAR_HAD_UNKNOWN_BOUND (expression))
21226 return true;
21228 /* An array of unknown bound depending on a variadic parameter, eg:
21230 template<typename... Args>
21231 void foo (Args... args)
21233 int arr[] = { args... };
21236 template<int... vals>
21237 void bar ()
21239 int arr[] = { vals... };
21242 If the array has no length and has an initializer, it must be that
21243 we couldn't determine its length in cp_complete_array_type because
21244 it is dependent. */
21245 if (VAR_P (expression)
21246 && TREE_CODE (TREE_TYPE (expression)) == ARRAY_TYPE
21247 && !TYPE_DOMAIN (TREE_TYPE (expression))
21248 && DECL_INITIAL (expression))
21249 return true;
21251 if (TREE_TYPE (expression) == unknown_type_node)
21253 if (TREE_CODE (expression) == ADDR_EXPR)
21254 return type_dependent_expression_p (TREE_OPERAND (expression, 0));
21255 if (TREE_CODE (expression) == COMPONENT_REF
21256 || TREE_CODE (expression) == OFFSET_REF)
21258 if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
21259 return true;
21260 expression = TREE_OPERAND (expression, 1);
21261 if (identifier_p (expression))
21262 return false;
21264 /* SCOPE_REF with non-null TREE_TYPE is always non-dependent. */
21265 if (TREE_CODE (expression) == SCOPE_REF)
21266 return false;
21268 /* Always dependent, on the number of arguments if nothing else. */
21269 if (TREE_CODE (expression) == EXPR_PACK_EXPANSION)
21270 return true;
21272 if (BASELINK_P (expression))
21274 if (BASELINK_OPTYPE (expression)
21275 && dependent_type_p (BASELINK_OPTYPE (expression)))
21276 return true;
21277 expression = BASELINK_FUNCTIONS (expression);
21280 if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
21282 if (any_dependent_template_arguments_p
21283 (TREE_OPERAND (expression, 1)))
21284 return true;
21285 expression = TREE_OPERAND (expression, 0);
21287 gcc_assert (TREE_CODE (expression) == OVERLOAD
21288 || TREE_CODE (expression) == FUNCTION_DECL);
21290 while (expression)
21292 if (type_dependent_expression_p (OVL_CURRENT (expression)))
21293 return true;
21294 expression = OVL_NEXT (expression);
21296 return false;
21299 gcc_assert (TREE_CODE (expression) != TYPE_DECL);
21301 return (dependent_type_p (TREE_TYPE (expression)));
21304 /* walk_tree callback function for instantiation_dependent_expression_p,
21305 below. Returns non-zero if a dependent subexpression is found. */
21307 static tree
21308 instantiation_dependent_r (tree *tp, int *walk_subtrees,
21309 void * /*data*/)
21311 if (TYPE_P (*tp))
21313 /* We don't have to worry about decltype currently because decltype
21314 of an instantiation-dependent expr is a dependent type. This
21315 might change depending on the resolution of DR 1172. */
21316 *walk_subtrees = false;
21317 return NULL_TREE;
21319 enum tree_code code = TREE_CODE (*tp);
21320 switch (code)
21322 /* Don't treat an argument list as dependent just because it has no
21323 TREE_TYPE. */
21324 case TREE_LIST:
21325 case TREE_VEC:
21326 return NULL_TREE;
21328 case VAR_DECL:
21329 case CONST_DECL:
21330 /* A constant with a dependent initializer is dependent. */
21331 if (value_dependent_expression_p (*tp))
21332 return *tp;
21333 break;
21335 case TEMPLATE_PARM_INDEX:
21336 return *tp;
21338 /* Handle expressions with type operands. */
21339 case SIZEOF_EXPR:
21340 case ALIGNOF_EXPR:
21341 case TYPEID_EXPR:
21342 case AT_ENCODE_EXPR:
21344 tree op = TREE_OPERAND (*tp, 0);
21345 if (code == SIZEOF_EXPR && SIZEOF_EXPR_TYPE_P (*tp))
21346 op = TREE_TYPE (op);
21347 if (TYPE_P (op))
21349 if (dependent_type_p (op))
21350 return *tp;
21351 else
21353 *walk_subtrees = false;
21354 return NULL_TREE;
21357 break;
21360 case TRAIT_EXPR:
21361 if (dependent_type_p (TRAIT_EXPR_TYPE1 (*tp))
21362 || (TRAIT_EXPR_TYPE2 (*tp)
21363 && dependent_type_p (TRAIT_EXPR_TYPE2 (*tp))))
21364 return *tp;
21365 *walk_subtrees = false;
21366 return NULL_TREE;
21368 case COMPONENT_REF:
21369 if (identifier_p (TREE_OPERAND (*tp, 1)))
21370 /* In a template, finish_class_member_access_expr creates a
21371 COMPONENT_REF with an IDENTIFIER_NODE for op1 even if it isn't
21372 type-dependent, so that we can check access control at
21373 instantiation time (PR 42277). See also Core issue 1273. */
21374 return *tp;
21375 break;
21377 case SCOPE_REF:
21378 if (instantiation_dependent_scope_ref_p (*tp))
21379 return *tp;
21380 else
21381 break;
21383 /* Treat statement-expressions as dependent. */
21384 case BIND_EXPR:
21385 return *tp;
21387 default:
21388 break;
21391 if (type_dependent_expression_p (*tp))
21392 return *tp;
21393 else
21394 return NULL_TREE;
21397 /* Returns TRUE if the EXPRESSION is instantiation-dependent, in the
21398 sense defined by the ABI:
21400 "An expression is instantiation-dependent if it is type-dependent
21401 or value-dependent, or it has a subexpression that is type-dependent
21402 or value-dependent." */
21404 bool
21405 instantiation_dependent_expression_p (tree expression)
21407 tree result;
21409 if (!processing_template_decl)
21410 return false;
21412 if (expression == error_mark_node)
21413 return false;
21415 result = cp_walk_tree_without_duplicates (&expression,
21416 instantiation_dependent_r, NULL);
21417 return result != NULL_TREE;
21420 /* Like type_dependent_expression_p, but it also works while not processing
21421 a template definition, i.e. during substitution or mangling. */
21423 bool
21424 type_dependent_expression_p_push (tree expr)
21426 bool b;
21427 ++processing_template_decl;
21428 b = type_dependent_expression_p (expr);
21429 --processing_template_decl;
21430 return b;
21433 /* Returns TRUE if ARGS contains a type-dependent expression. */
21435 bool
21436 any_type_dependent_arguments_p (const vec<tree, va_gc> *args)
21438 unsigned int i;
21439 tree arg;
21441 FOR_EACH_VEC_SAFE_ELT (args, i, arg)
21443 if (type_dependent_expression_p (arg))
21444 return true;
21446 return false;
21449 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
21450 expressions) contains any type-dependent expressions. */
21452 bool
21453 any_type_dependent_elements_p (const_tree list)
21455 for (; list; list = TREE_CHAIN (list))
21456 if (type_dependent_expression_p (TREE_VALUE (list)))
21457 return true;
21459 return false;
21462 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
21463 expressions) contains any value-dependent expressions. */
21465 bool
21466 any_value_dependent_elements_p (const_tree list)
21468 for (; list; list = TREE_CHAIN (list))
21469 if (value_dependent_expression_p (TREE_VALUE (list)))
21470 return true;
21472 return false;
21475 /* Returns TRUE if the ARG (a template argument) is dependent. */
21477 bool
21478 dependent_template_arg_p (tree arg)
21480 if (!processing_template_decl)
21481 return false;
21483 /* Assume a template argument that was wrongly written by the user
21484 is dependent. This is consistent with what
21485 any_dependent_template_arguments_p [that calls this function]
21486 does. */
21487 if (!arg || arg == error_mark_node)
21488 return true;
21490 if (TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
21491 arg = ARGUMENT_PACK_SELECT_ARG (arg);
21493 if (TREE_CODE (arg) == TEMPLATE_DECL
21494 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
21495 return dependent_template_p (arg);
21496 else if (ARGUMENT_PACK_P (arg))
21498 tree args = ARGUMENT_PACK_ARGS (arg);
21499 int i, len = TREE_VEC_LENGTH (args);
21500 for (i = 0; i < len; ++i)
21502 if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
21503 return true;
21506 return false;
21508 else if (TYPE_P (arg))
21509 return dependent_type_p (arg);
21510 else
21511 return (type_dependent_expression_p (arg)
21512 || value_dependent_expression_p (arg));
21515 /* Returns true if ARGS (a collection of template arguments) contains
21516 any types that require structural equality testing. */
21518 bool
21519 any_template_arguments_need_structural_equality_p (tree args)
21521 int i;
21522 int j;
21524 if (!args)
21525 return false;
21526 if (args == error_mark_node)
21527 return true;
21529 for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
21531 tree level = TMPL_ARGS_LEVEL (args, i + 1);
21532 for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
21534 tree arg = TREE_VEC_ELT (level, j);
21535 tree packed_args = NULL_TREE;
21536 int k, len = 1;
21538 if (ARGUMENT_PACK_P (arg))
21540 /* Look inside the argument pack. */
21541 packed_args = ARGUMENT_PACK_ARGS (arg);
21542 len = TREE_VEC_LENGTH (packed_args);
21545 for (k = 0; k < len; ++k)
21547 if (packed_args)
21548 arg = TREE_VEC_ELT (packed_args, k);
21550 if (error_operand_p (arg))
21551 return true;
21552 else if (TREE_CODE (arg) == TEMPLATE_DECL)
21553 continue;
21554 else if (TYPE_P (arg) && TYPE_STRUCTURAL_EQUALITY_P (arg))
21555 return true;
21556 else if (!TYPE_P (arg) && TREE_TYPE (arg)
21557 && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (arg)))
21558 return true;
21563 return false;
21566 /* Returns true if ARGS (a collection of template arguments) contains
21567 any dependent arguments. */
21569 bool
21570 any_dependent_template_arguments_p (const_tree args)
21572 int i;
21573 int j;
21575 if (!args)
21576 return false;
21577 if (args == error_mark_node)
21578 return true;
21580 for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
21582 const_tree level = TMPL_ARGS_LEVEL (args, i + 1);
21583 for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
21584 if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
21585 return true;
21588 return false;
21591 /* Returns TRUE if the template TMPL is dependent. */
21593 bool
21594 dependent_template_p (tree tmpl)
21596 if (TREE_CODE (tmpl) == OVERLOAD)
21598 while (tmpl)
21600 if (dependent_template_p (OVL_CURRENT (tmpl)))
21601 return true;
21602 tmpl = OVL_NEXT (tmpl);
21604 return false;
21607 /* Template template parameters are dependent. */
21608 if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
21609 || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
21610 return true;
21611 /* So are names that have not been looked up. */
21612 if (TREE_CODE (tmpl) == SCOPE_REF || identifier_p (tmpl))
21613 return true;
21614 /* So are member templates of dependent classes. */
21615 if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
21616 return dependent_type_p (DECL_CONTEXT (tmpl));
21617 return false;
21620 /* Returns TRUE if the specialization TMPL<ARGS> is dependent. */
21622 bool
21623 dependent_template_id_p (tree tmpl, tree args)
21625 return (dependent_template_p (tmpl)
21626 || any_dependent_template_arguments_p (args));
21629 /* Returns TRUE if OMP_FOR with DECLV, INITV, CONDV and INCRV vectors
21630 is dependent. */
21632 bool
21633 dependent_omp_for_p (tree declv, tree initv, tree condv, tree incrv)
21635 int i;
21637 if (!processing_template_decl)
21638 return false;
21640 for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
21642 tree decl = TREE_VEC_ELT (declv, i);
21643 tree init = TREE_VEC_ELT (initv, i);
21644 tree cond = TREE_VEC_ELT (condv, i);
21645 tree incr = TREE_VEC_ELT (incrv, i);
21647 if (type_dependent_expression_p (decl))
21648 return true;
21650 if (init && type_dependent_expression_p (init))
21651 return true;
21653 if (type_dependent_expression_p (cond))
21654 return true;
21656 if (COMPARISON_CLASS_P (cond)
21657 && (type_dependent_expression_p (TREE_OPERAND (cond, 0))
21658 || type_dependent_expression_p (TREE_OPERAND (cond, 1))))
21659 return true;
21661 if (TREE_CODE (incr) == MODOP_EXPR)
21663 if (type_dependent_expression_p (TREE_OPERAND (incr, 0))
21664 || type_dependent_expression_p (TREE_OPERAND (incr, 2)))
21665 return true;
21667 else if (type_dependent_expression_p (incr))
21668 return true;
21669 else if (TREE_CODE (incr) == MODIFY_EXPR)
21671 if (type_dependent_expression_p (TREE_OPERAND (incr, 0)))
21672 return true;
21673 else if (BINARY_CLASS_P (TREE_OPERAND (incr, 1)))
21675 tree t = TREE_OPERAND (incr, 1);
21676 if (type_dependent_expression_p (TREE_OPERAND (t, 0))
21677 || type_dependent_expression_p (TREE_OPERAND (t, 1)))
21678 return true;
21683 return false;
21686 /* TYPE is a TYPENAME_TYPE. Returns the ordinary TYPE to which the
21687 TYPENAME_TYPE corresponds. Returns the original TYPENAME_TYPE if
21688 no such TYPE can be found. Note that this function peers inside
21689 uninstantiated templates and therefore should be used only in
21690 extremely limited situations. ONLY_CURRENT_P restricts this
21691 peering to the currently open classes hierarchy (which is required
21692 when comparing types). */
21694 tree
21695 resolve_typename_type (tree type, bool only_current_p)
21697 tree scope;
21698 tree name;
21699 tree decl;
21700 int quals;
21701 tree pushed_scope;
21702 tree result;
21704 gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
21706 scope = TYPE_CONTEXT (type);
21707 /* Usually the non-qualified identifier of a TYPENAME_TYPE is
21708 TYPE_IDENTIFIER (type). But when 'type' is a typedef variant of
21709 a TYPENAME_TYPE node, then TYPE_NAME (type) is set to the TYPE_DECL representing
21710 the typedef. In that case TYPE_IDENTIFIER (type) is not the non-qualified
21711 identifier of the TYPENAME_TYPE anymore.
21712 So by getting the TYPE_IDENTIFIER of the _main declaration_ of the
21713 TYPENAME_TYPE instead, we avoid messing up with a possible
21714 typedef variant case. */
21715 name = TYPE_IDENTIFIER (TYPE_MAIN_VARIANT (type));
21717 /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
21718 it first before we can figure out what NAME refers to. */
21719 if (TREE_CODE (scope) == TYPENAME_TYPE)
21721 if (TYPENAME_IS_RESOLVING_P (scope))
21722 /* Given a class template A with a dependent base with nested type C,
21723 typedef typename A::C::C C will land us here, as trying to resolve
21724 the initial A::C leads to the local C typedef, which leads back to
21725 A::C::C. So we break the recursion now. */
21726 return type;
21727 else
21728 scope = resolve_typename_type (scope, only_current_p);
21730 /* If we don't know what SCOPE refers to, then we cannot resolve the
21731 TYPENAME_TYPE. */
21732 if (TREE_CODE (scope) == TYPENAME_TYPE)
21733 return type;
21734 /* If the SCOPE is a template type parameter, we have no way of
21735 resolving the name. */
21736 if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
21737 return type;
21738 /* If the SCOPE is not the current instantiation, there's no reason
21739 to look inside it. */
21740 if (only_current_p && !currently_open_class (scope))
21741 return type;
21742 /* If this is a typedef, we don't want to look inside (c++/11987). */
21743 if (typedef_variant_p (type))
21744 return type;
21745 /* If SCOPE isn't the template itself, it will not have a valid
21746 TYPE_FIELDS list. */
21747 if (same_type_p (scope, CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope)))
21748 /* scope is either the template itself or a compatible instantiation
21749 like X<T>, so look up the name in the original template. */
21750 scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
21751 else
21752 /* scope is a partial instantiation, so we can't do the lookup or we
21753 will lose the template arguments. */
21754 return type;
21755 /* Enter the SCOPE so that name lookup will be resolved as if we
21756 were in the class definition. In particular, SCOPE will no
21757 longer be considered a dependent type. */
21758 pushed_scope = push_scope (scope);
21759 /* Look up the declaration. */
21760 decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true,
21761 tf_warning_or_error);
21763 result = NULL_TREE;
21765 /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
21766 find a TEMPLATE_DECL. Otherwise, we want to find a TYPE_DECL. */
21767 if (!decl)
21768 /*nop*/;
21769 else if (identifier_p (TYPENAME_TYPE_FULLNAME (type))
21770 && TREE_CODE (decl) == TYPE_DECL)
21772 result = TREE_TYPE (decl);
21773 if (result == error_mark_node)
21774 result = NULL_TREE;
21776 else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
21777 && DECL_CLASS_TEMPLATE_P (decl))
21779 tree tmpl;
21780 tree args;
21781 /* Obtain the template and the arguments. */
21782 tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
21783 args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
21784 /* Instantiate the template. */
21785 result = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
21786 /*entering_scope=*/0,
21787 tf_error | tf_user);
21788 if (result == error_mark_node)
21789 result = NULL_TREE;
21792 /* Leave the SCOPE. */
21793 if (pushed_scope)
21794 pop_scope (pushed_scope);
21796 /* If we failed to resolve it, return the original typename. */
21797 if (!result)
21798 return type;
21800 /* If lookup found a typename type, resolve that too. */
21801 if (TREE_CODE (result) == TYPENAME_TYPE && !TYPENAME_IS_RESOLVING_P (result))
21803 /* Ill-formed programs can cause infinite recursion here, so we
21804 must catch that. */
21805 TYPENAME_IS_RESOLVING_P (type) = 1;
21806 result = resolve_typename_type (result, only_current_p);
21807 TYPENAME_IS_RESOLVING_P (type) = 0;
21810 /* Qualify the resulting type. */
21811 quals = cp_type_quals (type);
21812 if (quals)
21813 result = cp_build_qualified_type (result, cp_type_quals (result) | quals);
21815 return result;
21818 /* EXPR is an expression which is not type-dependent. Return a proxy
21819 for EXPR that can be used to compute the types of larger
21820 expressions containing EXPR. */
21822 tree
21823 build_non_dependent_expr (tree expr)
21825 tree inner_expr;
21827 #ifdef ENABLE_CHECKING
21828 /* Try to get a constant value for all non-dependent expressions in
21829 order to expose bugs in *_dependent_expression_p and constexpr. */
21830 if (cxx_dialect >= cxx11)
21831 maybe_constant_value (fold_non_dependent_expr_sfinae (expr, tf_none));
21832 #endif
21834 /* Preserve OVERLOADs; the functions must be available to resolve
21835 types. */
21836 inner_expr = expr;
21837 if (TREE_CODE (inner_expr) == STMT_EXPR)
21838 inner_expr = stmt_expr_value_expr (inner_expr);
21839 if (TREE_CODE (inner_expr) == ADDR_EXPR)
21840 inner_expr = TREE_OPERAND (inner_expr, 0);
21841 if (TREE_CODE (inner_expr) == COMPONENT_REF)
21842 inner_expr = TREE_OPERAND (inner_expr, 1);
21843 if (is_overloaded_fn (inner_expr)
21844 || TREE_CODE (inner_expr) == OFFSET_REF)
21845 return expr;
21846 /* There is no need to return a proxy for a variable. */
21847 if (VAR_P (expr))
21848 return expr;
21849 /* Preserve string constants; conversions from string constants to
21850 "char *" are allowed, even though normally a "const char *"
21851 cannot be used to initialize a "char *". */
21852 if (TREE_CODE (expr) == STRING_CST)
21853 return expr;
21854 /* Preserve void and arithmetic constants, as an optimization -- there is no
21855 reason to create a new node. */
21856 if (TREE_CODE (expr) == VOID_CST
21857 || TREE_CODE (expr) == INTEGER_CST
21858 || TREE_CODE (expr) == REAL_CST)
21859 return expr;
21860 /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
21861 There is at least one place where we want to know that a
21862 particular expression is a throw-expression: when checking a ?:
21863 expression, there are special rules if the second or third
21864 argument is a throw-expression. */
21865 if (TREE_CODE (expr) == THROW_EXPR)
21866 return expr;
21868 /* Don't wrap an initializer list, we need to be able to look inside. */
21869 if (BRACE_ENCLOSED_INITIALIZER_P (expr))
21870 return expr;
21872 /* Don't wrap a dummy object, we need to be able to test for it. */
21873 if (is_dummy_object (expr))
21874 return expr;
21876 if (TREE_CODE (expr) == COND_EXPR)
21877 return build3 (COND_EXPR,
21878 TREE_TYPE (expr),
21879 TREE_OPERAND (expr, 0),
21880 (TREE_OPERAND (expr, 1)
21881 ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
21882 : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
21883 build_non_dependent_expr (TREE_OPERAND (expr, 2)));
21884 if (TREE_CODE (expr) == COMPOUND_EXPR
21885 && !COMPOUND_EXPR_OVERLOADED (expr))
21886 return build2 (COMPOUND_EXPR,
21887 TREE_TYPE (expr),
21888 TREE_OPERAND (expr, 0),
21889 build_non_dependent_expr (TREE_OPERAND (expr, 1)));
21891 /* If the type is unknown, it can't really be non-dependent */
21892 gcc_assert (TREE_TYPE (expr) != unknown_type_node);
21894 /* Otherwise, build a NON_DEPENDENT_EXPR. */
21895 return build1 (NON_DEPENDENT_EXPR, TREE_TYPE (expr), expr);
21898 /* ARGS is a vector of expressions as arguments to a function call.
21899 Replace the arguments with equivalent non-dependent expressions.
21900 This modifies ARGS in place. */
21902 void
21903 make_args_non_dependent (vec<tree, va_gc> *args)
21905 unsigned int ix;
21906 tree arg;
21908 FOR_EACH_VEC_SAFE_ELT (args, ix, arg)
21910 tree newarg = build_non_dependent_expr (arg);
21911 if (newarg != arg)
21912 (*args)[ix] = newarg;
21916 /* Returns a type which represents 'auto' or 'decltype(auto)'. We use a
21917 TEMPLATE_TYPE_PARM with a level one deeper than the actual template
21918 parms. */
21920 static tree
21921 make_auto_1 (tree name)
21923 tree au = cxx_make_type (TEMPLATE_TYPE_PARM);
21924 TYPE_NAME (au) = build_decl (input_location,
21925 TYPE_DECL, name, au);
21926 TYPE_STUB_DECL (au) = TYPE_NAME (au);
21927 TEMPLATE_TYPE_PARM_INDEX (au) = build_template_parm_index
21928 (0, processing_template_decl + 1, processing_template_decl + 1,
21929 TYPE_NAME (au), NULL_TREE);
21930 TYPE_CANONICAL (au) = canonical_type_parameter (au);
21931 DECL_ARTIFICIAL (TYPE_NAME (au)) = 1;
21932 SET_DECL_TEMPLATE_PARM_P (TYPE_NAME (au));
21934 return au;
21937 tree
21938 make_decltype_auto (void)
21940 return make_auto_1 (get_identifier ("decltype(auto)"));
21943 tree
21944 make_auto (void)
21946 return make_auto_1 (get_identifier ("auto"));
21949 /* Given type ARG, return std::initializer_list<ARG>. */
21951 static tree
21952 listify (tree arg)
21954 tree std_init_list = namespace_binding
21955 (get_identifier ("initializer_list"), std_node);
21956 tree argvec;
21957 if (!std_init_list || !DECL_CLASS_TEMPLATE_P (std_init_list))
21959 error ("deducing from brace-enclosed initializer list requires "
21960 "#include <initializer_list>");
21961 return error_mark_node;
21963 argvec = make_tree_vec (1);
21964 TREE_VEC_ELT (argvec, 0) = arg;
21965 return lookup_template_class (std_init_list, argvec, NULL_TREE,
21966 NULL_TREE, 0, tf_warning_or_error);
21969 /* Replace auto in TYPE with std::initializer_list<auto>. */
21971 static tree
21972 listify_autos (tree type, tree auto_node)
21974 tree init_auto = listify (auto_node);
21975 tree argvec = make_tree_vec (1);
21976 TREE_VEC_ELT (argvec, 0) = init_auto;
21977 if (processing_template_decl)
21978 argvec = add_to_template_args (current_template_args (), argvec);
21979 return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
21982 /* Replace occurrences of 'auto' in TYPE with the appropriate type deduced
21983 from INIT. AUTO_NODE is the TEMPLATE_TYPE_PARM used for 'auto' in TYPE. */
21985 tree
21986 do_auto_deduction (tree type, tree init, tree auto_node)
21988 tree targs;
21990 if (init == error_mark_node)
21991 return error_mark_node;
21993 if (type_dependent_expression_p (init))
21994 /* Defining a subset of type-dependent expressions that we can deduce
21995 from ahead of time isn't worth the trouble. */
21996 return type;
21998 /* [dcl.spec.auto]: Obtain P from T by replacing the occurrences of auto
21999 with either a new invented type template parameter U or, if the
22000 initializer is a braced-init-list (8.5.4), with
22001 std::initializer_list<U>. */
22002 if (BRACE_ENCLOSED_INITIALIZER_P (init))
22003 type = listify_autos (type, auto_node);
22005 init = resolve_nondeduced_context (init);
22007 targs = make_tree_vec (1);
22008 if (AUTO_IS_DECLTYPE (auto_node))
22010 bool id = (DECL_P (init) || (TREE_CODE (init) == COMPONENT_REF
22011 && !REF_PARENTHESIZED_P (init)));
22012 TREE_VEC_ELT (targs, 0)
22013 = finish_decltype_type (init, id, tf_warning_or_error);
22014 if (type != auto_node)
22016 error ("%qT as type rather than plain %<decltype(auto)%>", type);
22017 return error_mark_node;
22020 else
22022 tree parms = build_tree_list (NULL_TREE, type);
22023 tree tparms = make_tree_vec (1);
22024 int val;
22026 TREE_VEC_ELT (tparms, 0)
22027 = build_tree_list (NULL_TREE, TYPE_NAME (auto_node));
22028 val = type_unification_real (tparms, targs, parms, &init, 1, 0,
22029 DEDUCE_CALL, LOOKUP_NORMAL,
22030 NULL, /*explain_p=*/false);
22031 if (val > 0)
22033 if (processing_template_decl)
22034 /* Try again at instantiation time. */
22035 return type;
22036 if (type && type != error_mark_node)
22037 /* If type is error_mark_node a diagnostic must have been
22038 emitted by now. Also, having a mention to '<type error>'
22039 in the diagnostic is not really useful to the user. */
22041 if (cfun && auto_node == current_function_auto_return_pattern
22042 && LAMBDA_FUNCTION_P (current_function_decl))
22043 error ("unable to deduce lambda return type from %qE", init);
22044 else
22045 error ("unable to deduce %qT from %qE", type, init);
22047 return error_mark_node;
22051 /* If the list of declarators contains more than one declarator, the type
22052 of each declared variable is determined as described above. If the
22053 type deduced for the template parameter U is not the same in each
22054 deduction, the program is ill-formed. */
22055 if (TREE_TYPE (auto_node)
22056 && !same_type_p (TREE_TYPE (auto_node), TREE_VEC_ELT (targs, 0)))
22058 if (cfun && auto_node == current_function_auto_return_pattern
22059 && LAMBDA_FUNCTION_P (current_function_decl))
22060 error ("inconsistent types %qT and %qT deduced for "
22061 "lambda return type", TREE_TYPE (auto_node),
22062 TREE_VEC_ELT (targs, 0));
22063 else
22064 error ("inconsistent deduction for %qT: %qT and then %qT",
22065 auto_node, TREE_TYPE (auto_node), TREE_VEC_ELT (targs, 0));
22066 return error_mark_node;
22068 TREE_TYPE (auto_node) = TREE_VEC_ELT (targs, 0);
22070 if (processing_template_decl)
22071 targs = add_to_template_args (current_template_args (), targs);
22072 return tsubst (type, targs, tf_warning_or_error, NULL_TREE);
22075 /* Substitutes LATE_RETURN_TYPE for 'auto' in TYPE and returns the
22076 result. */
22078 tree
22079 splice_late_return_type (tree type, tree late_return_type)
22081 tree argvec;
22083 if (late_return_type == NULL_TREE)
22084 return type;
22085 argvec = make_tree_vec (1);
22086 TREE_VEC_ELT (argvec, 0) = late_return_type;
22087 if (processing_template_parmlist)
22088 /* For a late-specified return type in a template type-parameter, we
22089 need to add a dummy argument level for its parmlist. */
22090 argvec = add_to_template_args
22091 (make_tree_vec (processing_template_parmlist), argvec);
22092 if (current_template_parms)
22093 argvec = add_to_template_args (current_template_args (), argvec);
22094 return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
22097 /* Returns true iff TYPE is a TEMPLATE_TYPE_PARM representing 'auto' or
22098 'decltype(auto)'. */
22100 bool
22101 is_auto (const_tree type)
22103 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
22104 && (TYPE_IDENTIFIER (type) == get_identifier ("auto")
22105 || TYPE_IDENTIFIER (type) == get_identifier ("decltype(auto)")))
22106 return true;
22107 else
22108 return false;
22111 /* Returns the TEMPLATE_TYPE_PARM in TYPE representing `auto' iff TYPE contains
22112 a use of `auto'. Returns NULL_TREE otherwise. */
22114 tree
22115 type_uses_auto (tree type)
22117 return find_type_usage (type, is_auto);
22120 /* Returns true iff TYPE is a TEMPLATE_TYPE_PARM representing 'auto',
22121 'decltype(auto)' or a concept. */
22123 bool
22124 is_auto_or_concept (const_tree type)
22126 return is_auto (type); // or concept
22129 /* Returns the TEMPLATE_TYPE_PARM in TYPE representing a generic type (`auto' or
22130 a concept identifier) iff TYPE contains a use of a generic type. Returns
22131 NULL_TREE otherwise. */
22133 tree
22134 type_uses_auto_or_concept (tree type)
22136 return find_type_usage (type, is_auto_or_concept);
22140 /* For a given template T, return the vector of typedefs referenced
22141 in T for which access check is needed at T instantiation time.
22142 T is either a FUNCTION_DECL or a RECORD_TYPE.
22143 Those typedefs were added to T by the function
22144 append_type_to_template_for_access_check. */
22146 vec<qualified_typedef_usage_t, va_gc> *
22147 get_types_needing_access_check (tree t)
22149 tree ti;
22150 vec<qualified_typedef_usage_t, va_gc> *result = NULL;
22152 if (!t || t == error_mark_node)
22153 return NULL;
22155 if (!(ti = get_template_info (t)))
22156 return NULL;
22158 if (CLASS_TYPE_P (t)
22159 || TREE_CODE (t) == FUNCTION_DECL)
22161 if (!TI_TEMPLATE (ti))
22162 return NULL;
22164 result = TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti);
22167 return result;
22170 /* Append the typedef TYPE_DECL used in template T to a list of typedefs
22171 tied to T. That list of typedefs will be access checked at
22172 T instantiation time.
22173 T is either a FUNCTION_DECL or a RECORD_TYPE.
22174 TYPE_DECL is a TYPE_DECL node representing a typedef.
22175 SCOPE is the scope through which TYPE_DECL is accessed.
22176 LOCATION is the location of the usage point of TYPE_DECL.
22178 This function is a subroutine of
22179 append_type_to_template_for_access_check. */
22181 static void
22182 append_type_to_template_for_access_check_1 (tree t,
22183 tree type_decl,
22184 tree scope,
22185 location_t location)
22187 qualified_typedef_usage_t typedef_usage;
22188 tree ti;
22190 if (!t || t == error_mark_node)
22191 return;
22193 gcc_assert ((TREE_CODE (t) == FUNCTION_DECL
22194 || CLASS_TYPE_P (t))
22195 && type_decl
22196 && TREE_CODE (type_decl) == TYPE_DECL
22197 && scope);
22199 if (!(ti = get_template_info (t)))
22200 return;
22202 gcc_assert (TI_TEMPLATE (ti));
22204 typedef_usage.typedef_decl = type_decl;
22205 typedef_usage.context = scope;
22206 typedef_usage.locus = location;
22208 vec_safe_push (TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti), typedef_usage);
22211 /* Append TYPE_DECL to the template TEMPL.
22212 TEMPL is either a class type, a FUNCTION_DECL or a a TEMPLATE_DECL.
22213 At TEMPL instanciation time, TYPE_DECL will be checked to see
22214 if it can be accessed through SCOPE.
22215 LOCATION is the location of the usage point of TYPE_DECL.
22217 e.g. consider the following code snippet:
22219 class C
22221 typedef int myint;
22224 template<class U> struct S
22226 C::myint mi; // <-- usage point of the typedef C::myint
22229 S<char> s;
22231 At S<char> instantiation time, we need to check the access of C::myint
22232 In other words, we need to check the access of the myint typedef through
22233 the C scope. For that purpose, this function will add the myint typedef
22234 and the scope C through which its being accessed to a list of typedefs
22235 tied to the template S. That list will be walked at template instantiation
22236 time and access check performed on each typedefs it contains.
22237 Note that this particular code snippet should yield an error because
22238 myint is private to C. */
22240 void
22241 append_type_to_template_for_access_check (tree templ,
22242 tree type_decl,
22243 tree scope,
22244 location_t location)
22246 qualified_typedef_usage_t *iter;
22247 unsigned i;
22249 gcc_assert (type_decl && (TREE_CODE (type_decl) == TYPE_DECL));
22251 /* Make sure we don't append the type to the template twice. */
22252 FOR_EACH_VEC_SAFE_ELT (get_types_needing_access_check (templ), i, iter)
22253 if (iter->typedef_decl == type_decl && scope == iter->context)
22254 return;
22256 append_type_to_template_for_access_check_1 (templ, type_decl,
22257 scope, location);
22260 /* Convert the generic type parameters in PARM that match the types given in the
22261 range [START_IDX, END_IDX) from the current_template_parms into generic type
22262 packs. */
22264 tree
22265 convert_generic_types_to_packs (tree parm, int start_idx, int end_idx)
22267 tree current = current_template_parms;
22268 int depth = TMPL_PARMS_DEPTH (current);
22269 current = INNERMOST_TEMPLATE_PARMS (current);
22270 tree replacement = make_tree_vec (TREE_VEC_LENGTH (current));
22272 for (int i = 0; i < start_idx; ++i)
22273 TREE_VEC_ELT (replacement, i)
22274 = TREE_TYPE (TREE_VALUE (TREE_VEC_ELT (current, i)));
22276 for (int i = start_idx; i < end_idx; ++i)
22278 /* Create a distinct parameter pack type from the current parm and add it
22279 to the replacement args to tsubst below into the generic function
22280 parameter. */
22282 tree o = TREE_TYPE (TREE_VALUE
22283 (TREE_VEC_ELT (current, i)));
22284 tree t = copy_type (o);
22285 TEMPLATE_TYPE_PARM_INDEX (t)
22286 = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (o),
22287 o, 0, 0, tf_none);
22288 TREE_TYPE (TEMPLATE_TYPE_DECL (t)) = t;
22289 TYPE_STUB_DECL (t) = TYPE_NAME (t) = TEMPLATE_TYPE_DECL (t);
22290 TYPE_MAIN_VARIANT (t) = t;
22291 TEMPLATE_TYPE_PARAMETER_PACK (t) = true;
22292 TYPE_CANONICAL (t) = canonical_type_parameter (t);
22293 TREE_VEC_ELT (replacement, i) = t;
22294 TREE_VALUE (TREE_VEC_ELT (current, i)) = TREE_CHAIN (t);
22297 for (int i = end_idx, e = TREE_VEC_LENGTH (current); i < e; ++i)
22298 TREE_VEC_ELT (replacement, i)
22299 = TREE_TYPE (TREE_VALUE (TREE_VEC_ELT (current, i)));
22301 /* If there are more levels then build up the replacement with the outer
22302 template parms. */
22303 if (depth > 1)
22304 replacement = add_to_template_args (template_parms_to_args
22305 (TREE_CHAIN (current_template_parms)),
22306 replacement);
22308 return tsubst (parm, replacement, tf_none, NULL_TREE);
22312 /* Set up the hash tables for template instantiations. */
22314 void
22315 init_template_processing (void)
22317 decl_specializations = hash_table<spec_hasher>::create_ggc (37);
22318 type_specializations = hash_table<spec_hasher>::create_ggc (37);
22321 /* Print stats about the template hash tables for -fstats. */
22323 void
22324 print_template_statistics (void)
22326 fprintf (stderr, "decl_specializations: size %ld, %ld elements, "
22327 "%f collisions\n", (long) decl_specializations->size (),
22328 (long) decl_specializations->elements (),
22329 decl_specializations->collisions ());
22330 fprintf (stderr, "type_specializations: size %ld, %ld elements, "
22331 "%f collisions\n", (long) type_specializations->size (),
22332 (long) type_specializations->elements (),
22333 type_specializations->collisions ());
22336 #include "gt-cp-pt.h"