* gensupport.c (old_preds): Don't reference PREDICATE_CODES.
[official-gcc.git] / gcc / cp / pt.c
blob2ab89b2eae30d6bb0869ffa43489311b8d8f05cd
1 /* Handle parameterized types (templates) for GNU C++.
2 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
4 Written by Ken Raeburn (raeburn@cygnus.com) while at Watchmaker Computing.
5 Rewritten by Jason Merrill (jason@cygnus.com).
7 This file is part of GCC.
9 GCC is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2, or (at your option)
12 any later version.
14 GCC is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with GCC; see the file COPYING. If not, write to
21 the Free Software Foundation, 51 Franklin Street, Fifth Floor,
22 Boston, MA 02110-1301, USA. */
24 /* Known bugs or deficiencies include:
26 all methods must be provided in header files; can't use a source
27 file that contains only the method templates and "just win". */
29 #include "config.h"
30 #include "system.h"
31 #include "coretypes.h"
32 #include "tm.h"
33 #include "obstack.h"
34 #include "tree.h"
35 #include "pointer-set.h"
36 #include "flags.h"
37 #include "c-common.h"
38 #include "cp-tree.h"
39 #include "cp-objcp-common.h"
40 #include "tree-inline.h"
41 #include "decl.h"
42 #include "output.h"
43 #include "except.h"
44 #include "toplev.h"
45 #include "rtl.h"
46 #include "timevar.h"
47 #include "tree-iterator.h"
49 /* The type of functions taking a tree, and some additional data, and
50 returning an int. */
51 typedef int (*tree_fn_t) (tree, void*);
53 /* The PENDING_TEMPLATES is a TREE_LIST of templates whose
54 instantiations have been deferred, either because their definitions
55 were not yet available, or because we were putting off doing the work.
56 The TREE_PURPOSE of each entry is either a DECL (for a function or
57 static data member), or a TYPE (for a class) indicating what we are
58 hoping to instantiate. The TREE_VALUE is not used. */
59 static GTY(()) tree pending_templates;
60 static GTY(()) tree last_pending_template;
62 int processing_template_parmlist;
63 static int template_header_count;
65 static GTY(()) tree saved_trees;
66 static GTY(()) varray_type inline_parm_levels;
67 static size_t inline_parm_levels_used;
69 static GTY(()) tree current_tinst_level;
71 static GTY(()) tree saved_access_scope;
73 /* Live only within one (recursive) call to tsubst_expr. We use
74 this to pass the statement expression node from the STMT_EXPR
75 to the EXPR_STMT that is its result. */
76 static tree cur_stmt_expr;
78 /* A map from local variable declarations in the body of the template
79 presently being instantiated to the corresponding instantiated
80 local variables. */
81 static htab_t local_specializations;
83 #define UNIFY_ALLOW_NONE 0
84 #define UNIFY_ALLOW_MORE_CV_QUAL 1
85 #define UNIFY_ALLOW_LESS_CV_QUAL 2
86 #define UNIFY_ALLOW_DERIVED 4
87 #define UNIFY_ALLOW_INTEGER 8
88 #define UNIFY_ALLOW_OUTER_LEVEL 16
89 #define UNIFY_ALLOW_OUTER_MORE_CV_QUAL 32
90 #define UNIFY_ALLOW_OUTER_LESS_CV_QUAL 64
92 static void push_access_scope (tree);
93 static void pop_access_scope (tree);
94 static int resolve_overloaded_unification (tree, tree, tree, tree,
95 unification_kind_t, int);
96 static int try_one_overload (tree, tree, tree, tree, tree,
97 unification_kind_t, int, bool);
98 static int unify (tree, tree, tree, tree, int);
99 static void add_pending_template (tree);
100 static void reopen_tinst_level (tree);
101 static tree classtype_mangled_name (tree);
102 static char* mangle_class_name_for_template (const char *, tree, tree);
103 static tree tsubst_initializer_list (tree, tree);
104 static tree get_class_bindings (tree, tree, tree);
105 static tree coerce_template_parms (tree, tree, tree, tsubst_flags_t, int);
106 static void tsubst_enum (tree, tree, tree);
107 static tree add_to_template_args (tree, tree);
108 static tree add_outermost_template_args (tree, tree);
109 static bool check_instantiated_args (tree, tree, tsubst_flags_t);
110 static int maybe_adjust_types_for_deduction (unification_kind_t, tree*, tree*);
111 static int type_unification_real (tree, tree, tree, tree,
112 int, unification_kind_t, int);
113 static void note_template_header (int);
114 static tree convert_nontype_argument_function (tree, tree);
115 static tree convert_nontype_argument (tree, tree);
116 static tree convert_template_argument (tree, tree, tree,
117 tsubst_flags_t, int, tree);
118 static int for_each_template_parm (tree, tree_fn_t, void*,
119 struct pointer_set_t*);
120 static tree build_template_parm_index (int, int, int, tree, tree);
121 static int inline_needs_template_parms (tree);
122 static void push_inline_template_parms_recursive (tree, int);
123 static tree retrieve_local_specialization (tree);
124 static void register_local_specialization (tree, tree);
125 static tree reduce_template_parm_level (tree, tree, int);
126 static int mark_template_parm (tree, void *);
127 static int template_parm_this_level_p (tree, void *);
128 static tree tsubst_friend_function (tree, tree);
129 static tree tsubst_friend_class (tree, tree);
130 static int can_complete_type_without_circularity (tree);
131 static tree get_bindings (tree, tree, tree, bool);
132 static int template_decl_level (tree);
133 static int check_cv_quals_for_unify (int, tree, tree);
134 static tree tsubst_template_arg (tree, tree, tsubst_flags_t, tree);
135 static tree tsubst_template_args (tree, tree, tsubst_flags_t, tree);
136 static tree tsubst_template_parms (tree, tree, tsubst_flags_t);
137 static void regenerate_decl_from_template (tree, tree);
138 static tree most_specialized (tree, tree, tree);
139 static tree most_specialized_class (tree, tree);
140 static int template_class_depth_real (tree, int);
141 static tree tsubst_aggr_type (tree, tree, tsubst_flags_t, tree, int);
142 static tree tsubst_arg_types (tree, tree, tsubst_flags_t, tree);
143 static tree tsubst_function_type (tree, tree, tsubst_flags_t, tree);
144 static void check_specialization_scope (void);
145 static tree process_partial_specialization (tree);
146 static void set_current_access_from_decl (tree);
147 static void check_default_tmpl_args (tree, tree, int, int);
148 static tree tsubst_call_declarator_parms (tree, tree, tsubst_flags_t, tree);
149 static tree get_template_base (tree, tree, tree, tree);
150 static int verify_class_unification (tree, tree, tree);
151 static tree try_class_unification (tree, tree, tree, tree);
152 static int coerce_template_template_parms (tree, tree, tsubst_flags_t,
153 tree, tree);
154 static tree determine_specialization (tree, tree, tree *, int, int);
155 static int template_args_equal (tree, tree);
156 static void tsubst_default_arguments (tree);
157 static tree for_each_template_parm_r (tree *, int *, void *);
158 static tree copy_default_args_to_explicit_spec_1 (tree, tree);
159 static void copy_default_args_to_explicit_spec (tree);
160 static int invalid_nontype_parm_type_p (tree, tsubst_flags_t);
161 static int eq_local_specializations (const void *, const void *);
162 static bool dependent_type_p_r (tree);
163 static tree tsubst (tree, tree, tsubst_flags_t, tree);
164 static tree tsubst_expr (tree, tree, tsubst_flags_t, tree);
165 static tree tsubst_copy (tree, tree, tsubst_flags_t, tree);
167 /* Make the current scope suitable for access checking when we are
168 processing T. T can be FUNCTION_DECL for instantiated function
169 template, or VAR_DECL for static member variable (need by
170 instantiate_decl). */
172 static void
173 push_access_scope (tree t)
175 gcc_assert (TREE_CODE (t) == FUNCTION_DECL
176 || TREE_CODE (t) == VAR_DECL);
178 if (DECL_FRIEND_CONTEXT (t))
179 push_nested_class (DECL_FRIEND_CONTEXT (t));
180 else if (DECL_CLASS_SCOPE_P (t))
181 push_nested_class (DECL_CONTEXT (t));
182 else
183 push_to_top_level ();
185 if (TREE_CODE (t) == FUNCTION_DECL)
187 saved_access_scope = tree_cons
188 (NULL_TREE, current_function_decl, saved_access_scope);
189 current_function_decl = t;
193 /* Restore the scope set up by push_access_scope. T is the node we
194 are processing. */
196 static void
197 pop_access_scope (tree t)
199 if (TREE_CODE (t) == FUNCTION_DECL)
201 current_function_decl = TREE_VALUE (saved_access_scope);
202 saved_access_scope = TREE_CHAIN (saved_access_scope);
205 if (DECL_FRIEND_CONTEXT (t) || DECL_CLASS_SCOPE_P (t))
206 pop_nested_class ();
207 else
208 pop_from_top_level ();
211 /* Do any processing required when DECL (a member template
212 declaration) is finished. Returns the TEMPLATE_DECL corresponding
213 to DECL, unless it is a specialization, in which case the DECL
214 itself is returned. */
216 tree
217 finish_member_template_decl (tree decl)
219 if (decl == error_mark_node)
220 return error_mark_node;
222 gcc_assert (DECL_P (decl));
224 if (TREE_CODE (decl) == TYPE_DECL)
226 tree type;
228 type = TREE_TYPE (decl);
229 if (IS_AGGR_TYPE (type)
230 && CLASSTYPE_TEMPLATE_INFO (type)
231 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
233 tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
234 check_member_template (tmpl);
235 return tmpl;
237 return NULL_TREE;
239 else if (TREE_CODE (decl) == FIELD_DECL)
240 error ("data member %qD cannot be a member template", decl);
241 else if (DECL_TEMPLATE_INFO (decl))
243 if (!DECL_TEMPLATE_SPECIALIZATION (decl))
245 check_member_template (DECL_TI_TEMPLATE (decl));
246 return DECL_TI_TEMPLATE (decl);
248 else
249 return decl;
251 else
252 error ("invalid member template declaration %qD", decl);
254 return error_mark_node;
257 /* Returns the template nesting level of the indicated class TYPE.
259 For example, in:
260 template <class T>
261 struct A
263 template <class U>
264 struct B {};
267 A<T>::B<U> has depth two, while A<T> has depth one.
268 Both A<T>::B<int> and A<int>::B<U> have depth one, if
269 COUNT_SPECIALIZATIONS is 0 or if they are instantiations, not
270 specializations.
272 This function is guaranteed to return 0 if passed NULL_TREE so
273 that, for example, `template_class_depth (current_class_type)' is
274 always safe. */
276 static int
277 template_class_depth_real (tree type, int count_specializations)
279 int depth;
281 for (depth = 0;
282 type && TREE_CODE (type) != NAMESPACE_DECL;
283 type = (TREE_CODE (type) == FUNCTION_DECL)
284 ? CP_DECL_CONTEXT (type) : TYPE_CONTEXT (type))
286 if (TREE_CODE (type) != FUNCTION_DECL)
288 if (CLASSTYPE_TEMPLATE_INFO (type)
289 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (type))
290 && ((count_specializations
291 && CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
292 || uses_template_parms (CLASSTYPE_TI_ARGS (type))))
293 ++depth;
295 else
297 if (DECL_TEMPLATE_INFO (type)
298 && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (type))
299 && ((count_specializations
300 && DECL_TEMPLATE_SPECIALIZATION (type))
301 || uses_template_parms (DECL_TI_ARGS (type))))
302 ++depth;
306 return depth;
309 /* Returns the template nesting level of the indicated class TYPE.
310 Like template_class_depth_real, but instantiations do not count in
311 the depth. */
314 template_class_depth (tree type)
316 return template_class_depth_real (type, /*count_specializations=*/0);
319 /* Returns 1 if processing DECL as part of do_pending_inlines
320 needs us to push template parms. */
322 static int
323 inline_needs_template_parms (tree decl)
325 if (! DECL_TEMPLATE_INFO (decl))
326 return 0;
328 return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (most_general_template (decl)))
329 > (processing_template_decl + DECL_TEMPLATE_SPECIALIZATION (decl)));
332 /* Subroutine of maybe_begin_member_template_processing.
333 Push the template parms in PARMS, starting from LEVELS steps into the
334 chain, and ending at the beginning, since template parms are listed
335 innermost first. */
337 static void
338 push_inline_template_parms_recursive (tree parmlist, int levels)
340 tree parms = TREE_VALUE (parmlist);
341 int i;
343 if (levels > 1)
344 push_inline_template_parms_recursive (TREE_CHAIN (parmlist), levels - 1);
346 ++processing_template_decl;
347 current_template_parms
348 = tree_cons (size_int (processing_template_decl),
349 parms, current_template_parms);
350 TEMPLATE_PARMS_FOR_INLINE (current_template_parms) = 1;
352 begin_scope (TREE_VEC_LENGTH (parms) ? sk_template_parms : sk_template_spec,
353 NULL);
354 for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
356 tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
357 gcc_assert (DECL_P (parm));
359 switch (TREE_CODE (parm))
361 case TYPE_DECL:
362 case TEMPLATE_DECL:
363 pushdecl (parm);
364 break;
366 case PARM_DECL:
368 /* Make a CONST_DECL as is done in process_template_parm.
369 It is ugly that we recreate this here; the original
370 version built in process_template_parm is no longer
371 available. */
372 tree decl = build_decl (CONST_DECL, DECL_NAME (parm),
373 TREE_TYPE (parm));
374 DECL_ARTIFICIAL (decl) = 1;
375 TREE_CONSTANT (decl) = 1;
376 TREE_INVARIANT (decl) = 1;
377 TREE_READONLY (decl) = 1;
378 DECL_INITIAL (decl) = DECL_INITIAL (parm);
379 SET_DECL_TEMPLATE_PARM_P (decl);
380 pushdecl (decl);
382 break;
384 default:
385 gcc_unreachable ();
390 /* Restore the template parameter context for a member template or
391 a friend template defined in a class definition. */
393 void
394 maybe_begin_member_template_processing (tree decl)
396 tree parms;
397 int levels = 0;
399 if (inline_needs_template_parms (decl))
401 parms = DECL_TEMPLATE_PARMS (most_general_template (decl));
402 levels = TMPL_PARMS_DEPTH (parms) - processing_template_decl;
404 if (DECL_TEMPLATE_SPECIALIZATION (decl))
406 --levels;
407 parms = TREE_CHAIN (parms);
410 push_inline_template_parms_recursive (parms, levels);
413 /* Remember how many levels of template parameters we pushed so that
414 we can pop them later. */
415 if (!inline_parm_levels)
416 VARRAY_INT_INIT (inline_parm_levels, 4, "inline_parm_levels");
417 if (inline_parm_levels_used == inline_parm_levels->num_elements)
418 VARRAY_GROW (inline_parm_levels, 2 * inline_parm_levels_used);
419 VARRAY_INT (inline_parm_levels, inline_parm_levels_used) = levels;
420 ++inline_parm_levels_used;
423 /* Undo the effects of maybe_begin_member_template_processing. */
425 void
426 maybe_end_member_template_processing (void)
428 int i;
430 if (!inline_parm_levels_used)
431 return;
433 --inline_parm_levels_used;
434 for (i = 0;
435 i < VARRAY_INT (inline_parm_levels, inline_parm_levels_used);
436 ++i)
438 --processing_template_decl;
439 current_template_parms = TREE_CHAIN (current_template_parms);
440 poplevel (0, 0, 0);
444 /* Return a new template argument vector which contains all of ARGS,
445 but has as its innermost set of arguments the EXTRA_ARGS. */
447 static tree
448 add_to_template_args (tree args, tree extra_args)
450 tree new_args;
451 int extra_depth;
452 int i;
453 int j;
455 extra_depth = TMPL_ARGS_DEPTH (extra_args);
456 new_args = make_tree_vec (TMPL_ARGS_DEPTH (args) + extra_depth);
458 for (i = 1; i <= TMPL_ARGS_DEPTH (args); ++i)
459 SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (args, i));
461 for (j = 1; j <= extra_depth; ++j, ++i)
462 SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (extra_args, j));
464 return new_args;
467 /* Like add_to_template_args, but only the outermost ARGS are added to
468 the EXTRA_ARGS. In particular, all but TMPL_ARGS_DEPTH
469 (EXTRA_ARGS) levels are added. This function is used to combine
470 the template arguments from a partial instantiation with the
471 template arguments used to attain the full instantiation from the
472 partial instantiation. */
474 static tree
475 add_outermost_template_args (tree args, tree extra_args)
477 tree new_args;
479 /* If there are more levels of EXTRA_ARGS than there are ARGS,
480 something very fishy is going on. */
481 gcc_assert (TMPL_ARGS_DEPTH (args) >= TMPL_ARGS_DEPTH (extra_args));
483 /* If *all* the new arguments will be the EXTRA_ARGS, just return
484 them. */
485 if (TMPL_ARGS_DEPTH (args) == TMPL_ARGS_DEPTH (extra_args))
486 return extra_args;
488 /* For the moment, we make ARGS look like it contains fewer levels. */
489 TREE_VEC_LENGTH (args) -= TMPL_ARGS_DEPTH (extra_args);
491 new_args = add_to_template_args (args, extra_args);
493 /* Now, we restore ARGS to its full dimensions. */
494 TREE_VEC_LENGTH (args) += TMPL_ARGS_DEPTH (extra_args);
496 return new_args;
499 /* Return the N levels of innermost template arguments from the ARGS. */
501 tree
502 get_innermost_template_args (tree args, int n)
504 tree new_args;
505 int extra_levels;
506 int i;
508 gcc_assert (n >= 0);
510 /* If N is 1, just return the innermost set of template arguments. */
511 if (n == 1)
512 return TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args));
514 /* If we're not removing anything, just return the arguments we were
515 given. */
516 extra_levels = TMPL_ARGS_DEPTH (args) - n;
517 gcc_assert (extra_levels >= 0);
518 if (extra_levels == 0)
519 return args;
521 /* Make a new set of arguments, not containing the outer arguments. */
522 new_args = make_tree_vec (n);
523 for (i = 1; i <= n; ++i)
524 SET_TMPL_ARGS_LEVEL (new_args, i,
525 TMPL_ARGS_LEVEL (args, i + extra_levels));
527 return new_args;
530 /* We've got a template header coming up; push to a new level for storing
531 the parms. */
533 void
534 begin_template_parm_list (void)
536 /* We use a non-tag-transparent scope here, which causes pushtag to
537 put tags in this scope, rather than in the enclosing class or
538 namespace scope. This is the right thing, since we want
539 TEMPLATE_DECLS, and not TYPE_DECLS for template classes. For a
540 global template class, push_template_decl handles putting the
541 TEMPLATE_DECL into top-level scope. For a nested template class,
542 e.g.:
544 template <class T> struct S1 {
545 template <class T> struct S2 {};
548 pushtag contains special code to call pushdecl_with_scope on the
549 TEMPLATE_DECL for S2. */
550 begin_scope (sk_template_parms, NULL);
551 ++processing_template_decl;
552 ++processing_template_parmlist;
553 note_template_header (0);
556 /* This routine is called when a specialization is declared. If it is
557 invalid to declare a specialization here, an error is reported. */
559 static void
560 check_specialization_scope (void)
562 tree scope = current_scope ();
564 /* [temp.expl.spec]
566 An explicit specialization shall be declared in the namespace of
567 which the template is a member, or, for member templates, in the
568 namespace of which the enclosing class or enclosing class
569 template is a member. An explicit specialization of a member
570 function, member class or static data member of a class template
571 shall be declared in the namespace of which the class template
572 is a member. */
573 if (scope && TREE_CODE (scope) != NAMESPACE_DECL)
574 error ("explicit specialization in non-namespace scope %qD", scope);
576 /* [temp.expl.spec]
578 In an explicit specialization declaration for a member of a class
579 template or a member template that appears in namespace scope,
580 the member template and some of its enclosing class templates may
581 remain unspecialized, except that the declaration shall not
582 explicitly specialize a class member template if its enclosing
583 class templates are not explicitly specialized as well. */
584 if (current_template_parms)
585 error ("enclosing class templates are not explicitly specialized");
588 /* We've just seen template <>. */
590 void
591 begin_specialization (void)
593 begin_scope (sk_template_spec, NULL);
594 note_template_header (1);
595 check_specialization_scope ();
598 /* Called at then end of processing a declaration preceded by
599 template<>. */
601 void
602 end_specialization (void)
604 finish_scope ();
605 reset_specialization ();
608 /* Any template <>'s that we have seen thus far are not referring to a
609 function specialization. */
611 void
612 reset_specialization (void)
614 processing_specialization = 0;
615 template_header_count = 0;
618 /* We've just seen a template header. If SPECIALIZATION is nonzero,
619 it was of the form template <>. */
621 static void
622 note_template_header (int specialization)
624 processing_specialization = specialization;
625 template_header_count++;
628 /* We're beginning an explicit instantiation. */
630 void
631 begin_explicit_instantiation (void)
633 gcc_assert (!processing_explicit_instantiation);
634 processing_explicit_instantiation = true;
638 void
639 end_explicit_instantiation (void)
641 gcc_assert (processing_explicit_instantiation);
642 processing_explicit_instantiation = false;
645 /* A explicit specialization or partial specialization TMPL is being
646 declared. Check that the namespace in which the specialization is
647 occurring is permissible. Returns false iff it is invalid to
648 specialize TMPL in the current namespace. */
650 static bool
651 check_specialization_namespace (tree tmpl)
653 tree tpl_ns = decl_namespace_context (tmpl);
655 /* [tmpl.expl.spec]
657 An explicit specialization shall be declared in the namespace of
658 which the template is a member, or, for member templates, in the
659 namespace of which the enclosing class or enclosing class
660 template is a member. An explicit specialization of a member
661 function, member class or static data member of a class template
662 shall be declared in the namespace of which the class template is
663 a member. */
664 if (is_associated_namespace (current_namespace, tpl_ns))
665 /* Same or super-using namespace. */
666 return true;
667 else
669 pedwarn ("specialization of %qD in different namespace", tmpl);
670 pedwarn (" from definition of %q+#D", tmpl);
671 return false;
675 /* The TYPE is being declared. If it is a template type, that means it
676 is a partial specialization. Do appropriate error-checking. */
678 void
679 maybe_process_partial_specialization (tree type)
681 /* TYPE maybe an ERROR_MARK_NODE. */
682 tree context = TYPE_P (type) ? TYPE_CONTEXT (type) : NULL_TREE;
684 if (CLASS_TYPE_P (type) && CLASSTYPE_USE_TEMPLATE (type))
686 /* This is for ordinary explicit specialization and partial
687 specialization of a template class such as:
689 template <> class C<int>;
693 template <class T> class C<T*>;
695 Make sure that `C<int>' and `C<T*>' are implicit instantiations. */
697 if (CLASSTYPE_IMPLICIT_INSTANTIATION (type)
698 && !COMPLETE_TYPE_P (type))
700 check_specialization_namespace (CLASSTYPE_TI_TEMPLATE (type));
701 SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
702 if (processing_template_decl)
703 push_template_decl (TYPE_MAIN_DECL (type));
705 else if (CLASSTYPE_TEMPLATE_INSTANTIATION (type))
706 error ("specialization of %qT after instantiation", type);
708 else if (CLASS_TYPE_P (type)
709 && !CLASSTYPE_USE_TEMPLATE (type)
710 && CLASSTYPE_TEMPLATE_INFO (type)
711 && context && CLASS_TYPE_P (context)
712 && CLASSTYPE_TEMPLATE_INFO (context))
714 /* This is for an explicit specialization of member class
715 template according to [temp.expl.spec/18]:
717 template <> template <class U> class C<int>::D;
719 The context `C<int>' must be an implicit instantiation.
720 Otherwise this is just a member class template declared
721 earlier like:
723 template <> class C<int> { template <class U> class D; };
724 template <> template <class U> class C<int>::D;
726 In the first case, `C<int>::D' is a specialization of `C<T>::D'
727 while in the second case, `C<int>::D' is a primary template
728 and `C<T>::D' may not exist. */
730 if (CLASSTYPE_IMPLICIT_INSTANTIATION (context)
731 && !COMPLETE_TYPE_P (type))
733 tree t;
735 if (current_namespace
736 != decl_namespace_context (CLASSTYPE_TI_TEMPLATE (type)))
738 pedwarn ("specializing %q#T in different namespace", type);
739 pedwarn (" from definition of %q+#D",
740 CLASSTYPE_TI_TEMPLATE (type));
743 /* Check for invalid specialization after instantiation:
745 template <> template <> class C<int>::D<int>;
746 template <> template <class U> class C<int>::D; */
748 for (t = DECL_TEMPLATE_INSTANTIATIONS
749 (most_general_template (CLASSTYPE_TI_TEMPLATE (type)));
750 t; t = TREE_CHAIN (t))
751 if (TREE_VALUE (t) != type
752 && TYPE_CONTEXT (TREE_VALUE (t)) == context)
753 error ("specialization %qT after instantiation %qT",
754 type, TREE_VALUE (t));
756 /* Mark TYPE as a specialization. And as a result, we only
757 have one level of template argument for the innermost
758 class template. */
759 SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
760 CLASSTYPE_TI_ARGS (type)
761 = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type));
764 else if (processing_specialization)
765 error ("explicit specialization of non-template %qT", type);
768 /* Returns nonzero if we can optimize the retrieval of specializations
769 for TMPL, a TEMPLATE_DECL. In particular, for such a template, we
770 do not use DECL_TEMPLATE_SPECIALIZATIONS at all. */
772 static inline bool
773 optimize_specialization_lookup_p (tree tmpl)
775 return (DECL_FUNCTION_TEMPLATE_P (tmpl)
776 && DECL_CLASS_SCOPE_P (tmpl)
777 /* DECL_CLASS_SCOPE_P holds of T::f even if T is a template
778 parameter. */
779 && CLASS_TYPE_P (DECL_CONTEXT (tmpl))
780 /* The optimized lookup depends on the fact that the
781 template arguments for the member function template apply
782 purely to the containing class, which is not true if the
783 containing class is an explicit or partial
784 specialization. */
785 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (tmpl))
786 && !DECL_MEMBER_TEMPLATE_P (tmpl)
787 && !DECL_CONV_FN_P (tmpl)
788 /* It is possible to have a template that is not a member
789 template and is not a member of a template class:
791 template <typename T>
792 struct S { friend A::f(); };
794 Here, the friend function is a template, but the context does
795 not have template information. The optimized lookup relies
796 on having ARGS be the template arguments for both the class
797 and the function template. */
798 && !DECL_FRIEND_P (DECL_TEMPLATE_RESULT (tmpl)));
801 /* Retrieve the specialization (in the sense of [temp.spec] - a
802 specialization is either an instantiation or an explicit
803 specialization) of TMPL for the given template ARGS. If there is
804 no such specialization, return NULL_TREE. The ARGS are a vector of
805 arguments, or a vector of vectors of arguments, in the case of
806 templates with more than one level of parameters.
808 If TMPL is a type template and CLASS_SPECIALIZATIONS_P is true,
809 then we search for a partial specialization matching ARGS. This
810 parameter is ignored if TMPL is not a class template. */
812 static tree
813 retrieve_specialization (tree tmpl, tree args,
814 bool class_specializations_p)
816 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
818 /* There should be as many levels of arguments as there are
819 levels of parameters. */
820 gcc_assert (TMPL_ARGS_DEPTH (args)
821 == TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl)));
823 if (optimize_specialization_lookup_p (tmpl))
825 tree class_template;
826 tree class_specialization;
827 VEC(tree,gc) *methods;
828 tree fns;
829 int idx;
831 /* The template arguments actually apply to the containing
832 class. Find the class specialization with those
833 arguments. */
834 class_template = CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (tmpl));
835 class_specialization
836 = retrieve_specialization (class_template, args,
837 /*class_specializations_p=*/false);
838 if (!class_specialization)
839 return NULL_TREE;
840 /* Now, find the appropriate entry in the CLASSTYPE_METHOD_VEC
841 for the specialization. */
842 idx = class_method_index_for_fn (class_specialization, tmpl);
843 if (idx == -1)
844 return NULL_TREE;
845 /* Iterate through the methods with the indicated name, looking
846 for the one that has an instance of TMPL. */
847 methods = CLASSTYPE_METHOD_VEC (class_specialization);
848 for (fns = VEC_index (tree, methods, idx); fns; fns = OVL_NEXT (fns))
850 tree fn = OVL_CURRENT (fns);
851 if (DECL_TEMPLATE_INFO (fn) && DECL_TI_TEMPLATE (fn) == tmpl)
852 return fn;
854 return NULL_TREE;
856 else
858 tree *sp;
859 tree *head;
861 /* Class templates store their instantiations on the
862 DECL_TEMPLATE_INSTANTIATIONS list; other templates use the
863 DECL_TEMPLATE_SPECIALIZATIONS list. */
864 if (!class_specializations_p
865 && TREE_CODE (DECL_TEMPLATE_RESULT (tmpl)) == TYPE_DECL)
866 sp = &DECL_TEMPLATE_INSTANTIATIONS (tmpl);
867 else
868 sp = &DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
869 head = sp;
870 /* Iterate through the list until we find a matching template. */
871 while (*sp != NULL_TREE)
873 tree spec = *sp;
875 if (comp_template_args (TREE_PURPOSE (spec), args))
877 /* Use the move-to-front heuristic to speed up future
878 searches. */
879 if (spec != *head)
881 *sp = TREE_CHAIN (*sp);
882 TREE_CHAIN (spec) = *head;
883 *head = spec;
885 return TREE_VALUE (spec);
887 sp = &TREE_CHAIN (spec);
891 return NULL_TREE;
894 /* Like retrieve_specialization, but for local declarations. */
896 static tree
897 retrieve_local_specialization (tree tmpl)
899 tree spec = htab_find_with_hash (local_specializations, tmpl,
900 htab_hash_pointer (tmpl));
901 return spec ? TREE_PURPOSE (spec) : NULL_TREE;
904 /* Returns nonzero iff DECL is a specialization of TMPL. */
907 is_specialization_of (tree decl, tree tmpl)
909 tree t;
911 if (TREE_CODE (decl) == FUNCTION_DECL)
913 for (t = decl;
914 t != NULL_TREE;
915 t = DECL_TEMPLATE_INFO (t) ? DECL_TI_TEMPLATE (t) : NULL_TREE)
916 if (t == tmpl)
917 return 1;
919 else
921 gcc_assert (TREE_CODE (decl) == TYPE_DECL);
923 for (t = TREE_TYPE (decl);
924 t != NULL_TREE;
925 t = CLASSTYPE_USE_TEMPLATE (t)
926 ? TREE_TYPE (CLASSTYPE_TI_TEMPLATE (t)) : NULL_TREE)
927 if (same_type_ignoring_top_level_qualifiers_p (t, TREE_TYPE (tmpl)))
928 return 1;
931 return 0;
934 /* Returns nonzero iff DECL is a specialization of friend declaration
935 FRIEND according to [temp.friend]. */
937 bool
938 is_specialization_of_friend (tree decl, tree friend)
940 bool need_template = true;
941 int template_depth;
943 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
944 || TREE_CODE (decl) == TYPE_DECL);
946 /* For [temp.friend/6] when FRIEND is an ordinary member function
947 of a template class, we want to check if DECL is a specialization
948 if this. */
949 if (TREE_CODE (friend) == FUNCTION_DECL
950 && DECL_TEMPLATE_INFO (friend)
951 && !DECL_USE_TEMPLATE (friend))
953 /* We want a TEMPLATE_DECL for `is_specialization_of'. */
954 friend = DECL_TI_TEMPLATE (friend);
955 need_template = false;
957 else if (TREE_CODE (friend) == TEMPLATE_DECL
958 && !PRIMARY_TEMPLATE_P (friend))
959 need_template = false;
961 /* There is nothing to do if this is not a template friend. */
962 if (TREE_CODE (friend) != TEMPLATE_DECL)
963 return false;
965 if (is_specialization_of (decl, friend))
966 return true;
968 /* [temp.friend/6]
969 A member of a class template may be declared to be a friend of a
970 non-template class. In this case, the corresponding member of
971 every specialization of the class template is a friend of the
972 class granting friendship.
974 For example, given a template friend declaration
976 template <class T> friend void A<T>::f();
978 the member function below is considered a friend
980 template <> struct A<int> {
981 void f();
984 For this type of template friend, TEMPLATE_DEPTH below will be
985 nonzero. To determine if DECL is a friend of FRIEND, we first
986 check if the enclosing class is a specialization of another. */
988 template_depth = template_class_depth (DECL_CONTEXT (friend));
989 if (template_depth
990 && DECL_CLASS_SCOPE_P (decl)
991 && is_specialization_of (TYPE_NAME (DECL_CONTEXT (decl)),
992 CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (friend))))
994 /* Next, we check the members themselves. In order to handle
995 a few tricky cases, such as when FRIEND's are
997 template <class T> friend void A<T>::g(T t);
998 template <class T> template <T t> friend void A<T>::h();
1000 and DECL's are
1002 void A<int>::g(int);
1003 template <int> void A<int>::h();
1005 we need to figure out ARGS, the template arguments from
1006 the context of DECL. This is required for template substitution
1007 of `T' in the function parameter of `g' and template parameter
1008 of `h' in the above examples. Here ARGS corresponds to `int'. */
1010 tree context = DECL_CONTEXT (decl);
1011 tree args = NULL_TREE;
1012 int current_depth = 0;
1014 while (current_depth < template_depth)
1016 if (CLASSTYPE_TEMPLATE_INFO (context))
1018 if (current_depth == 0)
1019 args = TYPE_TI_ARGS (context);
1020 else
1021 args = add_to_template_args (TYPE_TI_ARGS (context), args);
1022 current_depth++;
1024 context = TYPE_CONTEXT (context);
1027 if (TREE_CODE (decl) == FUNCTION_DECL)
1029 bool is_template;
1030 tree friend_type;
1031 tree decl_type;
1032 tree friend_args_type;
1033 tree decl_args_type;
1035 /* Make sure that both DECL and FRIEND are templates or
1036 non-templates. */
1037 is_template = DECL_TEMPLATE_INFO (decl)
1038 && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl));
1039 if (need_template ^ is_template)
1040 return false;
1041 else if (is_template)
1043 /* If both are templates, check template parameter list. */
1044 tree friend_parms
1045 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend),
1046 args, tf_none);
1047 if (!comp_template_parms
1048 (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (decl)),
1049 friend_parms))
1050 return false;
1052 decl_type = TREE_TYPE (DECL_TI_TEMPLATE (decl));
1054 else
1055 decl_type = TREE_TYPE (decl);
1057 friend_type = tsubst_function_type (TREE_TYPE (friend), args,
1058 tf_none, NULL_TREE);
1059 if (friend_type == error_mark_node)
1060 return false;
1062 /* Check if return types match. */
1063 if (!same_type_p (TREE_TYPE (decl_type), TREE_TYPE (friend_type)))
1064 return false;
1066 /* Check if function parameter types match, ignoring the
1067 `this' parameter. */
1068 friend_args_type = TYPE_ARG_TYPES (friend_type);
1069 decl_args_type = TYPE_ARG_TYPES (decl_type);
1070 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (friend))
1071 friend_args_type = TREE_CHAIN (friend_args_type);
1072 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1073 decl_args_type = TREE_CHAIN (decl_args_type);
1075 return compparms (decl_args_type, friend_args_type);
1077 else
1079 /* DECL is a TYPE_DECL */
1080 bool is_template;
1081 tree decl_type = TREE_TYPE (decl);
1083 /* Make sure that both DECL and FRIEND are templates or
1084 non-templates. */
1085 is_template
1086 = CLASSTYPE_TEMPLATE_INFO (decl_type)
1087 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (decl_type));
1089 if (need_template ^ is_template)
1090 return false;
1091 else if (is_template)
1093 tree friend_parms;
1094 /* If both are templates, check the name of the two
1095 TEMPLATE_DECL's first because is_friend didn't. */
1096 if (DECL_NAME (CLASSTYPE_TI_TEMPLATE (decl_type))
1097 != DECL_NAME (friend))
1098 return false;
1100 /* Now check template parameter list. */
1101 friend_parms
1102 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend),
1103 args, tf_none);
1104 return comp_template_parms
1105 (DECL_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (decl_type)),
1106 friend_parms);
1108 else
1109 return (DECL_NAME (decl)
1110 == DECL_NAME (friend));
1113 return false;
1116 /* Register the specialization SPEC as a specialization of TMPL with
1117 the indicated ARGS. Returns SPEC, or an equivalent prior
1118 declaration, if available. */
1120 static tree
1121 register_specialization (tree spec, tree tmpl, tree args)
1123 tree fn;
1125 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
1127 if (TREE_CODE (spec) == FUNCTION_DECL
1128 && uses_template_parms (DECL_TI_ARGS (spec)))
1129 /* This is the FUNCTION_DECL for a partial instantiation. Don't
1130 register it; we want the corresponding TEMPLATE_DECL instead.
1131 We use `uses_template_parms (DECL_TI_ARGS (spec))' rather than
1132 the more obvious `uses_template_parms (spec)' to avoid problems
1133 with default function arguments. In particular, given
1134 something like this:
1136 template <class T> void f(T t1, T t = T())
1138 the default argument expression is not substituted for in an
1139 instantiation unless and until it is actually needed. */
1140 return spec;
1142 fn = retrieve_specialization (tmpl, args,
1143 /*class_specializations_p=*/false);
1144 /* We can sometimes try to re-register a specialization that we've
1145 already got. In particular, regenerate_decl_from_template calls
1146 duplicate_decls which will update the specialization list. But,
1147 we'll still get called again here anyhow. It's more convenient
1148 to simply allow this than to try to prevent it. */
1149 if (fn == spec)
1150 return spec;
1151 else if (fn && DECL_TEMPLATE_SPECIALIZATION (spec))
1153 if (DECL_TEMPLATE_INSTANTIATION (fn))
1155 if (TREE_USED (fn)
1156 || DECL_EXPLICIT_INSTANTIATION (fn))
1158 error ("specialization of %qD after instantiation",
1159 fn);
1160 return spec;
1162 else
1164 /* This situation should occur only if the first
1165 specialization is an implicit instantiation, the
1166 second is an explicit specialization, and the
1167 implicit instantiation has not yet been used. That
1168 situation can occur if we have implicitly
1169 instantiated a member function and then specialized
1170 it later.
1172 We can also wind up here if a friend declaration that
1173 looked like an instantiation turns out to be a
1174 specialization:
1176 template <class T> void foo(T);
1177 class S { friend void foo<>(int) };
1178 template <> void foo(int);
1180 We transform the existing DECL in place so that any
1181 pointers to it become pointers to the updated
1182 declaration.
1184 If there was a definition for the template, but not
1185 for the specialization, we want this to look as if
1186 there were no definition, and vice versa. */
1187 DECL_INITIAL (fn) = NULL_TREE;
1188 duplicate_decls (spec, fn);
1190 return fn;
1193 else if (DECL_TEMPLATE_SPECIALIZATION (fn))
1195 if (!duplicate_decls (spec, fn) && DECL_INITIAL (spec))
1196 /* Dup decl failed, but this is a new definition. Set the
1197 line number so any errors match this new
1198 definition. */
1199 DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (spec);
1201 return fn;
1205 /* A specialization must be declared in the same namespace as the
1206 template it is specializing. */
1207 if (DECL_TEMPLATE_SPECIALIZATION (spec)
1208 && !check_specialization_namespace (tmpl))
1209 DECL_CONTEXT (spec) = decl_namespace_context (tmpl);
1211 if (!optimize_specialization_lookup_p (tmpl))
1212 DECL_TEMPLATE_SPECIALIZATIONS (tmpl)
1213 = tree_cons (args, spec, DECL_TEMPLATE_SPECIALIZATIONS (tmpl));
1215 return spec;
1218 /* Unregister the specialization SPEC as a specialization of TMPL.
1219 Replace it with NEW_SPEC, if NEW_SPEC is non-NULL. Returns true
1220 if the SPEC was listed as a specialization of TMPL. */
1222 bool
1223 reregister_specialization (tree spec, tree tmpl, tree new_spec)
1225 tree* s;
1227 for (s = &DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
1228 *s != NULL_TREE;
1229 s = &TREE_CHAIN (*s))
1230 if (TREE_VALUE (*s) == spec)
1232 if (!new_spec)
1233 *s = TREE_CHAIN (*s);
1234 else
1235 TREE_VALUE (*s) = new_spec;
1236 return 1;
1239 return 0;
1242 /* Compare an entry in the local specializations hash table P1 (which
1243 is really a pointer to a TREE_LIST) with P2 (which is really a
1244 DECL). */
1246 static int
1247 eq_local_specializations (const void *p1, const void *p2)
1249 return TREE_VALUE ((tree) p1) == (tree) p2;
1252 /* Hash P1, an entry in the local specializations table. */
1254 static hashval_t
1255 hash_local_specialization (const void* p1)
1257 return htab_hash_pointer (TREE_VALUE ((tree) p1));
1260 /* Like register_specialization, but for local declarations. We are
1261 registering SPEC, an instantiation of TMPL. */
1263 static void
1264 register_local_specialization (tree spec, tree tmpl)
1266 void **slot;
1268 slot = htab_find_slot_with_hash (local_specializations, tmpl,
1269 htab_hash_pointer (tmpl), INSERT);
1270 *slot = build_tree_list (spec, tmpl);
1273 /* Print the list of candidate FNS in an error message. */
1275 void
1276 print_candidates (tree fns)
1278 tree fn;
1280 const char *str = "candidates are:";
1282 for (fn = fns; fn != NULL_TREE; fn = TREE_CHAIN (fn))
1284 tree f;
1286 for (f = TREE_VALUE (fn); f; f = OVL_NEXT (f))
1287 error ("%s %+#D", str, OVL_CURRENT (f));
1288 str = " ";
1292 /* Returns the template (one of the functions given by TEMPLATE_ID)
1293 which can be specialized to match the indicated DECL with the
1294 explicit template args given in TEMPLATE_ID. The DECL may be
1295 NULL_TREE if none is available. In that case, the functions in
1296 TEMPLATE_ID are non-members.
1298 If NEED_MEMBER_TEMPLATE is nonzero the function is known to be a
1299 specialization of a member template.
1301 The TEMPLATE_COUNT is the number of references to qualifying
1302 template classes that appeared in the name of the function. See
1303 check_explicit_specialization for a more accurate description.
1305 The template args (those explicitly specified and those deduced)
1306 are output in a newly created vector *TARGS_OUT.
1308 If it is impossible to determine the result, an error message is
1309 issued. The error_mark_node is returned to indicate failure. */
1311 static tree
1312 determine_specialization (tree template_id,
1313 tree decl,
1314 tree* targs_out,
1315 int need_member_template,
1316 int template_count)
1318 tree fns;
1319 tree targs;
1320 tree explicit_targs;
1321 tree candidates = NULL_TREE;
1322 tree templates = NULL_TREE;
1323 int header_count;
1324 struct cp_binding_level *b;
1326 *targs_out = NULL_TREE;
1328 if (template_id == error_mark_node)
1329 return error_mark_node;
1331 fns = TREE_OPERAND (template_id, 0);
1332 explicit_targs = TREE_OPERAND (template_id, 1);
1334 if (fns == error_mark_node)
1335 return error_mark_node;
1337 /* Check for baselinks. */
1338 if (BASELINK_P (fns))
1339 fns = BASELINK_FUNCTIONS (fns);
1341 if (!is_overloaded_fn (fns))
1343 error ("%qD is not a function template", fns);
1344 return error_mark_node;
1347 /* Count the number of template headers specified for this
1348 specialization. */
1349 header_count = 0;
1350 for (b = current_binding_level;
1351 b->kind == sk_template_parms;
1352 b = b->level_chain)
1353 ++header_count;
1355 for (; fns; fns = OVL_NEXT (fns))
1357 tree fn = OVL_CURRENT (fns);
1359 if (TREE_CODE (fn) == TEMPLATE_DECL)
1361 tree decl_arg_types;
1362 tree fn_arg_types;
1364 /* DECL might be a specialization of FN. */
1366 /* Adjust the type of DECL in case FN is a static member. */
1367 decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1368 if (DECL_STATIC_FUNCTION_P (fn)
1369 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1370 decl_arg_types = TREE_CHAIN (decl_arg_types);
1372 /* Check that the number of function parameters matches.
1373 For example,
1374 template <class T> void f(int i = 0);
1375 template <> void f<int>();
1376 The specialization f<int> is invalid but is not caught
1377 by get_bindings below. */
1379 fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
1380 if (list_length (fn_arg_types) != list_length (decl_arg_types))
1381 continue;
1383 /* For a non-static member function, we need to make sure that
1384 the const qualification is the same. This can be done by
1385 checking the 'this' in the argument list. */
1386 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1387 && !same_type_p (TREE_VALUE (fn_arg_types),
1388 TREE_VALUE (decl_arg_types)))
1389 continue;
1391 /* In case of explicit specialization, we need to check if
1392 the number of template headers appearing in the specialization
1393 is correct. This is usually done in check_explicit_specialization,
1394 but the check done there cannot be exhaustive when specializing
1395 member functions. Consider the following code:
1397 template <> void A<int>::f(int);
1398 template <> template <> void A<int>::f(int);
1400 Assuming that A<int> is not itself an explicit specialization
1401 already, the first line specializes "f" which is a non-template
1402 member function, whilst the second line specializes "f" which
1403 is a template member function. So both lines are syntactically
1404 correct, and check_explicit_specialization does not reject
1405 them.
1407 Here, we can do better, as we are matching the specialization
1408 against the declarations. We count the number of template
1409 headers, and we check if they match TEMPLATE_COUNT + 1
1410 (TEMPLATE_COUNT is the number of qualifying template classes,
1411 plus there must be another header for the member template
1412 itself).
1414 Notice that if header_count is zero, this is not a
1415 specialization but rather a template instantiation, so there
1416 is no check we can perform here. */
1417 if (header_count && header_count != template_count + 1)
1418 continue;
1420 /* Check that the number of template arguments at the
1421 innermost level for DECL is the same as for FN. */
1422 if (current_binding_level->kind == sk_template_parms
1423 && !current_binding_level->explicit_spec_p
1424 && (TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (fn))
1425 != TREE_VEC_LENGTH (TREE_VALUE (current_template_parms))))
1426 continue;
1428 /* See whether this function might be a specialization of this
1429 template. */
1430 targs = get_bindings (fn, decl, explicit_targs, /*check_ret=*/true);
1432 if (!targs)
1433 /* We cannot deduce template arguments that when used to
1434 specialize TMPL will produce DECL. */
1435 continue;
1437 /* Save this template, and the arguments deduced. */
1438 templates = tree_cons (targs, fn, templates);
1440 else if (need_member_template)
1441 /* FN is an ordinary member function, and we need a
1442 specialization of a member template. */
1444 else if (TREE_CODE (fn) != FUNCTION_DECL)
1445 /* We can get IDENTIFIER_NODEs here in certain erroneous
1446 cases. */
1448 else if (!DECL_FUNCTION_MEMBER_P (fn))
1449 /* This is just an ordinary non-member function. Nothing can
1450 be a specialization of that. */
1452 else if (DECL_ARTIFICIAL (fn))
1453 /* Cannot specialize functions that are created implicitly. */
1455 else
1457 tree decl_arg_types;
1459 /* This is an ordinary member function. However, since
1460 we're here, we can assume it's enclosing class is a
1461 template class. For example,
1463 template <typename T> struct S { void f(); };
1464 template <> void S<int>::f() {}
1466 Here, S<int>::f is a non-template, but S<int> is a
1467 template class. If FN has the same type as DECL, we
1468 might be in business. */
1470 if (!DECL_TEMPLATE_INFO (fn))
1471 /* Its enclosing class is an explicit specialization
1472 of a template class. This is not a candidate. */
1473 continue;
1475 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
1476 TREE_TYPE (TREE_TYPE (fn))))
1477 /* The return types differ. */
1478 continue;
1480 /* Adjust the type of DECL in case FN is a static member. */
1481 decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1482 if (DECL_STATIC_FUNCTION_P (fn)
1483 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1484 decl_arg_types = TREE_CHAIN (decl_arg_types);
1486 if (compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
1487 decl_arg_types))
1488 /* They match! */
1489 candidates = tree_cons (NULL_TREE, fn, candidates);
1493 if (templates && TREE_CHAIN (templates))
1495 /* We have:
1497 [temp.expl.spec]
1499 It is possible for a specialization with a given function
1500 signature to be instantiated from more than one function
1501 template. In such cases, explicit specification of the
1502 template arguments must be used to uniquely identify the
1503 function template specialization being specialized.
1505 Note that here, there's no suggestion that we're supposed to
1506 determine which of the candidate templates is most
1507 specialized. However, we, also have:
1509 [temp.func.order]
1511 Partial ordering of overloaded function template
1512 declarations is used in the following contexts to select
1513 the function template to which a function template
1514 specialization refers:
1516 -- when an explicit specialization refers to a function
1517 template.
1519 So, we do use the partial ordering rules, at least for now.
1520 This extension can only serve to make invalid programs valid,
1521 so it's safe. And, there is strong anecdotal evidence that
1522 the committee intended the partial ordering rules to apply;
1523 the EDG front-end has that behavior, and John Spicer claims
1524 that the committee simply forgot to delete the wording in
1525 [temp.expl.spec]. */
1526 tree tmpl = most_specialized (templates, decl, explicit_targs);
1527 if (tmpl && tmpl != error_mark_node)
1529 targs = get_bindings (tmpl, decl, explicit_targs, /*check_ret=*/true);
1530 templates = tree_cons (targs, tmpl, NULL_TREE);
1534 if (templates == NULL_TREE && candidates == NULL_TREE)
1536 error ("template-id %qD for %q+D does not match any template "
1537 "declaration", template_id, decl);
1538 return error_mark_node;
1540 else if ((templates && TREE_CHAIN (templates))
1541 || (candidates && TREE_CHAIN (candidates))
1542 || (templates && candidates))
1544 error ("ambiguous template specialization %qD for %q+D",
1545 template_id, decl);
1546 chainon (candidates, templates);
1547 print_candidates (candidates);
1548 return error_mark_node;
1551 /* We have one, and exactly one, match. */
1552 if (candidates)
1554 /* It was a specialization of an ordinary member function in a
1555 template class. */
1556 *targs_out = copy_node (DECL_TI_ARGS (TREE_VALUE (candidates)));
1557 return DECL_TI_TEMPLATE (TREE_VALUE (candidates));
1560 /* It was a specialization of a template. */
1561 targs = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (TREE_VALUE (templates)));
1562 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (targs))
1564 *targs_out = copy_node (targs);
1565 SET_TMPL_ARGS_LEVEL (*targs_out,
1566 TMPL_ARGS_DEPTH (*targs_out),
1567 TREE_PURPOSE (templates));
1569 else
1570 *targs_out = TREE_PURPOSE (templates);
1571 return TREE_VALUE (templates);
1574 /* Returns a chain of parameter types, exactly like the SPEC_TYPES,
1575 but with the default argument values filled in from those in the
1576 TMPL_TYPES. */
1578 static tree
1579 copy_default_args_to_explicit_spec_1 (tree spec_types,
1580 tree tmpl_types)
1582 tree new_spec_types;
1584 if (!spec_types)
1585 return NULL_TREE;
1587 if (spec_types == void_list_node)
1588 return void_list_node;
1590 /* Substitute into the rest of the list. */
1591 new_spec_types =
1592 copy_default_args_to_explicit_spec_1 (TREE_CHAIN (spec_types),
1593 TREE_CHAIN (tmpl_types));
1595 /* Add the default argument for this parameter. */
1596 return hash_tree_cons (TREE_PURPOSE (tmpl_types),
1597 TREE_VALUE (spec_types),
1598 new_spec_types);
1601 /* DECL is an explicit specialization. Replicate default arguments
1602 from the template it specializes. (That way, code like:
1604 template <class T> void f(T = 3);
1605 template <> void f(double);
1606 void g () { f (); }
1608 works, as required.) An alternative approach would be to look up
1609 the correct default arguments at the call-site, but this approach
1610 is consistent with how implicit instantiations are handled. */
1612 static void
1613 copy_default_args_to_explicit_spec (tree decl)
1615 tree tmpl;
1616 tree spec_types;
1617 tree tmpl_types;
1618 tree new_spec_types;
1619 tree old_type;
1620 tree new_type;
1621 tree t;
1622 tree object_type = NULL_TREE;
1623 tree in_charge = NULL_TREE;
1624 tree vtt = NULL_TREE;
1626 /* See if there's anything we need to do. */
1627 tmpl = DECL_TI_TEMPLATE (decl);
1628 tmpl_types = TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (tmpl)));
1629 for (t = tmpl_types; t; t = TREE_CHAIN (t))
1630 if (TREE_PURPOSE (t))
1631 break;
1632 if (!t)
1633 return;
1635 old_type = TREE_TYPE (decl);
1636 spec_types = TYPE_ARG_TYPES (old_type);
1638 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1640 /* Remove the this pointer, but remember the object's type for
1641 CV quals. */
1642 object_type = TREE_TYPE (TREE_VALUE (spec_types));
1643 spec_types = TREE_CHAIN (spec_types);
1644 tmpl_types = TREE_CHAIN (tmpl_types);
1646 if (DECL_HAS_IN_CHARGE_PARM_P (decl))
1648 /* DECL may contain more parameters than TMPL due to the extra
1649 in-charge parameter in constructors and destructors. */
1650 in_charge = spec_types;
1651 spec_types = TREE_CHAIN (spec_types);
1653 if (DECL_HAS_VTT_PARM_P (decl))
1655 vtt = spec_types;
1656 spec_types = TREE_CHAIN (spec_types);
1660 /* Compute the merged default arguments. */
1661 new_spec_types =
1662 copy_default_args_to_explicit_spec_1 (spec_types, tmpl_types);
1664 /* Compute the new FUNCTION_TYPE. */
1665 if (object_type)
1667 if (vtt)
1668 new_spec_types = hash_tree_cons (TREE_PURPOSE (vtt),
1669 TREE_VALUE (vtt),
1670 new_spec_types);
1672 if (in_charge)
1673 /* Put the in-charge parameter back. */
1674 new_spec_types = hash_tree_cons (TREE_PURPOSE (in_charge),
1675 TREE_VALUE (in_charge),
1676 new_spec_types);
1678 new_type = build_method_type_directly (object_type,
1679 TREE_TYPE (old_type),
1680 new_spec_types);
1682 else
1683 new_type = build_function_type (TREE_TYPE (old_type),
1684 new_spec_types);
1685 new_type = cp_build_type_attribute_variant (new_type,
1686 TYPE_ATTRIBUTES (old_type));
1687 new_type = build_exception_variant (new_type,
1688 TYPE_RAISES_EXCEPTIONS (old_type));
1689 TREE_TYPE (decl) = new_type;
1692 /* Check to see if the function just declared, as indicated in
1693 DECLARATOR, and in DECL, is a specialization of a function
1694 template. We may also discover that the declaration is an explicit
1695 instantiation at this point.
1697 Returns DECL, or an equivalent declaration that should be used
1698 instead if all goes well. Issues an error message if something is
1699 amiss. Returns error_mark_node if the error is not easily
1700 recoverable.
1702 FLAGS is a bitmask consisting of the following flags:
1704 2: The function has a definition.
1705 4: The function is a friend.
1707 The TEMPLATE_COUNT is the number of references to qualifying
1708 template classes that appeared in the name of the function. For
1709 example, in
1711 template <class T> struct S { void f(); };
1712 void S<int>::f();
1714 the TEMPLATE_COUNT would be 1. However, explicitly specialized
1715 classes are not counted in the TEMPLATE_COUNT, so that in
1717 template <class T> struct S {};
1718 template <> struct S<int> { void f(); }
1719 template <> void S<int>::f();
1721 the TEMPLATE_COUNT would be 0. (Note that this declaration is
1722 invalid; there should be no template <>.)
1724 If the function is a specialization, it is marked as such via
1725 DECL_TEMPLATE_SPECIALIZATION. Furthermore, its DECL_TEMPLATE_INFO
1726 is set up correctly, and it is added to the list of specializations
1727 for that template. */
1729 tree
1730 check_explicit_specialization (tree declarator,
1731 tree decl,
1732 int template_count,
1733 int flags)
1735 int have_def = flags & 2;
1736 int is_friend = flags & 4;
1737 int specialization = 0;
1738 int explicit_instantiation = 0;
1739 int member_specialization = 0;
1740 tree ctype = DECL_CLASS_CONTEXT (decl);
1741 tree dname = DECL_NAME (decl);
1742 tmpl_spec_kind tsk;
1744 if (is_friend)
1746 if (!processing_specialization)
1747 tsk = tsk_none;
1748 else
1749 tsk = tsk_excessive_parms;
1751 else
1752 tsk = current_tmpl_spec_kind (template_count);
1754 switch (tsk)
1756 case tsk_none:
1757 if (processing_specialization)
1759 specialization = 1;
1760 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
1762 else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
1764 if (is_friend)
1765 /* This could be something like:
1767 template <class T> void f(T);
1768 class S { friend void f<>(int); } */
1769 specialization = 1;
1770 else
1772 /* This case handles bogus declarations like template <>
1773 template <class T> void f<int>(); */
1775 error ("template-id %qD in declaration of primary template",
1776 declarator);
1777 return decl;
1780 break;
1782 case tsk_invalid_member_spec:
1783 /* The error has already been reported in
1784 check_specialization_scope. */
1785 return error_mark_node;
1787 case tsk_invalid_expl_inst:
1788 error ("template parameter list used in explicit instantiation");
1790 /* Fall through. */
1792 case tsk_expl_inst:
1793 if (have_def)
1794 error ("definition provided for explicit instantiation");
1796 explicit_instantiation = 1;
1797 break;
1799 case tsk_excessive_parms:
1800 case tsk_insufficient_parms:
1801 if (tsk == tsk_excessive_parms)
1802 error ("too many template parameter lists in declaration of %qD",
1803 decl);
1804 else if (template_header_count)
1805 error("too few template parameter lists in declaration of %qD", decl);
1806 else
1807 error("explicit specialization of %qD must be introduced by "
1808 "%<template <>%>", decl);
1810 /* Fall through. */
1811 case tsk_expl_spec:
1812 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
1813 if (ctype)
1814 member_specialization = 1;
1815 else
1816 specialization = 1;
1817 break;
1819 case tsk_template:
1820 if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
1822 /* This case handles bogus declarations like template <>
1823 template <class T> void f<int>(); */
1825 if (uses_template_parms (declarator))
1826 error ("function template partial specialization %qD "
1827 "is not allowed", declarator);
1828 else
1829 error ("template-id %qD in declaration of primary template",
1830 declarator);
1831 return decl;
1834 if (ctype && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype))
1835 /* This is a specialization of a member template, without
1836 specialization the containing class. Something like:
1838 template <class T> struct S {
1839 template <class U> void f (U);
1841 template <> template <class U> void S<int>::f(U) {}
1843 That's a specialization -- but of the entire template. */
1844 specialization = 1;
1845 break;
1847 default:
1848 gcc_unreachable ();
1851 if (specialization || member_specialization)
1853 tree t = TYPE_ARG_TYPES (TREE_TYPE (decl));
1854 for (; t; t = TREE_CHAIN (t))
1855 if (TREE_PURPOSE (t))
1857 pedwarn
1858 ("default argument specified in explicit specialization");
1859 break;
1861 if (current_lang_name == lang_name_c)
1862 error ("template specialization with C linkage");
1865 if (specialization || member_specialization || explicit_instantiation)
1867 tree tmpl = NULL_TREE;
1868 tree targs = NULL_TREE;
1870 /* Make sure that the declarator is a TEMPLATE_ID_EXPR. */
1871 if (TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
1873 tree fns;
1875 gcc_assert (TREE_CODE (declarator) == IDENTIFIER_NODE);
1876 if (ctype)
1877 fns = dname;
1878 else
1880 /* If there is no class context, the explicit instantiation
1881 must be at namespace scope. */
1882 gcc_assert (DECL_NAMESPACE_SCOPE_P (decl));
1884 /* Find the namespace binding, using the declaration
1885 context. */
1886 fns = namespace_binding (dname, CP_DECL_CONTEXT (decl));
1887 if (!fns || !is_overloaded_fn (fns))
1889 error ("%qD is not a template function", dname);
1890 fns = error_mark_node;
1894 declarator = lookup_template_function (fns, NULL_TREE);
1897 if (declarator == error_mark_node)
1898 return error_mark_node;
1900 if (ctype != NULL_TREE && TYPE_BEING_DEFINED (ctype))
1902 if (!explicit_instantiation)
1903 /* A specialization in class scope. This is invalid,
1904 but the error will already have been flagged by
1905 check_specialization_scope. */
1906 return error_mark_node;
1907 else
1909 /* It's not valid to write an explicit instantiation in
1910 class scope, e.g.:
1912 class C { template void f(); }
1914 This case is caught by the parser. However, on
1915 something like:
1917 template class C { void f(); };
1919 (which is invalid) we can get here. The error will be
1920 issued later. */
1924 return decl;
1926 else if (ctype != NULL_TREE
1927 && (TREE_CODE (TREE_OPERAND (declarator, 0)) ==
1928 IDENTIFIER_NODE))
1930 /* Find the list of functions in ctype that have the same
1931 name as the declared function. */
1932 tree name = TREE_OPERAND (declarator, 0);
1933 tree fns = NULL_TREE;
1934 int idx;
1936 if (constructor_name_p (name, ctype))
1938 int is_constructor = DECL_CONSTRUCTOR_P (decl);
1940 if (is_constructor ? !TYPE_HAS_CONSTRUCTOR (ctype)
1941 : !CLASSTYPE_DESTRUCTORS (ctype))
1943 /* From [temp.expl.spec]:
1945 If such an explicit specialization for the member
1946 of a class template names an implicitly-declared
1947 special member function (clause _special_), the
1948 program is ill-formed.
1950 Similar language is found in [temp.explicit]. */
1951 error ("specialization of implicitly-declared special member function");
1952 return error_mark_node;
1955 name = is_constructor ? ctor_identifier : dtor_identifier;
1958 if (!DECL_CONV_FN_P (decl))
1960 idx = lookup_fnfields_1 (ctype, name);
1961 if (idx >= 0)
1962 fns = VEC_index (tree, CLASSTYPE_METHOD_VEC (ctype), idx);
1964 else
1966 VEC(tree,gc) *methods;
1967 tree ovl;
1969 /* For a type-conversion operator, we cannot do a
1970 name-based lookup. We might be looking for `operator
1971 int' which will be a specialization of `operator T'.
1972 So, we find *all* the conversion operators, and then
1973 select from them. */
1974 fns = NULL_TREE;
1976 methods = CLASSTYPE_METHOD_VEC (ctype);
1977 if (methods)
1978 for (idx = CLASSTYPE_FIRST_CONVERSION_SLOT;
1979 VEC_iterate (tree, methods, idx, ovl);
1980 ++idx)
1982 if (!DECL_CONV_FN_P (OVL_CURRENT (ovl)))
1983 /* There are no more conversion functions. */
1984 break;
1986 /* Glue all these conversion functions together
1987 with those we already have. */
1988 for (; ovl; ovl = OVL_NEXT (ovl))
1989 fns = ovl_cons (OVL_CURRENT (ovl), fns);
1993 if (fns == NULL_TREE)
1995 error ("no member function %qD declared in %qT", name, ctype);
1996 return error_mark_node;
1998 else
1999 TREE_OPERAND (declarator, 0) = fns;
2002 /* Figure out what exactly is being specialized at this point.
2003 Note that for an explicit instantiation, even one for a
2004 member function, we cannot tell apriori whether the
2005 instantiation is for a member template, or just a member
2006 function of a template class. Even if a member template is
2007 being instantiated, the member template arguments may be
2008 elided if they can be deduced from the rest of the
2009 declaration. */
2010 tmpl = determine_specialization (declarator, decl,
2011 &targs,
2012 member_specialization,
2013 template_count);
2015 if (!tmpl || tmpl == error_mark_node)
2016 /* We couldn't figure out what this declaration was
2017 specializing. */
2018 return error_mark_node;
2019 else
2021 tree gen_tmpl = most_general_template (tmpl);
2023 if (explicit_instantiation)
2025 /* We don't set DECL_EXPLICIT_INSTANTIATION here; that
2026 is done by do_decl_instantiation later. */
2028 int arg_depth = TMPL_ARGS_DEPTH (targs);
2029 int parm_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
2031 if (arg_depth > parm_depth)
2033 /* If TMPL is not the most general template (for
2034 example, if TMPL is a friend template that is
2035 injected into namespace scope), then there will
2036 be too many levels of TARGS. Remove some of them
2037 here. */
2038 int i;
2039 tree new_targs;
2041 new_targs = make_tree_vec (parm_depth);
2042 for (i = arg_depth - parm_depth; i < arg_depth; ++i)
2043 TREE_VEC_ELT (new_targs, i - (arg_depth - parm_depth))
2044 = TREE_VEC_ELT (targs, i);
2045 targs = new_targs;
2048 return instantiate_template (tmpl, targs, tf_error);
2051 /* If we thought that the DECL was a member function, but it
2052 turns out to be specializing a static member function,
2053 make DECL a static member function as well. */
2054 if (DECL_STATIC_FUNCTION_P (tmpl)
2055 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2056 revert_static_member_fn (decl);
2058 /* If this is a specialization of a member template of a
2059 template class. In we want to return the TEMPLATE_DECL,
2060 not the specialization of it. */
2061 if (tsk == tsk_template)
2063 SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
2064 DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl)) = NULL_TREE;
2065 if (have_def)
2067 DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
2068 DECL_SOURCE_LOCATION (DECL_TEMPLATE_RESULT (tmpl))
2069 = DECL_SOURCE_LOCATION (decl);
2070 /* We want to use the argument list specified in the
2071 definition, not in the original declaration. */
2072 DECL_ARGUMENTS (DECL_TEMPLATE_RESULT (tmpl))
2073 = DECL_ARGUMENTS (decl);
2075 return tmpl;
2078 /* Set up the DECL_TEMPLATE_INFO for DECL. */
2079 DECL_TEMPLATE_INFO (decl) = tree_cons (tmpl, targs, NULL_TREE);
2081 /* Inherit default function arguments from the template
2082 DECL is specializing. */
2083 copy_default_args_to_explicit_spec (decl);
2085 /* This specialization has the same protection as the
2086 template it specializes. */
2087 TREE_PRIVATE (decl) = TREE_PRIVATE (gen_tmpl);
2088 TREE_PROTECTED (decl) = TREE_PROTECTED (gen_tmpl);
2090 if (is_friend && !have_def)
2091 /* This is not really a declaration of a specialization.
2092 It's just the name of an instantiation. But, it's not
2093 a request for an instantiation, either. */
2094 SET_DECL_IMPLICIT_INSTANTIATION (decl);
2095 else if (DECL_CONSTRUCTOR_P (decl) || DECL_DESTRUCTOR_P (decl))
2096 /* This is indeed a specialization. In case of constructors
2097 and destructors, we need in-charge and not-in-charge
2098 versions in V3 ABI. */
2099 clone_function_decl (decl, /*update_method_vec_p=*/0);
2101 /* Register this specialization so that we can find it
2102 again. */
2103 decl = register_specialization (decl, gen_tmpl, targs);
2107 return decl;
2110 /* Returns 1 iff PARMS1 and PARMS2 are identical sets of template
2111 parameters. These are represented in the same format used for
2112 DECL_TEMPLATE_PARMS. */
2115 comp_template_parms (tree parms1, tree parms2)
2117 tree p1;
2118 tree p2;
2120 if (parms1 == parms2)
2121 return 1;
2123 for (p1 = parms1, p2 = parms2;
2124 p1 != NULL_TREE && p2 != NULL_TREE;
2125 p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2))
2127 tree t1 = TREE_VALUE (p1);
2128 tree t2 = TREE_VALUE (p2);
2129 int i;
2131 gcc_assert (TREE_CODE (t1) == TREE_VEC);
2132 gcc_assert (TREE_CODE (t2) == TREE_VEC);
2134 if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
2135 return 0;
2137 for (i = 0; i < TREE_VEC_LENGTH (t2); ++i)
2139 tree parm1 = TREE_VALUE (TREE_VEC_ELT (t1, i));
2140 tree parm2 = TREE_VALUE (TREE_VEC_ELT (t2, i));
2142 if (TREE_CODE (parm1) != TREE_CODE (parm2))
2143 return 0;
2145 if (TREE_CODE (parm1) == TEMPLATE_TYPE_PARM)
2146 continue;
2147 else if (!same_type_p (TREE_TYPE (parm1), TREE_TYPE (parm2)))
2148 return 0;
2152 if ((p1 != NULL_TREE) != (p2 != NULL_TREE))
2153 /* One set of parameters has more parameters lists than the
2154 other. */
2155 return 0;
2157 return 1;
2160 /* Complain if DECL shadows a template parameter.
2162 [temp.local]: A template-parameter shall not be redeclared within its
2163 scope (including nested scopes). */
2165 void
2166 check_template_shadow (tree decl)
2168 tree olddecl;
2170 /* If we're not in a template, we can't possibly shadow a template
2171 parameter. */
2172 if (!current_template_parms)
2173 return;
2175 /* Figure out what we're shadowing. */
2176 if (TREE_CODE (decl) == OVERLOAD)
2177 decl = OVL_CURRENT (decl);
2178 olddecl = innermost_non_namespace_value (DECL_NAME (decl));
2180 /* If there's no previous binding for this name, we're not shadowing
2181 anything, let alone a template parameter. */
2182 if (!olddecl)
2183 return;
2185 /* If we're not shadowing a template parameter, we're done. Note
2186 that OLDDECL might be an OVERLOAD (or perhaps even an
2187 ERROR_MARK), so we can't just blithely assume it to be a _DECL
2188 node. */
2189 if (!DECL_P (olddecl) || !DECL_TEMPLATE_PARM_P (olddecl))
2190 return;
2192 /* We check for decl != olddecl to avoid bogus errors for using a
2193 name inside a class. We check TPFI to avoid duplicate errors for
2194 inline member templates. */
2195 if (decl == olddecl
2196 || TEMPLATE_PARMS_FOR_INLINE (current_template_parms))
2197 return;
2199 error ("declaration of %q+#D", decl);
2200 error (" shadows template parm %q+#D", olddecl);
2203 /* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
2204 ORIG_LEVEL, DECL, and TYPE. */
2206 static tree
2207 build_template_parm_index (int index,
2208 int level,
2209 int orig_level,
2210 tree decl,
2211 tree type)
2213 tree t = make_node (TEMPLATE_PARM_INDEX);
2214 TEMPLATE_PARM_IDX (t) = index;
2215 TEMPLATE_PARM_LEVEL (t) = level;
2216 TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
2217 TEMPLATE_PARM_DECL (t) = decl;
2218 TREE_TYPE (t) = type;
2219 TREE_CONSTANT (t) = TREE_CONSTANT (decl);
2220 TREE_INVARIANT (t) = TREE_INVARIANT (decl);
2221 TREE_READONLY (t) = TREE_READONLY (decl);
2223 return t;
2226 /* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
2227 TEMPLATE_PARM_LEVEL has been decreased by LEVELS. If such a
2228 TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
2229 new one is created. */
2231 static tree
2232 reduce_template_parm_level (tree index, tree type, int levels)
2234 if (TEMPLATE_PARM_DESCENDANTS (index) == NULL_TREE
2235 || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
2236 != TEMPLATE_PARM_LEVEL (index) - levels))
2238 tree orig_decl = TEMPLATE_PARM_DECL (index);
2239 tree decl, t;
2241 decl = build_decl (TREE_CODE (orig_decl), DECL_NAME (orig_decl), type);
2242 TREE_CONSTANT (decl) = TREE_CONSTANT (orig_decl);
2243 TREE_INVARIANT (decl) = TREE_INVARIANT (orig_decl);
2244 TREE_READONLY (decl) = TREE_READONLY (orig_decl);
2245 DECL_ARTIFICIAL (decl) = 1;
2246 SET_DECL_TEMPLATE_PARM_P (decl);
2248 t = build_template_parm_index (TEMPLATE_PARM_IDX (index),
2249 TEMPLATE_PARM_LEVEL (index) - levels,
2250 TEMPLATE_PARM_ORIG_LEVEL (index),
2251 decl, type);
2252 TEMPLATE_PARM_DESCENDANTS (index) = t;
2254 /* Template template parameters need this. */
2255 if (TREE_CODE (decl) != CONST_DECL)
2256 DECL_TEMPLATE_PARMS (decl)
2257 = DECL_TEMPLATE_PARMS (TEMPLATE_PARM_DECL (index));
2260 return TEMPLATE_PARM_DESCENDANTS (index);
2263 /* Process information from new template parameter NEXT and append it to the
2264 LIST being built. This new parameter is a non-type parameter iff
2265 IS_NON_TYPE is true. */
2267 tree
2268 process_template_parm (tree list, tree next, bool is_non_type)
2270 tree parm;
2271 tree decl = 0;
2272 tree defval;
2273 int idx;
2275 parm = next;
2276 gcc_assert (TREE_CODE (parm) == TREE_LIST);
2277 defval = TREE_PURPOSE (parm);
2279 if (list)
2281 tree p = TREE_VALUE (tree_last (list));
2283 if (TREE_CODE (p) == TYPE_DECL || TREE_CODE (p) == TEMPLATE_DECL)
2284 idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
2285 else
2286 idx = TEMPLATE_PARM_IDX (DECL_INITIAL (p));
2287 ++idx;
2289 else
2290 idx = 0;
2292 if (is_non_type)
2294 parm = TREE_VALUE (parm);
2296 SET_DECL_TEMPLATE_PARM_P (parm);
2298 /* [temp.param]
2300 The top-level cv-qualifiers on the template-parameter are
2301 ignored when determining its type. */
2302 TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
2304 /* A template parameter is not modifiable. */
2305 TREE_CONSTANT (parm) = 1;
2306 TREE_INVARIANT (parm) = 1;
2307 TREE_READONLY (parm) = 1;
2308 if (invalid_nontype_parm_type_p (TREE_TYPE (parm), 1))
2309 TREE_TYPE (parm) = void_type_node;
2310 decl = build_decl (CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
2311 TREE_CONSTANT (decl) = 1;
2312 TREE_INVARIANT (decl) = 1;
2313 TREE_READONLY (decl) = 1;
2314 DECL_INITIAL (parm) = DECL_INITIAL (decl)
2315 = build_template_parm_index (idx, processing_template_decl,
2316 processing_template_decl,
2317 decl, TREE_TYPE (parm));
2319 else
2321 tree t;
2322 parm = TREE_VALUE (TREE_VALUE (parm));
2324 if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
2326 t = make_aggr_type (TEMPLATE_TEMPLATE_PARM);
2327 /* This is for distinguishing between real templates and template
2328 template parameters */
2329 TREE_TYPE (parm) = t;
2330 TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
2331 decl = parm;
2333 else
2335 t = make_aggr_type (TEMPLATE_TYPE_PARM);
2336 /* parm is either IDENTIFIER_NODE or NULL_TREE. */
2337 decl = build_decl (TYPE_DECL, parm, t);
2340 TYPE_NAME (t) = decl;
2341 TYPE_STUB_DECL (t) = decl;
2342 parm = decl;
2343 TEMPLATE_TYPE_PARM_INDEX (t)
2344 = build_template_parm_index (idx, processing_template_decl,
2345 processing_template_decl,
2346 decl, TREE_TYPE (parm));
2348 DECL_ARTIFICIAL (decl) = 1;
2349 SET_DECL_TEMPLATE_PARM_P (decl);
2350 pushdecl (decl);
2351 parm = build_tree_list (defval, parm);
2352 return chainon (list, parm);
2355 /* The end of a template parameter list has been reached. Process the
2356 tree list into a parameter vector, converting each parameter into a more
2357 useful form. Type parameters are saved as IDENTIFIER_NODEs, and others
2358 as PARM_DECLs. */
2360 tree
2361 end_template_parm_list (tree parms)
2363 int nparms;
2364 tree parm, next;
2365 tree saved_parmlist = make_tree_vec (list_length (parms));
2367 current_template_parms
2368 = tree_cons (size_int (processing_template_decl),
2369 saved_parmlist, current_template_parms);
2371 for (parm = parms, nparms = 0; parm; parm = next, nparms++)
2373 next = TREE_CHAIN (parm);
2374 TREE_VEC_ELT (saved_parmlist, nparms) = parm;
2375 TREE_CHAIN (parm) = NULL_TREE;
2378 --processing_template_parmlist;
2380 return saved_parmlist;
2383 /* end_template_decl is called after a template declaration is seen. */
2385 void
2386 end_template_decl (void)
2388 reset_specialization ();
2390 if (! processing_template_decl)
2391 return;
2393 /* This matches the pushlevel in begin_template_parm_list. */
2394 finish_scope ();
2396 --processing_template_decl;
2397 current_template_parms = TREE_CHAIN (current_template_parms);
2400 /* Given a template argument vector containing the template PARMS.
2401 The innermost PARMS are given first. */
2403 tree
2404 current_template_args (void)
2406 tree header;
2407 tree args = NULL_TREE;
2408 int length = TMPL_PARMS_DEPTH (current_template_parms);
2409 int l = length;
2411 /* If there is only one level of template parameters, we do not
2412 create a TREE_VEC of TREE_VECs. Instead, we return a single
2413 TREE_VEC containing the arguments. */
2414 if (length > 1)
2415 args = make_tree_vec (length);
2417 for (header = current_template_parms; header; header = TREE_CHAIN (header))
2419 tree a = copy_node (TREE_VALUE (header));
2420 int i;
2422 TREE_TYPE (a) = NULL_TREE;
2423 for (i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
2425 tree t = TREE_VEC_ELT (a, i);
2427 /* T will be a list if we are called from within a
2428 begin/end_template_parm_list pair, but a vector directly
2429 if within a begin/end_member_template_processing pair. */
2430 if (TREE_CODE (t) == TREE_LIST)
2432 t = TREE_VALUE (t);
2434 if (TREE_CODE (t) == TYPE_DECL
2435 || TREE_CODE (t) == TEMPLATE_DECL)
2436 t = TREE_TYPE (t);
2437 else
2438 t = DECL_INITIAL (t);
2439 TREE_VEC_ELT (a, i) = t;
2443 if (length > 1)
2444 TREE_VEC_ELT (args, --l) = a;
2445 else
2446 args = a;
2449 return args;
2452 /* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
2453 template PARMS. If MEMBER_TEMPLATE_P is true, the new template is
2454 a member template. Used by push_template_decl below. */
2456 static tree
2457 build_template_decl (tree decl, tree parms, bool member_template_p)
2459 tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
2460 DECL_TEMPLATE_PARMS (tmpl) = parms;
2461 DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
2462 DECL_MEMBER_TEMPLATE_P (tmpl) = member_template_p;
2463 if (DECL_LANG_SPECIFIC (decl))
2465 DECL_STATIC_FUNCTION_P (tmpl) = DECL_STATIC_FUNCTION_P (decl);
2466 DECL_CONSTRUCTOR_P (tmpl) = DECL_CONSTRUCTOR_P (decl);
2467 DECL_DESTRUCTOR_P (tmpl) = DECL_DESTRUCTOR_P (decl);
2468 DECL_NONCONVERTING_P (tmpl) = DECL_NONCONVERTING_P (decl);
2469 DECL_ASSIGNMENT_OPERATOR_P (tmpl) = DECL_ASSIGNMENT_OPERATOR_P (decl);
2470 if (DECL_OVERLOADED_OPERATOR_P (decl))
2471 SET_OVERLOADED_OPERATOR_CODE (tmpl,
2472 DECL_OVERLOADED_OPERATOR_P (decl));
2475 return tmpl;
2478 struct template_parm_data
2480 /* The level of the template parameters we are currently
2481 processing. */
2482 int level;
2484 /* The index of the specialization argument we are currently
2485 processing. */
2486 int current_arg;
2488 /* An array whose size is the number of template parameters. The
2489 elements are nonzero if the parameter has been used in any one
2490 of the arguments processed so far. */
2491 int* parms;
2493 /* An array whose size is the number of template arguments. The
2494 elements are nonzero if the argument makes use of template
2495 parameters of this level. */
2496 int* arg_uses_template_parms;
2499 /* Subroutine of push_template_decl used to see if each template
2500 parameter in a partial specialization is used in the explicit
2501 argument list. If T is of the LEVEL given in DATA (which is
2502 treated as a template_parm_data*), then DATA->PARMS is marked
2503 appropriately. */
2505 static int
2506 mark_template_parm (tree t, void* data)
2508 int level;
2509 int idx;
2510 struct template_parm_data* tpd = (struct template_parm_data*) data;
2512 if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
2514 level = TEMPLATE_PARM_LEVEL (t);
2515 idx = TEMPLATE_PARM_IDX (t);
2517 else
2519 level = TEMPLATE_TYPE_LEVEL (t);
2520 idx = TEMPLATE_TYPE_IDX (t);
2523 if (level == tpd->level)
2525 tpd->parms[idx] = 1;
2526 tpd->arg_uses_template_parms[tpd->current_arg] = 1;
2529 /* Return zero so that for_each_template_parm will continue the
2530 traversal of the tree; we want to mark *every* template parm. */
2531 return 0;
2534 /* Process the partial specialization DECL. */
2536 static tree
2537 process_partial_specialization (tree decl)
2539 tree type = TREE_TYPE (decl);
2540 tree maintmpl = CLASSTYPE_TI_TEMPLATE (type);
2541 tree specargs = CLASSTYPE_TI_ARGS (type);
2542 tree inner_args = INNERMOST_TEMPLATE_ARGS (specargs);
2543 tree inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
2544 tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
2545 int nargs = TREE_VEC_LENGTH (inner_args);
2546 int ntparms = TREE_VEC_LENGTH (inner_parms);
2547 int i;
2548 int did_error_intro = 0;
2549 struct template_parm_data tpd;
2550 struct template_parm_data tpd2;
2552 /* We check that each of the template parameters given in the
2553 partial specialization is used in the argument list to the
2554 specialization. For example:
2556 template <class T> struct S;
2557 template <class T> struct S<T*>;
2559 The second declaration is OK because `T*' uses the template
2560 parameter T, whereas
2562 template <class T> struct S<int>;
2564 is no good. Even trickier is:
2566 template <class T>
2567 struct S1
2569 template <class U>
2570 struct S2;
2571 template <class U>
2572 struct S2<T>;
2575 The S2<T> declaration is actually invalid; it is a
2576 full-specialization. Of course,
2578 template <class U>
2579 struct S2<T (*)(U)>;
2581 or some such would have been OK. */
2582 tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
2583 tpd.parms = alloca (sizeof (int) * ntparms);
2584 memset (tpd.parms, 0, sizeof (int) * ntparms);
2586 tpd.arg_uses_template_parms = alloca (sizeof (int) * nargs);
2587 memset (tpd.arg_uses_template_parms, 0, sizeof (int) * nargs);
2588 for (i = 0; i < nargs; ++i)
2590 tpd.current_arg = i;
2591 for_each_template_parm (TREE_VEC_ELT (inner_args, i),
2592 &mark_template_parm,
2593 &tpd,
2594 NULL);
2596 for (i = 0; i < ntparms; ++i)
2597 if (tpd.parms[i] == 0)
2599 /* One of the template parms was not used in the
2600 specialization. */
2601 if (!did_error_intro)
2603 error ("template parameters not used in partial specialization:");
2604 did_error_intro = 1;
2607 error (" %qD", TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
2610 /* [temp.class.spec]
2612 The argument list of the specialization shall not be identical to
2613 the implicit argument list of the primary template. */
2614 if (comp_template_args
2615 (inner_args,
2616 INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE
2617 (maintmpl)))))
2618 error ("partial specialization %qT does not specialize any template arguments", type);
2620 /* [temp.class.spec]
2622 A partially specialized non-type argument expression shall not
2623 involve template parameters of the partial specialization except
2624 when the argument expression is a simple identifier.
2626 The type of a template parameter corresponding to a specialized
2627 non-type argument shall not be dependent on a parameter of the
2628 specialization. */
2629 gcc_assert (nargs == DECL_NTPARMS (maintmpl));
2630 tpd2.parms = 0;
2631 for (i = 0; i < nargs; ++i)
2633 tree arg = TREE_VEC_ELT (inner_args, i);
2634 if (/* These first two lines are the `non-type' bit. */
2635 !TYPE_P (arg)
2636 && TREE_CODE (arg) != TEMPLATE_DECL
2637 /* This next line is the `argument expression is not just a
2638 simple identifier' condition and also the `specialized
2639 non-type argument' bit. */
2640 && TREE_CODE (arg) != TEMPLATE_PARM_INDEX)
2642 if (tpd.arg_uses_template_parms[i])
2643 error ("template argument %qE involves template parameter(s)", arg);
2644 else
2646 /* Look at the corresponding template parameter,
2647 marking which template parameters its type depends
2648 upon. */
2649 tree type =
2650 TREE_TYPE (TREE_VALUE (TREE_VEC_ELT (main_inner_parms,
2651 i)));
2653 if (!tpd2.parms)
2655 /* We haven't yet initialized TPD2. Do so now. */
2656 tpd2.arg_uses_template_parms
2657 = alloca (sizeof (int) * nargs);
2658 /* The number of parameters here is the number in the
2659 main template, which, as checked in the assertion
2660 above, is NARGS. */
2661 tpd2.parms = alloca (sizeof (int) * nargs);
2662 tpd2.level =
2663 TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
2666 /* Mark the template parameters. But this time, we're
2667 looking for the template parameters of the main
2668 template, not in the specialization. */
2669 tpd2.current_arg = i;
2670 tpd2.arg_uses_template_parms[i] = 0;
2671 memset (tpd2.parms, 0, sizeof (int) * nargs);
2672 for_each_template_parm (type,
2673 &mark_template_parm,
2674 &tpd2,
2675 NULL);
2677 if (tpd2.arg_uses_template_parms [i])
2679 /* The type depended on some template parameters.
2680 If they are fully specialized in the
2681 specialization, that's OK. */
2682 int j;
2683 for (j = 0; j < nargs; ++j)
2684 if (tpd2.parms[j] != 0
2685 && tpd.arg_uses_template_parms [j])
2687 error ("type %qT of template argument %qE depends "
2688 "on template parameter(s)",
2689 type,
2690 arg);
2691 break;
2698 if (retrieve_specialization (maintmpl, specargs,
2699 /*class_specializations_p=*/true))
2700 /* We've already got this specialization. */
2701 return decl;
2703 DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
2704 = tree_cons (inner_args, inner_parms,
2705 DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
2706 TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
2707 return decl;
2710 /* Check that a template declaration's use of default arguments is not
2711 invalid. Here, PARMS are the template parameters. IS_PRIMARY is
2712 nonzero if DECL is the thing declared by a primary template.
2713 IS_PARTIAL is nonzero if DECL is a partial specialization. */
2715 static void
2716 check_default_tmpl_args (tree decl, tree parms, int is_primary, int is_partial)
2718 const char *msg;
2719 int last_level_to_check;
2720 tree parm_level;
2722 /* [temp.param]
2724 A default template-argument shall not be specified in a
2725 function template declaration or a function template definition, nor
2726 in the template-parameter-list of the definition of a member of a
2727 class template. */
2729 if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
2730 /* You can't have a function template declaration in a local
2731 scope, nor you can you define a member of a class template in a
2732 local scope. */
2733 return;
2735 if (current_class_type
2736 && !TYPE_BEING_DEFINED (current_class_type)
2737 && DECL_LANG_SPECIFIC (decl)
2738 /* If this is either a friend defined in the scope of the class
2739 or a member function. */
2740 && (DECL_FUNCTION_MEMBER_P (decl)
2741 ? same_type_p (DECL_CONTEXT (decl), current_class_type)
2742 : DECL_FRIEND_CONTEXT (decl)
2743 ? same_type_p (DECL_FRIEND_CONTEXT (decl), current_class_type)
2744 : false)
2745 /* And, if it was a member function, it really was defined in
2746 the scope of the class. */
2747 && (!DECL_FUNCTION_MEMBER_P (decl)
2748 || DECL_INITIALIZED_IN_CLASS_P (decl)))
2749 /* We already checked these parameters when the template was
2750 declared, so there's no need to do it again now. This function
2751 was defined in class scope, but we're processing it's body now
2752 that the class is complete. */
2753 return;
2755 /* [temp.param]
2757 If a template-parameter has a default template-argument, all
2758 subsequent template-parameters shall have a default
2759 template-argument supplied. */
2760 for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
2762 tree inner_parms = TREE_VALUE (parm_level);
2763 int ntparms = TREE_VEC_LENGTH (inner_parms);
2764 int seen_def_arg_p = 0;
2765 int i;
2767 for (i = 0; i < ntparms; ++i)
2769 tree parm = TREE_VEC_ELT (inner_parms, i);
2770 if (TREE_PURPOSE (parm))
2771 seen_def_arg_p = 1;
2772 else if (seen_def_arg_p)
2774 error ("no default argument for %qD", TREE_VALUE (parm));
2775 /* For better subsequent error-recovery, we indicate that
2776 there should have been a default argument. */
2777 TREE_PURPOSE (parm) = error_mark_node;
2782 if (TREE_CODE (decl) != TYPE_DECL || is_partial || !is_primary)
2783 /* For an ordinary class template, default template arguments are
2784 allowed at the innermost level, e.g.:
2785 template <class T = int>
2786 struct S {};
2787 but, in a partial specialization, they're not allowed even
2788 there, as we have in [temp.class.spec]:
2790 The template parameter list of a specialization shall not
2791 contain default template argument values.
2793 So, for a partial specialization, or for a function template,
2794 we look at all of them. */
2796 else
2797 /* But, for a primary class template that is not a partial
2798 specialization we look at all template parameters except the
2799 innermost ones. */
2800 parms = TREE_CHAIN (parms);
2802 /* Figure out what error message to issue. */
2803 if (TREE_CODE (decl) == FUNCTION_DECL)
2804 msg = "default template arguments may not be used in function templates";
2805 else if (is_partial)
2806 msg = "default template arguments may not be used in partial specializations";
2807 else
2808 msg = "default argument for template parameter for class enclosing %qD";
2810 if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
2811 /* If we're inside a class definition, there's no need to
2812 examine the parameters to the class itself. On the one
2813 hand, they will be checked when the class is defined, and,
2814 on the other, default arguments are valid in things like:
2815 template <class T = double>
2816 struct S { template <class U> void f(U); };
2817 Here the default argument for `S' has no bearing on the
2818 declaration of `f'. */
2819 last_level_to_check = template_class_depth (current_class_type) + 1;
2820 else
2821 /* Check everything. */
2822 last_level_to_check = 0;
2824 for (parm_level = parms;
2825 parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check;
2826 parm_level = TREE_CHAIN (parm_level))
2828 tree inner_parms = TREE_VALUE (parm_level);
2829 int i;
2830 int ntparms;
2832 ntparms = TREE_VEC_LENGTH (inner_parms);
2833 for (i = 0; i < ntparms; ++i)
2834 if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
2836 if (msg)
2838 error (msg, decl);
2839 msg = 0;
2842 /* Clear out the default argument so that we are not
2843 confused later. */
2844 TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
2847 /* At this point, if we're still interested in issuing messages,
2848 they must apply to classes surrounding the object declared. */
2849 if (msg)
2850 msg = "default argument for template parameter for class enclosing %qD";
2854 /* Worker for push_template_decl_real, called via
2855 for_each_template_parm. DATA is really an int, indicating the
2856 level of the parameters we are interested in. If T is a template
2857 parameter of that level, return nonzero. */
2859 static int
2860 template_parm_this_level_p (tree t, void* data)
2862 int this_level = *(int *)data;
2863 int level;
2865 if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
2866 level = TEMPLATE_PARM_LEVEL (t);
2867 else
2868 level = TEMPLATE_TYPE_LEVEL (t);
2869 return level == this_level;
2872 /* Creates a TEMPLATE_DECL for the indicated DECL using the template
2873 parameters given by current_template_args, or reuses a
2874 previously existing one, if appropriate. Returns the DECL, or an
2875 equivalent one, if it is replaced via a call to duplicate_decls.
2877 If IS_FRIEND is nonzero, DECL is a friend declaration. */
2879 tree
2880 push_template_decl_real (tree decl, int is_friend)
2882 tree tmpl;
2883 tree args;
2884 tree info;
2885 tree ctx;
2886 int primary;
2887 int is_partial;
2888 int new_template_p = 0;
2889 /* True if the template is a member template, in the sense of
2890 [temp.mem]. */
2891 bool member_template_p = false;
2893 if (decl == error_mark_node)
2894 return decl;
2896 /* See if this is a partial specialization. */
2897 is_partial = (DECL_IMPLICIT_TYPEDEF_P (decl)
2898 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
2899 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)));
2901 is_friend |= (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl));
2903 if (is_friend)
2904 /* For a friend, we want the context of the friend function, not
2905 the type of which it is a friend. */
2906 ctx = DECL_CONTEXT (decl);
2907 else if (CP_DECL_CONTEXT (decl)
2908 && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
2909 /* In the case of a virtual function, we want the class in which
2910 it is defined. */
2911 ctx = CP_DECL_CONTEXT (decl);
2912 else
2913 /* Otherwise, if we're currently defining some class, the DECL
2914 is assumed to be a member of the class. */
2915 ctx = current_scope ();
2917 if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
2918 ctx = NULL_TREE;
2920 if (!DECL_CONTEXT (decl))
2921 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
2923 /* See if this is a primary template. */
2924 primary = template_parm_scope_p ();
2926 if (primary)
2928 if (DECL_CLASS_SCOPE_P (decl))
2929 member_template_p = true;
2930 if (current_lang_name == lang_name_c)
2931 error ("template with C linkage");
2932 else if (TREE_CODE (decl) == TYPE_DECL
2933 && ANON_AGGRNAME_P (DECL_NAME (decl)))
2934 error ("template class without a name");
2935 else if (TREE_CODE (decl) == FUNCTION_DECL)
2937 if (DECL_DESTRUCTOR_P (decl))
2939 /* [temp.mem]
2941 A destructor shall not be a member template. */
2942 error ("destructor %qD declared as member template", decl);
2943 return error_mark_node;
2945 if (NEW_DELETE_OPNAME_P (DECL_NAME (decl))
2946 && (!TYPE_ARG_TYPES (TREE_TYPE (decl))
2947 || TYPE_ARG_TYPES (TREE_TYPE (decl)) == void_list_node
2948 || !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
2949 || (TREE_CHAIN (TYPE_ARG_TYPES ((TREE_TYPE (decl))))
2950 == void_list_node)))
2952 /* [basic.stc.dynamic.allocation]
2954 An allocation function can be a function
2955 template. ... Template allocation functions shall
2956 have two or more parameters. */
2957 error ("invalid template declaration of %qD", decl);
2958 return decl;
2961 else if ((DECL_IMPLICIT_TYPEDEF_P (decl)
2962 && CLASS_TYPE_P (TREE_TYPE (decl)))
2963 || (TREE_CODE (decl) == VAR_DECL && ctx && CLASS_TYPE_P (ctx)))
2964 /* OK */;
2965 else
2967 error ("template declaration of %q#D", decl);
2968 return error_mark_node;
2972 /* Check to see that the rules regarding the use of default
2973 arguments are not being violated. */
2974 check_default_tmpl_args (decl, current_template_parms,
2975 primary, is_partial);
2977 if (is_partial)
2978 return process_partial_specialization (decl);
2980 args = current_template_args ();
2982 if (!ctx
2983 || TREE_CODE (ctx) == FUNCTION_DECL
2984 || (CLASS_TYPE_P (ctx) && TYPE_BEING_DEFINED (ctx))
2985 || (is_friend && !DECL_TEMPLATE_INFO (decl)))
2987 if (DECL_LANG_SPECIFIC (decl)
2988 && DECL_TEMPLATE_INFO (decl)
2989 && DECL_TI_TEMPLATE (decl))
2990 tmpl = DECL_TI_TEMPLATE (decl);
2991 /* If DECL is a TYPE_DECL for a class-template, then there won't
2992 be DECL_LANG_SPECIFIC. The information equivalent to
2993 DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead. */
2994 else if (DECL_IMPLICIT_TYPEDEF_P (decl)
2995 && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
2996 && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
2998 /* Since a template declaration already existed for this
2999 class-type, we must be redeclaring it here. Make sure
3000 that the redeclaration is valid. */
3001 redeclare_class_template (TREE_TYPE (decl),
3002 current_template_parms);
3003 /* We don't need to create a new TEMPLATE_DECL; just use the
3004 one we already had. */
3005 tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
3007 else
3009 tmpl = build_template_decl (decl, current_template_parms,
3010 member_template_p);
3011 new_template_p = 1;
3013 if (DECL_LANG_SPECIFIC (decl)
3014 && DECL_TEMPLATE_SPECIALIZATION (decl))
3016 /* A specialization of a member template of a template
3017 class. */
3018 SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
3019 DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
3020 DECL_TEMPLATE_INFO (decl) = NULL_TREE;
3024 else
3026 tree a, t, current, parms;
3027 int i;
3029 if (TREE_CODE (decl) == TYPE_DECL)
3031 if ((IS_AGGR_TYPE_CODE (TREE_CODE (TREE_TYPE (decl)))
3032 || TREE_CODE (TREE_TYPE (decl)) == ENUMERAL_TYPE)
3033 && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
3034 && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
3035 tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
3036 else
3038 error ("%qD does not declare a template type", decl);
3039 return decl;
3042 else if (!DECL_LANG_SPECIFIC (decl) || !DECL_TEMPLATE_INFO (decl))
3044 error ("template definition of non-template %q#D", decl);
3045 return decl;
3047 else
3048 tmpl = DECL_TI_TEMPLATE (decl);
3050 if (DECL_FUNCTION_TEMPLATE_P (tmpl)
3051 && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
3052 && DECL_TEMPLATE_SPECIALIZATION (decl)
3053 && DECL_MEMBER_TEMPLATE_P (tmpl))
3055 tree new_tmpl;
3057 /* The declaration is a specialization of a member
3058 template, declared outside the class. Therefore, the
3059 innermost template arguments will be NULL, so we
3060 replace them with the arguments determined by the
3061 earlier call to check_explicit_specialization. */
3062 args = DECL_TI_ARGS (decl);
3064 new_tmpl
3065 = build_template_decl (decl, current_template_parms,
3066 member_template_p);
3067 DECL_TEMPLATE_RESULT (new_tmpl) = decl;
3068 TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
3069 DECL_TI_TEMPLATE (decl) = new_tmpl;
3070 SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
3071 DECL_TEMPLATE_INFO (new_tmpl)
3072 = tree_cons (tmpl, args, NULL_TREE);
3074 register_specialization (new_tmpl,
3075 most_general_template (tmpl),
3076 args);
3077 return decl;
3080 /* Make sure the template headers we got make sense. */
3082 parms = DECL_TEMPLATE_PARMS (tmpl);
3083 i = TMPL_PARMS_DEPTH (parms);
3084 if (TMPL_ARGS_DEPTH (args) != i)
3086 error ("expected %d levels of template parms for %q#D, got %d",
3087 i, decl, TMPL_ARGS_DEPTH (args));
3089 else
3090 for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
3092 a = TMPL_ARGS_LEVEL (args, i);
3093 t = INNERMOST_TEMPLATE_PARMS (parms);
3095 if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
3097 if (current == decl)
3098 error ("got %d template parameters for %q#D",
3099 TREE_VEC_LENGTH (a), decl);
3100 else
3101 error ("got %d template parameters for %q#T",
3102 TREE_VEC_LENGTH (a), current);
3103 error (" but %d required", TREE_VEC_LENGTH (t));
3106 /* Perhaps we should also check that the parms are used in the
3107 appropriate qualifying scopes in the declarator? */
3109 if (current == decl)
3110 current = ctx;
3111 else
3112 current = TYPE_CONTEXT (current);
3116 DECL_TEMPLATE_RESULT (tmpl) = decl;
3117 TREE_TYPE (tmpl) = TREE_TYPE (decl);
3119 /* Push template declarations for global functions and types. Note
3120 that we do not try to push a global template friend declared in a
3121 template class; such a thing may well depend on the template
3122 parameters of the class. */
3123 if (new_template_p && !ctx
3124 && !(is_friend && template_class_depth (current_class_type) > 0))
3126 tmpl = pushdecl_namespace_level (tmpl);
3127 if (tmpl == error_mark_node)
3128 return error_mark_node;
3130 /* Hide template friend classes that haven't been declared yet. */
3131 if (is_friend && TREE_CODE (decl) == TYPE_DECL)
3133 DECL_ANTICIPATED (tmpl) = 1;
3134 DECL_FRIEND_P (tmpl) = 1;
3138 if (primary)
3140 DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
3141 if (DECL_CONV_FN_P (tmpl))
3143 int depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
3145 /* It is a conversion operator. See if the type converted to
3146 depends on innermost template operands. */
3148 if (uses_template_parms_level (TREE_TYPE (TREE_TYPE (tmpl)),
3149 depth))
3150 DECL_TEMPLATE_CONV_FN_P (tmpl) = 1;
3154 /* The DECL_TI_ARGS of DECL contains full set of arguments referring
3155 back to its most general template. If TMPL is a specialization,
3156 ARGS may only have the innermost set of arguments. Add the missing
3157 argument levels if necessary. */
3158 if (DECL_TEMPLATE_INFO (tmpl))
3159 args = add_outermost_template_args (DECL_TI_ARGS (tmpl), args);
3161 info = tree_cons (tmpl, args, NULL_TREE);
3163 if (DECL_IMPLICIT_TYPEDEF_P (decl))
3165 SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
3166 if ((!ctx || TREE_CODE (ctx) != FUNCTION_DECL)
3167 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
3168 /* Don't change the name if we've already set it up. */
3169 && !IDENTIFIER_TEMPLATE (DECL_NAME (decl)))
3170 DECL_NAME (decl) = classtype_mangled_name (TREE_TYPE (decl));
3172 else if (DECL_LANG_SPECIFIC (decl))
3173 DECL_TEMPLATE_INFO (decl) = info;
3175 return DECL_TEMPLATE_RESULT (tmpl);
3178 tree
3179 push_template_decl (tree decl)
3181 return push_template_decl_real (decl, 0);
3184 /* Called when a class template TYPE is redeclared with the indicated
3185 template PARMS, e.g.:
3187 template <class T> struct S;
3188 template <class T> struct S {}; */
3190 void
3191 redeclare_class_template (tree type, tree parms)
3193 tree tmpl;
3194 tree tmpl_parms;
3195 int i;
3197 if (!TYPE_TEMPLATE_INFO (type))
3199 error ("%qT is not a template type", type);
3200 return;
3203 tmpl = TYPE_TI_TEMPLATE (type);
3204 if (!PRIMARY_TEMPLATE_P (tmpl))
3205 /* The type is nested in some template class. Nothing to worry
3206 about here; there are no new template parameters for the nested
3207 type. */
3208 return;
3210 if (!parms)
3212 error ("template specifiers not specified in declaration of %qD",
3213 tmpl);
3214 return;
3217 parms = INNERMOST_TEMPLATE_PARMS (parms);
3218 tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
3220 if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
3222 error ("previous declaration %q+D", tmpl);
3223 error ("used %d template parameter(s) instead of %d",
3224 TREE_VEC_LENGTH (tmpl_parms),
3225 TREE_VEC_LENGTH (parms));
3226 return;
3229 for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
3231 tree tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
3232 tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
3233 tree tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
3234 tree parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
3236 /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
3237 TEMPLATE_DECL. */
3238 if (TREE_CODE (tmpl_parm) != TREE_CODE (parm)
3239 || (TREE_CODE (tmpl_parm) != TYPE_DECL
3240 && !same_type_p (TREE_TYPE (tmpl_parm), TREE_TYPE (parm))))
3242 error ("template parameter %q+#D", tmpl_parm);
3243 error ("redeclared here as %q#D", parm);
3244 return;
3247 if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
3249 /* We have in [temp.param]:
3251 A template-parameter may not be given default arguments
3252 by two different declarations in the same scope. */
3253 error ("redefinition of default argument for %q#D", parm);
3254 error ("%J original definition appeared here", tmpl_parm);
3255 return;
3258 if (parm_default != NULL_TREE)
3259 /* Update the previous template parameters (which are the ones
3260 that will really count) with the new default value. */
3261 TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
3262 else if (tmpl_default != NULL_TREE)
3263 /* Update the new parameters, too; they'll be used as the
3264 parameters for any members. */
3265 TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
3269 /* Simplify EXPR if it is a non-dependent expression. Returns the
3270 (possibly simplified) expression. */
3272 tree
3273 fold_non_dependent_expr (tree expr)
3275 /* If we're in a template, but EXPR isn't value dependent, simplify
3276 it. We're supposed to treat:
3278 template <typename T> void f(T[1 + 1]);
3279 template <typename T> void f(T[2]);
3281 as two declarations of the same function, for example. */
3282 if (processing_template_decl
3283 && !type_dependent_expression_p (expr)
3284 && !value_dependent_expression_p (expr))
3286 HOST_WIDE_INT saved_processing_template_decl;
3288 saved_processing_template_decl = processing_template_decl;
3289 processing_template_decl = 0;
3290 expr = tsubst_copy_and_build (expr,
3291 /*args=*/NULL_TREE,
3292 tf_error,
3293 /*in_decl=*/NULL_TREE,
3294 /*function_p=*/false);
3295 processing_template_decl = saved_processing_template_decl;
3297 return expr;
3300 /* EXPR is an expression which is used in a constant-expression context.
3301 For instance, it could be a VAR_DECL with a constant initializer.
3302 Extract the innest constant expression.
3304 This is basically a more powerful version of
3305 integral_constant_value, which can be used also in templates where
3306 initializers can maintain a syntactic rather than semantic form
3307 (even if they are non-dependent, for access-checking purposes). */
3309 tree
3310 fold_decl_constant_value (tree expr)
3312 tree const_expr = expr;
3315 expr = fold_non_dependent_expr (const_expr);
3316 const_expr = integral_constant_value (expr);
3318 while (expr != const_expr);
3320 return expr;
3323 /* Subroutine of convert_nontype_argument. Converts EXPR to TYPE, which
3324 must be a function or a pointer-to-function type, as specified
3325 in [temp.arg.nontype]: disambiguate EXPR if it is an overload set,
3326 and check that the resulting function has external linkage. */
3328 static tree
3329 convert_nontype_argument_function (tree type, tree expr)
3331 tree fns = expr;
3332 tree fn, fn_no_ptr;
3334 fn = instantiate_type (type, fns, tf_none);
3335 if (fn == error_mark_node)
3336 return error_mark_node;
3338 fn_no_ptr = fn;
3339 if (TREE_CODE (fn_no_ptr) == ADDR_EXPR)
3340 fn_no_ptr = TREE_OPERAND (fn_no_ptr, 0);
3342 /* [temp.arg.nontype]/1
3344 A template-argument for a non-type, non-template template-parameter
3345 shall be one of:
3346 [...]
3347 -- the address of an object or function with external linkage. */
3348 if (!DECL_EXTERNAL_LINKAGE_P (fn_no_ptr))
3350 error ("%qE is not a valid template argument for type %qT "
3351 "because function %qD has not external linkage",
3352 expr, type, fn_no_ptr);
3353 return NULL_TREE;
3356 return fn;
3359 /* Attempt to convert the non-type template parameter EXPR to the
3360 indicated TYPE. If the conversion is successful, return the
3361 converted value. If the conversion is unsuccessful, return
3362 NULL_TREE if we issued an error message, or error_mark_node if we
3363 did not. We issue error messages for out-and-out bad template
3364 parameters, but not simply because the conversion failed, since we
3365 might be just trying to do argument deduction. Both TYPE and EXPR
3366 must be non-dependent.
3368 The conversion follows the special rules described in
3369 [temp.arg.nontype], and it is much more strict than an implicit
3370 conversion.
3372 This function is called twice for each template argument (see
3373 lookup_template_class for a more accurate description of this
3374 problem). This means that we need to handle expressions which
3375 are not valid in a C++ source, but can be created from the
3376 first call (for instance, casts to perform conversions). These
3377 hacks can go away after we fix the double coercion problem. */
3379 static tree
3380 convert_nontype_argument (tree type, tree expr)
3382 tree expr_type;
3384 /* Detect immediately string literals as invalid non-type argument.
3385 This special-case is not needed for correctness (we would easily
3386 catch this later), but only to provide better diagnostic for this
3387 common user mistake. As suggested by DR 100, we do not mention
3388 linkage issues in the diagnostic as this is not the point. */
3389 if (TREE_CODE (expr) == STRING_CST)
3391 error ("%qE is not a valid template argument for type %qT "
3392 "because string literals can never be used in this context",
3393 expr, type);
3394 return NULL_TREE;
3397 /* If we are in a template, EXPR may be non-dependent, but still
3398 have a syntactic, rather than semantic, form. For example, EXPR
3399 might be a SCOPE_REF, rather than the VAR_DECL to which the
3400 SCOPE_REF refers. Preserving the qualifying scope is necessary
3401 so that access checking can be performed when the template is
3402 instantiated -- but here we need the resolved form so that we can
3403 convert the argument. */
3404 expr = fold_non_dependent_expr (expr);
3405 expr_type = TREE_TYPE (expr);
3407 /* HACK: Due to double coercion, we can get a
3408 NOP_EXPR<REFERENCE_TYPE>(ADDR_EXPR<POINTER_TYPE> (arg)) here,
3409 which is the tree that we built on the first call (see
3410 below when coercing to reference to object or to reference to
3411 function). We just strip everything and get to the arg.
3412 See g++.old-deja/g++.oliva/template4.C and g++.dg/template/nontype9.C
3413 for examples. */
3414 if (TREE_CODE (expr) == NOP_EXPR)
3416 if (TYPE_REF_OBJ_P (type) || TYPE_REFFN_P (type))
3418 /* ??? Maybe we could use convert_from_reference here, but we
3419 would need to relax its constraints because the NOP_EXPR
3420 could actually change the type to something more cv-qualified,
3421 and this is not folded by convert_from_reference. */
3422 tree addr = TREE_OPERAND (expr, 0);
3423 gcc_assert (TREE_CODE (expr_type) == REFERENCE_TYPE);
3424 gcc_assert (TREE_CODE (addr) == ADDR_EXPR);
3425 gcc_assert (TREE_CODE (TREE_TYPE (addr)) == POINTER_TYPE);
3426 gcc_assert (same_type_ignoring_top_level_qualifiers_p
3427 (TREE_TYPE (expr_type),
3428 TREE_TYPE (TREE_TYPE (addr))));
3430 expr = TREE_OPERAND (addr, 0);
3431 expr_type = TREE_TYPE (expr);
3434 /* We could also generate a NOP_EXPR(ADDR_EXPR()) when the
3435 parameter is a pointer to object, through decay and
3436 qualification conversion. Let's strip everything. */
3437 else if (TYPE_PTROBV_P (type))
3439 STRIP_NOPS (expr);
3440 gcc_assert (TREE_CODE (expr) == ADDR_EXPR);
3441 gcc_assert (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE);
3442 /* Skip the ADDR_EXPR only if it is part of the decay for
3443 an array. Otherwise, it is part of the original argument
3444 in the source code. */
3445 if (TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == ARRAY_TYPE)
3446 expr = TREE_OPERAND (expr, 0);
3447 expr_type = TREE_TYPE (expr);
3451 /* [temp.arg.nontype]/5, bullet 1
3453 For a non-type template-parameter of integral or enumeration type,
3454 integral promotions (_conv.prom_) and integral conversions
3455 (_conv.integral_) are applied. */
3456 if (INTEGRAL_TYPE_P (type))
3458 if (!INTEGRAL_TYPE_P (expr_type))
3459 return error_mark_node;
3461 expr = fold_decl_constant_value (expr);
3462 /* Notice that there are constant expressions like '4 % 0' which
3463 do not fold into integer constants. */
3464 if (TREE_CODE (expr) != INTEGER_CST)
3466 error ("%qE is not a valid template argument for type %qT "
3467 "because it is a non-constant expression", expr, type);
3468 return NULL_TREE;
3471 /* At this point, an implicit conversion does what we want,
3472 because we already know that the expression is of integral
3473 type. */
3474 expr = ocp_convert (type, expr, CONV_IMPLICIT, LOOKUP_PROTECT);
3475 if (expr == error_mark_node)
3476 return error_mark_node;
3478 /* Conversion was allowed: fold it to a bare integer constant. */
3479 expr = fold (expr);
3481 /* [temp.arg.nontype]/5, bullet 2
3483 For a non-type template-parameter of type pointer to object,
3484 qualification conversions (_conv.qual_) and the array-to-pointer
3485 conversion (_conv.array_) are applied. */
3486 else if (TYPE_PTROBV_P (type))
3488 /* [temp.arg.nontype]/1 (TC1 version, DR 49):
3490 A template-argument for a non-type, non-template template-parameter
3491 shall be one of: [...]
3493 -- the name of a non-type template-parameter;
3494 -- the address of an object or function with external linkage, [...]
3495 expressed as "& id-expression" where the & is optional if the name
3496 refers to a function or array, or if the corresponding
3497 template-parameter is a reference.
3499 Here, we do not care about functions, as they are invalid anyway
3500 for a parameter of type pointer-to-object. */
3501 bool constant_address_p =
3502 (TREE_CODE (expr) == ADDR_EXPR
3503 || TREE_CODE (expr_type) == ARRAY_TYPE
3504 || (DECL_P (expr) && DECL_TEMPLATE_PARM_P (expr)));
3506 expr = decay_conversion (expr);
3507 if (expr == error_mark_node)
3508 return error_mark_node;
3510 expr = perform_qualification_conversions (type, expr);
3511 if (expr == error_mark_node)
3512 return error_mark_node;
3514 if (!constant_address_p)
3516 error ("%qE is not a valid template argument for type %qT "
3517 "because it is not a constant pointer", expr, type);
3518 return NULL_TREE;
3521 /* [temp.arg.nontype]/5, bullet 3
3523 For a non-type template-parameter of type reference to object, no
3524 conversions apply. The type referred to by the reference may be more
3525 cv-qualified than the (otherwise identical) type of the
3526 template-argument. The template-parameter is bound directly to the
3527 template-argument, which must be an lvalue. */
3528 else if (TYPE_REF_OBJ_P (type))
3530 if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type),
3531 expr_type))
3532 return error_mark_node;
3534 if (!at_least_as_qualified_p (TREE_TYPE (type), expr_type))
3536 error ("%qE is not a valid template argument for type %qT "
3537 "because of conflicts in cv-qualification", expr, type);
3538 return NULL_TREE;
3541 if (!real_lvalue_p (expr))
3543 error ("%qE is not a valid template argument for type %qT "
3544 "because it is not a lvalue", expr, type);
3545 return NULL_TREE;
3548 /* [temp.arg.nontype]/1
3550 A template-argument for a non-type, non-template template-parameter
3551 shall be one of: [...]
3553 -- the address of an object or function with external linkage. */
3554 if (!DECL_EXTERNAL_LINKAGE_P (expr))
3556 error ("%qE is not a valid template argument for type %qT "
3557 "because object %qD has not external linkage",
3558 expr, type, expr);
3559 return NULL_TREE;
3562 expr = build_nop (type, build_address (expr));
3564 /* [temp.arg.nontype]/5, bullet 4
3566 For a non-type template-parameter of type pointer to function, only
3567 the function-to-pointer conversion (_conv.func_) is applied. If the
3568 template-argument represents a set of overloaded functions (or a
3569 pointer to such), the matching function is selected from the set
3570 (_over.over_). */
3571 else if (TYPE_PTRFN_P (type))
3573 /* If the argument is a template-id, we might not have enough
3574 context information to decay the pointer.
3575 ??? Why static5.C requires decay and subst1.C works fine
3576 even without it? */
3577 if (!type_unknown_p (expr_type))
3579 expr = decay_conversion (expr);
3580 if (expr == error_mark_node)
3581 return error_mark_node;
3584 expr = convert_nontype_argument_function (type, expr);
3585 if (!expr || expr == error_mark_node)
3586 return expr;
3588 /* [temp.arg.nontype]/5, bullet 5
3590 For a non-type template-parameter of type reference to function, no
3591 conversions apply. If the template-argument represents a set of
3592 overloaded functions, the matching function is selected from the set
3593 (_over.over_). */
3594 else if (TYPE_REFFN_P (type))
3596 if (TREE_CODE (expr) == ADDR_EXPR)
3598 error ("%qE is not a valid template argument for type %qT "
3599 "because it is a pointer", expr, type);
3600 inform ("try using %qE instead", TREE_OPERAND (expr, 0));
3601 return NULL_TREE;
3604 expr = convert_nontype_argument_function (TREE_TYPE (type), expr);
3605 if (!expr || expr == error_mark_node)
3606 return expr;
3608 expr = build_nop (type, build_address (expr));
3610 /* [temp.arg.nontype]/5, bullet 6
3612 For a non-type template-parameter of type pointer to member function,
3613 no conversions apply. If the template-argument represents a set of
3614 overloaded member functions, the matching member function is selected
3615 from the set (_over.over_). */
3616 else if (TYPE_PTRMEMFUNC_P (type))
3618 expr = instantiate_type (type, expr, tf_none);
3619 if (expr == error_mark_node)
3620 return error_mark_node;
3622 /* There is no way to disable standard conversions in
3623 resolve_address_of_overloaded_function (called by
3624 instantiate_type). It is possible that the call succeeded by
3625 converting &B::I to &D::I (where B is a base of D), so we need
3626 to reject this conversion here.
3628 Actually, even if there was a way to disable standard conversions,
3629 it would still be better to reject them here so that we can
3630 provide a superior diagnostic. */
3631 if (!same_type_p (TREE_TYPE (expr), type))
3633 /* Make sure we are just one standard conversion off. */
3634 gcc_assert (can_convert (type, TREE_TYPE (expr)));
3635 error ("%qE is not a valid template argument for type %qT "
3636 "because it is of type %qT", expr, type,
3637 TREE_TYPE (expr));
3638 inform ("standard conversions are not allowed in this context");
3639 return NULL_TREE;
3642 /* [temp.arg.nontype]/5, bullet 7
3644 For a non-type template-parameter of type pointer to data member,
3645 qualification conversions (_conv.qual_) are applied. */
3646 else if (TYPE_PTRMEM_P (type))
3648 expr = perform_qualification_conversions (type, expr);
3649 if (expr == error_mark_node)
3650 return expr;
3652 /* A template non-type parameter must be one of the above. */
3653 else
3654 gcc_unreachable ();
3656 /* Sanity check: did we actually convert the argument to the
3657 right type? */
3658 gcc_assert (same_type_p (type, TREE_TYPE (expr)));
3659 return expr;
3663 /* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
3664 template template parameters. Both PARM_PARMS and ARG_PARMS are
3665 vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
3666 or PARM_DECL.
3668 ARG_PARMS may contain more parameters than PARM_PARMS. If this is
3669 the case, then extra parameters must have default arguments.
3671 Consider the example:
3672 template <class T, class Allocator = allocator> class vector;
3673 template<template <class U> class TT> class C;
3675 C<vector> is a valid instantiation. PARM_PARMS for the above code
3676 contains a TYPE_DECL (for U), ARG_PARMS contains two TYPE_DECLs (for
3677 T and Allocator) and OUTER_ARGS contains the argument that is used to
3678 substitute the TT parameter. */
3680 static int
3681 coerce_template_template_parms (tree parm_parms,
3682 tree arg_parms,
3683 tsubst_flags_t complain,
3684 tree in_decl,
3685 tree outer_args)
3687 int nparms, nargs, i;
3688 tree parm, arg;
3690 gcc_assert (TREE_CODE (parm_parms) == TREE_VEC);
3691 gcc_assert (TREE_CODE (arg_parms) == TREE_VEC);
3693 nparms = TREE_VEC_LENGTH (parm_parms);
3694 nargs = TREE_VEC_LENGTH (arg_parms);
3696 /* The rule here is opposite of coerce_template_parms. */
3697 if (nargs < nparms
3698 || (nargs > nparms
3699 && TREE_PURPOSE (TREE_VEC_ELT (arg_parms, nparms)) == NULL_TREE))
3700 return 0;
3702 for (i = 0; i < nparms; ++i)
3704 parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
3705 arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
3707 if (arg == NULL_TREE || arg == error_mark_node
3708 || parm == NULL_TREE || parm == error_mark_node)
3709 return 0;
3711 if (TREE_CODE (arg) != TREE_CODE (parm))
3712 return 0;
3714 switch (TREE_CODE (parm))
3716 case TYPE_DECL:
3717 break;
3719 case TEMPLATE_DECL:
3720 /* We encounter instantiations of templates like
3721 template <template <template <class> class> class TT>
3722 class C; */
3724 tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
3725 tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
3727 if (!coerce_template_template_parms
3728 (parmparm, argparm, complain, in_decl, outer_args))
3729 return 0;
3731 break;
3733 case PARM_DECL:
3734 /* The tsubst call is used to handle cases such as
3736 template <int> class C {};
3737 template <class T, template <T> class TT> class D {};
3738 D<int, C> d;
3740 i.e. the parameter list of TT depends on earlier parameters. */
3741 if (!dependent_type_p (TREE_TYPE (arg))
3742 && !same_type_p
3743 (tsubst (TREE_TYPE (parm), outer_args, complain, in_decl),
3744 TREE_TYPE (arg)))
3745 return 0;
3746 break;
3748 default:
3749 gcc_unreachable ();
3752 return 1;
3755 /* Convert the indicated template ARG as necessary to match the
3756 indicated template PARM. Returns the converted ARG, or
3757 error_mark_node if the conversion was unsuccessful. Error and
3758 warning messages are issued under control of COMPLAIN. This
3759 conversion is for the Ith parameter in the parameter list. ARGS is
3760 the full set of template arguments deduced so far. */
3762 static tree
3763 convert_template_argument (tree parm,
3764 tree arg,
3765 tree args,
3766 tsubst_flags_t complain,
3767 int i,
3768 tree in_decl)
3770 tree val;
3771 tree inner_args;
3772 int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
3774 inner_args = INNERMOST_TEMPLATE_ARGS (args);
3776 if (TREE_CODE (arg) == TREE_LIST
3777 && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
3779 /* The template argument was the name of some
3780 member function. That's usually
3781 invalid, but static members are OK. In any
3782 case, grab the underlying fields/functions
3783 and issue an error later if required. */
3784 arg = TREE_VALUE (arg);
3785 TREE_TYPE (arg) = unknown_type_node;
3788 requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
3789 requires_type = (TREE_CODE (parm) == TYPE_DECL
3790 || requires_tmpl_type);
3792 is_tmpl_type = ((TREE_CODE (arg) == TEMPLATE_DECL
3793 && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
3794 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
3795 || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
3797 if (is_tmpl_type
3798 && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
3799 || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
3800 arg = TYPE_STUB_DECL (arg);
3802 is_type = TYPE_P (arg) || is_tmpl_type;
3804 if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
3805 && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
3807 pedwarn ("to refer to a type member of a template parameter, "
3808 "use %<typename %E%>", arg);
3810 arg = make_typename_type (TREE_OPERAND (arg, 0),
3811 TREE_OPERAND (arg, 1),
3812 typename_type,
3813 complain & tf_error);
3814 is_type = 1;
3816 if (is_type != requires_type)
3818 if (in_decl)
3820 if (complain & tf_error)
3822 error ("type/value mismatch at argument %d in template "
3823 "parameter list for %qD",
3824 i + 1, in_decl);
3825 if (is_type)
3826 error (" expected a constant of type %qT, got %qT",
3827 TREE_TYPE (parm),
3828 (is_tmpl_type ? DECL_NAME (arg) : arg));
3829 else if (requires_tmpl_type)
3830 error (" expected a class template, got %qE", arg);
3831 else
3832 error (" expected a type, got %qE", arg);
3835 return error_mark_node;
3837 if (is_tmpl_type ^ requires_tmpl_type)
3839 if (in_decl && (complain & tf_error))
3841 error ("type/value mismatch at argument %d in template "
3842 "parameter list for %qD",
3843 i + 1, in_decl);
3844 if (is_tmpl_type)
3845 error (" expected a type, got %qT", DECL_NAME (arg));
3846 else
3847 error (" expected a class template, got %qT", arg);
3849 return error_mark_node;
3852 if (is_type)
3854 if (requires_tmpl_type)
3856 if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
3857 /* The number of argument required is not known yet.
3858 Just accept it for now. */
3859 val = TREE_TYPE (arg);
3860 else
3862 tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
3863 tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
3865 if (coerce_template_template_parms (parmparm, argparm,
3866 complain, in_decl,
3867 inner_args))
3869 val = arg;
3871 /* TEMPLATE_TEMPLATE_PARM node is preferred over
3872 TEMPLATE_DECL. */
3873 if (val != error_mark_node
3874 && DECL_TEMPLATE_TEMPLATE_PARM_P (val))
3875 val = TREE_TYPE (val);
3877 else
3879 if (in_decl && (complain & tf_error))
3881 error ("type/value mismatch at argument %d in "
3882 "template parameter list for %qD",
3883 i + 1, in_decl);
3884 error (" expected a template of type %qD, got %qD",
3885 parm, arg);
3888 val = error_mark_node;
3892 else
3893 val = arg;
3895 else
3897 tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
3899 if (invalid_nontype_parm_type_p (t, complain))
3900 return error_mark_node;
3902 if (!uses_template_parms (arg) && !uses_template_parms (t))
3903 /* We used to call digest_init here. However, digest_init
3904 will report errors, which we don't want when complain
3905 is zero. More importantly, digest_init will try too
3906 hard to convert things: for example, `0' should not be
3907 converted to pointer type at this point according to
3908 the standard. Accepting this is not merely an
3909 extension, since deciding whether or not these
3910 conversions can occur is part of determining which
3911 function template to call, or whether a given explicit
3912 argument specification is valid. */
3913 val = convert_nontype_argument (t, arg);
3914 else
3915 val = arg;
3917 if (val == NULL_TREE)
3918 val = error_mark_node;
3919 else if (val == error_mark_node && (complain & tf_error))
3920 error ("could not convert template argument %qE to %qT", arg, t);
3923 return val;
3926 /* Convert all template arguments to their appropriate types, and
3927 return a vector containing the innermost resulting template
3928 arguments. If any error occurs, return error_mark_node. Error and
3929 warning messages are issued under control of COMPLAIN.
3931 If REQUIRE_ALL_ARGUMENTS is nonzero, all arguments must be
3932 provided in ARGLIST, or else trailing parameters must have default
3933 values. If REQUIRE_ALL_ARGUMENTS is zero, we will attempt argument
3934 deduction for any unspecified trailing arguments. */
3936 static tree
3937 coerce_template_parms (tree parms,
3938 tree args,
3939 tree in_decl,
3940 tsubst_flags_t complain,
3941 int require_all_arguments)
3943 int nparms, nargs, i, lost = 0;
3944 tree inner_args;
3945 tree new_args;
3946 tree new_inner_args;
3948 inner_args = INNERMOST_TEMPLATE_ARGS (args);
3949 nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
3950 nparms = TREE_VEC_LENGTH (parms);
3952 if (nargs > nparms
3953 || (nargs < nparms
3954 && require_all_arguments
3955 && TREE_PURPOSE (TREE_VEC_ELT (parms, nargs)) == NULL_TREE))
3957 if (complain & tf_error)
3959 error ("wrong number of template arguments (%d, should be %d)",
3960 nargs, nparms);
3962 if (in_decl)
3963 error ("provided for %q+D", in_decl);
3966 return error_mark_node;
3969 new_inner_args = make_tree_vec (nparms);
3970 new_args = add_outermost_template_args (args, new_inner_args);
3971 for (i = 0; i < nparms; i++)
3973 tree arg;
3974 tree parm;
3976 /* Get the Ith template parameter. */
3977 parm = TREE_VEC_ELT (parms, i);
3979 /* Calculate the Ith argument. */
3980 if (i < nargs)
3981 arg = TREE_VEC_ELT (inner_args, i);
3982 else if (require_all_arguments)
3983 /* There must be a default arg in this case. */
3984 arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
3985 complain, in_decl);
3986 else
3987 break;
3989 gcc_assert (arg);
3990 if (arg == error_mark_node)
3992 if (complain & tf_error)
3993 error ("template argument %d is invalid", i + 1);
3995 else
3996 arg = convert_template_argument (TREE_VALUE (parm),
3997 arg, new_args, complain, i,
3998 in_decl);
4000 if (arg == error_mark_node)
4001 lost++;
4002 TREE_VEC_ELT (new_inner_args, i) = arg;
4005 if (lost)
4006 return error_mark_node;
4008 return new_inner_args;
4011 /* Returns 1 if template args OT and NT are equivalent. */
4013 static int
4014 template_args_equal (tree ot, tree nt)
4016 if (nt == ot)
4017 return 1;
4019 if (TREE_CODE (nt) == TREE_VEC)
4020 /* For member templates */
4021 return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
4022 else if (TYPE_P (nt))
4023 return TYPE_P (ot) && same_type_p (ot, nt);
4024 else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
4025 return 0;
4026 else
4027 return cp_tree_equal (ot, nt);
4030 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
4031 of template arguments. Returns 0 otherwise. */
4034 comp_template_args (tree oldargs, tree newargs)
4036 int i;
4038 if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
4039 return 0;
4041 for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
4043 tree nt = TREE_VEC_ELT (newargs, i);
4044 tree ot = TREE_VEC_ELT (oldargs, i);
4046 if (! template_args_equal (ot, nt))
4047 return 0;
4049 return 1;
4052 /* Given class template name and parameter list, produce a user-friendly name
4053 for the instantiation. */
4055 static char *
4056 mangle_class_name_for_template (const char* name, tree parms, tree arglist)
4058 static struct obstack scratch_obstack;
4059 static char *scratch_firstobj;
4060 int i, nparms;
4062 if (!scratch_firstobj)
4063 gcc_obstack_init (&scratch_obstack);
4064 else
4065 obstack_free (&scratch_obstack, scratch_firstobj);
4066 scratch_firstobj = obstack_alloc (&scratch_obstack, 1);
4068 #define ccat(C) obstack_1grow (&scratch_obstack, (C));
4069 #define cat(S) obstack_grow (&scratch_obstack, (S), strlen (S))
4071 cat (name);
4072 ccat ('<');
4073 nparms = TREE_VEC_LENGTH (parms);
4074 arglist = INNERMOST_TEMPLATE_ARGS (arglist);
4075 gcc_assert (nparms == TREE_VEC_LENGTH (arglist));
4076 for (i = 0; i < nparms; i++)
4078 tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
4079 tree arg = TREE_VEC_ELT (arglist, i);
4081 if (i)
4082 ccat (',');
4084 if (TREE_CODE (parm) == TYPE_DECL)
4086 cat (type_as_string (arg, TFF_CHASE_TYPEDEF));
4087 continue;
4089 else if (TREE_CODE (parm) == TEMPLATE_DECL)
4091 if (TREE_CODE (arg) == TEMPLATE_DECL)
4093 /* Already substituted with real template. Just output
4094 the template name here */
4095 tree context = DECL_CONTEXT (arg);
4096 if (context)
4098 /* The template may be defined in a namespace, or
4099 may be a member template. */
4100 gcc_assert (TREE_CODE (context) == NAMESPACE_DECL
4101 || CLASS_TYPE_P (context));
4102 cat (decl_as_string (DECL_CONTEXT (arg),
4103 TFF_PLAIN_IDENTIFIER));
4104 cat ("::");
4106 cat (IDENTIFIER_POINTER (DECL_NAME (arg)));
4108 else
4109 /* Output the parameter declaration. */
4110 cat (type_as_string (arg, TFF_CHASE_TYPEDEF));
4111 continue;
4113 else
4114 gcc_assert (TREE_CODE (parm) == PARM_DECL);
4116 /* No need to check arglist against parmlist here; we did that
4117 in coerce_template_parms, called from lookup_template_class. */
4118 cat (expr_as_string (arg, TFF_PLAIN_IDENTIFIER));
4121 char *bufp = obstack_next_free (&scratch_obstack);
4122 int offset = 0;
4123 while (bufp[offset - 1] == ' ')
4124 offset--;
4125 obstack_blank_fast (&scratch_obstack, offset);
4127 /* B<C<char> >, not B<C<char>> */
4128 if (bufp[offset - 1] == '>')
4129 ccat (' ');
4131 ccat ('>');
4132 ccat ('\0');
4133 return (char *) obstack_base (&scratch_obstack);
4136 static tree
4137 classtype_mangled_name (tree t)
4139 if (CLASSTYPE_TEMPLATE_INFO (t)
4140 /* Specializations have already had their names set up in
4141 lookup_template_class. */
4142 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
4144 tree tmpl = most_general_template (CLASSTYPE_TI_TEMPLATE (t));
4146 /* For non-primary templates, the template parameters are
4147 implicit from their surrounding context. */
4148 if (PRIMARY_TEMPLATE_P (tmpl))
4150 tree name = DECL_NAME (tmpl);
4151 char *mangled_name = mangle_class_name_for_template
4152 (IDENTIFIER_POINTER (name),
4153 DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
4154 CLASSTYPE_TI_ARGS (t));
4155 tree id = get_identifier (mangled_name);
4156 IDENTIFIER_TEMPLATE (id) = name;
4157 return id;
4161 return TYPE_IDENTIFIER (t);
4164 static void
4165 add_pending_template (tree d)
4167 tree ti = (TYPE_P (d)
4168 ? CLASSTYPE_TEMPLATE_INFO (d)
4169 : DECL_TEMPLATE_INFO (d));
4170 tree pt;
4171 int level;
4173 if (TI_PENDING_TEMPLATE_FLAG (ti))
4174 return;
4176 /* We are called both from instantiate_decl, where we've already had a
4177 tinst_level pushed, and instantiate_template, where we haven't.
4178 Compensate. */
4179 level = !(current_tinst_level && TINST_DECL (current_tinst_level) == d);
4181 if (level)
4182 push_tinst_level (d);
4184 pt = tree_cons (current_tinst_level, d, NULL_TREE);
4185 if (last_pending_template)
4186 TREE_CHAIN (last_pending_template) = pt;
4187 else
4188 pending_templates = pt;
4190 last_pending_template = pt;
4192 TI_PENDING_TEMPLATE_FLAG (ti) = 1;
4194 if (level)
4195 pop_tinst_level ();
4199 /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
4200 ARGLIST. Valid choices for FNS are given in the cp-tree.def
4201 documentation for TEMPLATE_ID_EXPR. */
4203 tree
4204 lookup_template_function (tree fns, tree arglist)
4206 tree type;
4208 if (fns == error_mark_node || arglist == error_mark_node)
4209 return error_mark_node;
4211 gcc_assert (!arglist || TREE_CODE (arglist) == TREE_VEC);
4212 gcc_assert (fns && (is_overloaded_fn (fns)
4213 || TREE_CODE (fns) == IDENTIFIER_NODE));
4215 if (BASELINK_P (fns))
4217 BASELINK_FUNCTIONS (fns) = build2 (TEMPLATE_ID_EXPR,
4218 unknown_type_node,
4219 BASELINK_FUNCTIONS (fns),
4220 arglist);
4221 return fns;
4224 type = TREE_TYPE (fns);
4225 if (TREE_CODE (fns) == OVERLOAD || !type)
4226 type = unknown_type_node;
4228 return build2 (TEMPLATE_ID_EXPR, type, fns, arglist);
4231 /* Within the scope of a template class S<T>, the name S gets bound
4232 (in build_self_reference) to a TYPE_DECL for the class, not a
4233 TEMPLATE_DECL. If DECL is a TYPE_DECL for current_class_type,
4234 or one of its enclosing classes, and that type is a template,
4235 return the associated TEMPLATE_DECL. Otherwise, the original
4236 DECL is returned. */
4238 tree
4239 maybe_get_template_decl_from_type_decl (tree decl)
4241 return (decl != NULL_TREE
4242 && TREE_CODE (decl) == TYPE_DECL
4243 && DECL_ARTIFICIAL (decl)
4244 && CLASS_TYPE_P (TREE_TYPE (decl))
4245 && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
4246 ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
4249 /* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of
4250 parameters, find the desired type.
4252 D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
4254 IN_DECL, if non-NULL, is the template declaration we are trying to
4255 instantiate.
4257 If ENTERING_SCOPE is nonzero, we are about to enter the scope of
4258 the class we are looking up.
4260 Issue error and warning messages under control of COMPLAIN.
4262 If the template class is really a local class in a template
4263 function, then the FUNCTION_CONTEXT is the function in which it is
4264 being instantiated.
4266 ??? Note that this function is currently called *twice* for each
4267 template-id: the first time from the parser, while creating the
4268 incomplete type (finish_template_type), and the second type during the
4269 real instantiation (instantiate_template_class). This is surely something
4270 that we want to avoid. It also causes some problems with argument
4271 coercion (see convert_nontype_argument for more information on this). */
4273 tree
4274 lookup_template_class (tree d1,
4275 tree arglist,
4276 tree in_decl,
4277 tree context,
4278 int entering_scope,
4279 tsubst_flags_t complain)
4281 tree template = NULL_TREE, parmlist;
4282 tree t;
4284 timevar_push (TV_NAME_LOOKUP);
4286 if (TREE_CODE (d1) == IDENTIFIER_NODE)
4288 tree value = innermost_non_namespace_value (d1);
4289 if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
4290 template = value;
4291 else
4293 if (context)
4294 push_decl_namespace (context);
4295 template = lookup_name (d1, /*prefer_type=*/0);
4296 template = maybe_get_template_decl_from_type_decl (template);
4297 if (context)
4298 pop_decl_namespace ();
4300 if (template)
4301 context = DECL_CONTEXT (template);
4303 else if (TREE_CODE (d1) == TYPE_DECL && IS_AGGR_TYPE (TREE_TYPE (d1)))
4305 tree type = TREE_TYPE (d1);
4307 /* If we are declaring a constructor, say A<T>::A<T>, we will get
4308 an implicit typename for the second A. Deal with it. */
4309 if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
4310 type = TREE_TYPE (type);
4312 if (CLASSTYPE_TEMPLATE_INFO (type))
4314 template = CLASSTYPE_TI_TEMPLATE (type);
4315 d1 = DECL_NAME (template);
4318 else if (TREE_CODE (d1) == ENUMERAL_TYPE
4319 || (TYPE_P (d1) && IS_AGGR_TYPE (d1)))
4321 template = TYPE_TI_TEMPLATE (d1);
4322 d1 = DECL_NAME (template);
4324 else if (TREE_CODE (d1) == TEMPLATE_DECL
4325 && TREE_CODE (DECL_TEMPLATE_RESULT (d1)) == TYPE_DECL)
4327 template = d1;
4328 d1 = DECL_NAME (template);
4329 context = DECL_CONTEXT (template);
4332 /* Issue an error message if we didn't find a template. */
4333 if (! template)
4335 if (complain & tf_error)
4336 error ("%qT is not a template", d1);
4337 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4340 if (TREE_CODE (template) != TEMPLATE_DECL
4341 /* Make sure it's a user visible template, if it was named by
4342 the user. */
4343 || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (template)
4344 && !PRIMARY_TEMPLATE_P (template)))
4346 if (complain & tf_error)
4348 error ("non-template type %qT used as a template", d1);
4349 if (in_decl)
4350 error ("for template declaration %q+D", in_decl);
4352 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4355 complain &= ~tf_user;
4357 if (DECL_TEMPLATE_TEMPLATE_PARM_P (template))
4359 /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
4360 template arguments */
4362 tree parm;
4363 tree arglist2;
4365 parmlist = DECL_INNERMOST_TEMPLATE_PARMS (template);
4367 /* Consider an example where a template template parameter declared as
4369 template <class T, class U = std::allocator<T> > class TT
4371 The template parameter level of T and U are one level larger than
4372 of TT. To proper process the default argument of U, say when an
4373 instantiation `TT<int>' is seen, we need to build the full
4374 arguments containing {int} as the innermost level. Outer levels,
4375 available when not appearing as default template argument, can be
4376 obtained from `current_template_args ()'.
4378 Suppose that TT is later substituted with std::vector. The above
4379 instantiation is `TT<int, std::allocator<T> >' with TT at
4380 level 1, and T at level 2, while the template arguments at level 1
4381 becomes {std::vector} and the inner level 2 is {int}. */
4383 if (current_template_parms)
4384 arglist = add_to_template_args (current_template_args (), arglist);
4386 arglist2 = coerce_template_parms (parmlist, arglist, template,
4387 complain, /*require_all_args=*/1);
4388 if (arglist2 == error_mark_node
4389 || (!uses_template_parms (arglist2)
4390 && check_instantiated_args (template, arglist2, complain)))
4391 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4393 parm = bind_template_template_parm (TREE_TYPE (template), arglist2);
4394 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, parm);
4396 else
4398 tree template_type = TREE_TYPE (template);
4399 tree gen_tmpl;
4400 tree type_decl;
4401 tree found = NULL_TREE;
4402 int arg_depth;
4403 int parm_depth;
4404 int is_partial_instantiation;
4406 gen_tmpl = most_general_template (template);
4407 parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
4408 parm_depth = TMPL_PARMS_DEPTH (parmlist);
4409 arg_depth = TMPL_ARGS_DEPTH (arglist);
4411 if (arg_depth == 1 && parm_depth > 1)
4413 /* We've been given an incomplete set of template arguments.
4414 For example, given:
4416 template <class T> struct S1 {
4417 template <class U> struct S2 {};
4418 template <class U> struct S2<U*> {};
4421 we will be called with an ARGLIST of `U*', but the
4422 TEMPLATE will be `template <class T> template
4423 <class U> struct S1<T>::S2'. We must fill in the missing
4424 arguments. */
4425 arglist
4426 = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (template)),
4427 arglist);
4428 arg_depth = TMPL_ARGS_DEPTH (arglist);
4431 /* Now we should have enough arguments. */
4432 gcc_assert (parm_depth == arg_depth);
4434 /* From here on, we're only interested in the most general
4435 template. */
4436 template = gen_tmpl;
4438 /* Calculate the BOUND_ARGS. These will be the args that are
4439 actually tsubst'd into the definition to create the
4440 instantiation. */
4441 if (parm_depth > 1)
4443 /* We have multiple levels of arguments to coerce, at once. */
4444 int i;
4445 int saved_depth = TMPL_ARGS_DEPTH (arglist);
4447 tree bound_args = make_tree_vec (parm_depth);
4449 for (i = saved_depth,
4450 t = DECL_TEMPLATE_PARMS (template);
4451 i > 0 && t != NULL_TREE;
4452 --i, t = TREE_CHAIN (t))
4454 tree a = coerce_template_parms (TREE_VALUE (t),
4455 arglist, template,
4456 complain, /*require_all_args=*/1);
4458 /* Don't process further if one of the levels fails. */
4459 if (a == error_mark_node)
4461 /* Restore the ARGLIST to its full size. */
4462 TREE_VEC_LENGTH (arglist) = saved_depth;
4463 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4466 SET_TMPL_ARGS_LEVEL (bound_args, i, a);
4468 /* We temporarily reduce the length of the ARGLIST so
4469 that coerce_template_parms will see only the arguments
4470 corresponding to the template parameters it is
4471 examining. */
4472 TREE_VEC_LENGTH (arglist)--;
4475 /* Restore the ARGLIST to its full size. */
4476 TREE_VEC_LENGTH (arglist) = saved_depth;
4478 arglist = bound_args;
4480 else
4481 arglist
4482 = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
4483 INNERMOST_TEMPLATE_ARGS (arglist),
4484 template,
4485 complain, /*require_all_args=*/1);
4487 if (arglist == error_mark_node)
4488 /* We were unable to bind the arguments. */
4489 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4491 /* In the scope of a template class, explicit references to the
4492 template class refer to the type of the template, not any
4493 instantiation of it. For example, in:
4495 template <class T> class C { void f(C<T>); }
4497 the `C<T>' is just the same as `C'. Outside of the
4498 class, however, such a reference is an instantiation. */
4499 if (comp_template_args (TYPE_TI_ARGS (template_type),
4500 arglist))
4502 found = template_type;
4504 if (!entering_scope && PRIMARY_TEMPLATE_P (template))
4506 tree ctx;
4508 for (ctx = current_class_type;
4509 ctx && TREE_CODE (ctx) != NAMESPACE_DECL;
4510 ctx = (TYPE_P (ctx)
4511 ? TYPE_CONTEXT (ctx)
4512 : DECL_CONTEXT (ctx)))
4513 if (TYPE_P (ctx) && same_type_p (ctx, template_type))
4514 goto found_ctx;
4516 /* We're not in the scope of the class, so the
4517 TEMPLATE_TYPE is not the type we want after all. */
4518 found = NULL_TREE;
4519 found_ctx:;
4522 if (found)
4523 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
4525 /* If we already have this specialization, return it. */
4526 found = retrieve_specialization (template, arglist,
4527 /*class_specializations_p=*/false);
4528 if (found)
4529 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
4531 /* This type is a "partial instantiation" if any of the template
4532 arguments still involve template parameters. Note that we set
4533 IS_PARTIAL_INSTANTIATION for partial specializations as
4534 well. */
4535 is_partial_instantiation = uses_template_parms (arglist);
4537 /* If the deduced arguments are invalid, then the binding
4538 failed. */
4539 if (!is_partial_instantiation
4540 && check_instantiated_args (template,
4541 INNERMOST_TEMPLATE_ARGS (arglist),
4542 complain))
4543 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4545 if (!is_partial_instantiation
4546 && !PRIMARY_TEMPLATE_P (template)
4547 && TREE_CODE (CP_DECL_CONTEXT (template)) == NAMESPACE_DECL)
4549 found = xref_tag_from_type (TREE_TYPE (template),
4550 DECL_NAME (template),
4551 /*tag_scope=*/ts_global);
4552 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
4555 context = tsubst (DECL_CONTEXT (template), arglist,
4556 complain, in_decl);
4557 if (!context)
4558 context = global_namespace;
4560 /* Create the type. */
4561 if (TREE_CODE (template_type) == ENUMERAL_TYPE)
4563 if (!is_partial_instantiation)
4565 set_current_access_from_decl (TYPE_NAME (template_type));
4566 t = start_enum (TYPE_IDENTIFIER (template_type));
4568 else
4569 /* We don't want to call start_enum for this type, since
4570 the values for the enumeration constants may involve
4571 template parameters. And, no one should be interested
4572 in the enumeration constants for such a type. */
4573 t = make_node (ENUMERAL_TYPE);
4575 else
4577 t = make_aggr_type (TREE_CODE (template_type));
4578 CLASSTYPE_DECLARED_CLASS (t)
4579 = CLASSTYPE_DECLARED_CLASS (template_type);
4580 SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
4581 TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
4583 /* A local class. Make sure the decl gets registered properly. */
4584 if (context == current_function_decl)
4585 pushtag (DECL_NAME (template), t, /*tag_scope=*/ts_current);
4588 /* If we called start_enum or pushtag above, this information
4589 will already be set up. */
4590 if (!TYPE_NAME (t))
4592 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
4594 type_decl = create_implicit_typedef (DECL_NAME (template), t);
4595 DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
4596 TYPE_STUB_DECL (t) = type_decl;
4597 DECL_SOURCE_LOCATION (type_decl)
4598 = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
4600 else
4601 type_decl = TYPE_NAME (t);
4603 TREE_PRIVATE (type_decl)
4604 = TREE_PRIVATE (TYPE_STUB_DECL (template_type));
4605 TREE_PROTECTED (type_decl)
4606 = TREE_PROTECTED (TYPE_STUB_DECL (template_type));
4607 DECL_IN_SYSTEM_HEADER (type_decl)
4608 = DECL_IN_SYSTEM_HEADER (template);
4610 /* Set up the template information. We have to figure out which
4611 template is the immediate parent if this is a full
4612 instantiation. */
4613 if (parm_depth == 1 || is_partial_instantiation
4614 || !PRIMARY_TEMPLATE_P (template))
4615 /* This case is easy; there are no member templates involved. */
4616 found = template;
4617 else
4619 /* This is a full instantiation of a member template. Look
4620 for a partial instantiation of which this is an instance. */
4622 for (found = DECL_TEMPLATE_INSTANTIATIONS (template);
4623 found; found = TREE_CHAIN (found))
4625 int success;
4626 tree tmpl = CLASSTYPE_TI_TEMPLATE (TREE_VALUE (found));
4628 /* We only want partial instantiations, here, not
4629 specializations or full instantiations. */
4630 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_VALUE (found))
4631 || !uses_template_parms (TREE_VALUE (found)))
4632 continue;
4634 /* Temporarily reduce by one the number of levels in the
4635 ARGLIST and in FOUND so as to avoid comparing the
4636 last set of arguments. */
4637 TREE_VEC_LENGTH (arglist)--;
4638 TREE_VEC_LENGTH (TREE_PURPOSE (found)) --;
4640 /* See if the arguments match. If they do, then TMPL is
4641 the partial instantiation we want. */
4642 success = comp_template_args (TREE_PURPOSE (found), arglist);
4644 /* Restore the argument vectors to their full size. */
4645 TREE_VEC_LENGTH (arglist)++;
4646 TREE_VEC_LENGTH (TREE_PURPOSE (found))++;
4648 if (success)
4650 found = tmpl;
4651 break;
4655 if (!found)
4657 /* There was no partial instantiation. This happens
4658 where C<T> is a member template of A<T> and it's used
4659 in something like
4661 template <typename T> struct B { A<T>::C<int> m; };
4662 B<float>;
4664 Create the partial instantiation.
4666 TREE_VEC_LENGTH (arglist)--;
4667 found = tsubst (template, arglist, complain, NULL_TREE);
4668 TREE_VEC_LENGTH (arglist)++;
4672 SET_TYPE_TEMPLATE_INFO (t, tree_cons (found, arglist, NULL_TREE));
4673 DECL_TEMPLATE_INSTANTIATIONS (template)
4674 = tree_cons (arglist, t,
4675 DECL_TEMPLATE_INSTANTIATIONS (template));
4677 if (TREE_CODE (t) == ENUMERAL_TYPE
4678 && !is_partial_instantiation)
4679 /* Now that the type has been registered on the instantiations
4680 list, we set up the enumerators. Because the enumeration
4681 constants may involve the enumeration type itself, we make
4682 sure to register the type first, and then create the
4683 constants. That way, doing tsubst_expr for the enumeration
4684 constants won't result in recursive calls here; we'll find
4685 the instantiation and exit above. */
4686 tsubst_enum (template_type, t, arglist);
4688 /* Reset the name of the type, now that CLASSTYPE_TEMPLATE_INFO
4689 is set up. */
4690 if (TREE_CODE (t) != ENUMERAL_TYPE)
4691 DECL_NAME (type_decl) = classtype_mangled_name (t);
4692 if (is_partial_instantiation)
4693 /* If the type makes use of template parameters, the
4694 code that generates debugging information will crash. */
4695 DECL_IGNORED_P (TYPE_STUB_DECL (t)) = 1;
4697 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
4699 timevar_pop (TV_NAME_LOOKUP);
4702 struct pair_fn_data
4704 tree_fn_t fn;
4705 void *data;
4706 struct pointer_set_t *visited;
4709 /* Called from for_each_template_parm via walk_tree. */
4711 static tree
4712 for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
4714 tree t = *tp;
4715 struct pair_fn_data *pfd = (struct pair_fn_data *) d;
4716 tree_fn_t fn = pfd->fn;
4717 void *data = pfd->data;
4719 if (TYPE_P (t)
4720 && for_each_template_parm (TYPE_CONTEXT (t), fn, data, pfd->visited))
4721 return error_mark_node;
4723 switch (TREE_CODE (t))
4725 case RECORD_TYPE:
4726 if (TYPE_PTRMEMFUNC_P (t))
4727 break;
4728 /* Fall through. */
4730 case UNION_TYPE:
4731 case ENUMERAL_TYPE:
4732 if (!TYPE_TEMPLATE_INFO (t))
4733 *walk_subtrees = 0;
4734 else if (for_each_template_parm (TREE_VALUE (TYPE_TEMPLATE_INFO (t)),
4735 fn, data, pfd->visited))
4736 return error_mark_node;
4737 break;
4739 case METHOD_TYPE:
4740 /* Since we're not going to walk subtrees, we have to do this
4741 explicitly here. */
4742 if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data,
4743 pfd->visited))
4744 return error_mark_node;
4745 /* Fall through. */
4747 case FUNCTION_TYPE:
4748 /* Check the return type. */
4749 if (for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited))
4750 return error_mark_node;
4752 /* Check the parameter types. Since default arguments are not
4753 instantiated until they are needed, the TYPE_ARG_TYPES may
4754 contain expressions that involve template parameters. But,
4755 no-one should be looking at them yet. And, once they're
4756 instantiated, they don't contain template parameters, so
4757 there's no point in looking at them then, either. */
4759 tree parm;
4761 for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
4762 if (for_each_template_parm (TREE_VALUE (parm), fn, data,
4763 pfd->visited))
4764 return error_mark_node;
4766 /* Since we've already handled the TYPE_ARG_TYPES, we don't
4767 want walk_tree walking into them itself. */
4768 *walk_subtrees = 0;
4770 break;
4772 case TYPEOF_TYPE:
4773 if (for_each_template_parm (TYPE_FIELDS (t), fn, data,
4774 pfd->visited))
4775 return error_mark_node;
4776 break;
4778 case FUNCTION_DECL:
4779 case VAR_DECL:
4780 if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
4781 && for_each_template_parm (DECL_TI_ARGS (t), fn, data,
4782 pfd->visited))
4783 return error_mark_node;
4784 /* Fall through. */
4786 case PARM_DECL:
4787 case CONST_DECL:
4788 if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t)
4789 && for_each_template_parm (DECL_INITIAL (t), fn, data,
4790 pfd->visited))
4791 return error_mark_node;
4792 if (DECL_CONTEXT (t)
4793 && for_each_template_parm (DECL_CONTEXT (t), fn, data,
4794 pfd->visited))
4795 return error_mark_node;
4796 break;
4798 case BOUND_TEMPLATE_TEMPLATE_PARM:
4799 /* Record template parameters such as `T' inside `TT<T>'. */
4800 if (for_each_template_parm (TYPE_TI_ARGS (t), fn, data, pfd->visited))
4801 return error_mark_node;
4802 /* Fall through. */
4804 case TEMPLATE_TEMPLATE_PARM:
4805 case TEMPLATE_TYPE_PARM:
4806 case TEMPLATE_PARM_INDEX:
4807 if (fn && (*fn)(t, data))
4808 return error_mark_node;
4809 else if (!fn)
4810 return error_mark_node;
4811 break;
4813 case TEMPLATE_DECL:
4814 /* A template template parameter is encountered. */
4815 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
4816 && for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited))
4817 return error_mark_node;
4819 /* Already substituted template template parameter */
4820 *walk_subtrees = 0;
4821 break;
4823 case TYPENAME_TYPE:
4824 if (!fn
4825 || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn,
4826 data, pfd->visited))
4827 return error_mark_node;
4828 break;
4830 case CONSTRUCTOR:
4831 if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
4832 && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
4833 (TREE_TYPE (t)), fn, data,
4834 pfd->visited))
4835 return error_mark_node;
4836 break;
4838 case INDIRECT_REF:
4839 case COMPONENT_REF:
4840 /* If there's no type, then this thing must be some expression
4841 involving template parameters. */
4842 if (!fn && !TREE_TYPE (t))
4843 return error_mark_node;
4844 break;
4846 case MODOP_EXPR:
4847 case CAST_EXPR:
4848 case REINTERPRET_CAST_EXPR:
4849 case CONST_CAST_EXPR:
4850 case STATIC_CAST_EXPR:
4851 case DYNAMIC_CAST_EXPR:
4852 case ARROW_EXPR:
4853 case DOTSTAR_EXPR:
4854 case TYPEID_EXPR:
4855 case PSEUDO_DTOR_EXPR:
4856 if (!fn)
4857 return error_mark_node;
4858 break;
4860 case BASELINK:
4861 /* If we do not handle this case specially, we end up walking
4862 the BINFO hierarchy, which is circular, and therefore
4863 confuses walk_tree. */
4864 *walk_subtrees = 0;
4865 if (for_each_template_parm (BASELINK_FUNCTIONS (*tp), fn, data,
4866 pfd->visited))
4867 return error_mark_node;
4868 break;
4870 default:
4871 break;
4874 /* We didn't find any template parameters we liked. */
4875 return NULL_TREE;
4878 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
4879 BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
4880 call FN with the parameter and the DATA.
4881 If FN returns nonzero, the iteration is terminated, and
4882 for_each_template_parm returns 1. Otherwise, the iteration
4883 continues. If FN never returns a nonzero value, the value
4884 returned by for_each_template_parm is 0. If FN is NULL, it is
4885 considered to be the function which always returns 1. */
4887 static int
4888 for_each_template_parm (tree t, tree_fn_t fn, void* data,
4889 struct pointer_set_t *visited)
4891 struct pair_fn_data pfd;
4892 int result;
4894 /* Set up. */
4895 pfd.fn = fn;
4896 pfd.data = data;
4898 /* Walk the tree. (Conceptually, we would like to walk without
4899 duplicates, but for_each_template_parm_r recursively calls
4900 for_each_template_parm, so we would need to reorganize a fair
4901 bit to use walk_tree_without_duplicates, so we keep our own
4902 visited list.) */
4903 if (visited)
4904 pfd.visited = visited;
4905 else
4906 pfd.visited = pointer_set_create ();
4907 result = walk_tree (&t,
4908 for_each_template_parm_r,
4909 &pfd,
4910 pfd.visited) != NULL_TREE;
4912 /* Clean up. */
4913 if (!visited)
4915 pointer_set_destroy (pfd.visited);
4916 pfd.visited = 0;
4919 return result;
4922 /* Returns true if T depends on any template parameter. */
4925 uses_template_parms (tree t)
4927 bool dependent_p;
4928 int saved_processing_template_decl;
4930 saved_processing_template_decl = processing_template_decl;
4931 if (!saved_processing_template_decl)
4932 processing_template_decl = 1;
4933 if (TYPE_P (t))
4934 dependent_p = dependent_type_p (t);
4935 else if (TREE_CODE (t) == TREE_VEC)
4936 dependent_p = any_dependent_template_arguments_p (t);
4937 else if (TREE_CODE (t) == TREE_LIST)
4938 dependent_p = (uses_template_parms (TREE_VALUE (t))
4939 || uses_template_parms (TREE_CHAIN (t)));
4940 else if (DECL_P (t)
4941 || EXPR_P (t)
4942 || TREE_CODE (t) == TEMPLATE_PARM_INDEX
4943 || TREE_CODE (t) == OVERLOAD
4944 || TREE_CODE (t) == BASELINK
4945 || CONSTANT_CLASS_P (t))
4946 dependent_p = (type_dependent_expression_p (t)
4947 || value_dependent_expression_p (t));
4948 else
4950 gcc_assert (t == error_mark_node);
4951 dependent_p = false;
4954 processing_template_decl = saved_processing_template_decl;
4956 return dependent_p;
4959 /* Returns true if T depends on any template parameter with level LEVEL. */
4962 uses_template_parms_level (tree t, int level)
4964 return for_each_template_parm (t, template_parm_this_level_p, &level, NULL);
4967 static int tinst_depth;
4968 extern int max_tinst_depth;
4969 #ifdef GATHER_STATISTICS
4970 int depth_reached;
4971 #endif
4972 static int tinst_level_tick;
4973 static int last_template_error_tick;
4975 /* We're starting to instantiate D; record the template instantiation context
4976 for diagnostics and to restore it later. */
4979 push_tinst_level (tree d)
4981 tree new;
4983 if (tinst_depth >= max_tinst_depth)
4985 /* If the instantiation in question still has unbound template parms,
4986 we don't really care if we can't instantiate it, so just return.
4987 This happens with base instantiation for implicit `typename'. */
4988 if (uses_template_parms (d))
4989 return 0;
4991 last_template_error_tick = tinst_level_tick;
4992 error ("template instantiation depth exceeds maximum of %d (use "
4993 "-ftemplate-depth-NN to increase the maximum) instantiating %qD",
4994 max_tinst_depth, d);
4996 print_instantiation_context ();
4998 return 0;
5001 new = make_node (TINST_LEVEL);
5002 TINST_DECL (new) = d;
5003 TINST_LOCATION (new) = input_location;
5004 TINST_IN_SYSTEM_HEADER_P (new) = in_system_header;
5005 TREE_CHAIN (new) = current_tinst_level;
5006 current_tinst_level = new;
5008 ++tinst_depth;
5009 #ifdef GATHER_STATISTICS
5010 if (tinst_depth > depth_reached)
5011 depth_reached = tinst_depth;
5012 #endif
5014 ++tinst_level_tick;
5015 return 1;
5018 /* We're done instantiating this template; return to the instantiation
5019 context. */
5021 void
5022 pop_tinst_level (void)
5024 tree old = current_tinst_level;
5026 /* Restore the filename and line number stashed away when we started
5027 this instantiation. */
5028 input_location = TINST_LOCATION (old);
5029 in_system_header = TINST_IN_SYSTEM_HEADER_P (old);
5030 current_tinst_level = TREE_CHAIN (old);
5031 --tinst_depth;
5032 ++tinst_level_tick;
5035 /* We're instantiating a deferred template; restore the template
5036 instantiation context in which the instantiation was requested, which
5037 is one step out from LEVEL. */
5039 static void
5040 reopen_tinst_level (tree level)
5042 tree t;
5044 tinst_depth = 0;
5045 for (t = level; t; t = TREE_CHAIN (t))
5046 ++tinst_depth;
5048 current_tinst_level = level;
5049 pop_tinst_level ();
5052 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL. ARGS is the
5053 vector of template arguments, as for tsubst.
5055 Returns an appropriate tsubst'd friend declaration. */
5057 static tree
5058 tsubst_friend_function (tree decl, tree args)
5060 tree new_friend;
5062 if (TREE_CODE (decl) == FUNCTION_DECL
5063 && DECL_TEMPLATE_INSTANTIATION (decl)
5064 && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
5065 /* This was a friend declared with an explicit template
5066 argument list, e.g.:
5068 friend void f<>(T);
5070 to indicate that f was a template instantiation, not a new
5071 function declaration. Now, we have to figure out what
5072 instantiation of what template. */
5074 tree template_id, arglist, fns;
5075 tree new_args;
5076 tree tmpl;
5077 tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
5079 /* Friend functions are looked up in the containing namespace scope.
5080 We must enter that scope, to avoid finding member functions of the
5081 current cless with same name. */
5082 push_nested_namespace (ns);
5083 fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
5084 tf_error | tf_warning, NULL_TREE);
5085 pop_nested_namespace (ns);
5086 arglist = tsubst (DECL_TI_ARGS (decl), args,
5087 tf_error | tf_warning, NULL_TREE);
5088 template_id = lookup_template_function (fns, arglist);
5090 new_friend = tsubst (decl, args, tf_error | tf_warning, NULL_TREE);
5091 tmpl = determine_specialization (template_id, new_friend,
5092 &new_args,
5093 /*need_member_template=*/0,
5094 TREE_VEC_LENGTH (args));
5095 return instantiate_template (tmpl, new_args, tf_error);
5098 new_friend = tsubst (decl, args, tf_error | tf_warning, NULL_TREE);
5100 /* The NEW_FRIEND will look like an instantiation, to the
5101 compiler, but is not an instantiation from the point of view of
5102 the language. For example, we might have had:
5104 template <class T> struct S {
5105 template <class U> friend void f(T, U);
5108 Then, in S<int>, template <class U> void f(int, U) is not an
5109 instantiation of anything. */
5110 if (new_friend == error_mark_node)
5111 return error_mark_node;
5113 DECL_USE_TEMPLATE (new_friend) = 0;
5114 if (TREE_CODE (decl) == TEMPLATE_DECL)
5116 DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
5117 DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
5118 = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
5121 /* The mangled name for the NEW_FRIEND is incorrect. The function
5122 is not a template instantiation and should not be mangled like
5123 one. Therefore, we forget the mangling here; we'll recompute it
5124 later if we need it. */
5125 if (TREE_CODE (new_friend) != TEMPLATE_DECL)
5127 SET_DECL_RTL (new_friend, NULL_RTX);
5128 SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
5131 if (DECL_NAMESPACE_SCOPE_P (new_friend))
5133 tree old_decl;
5134 tree new_friend_template_info;
5135 tree new_friend_result_template_info;
5136 tree ns;
5137 int new_friend_is_defn;
5139 /* We must save some information from NEW_FRIEND before calling
5140 duplicate decls since that function will free NEW_FRIEND if
5141 possible. */
5142 new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
5143 new_friend_is_defn =
5144 (DECL_INITIAL (DECL_TEMPLATE_RESULT
5145 (template_for_substitution (new_friend)))
5146 != NULL_TREE);
5147 if (TREE_CODE (new_friend) == TEMPLATE_DECL)
5149 /* This declaration is a `primary' template. */
5150 DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
5152 new_friend_result_template_info
5153 = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
5155 else
5156 new_friend_result_template_info = NULL_TREE;
5158 /* Inside pushdecl_namespace_level, we will push into the
5159 current namespace. However, the friend function should go
5160 into the namespace of the template. */
5161 ns = decl_namespace_context (new_friend);
5162 push_nested_namespace (ns);
5163 old_decl = pushdecl_namespace_level (new_friend);
5164 pop_nested_namespace (ns);
5166 if (old_decl != new_friend)
5168 /* This new friend declaration matched an existing
5169 declaration. For example, given:
5171 template <class T> void f(T);
5172 template <class U> class C {
5173 template <class T> friend void f(T) {}
5176 the friend declaration actually provides the definition
5177 of `f', once C has been instantiated for some type. So,
5178 old_decl will be the out-of-class template declaration,
5179 while new_friend is the in-class definition.
5181 But, if `f' was called before this point, the
5182 instantiation of `f' will have DECL_TI_ARGS corresponding
5183 to `T' but not to `U', references to which might appear
5184 in the definition of `f'. Previously, the most general
5185 template for an instantiation of `f' was the out-of-class
5186 version; now it is the in-class version. Therefore, we
5187 run through all specialization of `f', adding to their
5188 DECL_TI_ARGS appropriately. In particular, they need a
5189 new set of outer arguments, corresponding to the
5190 arguments for this class instantiation.
5192 The same situation can arise with something like this:
5194 friend void f(int);
5195 template <class T> class C {
5196 friend void f(T) {}
5199 when `C<int>' is instantiated. Now, `f(int)' is defined
5200 in the class. */
5202 if (!new_friend_is_defn)
5203 /* On the other hand, if the in-class declaration does
5204 *not* provide a definition, then we don't want to alter
5205 existing definitions. We can just leave everything
5206 alone. */
5208 else
5210 /* Overwrite whatever template info was there before, if
5211 any, with the new template information pertaining to
5212 the declaration. */
5213 DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
5215 if (TREE_CODE (old_decl) != TEMPLATE_DECL)
5216 reregister_specialization (new_friend,
5217 most_general_template (old_decl),
5218 old_decl);
5219 else
5221 tree t;
5222 tree new_friend_args;
5224 DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
5225 = new_friend_result_template_info;
5227 new_friend_args = TI_ARGS (new_friend_template_info);
5228 for (t = DECL_TEMPLATE_SPECIALIZATIONS (old_decl);
5229 t != NULL_TREE;
5230 t = TREE_CHAIN (t))
5232 tree spec = TREE_VALUE (t);
5234 DECL_TI_ARGS (spec)
5235 = add_outermost_template_args (new_friend_args,
5236 DECL_TI_ARGS (spec));
5239 /* Now, since specializations are always supposed to
5240 hang off of the most general template, we must move
5241 them. */
5242 t = most_general_template (old_decl);
5243 if (t != old_decl)
5245 DECL_TEMPLATE_SPECIALIZATIONS (t)
5246 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (t),
5247 DECL_TEMPLATE_SPECIALIZATIONS (old_decl));
5248 DECL_TEMPLATE_SPECIALIZATIONS (old_decl) = NULL_TREE;
5253 /* The information from NEW_FRIEND has been merged into OLD_DECL
5254 by duplicate_decls. */
5255 new_friend = old_decl;
5258 else
5260 tree context = DECL_CONTEXT (new_friend);
5261 bool dependent_p;
5263 /* In the code
5264 template <class T> class C {
5265 template <class U> friend void C1<U>::f (); // case 1
5266 friend void C2<T>::f (); // case 2
5268 we only need to make sure CONTEXT is a complete type for
5269 case 2. To distinguish between the two cases, we note that
5270 CONTEXT of case 1 remains dependent type after tsubst while
5271 this isn't true for case 2. */
5272 ++processing_template_decl;
5273 dependent_p = dependent_type_p (context);
5274 --processing_template_decl;
5276 if (!dependent_p
5277 && !complete_type_or_else (context, NULL_TREE))
5278 return error_mark_node;
5280 if (COMPLETE_TYPE_P (context))
5282 /* Check to see that the declaration is really present, and,
5283 possibly obtain an improved declaration. */
5284 tree fn = check_classfn (context,
5285 new_friend, NULL_TREE);
5287 if (fn)
5288 new_friend = fn;
5292 return new_friend;
5295 /* FRIEND_TMPL is a friend TEMPLATE_DECL. ARGS is the vector of
5296 template arguments, as for tsubst.
5298 Returns an appropriate tsubst'd friend type or error_mark_node on
5299 failure. */
5301 static tree
5302 tsubst_friend_class (tree friend_tmpl, tree args)
5304 tree friend_type;
5305 tree tmpl;
5306 tree context;
5308 context = DECL_CONTEXT (friend_tmpl);
5310 if (context)
5312 if (TREE_CODE (context) == NAMESPACE_DECL)
5313 push_nested_namespace (context);
5314 else
5315 push_nested_class (tsubst (context, args, tf_none, NULL_TREE));
5318 /* First, we look for a class template. */
5319 tmpl = lookup_name (DECL_NAME (friend_tmpl), /*prefer_type=*/0);
5321 /* But, if we don't find one, it might be because we're in a
5322 situation like this:
5324 template <class T>
5325 struct S {
5326 template <class U>
5327 friend struct S;
5330 Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
5331 for `S<int>', not the TEMPLATE_DECL. */
5332 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
5334 tmpl = lookup_name (DECL_NAME (friend_tmpl), /*prefer_type=*/1);
5335 tmpl = maybe_get_template_decl_from_type_decl (tmpl);
5338 if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
5340 /* The friend template has already been declared. Just
5341 check to see that the declarations match, and install any new
5342 default parameters. We must tsubst the default parameters,
5343 of course. We only need the innermost template parameters
5344 because that is all that redeclare_class_template will look
5345 at. */
5346 if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
5347 > TMPL_ARGS_DEPTH (args))
5349 tree parms;
5350 parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
5351 args, tf_error | tf_warning);
5352 redeclare_class_template (TREE_TYPE (tmpl), parms);
5355 friend_type = TREE_TYPE (tmpl);
5357 else
5359 /* The friend template has not already been declared. In this
5360 case, the instantiation of the template class will cause the
5361 injection of this template into the global scope. */
5362 tmpl = tsubst (friend_tmpl, args, tf_error | tf_warning, NULL_TREE);
5364 /* The new TMPL is not an instantiation of anything, so we
5365 forget its origins. We don't reset CLASSTYPE_TI_TEMPLATE for
5366 the new type because that is supposed to be the corresponding
5367 template decl, i.e., TMPL. */
5368 DECL_USE_TEMPLATE (tmpl) = 0;
5369 DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
5370 CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
5371 CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
5372 = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
5374 /* Inject this template into the global scope. */
5375 friend_type = TREE_TYPE (pushdecl_top_level (tmpl));
5378 if (context)
5380 if (TREE_CODE (context) == NAMESPACE_DECL)
5381 pop_nested_namespace (context);
5382 else
5383 pop_nested_class ();
5386 return friend_type;
5389 /* Returns zero if TYPE cannot be completed later due to circularity.
5390 Otherwise returns one. */
5392 static int
5393 can_complete_type_without_circularity (tree type)
5395 if (type == NULL_TREE || type == error_mark_node)
5396 return 0;
5397 else if (COMPLETE_TYPE_P (type))
5398 return 1;
5399 else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
5400 return can_complete_type_without_circularity (TREE_TYPE (type));
5401 else if (CLASS_TYPE_P (type)
5402 && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
5403 return 0;
5404 else
5405 return 1;
5408 tree
5409 instantiate_class_template (tree type)
5411 tree template, args, pattern, t, member;
5412 tree typedecl;
5413 tree pbinfo;
5414 tree base_list;
5416 if (type == error_mark_node)
5417 return error_mark_node;
5419 if (TYPE_BEING_DEFINED (type)
5420 || COMPLETE_TYPE_P (type)
5421 || dependent_type_p (type))
5422 return type;
5424 /* Figure out which template is being instantiated. */
5425 template = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
5426 gcc_assert (TREE_CODE (template) == TEMPLATE_DECL);
5428 /* Figure out which arguments are being used to do the
5429 instantiation. */
5430 args = CLASSTYPE_TI_ARGS (type);
5432 /* Determine what specialization of the original template to
5433 instantiate. */
5434 t = most_specialized_class (template, args);
5435 if (t == error_mark_node)
5437 const char *str = "candidates are:";
5438 error ("ambiguous class template instantiation for %q#T", type);
5439 for (t = DECL_TEMPLATE_SPECIALIZATIONS (template); t;
5440 t = TREE_CHAIN (t))
5442 if (get_class_bindings (TREE_VALUE (t), TREE_PURPOSE (t), args))
5444 error ("%s %+#T", str, TREE_TYPE (t));
5445 str = " ";
5448 TYPE_BEING_DEFINED (type) = 1;
5449 return error_mark_node;
5452 if (t)
5453 pattern = TREE_TYPE (t);
5454 else
5455 pattern = TREE_TYPE (template);
5457 /* If the template we're instantiating is incomplete, then clearly
5458 there's nothing we can do. */
5459 if (!COMPLETE_TYPE_P (pattern))
5460 return type;
5462 /* If we've recursively instantiated too many templates, stop. */
5463 if (! push_tinst_level (type))
5464 return type;
5466 /* Now we're really doing the instantiation. Mark the type as in
5467 the process of being defined. */
5468 TYPE_BEING_DEFINED (type) = 1;
5470 /* We may be in the middle of deferred access check. Disable
5471 it now. */
5472 push_deferring_access_checks (dk_no_deferred);
5474 push_to_top_level ();
5476 if (t)
5478 /* This TYPE is actually an instantiation of a partial
5479 specialization. We replace the innermost set of ARGS with
5480 the arguments appropriate for substitution. For example,
5481 given:
5483 template <class T> struct S {};
5484 template <class T> struct S<T*> {};
5486 and supposing that we are instantiating S<int*>, ARGS will
5487 present be {int*} but we need {int}. */
5488 tree inner_args
5489 = get_class_bindings (TREE_VALUE (t), TREE_PURPOSE (t),
5490 args);
5492 /* If there were multiple levels in ARGS, replacing the
5493 innermost level would alter CLASSTYPE_TI_ARGS, which we don't
5494 want, so we make a copy first. */
5495 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
5497 args = copy_node (args);
5498 SET_TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args), inner_args);
5500 else
5501 args = inner_args;
5504 SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
5506 /* Set the input location to the template definition. This is needed
5507 if tsubsting causes an error. */
5508 typedecl = TYPE_MAIN_DECL (type);
5509 input_location = DECL_SOURCE_LOCATION (typedecl);
5510 in_system_header = DECL_IN_SYSTEM_HEADER (typedecl);
5512 TYPE_HAS_CONSTRUCTOR (type) = TYPE_HAS_CONSTRUCTOR (pattern);
5513 TYPE_HAS_NEW_OPERATOR (type) = TYPE_HAS_NEW_OPERATOR (pattern);
5514 TYPE_HAS_ARRAY_NEW_OPERATOR (type) = TYPE_HAS_ARRAY_NEW_OPERATOR (pattern);
5515 TYPE_GETS_DELETE (type) = TYPE_GETS_DELETE (pattern);
5516 TYPE_HAS_ASSIGN_REF (type) = TYPE_HAS_ASSIGN_REF (pattern);
5517 TYPE_HAS_CONST_ASSIGN_REF (type) = TYPE_HAS_CONST_ASSIGN_REF (pattern);
5518 TYPE_HAS_INIT_REF (type) = TYPE_HAS_INIT_REF (pattern);
5519 TYPE_HAS_CONST_INIT_REF (type) = TYPE_HAS_CONST_INIT_REF (pattern);
5520 TYPE_HAS_DEFAULT_CONSTRUCTOR (type) = TYPE_HAS_DEFAULT_CONSTRUCTOR (pattern);
5521 TYPE_HAS_CONVERSION (type) = TYPE_HAS_CONVERSION (pattern);
5522 TYPE_PACKED (type) = TYPE_PACKED (pattern);
5523 TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
5524 TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
5525 TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
5526 if (ANON_AGGR_TYPE_P (pattern))
5527 SET_ANON_AGGR_TYPE_P (type);
5529 pbinfo = TYPE_BINFO (pattern);
5531 /* We should never instantiate a nested class before its enclosing
5532 class; we need to look up the nested class by name before we can
5533 instantiate it, and that lookup should instantiate the enclosing
5534 class. */
5535 gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
5536 || COMPLETE_TYPE_P (TYPE_CONTEXT (type))
5537 || TYPE_BEING_DEFINED (TYPE_CONTEXT (type)));
5539 base_list = NULL_TREE;
5540 if (BINFO_N_BASE_BINFOS (pbinfo))
5542 tree pbase_binfo;
5543 tree context = TYPE_CONTEXT (type);
5544 tree pushed_scope;
5545 int i;
5547 /* We must enter the scope containing the type, as that is where
5548 the accessibility of types named in dependent bases are
5549 looked up from. */
5550 pushed_scope = push_scope (context ? context : global_namespace);
5552 /* Substitute into each of the bases to determine the actual
5553 basetypes. */
5554 for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
5556 tree base;
5557 tree access = BINFO_BASE_ACCESS (pbinfo, i);
5559 /* Substitute to figure out the base class. */
5560 base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error, NULL_TREE);
5561 if (base == error_mark_node)
5562 continue;
5564 base_list = tree_cons (access, base, base_list);
5565 if (BINFO_VIRTUAL_P (pbase_binfo))
5566 TREE_TYPE (base_list) = integer_type_node;
5569 /* The list is now in reverse order; correct that. */
5570 base_list = nreverse (base_list);
5572 if (pushed_scope)
5573 pop_scope (pushed_scope);
5575 /* Now call xref_basetypes to set up all the base-class
5576 information. */
5577 xref_basetypes (type, base_list);
5580 /* Now that our base classes are set up, enter the scope of the
5581 class, so that name lookups into base classes, etc. will work
5582 correctly. This is precisely analogous to what we do in
5583 begin_class_definition when defining an ordinary non-template
5584 class. */
5585 pushclass (type);
5587 /* Now members are processed in the order of declaration. */
5588 for (member = CLASSTYPE_DECL_LIST (pattern);
5589 member; member = TREE_CHAIN (member))
5591 tree t = TREE_VALUE (member);
5593 if (TREE_PURPOSE (member))
5595 if (TYPE_P (t))
5597 /* Build new CLASSTYPE_NESTED_UTDS. */
5599 tree tag = t;
5600 tree name = TYPE_IDENTIFIER (tag);
5601 tree newtag;
5602 bool class_template_p;
5604 class_template_p = (TREE_CODE (tag) != ENUMERAL_TYPE
5605 && TYPE_LANG_SPECIFIC (tag)
5606 && CLASSTYPE_IS_TEMPLATE (tag));
5607 /* If the member is a class template, then -- even after
5608 substitution -- there may be dependent types in the
5609 template argument list for the class. We increment
5610 PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
5611 that function will assume that no types are dependent
5612 when outside of a template. */
5613 if (class_template_p)
5614 ++processing_template_decl;
5615 newtag = tsubst (tag, args, tf_error, NULL_TREE);
5616 if (class_template_p)
5617 --processing_template_decl;
5618 if (newtag == error_mark_node)
5619 continue;
5621 if (TREE_CODE (newtag) != ENUMERAL_TYPE)
5623 if (class_template_p)
5624 /* Unfortunately, lookup_template_class sets
5625 CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
5626 instantiation (i.e., for the type of a member
5627 template class nested within a template class.)
5628 This behavior is required for
5629 maybe_process_partial_specialization to work
5630 correctly, but is not accurate in this case;
5631 the TAG is not an instantiation of anything.
5632 (The corresponding TEMPLATE_DECL is an
5633 instantiation, but the TYPE is not.) */
5634 CLASSTYPE_USE_TEMPLATE (newtag) = 0;
5636 /* Now, we call pushtag to put this NEWTAG into the scope of
5637 TYPE. We first set up the IDENTIFIER_TYPE_VALUE to avoid
5638 pushtag calling push_template_decl. We don't have to do
5639 this for enums because it will already have been done in
5640 tsubst_enum. */
5641 if (name)
5642 SET_IDENTIFIER_TYPE_VALUE (name, newtag);
5643 pushtag (name, newtag, /*tag_scope=*/ts_current);
5646 else if (TREE_CODE (t) == FUNCTION_DECL
5647 || DECL_FUNCTION_TEMPLATE_P (t))
5649 /* Build new TYPE_METHODS. */
5650 tree r;
5652 if (TREE_CODE (t) == TEMPLATE_DECL)
5653 ++processing_template_decl;
5654 r = tsubst (t, args, tf_error, NULL_TREE);
5655 if (TREE_CODE (t) == TEMPLATE_DECL)
5656 --processing_template_decl;
5657 set_current_access_from_decl (r);
5658 grok_special_member_properties (r);
5659 finish_member_declaration (r);
5661 else
5663 /* Build new TYPE_FIELDS. */
5665 if (TREE_CODE (t) != CONST_DECL)
5667 tree r;
5669 /* The the file and line for this declaration, to
5670 assist in error message reporting. Since we
5671 called push_tinst_level above, we don't need to
5672 restore these. */
5673 input_location = DECL_SOURCE_LOCATION (t);
5675 if (TREE_CODE (t) == TEMPLATE_DECL)
5676 ++processing_template_decl;
5677 r = tsubst (t, args, tf_error | tf_warning, NULL_TREE);
5678 if (TREE_CODE (t) == TEMPLATE_DECL)
5679 --processing_template_decl;
5680 if (TREE_CODE (r) == VAR_DECL)
5682 tree init;
5684 if (DECL_INITIALIZED_IN_CLASS_P (r))
5685 init = tsubst_expr (DECL_INITIAL (t), args,
5686 tf_error | tf_warning, NULL_TREE);
5687 else
5688 init = NULL_TREE;
5690 finish_static_data_member_decl
5691 (r, init, /*asmspec_tree=*/NULL_TREE, /*flags=*/0);
5693 if (DECL_INITIALIZED_IN_CLASS_P (r))
5694 check_static_variable_definition (r, TREE_TYPE (r));
5696 else if (TREE_CODE (r) == FIELD_DECL)
5698 /* Determine whether R has a valid type and can be
5699 completed later. If R is invalid, then it is
5700 replaced by error_mark_node so that it will not be
5701 added to TYPE_FIELDS. */
5702 tree rtype = TREE_TYPE (r);
5703 if (can_complete_type_without_circularity (rtype))
5704 complete_type (rtype);
5706 if (!COMPLETE_TYPE_P (rtype))
5708 cxx_incomplete_type_error (r, rtype);
5709 r = error_mark_node;
5713 /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
5714 such a thing will already have been added to the field
5715 list by tsubst_enum in finish_member_declaration in the
5716 CLASSTYPE_NESTED_UTDS case above. */
5717 if (!(TREE_CODE (r) == TYPE_DECL
5718 && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
5719 && DECL_ARTIFICIAL (r)))
5721 set_current_access_from_decl (r);
5722 finish_member_declaration (r);
5727 else
5729 if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t))
5731 /* Build new CLASSTYPE_FRIEND_CLASSES. */
5733 tree friend_type = t;
5734 bool adjust_processing_template_decl = false;
5736 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
5738 /* template <class T> friend class C; */
5739 friend_type = tsubst_friend_class (friend_type, args);
5740 adjust_processing_template_decl = true;
5742 else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
5744 /* template <class T> friend class C::D; */
5745 friend_type = tsubst (friend_type, args,
5746 tf_error | tf_warning, NULL_TREE);
5747 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
5748 friend_type = TREE_TYPE (friend_type);
5749 adjust_processing_template_decl = true;
5751 else if (TREE_CODE (friend_type) == TYPENAME_TYPE)
5753 /* This could be either
5755 friend class T::C;
5757 when dependent_type_p is false or
5759 template <class U> friend class T::C;
5761 otherwise. */
5762 friend_type = tsubst (friend_type, args,
5763 tf_error | tf_warning, NULL_TREE);
5764 /* Bump processing_template_decl for correct
5765 dependent_type_p calculation. */
5766 ++processing_template_decl;
5767 if (dependent_type_p (friend_type))
5768 adjust_processing_template_decl = true;
5769 --processing_template_decl;
5771 else if (!CLASSTYPE_USE_TEMPLATE (friend_type)
5772 && hidden_name_p (TYPE_NAME (friend_type)))
5774 /* friend class C;
5776 where C hasn't been declared yet. Let's lookup name
5777 from namespace scope directly, bypassing any name that
5778 come from dependent base class. */
5779 tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
5781 /* The call to xref_tag_from_type does injection for friend
5782 classes. */
5783 push_nested_namespace (ns);
5784 friend_type =
5785 xref_tag_from_type (friend_type, NULL_TREE,
5786 /*tag_scope=*/ts_current);
5787 pop_nested_namespace (ns);
5789 else if (uses_template_parms (friend_type))
5790 /* friend class C<T>; */
5791 friend_type = tsubst (friend_type, args,
5792 tf_error | tf_warning, NULL_TREE);
5793 /* Otherwise it's
5795 friend class C;
5797 where C is already declared or
5799 friend class C<int>;
5801 We don't have to do anything in these cases. */
5803 if (adjust_processing_template_decl)
5804 /* Trick make_friend_class into realizing that the friend
5805 we're adding is a template, not an ordinary class. It's
5806 important that we use make_friend_class since it will
5807 perform some error-checking and output cross-reference
5808 information. */
5809 ++processing_template_decl;
5811 if (friend_type != error_mark_node)
5812 make_friend_class (type, friend_type, /*complain=*/false);
5814 if (adjust_processing_template_decl)
5815 --processing_template_decl;
5817 else
5819 /* Build new DECL_FRIENDLIST. */
5820 tree r;
5822 /* The the file and line for this declaration, to
5823 assist in error message reporting. Since we
5824 called push_tinst_level above, we don't need to
5825 restore these. */
5826 input_location = DECL_SOURCE_LOCATION (t);
5828 if (TREE_CODE (t) == TEMPLATE_DECL)
5830 ++processing_template_decl;
5831 push_deferring_access_checks (dk_no_check);
5834 r = tsubst_friend_function (t, args);
5835 add_friend (type, r, /*complain=*/false);
5836 if (TREE_CODE (t) == TEMPLATE_DECL)
5838 pop_deferring_access_checks ();
5839 --processing_template_decl;
5845 /* Set the file and line number information to whatever is given for
5846 the class itself. This puts error messages involving generated
5847 implicit functions at a predictable point, and the same point
5848 that would be used for non-template classes. */
5849 input_location = DECL_SOURCE_LOCATION (typedecl);
5851 unreverse_member_declarations (type);
5852 finish_struct_1 (type);
5853 TYPE_BEING_DEFINED (type) = 0;
5855 /* Now that the class is complete, instantiate default arguments for
5856 any member functions. We don't do this earlier because the
5857 default arguments may reference members of the class. */
5858 if (!PRIMARY_TEMPLATE_P (template))
5859 for (t = TYPE_METHODS (type); t; t = TREE_CHAIN (t))
5860 if (TREE_CODE (t) == FUNCTION_DECL
5861 /* Implicitly generated member functions will not have template
5862 information; they are not instantiations, but instead are
5863 created "fresh" for each instantiation. */
5864 && DECL_TEMPLATE_INFO (t))
5865 tsubst_default_arguments (t);
5867 popclass ();
5868 pop_from_top_level ();
5869 pop_deferring_access_checks ();
5870 pop_tinst_level ();
5872 /* The vtable for a template class can be emitted in any translation
5873 unit in which the class is instantiated. When there is no key
5874 method, however, finish_struct_1 will already have added TYPE to
5875 the keyed_classes list. */
5876 if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
5877 keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
5879 return type;
5882 static tree
5883 tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
5885 tree r;
5887 if (!t)
5888 r = t;
5889 else if (TYPE_P (t))
5890 r = tsubst (t, args, complain, in_decl);
5891 else
5893 r = tsubst_expr (t, args, complain, in_decl);
5895 if (!uses_template_parms (r))
5897 /* Sometimes, one of the args was an expression involving a
5898 template constant parameter, like N - 1. Now that we've
5899 tsubst'd, we might have something like 2 - 1. This will
5900 confuse lookup_template_class, so we do constant folding
5901 here. We have to unset processing_template_decl, to fool
5902 tsubst_copy_and_build() into building an actual tree. */
5904 /* If the TREE_TYPE of ARG is not NULL_TREE, ARG is already
5905 as simple as it's going to get, and trying to reprocess
5906 the trees will break. Once tsubst_expr et al DTRT for
5907 non-dependent exprs, this code can go away, as the type
5908 will always be set. */
5909 if (!TREE_TYPE (r))
5911 int saved_processing_template_decl = processing_template_decl;
5912 processing_template_decl = 0;
5913 r = tsubst_copy_and_build (r, /*args=*/NULL_TREE,
5914 tf_error, /*in_decl=*/NULL_TREE,
5915 /*function_p=*/false);
5916 processing_template_decl = saved_processing_template_decl;
5918 r = fold (r);
5921 return r;
5924 /* Substitute ARGS into the vector or list of template arguments T. */
5926 static tree
5927 tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
5929 int len = TREE_VEC_LENGTH (t);
5930 int need_new = 0, i;
5931 tree *elts = alloca (len * sizeof (tree));
5933 for (i = 0; i < len; i++)
5935 tree orig_arg = TREE_VEC_ELT (t, i);
5936 tree new_arg;
5938 if (TREE_CODE (orig_arg) == TREE_VEC)
5939 new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
5940 else
5941 new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
5943 if (new_arg == error_mark_node)
5944 return error_mark_node;
5946 elts[i] = new_arg;
5947 if (new_arg != orig_arg)
5948 need_new = 1;
5951 if (!need_new)
5952 return t;
5954 t = make_tree_vec (len);
5955 for (i = 0; i < len; i++)
5956 TREE_VEC_ELT (t, i) = elts[i];
5958 return t;
5961 /* Return the result of substituting ARGS into the template parameters
5962 given by PARMS. If there are m levels of ARGS and m + n levels of
5963 PARMS, then the result will contain n levels of PARMS. For
5964 example, if PARMS is `template <class T> template <class U>
5965 template <T*, U, class V>' and ARGS is {{int}, {double}} then the
5966 result will be `template <int*, double, class V>'. */
5968 static tree
5969 tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
5971 tree r = NULL_TREE;
5972 tree* new_parms;
5974 for (new_parms = &r;
5975 TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
5976 new_parms = &(TREE_CHAIN (*new_parms)),
5977 parms = TREE_CHAIN (parms))
5979 tree new_vec =
5980 make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
5981 int i;
5983 for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
5985 tree tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
5986 tree default_value = TREE_PURPOSE (tuple);
5987 tree parm_decl = TREE_VALUE (tuple);
5989 parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
5990 if (TREE_CODE (parm_decl) == PARM_DECL
5991 && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl), complain))
5992 parm_decl = error_mark_node;
5993 default_value = tsubst_template_arg (default_value, args,
5994 complain, NULL_TREE);
5996 tuple = build_tree_list (default_value, parm_decl);
5997 TREE_VEC_ELT (new_vec, i) = tuple;
6000 *new_parms =
6001 tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
6002 - TMPL_ARGS_DEPTH (args)),
6003 new_vec, NULL_TREE);
6006 return r;
6009 /* Substitute the ARGS into the indicated aggregate (or enumeration)
6010 type T. If T is not an aggregate or enumeration type, it is
6011 handled as if by tsubst. IN_DECL is as for tsubst. If
6012 ENTERING_SCOPE is nonzero, T is the context for a template which
6013 we are presently tsubst'ing. Return the substituted value. */
6015 static tree
6016 tsubst_aggr_type (tree t,
6017 tree args,
6018 tsubst_flags_t complain,
6019 tree in_decl,
6020 int entering_scope)
6022 if (t == NULL_TREE)
6023 return NULL_TREE;
6025 switch (TREE_CODE (t))
6027 case RECORD_TYPE:
6028 if (TYPE_PTRMEMFUNC_P (t))
6029 return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
6031 /* Else fall through. */
6032 case ENUMERAL_TYPE:
6033 case UNION_TYPE:
6034 if (TYPE_TEMPLATE_INFO (t))
6036 tree argvec;
6037 tree context;
6038 tree r;
6040 /* First, determine the context for the type we are looking
6041 up. */
6042 context = TYPE_CONTEXT (t);
6043 if (context)
6044 context = tsubst_aggr_type (context, args, complain,
6045 in_decl, /*entering_scope=*/1);
6047 /* Then, figure out what arguments are appropriate for the
6048 type we are trying to find. For example, given:
6050 template <class T> struct S;
6051 template <class T, class U> void f(T, U) { S<U> su; }
6053 and supposing that we are instantiating f<int, double>,
6054 then our ARGS will be {int, double}, but, when looking up
6055 S we only want {double}. */
6056 argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
6057 complain, in_decl);
6058 if (argvec == error_mark_node)
6059 return error_mark_node;
6061 r = lookup_template_class (t, argvec, in_decl, context,
6062 entering_scope, complain);
6064 return cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
6066 else
6067 /* This is not a template type, so there's nothing to do. */
6068 return t;
6070 default:
6071 return tsubst (t, args, complain, in_decl);
6075 /* Substitute into the default argument ARG (a default argument for
6076 FN), which has the indicated TYPE. */
6078 tree
6079 tsubst_default_argument (tree fn, tree type, tree arg)
6081 tree saved_class_ptr = NULL_TREE;
6082 tree saved_class_ref = NULL_TREE;
6084 /* This default argument came from a template. Instantiate the
6085 default argument here, not in tsubst. In the case of
6086 something like:
6088 template <class T>
6089 struct S {
6090 static T t();
6091 void f(T = t());
6094 we must be careful to do name lookup in the scope of S<T>,
6095 rather than in the current class. */
6096 push_access_scope (fn);
6097 /* The default argument expression should not be considered to be
6098 within the scope of FN. Since push_access_scope sets
6099 current_function_decl, we must explicitly clear it here. */
6100 current_function_decl = NULL_TREE;
6101 /* The "this" pointer is not valid in a default argument. */
6102 if (cfun)
6104 saved_class_ptr = current_class_ptr;
6105 cp_function_chain->x_current_class_ptr = NULL_TREE;
6106 saved_class_ref = current_class_ref;
6107 cp_function_chain->x_current_class_ref = NULL_TREE;
6110 push_deferring_access_checks(dk_no_deferred);
6111 arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
6112 tf_error | tf_warning, NULL_TREE);
6113 pop_deferring_access_checks();
6115 /* Restore the "this" pointer. */
6116 if (cfun)
6118 cp_function_chain->x_current_class_ptr = saved_class_ptr;
6119 cp_function_chain->x_current_class_ref = saved_class_ref;
6122 pop_access_scope (fn);
6124 /* Make sure the default argument is reasonable. */
6125 arg = check_default_argument (type, arg);
6127 return arg;
6130 /* Substitute into all the default arguments for FN. */
6132 static void
6133 tsubst_default_arguments (tree fn)
6135 tree arg;
6136 tree tmpl_args;
6138 tmpl_args = DECL_TI_ARGS (fn);
6140 /* If this function is not yet instantiated, we certainly don't need
6141 its default arguments. */
6142 if (uses_template_parms (tmpl_args))
6143 return;
6145 for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
6146 arg;
6147 arg = TREE_CHAIN (arg))
6148 if (TREE_PURPOSE (arg))
6149 TREE_PURPOSE (arg) = tsubst_default_argument (fn,
6150 TREE_VALUE (arg),
6151 TREE_PURPOSE (arg));
6154 /* Substitute the ARGS into the T, which is a _DECL. Return the
6155 result of the substitution. Issue error and warning messages under
6156 control of COMPLAIN. */
6158 static tree
6159 tsubst_decl (tree t, tree args, tsubst_flags_t complain)
6161 location_t saved_loc;
6162 tree r = NULL_TREE;
6163 tree in_decl = t;
6165 /* Set the filename and linenumber to improve error-reporting. */
6166 saved_loc = input_location;
6167 input_location = DECL_SOURCE_LOCATION (t);
6169 switch (TREE_CODE (t))
6171 case TEMPLATE_DECL:
6173 /* We can get here when processing a member function template,
6174 member class template, and template template parameter of
6175 a template class. */
6176 tree decl = DECL_TEMPLATE_RESULT (t);
6177 tree spec;
6178 tree tmpl_args;
6179 tree full_args;
6181 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
6183 /* Template template parameter is treated here. */
6184 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6185 if (new_type == error_mark_node)
6186 return error_mark_node;
6188 r = copy_decl (t);
6189 TREE_CHAIN (r) = NULL_TREE;
6190 TREE_TYPE (r) = new_type;
6191 DECL_TEMPLATE_RESULT (r)
6192 = build_decl (TYPE_DECL, DECL_NAME (decl), new_type);
6193 DECL_TEMPLATE_PARMS (r)
6194 = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
6195 complain);
6196 TYPE_NAME (new_type) = r;
6197 break;
6200 /* We might already have an instance of this template.
6201 The ARGS are for the surrounding class type, so the
6202 full args contain the tsubst'd args for the context,
6203 plus the innermost args from the template decl. */
6204 tmpl_args = DECL_CLASS_TEMPLATE_P (t)
6205 ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
6206 : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
6207 full_args = tsubst_template_args (tmpl_args, args,
6208 complain, in_decl);
6210 /* tsubst_template_args doesn't copy the vector if
6211 nothing changed. But, *something* should have
6212 changed. */
6213 gcc_assert (full_args != tmpl_args);
6215 spec = retrieve_specialization (t, full_args,
6216 /*class_specializations_p=*/true);
6217 if (spec != NULL_TREE)
6219 r = spec;
6220 break;
6223 /* Make a new template decl. It will be similar to the
6224 original, but will record the current template arguments.
6225 We also create a new function declaration, which is just
6226 like the old one, but points to this new template, rather
6227 than the old one. */
6228 r = copy_decl (t);
6229 gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
6230 TREE_CHAIN (r) = NULL_TREE;
6232 DECL_CONTEXT (r)
6233 = tsubst_aggr_type (DECL_CONTEXT (t), args,
6234 complain, in_decl,
6235 /*entering_scope=*/1);
6236 DECL_TEMPLATE_INFO (r) = build_tree_list (t, args);
6238 if (TREE_CODE (decl) == TYPE_DECL)
6240 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6241 if (new_type == error_mark_node)
6242 return error_mark_node;
6244 TREE_TYPE (r) = new_type;
6245 CLASSTYPE_TI_TEMPLATE (new_type) = r;
6246 DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
6247 DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
6249 else
6251 tree new_decl = tsubst (decl, args, complain, in_decl);
6252 if (new_decl == error_mark_node)
6253 return error_mark_node;
6255 DECL_TEMPLATE_RESULT (r) = new_decl;
6256 DECL_TI_TEMPLATE (new_decl) = r;
6257 TREE_TYPE (r) = TREE_TYPE (new_decl);
6258 DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
6261 SET_DECL_IMPLICIT_INSTANTIATION (r);
6262 DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
6263 DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
6265 /* The template parameters for this new template are all the
6266 template parameters for the old template, except the
6267 outermost level of parameters. */
6268 DECL_TEMPLATE_PARMS (r)
6269 = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
6270 complain);
6272 if (PRIMARY_TEMPLATE_P (t))
6273 DECL_PRIMARY_TEMPLATE (r) = r;
6275 if (TREE_CODE (decl) != TYPE_DECL)
6276 /* Record this non-type partial instantiation. */
6277 register_specialization (r, t,
6278 DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)));
6280 break;
6282 case FUNCTION_DECL:
6284 tree ctx;
6285 tree argvec = NULL_TREE;
6286 tree *friends;
6287 tree gen_tmpl;
6288 tree type;
6289 int member;
6290 int args_depth;
6291 int parms_depth;
6293 /* Nobody should be tsubst'ing into non-template functions. */
6294 gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
6296 if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
6298 tree spec;
6299 bool dependent_p;
6301 /* If T is not dependent, just return it. We have to
6302 increment PROCESSING_TEMPLATE_DECL because
6303 value_dependent_expression_p assumes that nothing is
6304 dependent when PROCESSING_TEMPLATE_DECL is zero. */
6305 ++processing_template_decl;
6306 dependent_p = value_dependent_expression_p (t);
6307 --processing_template_decl;
6308 if (!dependent_p)
6309 return t;
6311 /* Calculate the most general template of which R is a
6312 specialization, and the complete set of arguments used to
6313 specialize R. */
6314 gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
6315 argvec = tsubst_template_args (DECL_TI_ARGS
6316 (DECL_TEMPLATE_RESULT (gen_tmpl)),
6317 args, complain, in_decl);
6319 /* Check to see if we already have this specialization. */
6320 spec = retrieve_specialization (gen_tmpl, argvec,
6321 /*class_specializations_p=*/false);
6323 if (spec)
6325 r = spec;
6326 break;
6329 /* We can see more levels of arguments than parameters if
6330 there was a specialization of a member template, like
6331 this:
6333 template <class T> struct S { template <class U> void f(); }
6334 template <> template <class U> void S<int>::f(U);
6336 Here, we'll be substituting into the specialization,
6337 because that's where we can find the code we actually
6338 want to generate, but we'll have enough arguments for
6339 the most general template.
6341 We also deal with the peculiar case:
6343 template <class T> struct S {
6344 template <class U> friend void f();
6346 template <class U> void f() {}
6347 template S<int>;
6348 template void f<double>();
6350 Here, the ARGS for the instantiation of will be {int,
6351 double}. But, we only need as many ARGS as there are
6352 levels of template parameters in CODE_PATTERN. We are
6353 careful not to get fooled into reducing the ARGS in
6354 situations like:
6356 template <class T> struct S { template <class U> void f(U); }
6357 template <class T> template <> void S<T>::f(int) {}
6359 which we can spot because the pattern will be a
6360 specialization in this case. */
6361 args_depth = TMPL_ARGS_DEPTH (args);
6362 parms_depth =
6363 TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
6364 if (args_depth > parms_depth
6365 && !DECL_TEMPLATE_SPECIALIZATION (t))
6366 args = get_innermost_template_args (args, parms_depth);
6368 else
6370 /* This special case arises when we have something like this:
6372 template <class T> struct S {
6373 friend void f<int>(int, double);
6376 Here, the DECL_TI_TEMPLATE for the friend declaration
6377 will be an IDENTIFIER_NODE. We are being called from
6378 tsubst_friend_function, and we want only to create a
6379 new decl (R) with appropriate types so that we can call
6380 determine_specialization. */
6381 gen_tmpl = NULL_TREE;
6384 if (DECL_CLASS_SCOPE_P (t))
6386 if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
6387 member = 2;
6388 else
6389 member = 1;
6390 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
6391 complain, t, /*entering_scope=*/1);
6393 else
6395 member = 0;
6396 ctx = DECL_CONTEXT (t);
6398 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6399 if (type == error_mark_node)
6400 return error_mark_node;
6402 /* We do NOT check for matching decls pushed separately at this
6403 point, as they may not represent instantiations of this
6404 template, and in any case are considered separate under the
6405 discrete model. */
6406 r = copy_decl (t);
6407 DECL_USE_TEMPLATE (r) = 0;
6408 TREE_TYPE (r) = type;
6409 /* Clear out the mangled name and RTL for the instantiation. */
6410 SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
6411 SET_DECL_RTL (r, NULL_RTX);
6412 DECL_INITIAL (r) = NULL_TREE;
6413 DECL_CONTEXT (r) = ctx;
6415 if (member && DECL_CONV_FN_P (r))
6416 /* Type-conversion operator. Reconstruct the name, in
6417 case it's the name of one of the template's parameters. */
6418 DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
6420 DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
6421 complain, t);
6422 DECL_RESULT (r) = NULL_TREE;
6424 TREE_STATIC (r) = 0;
6425 TREE_PUBLIC (r) = TREE_PUBLIC (t);
6426 DECL_EXTERNAL (r) = 1;
6427 /* If this is an instantiation of a function with internal
6428 linkage, we already know what object file linkage will be
6429 assigned to the instantiation. */
6430 DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
6431 DECL_DEFER_OUTPUT (r) = 0;
6432 TREE_CHAIN (r) = NULL_TREE;
6433 DECL_PENDING_INLINE_INFO (r) = 0;
6434 DECL_PENDING_INLINE_P (r) = 0;
6435 DECL_SAVED_TREE (r) = NULL_TREE;
6436 TREE_USED (r) = 0;
6437 if (DECL_CLONED_FUNCTION (r))
6439 DECL_CLONED_FUNCTION (r) = tsubst (DECL_CLONED_FUNCTION (t),
6440 args, complain, t);
6441 TREE_CHAIN (r) = TREE_CHAIN (DECL_CLONED_FUNCTION (r));
6442 TREE_CHAIN (DECL_CLONED_FUNCTION (r)) = r;
6445 /* Set up the DECL_TEMPLATE_INFO for R. There's no need to do
6446 this in the special friend case mentioned above where
6447 GEN_TMPL is NULL. */
6448 if (gen_tmpl)
6450 DECL_TEMPLATE_INFO (r)
6451 = tree_cons (gen_tmpl, argvec, NULL_TREE);
6452 SET_DECL_IMPLICIT_INSTANTIATION (r);
6453 register_specialization (r, gen_tmpl, argvec);
6455 /* We're not supposed to instantiate default arguments
6456 until they are called, for a template. But, for a
6457 declaration like:
6459 template <class T> void f ()
6460 { extern void g(int i = T()); }
6462 we should do the substitution when the template is
6463 instantiated. We handle the member function case in
6464 instantiate_class_template since the default arguments
6465 might refer to other members of the class. */
6466 if (!member
6467 && !PRIMARY_TEMPLATE_P (gen_tmpl)
6468 && !uses_template_parms (argvec))
6469 tsubst_default_arguments (r);
6472 /* Copy the list of befriending classes. */
6473 for (friends = &DECL_BEFRIENDING_CLASSES (r);
6474 *friends;
6475 friends = &TREE_CHAIN (*friends))
6477 *friends = copy_node (*friends);
6478 TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
6479 args, complain,
6480 in_decl);
6483 if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
6485 maybe_retrofit_in_chrg (r);
6486 if (DECL_CONSTRUCTOR_P (r))
6487 grok_ctor_properties (ctx, r);
6488 /* If this is an instantiation of a member template, clone it.
6489 If it isn't, that'll be handled by
6490 clone_constructors_and_destructors. */
6491 if (PRIMARY_TEMPLATE_P (gen_tmpl))
6492 clone_function_decl (r, /*update_method_vec_p=*/0);
6494 else if (IDENTIFIER_OPNAME_P (DECL_NAME (r)))
6495 grok_op_properties (r, (complain & tf_error) != 0);
6497 if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
6498 SET_DECL_FRIEND_CONTEXT (r,
6499 tsubst (DECL_FRIEND_CONTEXT (t),
6500 args, complain, in_decl));
6502 break;
6504 case PARM_DECL:
6506 tree type;
6508 r = copy_node (t);
6509 if (DECL_TEMPLATE_PARM_P (t))
6510 SET_DECL_TEMPLATE_PARM_P (r);
6512 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6513 type = type_decays_to (type);
6514 TREE_TYPE (r) = type;
6515 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
6517 if (DECL_INITIAL (r))
6519 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
6520 DECL_INITIAL (r) = TREE_TYPE (r);
6521 else
6522 DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
6523 complain, in_decl);
6526 DECL_CONTEXT (r) = NULL_TREE;
6528 if (!DECL_TEMPLATE_PARM_P (r))
6529 DECL_ARG_TYPE (r) = type_passed_as (type);
6530 if (TREE_CHAIN (t))
6531 TREE_CHAIN (r) = tsubst (TREE_CHAIN (t), args,
6532 complain, TREE_CHAIN (t));
6534 break;
6536 case FIELD_DECL:
6538 tree type;
6540 r = copy_decl (t);
6541 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6542 if (type == error_mark_node)
6543 return error_mark_node;
6544 TREE_TYPE (r) = type;
6545 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
6547 /* We don't have to set DECL_CONTEXT here; it is set by
6548 finish_member_declaration. */
6549 DECL_INITIAL (r) = tsubst_expr (DECL_INITIAL (t), args,
6550 complain, in_decl);
6551 TREE_CHAIN (r) = NULL_TREE;
6552 if (VOID_TYPE_P (type))
6553 error ("instantiation of %q+D as type %qT", r, type);
6555 break;
6557 case USING_DECL:
6558 /* We reach here only for member using decls. */
6559 if (DECL_DEPENDENT_P (t))
6561 r = do_class_using_decl
6562 (tsubst_copy (USING_DECL_SCOPE (t), args, complain, in_decl),
6563 tsubst_copy (DECL_NAME (t), args, complain, in_decl));
6564 if (!r)
6565 r = error_mark_node;
6567 else
6569 r = copy_node (t);
6570 TREE_CHAIN (r) = NULL_TREE;
6572 break;
6574 case TYPE_DECL:
6575 case VAR_DECL:
6577 tree argvec = NULL_TREE;
6578 tree gen_tmpl = NULL_TREE;
6579 tree spec;
6580 tree tmpl = NULL_TREE;
6581 tree ctx;
6582 tree type = NULL_TREE;
6583 int local_p;
6585 if (TREE_CODE (t) == TYPE_DECL)
6587 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6588 if (TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM
6589 || t == TYPE_MAIN_DECL (TREE_TYPE (t)))
6591 /* If this is the canonical decl, we don't have to
6592 mess with instantiations, and often we can't (for
6593 typename, template type parms and such). Note that
6594 TYPE_NAME is not correct for the above test if
6595 we've copied the type for a typedef. */
6596 r = TYPE_NAME (type);
6597 break;
6601 /* Assume this is a non-local variable. */
6602 local_p = 0;
6604 if (TYPE_P (CP_DECL_CONTEXT (t)))
6605 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
6606 complain,
6607 in_decl, /*entering_scope=*/1);
6608 else if (DECL_NAMESPACE_SCOPE_P (t))
6609 ctx = DECL_CONTEXT (t);
6610 else
6612 /* Subsequent calls to pushdecl will fill this in. */
6613 ctx = NULL_TREE;
6614 local_p = 1;
6617 /* Check to see if we already have this specialization. */
6618 if (!local_p)
6620 tmpl = DECL_TI_TEMPLATE (t);
6621 gen_tmpl = most_general_template (tmpl);
6622 argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
6623 spec = retrieve_specialization (gen_tmpl, argvec,
6624 /*class_specializations_p=*/false);
6626 else
6627 spec = retrieve_local_specialization (t);
6629 if (spec)
6631 r = spec;
6632 break;
6635 r = copy_decl (t);
6636 if (TREE_CODE (r) == VAR_DECL)
6638 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6639 if (type == error_mark_node)
6640 return error_mark_node;
6641 type = complete_type (type);
6642 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r)
6643 = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (t);
6644 type = check_var_type (DECL_NAME (r), type);
6646 else if (DECL_SELF_REFERENCE_P (t))
6647 SET_DECL_SELF_REFERENCE_P (r);
6648 TREE_TYPE (r) = type;
6649 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
6650 DECL_CONTEXT (r) = ctx;
6651 /* Clear out the mangled name and RTL for the instantiation. */
6652 SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
6653 if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
6654 SET_DECL_RTL (r, NULL_RTX);
6656 /* Don't try to expand the initializer until someone tries to use
6657 this variable; otherwise we run into circular dependencies. */
6658 DECL_INITIAL (r) = NULL_TREE;
6659 if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
6660 SET_DECL_RTL (r, NULL_RTX);
6661 DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
6663 /* Even if the original location is out of scope, the newly
6664 substituted one is not. */
6665 if (TREE_CODE (r) == VAR_DECL)
6667 DECL_DEAD_FOR_LOCAL (r) = 0;
6668 DECL_INITIALIZED_P (r) = 0;
6671 if (!local_p)
6673 /* A static data member declaration is always marked
6674 external when it is declared in-class, even if an
6675 initializer is present. We mimic the non-template
6676 processing here. */
6677 DECL_EXTERNAL (r) = 1;
6679 register_specialization (r, gen_tmpl, argvec);
6680 DECL_TEMPLATE_INFO (r) = tree_cons (tmpl, argvec, NULL_TREE);
6681 SET_DECL_IMPLICIT_INSTANTIATION (r);
6683 else
6684 register_local_specialization (r, t);
6686 TREE_CHAIN (r) = NULL_TREE;
6687 layout_decl (r, 0);
6689 break;
6691 default:
6692 gcc_unreachable ();
6695 /* Restore the file and line information. */
6696 input_location = saved_loc;
6698 return r;
6701 /* Substitute into the ARG_TYPES of a function type. */
6703 static tree
6704 tsubst_arg_types (tree arg_types,
6705 tree args,
6706 tsubst_flags_t complain,
6707 tree in_decl)
6709 tree remaining_arg_types;
6710 tree type;
6711 tree default_arg;
6712 tree result = NULL_TREE;
6714 if (!arg_types || arg_types == void_list_node)
6715 return arg_types;
6717 remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
6718 args, complain, in_decl);
6719 if (remaining_arg_types == error_mark_node)
6720 return error_mark_node;
6722 type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
6723 if (type == error_mark_node)
6724 return error_mark_node;
6725 if (VOID_TYPE_P (type))
6727 if (complain & tf_error)
6729 error ("invalid parameter type %qT", type);
6730 if (in_decl)
6731 error ("in declaration %q+D", in_decl);
6733 return error_mark_node;
6736 /* Do array-to-pointer, function-to-pointer conversion, and ignore
6737 top-level qualifiers as required. */
6738 type = TYPE_MAIN_VARIANT (type_decays_to (type));
6740 /* We do not substitute into default arguments here. The standard
6741 mandates that they be instantiated only when needed, which is
6742 done in build_over_call. */
6743 default_arg = TREE_PURPOSE (arg_types);
6745 if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
6747 /* We've instantiated a template before its default arguments
6748 have been parsed. This can happen for a nested template
6749 class, and is not an error unless we require the default
6750 argument in a call of this function. */
6751 result = tree_cons (default_arg, type, remaining_arg_types);
6752 VEC_safe_push (tree, gc, DEFARG_INSTANTIATIONS (default_arg), result);
6754 else
6755 result = hash_tree_cons (default_arg, type, remaining_arg_types);
6757 return result;
6760 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE. This routine does
6761 *not* handle the exception-specification for FNTYPE, because the
6762 initial substitution of explicitly provided template parameters
6763 during argument deduction forbids substitution into the
6764 exception-specification:
6766 [temp.deduct]
6768 All references in the function type of the function template to the
6769 corresponding template parameters are replaced by the specified tem-
6770 plate argument values. If a substitution in a template parameter or
6771 in the function type of the function template results in an invalid
6772 type, type deduction fails. [Note: The equivalent substitution in
6773 exception specifications is done only when the function is instanti-
6774 ated, at which point a program is ill-formed if the substitution
6775 results in an invalid type.] */
6777 static tree
6778 tsubst_function_type (tree t,
6779 tree args,
6780 tsubst_flags_t complain,
6781 tree in_decl)
6783 tree return_type;
6784 tree arg_types;
6785 tree fntype;
6787 /* The TYPE_CONTEXT is not used for function/method types. */
6788 gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
6790 /* Substitute the return type. */
6791 return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6792 if (return_type == error_mark_node)
6793 return error_mark_node;
6794 /* The standard does not presently indicate that creation of a
6795 function type with an invalid return type is a deduction failure.
6796 However, that is clearly analogous to creating an array of "void"
6797 or a reference to a reference. This is core issue #486. */
6798 if (TREE_CODE (return_type) == ARRAY_TYPE
6799 || TREE_CODE (return_type) == FUNCTION_TYPE)
6801 if (complain & tf_error)
6803 if (TREE_CODE (return_type) == ARRAY_TYPE)
6804 error ("function returning an array");
6805 else
6806 error ("function returning a function");
6808 return error_mark_node;
6811 /* Substitute the argument types. */
6812 arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
6813 complain, in_decl);
6814 if (arg_types == error_mark_node)
6815 return error_mark_node;
6817 /* Construct a new type node and return it. */
6818 if (TREE_CODE (t) == FUNCTION_TYPE)
6819 fntype = build_function_type (return_type, arg_types);
6820 else
6822 tree r = TREE_TYPE (TREE_VALUE (arg_types));
6823 if (! IS_AGGR_TYPE (r))
6825 /* [temp.deduct]
6827 Type deduction may fail for any of the following
6828 reasons:
6830 -- Attempting to create "pointer to member of T" when T
6831 is not a class type. */
6832 if (complain & tf_error)
6833 error ("creating pointer to member function of non-class type %qT",
6835 return error_mark_node;
6838 fntype = build_method_type_directly (r, return_type,
6839 TREE_CHAIN (arg_types));
6841 fntype = cp_build_qualified_type_real (fntype, TYPE_QUALS (t), complain);
6842 fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
6844 return fntype;
6847 /* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE. Substitute the template
6848 ARGS into that specification, and return the substituted
6849 specification. If there is no specification, return NULL_TREE. */
6851 static tree
6852 tsubst_exception_specification (tree fntype,
6853 tree args,
6854 tsubst_flags_t complain,
6855 tree in_decl)
6857 tree specs;
6858 tree new_specs;
6860 specs = TYPE_RAISES_EXCEPTIONS (fntype);
6861 new_specs = NULL_TREE;
6862 if (specs)
6864 if (! TREE_VALUE (specs))
6865 new_specs = specs;
6866 else
6867 while (specs)
6869 tree spec;
6870 spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
6871 if (spec == error_mark_node)
6872 return spec;
6873 new_specs = add_exception_specifier (new_specs, spec, complain);
6874 specs = TREE_CHAIN (specs);
6877 return new_specs;
6880 /* Substitute into the PARMS of a call-declarator. */
6882 static tree
6883 tsubst_call_declarator_parms (tree parms,
6884 tree args,
6885 tsubst_flags_t complain,
6886 tree in_decl)
6888 tree new_parms;
6889 tree type;
6890 tree defarg;
6892 if (!parms || parms == void_list_node)
6893 return parms;
6895 new_parms = tsubst_call_declarator_parms (TREE_CHAIN (parms),
6896 args, complain, in_decl);
6898 /* Figure out the type of this parameter. */
6899 type = tsubst (TREE_VALUE (parms), args, complain, in_decl);
6901 /* Figure out the default argument as well. Note that we use
6902 tsubst_expr since the default argument is really an expression. */
6903 defarg = tsubst_expr (TREE_PURPOSE (parms), args, complain, in_decl);
6905 /* Chain this parameter on to the front of those we have already
6906 processed. We don't use hash_tree_cons because that function
6907 doesn't check TREE_PARMLIST. */
6908 new_parms = tree_cons (defarg, type, new_parms);
6910 return new_parms;
6913 /* Take the tree structure T and replace template parameters used
6914 therein with the argument vector ARGS. IN_DECL is an associated
6915 decl for diagnostics. If an error occurs, returns ERROR_MARK_NODE.
6916 Issue error and warning messages under control of COMPLAIN. Note
6917 that we must be relatively non-tolerant of extensions here, in
6918 order to preserve conformance; if we allow substitutions that
6919 should not be allowed, we may allow argument deductions that should
6920 not succeed, and therefore report ambiguous overload situations
6921 where there are none. In theory, we could allow the substitution,
6922 but indicate that it should have failed, and allow our caller to
6923 make sure that the right thing happens, but we don't try to do this
6924 yet.
6926 This function is used for dealing with types, decls and the like;
6927 for expressions, use tsubst_expr or tsubst_copy. */
6929 static tree
6930 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
6932 tree type, r;
6934 if (t == NULL_TREE || t == error_mark_node
6935 || t == integer_type_node
6936 || t == void_type_node
6937 || t == char_type_node
6938 || t == unknown_type_node
6939 || TREE_CODE (t) == NAMESPACE_DECL)
6940 return t;
6942 if (DECL_P (t))
6943 return tsubst_decl (t, args, complain);
6945 if (TREE_CODE (t) == IDENTIFIER_NODE)
6946 type = IDENTIFIER_TYPE_VALUE (t);
6947 else
6948 type = TREE_TYPE (t);
6950 gcc_assert (type != unknown_type_node);
6952 if (type
6953 && TREE_CODE (t) != TYPENAME_TYPE
6954 && TREE_CODE (t) != IDENTIFIER_NODE
6955 && TREE_CODE (t) != FUNCTION_TYPE
6956 && TREE_CODE (t) != METHOD_TYPE)
6957 type = tsubst (type, args, complain, in_decl);
6958 if (type == error_mark_node)
6959 return error_mark_node;
6961 switch (TREE_CODE (t))
6963 case RECORD_TYPE:
6964 case UNION_TYPE:
6965 case ENUMERAL_TYPE:
6966 return tsubst_aggr_type (t, args, complain, in_decl,
6967 /*entering_scope=*/0);
6969 case ERROR_MARK:
6970 case IDENTIFIER_NODE:
6971 case VOID_TYPE:
6972 case REAL_TYPE:
6973 case COMPLEX_TYPE:
6974 case VECTOR_TYPE:
6975 case BOOLEAN_TYPE:
6976 case INTEGER_CST:
6977 case REAL_CST:
6978 case STRING_CST:
6979 return t;
6981 case INTEGER_TYPE:
6982 if (t == integer_type_node)
6983 return t;
6985 if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
6986 && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
6987 return t;
6990 tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
6992 /* The array dimension behaves like a non-type template arg,
6993 in that we want to fold it as much as possible. */
6994 max = tsubst_template_arg (omax, args, complain, in_decl);
6995 max = fold_decl_constant_value (max);
6997 if (integer_zerop (omax))
6999 /* Still allow an explicit array of size zero. */
7000 if (pedantic)
7001 pedwarn ("creating array with size zero");
7003 else if (integer_zerop (max)
7004 || (TREE_CODE (max) == INTEGER_CST
7005 && INT_CST_LT (max, integer_zero_node)))
7007 /* [temp.deduct]
7009 Type deduction may fail for any of the following
7010 reasons:
7012 Attempting to create an array with a size that is
7013 zero or negative. */
7014 if (complain & tf_error)
7015 error ("creating array with size zero (%qE)", max);
7017 return error_mark_node;
7020 return compute_array_index_type (NULL_TREE, max);
7023 case TEMPLATE_TYPE_PARM:
7024 case TEMPLATE_TEMPLATE_PARM:
7025 case BOUND_TEMPLATE_TEMPLATE_PARM:
7026 case TEMPLATE_PARM_INDEX:
7028 int idx;
7029 int level;
7030 int levels;
7031 tree arg = NULL_TREE;
7033 r = NULL_TREE;
7035 gcc_assert (TREE_VEC_LENGTH (args) > 0);
7036 if (TREE_CODE (t) == TEMPLATE_TYPE_PARM
7037 || TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM
7038 || TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
7040 idx = TEMPLATE_TYPE_IDX (t);
7041 level = TEMPLATE_TYPE_LEVEL (t);
7043 else
7045 idx = TEMPLATE_PARM_IDX (t);
7046 level = TEMPLATE_PARM_LEVEL (t);
7049 levels = TMPL_ARGS_DEPTH (args);
7050 if (level <= levels)
7051 arg = TMPL_ARG (args, level, idx);
7053 if (arg == error_mark_node)
7054 return error_mark_node;
7055 else if (arg != NULL_TREE)
7057 if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
7059 gcc_assert (TYPE_P (arg));
7060 return cp_build_qualified_type_real
7061 (arg, cp_type_quals (arg) | cp_type_quals (t),
7062 complain | tf_ignore_bad_quals);
7064 else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
7066 /* We are processing a type constructed from a
7067 template template parameter. */
7068 tree argvec = tsubst (TYPE_TI_ARGS (t),
7069 args, complain, in_decl);
7070 if (argvec == error_mark_node)
7071 return error_mark_node;
7073 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
7074 are resolving nested-types in the signature of a
7075 member function templates. Otherwise ARG is a
7076 TEMPLATE_DECL and is the real template to be
7077 instantiated. */
7078 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
7079 arg = TYPE_NAME (arg);
7081 r = lookup_template_class (arg,
7082 argvec, in_decl,
7083 DECL_CONTEXT (arg),
7084 /*entering_scope=*/0,
7085 complain);
7086 return cp_build_qualified_type_real
7087 (r, TYPE_QUALS (t), complain);
7089 else
7090 /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX. */
7091 return arg;
7094 if (level == 1)
7095 /* This can happen during the attempted tsubst'ing in
7096 unify. This means that we don't yet have any information
7097 about the template parameter in question. */
7098 return t;
7100 /* If we get here, we must have been looking at a parm for a
7101 more deeply nested template. Make a new version of this
7102 template parameter, but with a lower level. */
7103 switch (TREE_CODE (t))
7105 case TEMPLATE_TYPE_PARM:
7106 case TEMPLATE_TEMPLATE_PARM:
7107 case BOUND_TEMPLATE_TEMPLATE_PARM:
7108 if (cp_type_quals (t))
7110 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
7111 r = cp_build_qualified_type_real
7112 (r, cp_type_quals (t),
7113 complain | (TREE_CODE (t) == TEMPLATE_TYPE_PARM
7114 ? tf_ignore_bad_quals : 0));
7116 else
7118 r = copy_type (t);
7119 TEMPLATE_TYPE_PARM_INDEX (r)
7120 = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
7121 r, levels);
7122 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
7123 TYPE_MAIN_VARIANT (r) = r;
7124 TYPE_POINTER_TO (r) = NULL_TREE;
7125 TYPE_REFERENCE_TO (r) = NULL_TREE;
7127 if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
7129 tree argvec = tsubst (TYPE_TI_ARGS (t), args,
7130 complain, in_decl);
7131 if (argvec == error_mark_node)
7132 return error_mark_node;
7134 TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
7135 = tree_cons (TYPE_TI_TEMPLATE (t), argvec, NULL_TREE);
7138 break;
7140 case TEMPLATE_PARM_INDEX:
7141 r = reduce_template_parm_level (t, type, levels);
7142 break;
7144 default:
7145 gcc_unreachable ();
7148 return r;
7151 case TREE_LIST:
7153 tree purpose, value, chain;
7155 if (t == void_list_node)
7156 return t;
7158 purpose = TREE_PURPOSE (t);
7159 if (purpose)
7161 purpose = tsubst (purpose, args, complain, in_decl);
7162 if (purpose == error_mark_node)
7163 return error_mark_node;
7165 value = TREE_VALUE (t);
7166 if (value)
7168 value = tsubst (value, args, complain, in_decl);
7169 if (value == error_mark_node)
7170 return error_mark_node;
7172 chain = TREE_CHAIN (t);
7173 if (chain && chain != void_type_node)
7175 chain = tsubst (chain, args, complain, in_decl);
7176 if (chain == error_mark_node)
7177 return error_mark_node;
7179 if (purpose == TREE_PURPOSE (t)
7180 && value == TREE_VALUE (t)
7181 && chain == TREE_CHAIN (t))
7182 return t;
7183 return hash_tree_cons (purpose, value, chain);
7186 case TREE_BINFO:
7187 /* We should never be tsubsting a binfo. */
7188 gcc_unreachable ();
7190 case TREE_VEC:
7191 /* A vector of template arguments. */
7192 gcc_assert (!type);
7193 return tsubst_template_args (t, args, complain, in_decl);
7195 case POINTER_TYPE:
7196 case REFERENCE_TYPE:
7198 enum tree_code code;
7200 if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
7201 return t;
7203 code = TREE_CODE (t);
7206 /* [temp.deduct]
7208 Type deduction may fail for any of the following
7209 reasons:
7211 -- Attempting to create a pointer to reference type.
7212 -- Attempting to create a reference to a reference type or
7213 a reference to void. */
7214 if (TREE_CODE (type) == REFERENCE_TYPE
7215 || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
7217 static location_t last_loc;
7219 /* We keep track of the last time we issued this error
7220 message to avoid spewing a ton of messages during a
7221 single bad template instantiation. */
7222 if (complain & tf_error
7223 #ifdef USE_MAPPED_LOCATION
7224 && last_loc != input_location
7225 #else
7226 && (last_loc.line != input_line
7227 || last_loc.file != input_filename)
7228 #endif
7231 if (TREE_CODE (type) == VOID_TYPE)
7232 error ("forming reference to void");
7233 else
7234 error ("forming %s to reference type %qT",
7235 (code == POINTER_TYPE) ? "pointer" : "reference",
7236 type);
7237 last_loc = input_location;
7240 return error_mark_node;
7242 else if (code == POINTER_TYPE)
7244 r = build_pointer_type (type);
7245 if (TREE_CODE (type) == METHOD_TYPE)
7246 r = build_ptrmemfunc_type (r);
7248 else
7249 r = build_reference_type (type);
7250 r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
7252 if (r != error_mark_node)
7253 /* Will this ever be needed for TYPE_..._TO values? */
7254 layout_type (r);
7256 return r;
7258 case OFFSET_TYPE:
7260 r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
7261 if (r == error_mark_node || !IS_AGGR_TYPE (r))
7263 /* [temp.deduct]
7265 Type deduction may fail for any of the following
7266 reasons:
7268 -- Attempting to create "pointer to member of T" when T
7269 is not a class type. */
7270 if (complain & tf_error)
7271 error ("creating pointer to member of non-class type %qT", r);
7272 return error_mark_node;
7274 if (TREE_CODE (type) == REFERENCE_TYPE)
7276 if (complain & tf_error)
7277 error ("creating pointer to member reference type %qT", type);
7278 return error_mark_node;
7280 if (TREE_CODE (type) == VOID_TYPE)
7282 if (complain & tf_error)
7283 error ("creating pointer to member of type void");
7284 return error_mark_node;
7286 gcc_assert (TREE_CODE (type) != METHOD_TYPE);
7287 if (TREE_CODE (type) == FUNCTION_TYPE)
7289 /* The type of the implicit object parameter gets its
7290 cv-qualifiers from the FUNCTION_TYPE. */
7291 tree method_type;
7292 tree this_type = cp_build_qualified_type (TYPE_MAIN_VARIANT (r),
7293 cp_type_quals (type));
7294 tree memptr;
7295 method_type = build_method_type_directly (this_type,
7296 TREE_TYPE (type),
7297 TYPE_ARG_TYPES (type));
7298 memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
7299 return cp_build_qualified_type_real (memptr, cp_type_quals (t),
7300 complain);
7302 else
7303 return cp_build_qualified_type_real (build_ptrmem_type (r, type),
7304 TYPE_QUALS (t),
7305 complain);
7307 case FUNCTION_TYPE:
7308 case METHOD_TYPE:
7310 tree fntype;
7311 tree specs;
7312 fntype = tsubst_function_type (t, args, complain, in_decl);
7313 if (fntype == error_mark_node)
7314 return error_mark_node;
7316 /* Substitute the exception specification. */
7317 specs = tsubst_exception_specification (t, args, complain,
7318 in_decl);
7319 if (specs)
7320 fntype = build_exception_variant (fntype, specs);
7321 return fntype;
7323 case ARRAY_TYPE:
7325 tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
7326 if (domain == error_mark_node)
7327 return error_mark_node;
7329 /* As an optimization, we avoid regenerating the array type if
7330 it will obviously be the same as T. */
7331 if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
7332 return t;
7334 /* These checks should match the ones in grokdeclarator.
7336 [temp.deduct]
7338 The deduction may fail for any of the following reasons:
7340 -- Attempting to create an array with an element type that
7341 is void, a function type, or a reference type, or [DR337]
7342 an abstract class type. */
7343 if (TREE_CODE (type) == VOID_TYPE
7344 || TREE_CODE (type) == FUNCTION_TYPE
7345 || TREE_CODE (type) == REFERENCE_TYPE)
7347 if (complain & tf_error)
7348 error ("creating array of %qT", type);
7349 return error_mark_node;
7351 if (CLASS_TYPE_P (type) && CLASSTYPE_PURE_VIRTUALS (type))
7353 if (complain & tf_error)
7354 error ("creating array of %qT, which is an abstract class type",
7355 type);
7356 return error_mark_node;
7359 r = build_cplus_array_type (type, domain);
7360 return r;
7363 case PLUS_EXPR:
7364 case MINUS_EXPR:
7366 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
7367 tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
7369 if (e1 == error_mark_node || e2 == error_mark_node)
7370 return error_mark_node;
7372 return fold_build2 (TREE_CODE (t), TREE_TYPE (t), e1, e2);
7375 case NEGATE_EXPR:
7376 case NOP_EXPR:
7378 tree e = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
7379 if (e == error_mark_node)
7380 return error_mark_node;
7382 return fold_build1 (TREE_CODE (t), TREE_TYPE (t), e);
7385 case TYPENAME_TYPE:
7387 tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
7388 in_decl, /*entering_scope=*/1);
7389 tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
7390 complain, in_decl);
7392 if (ctx == error_mark_node || f == error_mark_node)
7393 return error_mark_node;
7395 if (!IS_AGGR_TYPE (ctx))
7397 if (complain & tf_error)
7398 error ("%qT is not a class, struct, or union type", ctx);
7399 return error_mark_node;
7401 else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
7403 /* Normally, make_typename_type does not require that the CTX
7404 have complete type in order to allow things like:
7406 template <class T> struct S { typename S<T>::X Y; };
7408 But, such constructs have already been resolved by this
7409 point, so here CTX really should have complete type, unless
7410 it's a partial instantiation. */
7411 ctx = complete_type (ctx);
7412 if (!COMPLETE_TYPE_P (ctx))
7414 if (complain & tf_error)
7415 cxx_incomplete_type_error (NULL_TREE, ctx);
7416 return error_mark_node;
7420 f = make_typename_type (ctx, f, typename_type,
7421 (complain & tf_error) | tf_keep_type_decl);
7422 if (f == error_mark_node)
7423 return f;
7424 if (TREE_CODE (f) == TYPE_DECL)
7426 complain |= tf_ignore_bad_quals;
7427 f = TREE_TYPE (f);
7430 if (TREE_CODE (f) != TYPENAME_TYPE)
7432 if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
7433 error ("%qT resolves to %qT, which is not an enumeration type",
7434 t, f);
7435 else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
7436 error ("%qT resolves to %qT, which is is not a class type",
7437 t, f);
7440 return cp_build_qualified_type_real
7441 (f, cp_type_quals (f) | cp_type_quals (t), complain);
7444 case UNBOUND_CLASS_TEMPLATE:
7446 tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
7447 in_decl, /*entering_scope=*/1);
7448 tree name = TYPE_IDENTIFIER (t);
7449 tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
7451 if (ctx == error_mark_node || name == error_mark_node)
7452 return error_mark_node;
7454 if (parm_list)
7455 parm_list = tsubst_template_parms (parm_list, args, complain);
7456 return make_unbound_class_template (ctx, name, parm_list, complain);
7459 case INDIRECT_REF:
7460 case ADDR_EXPR:
7461 case CALL_EXPR:
7462 gcc_unreachable ();
7464 case ARRAY_REF:
7466 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
7467 tree e2 = tsubst_expr (TREE_OPERAND (t, 1), args, complain, in_decl);
7468 if (e1 == error_mark_node || e2 == error_mark_node)
7469 return error_mark_node;
7471 return build_nt (ARRAY_REF, e1, e2, NULL_TREE, NULL_TREE);
7474 case SCOPE_REF:
7476 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
7477 tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
7478 if (e1 == error_mark_node || e2 == error_mark_node)
7479 return error_mark_node;
7481 return build_nt (TREE_CODE (t), e1, e2);
7484 case TYPEOF_TYPE:
7486 tree type;
7488 type = finish_typeof (tsubst_expr (TYPEOF_TYPE_EXPR (t), args,
7489 complain, in_decl));
7490 return cp_build_qualified_type_real (type,
7491 cp_type_quals (t)
7492 | cp_type_quals (type),
7493 complain);
7496 default:
7497 sorry ("use of %qs in template",
7498 tree_code_name [(int) TREE_CODE (t)]);
7499 return error_mark_node;
7503 /* Like tsubst_expr for a BASELINK. OBJECT_TYPE, if non-NULL, is the
7504 type of the expression on the left-hand side of the "." or "->"
7505 operator. */
7507 static tree
7508 tsubst_baselink (tree baselink, tree object_type,
7509 tree args, tsubst_flags_t complain, tree in_decl)
7511 tree name;
7512 tree qualifying_scope;
7513 tree fns;
7514 tree template_args = 0;
7515 bool template_id_p = false;
7517 /* A baselink indicates a function from a base class. The
7518 BASELINK_ACCESS_BINFO and BASELINK_BINFO are going to have
7519 non-dependent types; otherwise, the lookup could not have
7520 succeeded. However, they may indicate bases of the template
7521 class, rather than the instantiated class.
7523 In addition, lookups that were not ambiguous before may be
7524 ambiguous now. Therefore, we perform the lookup again. */
7525 qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
7526 fns = BASELINK_FUNCTIONS (baselink);
7527 if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
7529 template_id_p = true;
7530 template_args = TREE_OPERAND (fns, 1);
7531 fns = TREE_OPERAND (fns, 0);
7532 if (template_args)
7533 template_args = tsubst_template_args (template_args, args,
7534 complain, in_decl);
7536 name = DECL_NAME (get_first_fn (fns));
7537 baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
7539 /* If lookup found a single function, mark it as used at this
7540 point. (If it lookup found multiple functions the one selected
7541 later by overload resolution will be marked as used at that
7542 point.) */
7543 if (BASELINK_P (baselink))
7544 fns = BASELINK_FUNCTIONS (baselink);
7545 if (!template_id_p && !really_overloaded_fn (fns))
7546 mark_used (OVL_CURRENT (fns));
7548 /* Add back the template arguments, if present. */
7549 if (BASELINK_P (baselink) && template_id_p)
7550 BASELINK_FUNCTIONS (baselink)
7551 = build_nt (TEMPLATE_ID_EXPR,
7552 BASELINK_FUNCTIONS (baselink),
7553 template_args);
7555 if (!object_type)
7556 object_type = current_class_type;
7557 return adjust_result_of_qualified_name_lookup (baselink,
7558 qualifying_scope,
7559 object_type);
7562 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID. DONE is
7563 true if the qualified-id will be a postfix-expression in-and-of
7564 itself; false if more of the postfix-expression follows the
7565 QUALIFIED_ID. ADDRESS_P is true if the qualified-id is the operand
7566 of "&". */
7568 static tree
7569 tsubst_qualified_id (tree qualified_id, tree args,
7570 tsubst_flags_t complain, tree in_decl,
7571 bool done, bool address_p)
7573 tree expr;
7574 tree scope;
7575 tree name;
7576 bool is_template;
7577 tree template_args;
7579 gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
7581 /* Figure out what name to look up. */
7582 name = TREE_OPERAND (qualified_id, 1);
7583 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
7585 is_template = true;
7586 template_args = TREE_OPERAND (name, 1);
7587 if (template_args)
7588 template_args = tsubst_template_args (template_args, args,
7589 complain, in_decl);
7590 name = TREE_OPERAND (name, 0);
7592 else
7594 is_template = false;
7595 template_args = NULL_TREE;
7598 /* Substitute into the qualifying scope. When there are no ARGS, we
7599 are just trying to simplify a non-dependent expression. In that
7600 case the qualifying scope may be dependent, and, in any case,
7601 substituting will not help. */
7602 scope = TREE_OPERAND (qualified_id, 0);
7603 if (args)
7605 scope = tsubst (scope, args, complain, in_decl);
7606 expr = tsubst_copy (name, args, complain, in_decl);
7608 else
7609 expr = name;
7611 if (dependent_type_p (scope))
7612 return build_nt (SCOPE_REF, scope, expr);
7614 if (!BASELINK_P (name) && !DECL_P (expr))
7616 expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
7617 if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
7618 ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
7620 if (complain & tf_error)
7622 error ("dependent-name %qE is parsed as a non-type, but "
7623 "instantiation yields a type", qualified_id);
7624 inform ("say %<typename %E%> if a type is meant", qualified_id);
7626 return error_mark_node;
7630 if (DECL_P (expr))
7632 check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
7633 scope);
7634 /* Remember that there was a reference to this entity. */
7635 mark_used (expr);
7638 if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
7640 if (complain & tf_error)
7641 qualified_name_lookup_error (scope,
7642 TREE_OPERAND (qualified_id, 1),
7643 expr);
7644 return error_mark_node;
7647 if (is_template)
7648 expr = lookup_template_function (expr, template_args);
7650 if (expr == error_mark_node && complain & tf_error)
7651 qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
7652 expr);
7653 else if (TYPE_P (scope))
7655 expr = (adjust_result_of_qualified_name_lookup
7656 (expr, scope, current_class_type));
7657 expr = finish_qualified_id_expr (scope, expr, done, address_p);
7660 expr = convert_from_reference (expr);
7662 return expr;
7665 /* Like tsubst, but deals with expressions. This function just replaces
7666 template parms; to finish processing the resultant expression, use
7667 tsubst_expr. */
7669 static tree
7670 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
7672 enum tree_code code;
7673 tree r;
7675 if (t == NULL_TREE || t == error_mark_node)
7676 return t;
7678 code = TREE_CODE (t);
7680 switch (code)
7682 case PARM_DECL:
7683 r = retrieve_local_specialization (t);
7684 gcc_assert (r != NULL);
7685 mark_used (r);
7686 return r;
7688 case CONST_DECL:
7690 tree enum_type;
7691 tree v;
7693 if (DECL_TEMPLATE_PARM_P (t))
7694 return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
7695 /* There is no need to substitute into namespace-scope
7696 enumerators. */
7697 if (DECL_NAMESPACE_SCOPE_P (t))
7698 return t;
7699 /* If ARGS is NULL, then T is known to be non-dependent. */
7700 if (args == NULL_TREE)
7701 return integral_constant_value (t);
7703 /* Unfortunately, we cannot just call lookup_name here.
7704 Consider:
7706 template <int I> int f() {
7707 enum E { a = I };
7708 struct S { void g() { E e = a; } };
7711 When we instantiate f<7>::S::g(), say, lookup_name is not
7712 clever enough to find f<7>::a. */
7713 enum_type
7714 = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl,
7715 /*entering_scope=*/0);
7717 for (v = TYPE_VALUES (enum_type);
7718 v != NULL_TREE;
7719 v = TREE_CHAIN (v))
7720 if (TREE_PURPOSE (v) == DECL_NAME (t))
7721 return TREE_VALUE (v);
7723 /* We didn't find the name. That should never happen; if
7724 name-lookup found it during preliminary parsing, we
7725 should find it again here during instantiation. */
7726 gcc_unreachable ();
7728 return t;
7730 case FIELD_DECL:
7731 if (DECL_CONTEXT (t))
7733 tree ctx;
7735 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
7736 /*entering_scope=*/1);
7737 if (ctx != DECL_CONTEXT (t))
7739 tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
7740 if (!r)
7742 if (complain & tf_error)
7743 error ("using invalid field %qD", t);
7744 return error_mark_node;
7746 return r;
7750 return t;
7752 case VAR_DECL:
7753 case FUNCTION_DECL:
7754 if ((DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
7755 || local_variable_p (t))
7756 t = tsubst (t, args, complain, in_decl);
7757 mark_used (t);
7758 return t;
7760 case BASELINK:
7761 return tsubst_baselink (t, current_class_type, args, complain, in_decl);
7763 case TEMPLATE_DECL:
7764 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
7765 return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
7766 args, complain, in_decl);
7767 else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
7768 return tsubst (t, args, complain, in_decl);
7769 else if (DECL_CLASS_SCOPE_P (t)
7770 && uses_template_parms (DECL_CONTEXT (t)))
7772 /* Template template argument like the following example need
7773 special treatment:
7775 template <template <class> class TT> struct C {};
7776 template <class T> struct D {
7777 template <class U> struct E {};
7778 C<E> c; // #1
7780 D<int> d; // #2
7782 We are processing the template argument `E' in #1 for
7783 the template instantiation #2. Originally, `E' is a
7784 TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT. Now we
7785 have to substitute this with one having context `D<int>'. */
7787 tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
7788 return lookup_field (context, DECL_NAME(t), 0, false);
7790 else
7791 /* Ordinary template template argument. */
7792 return t;
7794 case CAST_EXPR:
7795 case REINTERPRET_CAST_EXPR:
7796 case CONST_CAST_EXPR:
7797 case STATIC_CAST_EXPR:
7798 case DYNAMIC_CAST_EXPR:
7799 case NOP_EXPR:
7800 return build1
7801 (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
7802 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
7804 case INDIRECT_REF:
7805 case NEGATE_EXPR:
7806 case TRUTH_NOT_EXPR:
7807 case BIT_NOT_EXPR:
7808 case ADDR_EXPR:
7809 case UNARY_PLUS_EXPR: /* Unary + */
7810 case SIZEOF_EXPR:
7811 case ALIGNOF_EXPR:
7812 case ARROW_EXPR:
7813 case THROW_EXPR:
7814 case TYPEID_EXPR:
7815 case REALPART_EXPR:
7816 case IMAGPART_EXPR:
7817 return build1
7818 (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
7819 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
7821 case COMPONENT_REF:
7823 tree object;
7824 tree name;
7826 object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
7827 name = TREE_OPERAND (t, 1);
7828 if (TREE_CODE (name) == BIT_NOT_EXPR)
7830 name = tsubst_copy (TREE_OPERAND (name, 0), args,
7831 complain, in_decl);
7832 name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
7834 else if (TREE_CODE (name) == SCOPE_REF
7835 && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
7837 tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
7838 complain, in_decl);
7839 name = TREE_OPERAND (name, 1);
7840 name = tsubst_copy (TREE_OPERAND (name, 0), args,
7841 complain, in_decl);
7842 name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
7843 name = build_nt (SCOPE_REF, base, name);
7845 else if (TREE_CODE (name) == BASELINK)
7846 name = tsubst_baselink (name,
7847 non_reference (TREE_TYPE (object)),
7848 args, complain,
7849 in_decl);
7850 else
7851 name = tsubst_copy (name, args, complain, in_decl);
7852 return build_nt (COMPONENT_REF, object, name, NULL_TREE);
7855 case PLUS_EXPR:
7856 case MINUS_EXPR:
7857 case MULT_EXPR:
7858 case TRUNC_DIV_EXPR:
7859 case CEIL_DIV_EXPR:
7860 case FLOOR_DIV_EXPR:
7861 case ROUND_DIV_EXPR:
7862 case EXACT_DIV_EXPR:
7863 case BIT_AND_EXPR:
7864 case BIT_IOR_EXPR:
7865 case BIT_XOR_EXPR:
7866 case TRUNC_MOD_EXPR:
7867 case FLOOR_MOD_EXPR:
7868 case TRUTH_ANDIF_EXPR:
7869 case TRUTH_ORIF_EXPR:
7870 case TRUTH_AND_EXPR:
7871 case TRUTH_OR_EXPR:
7872 case RSHIFT_EXPR:
7873 case LSHIFT_EXPR:
7874 case RROTATE_EXPR:
7875 case LROTATE_EXPR:
7876 case EQ_EXPR:
7877 case NE_EXPR:
7878 case MAX_EXPR:
7879 case MIN_EXPR:
7880 case LE_EXPR:
7881 case GE_EXPR:
7882 case LT_EXPR:
7883 case GT_EXPR:
7884 case COMPOUND_EXPR:
7885 case SCOPE_REF:
7886 case DOTSTAR_EXPR:
7887 case MEMBER_REF:
7888 case PREDECREMENT_EXPR:
7889 case PREINCREMENT_EXPR:
7890 case POSTDECREMENT_EXPR:
7891 case POSTINCREMENT_EXPR:
7892 return build_nt
7893 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7894 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
7896 case ARRAY_REF:
7897 return build_nt
7898 (ARRAY_REF,
7899 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7900 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
7901 NULL_TREE, NULL_TREE);
7903 case CALL_EXPR:
7904 return build_nt (code,
7905 tsubst_copy (TREE_OPERAND (t, 0), args,
7906 complain, in_decl),
7907 tsubst_copy (TREE_OPERAND (t, 1), args, complain,
7908 in_decl),
7909 NULL_TREE);
7911 case COND_EXPR:
7912 case MODOP_EXPR:
7913 case PSEUDO_DTOR_EXPR:
7915 r = build_nt
7916 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7917 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
7918 tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
7919 TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
7920 return r;
7923 case NEW_EXPR:
7925 r = build_nt
7926 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7927 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
7928 tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
7929 NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
7930 return r;
7933 case DELETE_EXPR:
7935 r = build_nt
7936 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7937 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
7938 DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
7939 DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
7940 return r;
7943 case TEMPLATE_ID_EXPR:
7945 /* Substituted template arguments */
7946 tree fn = TREE_OPERAND (t, 0);
7947 tree targs = TREE_OPERAND (t, 1);
7949 fn = tsubst_copy (fn, args, complain, in_decl);
7950 if (targs)
7951 targs = tsubst_template_args (targs, args, complain, in_decl);
7953 return lookup_template_function (fn, targs);
7956 case TREE_LIST:
7958 tree purpose, value, chain;
7960 if (t == void_list_node)
7961 return t;
7963 purpose = TREE_PURPOSE (t);
7964 if (purpose)
7965 purpose = tsubst_copy (purpose, args, complain, in_decl);
7966 value = TREE_VALUE (t);
7967 if (value)
7968 value = tsubst_copy (value, args, complain, in_decl);
7969 chain = TREE_CHAIN (t);
7970 if (chain && chain != void_type_node)
7971 chain = tsubst_copy (chain, args, complain, in_decl);
7972 if (purpose == TREE_PURPOSE (t)
7973 && value == TREE_VALUE (t)
7974 && chain == TREE_CHAIN (t))
7975 return t;
7976 return tree_cons (purpose, value, chain);
7979 case RECORD_TYPE:
7980 case UNION_TYPE:
7981 case ENUMERAL_TYPE:
7982 case INTEGER_TYPE:
7983 case TEMPLATE_TYPE_PARM:
7984 case TEMPLATE_TEMPLATE_PARM:
7985 case BOUND_TEMPLATE_TEMPLATE_PARM:
7986 case TEMPLATE_PARM_INDEX:
7987 case POINTER_TYPE:
7988 case REFERENCE_TYPE:
7989 case OFFSET_TYPE:
7990 case FUNCTION_TYPE:
7991 case METHOD_TYPE:
7992 case ARRAY_TYPE:
7993 case TYPENAME_TYPE:
7994 case UNBOUND_CLASS_TEMPLATE:
7995 case TYPEOF_TYPE:
7996 case TYPE_DECL:
7997 return tsubst (t, args, complain, in_decl);
7999 case IDENTIFIER_NODE:
8000 if (IDENTIFIER_TYPENAME_P (t))
8002 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8003 return mangle_conv_op_name_for_type (new_type);
8005 else
8006 return t;
8008 case CONSTRUCTOR:
8009 /* This is handled by tsubst_copy_and_build. */
8010 gcc_unreachable ();
8012 case VA_ARG_EXPR:
8013 return build_x_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
8014 in_decl),
8015 tsubst (TREE_TYPE (t), args, complain, in_decl));
8017 case CLEANUP_POINT_EXPR:
8018 /* We shouldn't have built any of these during initial template
8019 generation. Instead, they should be built during instantiation
8020 in response to the saved STMT_IS_FULL_EXPR_P setting. */
8021 gcc_unreachable ();
8023 default:
8024 return t;
8028 /* Like tsubst_copy for expressions, etc. but also does semantic
8029 processing. */
8031 static tree
8032 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl)
8034 tree stmt, tmp;
8036 if (t == NULL_TREE || t == error_mark_node)
8037 return t;
8039 if (EXPR_HAS_LOCATION (t))
8040 input_location = EXPR_LOCATION (t);
8041 if (STATEMENT_CODE_P (TREE_CODE (t)))
8042 current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
8044 switch (TREE_CODE (t))
8046 case STATEMENT_LIST:
8048 tree_stmt_iterator i;
8049 for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
8050 tsubst_expr (tsi_stmt (i), args, complain, in_decl);
8051 break;
8054 case CTOR_INITIALIZER:
8055 finish_mem_initializers (tsubst_initializer_list
8056 (TREE_OPERAND (t, 0), args));
8057 break;
8059 case RETURN_EXPR:
8060 finish_return_stmt (tsubst_expr (TREE_OPERAND (t, 0),
8061 args, complain, in_decl));
8062 break;
8064 case EXPR_STMT:
8065 tmp = tsubst_expr (EXPR_STMT_EXPR (t), args, complain, in_decl);
8066 if (EXPR_STMT_STMT_EXPR_RESULT (t))
8067 finish_stmt_expr_expr (tmp, cur_stmt_expr);
8068 else
8069 finish_expr_stmt (tmp);
8070 break;
8072 case USING_STMT:
8073 do_using_directive (tsubst_expr (USING_STMT_NAMESPACE (t),
8074 args, complain, in_decl));
8075 break;
8077 case DECL_EXPR:
8079 tree decl;
8080 tree init;
8082 decl = DECL_EXPR_DECL (t);
8083 if (TREE_CODE (decl) == LABEL_DECL)
8084 finish_label_decl (DECL_NAME (decl));
8085 else if (TREE_CODE (decl) == USING_DECL)
8087 tree scope = USING_DECL_SCOPE (decl);
8088 tree name = DECL_NAME (decl);
8089 tree decl;
8091 scope = tsubst_expr (scope, args, complain, in_decl);
8092 decl = lookup_qualified_name (scope, name,
8093 /*is_type_p=*/false,
8094 /*complain=*/false);
8095 if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
8096 qualified_name_lookup_error (scope, name, decl);
8097 else
8098 do_local_using_decl (decl, scope, name);
8100 else
8102 init = DECL_INITIAL (decl);
8103 decl = tsubst (decl, args, complain, in_decl);
8104 if (decl != error_mark_node)
8106 if (init)
8107 DECL_INITIAL (decl) = error_mark_node;
8108 /* By marking the declaration as instantiated, we avoid
8109 trying to instantiate it. Since instantiate_decl can't
8110 handle local variables, and since we've already done
8111 all that needs to be done, that's the right thing to
8112 do. */
8113 if (TREE_CODE (decl) == VAR_DECL)
8114 DECL_TEMPLATE_INSTANTIATED (decl) = 1;
8115 if (TREE_CODE (decl) == VAR_DECL
8116 && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
8117 /* Anonymous aggregates are a special case. */
8118 finish_anon_union (decl);
8119 else
8121 maybe_push_decl (decl);
8122 if (TREE_CODE (decl) == VAR_DECL
8123 && DECL_PRETTY_FUNCTION_P (decl))
8125 /* For __PRETTY_FUNCTION__ we have to adjust the
8126 initializer. */
8127 const char *const name
8128 = cxx_printable_name (current_function_decl, 2);
8129 init = cp_fname_init (name, &TREE_TYPE (decl));
8131 else
8132 init = tsubst_expr (init, args, complain, in_decl);
8133 cp_finish_decl (decl, init, NULL_TREE, 0);
8138 /* A DECL_EXPR can also be used as an expression, in the condition
8139 clause of an if/for/while construct. */
8140 return decl;
8143 case FOR_STMT:
8144 stmt = begin_for_stmt ();
8145 tsubst_expr (FOR_INIT_STMT (t), args, complain, in_decl);
8146 finish_for_init_stmt (stmt);
8147 tmp = tsubst_expr (FOR_COND (t), args, complain, in_decl);
8148 finish_for_cond (tmp, stmt);
8149 tmp = tsubst_expr (FOR_EXPR (t), args, complain, in_decl);
8150 finish_for_expr (tmp, stmt);
8151 tsubst_expr (FOR_BODY (t), args, complain, in_decl);
8152 finish_for_stmt (stmt);
8153 break;
8155 case WHILE_STMT:
8156 stmt = begin_while_stmt ();
8157 tmp = tsubst_expr (WHILE_COND (t), args, complain, in_decl);
8158 finish_while_stmt_cond (tmp, stmt);
8159 tsubst_expr (WHILE_BODY (t), args, complain, in_decl);
8160 finish_while_stmt (stmt);
8161 break;
8163 case DO_STMT:
8164 stmt = begin_do_stmt ();
8165 tsubst_expr (DO_BODY (t), args, complain, in_decl);
8166 finish_do_body (stmt);
8167 tmp = tsubst_expr (DO_COND (t), args, complain, in_decl);
8168 finish_do_stmt (tmp, stmt);
8169 break;
8171 case IF_STMT:
8172 stmt = begin_if_stmt ();
8173 tmp = tsubst_expr (IF_COND (t), args, complain, in_decl);
8174 finish_if_stmt_cond (tmp, stmt);
8175 tsubst_expr (THEN_CLAUSE (t), args, complain, in_decl);
8176 finish_then_clause (stmt);
8178 if (ELSE_CLAUSE (t))
8180 begin_else_clause (stmt);
8181 tsubst_expr (ELSE_CLAUSE (t), args, complain, in_decl);
8182 finish_else_clause (stmt);
8185 finish_if_stmt (stmt);
8186 break;
8188 case BIND_EXPR:
8189 if (BIND_EXPR_BODY_BLOCK (t))
8190 stmt = begin_function_body ();
8191 else
8192 stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
8193 ? BCS_TRY_BLOCK : 0);
8195 tsubst_expr (BIND_EXPR_BODY (t), args, complain, in_decl);
8197 if (BIND_EXPR_BODY_BLOCK (t))
8198 finish_function_body (stmt);
8199 else
8200 finish_compound_stmt (stmt);
8201 break;
8203 case BREAK_STMT:
8204 finish_break_stmt ();
8205 break;
8207 case CONTINUE_STMT:
8208 finish_continue_stmt ();
8209 break;
8211 case SWITCH_STMT:
8212 stmt = begin_switch_stmt ();
8213 tmp = tsubst_expr (SWITCH_STMT_COND (t), args, complain, in_decl);
8214 finish_switch_cond (tmp, stmt);
8215 tsubst_expr (SWITCH_STMT_BODY (t), args, complain, in_decl);
8216 finish_switch_stmt (stmt);
8217 break;
8219 case CASE_LABEL_EXPR:
8220 finish_case_label (tsubst_expr (CASE_LOW (t), args, complain, in_decl),
8221 tsubst_expr (CASE_HIGH (t), args, complain,
8222 in_decl));
8223 break;
8225 case LABEL_EXPR:
8226 finish_label_stmt (DECL_NAME (LABEL_EXPR_LABEL (t)));
8227 break;
8229 case GOTO_EXPR:
8230 tmp = GOTO_DESTINATION (t);
8231 if (TREE_CODE (tmp) != LABEL_DECL)
8232 /* Computed goto's must be tsubst'd into. On the other hand,
8233 non-computed gotos must not be; the identifier in question
8234 will have no binding. */
8235 tmp = tsubst_expr (tmp, args, complain, in_decl);
8236 else
8237 tmp = DECL_NAME (tmp);
8238 finish_goto_stmt (tmp);
8239 break;
8241 case ASM_EXPR:
8242 tmp = finish_asm_stmt
8243 (ASM_VOLATILE_P (t),
8244 tsubst_expr (ASM_STRING (t), args, complain, in_decl),
8245 tsubst_expr (ASM_OUTPUTS (t), args, complain, in_decl),
8246 tsubst_expr (ASM_INPUTS (t), args, complain, in_decl),
8247 tsubst_expr (ASM_CLOBBERS (t), args, complain, in_decl));
8249 tree asm_expr = tmp;
8250 if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
8251 asm_expr = TREE_OPERAND (asm_expr, 0);
8252 ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
8254 break;
8256 case TRY_BLOCK:
8257 if (CLEANUP_P (t))
8259 stmt = begin_try_block ();
8260 tsubst_expr (TRY_STMTS (t), args, complain, in_decl);
8261 finish_cleanup_try_block (stmt);
8262 finish_cleanup (tsubst_expr (TRY_HANDLERS (t), args,
8263 complain, in_decl),
8264 stmt);
8266 else
8268 if (FN_TRY_BLOCK_P (t))
8269 stmt = begin_function_try_block ();
8270 else
8271 stmt = begin_try_block ();
8273 tsubst_expr (TRY_STMTS (t), args, complain, in_decl);
8275 if (FN_TRY_BLOCK_P (t))
8276 finish_function_try_block (stmt);
8277 else
8278 finish_try_block (stmt);
8280 tsubst_expr (TRY_HANDLERS (t), args, complain, in_decl);
8281 if (FN_TRY_BLOCK_P (t))
8282 finish_function_handler_sequence (stmt);
8283 else
8284 finish_handler_sequence (stmt);
8286 break;
8288 case HANDLER:
8290 tree decl;
8292 stmt = begin_handler ();
8293 if (HANDLER_PARMS (t))
8295 decl = HANDLER_PARMS (t);
8296 decl = tsubst (decl, args, complain, in_decl);
8297 /* Prevent instantiate_decl from trying to instantiate
8298 this variable. We've already done all that needs to be
8299 done. */
8300 DECL_TEMPLATE_INSTANTIATED (decl) = 1;
8302 else
8303 decl = NULL_TREE;
8304 finish_handler_parms (decl, stmt);
8305 tsubst_expr (HANDLER_BODY (t), args, complain, in_decl);
8306 finish_handler (stmt);
8308 break;
8310 case TAG_DEFN:
8311 tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
8312 break;
8314 default:
8315 gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
8317 return tsubst_copy_and_build (t, args, complain, in_decl,
8318 /*function_p=*/false);
8321 return NULL_TREE;
8324 /* T is a postfix-expression that is not being used in a function
8325 call. Return the substituted version of T. */
8327 static tree
8328 tsubst_non_call_postfix_expression (tree t, tree args,
8329 tsubst_flags_t complain,
8330 tree in_decl)
8332 if (TREE_CODE (t) == SCOPE_REF)
8333 t = tsubst_qualified_id (t, args, complain, in_decl,
8334 /*done=*/false, /*address_p=*/false);
8335 else
8336 t = tsubst_copy_and_build (t, args, complain, in_decl,
8337 /*function_p=*/false);
8339 return t;
8342 /* Like tsubst but deals with expressions and performs semantic
8343 analysis. FUNCTION_P is true if T is the "F" in "F (ARGS)". */
8345 tree
8346 tsubst_copy_and_build (tree t,
8347 tree args,
8348 tsubst_flags_t complain,
8349 tree in_decl,
8350 bool function_p)
8352 #define RECUR(NODE) \
8353 tsubst_copy_and_build (NODE, args, complain, in_decl, /*function_p=*/false)
8355 tree op1;
8357 if (t == NULL_TREE || t == error_mark_node)
8358 return t;
8360 switch (TREE_CODE (t))
8362 case USING_DECL:
8363 t = DECL_NAME (t);
8364 /* Fall through. */
8365 case IDENTIFIER_NODE:
8367 tree decl;
8368 cp_id_kind idk;
8369 tree qualifying_class;
8370 bool non_integral_constant_expression_p;
8371 const char *error_msg;
8373 if (IDENTIFIER_TYPENAME_P (t))
8375 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8376 t = mangle_conv_op_name_for_type (new_type);
8379 /* Look up the name. */
8380 decl = lookup_name (t, 0);
8382 /* By convention, expressions use ERROR_MARK_NODE to indicate
8383 failure, not NULL_TREE. */
8384 if (decl == NULL_TREE)
8385 decl = error_mark_node;
8387 decl = finish_id_expression (t, decl, NULL_TREE,
8388 &idk,
8389 &qualifying_class,
8390 /*integral_constant_expression_p=*/false,
8391 /*allow_non_integral_constant_expression_p=*/false,
8392 &non_integral_constant_expression_p,
8393 &error_msg);
8394 if (error_msg)
8395 error (error_msg);
8396 if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
8397 decl = unqualified_name_lookup_error (decl);
8398 return decl;
8401 case TEMPLATE_ID_EXPR:
8403 tree object;
8404 tree template = RECUR (TREE_OPERAND (t, 0));
8405 tree targs = TREE_OPERAND (t, 1);
8407 if (targs)
8408 targs = tsubst_template_args (targs, args, complain, in_decl);
8410 if (TREE_CODE (template) == COMPONENT_REF)
8412 object = TREE_OPERAND (template, 0);
8413 template = TREE_OPERAND (template, 1);
8415 else
8416 object = NULL_TREE;
8417 template = lookup_template_function (template, targs);
8419 if (object)
8420 return build3 (COMPONENT_REF, TREE_TYPE (template),
8421 object, template, NULL_TREE);
8422 else
8423 return template;
8426 case INDIRECT_REF:
8428 tree r = RECUR (TREE_OPERAND (t, 0));
8430 if (REFERENCE_REF_P (t))
8432 /* A type conversion to reference type will be enclosed in
8433 such an indirect ref, but the substitution of the cast
8434 will have also added such an indirect ref. */
8435 if (TREE_CODE (TREE_TYPE (r)) == REFERENCE_TYPE)
8436 r = convert_from_reference (r);
8438 else
8439 r = build_x_indirect_ref (r, "unary *");
8440 return r;
8443 case NOP_EXPR:
8444 return build_nop
8445 (tsubst (TREE_TYPE (t), args, complain, in_decl),
8446 RECUR (TREE_OPERAND (t, 0)));
8448 case CAST_EXPR:
8449 return build_functional_cast
8450 (tsubst (TREE_TYPE (t), args, complain, in_decl),
8451 RECUR (TREE_OPERAND (t, 0)));
8453 case REINTERPRET_CAST_EXPR:
8454 return build_reinterpret_cast
8455 (tsubst (TREE_TYPE (t), args, complain, in_decl),
8456 RECUR (TREE_OPERAND (t, 0)));
8458 case CONST_CAST_EXPR:
8459 return build_const_cast
8460 (tsubst (TREE_TYPE (t), args, complain, in_decl),
8461 RECUR (TREE_OPERAND (t, 0)));
8463 case DYNAMIC_CAST_EXPR:
8464 return build_dynamic_cast
8465 (tsubst (TREE_TYPE (t), args, complain, in_decl),
8466 RECUR (TREE_OPERAND (t, 0)));
8468 case STATIC_CAST_EXPR:
8469 return build_static_cast
8470 (tsubst (TREE_TYPE (t), args, complain, in_decl),
8471 RECUR (TREE_OPERAND (t, 0)));
8473 case POSTDECREMENT_EXPR:
8474 case POSTINCREMENT_EXPR:
8475 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8476 args, complain, in_decl);
8477 return build_x_unary_op (TREE_CODE (t), op1);
8479 case PREDECREMENT_EXPR:
8480 case PREINCREMENT_EXPR:
8481 case NEGATE_EXPR:
8482 case BIT_NOT_EXPR:
8483 case ABS_EXPR:
8484 case TRUTH_NOT_EXPR:
8485 case UNARY_PLUS_EXPR: /* Unary + */
8486 case REALPART_EXPR:
8487 case IMAGPART_EXPR:
8488 return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)));
8490 case ADDR_EXPR:
8491 op1 = TREE_OPERAND (t, 0);
8492 if (TREE_CODE (op1) == SCOPE_REF)
8493 op1 = tsubst_qualified_id (op1, args, complain, in_decl,
8494 /*done=*/true, /*address_p=*/true);
8495 else
8496 op1 = tsubst_non_call_postfix_expression (op1, args, complain,
8497 in_decl);
8498 if (TREE_CODE (op1) == LABEL_DECL)
8499 return finish_label_address_expr (DECL_NAME (op1));
8500 return build_x_unary_op (ADDR_EXPR, op1);
8502 case PLUS_EXPR:
8503 case MINUS_EXPR:
8504 case MULT_EXPR:
8505 case TRUNC_DIV_EXPR:
8506 case CEIL_DIV_EXPR:
8507 case FLOOR_DIV_EXPR:
8508 case ROUND_DIV_EXPR:
8509 case EXACT_DIV_EXPR:
8510 case BIT_AND_EXPR:
8511 case BIT_IOR_EXPR:
8512 case BIT_XOR_EXPR:
8513 case TRUNC_MOD_EXPR:
8514 case FLOOR_MOD_EXPR:
8515 case TRUTH_ANDIF_EXPR:
8516 case TRUTH_ORIF_EXPR:
8517 case TRUTH_AND_EXPR:
8518 case TRUTH_OR_EXPR:
8519 case RSHIFT_EXPR:
8520 case LSHIFT_EXPR:
8521 case RROTATE_EXPR:
8522 case LROTATE_EXPR:
8523 case EQ_EXPR:
8524 case NE_EXPR:
8525 case MAX_EXPR:
8526 case MIN_EXPR:
8527 case LE_EXPR:
8528 case GE_EXPR:
8529 case LT_EXPR:
8530 case GT_EXPR:
8531 case MEMBER_REF:
8532 case DOTSTAR_EXPR:
8533 return build_x_binary_op
8534 (TREE_CODE (t),
8535 RECUR (TREE_OPERAND (t, 0)),
8536 RECUR (TREE_OPERAND (t, 1)),
8537 /*overloaded_p=*/NULL);
8539 case SCOPE_REF:
8540 return tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
8541 /*address_p=*/false);
8542 case ARRAY_REF:
8543 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8544 args, complain, in_decl);
8545 return build_x_binary_op (ARRAY_REF, op1, RECUR (TREE_OPERAND (t, 1)),
8546 /*overloaded_p=*/NULL);
8548 case SIZEOF_EXPR:
8549 case ALIGNOF_EXPR:
8550 op1 = TREE_OPERAND (t, 0);
8551 if (!args)
8553 /* When there are no ARGS, we are trying to evaluate a
8554 non-dependent expression from the parser. Trying to do
8555 the substitutions may not work. */
8556 if (!TYPE_P (op1))
8557 op1 = TREE_TYPE (op1);
8559 else
8561 ++skip_evaluation;
8562 op1 = RECUR (op1);
8563 --skip_evaluation;
8565 if (TYPE_P (op1))
8566 return cxx_sizeof_or_alignof_type (op1, TREE_CODE (t), true);
8567 else
8568 return cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t));
8570 case MODOP_EXPR:
8572 tree r = build_x_modify_expr
8573 (RECUR (TREE_OPERAND (t, 0)),
8574 TREE_CODE (TREE_OPERAND (t, 1)),
8575 RECUR (TREE_OPERAND (t, 2)));
8576 /* TREE_NO_WARNING must be set if either the expression was
8577 parenthesized or it uses an operator such as >>= rather
8578 than plain assignment. In the former case, it was already
8579 set and must be copied. In the latter case,
8580 build_x_modify_expr sets it and it must not be reset
8581 here. */
8582 if (TREE_NO_WARNING (t))
8583 TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
8584 return r;
8587 case ARROW_EXPR:
8588 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8589 args, complain, in_decl);
8590 /* Remember that there was a reference to this entity. */
8591 if (DECL_P (op1))
8592 mark_used (op1);
8593 return build_x_arrow (op1);
8595 case NEW_EXPR:
8596 return build_new
8597 (RECUR (TREE_OPERAND (t, 0)),
8598 RECUR (TREE_OPERAND (t, 1)),
8599 RECUR (TREE_OPERAND (t, 2)),
8600 RECUR (TREE_OPERAND (t, 3)),
8601 NEW_EXPR_USE_GLOBAL (t));
8603 case DELETE_EXPR:
8604 return delete_sanity
8605 (RECUR (TREE_OPERAND (t, 0)),
8606 RECUR (TREE_OPERAND (t, 1)),
8607 DELETE_EXPR_USE_VEC (t),
8608 DELETE_EXPR_USE_GLOBAL (t));
8610 case COMPOUND_EXPR:
8611 return build_x_compound_expr (RECUR (TREE_OPERAND (t, 0)),
8612 RECUR (TREE_OPERAND (t, 1)));
8614 case CALL_EXPR:
8616 tree function;
8617 tree call_args;
8618 bool qualified_p;
8619 bool koenig_p;
8621 function = TREE_OPERAND (t, 0);
8622 /* When we parsed the expression, we determined whether or
8623 not Koenig lookup should be performed. */
8624 koenig_p = KOENIG_LOOKUP_P (t);
8625 if (TREE_CODE (function) == SCOPE_REF)
8627 qualified_p = true;
8628 function = tsubst_qualified_id (function, args, complain, in_decl,
8629 /*done=*/false,
8630 /*address_p=*/false);
8632 else
8634 qualified_p = (TREE_CODE (function) == COMPONENT_REF
8635 && (TREE_CODE (TREE_OPERAND (function, 1))
8636 == SCOPE_REF));
8637 function = tsubst_copy_and_build (function, args, complain,
8638 in_decl,
8639 !qualified_p);
8640 if (BASELINK_P (function))
8641 qualified_p = true;
8644 call_args = RECUR (TREE_OPERAND (t, 1));
8646 /* We do not perform argument-dependent lookup if normal
8647 lookup finds a non-function, in accordance with the
8648 expected resolution of DR 218. */
8649 if (koenig_p
8650 && ((is_overloaded_fn (function)
8651 /* If lookup found a member function, the Koenig lookup is
8652 not appropriate, even if an unqualified-name was used
8653 to denote the function. */
8654 && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
8655 || TREE_CODE (function) == IDENTIFIER_NODE))
8656 function = perform_koenig_lookup (function, call_args);
8658 if (TREE_CODE (function) == IDENTIFIER_NODE)
8660 unqualified_name_lookup_error (function);
8661 return error_mark_node;
8664 /* Remember that there was a reference to this entity. */
8665 if (DECL_P (function))
8666 mark_used (function);
8668 if (TREE_CODE (function) == OFFSET_REF)
8669 return build_offset_ref_call_from_tree (function, call_args);
8670 if (TREE_CODE (function) == COMPONENT_REF)
8672 if (!BASELINK_P (TREE_OPERAND (function, 1)))
8673 return finish_call_expr (function, call_args,
8674 /*disallow_virtual=*/false,
8675 /*koenig_p=*/false);
8676 else
8677 return (build_new_method_call
8678 (TREE_OPERAND (function, 0),
8679 TREE_OPERAND (function, 1),
8680 call_args, NULL_TREE,
8681 qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL));
8683 return finish_call_expr (function, call_args,
8684 /*disallow_virtual=*/qualified_p,
8685 koenig_p);
8688 case COND_EXPR:
8689 return build_x_conditional_expr
8690 (RECUR (TREE_OPERAND (t, 0)),
8691 RECUR (TREE_OPERAND (t, 1)),
8692 RECUR (TREE_OPERAND (t, 2)));
8694 case PSEUDO_DTOR_EXPR:
8695 return finish_pseudo_destructor_expr
8696 (RECUR (TREE_OPERAND (t, 0)),
8697 RECUR (TREE_OPERAND (t, 1)),
8698 RECUR (TREE_OPERAND (t, 2)));
8700 case TREE_LIST:
8702 tree purpose, value, chain;
8704 if (t == void_list_node)
8705 return t;
8707 purpose = TREE_PURPOSE (t);
8708 if (purpose)
8709 purpose = RECUR (purpose);
8710 value = TREE_VALUE (t);
8711 if (value)
8712 value = RECUR (value);
8713 chain = TREE_CHAIN (t);
8714 if (chain && chain != void_type_node)
8715 chain = RECUR (chain);
8716 if (purpose == TREE_PURPOSE (t)
8717 && value == TREE_VALUE (t)
8718 && chain == TREE_CHAIN (t))
8719 return t;
8720 return tree_cons (purpose, value, chain);
8723 case COMPONENT_REF:
8725 tree object;
8726 tree member;
8728 object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8729 args, complain, in_decl);
8730 /* Remember that there was a reference to this entity. */
8731 if (DECL_P (object))
8732 mark_used (object);
8734 member = TREE_OPERAND (t, 1);
8735 if (BASELINK_P (member))
8736 member = tsubst_baselink (member,
8737 non_reference (TREE_TYPE (object)),
8738 args, complain, in_decl);
8739 else
8740 member = tsubst_copy (member, args, complain, in_decl);
8742 if (member == error_mark_node)
8743 return error_mark_node;
8744 else if (!CLASS_TYPE_P (TREE_TYPE (object)))
8746 if (TREE_CODE (member) == BIT_NOT_EXPR)
8747 return finish_pseudo_destructor_expr (object,
8748 NULL_TREE,
8749 TREE_TYPE (object));
8750 else if (TREE_CODE (member) == SCOPE_REF
8751 && (TREE_CODE (TREE_OPERAND (member, 1)) == BIT_NOT_EXPR))
8752 return finish_pseudo_destructor_expr (object,
8753 object,
8754 TREE_TYPE (object));
8756 else if (TREE_CODE (member) == SCOPE_REF
8757 && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
8759 tree tmpl;
8760 tree args;
8762 /* Lookup the template functions now that we know what the
8763 scope is. */
8764 tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
8765 args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
8766 member = lookup_qualified_name (TREE_OPERAND (member, 0), tmpl,
8767 /*is_type_p=*/false,
8768 /*complain=*/false);
8769 if (BASELINK_P (member))
8771 BASELINK_FUNCTIONS (member)
8772 = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
8773 args);
8774 member = (adjust_result_of_qualified_name_lookup
8775 (member, BINFO_TYPE (BASELINK_BINFO (member)),
8776 TREE_TYPE (object)));
8778 else
8780 qualified_name_lookup_error (TREE_TYPE (object), tmpl,
8781 member);
8782 return error_mark_node;
8785 else if (TREE_CODE (member) == SCOPE_REF
8786 && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
8787 && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
8789 if (complain & tf_error)
8791 if (TYPE_P (TREE_OPERAND (member, 0)))
8792 error ("%qT is not a class or namespace",
8793 TREE_OPERAND (member, 0));
8794 else
8795 error ("%qD is not a class or namespace",
8796 TREE_OPERAND (member, 0));
8798 return error_mark_node;
8800 else if (TREE_CODE (member) == FIELD_DECL)
8801 return finish_non_static_data_member (member, object, NULL_TREE);
8803 return finish_class_member_access_expr (object, member);
8806 case THROW_EXPR:
8807 return build_throw
8808 (RECUR (TREE_OPERAND (t, 0)));
8810 case CONSTRUCTOR:
8812 VEC(constructor_elt,gc) *n;
8813 constructor_elt *ce;
8814 unsigned HOST_WIDE_INT idx;
8815 tree r;
8816 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8817 bool process_index_p;
8819 /* digest_init will do the wrong thing if we let it. */
8820 if (type && TYPE_PTRMEMFUNC_P (type))
8821 return t;
8823 /* We do not want to process the index of aggregate
8824 initializers as they are identifier nodes which will be
8825 looked up by digest_init. */
8826 process_index_p = !(type && IS_AGGR_TYPE (type));
8828 n = VEC_copy (constructor_elt, gc, CONSTRUCTOR_ELTS (t));
8829 for (idx = 0; VEC_iterate (constructor_elt, n, idx, ce); idx++)
8831 if (ce->index && process_index_p)
8832 ce->index = RECUR (ce->index);
8833 ce->value = RECUR (ce->value);
8836 r = build_constructor (NULL_TREE, n);
8837 TREE_HAS_CONSTRUCTOR (r) = TREE_HAS_CONSTRUCTOR (t);
8839 if (type)
8840 return digest_init (type, r);
8841 return r;
8844 case TYPEID_EXPR:
8846 tree operand_0 = RECUR (TREE_OPERAND (t, 0));
8847 if (TYPE_P (operand_0))
8848 return get_typeid (operand_0);
8849 return build_typeid (operand_0);
8852 case VAR_DECL:
8853 if (!args)
8854 return t;
8855 /* Fall through */
8857 case PARM_DECL:
8859 tree r = tsubst_copy (t, args, complain, in_decl);
8861 if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
8862 /* If the original type was a reference, we'll be wrapped in
8863 the appropriate INDIRECT_REF. */
8864 r = convert_from_reference (r);
8865 return r;
8868 case VA_ARG_EXPR:
8869 return build_x_va_arg (RECUR (TREE_OPERAND (t, 0)),
8870 tsubst_copy (TREE_TYPE (t), args, complain,
8871 in_decl));
8873 case OFFSETOF_EXPR:
8874 return fold_offsetof (RECUR (TREE_OPERAND (t, 0)));
8876 case STMT_EXPR:
8878 tree old_stmt_expr = cur_stmt_expr;
8879 tree stmt_expr = begin_stmt_expr ();
8881 cur_stmt_expr = stmt_expr;
8882 tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl);
8883 stmt_expr = finish_stmt_expr (stmt_expr, false);
8884 cur_stmt_expr = old_stmt_expr;
8886 return stmt_expr;
8889 case CONST_DECL:
8890 t = tsubst_copy (t, args, complain, in_decl);
8891 /* As in finish_id_expression, we resolve enumeration constants
8892 to their underlying values. */
8893 if (TREE_CODE (t) == CONST_DECL)
8894 return DECL_INITIAL (t);
8895 return t;
8897 default:
8898 /* Handle Objective-C++ constructs, if appropriate. */
8900 tree subst
8901 = objcp_tsubst_copy_and_build (t, args, complain,
8902 in_decl, /*function_p=*/false);
8903 if (subst)
8904 return subst;
8906 return tsubst_copy (t, args, complain, in_decl);
8909 #undef RECUR
8912 /* Verify that the instantiated ARGS are valid. For type arguments,
8913 make sure that the type's linkage is ok. For non-type arguments,
8914 make sure they are constants if they are integral or enumerations.
8915 Emit an error under control of COMPLAIN, and return TRUE on error. */
8917 static bool
8918 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
8920 int ix, len = DECL_NTPARMS (tmpl);
8921 bool result = false;
8922 bool error_p = complain & tf_error;
8924 for (ix = 0; ix != len; ix++)
8926 tree t = TREE_VEC_ELT (args, ix);
8928 if (TYPE_P (t))
8930 /* [basic.link]: A name with no linkage (notably, the name
8931 of a class or enumeration declared in a local scope)
8932 shall not be used to declare an entity with linkage.
8933 This implies that names with no linkage cannot be used as
8934 template arguments. */
8935 tree nt = no_linkage_check (t, /*relaxed_p=*/false);
8937 if (nt)
8939 if (TYPE_ANONYMOUS_P (nt))
8940 error ("%qT is/uses anonymous type", t);
8941 else
8942 error ("%qT uses local type %qT", t, nt);
8943 result = true;
8944 error_p = true;
8946 /* In order to avoid all sorts of complications, we do not
8947 allow variably-modified types as template arguments. */
8948 else if (variably_modified_type_p (t, NULL_TREE))
8950 if (complain & tf_error)
8951 error ("%qT is a variably modified type", t);
8952 result = true;
8955 /* A non-type argument of integral or enumerated type must be a
8956 constant. */
8957 else if (TREE_TYPE (t)
8958 && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
8959 && !TREE_CONSTANT (t))
8961 if (complain & tf_error)
8962 error ("integral expression %qE is not constant", t);
8963 result = true;
8966 if (result && error_p)
8967 error (" trying to instantiate %qD", tmpl);
8968 return result;
8971 /* Instantiate the indicated variable or function template TMPL with
8972 the template arguments in TARG_PTR. */
8974 tree
8975 instantiate_template (tree tmpl, tree targ_ptr, tsubst_flags_t complain)
8977 tree fndecl;
8978 tree gen_tmpl;
8979 tree spec;
8981 if (tmpl == error_mark_node)
8982 return error_mark_node;
8984 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
8986 /* If this function is a clone, handle it specially. */
8987 if (DECL_CLONED_FUNCTION_P (tmpl))
8989 tree spec;
8990 tree clone;
8992 spec = instantiate_template (DECL_CLONED_FUNCTION (tmpl), targ_ptr,
8993 complain);
8994 if (spec == error_mark_node)
8995 return error_mark_node;
8997 /* Look for the clone. */
8998 FOR_EACH_CLONE (clone, spec)
8999 if (DECL_NAME (clone) == DECL_NAME (tmpl))
9000 return clone;
9001 /* We should always have found the clone by now. */
9002 gcc_unreachable ();
9003 return NULL_TREE;
9006 /* Check to see if we already have this specialization. */
9007 spec = retrieve_specialization (tmpl, targ_ptr,
9008 /*class_specializations_p=*/false);
9009 if (spec != NULL_TREE)
9010 return spec;
9012 gen_tmpl = most_general_template (tmpl);
9013 if (tmpl != gen_tmpl)
9015 /* The TMPL is a partial instantiation. To get a full set of
9016 arguments we must add the arguments used to perform the
9017 partial instantiation. */
9018 targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
9019 targ_ptr);
9021 /* Check to see if we already have this specialization. */
9022 spec = retrieve_specialization (gen_tmpl, targ_ptr,
9023 /*class_specializations_p=*/false);
9024 if (spec != NULL_TREE)
9025 return spec;
9028 if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
9029 complain))
9030 return error_mark_node;
9032 /* We are building a FUNCTION_DECL, during which the access of its
9033 parameters and return types have to be checked. However this
9034 FUNCTION_DECL which is the desired context for access checking
9035 is not built yet. We solve this chicken-and-egg problem by
9036 deferring all checks until we have the FUNCTION_DECL. */
9037 push_deferring_access_checks (dk_deferred);
9039 /* Substitute template parameters. */
9040 fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
9041 targ_ptr, complain, gen_tmpl);
9043 /* Now we know the specialization, compute access previously
9044 deferred. */
9045 push_access_scope (fndecl);
9046 perform_deferred_access_checks ();
9047 pop_access_scope (fndecl);
9048 pop_deferring_access_checks ();
9050 /* The DECL_TI_TEMPLATE should always be the immediate parent
9051 template, not the most general template. */
9052 DECL_TI_TEMPLATE (fndecl) = tmpl;
9054 /* If we've just instantiated the main entry point for a function,
9055 instantiate all the alternate entry points as well. We do this
9056 by cloning the instantiation of the main entry point, not by
9057 instantiating the template clones. */
9058 if (TREE_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (TREE_CHAIN (gen_tmpl)))
9059 clone_function_decl (fndecl, /*update_method_vec_p=*/0);
9061 return fndecl;
9064 /* The FN is a TEMPLATE_DECL for a function. The ARGS are the
9065 arguments that are being used when calling it. TARGS is a vector
9066 into which the deduced template arguments are placed.
9068 Return zero for success, 2 for an incomplete match that doesn't resolve
9069 all the types, and 1 for complete failure. An error message will be
9070 printed only for an incomplete match.
9072 If FN is a conversion operator, or we are trying to produce a specific
9073 specialization, RETURN_TYPE is the return type desired.
9075 The EXPLICIT_TARGS are explicit template arguments provided via a
9076 template-id.
9078 The parameter STRICT is one of:
9080 DEDUCE_CALL:
9081 We are deducing arguments for a function call, as in
9082 [temp.deduct.call].
9084 DEDUCE_CONV:
9085 We are deducing arguments for a conversion function, as in
9086 [temp.deduct.conv].
9088 DEDUCE_EXACT:
9089 We are deducing arguments when doing an explicit instantiation
9090 as in [temp.explicit], when determining an explicit specialization
9091 as in [temp.expl.spec], or when taking the address of a function
9092 template, as in [temp.deduct.funcaddr]. */
9095 fn_type_unification (tree fn,
9096 tree explicit_targs,
9097 tree targs,
9098 tree args,
9099 tree return_type,
9100 unification_kind_t strict)
9102 tree parms;
9103 tree fntype;
9104 int result;
9106 gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
9108 fntype = TREE_TYPE (fn);
9109 if (explicit_targs)
9111 /* [temp.deduct]
9113 The specified template arguments must match the template
9114 parameters in kind (i.e., type, nontype, template), and there
9115 must not be more arguments than there are parameters;
9116 otherwise type deduction fails.
9118 Nontype arguments must match the types of the corresponding
9119 nontype template parameters, or must be convertible to the
9120 types of the corresponding nontype parameters as specified in
9121 _temp.arg.nontype_, otherwise type deduction fails.
9123 All references in the function type of the function template
9124 to the corresponding template parameters are replaced by the
9125 specified template argument values. If a substitution in a
9126 template parameter or in the function type of the function
9127 template results in an invalid type, type deduction fails. */
9128 int i;
9129 tree converted_args;
9130 bool incomplete;
9132 if (explicit_targs == error_mark_node)
9133 return 1;
9135 converted_args
9136 = (coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (fn),
9137 explicit_targs, NULL_TREE, tf_none,
9138 /*require_all_arguments=*/0));
9139 if (converted_args == error_mark_node)
9140 return 1;
9142 /* Substitute the explicit args into the function type. This is
9143 necessary so that, for instance, explicitly declared function
9144 arguments can match null pointed constants. If we were given
9145 an incomplete set of explicit args, we must not do semantic
9146 processing during substitution as we could create partial
9147 instantiations. */
9148 incomplete = NUM_TMPL_ARGS (explicit_targs) != NUM_TMPL_ARGS (targs);
9149 processing_template_decl += incomplete;
9150 fntype = tsubst (fntype, converted_args, tf_none, NULL_TREE);
9151 processing_template_decl -= incomplete;
9153 if (fntype == error_mark_node)
9154 return 1;
9156 /* Place the explicitly specified arguments in TARGS. */
9157 for (i = NUM_TMPL_ARGS (converted_args); i--;)
9158 TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
9161 parms = TYPE_ARG_TYPES (fntype);
9162 /* Never do unification on the 'this' parameter. */
9163 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
9164 parms = TREE_CHAIN (parms);
9166 if (return_type)
9168 parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
9169 args = tree_cons (NULL_TREE, return_type, args);
9172 /* We allow incomplete unification without an error message here
9173 because the standard doesn't seem to explicitly prohibit it. Our
9174 callers must be ready to deal with unification failures in any
9175 event. */
9176 result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
9177 targs, parms, args, /*subr=*/0,
9178 strict, 0);
9180 if (result == 0)
9181 /* All is well so far. Now, check:
9183 [temp.deduct]
9185 When all template arguments have been deduced, all uses of
9186 template parameters in nondeduced contexts are replaced with
9187 the corresponding deduced argument values. If the
9188 substitution results in an invalid type, as described above,
9189 type deduction fails. */
9190 if (tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE)
9191 == error_mark_node)
9192 return 1;
9194 return result;
9197 /* Adjust types before performing type deduction, as described in
9198 [temp.deduct.call] and [temp.deduct.conv]. The rules in these two
9199 sections are symmetric. PARM is the type of a function parameter
9200 or the return type of the conversion function. ARG is the type of
9201 the argument passed to the call, or the type of the value
9202 initialized with the result of the conversion function. */
9204 static int
9205 maybe_adjust_types_for_deduction (unification_kind_t strict,
9206 tree* parm,
9207 tree* arg)
9209 int result = 0;
9211 switch (strict)
9213 case DEDUCE_CALL:
9214 break;
9216 case DEDUCE_CONV:
9218 /* Swap PARM and ARG throughout the remainder of this
9219 function; the handling is precisely symmetric since PARM
9220 will initialize ARG rather than vice versa. */
9221 tree* temp = parm;
9222 parm = arg;
9223 arg = temp;
9224 break;
9227 case DEDUCE_EXACT:
9228 /* There is nothing to do in this case. */
9229 return 0;
9231 default:
9232 gcc_unreachable ();
9235 if (TREE_CODE (*parm) != REFERENCE_TYPE)
9237 /* [temp.deduct.call]
9239 If P is not a reference type:
9241 --If A is an array type, the pointer type produced by the
9242 array-to-pointer standard conversion (_conv.array_) is
9243 used in place of A for type deduction; otherwise,
9245 --If A is a function type, the pointer type produced by
9246 the function-to-pointer standard conversion
9247 (_conv.func_) is used in place of A for type deduction;
9248 otherwise,
9250 --If A is a cv-qualified type, the top level
9251 cv-qualifiers of A's type are ignored for type
9252 deduction. */
9253 if (TREE_CODE (*arg) == ARRAY_TYPE)
9254 *arg = build_pointer_type (TREE_TYPE (*arg));
9255 else if (TREE_CODE (*arg) == FUNCTION_TYPE)
9256 *arg = build_pointer_type (*arg);
9257 else
9258 *arg = TYPE_MAIN_VARIANT (*arg);
9261 /* [temp.deduct.call]
9263 If P is a cv-qualified type, the top level cv-qualifiers
9264 of P's type are ignored for type deduction. If P is a
9265 reference type, the type referred to by P is used for
9266 type deduction. */
9267 *parm = TYPE_MAIN_VARIANT (*parm);
9268 if (TREE_CODE (*parm) == REFERENCE_TYPE)
9270 *parm = TREE_TYPE (*parm);
9271 result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
9274 /* DR 322. For conversion deduction, remove a reference type on parm
9275 too (which has been swapped into ARG). */
9276 if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
9277 *arg = TREE_TYPE (*arg);
9279 return result;
9282 /* Most parms like fn_type_unification.
9284 If SUBR is 1, we're being called recursively (to unify the
9285 arguments of a function or method parameter of a function
9286 template). If IS_METHOD is true, XPARMS are the parms of a
9287 member function, and special rules apply to cv qualification
9288 deduction on the this parameter. */
9290 static int
9291 type_unification_real (tree tparms,
9292 tree targs,
9293 tree xparms,
9294 tree xargs,
9295 int subr,
9296 unification_kind_t strict,
9297 int is_method)
9299 tree parm, arg;
9300 int i;
9301 int ntparms = TREE_VEC_LENGTH (tparms);
9302 int sub_strict;
9303 int saw_undeduced = 0;
9304 tree parms, args;
9306 gcc_assert (TREE_CODE (tparms) == TREE_VEC);
9307 gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
9308 gcc_assert (!xargs || TREE_CODE (xargs) == TREE_LIST);
9309 gcc_assert (ntparms > 0);
9311 switch (strict)
9313 case DEDUCE_CALL:
9314 sub_strict = (UNIFY_ALLOW_OUTER_LEVEL | UNIFY_ALLOW_MORE_CV_QUAL
9315 | UNIFY_ALLOW_DERIVED);
9316 break;
9318 case DEDUCE_CONV:
9319 sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
9320 break;
9322 case DEDUCE_EXACT:
9323 sub_strict = UNIFY_ALLOW_NONE;
9324 break;
9326 default:
9327 gcc_unreachable ();
9330 again:
9331 parms = xparms;
9332 args = xargs;
9334 while (parms && parms != void_list_node
9335 && args && args != void_list_node)
9337 parm = TREE_VALUE (parms);
9338 parms = TREE_CHAIN (parms);
9339 arg = TREE_VALUE (args);
9340 args = TREE_CHAIN (args);
9342 if (arg == error_mark_node)
9343 return 1;
9344 if (arg == unknown_type_node)
9345 /* We can't deduce anything from this, but we might get all the
9346 template args from other function args. */
9347 continue;
9349 if (is_method)
9351 /* The cv qualifiers on the this pointer argument must match
9352 exactly. We cannot deduce a T as const X against a const
9353 member function for instance. */
9354 gcc_assert (TREE_CODE (parm) == POINTER_TYPE);
9355 gcc_assert (TREE_CODE (arg) == POINTER_TYPE);
9356 /* The restrict qualifier will be on the pointer. */
9357 if (cp_type_quals (parm) != cp_type_quals (arg))
9358 return 1;
9359 parm = TREE_TYPE (parm);
9360 arg = TREE_TYPE (arg);
9361 if (cp_type_quals (parm) != cp_type_quals (arg))
9362 return 1;
9364 parm = TYPE_MAIN_VARIANT (parm);
9365 arg = TYPE_MAIN_VARIANT (arg);
9366 is_method = 0;
9369 /* Conversions will be performed on a function argument that
9370 corresponds with a function parameter that contains only
9371 non-deducible template parameters and explicitly specified
9372 template parameters. */
9373 if (!uses_template_parms (parm))
9375 tree type;
9377 if (!TYPE_P (arg))
9378 type = TREE_TYPE (arg);
9379 else
9380 type = arg;
9382 if (same_type_p (parm, type))
9383 continue;
9384 if (strict != DEDUCE_EXACT
9385 && can_convert_arg (parm, type, TYPE_P (arg) ? NULL_TREE : arg))
9386 continue;
9388 return 1;
9391 if (!TYPE_P (arg))
9393 gcc_assert (TREE_TYPE (arg) != NULL_TREE);
9394 if (type_unknown_p (arg))
9396 /* [temp.deduct.type] A template-argument can be deduced from
9397 a pointer to function or pointer to member function
9398 argument if the set of overloaded functions does not
9399 contain function templates and at most one of a set of
9400 overloaded functions provides a unique match. */
9402 if (resolve_overloaded_unification
9403 (tparms, targs, parm, arg, strict, sub_strict)
9404 != 0)
9405 return 1;
9406 continue;
9408 arg = TREE_TYPE (arg);
9409 if (arg == error_mark_node)
9410 return 1;
9414 int arg_strict = sub_strict;
9416 if (!subr)
9417 arg_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg);
9419 if (unify (tparms, targs, parm, arg, arg_strict))
9420 return 1;
9424 /* Fail if we've reached the end of the parm list, and more args
9425 are present, and the parm list isn't variadic. */
9426 if (args && args != void_list_node && parms == void_list_node)
9427 return 1;
9428 /* Fail if parms are left and they don't have default values. */
9429 if (parms && parms != void_list_node
9430 && TREE_PURPOSE (parms) == NULL_TREE)
9431 return 1;
9433 if (!subr)
9434 for (i = 0; i < ntparms; i++)
9435 if (!TREE_VEC_ELT (targs, i))
9437 tree tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
9439 /* If this is an undeduced nontype parameter that depends on
9440 a type parameter, try another pass; its type may have been
9441 deduced from a later argument than the one from which
9442 this parameter can be deduced. */
9443 if (TREE_CODE (tparm) == PARM_DECL
9444 && uses_template_parms (TREE_TYPE (tparm))
9445 && !saw_undeduced++)
9446 goto again;
9448 return 2;
9451 return 0;
9454 /* Subroutine of type_unification_real. Args are like the variables at the
9455 call site. ARG is an overloaded function (or template-id); we try
9456 deducing template args from each of the overloads, and if only one
9457 succeeds, we go with that. Modifies TARGS and returns 0 on success. */
9459 static int
9460 resolve_overloaded_unification (tree tparms,
9461 tree targs,
9462 tree parm,
9463 tree arg,
9464 unification_kind_t strict,
9465 int sub_strict)
9467 tree tempargs = copy_node (targs);
9468 int good = 0;
9469 bool addr_p;
9471 if (TREE_CODE (arg) == ADDR_EXPR)
9473 arg = TREE_OPERAND (arg, 0);
9474 addr_p = true;
9476 else
9477 addr_p = false;
9479 if (TREE_CODE (arg) == COMPONENT_REF)
9480 /* Handle `&x' where `x' is some static or non-static member
9481 function name. */
9482 arg = TREE_OPERAND (arg, 1);
9484 if (TREE_CODE (arg) == OFFSET_REF)
9485 arg = TREE_OPERAND (arg, 1);
9487 /* Strip baselink information. */
9488 if (BASELINK_P (arg))
9489 arg = BASELINK_FUNCTIONS (arg);
9491 if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
9493 /* If we got some explicit template args, we need to plug them into
9494 the affected templates before we try to unify, in case the
9495 explicit args will completely resolve the templates in question. */
9497 tree expl_subargs = TREE_OPERAND (arg, 1);
9498 arg = TREE_OPERAND (arg, 0);
9500 for (; arg; arg = OVL_NEXT (arg))
9502 tree fn = OVL_CURRENT (arg);
9503 tree subargs, elem;
9505 if (TREE_CODE (fn) != TEMPLATE_DECL)
9506 continue;
9508 subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
9509 expl_subargs, /*check_ret=*/false);
9510 if (subargs)
9512 elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
9513 good += try_one_overload (tparms, targs, tempargs, parm,
9514 elem, strict, sub_strict, addr_p);
9518 else
9520 gcc_assert (TREE_CODE (arg) == OVERLOAD
9521 || TREE_CODE (arg) == FUNCTION_DECL);
9523 for (; arg; arg = OVL_NEXT (arg))
9524 good += try_one_overload (tparms, targs, tempargs, parm,
9525 TREE_TYPE (OVL_CURRENT (arg)),
9526 strict, sub_strict, addr_p);
9529 /* [temp.deduct.type] A template-argument can be deduced from a pointer
9530 to function or pointer to member function argument if the set of
9531 overloaded functions does not contain function templates and at most
9532 one of a set of overloaded functions provides a unique match.
9534 So if we found multiple possibilities, we return success but don't
9535 deduce anything. */
9537 if (good == 1)
9539 int i = TREE_VEC_LENGTH (targs);
9540 for (; i--; )
9541 if (TREE_VEC_ELT (tempargs, i))
9542 TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
9544 if (good)
9545 return 0;
9547 return 1;
9550 /* Subroutine of resolve_overloaded_unification; does deduction for a single
9551 overload. Fills TARGS with any deduced arguments, or error_mark_node if
9552 different overloads deduce different arguments for a given parm.
9553 ADDR_P is true if the expression for which deduction is being
9554 performed was of the form "& fn" rather than simply "fn".
9556 Returns 1 on success. */
9558 static int
9559 try_one_overload (tree tparms,
9560 tree orig_targs,
9561 tree targs,
9562 tree parm,
9563 tree arg,
9564 unification_kind_t strict,
9565 int sub_strict,
9566 bool addr_p)
9568 int nargs;
9569 tree tempargs;
9570 int i;
9572 /* [temp.deduct.type] A template-argument can be deduced from a pointer
9573 to function or pointer to member function argument if the set of
9574 overloaded functions does not contain function templates and at most
9575 one of a set of overloaded functions provides a unique match.
9577 So if this is a template, just return success. */
9579 if (uses_template_parms (arg))
9580 return 1;
9582 if (TREE_CODE (arg) == METHOD_TYPE)
9583 arg = build_ptrmemfunc_type (build_pointer_type (arg));
9584 else if (addr_p)
9585 arg = build_pointer_type (arg);
9587 sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg);
9589 /* We don't copy orig_targs for this because if we have already deduced
9590 some template args from previous args, unify would complain when we
9591 try to deduce a template parameter for the same argument, even though
9592 there isn't really a conflict. */
9593 nargs = TREE_VEC_LENGTH (targs);
9594 tempargs = make_tree_vec (nargs);
9596 if (unify (tparms, tempargs, parm, arg, sub_strict) != 0)
9597 return 0;
9599 /* First make sure we didn't deduce anything that conflicts with
9600 explicitly specified args. */
9601 for (i = nargs; i--; )
9603 tree elt = TREE_VEC_ELT (tempargs, i);
9604 tree oldelt = TREE_VEC_ELT (orig_targs, i);
9606 if (!elt)
9607 /*NOP*/;
9608 else if (uses_template_parms (elt))
9609 /* Since we're unifying against ourselves, we will fill in
9610 template args used in the function parm list with our own
9611 template parms. Discard them. */
9612 TREE_VEC_ELT (tempargs, i) = NULL_TREE;
9613 else if (oldelt && !template_args_equal (oldelt, elt))
9614 return 0;
9617 for (i = nargs; i--; )
9619 tree elt = TREE_VEC_ELT (tempargs, i);
9621 if (elt)
9622 TREE_VEC_ELT (targs, i) = elt;
9625 return 1;
9628 /* Verify that nondeduce template argument agrees with the type
9629 obtained from argument deduction. Return nonzero if the
9630 verification fails.
9632 For example:
9634 struct A { typedef int X; };
9635 template <class T, class U> struct C {};
9636 template <class T> struct C<T, typename T::X> {};
9638 Then with the instantiation `C<A, int>', we can deduce that
9639 `T' is `A' but unify () does not check whether `typename T::X'
9640 is `int'. This function ensure that they agree.
9642 TARGS, PARMS are the same as the arguments of unify.
9643 ARGS contains template arguments from all levels. */
9645 static int
9646 verify_class_unification (tree targs, tree parms, tree args)
9648 parms = tsubst (parms, add_outermost_template_args (args, targs),
9649 tf_none, NULL_TREE);
9650 if (parms == error_mark_node)
9651 return 1;
9653 return !comp_template_args (parms, INNERMOST_TEMPLATE_ARGS (args));
9656 /* PARM is a template class (perhaps with unbound template
9657 parameters). ARG is a fully instantiated type. If ARG can be
9658 bound to PARM, return ARG, otherwise return NULL_TREE. TPARMS and
9659 TARGS are as for unify. */
9661 static tree
9662 try_class_unification (tree tparms, tree targs, tree parm, tree arg)
9664 tree copy_of_targs;
9666 if (!CLASSTYPE_TEMPLATE_INFO (arg)
9667 || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
9668 != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
9669 return NULL_TREE;
9671 /* We need to make a new template argument vector for the call to
9672 unify. If we used TARGS, we'd clutter it up with the result of
9673 the attempted unification, even if this class didn't work out.
9674 We also don't want to commit ourselves to all the unifications
9675 we've already done, since unification is supposed to be done on
9676 an argument-by-argument basis. In other words, consider the
9677 following pathological case:
9679 template <int I, int J, int K>
9680 struct S {};
9682 template <int I, int J>
9683 struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
9685 template <int I, int J, int K>
9686 void f(S<I, J, K>, S<I, I, I>);
9688 void g() {
9689 S<0, 0, 0> s0;
9690 S<0, 1, 2> s2;
9692 f(s0, s2);
9695 Now, by the time we consider the unification involving `s2', we
9696 already know that we must have `f<0, 0, 0>'. But, even though
9697 `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
9698 because there are two ways to unify base classes of S<0, 1, 2>
9699 with S<I, I, I>. If we kept the already deduced knowledge, we
9700 would reject the possibility I=1. */
9701 copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
9703 /* If unification failed, we're done. */
9704 if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
9705 CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE))
9706 return NULL_TREE;
9708 return arg;
9711 /* Given a template type PARM and a class type ARG, find the unique
9712 base type in ARG that is an instance of PARM. We do not examine
9713 ARG itself; only its base-classes. If there is not exactly one
9714 appropriate base class, return NULL_TREE. PARM may be the type of
9715 a partial specialization, as well as a plain template type. Used
9716 by unify. */
9718 static tree
9719 get_template_base (tree tparms, tree targs, tree parm, tree arg)
9721 tree rval = NULL_TREE;
9722 tree binfo;
9724 gcc_assert (IS_AGGR_TYPE_CODE (TREE_CODE (arg)));
9726 binfo = TYPE_BINFO (complete_type (arg));
9727 if (!binfo)
9728 /* The type could not be completed. */
9729 return NULL_TREE;
9731 /* Walk in inheritance graph order. The search order is not
9732 important, and this avoids multiple walks of virtual bases. */
9733 for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
9735 tree r = try_class_unification (tparms, targs, parm, BINFO_TYPE (binfo));
9737 if (r)
9739 /* If there is more than one satisfactory baseclass, then:
9741 [temp.deduct.call]
9743 If they yield more than one possible deduced A, the type
9744 deduction fails.
9746 applies. */
9747 if (rval && !same_type_p (r, rval))
9748 return NULL_TREE;
9750 rval = r;
9754 return rval;
9757 /* Returns the level of DECL, which declares a template parameter. */
9759 static int
9760 template_decl_level (tree decl)
9762 switch (TREE_CODE (decl))
9764 case TYPE_DECL:
9765 case TEMPLATE_DECL:
9766 return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
9768 case PARM_DECL:
9769 return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
9771 default:
9772 gcc_unreachable ();
9774 return 0;
9777 /* Decide whether ARG can be unified with PARM, considering only the
9778 cv-qualifiers of each type, given STRICT as documented for unify.
9779 Returns nonzero iff the unification is OK on that basis. */
9781 static int
9782 check_cv_quals_for_unify (int strict, tree arg, tree parm)
9784 int arg_quals = cp_type_quals (arg);
9785 int parm_quals = cp_type_quals (parm);
9787 if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
9788 && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
9790 /* Although a CVR qualifier is ignored when being applied to a
9791 substituted template parameter ([8.3.2]/1 for example), that
9792 does not apply during deduction [14.8.2.4]/1, (even though
9793 that is not explicitly mentioned, [14.8.2.4]/9 indicates
9794 this). Except when we're allowing additional CV qualifiers
9795 at the outer level [14.8.2.1]/3,1st bullet. */
9796 if ((TREE_CODE (arg) == REFERENCE_TYPE
9797 || TREE_CODE (arg) == FUNCTION_TYPE
9798 || TREE_CODE (arg) == METHOD_TYPE)
9799 && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
9800 return 0;
9802 if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
9803 && (parm_quals & TYPE_QUAL_RESTRICT))
9804 return 0;
9807 if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
9808 && (arg_quals & parm_quals) != parm_quals)
9809 return 0;
9811 if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
9812 && (parm_quals & arg_quals) != arg_quals)
9813 return 0;
9815 return 1;
9818 /* Takes parameters as for type_unification. Returns 0 if the
9819 type deduction succeeds, 1 otherwise. The parameter STRICT is a
9820 bitwise or of the following flags:
9822 UNIFY_ALLOW_NONE:
9823 Require an exact match between PARM and ARG.
9824 UNIFY_ALLOW_MORE_CV_QUAL:
9825 Allow the deduced ARG to be more cv-qualified (by qualification
9826 conversion) than ARG.
9827 UNIFY_ALLOW_LESS_CV_QUAL:
9828 Allow the deduced ARG to be less cv-qualified than ARG.
9829 UNIFY_ALLOW_DERIVED:
9830 Allow the deduced ARG to be a template base class of ARG,
9831 or a pointer to a template base class of the type pointed to by
9832 ARG.
9833 UNIFY_ALLOW_INTEGER:
9834 Allow any integral type to be deduced. See the TEMPLATE_PARM_INDEX
9835 case for more information.
9836 UNIFY_ALLOW_OUTER_LEVEL:
9837 This is the outermost level of a deduction. Used to determine validity
9838 of qualification conversions. A valid qualification conversion must
9839 have const qualified pointers leading up to the inner type which
9840 requires additional CV quals, except at the outer level, where const
9841 is not required [conv.qual]. It would be normal to set this flag in
9842 addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
9843 UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
9844 This is the outermost level of a deduction, and PARM can be more CV
9845 qualified at this point.
9846 UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
9847 This is the outermost level of a deduction, and PARM can be less CV
9848 qualified at this point. */
9850 static int
9851 unify (tree tparms, tree targs, tree parm, tree arg, int strict)
9853 int idx;
9854 tree targ;
9855 tree tparm;
9856 int strict_in = strict;
9858 /* I don't think this will do the right thing with respect to types.
9859 But the only case I've seen it in so far has been array bounds, where
9860 signedness is the only information lost, and I think that will be
9861 okay. */
9862 while (TREE_CODE (parm) == NOP_EXPR)
9863 parm = TREE_OPERAND (parm, 0);
9865 if (arg == error_mark_node)
9866 return 1;
9867 if (arg == unknown_type_node)
9868 /* We can't deduce anything from this, but we might get all the
9869 template args from other function args. */
9870 return 0;
9872 /* If PARM uses template parameters, then we can't bail out here,
9873 even if ARG == PARM, since we won't record unifications for the
9874 template parameters. We might need them if we're trying to
9875 figure out which of two things is more specialized. */
9876 if (arg == parm && !uses_template_parms (parm))
9877 return 0;
9879 /* Immediately reject some pairs that won't unify because of
9880 cv-qualification mismatches. */
9881 if (TREE_CODE (arg) == TREE_CODE (parm)
9882 && TYPE_P (arg)
9883 /* It is the elements of the array which hold the cv quals of an array
9884 type, and the elements might be template type parms. We'll check
9885 when we recurse. */
9886 && TREE_CODE (arg) != ARRAY_TYPE
9887 /* We check the cv-qualifiers when unifying with template type
9888 parameters below. We want to allow ARG `const T' to unify with
9889 PARM `T' for example, when computing which of two templates
9890 is more specialized, for example. */
9891 && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
9892 && !check_cv_quals_for_unify (strict_in, arg, parm))
9893 return 1;
9895 if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
9896 && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
9897 strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
9898 strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
9899 strict &= ~UNIFY_ALLOW_DERIVED;
9900 strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
9901 strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
9903 switch (TREE_CODE (parm))
9905 case TYPENAME_TYPE:
9906 case SCOPE_REF:
9907 case UNBOUND_CLASS_TEMPLATE:
9908 /* In a type which contains a nested-name-specifier, template
9909 argument values cannot be deduced for template parameters used
9910 within the nested-name-specifier. */
9911 return 0;
9913 case TEMPLATE_TYPE_PARM:
9914 case TEMPLATE_TEMPLATE_PARM:
9915 case BOUND_TEMPLATE_TEMPLATE_PARM:
9916 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
9918 if (TEMPLATE_TYPE_LEVEL (parm)
9919 != template_decl_level (tparm))
9920 /* The PARM is not one we're trying to unify. Just check
9921 to see if it matches ARG. */
9922 return (TREE_CODE (arg) == TREE_CODE (parm)
9923 && same_type_p (parm, arg)) ? 0 : 1;
9924 idx = TEMPLATE_TYPE_IDX (parm);
9925 targ = TREE_VEC_ELT (targs, idx);
9926 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
9928 /* Check for mixed types and values. */
9929 if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
9930 && TREE_CODE (tparm) != TYPE_DECL)
9931 || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
9932 && TREE_CODE (tparm) != TEMPLATE_DECL))
9933 return 1;
9935 if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
9937 /* ARG must be constructed from a template class or a template
9938 template parameter. */
9939 if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
9940 && (TREE_CODE (arg) != RECORD_TYPE || !CLASSTYPE_TEMPLATE_INFO (arg)))
9941 return 1;
9944 tree parmtmpl = TYPE_TI_TEMPLATE (parm);
9945 tree parmvec = TYPE_TI_ARGS (parm);
9946 tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
9947 tree argtmplvec
9948 = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_TI_TEMPLATE (arg));
9949 int i;
9951 /* The parameter and argument roles have to be switched here
9952 in order to handle default arguments properly. For example,
9953 template<template <class> class TT> void f(TT<int>)
9954 should be able to accept vector<int> which comes from
9955 template <class T, class Allocator = allocator>
9956 class vector. */
9958 if (coerce_template_parms (argtmplvec, parmvec, parmtmpl, 0, 1)
9959 == error_mark_node)
9960 return 1;
9962 /* Deduce arguments T, i from TT<T> or TT<i>.
9963 We check each element of PARMVEC and ARGVEC individually
9964 rather than the whole TREE_VEC since they can have
9965 different number of elements. */
9967 for (i = 0; i < TREE_VEC_LENGTH (parmvec); ++i)
9969 if (unify (tparms, targs,
9970 TREE_VEC_ELT (parmvec, i),
9971 TREE_VEC_ELT (argvec, i),
9972 UNIFY_ALLOW_NONE))
9973 return 1;
9976 arg = TYPE_TI_TEMPLATE (arg);
9978 /* Fall through to deduce template name. */
9981 if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
9982 || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
9984 /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>. */
9986 /* Simple cases: Value already set, does match or doesn't. */
9987 if (targ != NULL_TREE && template_args_equal (targ, arg))
9988 return 0;
9989 else if (targ)
9990 return 1;
9992 else
9994 /* If PARM is `const T' and ARG is only `int', we don't have
9995 a match unless we are allowing additional qualification.
9996 If ARG is `const int' and PARM is just `T' that's OK;
9997 that binds `const int' to `T'. */
9998 if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
9999 arg, parm))
10000 return 1;
10002 /* Consider the case where ARG is `const volatile int' and
10003 PARM is `const T'. Then, T should be `volatile int'. */
10004 arg = cp_build_qualified_type_real
10005 (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
10006 if (arg == error_mark_node)
10007 return 1;
10009 /* Simple cases: Value already set, does match or doesn't. */
10010 if (targ != NULL_TREE && same_type_p (targ, arg))
10011 return 0;
10012 else if (targ)
10013 return 1;
10015 /* Make sure that ARG is not a variable-sized array. (Note
10016 that were talking about variable-sized arrays (like
10017 `int[n]'), rather than arrays of unknown size (like
10018 `int[]').) We'll get very confused by such a type since
10019 the bound of the array will not be computable in an
10020 instantiation. Besides, such types are not allowed in
10021 ISO C++, so we can do as we please here. */
10022 if (variably_modified_type_p (arg, NULL_TREE))
10023 return 1;
10026 TREE_VEC_ELT (targs, idx) = arg;
10027 return 0;
10029 case TEMPLATE_PARM_INDEX:
10030 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
10032 if (TEMPLATE_PARM_LEVEL (parm)
10033 != template_decl_level (tparm))
10034 /* The PARM is not one we're trying to unify. Just check
10035 to see if it matches ARG. */
10036 return !(TREE_CODE (arg) == TREE_CODE (parm)
10037 && cp_tree_equal (parm, arg));
10039 idx = TEMPLATE_PARM_IDX (parm);
10040 targ = TREE_VEC_ELT (targs, idx);
10042 if (targ)
10043 return !cp_tree_equal (targ, arg);
10045 /* [temp.deduct.type] If, in the declaration of a function template
10046 with a non-type template-parameter, the non-type
10047 template-parameter is used in an expression in the function
10048 parameter-list and, if the corresponding template-argument is
10049 deduced, the template-argument type shall match the type of the
10050 template-parameter exactly, except that a template-argument
10051 deduced from an array bound may be of any integral type.
10052 The non-type parameter might use already deduced type parameters. */
10053 tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
10054 if (!TREE_TYPE (arg))
10055 /* Template-parameter dependent expression. Just accept it for now.
10056 It will later be processed in convert_template_argument. */
10058 else if (same_type_p (TREE_TYPE (arg), tparm))
10059 /* OK */;
10060 else if ((strict & UNIFY_ALLOW_INTEGER)
10061 && (TREE_CODE (tparm) == INTEGER_TYPE
10062 || TREE_CODE (tparm) == BOOLEAN_TYPE))
10063 /* Convert the ARG to the type of PARM; the deduced non-type
10064 template argument must exactly match the types of the
10065 corresponding parameter. */
10066 arg = fold (build_nop (TREE_TYPE (parm), arg));
10067 else if (uses_template_parms (tparm))
10068 /* We haven't deduced the type of this parameter yet. Try again
10069 later. */
10070 return 0;
10071 else
10072 return 1;
10074 TREE_VEC_ELT (targs, idx) = arg;
10075 return 0;
10077 case PTRMEM_CST:
10079 /* A pointer-to-member constant can be unified only with
10080 another constant. */
10081 if (TREE_CODE (arg) != PTRMEM_CST)
10082 return 1;
10084 /* Just unify the class member. It would be useless (and possibly
10085 wrong, depending on the strict flags) to unify also
10086 PTRMEM_CST_CLASS, because we want to be sure that both parm and
10087 arg refer to the same variable, even if through different
10088 classes. For instance:
10090 struct A { int x; };
10091 struct B : A { };
10093 Unification of &A::x and &B::x must succeed. */
10094 return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
10095 PTRMEM_CST_MEMBER (arg), strict);
10098 case POINTER_TYPE:
10100 if (TREE_CODE (arg) != POINTER_TYPE)
10101 return 1;
10103 /* [temp.deduct.call]
10105 A can be another pointer or pointer to member type that can
10106 be converted to the deduced A via a qualification
10107 conversion (_conv.qual_).
10109 We pass down STRICT here rather than UNIFY_ALLOW_NONE.
10110 This will allow for additional cv-qualification of the
10111 pointed-to types if appropriate. */
10113 if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
10114 /* The derived-to-base conversion only persists through one
10115 level of pointers. */
10116 strict |= (strict_in & UNIFY_ALLOW_DERIVED);
10118 return unify (tparms, targs, TREE_TYPE (parm),
10119 TREE_TYPE (arg), strict);
10122 case REFERENCE_TYPE:
10123 if (TREE_CODE (arg) != REFERENCE_TYPE)
10124 return 1;
10125 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
10126 strict & UNIFY_ALLOW_MORE_CV_QUAL);
10128 case ARRAY_TYPE:
10129 if (TREE_CODE (arg) != ARRAY_TYPE)
10130 return 1;
10131 if ((TYPE_DOMAIN (parm) == NULL_TREE)
10132 != (TYPE_DOMAIN (arg) == NULL_TREE))
10133 return 1;
10134 if (TYPE_DOMAIN (parm) != NULL_TREE)
10136 tree parm_max;
10137 tree arg_max;
10139 parm_max = TYPE_MAX_VALUE (TYPE_DOMAIN (parm));
10140 arg_max = TYPE_MAX_VALUE (TYPE_DOMAIN (arg));
10142 /* Our representation of array types uses "N - 1" as the
10143 TYPE_MAX_VALUE for an array with "N" elements, if "N" is
10144 not an integer constant. */
10145 if (TREE_CODE (parm_max) == MINUS_EXPR)
10147 arg_max = fold_build2 (PLUS_EXPR,
10148 integer_type_node,
10149 arg_max,
10150 TREE_OPERAND (parm_max, 1));
10151 parm_max = TREE_OPERAND (parm_max, 0);
10154 if (unify (tparms, targs, parm_max, arg_max, UNIFY_ALLOW_INTEGER))
10155 return 1;
10157 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
10158 strict & UNIFY_ALLOW_MORE_CV_QUAL);
10160 case REAL_TYPE:
10161 case COMPLEX_TYPE:
10162 case VECTOR_TYPE:
10163 case INTEGER_TYPE:
10164 case BOOLEAN_TYPE:
10165 case ENUMERAL_TYPE:
10166 case VOID_TYPE:
10167 if (TREE_CODE (arg) != TREE_CODE (parm))
10168 return 1;
10170 /* We have already checked cv-qualification at the top of the
10171 function. */
10172 if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
10173 return 1;
10175 /* As far as unification is concerned, this wins. Later checks
10176 will invalidate it if necessary. */
10177 return 0;
10179 /* Types INTEGER_CST and MINUS_EXPR can come from array bounds. */
10180 /* Type INTEGER_CST can come from ordinary constant template args. */
10181 case INTEGER_CST:
10182 while (TREE_CODE (arg) == NOP_EXPR)
10183 arg = TREE_OPERAND (arg, 0);
10185 if (TREE_CODE (arg) != INTEGER_CST)
10186 return 1;
10187 return !tree_int_cst_equal (parm, arg);
10189 case TREE_VEC:
10191 int i;
10192 if (TREE_CODE (arg) != TREE_VEC)
10193 return 1;
10194 if (TREE_VEC_LENGTH (parm) != TREE_VEC_LENGTH (arg))
10195 return 1;
10196 for (i = 0; i < TREE_VEC_LENGTH (parm); ++i)
10197 if (unify (tparms, targs,
10198 TREE_VEC_ELT (parm, i), TREE_VEC_ELT (arg, i),
10199 UNIFY_ALLOW_NONE))
10200 return 1;
10201 return 0;
10204 case RECORD_TYPE:
10205 case UNION_TYPE:
10206 if (TREE_CODE (arg) != TREE_CODE (parm))
10207 return 1;
10209 if (TYPE_PTRMEMFUNC_P (parm))
10211 if (!TYPE_PTRMEMFUNC_P (arg))
10212 return 1;
10214 return unify (tparms, targs,
10215 TYPE_PTRMEMFUNC_FN_TYPE (parm),
10216 TYPE_PTRMEMFUNC_FN_TYPE (arg),
10217 strict);
10220 if (CLASSTYPE_TEMPLATE_INFO (parm))
10222 tree t = NULL_TREE;
10224 if (strict_in & UNIFY_ALLOW_DERIVED)
10226 /* First, we try to unify the PARM and ARG directly. */
10227 t = try_class_unification (tparms, targs,
10228 parm, arg);
10230 if (!t)
10232 /* Fallback to the special case allowed in
10233 [temp.deduct.call]:
10235 If P is a class, and P has the form
10236 template-id, then A can be a derived class of
10237 the deduced A. Likewise, if P is a pointer to
10238 a class of the form template-id, A can be a
10239 pointer to a derived class pointed to by the
10240 deduced A. */
10241 t = get_template_base (tparms, targs, parm, arg);
10243 if (!t)
10244 return 1;
10247 else if (CLASSTYPE_TEMPLATE_INFO (arg)
10248 && (CLASSTYPE_TI_TEMPLATE (parm)
10249 == CLASSTYPE_TI_TEMPLATE (arg)))
10250 /* Perhaps PARM is something like S<U> and ARG is S<int>.
10251 Then, we should unify `int' and `U'. */
10252 t = arg;
10253 else
10254 /* There's no chance of unification succeeding. */
10255 return 1;
10257 return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
10258 CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE);
10260 else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
10261 return 1;
10262 return 0;
10264 case METHOD_TYPE:
10265 case FUNCTION_TYPE:
10266 if (TREE_CODE (arg) != TREE_CODE (parm))
10267 return 1;
10269 if (unify (tparms, targs, TREE_TYPE (parm),
10270 TREE_TYPE (arg), UNIFY_ALLOW_NONE))
10271 return 1;
10272 return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
10273 TYPE_ARG_TYPES (arg), 1, DEDUCE_EXACT,
10274 TREE_CODE (parm) == METHOD_TYPE);
10276 case OFFSET_TYPE:
10277 /* Unify a pointer to member with a pointer to member function, which
10278 deduces the type of the member as a function type. */
10279 if (TYPE_PTRMEMFUNC_P (arg))
10281 tree method_type;
10282 tree fntype;
10283 cp_cv_quals cv_quals;
10285 /* Check top-level cv qualifiers */
10286 if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
10287 return 1;
10289 if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
10290 TYPE_PTRMEMFUNC_OBJECT_TYPE (arg), UNIFY_ALLOW_NONE))
10291 return 1;
10293 /* Determine the type of the function we are unifying against. */
10294 method_type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (arg));
10295 fntype =
10296 build_function_type (TREE_TYPE (method_type),
10297 TREE_CHAIN (TYPE_ARG_TYPES (method_type)));
10299 /* Extract the cv-qualifiers of the member function from the
10300 implicit object parameter and place them on the function
10301 type to be restored later. */
10302 cv_quals =
10303 cp_type_quals(TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (method_type))));
10304 fntype = build_qualified_type (fntype, cv_quals);
10305 return unify (tparms, targs, TREE_TYPE (parm), fntype, strict);
10308 if (TREE_CODE (arg) != OFFSET_TYPE)
10309 return 1;
10310 if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
10311 TYPE_OFFSET_BASETYPE (arg), UNIFY_ALLOW_NONE))
10312 return 1;
10313 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
10314 strict);
10316 case CONST_DECL:
10317 if (DECL_TEMPLATE_PARM_P (parm))
10318 return unify (tparms, targs, DECL_INITIAL (parm), arg, strict);
10319 if (arg != integral_constant_value (parm))
10320 return 1;
10321 return 0;
10323 case FIELD_DECL:
10324 case TEMPLATE_DECL:
10325 /* Matched cases are handled by the ARG == PARM test above. */
10326 return 1;
10328 default:
10329 gcc_assert (EXPR_P (parm));
10331 /* We must be looking at an expression. This can happen with
10332 something like:
10334 template <int I>
10335 void foo(S<I>, S<I + 2>);
10337 This is a "nondeduced context":
10339 [deduct.type]
10341 The nondeduced contexts are:
10343 --A type that is a template-id in which one or more of
10344 the template-arguments is an expression that references
10345 a template-parameter.
10347 In these cases, we assume deduction succeeded, but don't
10348 actually infer any unifications. */
10350 if (!uses_template_parms (parm)
10351 && !template_args_equal (parm, arg))
10352 return 1;
10353 else
10354 return 0;
10358 /* Note that DECL can be defined in this translation unit, if
10359 required. */
10361 static void
10362 mark_definable (tree decl)
10364 tree clone;
10365 DECL_NOT_REALLY_EXTERN (decl) = 1;
10366 FOR_EACH_CLONE (clone, decl)
10367 DECL_NOT_REALLY_EXTERN (clone) = 1;
10370 /* Called if RESULT is explicitly instantiated, or is a member of an
10371 explicitly instantiated class. */
10373 void
10374 mark_decl_instantiated (tree result, int extern_p)
10376 SET_DECL_EXPLICIT_INSTANTIATION (result);
10378 /* If this entity has already been written out, it's too late to
10379 make any modifications. */
10380 if (TREE_ASM_WRITTEN (result))
10381 return;
10383 if (TREE_CODE (result) != FUNCTION_DECL)
10384 /* The TREE_PUBLIC flag for function declarations will have been
10385 set correctly by tsubst. */
10386 TREE_PUBLIC (result) = 1;
10388 /* This might have been set by an earlier implicit instantiation. */
10389 DECL_COMDAT (result) = 0;
10391 if (extern_p)
10392 DECL_NOT_REALLY_EXTERN (result) = 0;
10393 else
10395 mark_definable (result);
10396 /* Always make artificials weak. */
10397 if (DECL_ARTIFICIAL (result) && flag_weak)
10398 comdat_linkage (result);
10399 /* For WIN32 we also want to put explicit instantiations in
10400 linkonce sections. */
10401 else if (TREE_PUBLIC (result))
10402 maybe_make_one_only (result);
10405 /* If EXTERN_P, then this function will not be emitted -- unless
10406 followed by an explicit instantiation, at which point its linkage
10407 will be adjusted. If !EXTERN_P, then this function will be
10408 emitted here. In neither circumstance do we want
10409 import_export_decl to adjust the linkage. */
10410 DECL_INTERFACE_KNOWN (result) = 1;
10413 /* Given two function templates PAT1 and PAT2, return:
10415 1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
10416 -1 if PAT2 is more specialized than PAT1.
10417 0 if neither is more specialized.
10419 LEN indicates the number of parameters we should consider
10420 (defaulted parameters should not be considered).
10422 The 1998 std underspecified function template partial ordering, and
10423 DR214 addresses the issue. We take pairs of arguments, one from
10424 each of the templates, and deduce them against each other. One of
10425 the templates will be more specialized if all the *other*
10426 template's arguments deduce against its arguments and at least one
10427 of its arguments *does* *not* deduce against the other template's
10428 corresponding argument. Deduction is done as for class templates.
10429 The arguments used in deduction have reference and top level cv
10430 qualifiers removed. Iff both arguments were originally reference
10431 types *and* deduction succeeds in both directions, the template
10432 with the more cv-qualified argument wins for that pairing (if
10433 neither is more cv-qualified, they both are equal). Unlike regular
10434 deduction, after all the arguments have been deduced in this way,
10435 we do *not* verify the deduced template argument values can be
10436 substituted into non-deduced contexts, nor do we have to verify
10437 that all template arguments have been deduced. */
10440 more_specialized_fn (tree pat1, tree pat2, int len)
10442 tree decl1 = DECL_TEMPLATE_RESULT (pat1);
10443 tree decl2 = DECL_TEMPLATE_RESULT (pat2);
10444 tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
10445 tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
10446 tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
10447 tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
10448 tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
10449 tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
10450 int better1 = 0;
10451 int better2 = 0;
10453 /* If only one is a member function, they are unordered. */
10454 if (DECL_FUNCTION_MEMBER_P (decl1) != DECL_FUNCTION_MEMBER_P (decl2))
10455 return 0;
10457 /* Don't consider 'this' parameter. */
10458 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
10459 args1 = TREE_CHAIN (args1);
10460 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
10461 args2 = TREE_CHAIN (args2);
10463 /* If only one is a conversion operator, they are unordered. */
10464 if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
10465 return 0;
10467 /* Consider the return type for a conversion function */
10468 if (DECL_CONV_FN_P (decl1))
10470 args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
10471 args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
10472 len++;
10475 processing_template_decl++;
10477 while (len--)
10479 tree arg1 = TREE_VALUE (args1);
10480 tree arg2 = TREE_VALUE (args2);
10481 int deduce1, deduce2;
10482 int quals1 = -1;
10483 int quals2 = -1;
10485 if (TREE_CODE (arg1) == REFERENCE_TYPE)
10487 arg1 = TREE_TYPE (arg1);
10488 quals1 = cp_type_quals (arg1);
10491 if (TREE_CODE (arg2) == REFERENCE_TYPE)
10493 arg2 = TREE_TYPE (arg2);
10494 quals2 = cp_type_quals (arg2);
10497 if ((quals1 < 0) != (quals2 < 0))
10499 /* Only of the args is a reference, see if we should apply
10500 array/function pointer decay to it. This is not part of
10501 DR214, but is, IMHO, consistent with the deduction rules
10502 for the function call itself, and with our earlier
10503 implementation of the underspecified partial ordering
10504 rules. (nathan). */
10505 if (quals1 >= 0)
10507 switch (TREE_CODE (arg1))
10509 case ARRAY_TYPE:
10510 arg1 = TREE_TYPE (arg1);
10511 /* FALLTHROUGH. */
10512 case FUNCTION_TYPE:
10513 arg1 = build_pointer_type (arg1);
10514 break;
10516 default:
10517 break;
10520 else
10522 switch (TREE_CODE (arg2))
10524 case ARRAY_TYPE:
10525 arg2 = TREE_TYPE (arg2);
10526 /* FALLTHROUGH. */
10527 case FUNCTION_TYPE:
10528 arg2 = build_pointer_type (arg2);
10529 break;
10531 default:
10532 break;
10537 arg1 = TYPE_MAIN_VARIANT (arg1);
10538 arg2 = TYPE_MAIN_VARIANT (arg2);
10540 deduce1 = !unify (tparms1, targs1, arg1, arg2, UNIFY_ALLOW_NONE);
10541 deduce2 = !unify (tparms2, targs2, arg2, arg1, UNIFY_ALLOW_NONE);
10543 if (!deduce1)
10544 better2 = -1;
10545 if (!deduce2)
10546 better1 = -1;
10547 if (better1 < 0 && better2 < 0)
10548 /* We've failed to deduce something in either direction.
10549 These must be unordered. */
10550 break;
10552 if (deduce1 && deduce2 && quals1 >= 0 && quals2 >= 0)
10554 /* Deduces in both directions, see if quals can
10555 disambiguate. Pretend the worse one failed to deduce. */
10556 if ((quals1 & quals2) == quals2)
10557 deduce1 = 0;
10558 if ((quals1 & quals2) == quals1)
10559 deduce2 = 0;
10561 if (deduce1 && !deduce2 && !better2)
10562 better2 = 1;
10563 if (deduce2 && !deduce1 && !better1)
10564 better1 = 1;
10566 args1 = TREE_CHAIN (args1);
10567 args2 = TREE_CHAIN (args2);
10570 processing_template_decl--;
10572 return (better1 > 0) - (better2 > 0);
10575 /* Given two class template specialization list nodes PAT1 and PAT2, return:
10577 1 if PAT1 is more specialized than PAT2 as described in [temp.class.order].
10578 -1 if PAT2 is more specialized than PAT1.
10579 0 if neither is more specialized.
10581 FULL_ARGS is the full set of template arguments that triggers this
10582 partial ordering. */
10585 more_specialized_class (tree pat1, tree pat2, tree full_args)
10587 tree targs;
10588 int winner = 0;
10590 /* Just like what happens for functions, if we are ordering between
10591 different class template specializations, we may encounter dependent
10592 types in the arguments, and we need our dependency check functions
10593 to behave correctly. */
10594 ++processing_template_decl;
10595 targs = get_class_bindings (TREE_VALUE (pat1), TREE_PURPOSE (pat1),
10596 add_outermost_template_args (full_args, TREE_PURPOSE (pat2)));
10597 if (targs)
10598 --winner;
10600 targs = get_class_bindings (TREE_VALUE (pat2), TREE_PURPOSE (pat2),
10601 add_outermost_template_args (full_args, TREE_PURPOSE (pat1)));
10602 if (targs)
10603 ++winner;
10604 --processing_template_decl;
10606 return winner;
10609 /* Return the template arguments that will produce the function signature
10610 DECL from the function template FN, with the explicit template
10611 arguments EXPLICIT_ARGS. If CHECK_RETTYPE is true, the return type must
10612 also match. Return NULL_TREE if no satisfactory arguments could be
10613 found. */
10615 static tree
10616 get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
10618 int ntparms = DECL_NTPARMS (fn);
10619 tree targs = make_tree_vec (ntparms);
10620 tree decl_type;
10621 tree decl_arg_types;
10623 /* Substitute the explicit template arguments into the type of DECL.
10624 The call to fn_type_unification will handle substitution into the
10625 FN. */
10626 decl_type = TREE_TYPE (decl);
10627 if (explicit_args && uses_template_parms (decl_type))
10629 tree tmpl;
10630 tree converted_args;
10632 if (DECL_TEMPLATE_INFO (decl))
10633 tmpl = DECL_TI_TEMPLATE (decl);
10634 else
10635 /* We can get here for some invalid specializations. */
10636 return NULL_TREE;
10638 converted_args
10639 = (coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
10640 explicit_args, NULL_TREE,
10641 tf_none, /*require_all_arguments=*/0));
10642 if (converted_args == error_mark_node)
10643 return NULL_TREE;
10645 decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE);
10646 if (decl_type == error_mark_node)
10647 return NULL_TREE;
10650 decl_arg_types = TYPE_ARG_TYPES (decl_type);
10651 /* Never do unification on the 'this' parameter. */
10652 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
10653 decl_arg_types = TREE_CHAIN (decl_arg_types);
10655 if (fn_type_unification (fn, explicit_args, targs,
10656 decl_arg_types,
10657 (check_rettype || DECL_CONV_FN_P (fn)
10658 ? TREE_TYPE (decl_type) : NULL_TREE),
10659 DEDUCE_EXACT))
10660 return NULL_TREE;
10662 return targs;
10665 /* Return the innermost template arguments that, when applied to a
10666 template specialization whose innermost template parameters are
10667 TPARMS, and whose specialization arguments are PARMS, yield the
10668 ARGS.
10670 For example, suppose we have:
10672 template <class T, class U> struct S {};
10673 template <class T> struct S<T*, int> {};
10675 Then, suppose we want to get `S<double*, int>'. The TPARMS will be
10676 {T}, the PARMS will be {T*, int} and the ARGS will be {double*,
10677 int}. The resulting vector will be {double}, indicating that `T'
10678 is bound to `double'. */
10680 static tree
10681 get_class_bindings (tree tparms, tree parms, tree args)
10683 int i, ntparms = TREE_VEC_LENGTH (tparms);
10684 tree vec = make_tree_vec (ntparms);
10686 if (unify (tparms, vec, parms, INNERMOST_TEMPLATE_ARGS (args),
10687 UNIFY_ALLOW_NONE))
10688 return NULL_TREE;
10690 for (i = 0; i < ntparms; ++i)
10691 if (! TREE_VEC_ELT (vec, i))
10692 return NULL_TREE;
10694 if (verify_class_unification (vec, parms, args))
10695 return NULL_TREE;
10697 return vec;
10700 /* In INSTANTIATIONS is a list of <INSTANTIATION, TEMPLATE> pairs.
10701 Pick the most specialized template, and return the corresponding
10702 instantiation, or if there is no corresponding instantiation, the
10703 template itself. If there is no most specialized template,
10704 error_mark_node is returned. If there are no templates at all,
10705 NULL_TREE is returned. */
10707 tree
10708 most_specialized_instantiation (tree instantiations)
10710 tree fn, champ;
10712 if (!instantiations)
10713 return NULL_TREE;
10715 ++processing_template_decl;
10717 champ = instantiations;
10718 for (fn = TREE_CHAIN (instantiations); fn; fn = TREE_CHAIN (fn))
10720 int fate = 0;
10722 if (get_bindings (TREE_VALUE (champ),
10723 DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
10724 NULL_TREE, /*check_ret=*/false))
10725 fate--;
10727 if (get_bindings (TREE_VALUE (fn),
10728 DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
10729 NULL_TREE, /*check_ret=*/false))
10730 fate++;
10732 if (fate != 1)
10734 if (!fate)
10735 /* Equally specialized, move to next function. If there
10736 is no next function, nothing's most specialized. */
10737 fn = TREE_CHAIN (fn);
10738 champ = fn;
10742 if (champ)
10743 /* Now verify that champ is better than everything earlier in the
10744 instantiation list. */
10745 for (fn = instantiations; fn != champ; fn = TREE_CHAIN (fn))
10746 if (get_bindings (TREE_VALUE (champ),
10747 DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
10748 NULL_TREE, /*check_ret=*/false)
10749 || !get_bindings (TREE_VALUE (fn),
10750 DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
10751 NULL_TREE, /*check_ret=*/false))
10753 champ = NULL_TREE;
10754 break;
10757 processing_template_decl--;
10759 if (!champ)
10760 return error_mark_node;
10762 return TREE_PURPOSE (champ) ? TREE_PURPOSE (champ) : TREE_VALUE (champ);
10765 /* Return the most specialized of the list of templates in FNS that can
10766 produce an instantiation matching DECL, given the explicit template
10767 arguments EXPLICIT_ARGS. */
10769 static tree
10770 most_specialized (tree fns, tree decl, tree explicit_args)
10772 tree candidates = NULL_TREE;
10773 tree fn, args;
10775 for (fn = fns; fn; fn = TREE_CHAIN (fn))
10777 tree candidate = TREE_VALUE (fn);
10779 args = get_bindings (candidate, decl, explicit_args, /*check_ret=*/true);
10780 if (args)
10781 candidates = tree_cons (NULL_TREE, candidate, candidates);
10784 return most_specialized_instantiation (candidates);
10787 /* If DECL is a specialization of some template, return the most
10788 general such template. Otherwise, returns NULL_TREE.
10790 For example, given:
10792 template <class T> struct S { template <class U> void f(U); };
10794 if TMPL is `template <class U> void S<int>::f(U)' this will return
10795 the full template. This function will not trace past partial
10796 specializations, however. For example, given in addition:
10798 template <class T> struct S<T*> { template <class U> void f(U); };
10800 if TMPL is `template <class U> void S<int*>::f(U)' this will return
10801 `template <class T> template <class U> S<T*>::f(U)'. */
10803 tree
10804 most_general_template (tree decl)
10806 /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
10807 an immediate specialization. */
10808 if (TREE_CODE (decl) == FUNCTION_DECL)
10810 if (DECL_TEMPLATE_INFO (decl)) {
10811 decl = DECL_TI_TEMPLATE (decl);
10813 /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
10814 template friend. */
10815 if (TREE_CODE (decl) != TEMPLATE_DECL)
10816 return NULL_TREE;
10817 } else
10818 return NULL_TREE;
10821 /* Look for more and more general templates. */
10822 while (DECL_TEMPLATE_INFO (decl))
10824 /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
10825 (See cp-tree.h for details.) */
10826 if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
10827 break;
10829 if (CLASS_TYPE_P (TREE_TYPE (decl))
10830 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
10831 break;
10833 /* Stop if we run into an explicitly specialized class template. */
10834 if (!DECL_NAMESPACE_SCOPE_P (decl)
10835 && DECL_CONTEXT (decl)
10836 && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
10837 break;
10839 decl = DECL_TI_TEMPLATE (decl);
10842 return decl;
10845 /* Return the most specialized of the class template specializations
10846 of TMPL which can produce an instantiation matching ARGS, or
10847 error_mark_node if the choice is ambiguous. */
10849 static tree
10850 most_specialized_class (tree tmpl, tree args)
10852 tree list = NULL_TREE;
10853 tree t;
10854 tree champ;
10855 int fate;
10857 tmpl = most_general_template (tmpl);
10858 for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
10860 tree spec_args
10861 = get_class_bindings (TREE_VALUE (t), TREE_PURPOSE (t), args);
10862 if (spec_args)
10864 list = tree_cons (TREE_PURPOSE (t), TREE_VALUE (t), list);
10865 TREE_TYPE (list) = TREE_TYPE (t);
10869 if (! list)
10870 return NULL_TREE;
10872 t = list;
10873 champ = t;
10874 t = TREE_CHAIN (t);
10875 for (; t; t = TREE_CHAIN (t))
10877 fate = more_specialized_class (champ, t, args);
10878 if (fate == 1)
10880 else
10882 if (fate == 0)
10884 t = TREE_CHAIN (t);
10885 if (! t)
10886 return error_mark_node;
10888 champ = t;
10892 for (t = list; t && t != champ; t = TREE_CHAIN (t))
10894 fate = more_specialized_class (champ, t, args);
10895 if (fate != 1)
10896 return error_mark_node;
10899 return champ;
10902 /* Explicitly instantiate DECL. */
10904 void
10905 do_decl_instantiation (tree decl, tree storage)
10907 tree result = NULL_TREE;
10908 int extern_p = 0;
10910 if (!decl)
10911 /* An error occurred, for which grokdeclarator has already issued
10912 an appropriate message. */
10913 return;
10914 else if (! DECL_LANG_SPECIFIC (decl))
10916 error ("explicit instantiation of non-template %q#D", decl);
10917 return;
10919 else if (TREE_CODE (decl) == VAR_DECL)
10921 /* There is an asymmetry here in the way VAR_DECLs and
10922 FUNCTION_DECLs are handled by grokdeclarator. In the case of
10923 the latter, the DECL we get back will be marked as a
10924 template instantiation, and the appropriate
10925 DECL_TEMPLATE_INFO will be set up. This does not happen for
10926 VAR_DECLs so we do the lookup here. Probably, grokdeclarator
10927 should handle VAR_DECLs as it currently handles
10928 FUNCTION_DECLs. */
10929 result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
10930 if (!result || TREE_CODE (result) != VAR_DECL)
10932 error ("no matching template for %qD found", decl);
10933 return;
10936 else if (TREE_CODE (decl) != FUNCTION_DECL)
10938 error ("explicit instantiation of %q#D", decl);
10939 return;
10941 else
10942 result = decl;
10944 /* Check for various error cases. Note that if the explicit
10945 instantiation is valid the RESULT will currently be marked as an
10946 *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
10947 until we get here. */
10949 if (DECL_TEMPLATE_SPECIALIZATION (result))
10951 /* DR 259 [temp.spec].
10953 Both an explicit instantiation and a declaration of an explicit
10954 specialization shall not appear in a program unless the explicit
10955 instantiation follows a declaration of the explicit specialization.
10957 For a given set of template parameters, if an explicit
10958 instantiation of a template appears after a declaration of an
10959 explicit specialization for that template, the explicit
10960 instantiation has no effect. */
10961 return;
10963 else if (DECL_EXPLICIT_INSTANTIATION (result))
10965 /* [temp.spec]
10967 No program shall explicitly instantiate any template more
10968 than once.
10970 We check DECL_NOT_REALLY_EXTERN so as not to complain when
10971 the first instantiation was `extern' and the second is not,
10972 and EXTERN_P for the opposite case. */
10973 if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
10974 pedwarn ("duplicate explicit instantiation of %q#D", result);
10975 /* If an "extern" explicit instantiation follows an ordinary
10976 explicit instantiation, the template is instantiated. */
10977 if (extern_p)
10978 return;
10980 else if (!DECL_IMPLICIT_INSTANTIATION (result))
10982 error ("no matching template for %qD found", result);
10983 return;
10985 else if (!DECL_TEMPLATE_INFO (result))
10987 pedwarn ("explicit instantiation of non-template %q#D", result);
10988 return;
10991 if (storage == NULL_TREE)
10993 else if (storage == ridpointers[(int) RID_EXTERN])
10995 if (pedantic && !in_system_header)
10996 pedwarn ("ISO C++ forbids the use of %<extern%> on explicit "
10997 "instantiations");
10998 extern_p = 1;
11000 else
11001 error ("storage class %qD applied to template instantiation", storage);
11003 mark_decl_instantiated (result, extern_p);
11004 if (! extern_p)
11005 instantiate_decl (result, /*defer_ok=*/1,
11006 /*expl_inst_class_mem_p=*/false);
11009 void
11010 mark_class_instantiated (tree t, int extern_p)
11012 SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
11013 SET_CLASSTYPE_INTERFACE_KNOWN (t);
11014 CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
11015 TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
11016 if (! extern_p)
11018 CLASSTYPE_DEBUG_REQUESTED (t) = 1;
11019 rest_of_type_compilation (t, 1);
11023 /* Called from do_type_instantiation through binding_table_foreach to
11024 do recursive instantiation for the type bound in ENTRY. */
11025 static void
11026 bt_instantiate_type_proc (binding_entry entry, void *data)
11028 tree storage = *(tree *) data;
11030 if (IS_AGGR_TYPE (entry->type)
11031 && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
11032 do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
11035 /* Called from do_type_instantiation to instantiate a member
11036 (a member function or a static member variable) of an
11037 explicitly instantiated class template. */
11038 static void
11039 instantiate_class_member (tree decl, int extern_p)
11041 mark_decl_instantiated (decl, extern_p);
11042 if (! extern_p)
11043 instantiate_decl (decl, /*defer_ok=*/1,
11044 /*expl_inst_class_mem_p=*/true);
11047 /* Perform an explicit instantiation of template class T. STORAGE, if
11048 non-null, is the RID for extern, inline or static. COMPLAIN is
11049 nonzero if this is called from the parser, zero if called recursively,
11050 since the standard is unclear (as detailed below). */
11052 void
11053 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
11055 int extern_p = 0;
11056 int nomem_p = 0;
11057 int static_p = 0;
11058 int previous_instantiation_extern_p = 0;
11060 if (TREE_CODE (t) == TYPE_DECL)
11061 t = TREE_TYPE (t);
11063 if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
11065 error ("explicit instantiation of non-template type %qT", t);
11066 return;
11069 complete_type (t);
11071 if (!COMPLETE_TYPE_P (t))
11073 if (complain & tf_error)
11074 error ("explicit instantiation of %q#T before definition of template",
11076 return;
11079 if (storage != NULL_TREE)
11081 if (pedantic && !in_system_header)
11082 pedwarn("ISO C++ forbids the use of %qE on explicit instantiations",
11083 storage);
11085 if (storage == ridpointers[(int) RID_INLINE])
11086 nomem_p = 1;
11087 else if (storage == ridpointers[(int) RID_EXTERN])
11088 extern_p = 1;
11089 else if (storage == ridpointers[(int) RID_STATIC])
11090 static_p = 1;
11091 else
11093 error ("storage class %qD applied to template instantiation",
11094 storage);
11095 extern_p = 0;
11099 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
11101 /* DR 259 [temp.spec].
11103 Both an explicit instantiation and a declaration of an explicit
11104 specialization shall not appear in a program unless the explicit
11105 instantiation follows a declaration of the explicit specialization.
11107 For a given set of template parameters, if an explicit
11108 instantiation of a template appears after a declaration of an
11109 explicit specialization for that template, the explicit
11110 instantiation has no effect. */
11111 return;
11113 else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
11115 /* [temp.spec]
11117 No program shall explicitly instantiate any template more
11118 than once.
11120 If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
11121 instantiation was `extern'. If EXTERN_P then the second is.
11122 These cases are OK. */
11123 previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
11125 if (!previous_instantiation_extern_p && !extern_p
11126 && (complain & tf_error))
11127 pedwarn ("duplicate explicit instantiation of %q#T", t);
11129 /* If we've already instantiated the template, just return now. */
11130 if (!CLASSTYPE_INTERFACE_ONLY (t))
11131 return;
11134 mark_class_instantiated (t, extern_p);
11136 if (nomem_p)
11137 return;
11140 tree tmp;
11142 /* In contrast to implicit instantiation, where only the
11143 declarations, and not the definitions, of members are
11144 instantiated, we have here:
11146 [temp.explicit]
11148 The explicit instantiation of a class template specialization
11149 implies the instantiation of all of its members not
11150 previously explicitly specialized in the translation unit
11151 containing the explicit instantiation.
11153 Of course, we can't instantiate member template classes, since
11154 we don't have any arguments for them. Note that the standard
11155 is unclear on whether the instantiation of the members are
11156 *explicit* instantiations or not. However, the most natural
11157 interpretation is that it should be an explicit instantiation. */
11159 if (! static_p)
11160 for (tmp = TYPE_METHODS (t); tmp; tmp = TREE_CHAIN (tmp))
11161 if (TREE_CODE (tmp) == FUNCTION_DECL
11162 && DECL_TEMPLATE_INSTANTIATION (tmp))
11163 instantiate_class_member (tmp, extern_p);
11165 for (tmp = TYPE_FIELDS (t); tmp; tmp = TREE_CHAIN (tmp))
11166 if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
11167 instantiate_class_member (tmp, extern_p);
11169 if (CLASSTYPE_NESTED_UTDS (t))
11170 binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
11171 bt_instantiate_type_proc, &storage);
11175 /* Given a function DECL, which is a specialization of TMPL, modify
11176 DECL to be a re-instantiation of TMPL with the same template
11177 arguments. TMPL should be the template into which tsubst'ing
11178 should occur for DECL, not the most general template.
11180 One reason for doing this is a scenario like this:
11182 template <class T>
11183 void f(const T&, int i);
11185 void g() { f(3, 7); }
11187 template <class T>
11188 void f(const T& t, const int i) { }
11190 Note that when the template is first instantiated, with
11191 instantiate_template, the resulting DECL will have no name for the
11192 first parameter, and the wrong type for the second. So, when we go
11193 to instantiate the DECL, we regenerate it. */
11195 static void
11196 regenerate_decl_from_template (tree decl, tree tmpl)
11198 /* The arguments used to instantiate DECL, from the most general
11199 template. */
11200 tree args;
11201 tree code_pattern;
11203 args = DECL_TI_ARGS (decl);
11204 code_pattern = DECL_TEMPLATE_RESULT (tmpl);
11206 /* Make sure that we can see identifiers, and compute access
11207 correctly. */
11208 push_access_scope (decl);
11210 if (TREE_CODE (decl) == FUNCTION_DECL)
11212 tree decl_parm;
11213 tree pattern_parm;
11214 tree specs;
11215 int args_depth;
11216 int parms_depth;
11218 args_depth = TMPL_ARGS_DEPTH (args);
11219 parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
11220 if (args_depth > parms_depth)
11221 args = get_innermost_template_args (args, parms_depth);
11223 specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
11224 args, tf_error, NULL_TREE);
11225 if (specs)
11226 TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
11227 specs);
11229 /* Merge parameter declarations. */
11230 decl_parm = skip_artificial_parms_for (decl,
11231 DECL_ARGUMENTS (decl));
11232 pattern_parm
11233 = skip_artificial_parms_for (code_pattern,
11234 DECL_ARGUMENTS (code_pattern));
11235 while (decl_parm)
11237 tree parm_type;
11238 tree attributes;
11240 if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
11241 DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
11242 parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
11243 NULL_TREE);
11244 parm_type = type_decays_to (parm_type);
11245 if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
11246 TREE_TYPE (decl_parm) = parm_type;
11247 attributes = DECL_ATTRIBUTES (pattern_parm);
11248 if (DECL_ATTRIBUTES (decl_parm) != attributes)
11250 DECL_ATTRIBUTES (decl_parm) = attributes;
11251 cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
11253 decl_parm = TREE_CHAIN (decl_parm);
11254 pattern_parm = TREE_CHAIN (pattern_parm);
11257 /* Merge additional specifiers from the CODE_PATTERN. */
11258 if (DECL_DECLARED_INLINE_P (code_pattern)
11259 && !DECL_DECLARED_INLINE_P (decl))
11260 DECL_DECLARED_INLINE_P (decl) = 1;
11261 if (DECL_INLINE (code_pattern) && !DECL_INLINE (decl))
11262 DECL_INLINE (decl) = 1;
11264 else if (TREE_CODE (decl) == VAR_DECL)
11266 if (!DECL_INITIALIZED_IN_CLASS_P (decl)
11267 && DECL_INITIAL (code_pattern))
11268 DECL_INITIAL (decl) =
11269 tsubst_expr (DECL_INITIAL (code_pattern), args,
11270 tf_error, DECL_TI_TEMPLATE (decl));
11272 else
11273 gcc_unreachable ();
11275 pop_access_scope (decl);
11278 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
11279 substituted to get DECL. */
11281 tree
11282 template_for_substitution (tree decl)
11284 tree tmpl = DECL_TI_TEMPLATE (decl);
11286 /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
11287 for the instantiation. This is not always the most general
11288 template. Consider, for example:
11290 template <class T>
11291 struct S { template <class U> void f();
11292 template <> void f<int>(); };
11294 and an instantiation of S<double>::f<int>. We want TD to be the
11295 specialization S<T>::f<int>, not the more general S<T>::f<U>. */
11296 while (/* An instantiation cannot have a definition, so we need a
11297 more general template. */
11298 DECL_TEMPLATE_INSTANTIATION (tmpl)
11299 /* We must also deal with friend templates. Given:
11301 template <class T> struct S {
11302 template <class U> friend void f() {};
11305 S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
11306 so far as the language is concerned, but that's still
11307 where we get the pattern for the instantiation from. On
11308 other hand, if the definition comes outside the class, say:
11310 template <class T> struct S {
11311 template <class U> friend void f();
11313 template <class U> friend void f() {}
11315 we don't need to look any further. That's what the check for
11316 DECL_INITIAL is for. */
11317 || (TREE_CODE (decl) == FUNCTION_DECL
11318 && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
11319 && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
11321 /* The present template, TD, should not be a definition. If it
11322 were a definition, we should be using it! Note that we
11323 cannot restructure the loop to just keep going until we find
11324 a template with a definition, since that might go too far if
11325 a specialization was declared, but not defined. */
11326 gcc_assert (TREE_CODE (decl) != VAR_DECL
11327 || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl)));
11329 /* Fetch the more general template. */
11330 tmpl = DECL_TI_TEMPLATE (tmpl);
11333 return tmpl;
11336 /* Produce the definition of D, a _DECL generated from a template. If
11337 DEFER_OK is nonzero, then we don't have to actually do the
11338 instantiation now; we just have to do it sometime. Normally it is
11339 an error if this is an explicit instantiation but D is undefined.
11340 EXPL_INST_CLASS_MEM_P is true iff D is a member of an
11341 explicitly instantiated class template. */
11343 tree
11344 instantiate_decl (tree d, int defer_ok,
11345 bool expl_inst_class_mem_p)
11347 tree tmpl = DECL_TI_TEMPLATE (d);
11348 tree gen_args;
11349 tree args;
11350 tree td;
11351 tree code_pattern;
11352 tree spec;
11353 tree gen_tmpl;
11354 int pattern_defined;
11355 int need_push;
11356 location_t saved_loc = input_location;
11358 /* This function should only be used to instantiate templates for
11359 functions and static member variables. */
11360 gcc_assert (TREE_CODE (d) == FUNCTION_DECL
11361 || TREE_CODE (d) == VAR_DECL);
11363 /* Variables are never deferred; if instantiation is required, they
11364 are instantiated right away. That allows for better code in the
11365 case that an expression refers to the value of the variable --
11366 if the variable has a constant value the referring expression can
11367 take advantage of that fact. */
11368 if (TREE_CODE (d) == VAR_DECL)
11369 defer_ok = 0;
11371 /* Don't instantiate cloned functions. Instead, instantiate the
11372 functions they cloned. */
11373 if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
11374 d = DECL_CLONED_FUNCTION (d);
11376 if (DECL_TEMPLATE_INSTANTIATED (d))
11377 /* D has already been instantiated. It might seem reasonable to
11378 check whether or not D is an explicit instantiation, and, if so,
11379 stop here. But when an explicit instantiation is deferred
11380 until the end of the compilation, DECL_EXPLICIT_INSTANTIATION
11381 is set, even though we still need to do the instantiation. */
11382 return d;
11384 /* If we already have a specialization of this declaration, then
11385 there's no reason to instantiate it. Note that
11386 retrieve_specialization gives us both instantiations and
11387 specializations, so we must explicitly check
11388 DECL_TEMPLATE_SPECIALIZATION. */
11389 gen_tmpl = most_general_template (tmpl);
11390 gen_args = DECL_TI_ARGS (d);
11391 spec = retrieve_specialization (gen_tmpl, gen_args,
11392 /*class_specializations_p=*/false);
11393 if (spec != NULL_TREE && DECL_TEMPLATE_SPECIALIZATION (spec))
11394 return spec;
11396 /* This needs to happen before any tsubsting. */
11397 if (! push_tinst_level (d))
11398 return d;
11400 timevar_push (TV_PARSE);
11402 /* We may be in the middle of deferred access check. Disable it now. */
11403 push_deferring_access_checks (dk_no_deferred);
11405 /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
11406 for the instantiation. */
11407 td = template_for_substitution (d);
11408 code_pattern = DECL_TEMPLATE_RESULT (td);
11410 if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
11411 || DECL_TEMPLATE_SPECIALIZATION (td))
11412 /* In the case of a friend template whose definition is provided
11413 outside the class, we may have too many arguments. Drop the
11414 ones we don't need. The same is true for specializations. */
11415 args = get_innermost_template_args
11416 (gen_args, TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (td)));
11417 else
11418 args = gen_args;
11420 if (TREE_CODE (d) == FUNCTION_DECL)
11421 pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE);
11422 else
11423 pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
11424 /* Unless an explicit instantiation directive has already determined
11425 the linkage of D, remember that a definition is available for
11426 this entity. */
11427 if (pattern_defined
11428 && !DECL_INTERFACE_KNOWN (d)
11429 && !DECL_NOT_REALLY_EXTERN (d))
11430 mark_definable (d);
11432 input_location = DECL_SOURCE_LOCATION (d);
11434 /* If D is a member of an explicitly instantiated class template,
11435 and no definition is available, treat it like an implicit
11436 instantiation. */
11437 if (!pattern_defined && expl_inst_class_mem_p
11438 && DECL_EXPLICIT_INSTANTIATION (d))
11440 DECL_NOT_REALLY_EXTERN (d) = 0;
11441 DECL_INTERFACE_KNOWN (d) = 0;
11442 SET_DECL_IMPLICIT_INSTANTIATION (d);
11445 if (!defer_ok)
11447 /* Recheck the substitutions to obtain any warning messages
11448 about ignoring cv qualifiers. */
11449 tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
11450 tree type = TREE_TYPE (gen);
11452 /* Make sure that we can see identifiers, and compute access
11453 correctly. D is already the target FUNCTION_DECL with the
11454 right context. */
11455 push_access_scope (d);
11457 if (TREE_CODE (gen) == FUNCTION_DECL)
11459 tsubst (DECL_ARGUMENTS (gen), gen_args, tf_error | tf_warning, d);
11460 tsubst (TYPE_RAISES_EXCEPTIONS (type), gen_args,
11461 tf_error | tf_warning, d);
11462 /* Don't simply tsubst the function type, as that will give
11463 duplicate warnings about poor parameter qualifications.
11464 The function arguments are the same as the decl_arguments
11465 without the top level cv qualifiers. */
11466 type = TREE_TYPE (type);
11468 tsubst (type, gen_args, tf_error | tf_warning, d);
11470 pop_access_scope (d);
11473 /* We should have set up DECL_INITIAL in instantiate_class_template
11474 for in-class definitions of static data members. */
11475 gcc_assert (!(TREE_CODE (d) == VAR_DECL
11476 && DECL_INITIALIZED_IN_CLASS_P (d)
11477 && DECL_INITIAL (d) == NULL_TREE));
11479 /* Do not instantiate templates that we know will be defined
11480 elsewhere. */
11481 if (DECL_INTERFACE_KNOWN (d)
11482 && DECL_REALLY_EXTERN (d)
11483 && ! (TREE_CODE (d) == FUNCTION_DECL
11484 && DECL_INLINE (d)))
11485 goto out;
11486 /* Defer all other templates, unless we have been explicitly
11487 forbidden from doing so. We restore the source position here
11488 because it's used by add_pending_template. */
11489 else if (! pattern_defined || defer_ok)
11491 input_location = saved_loc;
11493 if (at_eof && !pattern_defined
11494 && DECL_EXPLICIT_INSTANTIATION (d))
11495 /* [temp.explicit]
11497 The definition of a non-exported function template, a
11498 non-exported member function template, or a non-exported
11499 member function or static data member of a class template
11500 shall be present in every translation unit in which it is
11501 explicitly instantiated. */
11502 pedwarn
11503 ("explicit instantiation of %qD but no definition available", d);
11505 add_pending_template (d);
11506 goto out;
11508 /* Tell the repository that D is available in this translation unit
11509 -- and see if it is supposed to be instantiated here. */
11510 if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
11512 /* In a PCH file, despite the fact that the repository hasn't
11513 requested instantiation in the PCH it is still possible that
11514 an instantiation will be required in a file that includes the
11515 PCH. */
11516 if (pch_file)
11517 add_pending_template (d);
11518 /* Instantiate inline functions so that the inliner can do its
11519 job, even though we'll not be emitting a copy of this
11520 function. */
11521 if (!(TREE_CODE (d) == FUNCTION_DECL
11522 && flag_inline_trees
11523 && DECL_DECLARED_INLINE_P (d)))
11524 goto out;
11527 need_push = !cfun || !global_bindings_p ();
11528 if (need_push)
11529 push_to_top_level ();
11531 /* Mark D as instantiated so that recursive calls to
11532 instantiate_decl do not try to instantiate it again. */
11533 DECL_TEMPLATE_INSTANTIATED (d) = 1;
11535 /* Regenerate the declaration in case the template has been modified
11536 by a subsequent redeclaration. */
11537 regenerate_decl_from_template (d, td);
11539 /* We already set the file and line above. Reset them now in case
11540 they changed as a result of calling regenerate_decl_from_template. */
11541 input_location = DECL_SOURCE_LOCATION (d);
11543 if (TREE_CODE (d) == VAR_DECL)
11545 /* Clear out DECL_RTL; whatever was there before may not be right
11546 since we've reset the type of the declaration. */
11547 SET_DECL_RTL (d, NULL_RTX);
11548 DECL_IN_AGGR_P (d) = 0;
11550 /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
11551 initializer. That function will defer actual emission until
11552 we have a chance to determine linkage. */
11553 DECL_EXTERNAL (d) = 0;
11555 /* Enter the scope of D so that access-checking works correctly. */
11556 push_nested_class (DECL_CONTEXT (d));
11557 cp_finish_decl (d,
11558 (!DECL_INITIALIZED_IN_CLASS_P (d)
11559 ? DECL_INITIAL (d) : NULL_TREE),
11560 NULL_TREE, 0);
11561 pop_nested_class ();
11563 else if (TREE_CODE (d) == FUNCTION_DECL)
11565 htab_t saved_local_specializations;
11566 tree subst_decl;
11567 tree tmpl_parm;
11568 tree spec_parm;
11570 /* Save away the current list, in case we are instantiating one
11571 template from within the body of another. */
11572 saved_local_specializations = local_specializations;
11574 /* Set up the list of local specializations. */
11575 local_specializations = htab_create (37,
11576 hash_local_specialization,
11577 eq_local_specializations,
11578 NULL);
11580 /* Set up context. */
11581 start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
11583 /* Create substitution entries for the parameters. */
11584 subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
11585 tmpl_parm = DECL_ARGUMENTS (subst_decl);
11586 spec_parm = DECL_ARGUMENTS (d);
11587 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
11589 register_local_specialization (spec_parm, tmpl_parm);
11590 spec_parm = skip_artificial_parms_for (d, spec_parm);
11591 tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
11593 while (tmpl_parm)
11595 register_local_specialization (spec_parm, tmpl_parm);
11596 tmpl_parm = TREE_CHAIN (tmpl_parm);
11597 spec_parm = TREE_CHAIN (spec_parm);
11599 gcc_assert (!spec_parm);
11601 /* Substitute into the body of the function. */
11602 tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
11603 tf_error | tf_warning, tmpl);
11605 /* We don't need the local specializations any more. */
11606 htab_delete (local_specializations);
11607 local_specializations = saved_local_specializations;
11609 /* Finish the function. */
11610 d = finish_function (0);
11611 expand_or_defer_fn (d);
11614 /* We're not deferring instantiation any more. */
11615 TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
11617 if (need_push)
11618 pop_from_top_level ();
11620 out:
11621 input_location = saved_loc;
11622 pop_deferring_access_checks ();
11623 pop_tinst_level ();
11625 timevar_pop (TV_PARSE);
11627 return d;
11630 /* Run through the list of templates that we wish we could
11631 instantiate, and instantiate any we can. RETRIES is the
11632 number of times we retry pending template instantiation. */
11634 void
11635 instantiate_pending_templates (int retries)
11637 tree *t;
11638 tree last = NULL_TREE;
11639 int reconsider;
11640 location_t saved_loc = input_location;
11641 int saved_in_system_header = in_system_header;
11643 /* Instantiating templates may trigger vtable generation. This in turn
11644 may require further template instantiations. We place a limit here
11645 to avoid infinite loop. */
11646 if (pending_templates && retries >= max_tinst_depth)
11648 error ("template instantiation depth exceeds maximum of %d"
11649 " instantiating %q+D, possibly from virtual table generation"
11650 " (use -ftemplate-depth-NN to increase the maximum)",
11651 max_tinst_depth, TREE_VALUE (pending_templates));
11652 return;
11657 reconsider = 0;
11659 t = &pending_templates;
11660 while (*t)
11662 tree instantiation = TREE_VALUE (*t);
11664 reopen_tinst_level (TREE_PURPOSE (*t));
11666 if (TYPE_P (instantiation))
11668 tree fn;
11670 if (!COMPLETE_TYPE_P (instantiation))
11672 instantiate_class_template (instantiation);
11673 if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
11674 for (fn = TYPE_METHODS (instantiation);
11676 fn = TREE_CHAIN (fn))
11677 if (! DECL_ARTIFICIAL (fn))
11678 instantiate_decl (fn,
11679 /*defer_ok=*/0,
11680 /*expl_inst_class_mem_p=*/false);
11681 if (COMPLETE_TYPE_P (instantiation))
11682 reconsider = 1;
11685 if (COMPLETE_TYPE_P (instantiation))
11686 /* If INSTANTIATION has been instantiated, then we don't
11687 need to consider it again in the future. */
11688 *t = TREE_CHAIN (*t);
11689 else
11691 last = *t;
11692 t = &TREE_CHAIN (*t);
11695 else
11697 if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
11698 && !DECL_TEMPLATE_INSTANTIATED (instantiation))
11700 instantiation
11701 = instantiate_decl (instantiation,
11702 /*defer_ok=*/0,
11703 /*expl_inst_class_mem_p=*/false);
11704 if (DECL_TEMPLATE_INSTANTIATED (instantiation))
11705 reconsider = 1;
11708 if (DECL_TEMPLATE_SPECIALIZATION (instantiation)
11709 || DECL_TEMPLATE_INSTANTIATED (instantiation))
11710 /* If INSTANTIATION has been instantiated, then we don't
11711 need to consider it again in the future. */
11712 *t = TREE_CHAIN (*t);
11713 else
11715 last = *t;
11716 t = &TREE_CHAIN (*t);
11719 tinst_depth = 0;
11720 current_tinst_level = NULL_TREE;
11722 last_pending_template = last;
11724 while (reconsider);
11726 input_location = saved_loc;
11727 in_system_header = saved_in_system_header;
11730 /* Substitute ARGVEC into T, which is a list of initializers for
11731 either base class or a non-static data member. The TREE_PURPOSEs
11732 are DECLs, and the TREE_VALUEs are the initializer values. Used by
11733 instantiate_decl. */
11735 static tree
11736 tsubst_initializer_list (tree t, tree argvec)
11738 tree inits = NULL_TREE;
11740 for (; t; t = TREE_CHAIN (t))
11742 tree decl;
11743 tree init;
11745 decl = tsubst_copy (TREE_PURPOSE (t), argvec, tf_error | tf_warning,
11746 NULL_TREE);
11747 decl = expand_member_init (decl);
11748 if (decl && !DECL_P (decl))
11749 in_base_initializer = 1;
11751 init = tsubst_expr (TREE_VALUE (t), argvec, tf_error | tf_warning,
11752 NULL_TREE);
11753 in_base_initializer = 0;
11755 if (decl)
11757 init = build_tree_list (decl, init);
11758 TREE_CHAIN (init) = inits;
11759 inits = init;
11762 return inits;
11765 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL. */
11767 static void
11768 set_current_access_from_decl (tree decl)
11770 if (TREE_PRIVATE (decl))
11771 current_access_specifier = access_private_node;
11772 else if (TREE_PROTECTED (decl))
11773 current_access_specifier = access_protected_node;
11774 else
11775 current_access_specifier = access_public_node;
11778 /* Instantiate an enumerated type. TAG is the template type, NEWTAG
11779 is the instantiation (which should have been created with
11780 start_enum) and ARGS are the template arguments to use. */
11782 static void
11783 tsubst_enum (tree tag, tree newtag, tree args)
11785 tree e;
11787 for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
11789 tree value;
11790 tree decl;
11792 decl = TREE_VALUE (e);
11793 /* Note that in a template enum, the TREE_VALUE is the
11794 CONST_DECL, not the corresponding INTEGER_CST. */
11795 value = tsubst_expr (DECL_INITIAL (decl),
11796 args, tf_error | tf_warning,
11797 NULL_TREE);
11799 /* Give this enumeration constant the correct access. */
11800 set_current_access_from_decl (decl);
11802 /* Actually build the enumerator itself. */
11803 build_enumerator (DECL_NAME (decl), value, newtag);
11806 finish_enum (newtag);
11807 DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
11808 = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
11811 /* DECL is a FUNCTION_DECL that is a template specialization. Return
11812 its type -- but without substituting the innermost set of template
11813 arguments. So, innermost set of template parameters will appear in
11814 the type. */
11816 tree
11817 get_mostly_instantiated_function_type (tree decl)
11819 tree fn_type;
11820 tree tmpl;
11821 tree targs;
11822 tree tparms;
11823 int parm_depth;
11825 tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
11826 targs = DECL_TI_ARGS (decl);
11827 tparms = DECL_TEMPLATE_PARMS (tmpl);
11828 parm_depth = TMPL_PARMS_DEPTH (tparms);
11830 /* There should be as many levels of arguments as there are levels
11831 of parameters. */
11832 gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
11834 fn_type = TREE_TYPE (tmpl);
11836 if (parm_depth == 1)
11837 /* No substitution is necessary. */
11839 else
11841 int i, save_access_control;
11842 tree partial_args;
11844 /* Replace the innermost level of the TARGS with NULL_TREEs to
11845 let tsubst know not to substitute for those parameters. */
11846 partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
11847 for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
11848 SET_TMPL_ARGS_LEVEL (partial_args, i,
11849 TMPL_ARGS_LEVEL (targs, i));
11850 SET_TMPL_ARGS_LEVEL (partial_args,
11851 TMPL_ARGS_DEPTH (targs),
11852 make_tree_vec (DECL_NTPARMS (tmpl)));
11854 /* Disable access control as this function is used only during
11855 name-mangling. */
11856 save_access_control = flag_access_control;
11857 flag_access_control = 0;
11859 ++processing_template_decl;
11860 /* Now, do the (partial) substitution to figure out the
11861 appropriate function type. */
11862 fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
11863 --processing_template_decl;
11865 /* Substitute into the template parameters to obtain the real
11866 innermost set of parameters. This step is important if the
11867 innermost set of template parameters contains value
11868 parameters whose types depend on outer template parameters. */
11869 TREE_VEC_LENGTH (partial_args)--;
11870 tparms = tsubst_template_parms (tparms, partial_args, tf_error);
11872 flag_access_control = save_access_control;
11875 return fn_type;
11878 /* Return truthvalue if we're processing a template different from
11879 the last one involved in diagnostics. */
11881 problematic_instantiation_changed (void)
11883 return last_template_error_tick != tinst_level_tick;
11886 /* Remember current template involved in diagnostics. */
11887 void
11888 record_last_problematic_instantiation (void)
11890 last_template_error_tick = tinst_level_tick;
11893 tree
11894 current_instantiation (void)
11896 return current_tinst_level;
11899 /* [temp.param] Check that template non-type parm TYPE is of an allowable
11900 type. Return zero for ok, nonzero for disallowed. Issue error and
11901 warning messages under control of COMPLAIN. */
11903 static int
11904 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
11906 if (INTEGRAL_TYPE_P (type))
11907 return 0;
11908 else if (POINTER_TYPE_P (type))
11909 return 0;
11910 else if (TYPE_PTR_TO_MEMBER_P (type))
11911 return 0;
11912 else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
11913 return 0;
11914 else if (TREE_CODE (type) == TYPENAME_TYPE)
11915 return 0;
11917 if (complain & tf_error)
11918 error ("%q#T is not a valid type for a template constant parameter", type);
11919 return 1;
11922 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
11923 Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
11925 static bool
11926 dependent_type_p_r (tree type)
11928 tree scope;
11930 /* [temp.dep.type]
11932 A type is dependent if it is:
11934 -- a template parameter. Template template parameters are types
11935 for us (since TYPE_P holds true for them) so we handle
11936 them here. */
11937 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
11938 || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
11939 return true;
11940 /* -- a qualified-id with a nested-name-specifier which contains a
11941 class-name that names a dependent type or whose unqualified-id
11942 names a dependent type. */
11943 if (TREE_CODE (type) == TYPENAME_TYPE)
11944 return true;
11945 /* -- a cv-qualified type where the cv-unqualified type is
11946 dependent. */
11947 type = TYPE_MAIN_VARIANT (type);
11948 /* -- a compound type constructed from any dependent type. */
11949 if (TYPE_PTR_TO_MEMBER_P (type))
11950 return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
11951 || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
11952 (type)));
11953 else if (TREE_CODE (type) == POINTER_TYPE
11954 || TREE_CODE (type) == REFERENCE_TYPE)
11955 return dependent_type_p (TREE_TYPE (type));
11956 else if (TREE_CODE (type) == FUNCTION_TYPE
11957 || TREE_CODE (type) == METHOD_TYPE)
11959 tree arg_type;
11961 if (dependent_type_p (TREE_TYPE (type)))
11962 return true;
11963 for (arg_type = TYPE_ARG_TYPES (type);
11964 arg_type;
11965 arg_type = TREE_CHAIN (arg_type))
11966 if (dependent_type_p (TREE_VALUE (arg_type)))
11967 return true;
11968 return false;
11970 /* -- an array type constructed from any dependent type or whose
11971 size is specified by a constant expression that is
11972 value-dependent. */
11973 if (TREE_CODE (type) == ARRAY_TYPE)
11975 if (TYPE_DOMAIN (type)
11976 && ((value_dependent_expression_p
11977 (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
11978 || (type_dependent_expression_p
11979 (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))))
11980 return true;
11981 return dependent_type_p (TREE_TYPE (type));
11984 /* -- a template-id in which either the template name is a template
11985 parameter ... */
11986 if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
11987 return true;
11988 /* ... or any of the template arguments is a dependent type or
11989 an expression that is type-dependent or value-dependent. */
11990 else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
11991 && (any_dependent_template_arguments_p
11992 (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
11993 return true;
11995 /* All TYPEOF_TYPEs are dependent; if the argument of the `typeof'
11996 expression is not type-dependent, then it should already been
11997 have resolved. */
11998 if (TREE_CODE (type) == TYPEOF_TYPE)
11999 return true;
12001 /* The standard does not specifically mention types that are local
12002 to template functions or local classes, but they should be
12003 considered dependent too. For example:
12005 template <int I> void f() {
12006 enum E { a = I };
12007 S<sizeof (E)> s;
12010 The size of `E' cannot be known until the value of `I' has been
12011 determined. Therefore, `E' must be considered dependent. */
12012 scope = TYPE_CONTEXT (type);
12013 if (scope && TYPE_P (scope))
12014 return dependent_type_p (scope);
12015 else if (scope && TREE_CODE (scope) == FUNCTION_DECL)
12016 return type_dependent_expression_p (scope);
12018 /* Other types are non-dependent. */
12019 return false;
12022 /* Returns TRUE if TYPE is dependent, in the sense of
12023 [temp.dep.type]. */
12025 bool
12026 dependent_type_p (tree type)
12028 /* If there are no template parameters in scope, then there can't be
12029 any dependent types. */
12030 if (!processing_template_decl)
12031 return false;
12033 /* If the type is NULL, we have not computed a type for the entity
12034 in question; in that case, the type is dependent. */
12035 if (!type)
12036 return true;
12038 /* Erroneous types can be considered non-dependent. */
12039 if (type == error_mark_node)
12040 return false;
12042 /* If we have not already computed the appropriate value for TYPE,
12043 do so now. */
12044 if (!TYPE_DEPENDENT_P_VALID (type))
12046 TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
12047 TYPE_DEPENDENT_P_VALID (type) = 1;
12050 return TYPE_DEPENDENT_P (type);
12053 /* Returns TRUE if EXPRESSION is dependent, according to CRITERION. */
12055 static bool
12056 dependent_scope_ref_p (tree expression, bool criterion (tree))
12058 tree scope;
12059 tree name;
12061 gcc_assert (TREE_CODE (expression) == SCOPE_REF);
12063 if (!TYPE_P (TREE_OPERAND (expression, 0)))
12064 return true;
12066 scope = TREE_OPERAND (expression, 0);
12067 name = TREE_OPERAND (expression, 1);
12069 /* [temp.dep.expr]
12071 An id-expression is type-dependent if it contains a
12072 nested-name-specifier that contains a class-name that names a
12073 dependent type. */
12074 /* The suggested resolution to Core Issue 2 implies that if the
12075 qualifying type is the current class, then we must peek
12076 inside it. */
12077 if (DECL_P (name)
12078 && currently_open_class (scope)
12079 && !criterion (name))
12080 return false;
12081 if (dependent_type_p (scope))
12082 return true;
12084 return false;
12087 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
12088 [temp.dep.constexpr] */
12090 bool
12091 value_dependent_expression_p (tree expression)
12093 if (!processing_template_decl)
12094 return false;
12096 /* A name declared with a dependent type. */
12097 if (DECL_P (expression) && type_dependent_expression_p (expression))
12098 return true;
12100 switch (TREE_CODE (expression))
12102 case IDENTIFIER_NODE:
12103 /* A name that has not been looked up -- must be dependent. */
12104 return true;
12106 case TEMPLATE_PARM_INDEX:
12107 /* A non-type template parm. */
12108 return true;
12110 case CONST_DECL:
12111 /* A non-type template parm. */
12112 if (DECL_TEMPLATE_PARM_P (expression))
12113 return true;
12114 return false;
12116 case VAR_DECL:
12117 /* A constant with integral or enumeration type and is initialized
12118 with an expression that is value-dependent. */
12119 if (DECL_INITIAL (expression)
12120 && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (expression))
12121 && value_dependent_expression_p (DECL_INITIAL (expression)))
12122 return true;
12123 return false;
12125 case DYNAMIC_CAST_EXPR:
12126 case STATIC_CAST_EXPR:
12127 case CONST_CAST_EXPR:
12128 case REINTERPRET_CAST_EXPR:
12129 case CAST_EXPR:
12130 /* These expressions are value-dependent if the type to which
12131 the cast occurs is dependent or the expression being casted
12132 is value-dependent. */
12134 tree type = TREE_TYPE (expression);
12136 if (dependent_type_p (type))
12137 return true;
12139 /* A functional cast has a list of operands. */
12140 expression = TREE_OPERAND (expression, 0);
12141 if (!expression)
12143 /* If there are no operands, it must be an expression such
12144 as "int()". This should not happen for aggregate types
12145 because it would form non-constant expressions. */
12146 gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type));
12148 return false;
12151 if (TREE_CODE (expression) == TREE_LIST)
12153 for (; expression; expression = TREE_CHAIN (expression))
12154 if (value_dependent_expression_p (TREE_VALUE (expression)))
12155 return true;
12156 return false;
12159 return value_dependent_expression_p (expression);
12162 case SIZEOF_EXPR:
12163 case ALIGNOF_EXPR:
12164 /* A `sizeof' expression is value-dependent if the operand is
12165 type-dependent. */
12166 expression = TREE_OPERAND (expression, 0);
12167 if (TYPE_P (expression))
12168 return dependent_type_p (expression);
12169 return type_dependent_expression_p (expression);
12171 case SCOPE_REF:
12172 return dependent_scope_ref_p (expression, value_dependent_expression_p);
12174 case COMPONENT_REF:
12175 return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
12176 || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
12178 case CALL_EXPR:
12179 /* A CALL_EXPR is value-dependent if any argument is
12180 value-dependent. Why do we have to handle CALL_EXPRs in this
12181 function at all? First, some function calls, those for which
12182 value_dependent_expression_p is true, man appear in constant
12183 expressions. Second, there appear to be bugs which result in
12184 other CALL_EXPRs reaching this point. */
12186 tree function = TREE_OPERAND (expression, 0);
12187 tree args = TREE_OPERAND (expression, 1);
12189 if (value_dependent_expression_p (function))
12190 return true;
12192 if (! args)
12193 return false;
12195 if (TREE_CODE (args) == TREE_LIST)
12197 for (; args; args = TREE_CHAIN (args))
12198 if (value_dependent_expression_p (TREE_VALUE (args)))
12199 return true;
12200 return false;
12203 return value_dependent_expression_p (args);
12206 default:
12207 /* A constant expression is value-dependent if any subexpression is
12208 value-dependent. */
12209 switch (TREE_CODE_CLASS (TREE_CODE (expression)))
12211 case tcc_reference:
12212 case tcc_unary:
12213 return (value_dependent_expression_p
12214 (TREE_OPERAND (expression, 0)));
12216 case tcc_comparison:
12217 case tcc_binary:
12218 return ((value_dependent_expression_p
12219 (TREE_OPERAND (expression, 0)))
12220 || (value_dependent_expression_p
12221 (TREE_OPERAND (expression, 1))));
12223 case tcc_expression:
12225 int i;
12226 for (i = 0; i < TREE_CODE_LENGTH (TREE_CODE (expression)); ++i)
12227 /* In some cases, some of the operands may be missing.
12228 (For example, in the case of PREDECREMENT_EXPR, the
12229 amount to increment by may be missing.) That doesn't
12230 make the expression dependent. */
12231 if (TREE_OPERAND (expression, i)
12232 && (value_dependent_expression_p
12233 (TREE_OPERAND (expression, i))))
12234 return true;
12235 return false;
12238 default:
12239 break;
12243 /* The expression is not value-dependent. */
12244 return false;
12247 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
12248 [temp.dep.expr]. */
12250 bool
12251 type_dependent_expression_p (tree expression)
12253 if (!processing_template_decl)
12254 return false;
12256 if (expression == error_mark_node)
12257 return false;
12259 /* An unresolved name is always dependent. */
12260 if (TREE_CODE (expression) == IDENTIFIER_NODE)
12261 return true;
12263 /* Some expression forms are never type-dependent. */
12264 if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
12265 || TREE_CODE (expression) == SIZEOF_EXPR
12266 || TREE_CODE (expression) == ALIGNOF_EXPR
12267 || TREE_CODE (expression) == TYPEID_EXPR
12268 || TREE_CODE (expression) == DELETE_EXPR
12269 || TREE_CODE (expression) == VEC_DELETE_EXPR
12270 || TREE_CODE (expression) == THROW_EXPR)
12271 return false;
12273 /* The types of these expressions depends only on the type to which
12274 the cast occurs. */
12275 if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
12276 || TREE_CODE (expression) == STATIC_CAST_EXPR
12277 || TREE_CODE (expression) == CONST_CAST_EXPR
12278 || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
12279 || TREE_CODE (expression) == CAST_EXPR)
12280 return dependent_type_p (TREE_TYPE (expression));
12282 /* The types of these expressions depends only on the type created
12283 by the expression. */
12284 if (TREE_CODE (expression) == NEW_EXPR
12285 || TREE_CODE (expression) == VEC_NEW_EXPR)
12287 /* For NEW_EXPR tree nodes created inside a template, either
12288 the object type itself or a TREE_LIST may appear as the
12289 operand 1. */
12290 tree type = TREE_OPERAND (expression, 1);
12291 if (TREE_CODE (type) == TREE_LIST)
12292 /* This is an array type. We need to check array dimensions
12293 as well. */
12294 return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
12295 || value_dependent_expression_p
12296 (TREE_OPERAND (TREE_VALUE (type), 1));
12297 else
12298 return dependent_type_p (type);
12301 if (TREE_CODE (expression) == SCOPE_REF
12302 && dependent_scope_ref_p (expression,
12303 type_dependent_expression_p))
12304 return true;
12306 if (TREE_CODE (expression) == FUNCTION_DECL
12307 && DECL_LANG_SPECIFIC (expression)
12308 && DECL_TEMPLATE_INFO (expression)
12309 && (any_dependent_template_arguments_p
12310 (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
12311 return true;
12313 if (TREE_CODE (expression) == TEMPLATE_DECL
12314 && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
12315 return false;
12317 if (TREE_TYPE (expression) == unknown_type_node)
12319 if (TREE_CODE (expression) == ADDR_EXPR)
12320 return type_dependent_expression_p (TREE_OPERAND (expression, 0));
12321 if (TREE_CODE (expression) == COMPONENT_REF
12322 || TREE_CODE (expression) == OFFSET_REF)
12324 if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
12325 return true;
12326 expression = TREE_OPERAND (expression, 1);
12327 if (TREE_CODE (expression) == IDENTIFIER_NODE)
12328 return false;
12330 /* SCOPE_REF with non-null TREE_TYPE is always non-dependent. */
12331 if (TREE_CODE (expression) == SCOPE_REF)
12332 return false;
12334 if (TREE_CODE (expression) == BASELINK)
12335 expression = BASELINK_FUNCTIONS (expression);
12337 if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
12339 if (any_dependent_template_arguments_p
12340 (TREE_OPERAND (expression, 1)))
12341 return true;
12342 expression = TREE_OPERAND (expression, 0);
12344 gcc_assert (TREE_CODE (expression) == OVERLOAD);
12346 while (expression)
12348 if (type_dependent_expression_p (OVL_CURRENT (expression)))
12349 return true;
12350 expression = OVL_NEXT (expression);
12352 return false;
12355 return (dependent_type_p (TREE_TYPE (expression)));
12358 /* Returns TRUE if ARGS (a TREE_LIST of arguments to a function call)
12359 contains a type-dependent expression. */
12361 bool
12362 any_type_dependent_arguments_p (tree args)
12364 while (args)
12366 tree arg = TREE_VALUE (args);
12368 if (type_dependent_expression_p (arg))
12369 return true;
12370 args = TREE_CHAIN (args);
12372 return false;
12375 /* Returns TRUE if the ARG (a template argument) is dependent. */
12377 static bool
12378 dependent_template_arg_p (tree arg)
12380 if (!processing_template_decl)
12381 return false;
12383 if (TREE_CODE (arg) == TEMPLATE_DECL
12384 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
12385 return dependent_template_p (arg);
12386 else if (TYPE_P (arg))
12387 return dependent_type_p (arg);
12388 else
12389 return (type_dependent_expression_p (arg)
12390 || value_dependent_expression_p (arg));
12393 /* Returns true if ARGS (a collection of template arguments) contains
12394 any dependent arguments. */
12396 bool
12397 any_dependent_template_arguments_p (tree args)
12399 int i;
12400 int j;
12402 if (!args)
12403 return false;
12405 for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
12407 tree level = TMPL_ARGS_LEVEL (args, i + 1);
12408 for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
12409 if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
12410 return true;
12413 return false;
12416 /* Returns TRUE if the template TMPL is dependent. */
12418 bool
12419 dependent_template_p (tree tmpl)
12421 if (TREE_CODE (tmpl) == OVERLOAD)
12423 while (tmpl)
12425 if (dependent_template_p (OVL_FUNCTION (tmpl)))
12426 return true;
12427 tmpl = OVL_CHAIN (tmpl);
12429 return false;
12432 /* Template template parameters are dependent. */
12433 if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
12434 || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
12435 return true;
12436 /* So are names that have not been looked up. */
12437 if (TREE_CODE (tmpl) == SCOPE_REF
12438 || TREE_CODE (tmpl) == IDENTIFIER_NODE)
12439 return true;
12440 /* So are member templates of dependent classes. */
12441 if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
12442 return dependent_type_p (DECL_CONTEXT (tmpl));
12443 return false;
12446 /* Returns TRUE if the specialization TMPL<ARGS> is dependent. */
12448 bool
12449 dependent_template_id_p (tree tmpl, tree args)
12451 return (dependent_template_p (tmpl)
12452 || any_dependent_template_arguments_p (args));
12455 /* TYPE is a TYPENAME_TYPE. Returns the ordinary TYPE to which the
12456 TYPENAME_TYPE corresponds. Returns ERROR_MARK_NODE if no such TYPE
12457 can be found. Note that this function peers inside uninstantiated
12458 templates and therefore should be used only in extremely limited
12459 situations. ONLY_CURRENT_P restricts this peering to the currently
12460 open classes hierarchy (which is required when comparing types). */
12462 tree
12463 resolve_typename_type (tree type, bool only_current_p)
12465 tree scope;
12466 tree name;
12467 tree decl;
12468 int quals;
12469 tree pushed_scope;
12471 gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
12473 scope = TYPE_CONTEXT (type);
12474 name = TYPE_IDENTIFIER (type);
12476 /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
12477 it first before we can figure out what NAME refers to. */
12478 if (TREE_CODE (scope) == TYPENAME_TYPE)
12479 scope = resolve_typename_type (scope, only_current_p);
12480 /* If we don't know what SCOPE refers to, then we cannot resolve the
12481 TYPENAME_TYPE. */
12482 if (scope == error_mark_node || TREE_CODE (scope) == TYPENAME_TYPE)
12483 return error_mark_node;
12484 /* If the SCOPE is a template type parameter, we have no way of
12485 resolving the name. */
12486 if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
12487 return type;
12488 /* If the SCOPE is not the current instantiation, there's no reason
12489 to look inside it. */
12490 if (only_current_p && !currently_open_class (scope))
12491 return error_mark_node;
12492 /* If SCOPE is a partial instantiation, it will not have a valid
12493 TYPE_FIELDS list, so use the original template. */
12494 scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
12495 /* Enter the SCOPE so that name lookup will be resolved as if we
12496 were in the class definition. In particular, SCOPE will no
12497 longer be considered a dependent type. */
12498 pushed_scope = push_scope (scope);
12499 /* Look up the declaration. */
12500 decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true);
12501 /* Obtain the set of qualifiers applied to the TYPE. */
12502 quals = cp_type_quals (type);
12503 /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
12504 find a TEMPLATE_DECL. Otherwise, we want to find a TYPE_DECL. */
12505 if (!decl)
12506 type = error_mark_node;
12507 else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
12508 && TREE_CODE (decl) == TYPE_DECL)
12509 type = TREE_TYPE (decl);
12510 else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
12511 && DECL_CLASS_TEMPLATE_P (decl))
12513 tree tmpl;
12514 tree args;
12515 /* Obtain the template and the arguments. */
12516 tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
12517 args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
12518 /* Instantiate the template. */
12519 type = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
12520 /*entering_scope=*/0, tf_error | tf_user);
12522 else
12523 type = error_mark_node;
12524 /* Qualify the resulting type. */
12525 if (type != error_mark_node && quals)
12526 type = cp_build_qualified_type (type, quals);
12527 /* Leave the SCOPE. */
12528 if (pushed_scope)
12529 pop_scope (pushed_scope);
12531 return type;
12534 /* EXPR is an expression which is not type-dependent. Return a proxy
12535 for EXPR that can be used to compute the types of larger
12536 expressions containing EXPR. */
12538 tree
12539 build_non_dependent_expr (tree expr)
12541 tree inner_expr;
12543 /* Preserve null pointer constants so that the type of things like
12544 "p == 0" where "p" is a pointer can be determined. */
12545 if (null_ptr_cst_p (expr))
12546 return expr;
12547 /* Preserve OVERLOADs; the functions must be available to resolve
12548 types. */
12549 inner_expr = (TREE_CODE (expr) == ADDR_EXPR ?
12550 TREE_OPERAND (expr, 0) : expr);
12551 if (is_overloaded_fn (inner_expr)
12552 || TREE_CODE (inner_expr) == OFFSET_REF)
12553 return expr;
12554 /* There is no need to return a proxy for a variable. */
12555 if (TREE_CODE (expr) == VAR_DECL)
12556 return expr;
12557 /* Preserve string constants; conversions from string constants to
12558 "char *" are allowed, even though normally a "const char *"
12559 cannot be used to initialize a "char *". */
12560 if (TREE_CODE (expr) == STRING_CST)
12561 return expr;
12562 /* Preserve arithmetic constants, as an optimization -- there is no
12563 reason to create a new node. */
12564 if (TREE_CODE (expr) == INTEGER_CST || TREE_CODE (expr) == REAL_CST)
12565 return expr;
12566 /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
12567 There is at least one place where we want to know that a
12568 particular expression is a throw-expression: when checking a ?:
12569 expression, there are special rules if the second or third
12570 argument is a throw-expression. */
12571 if (TREE_CODE (expr) == THROW_EXPR)
12572 return expr;
12574 if (TREE_CODE (expr) == COND_EXPR)
12575 return build3 (COND_EXPR,
12576 TREE_TYPE (expr),
12577 TREE_OPERAND (expr, 0),
12578 (TREE_OPERAND (expr, 1)
12579 ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
12580 : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
12581 build_non_dependent_expr (TREE_OPERAND (expr, 2)));
12582 if (TREE_CODE (expr) == COMPOUND_EXPR
12583 && !COMPOUND_EXPR_OVERLOADED (expr))
12584 return build2 (COMPOUND_EXPR,
12585 TREE_TYPE (expr),
12586 TREE_OPERAND (expr, 0),
12587 build_non_dependent_expr (TREE_OPERAND (expr, 1)));
12589 /* Otherwise, build a NON_DEPENDENT_EXPR.
12591 REFERENCE_TYPEs are not stripped for expressions in templates
12592 because doing so would play havoc with mangling. Consider, for
12593 example:
12595 template <typename T> void f<T& g>() { g(); }
12597 In the body of "f", the expression for "g" will have
12598 REFERENCE_TYPE, even though the standard says that it should
12599 not. The reason is that we must preserve the syntactic form of
12600 the expression so that mangling (say) "f<g>" inside the body of
12601 "f" works out correctly. Therefore, the REFERENCE_TYPE is
12602 stripped here. */
12603 return build1 (NON_DEPENDENT_EXPR, non_reference (TREE_TYPE (expr)), expr);
12606 /* ARGS is a TREE_LIST of expressions as arguments to a function call.
12607 Return a new TREE_LIST with the various arguments replaced with
12608 equivalent non-dependent expressions. */
12610 tree
12611 build_non_dependent_args (tree args)
12613 tree a;
12614 tree new_args;
12616 new_args = NULL_TREE;
12617 for (a = args; a; a = TREE_CHAIN (a))
12618 new_args = tree_cons (NULL_TREE,
12619 build_non_dependent_expr (TREE_VALUE (a)),
12620 new_args);
12621 return nreverse (new_args);
12624 #include "gt-cp-pt.h"